diff --git a/.eslintrc b/.eslintrc index 46fb354c11..276d6ff372 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,7 +5,7 @@ "es6": true }, "parserOptions": { - "ecmaVersion": 9, + "ecmaVersion": 11, "sourceType": "module" }, "extends": "eslint:recommended", diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 418bf3c941..607e42d1b4 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -12,10 +12,18 @@ Welcome to ERPNext issue tracker! Before creating an issue, please heed the foll 1. This tracker should only be used to report bugs and request features / enhancements to ERPNext - For questions and general support, checkout the manual https://erpnext.com/docs/user/manual/en or use https://discuss.erpnext.com - - For documentation issues, refer to https://github.com/frappe/erpnext_com 2. Use the search function before creating a new issue. Duplicates will be closed and directed to the original discussion. -3. When making a feature request, make sure to be as verbose as possible. The better you convey your message, the greater the drive to make it happen. +3. When making a feature request, make sure to be as verbose as possible. The better you convey your message, the greater the drive to make it happen. + + +Please keep in mind that we get many many requests and we can't possibly work on all of them, we prioritize development based on the goals of the product and organization. Feature requests are still welcome as it helps us in research when we do decide to work on the requested feature. + +If you're in urgent need to a feature, please try the following channels to get paid developments done quickly: +1. Certified ERPNext partners: https://erpnext.com/partners +2. Developer community on ERPNext forums: https://discuss.erpnext.com/c/developers/5 +3. Telegram group for ERPNext/Frappe development work: https://t.me/erpnext_opps + --> **Is your feature request related to a problem? Please describe.** diff --git a/.github/helper/.flake8_strict b/.github/helper/.flake8_strict index a79137d7c3..198ec7bfe5 100644 --- a/.github/helper/.flake8_strict +++ b/.github/helper/.flake8_strict @@ -66,6 +66,7 @@ ignore = F841, E713, E712, + B023 max-line-length = 200 diff --git a/.github/helper/install.sh b/.github/helper/install.sh index 69749c93af..f0f83b061b 100644 --- a/.github/helper/install.sh +++ b/.github/helper/install.sh @@ -11,7 +11,7 @@ fi cd ~ || exit -sudo apt-get install redis-server libcups2-dev +sudo apt update && sudo apt install redis-server libcups2-dev pip install frappe-bench diff --git a/.github/stale.yml b/.github/stale.yml index 1c2dcf3ba9..da15d32680 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -24,14 +24,4 @@ pulls: :) Also, even if it is closed, you can always reopen the PR when you're ready. Thank you for contributing. -issues: - daysUntilStale: 60 - daysUntilClose: 7 - exemptLabels: - - valid - - to-validate - - QA - markComment: > - This issue has been automatically marked as inactive because it has not had - recent activity and it wasn't validated by maintainer team. It will be - closed within a week if no further activity occurs. +only: pulls diff --git a/.github/workflows/docs-checker.yml b/.github/workflows/docs-checker.yml index b644568d5e..722c1252ed 100644 --- a/.github/workflows/docs-checker.yml +++ b/.github/workflows/docs-checker.yml @@ -12,7 +12,7 @@ jobs: - name: 'Setup Environment' uses: actions/setup-python@v2 with: - python-version: 3.8 + python-version: '3.10' - name: 'Clone repo' uses: actions/checkout@v2 diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index ebb88c9eda..af6d8f26a7 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -11,10 +11,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.10 uses: actions/setup-python@v2 with: - python-version: 3.8 + python-version: '3.10' - name: Install and Run Pre-commit uses: pre-commit/action@v2.0.3 @@ -22,10 +22,8 @@ jobs: - name: Download Semgrep rules run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules - - uses: returntocorp/semgrep-action@v1 - env: - SEMGREP_TIMEOUT: 120 - with: - config: >- - r/python.lang.correctness - ./frappe-semgrep-rules/rules + - name: Download semgrep + run: pip install semgrep==0.97.0 + + - name: Run Semgrep rules + run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness diff --git a/.github/workflows/patch.yml b/.github/workflows/patch.yml index afabe43fec..a71db7289a 100644 --- a/.github/workflows/patch.yml +++ b/.github/workflows/patch.yml @@ -35,9 +35,9 @@ jobs: uses: actions/checkout@v2 - name: Setup Python - uses: actions/setup-python@v2 + uses: "gabrielfalcao/pyenv-action@v9" with: - python-version: 3.8 + versions: 3.10:latest, 3.7:latest - name: Setup Node uses: actions/setup-node@v2 @@ -52,7 +52,7 @@ jobs: uses: actions/cache@v2 with: path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-pip- ${{ runner.os }}- @@ -82,7 +82,10 @@ jobs: ${{ runner.os }}-yarn- - name: Install - run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh + run: | + pip install frappe-bench + pyenv global $(pyenv versions | grep '3.10') + bash ${GITHUB_WORKSPACE}/.github/helper/install.sh env: DB: mariadb TYPE: server @@ -96,18 +99,23 @@ jobs: git -C "apps/frappe" remote set-url upstream https://github.com/frappe/frappe.git git -C "apps/erpnext" remote set-url upstream https://github.com/frappe/erpnext.git + pyenv global $(pyenv versions | grep '3.7') for version in $(seq 12 13) do echo "Updating to v$version" branch_name="version-$version-hotfix" + git -C "apps/frappe" fetch --depth 1 upstream $branch_name:$branch_name git -C "apps/erpnext" fetch --depth 1 upstream $branch_name:$branch_name git -C "apps/frappe" checkout -q -f $branch_name git -C "apps/erpnext" checkout -q -f $branch_name - bench setup requirements --python + rm -rf ~/frappe-bench/env + bench setup env + bench pip install -e ./apps/erpnext + bench --site test_site migrate done @@ -115,4 +123,10 @@ jobs: echo "Updating to latest version" git -C "apps/frappe" checkout -q -f "${GITHUB_BASE_REF:-${GITHUB_REF##*/}}" git -C "apps/erpnext" checkout -q -f "$GITHUB_SHA" + + pyenv global $(pyenv versions | grep '3.10') + rm -rf ~/frappe-bench/env + bench -v setup env + bench pip install -e ./apps/erpnext + bench --site test_site migrate diff --git a/.github/workflows/semantic-commits.yml b/.github/workflows/semantic-commits.yml new file mode 100644 index 0000000000..1744bc33a9 --- /dev/null +++ b/.github/workflows/semantic-commits.yml @@ -0,0 +1,30 @@ +name: Semantic Commits + +on: + pull_request: {} + +permissions: + contents: read + +concurrency: + group: commitcheck-erpnext-${{ github.event.number }} + cancel-in-progress: true + +jobs: + commitlint: + name: Check Commit Titles + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 200 + + - uses: actions/setup-node@v3 + with: + node-version: 14 + check-latest: true + + - name: Check commit titles + run: | + npm install @commitlint/cli @commitlint/config-conventional + npx commitlint --verbose --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/server-tests-mariadb.yml b/.github/workflows/server-tests-mariadb.yml index cdb68499ff..f65cb460f1 100644 --- a/.github/workflows/server-tests-mariadb.yml +++ b/.github/workflows/server-tests-mariadb.yml @@ -39,7 +39,7 @@ jobs: fail-fast: false matrix: - container: [1, 2, 3] + container: [1, 2, 3, 4] name: Python Unit Tests @@ -59,7 +59,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v2 with: - python-version: 3.8 + python-version: '3.10' - name: Setup Node uses: actions/setup-node@v2 @@ -74,7 +74,7 @@ jobs: uses: actions/cache@v2 with: path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-pip- ${{ runner.os }}- diff --git a/.github/workflows/server-tests-postgres.yml b/.github/workflows/server-tests-postgres.yml index 77d3c1ae61..53a94dbfac 100644 --- a/.github/workflows/server-tests-postgres.yml +++ b/.github/workflows/server-tests-postgres.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - container: [1, 2, 3] + container: [1] name: Python Unit Tests @@ -46,7 +46,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v2 with: - python-version: 3.8 + python-version: '3.10' - name: Setup Node uses: actions/setup-node@v2 @@ -61,7 +61,7 @@ jobs: uses: actions/cache@v2 with: path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-pip- ${{ runner.os }}- diff --git a/.mergify.yml b/.mergify.yml index cc8c0802f1..d7f82e696b 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -9,6 +9,8 @@ pull_request_rules: - author!=nabinhait - author!=ankush - author!=deepeshgarg007 + - author!=mergify[bot] + - or: - base=version-13 - base=version-12 @@ -19,6 +21,16 @@ pull_request_rules: @{{author}}, thanks for the contribution, but we do not accept pull requests on a stable branch. Please raise PR on an appropriate hotfix branch. https://github.com/frappe/erpnext/wiki/Pull-Request-Checklist#which-branch + - name: Auto-close PRs on pre-release branch + conditions: + - base=version-13-pre-release + actions: + close: + comment: + message: | + @{{author}}, pre-release branch is not maintained anymore. Releases are directly done by merging hotfix branch to stable branches. + + - name: backport to develop conditions: - label="backport develop" diff --git a/CODEOWNERS b/CODEOWNERS index bfc2601088..ecbae86d96 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -3,33 +3,30 @@ # These owners will be the default owners for everything in # the repo. Unless a later match takes precedence, -erpnext/accounts/ @nextchamp-saqib @deepeshgarg007 -erpnext/assets/ @nextchamp-saqib @deepeshgarg007 -erpnext/erpnext_integrations/ @nextchamp-saqib +erpnext/accounts/ @nextchamp-saqib @deepeshgarg007 @ruthra-kumar +erpnext/assets/ @nextchamp-saqib @deepeshgarg007 @ruthra-kumar erpnext/loan_management/ @nextchamp-saqib @deepeshgarg007 -erpnext/regional @nextchamp-saqib @deepeshgarg007 -erpnext/selling @nextchamp-saqib @deepeshgarg007 +erpnext/regional @nextchamp-saqib @deepeshgarg007 @ruthra-kumar +erpnext/selling @nextchamp-saqib @deepeshgarg007 @ruthra-kumar erpnext/support/ @nextchamp-saqib @deepeshgarg007 pos* @nextchamp-saqib -erpnext/buying/ @marination @rohitwaghchaure @ankush +erpnext/buying/ @marination @rohitwaghchaure @s-aga-r erpnext/e_commerce/ @marination -erpnext/maintenance/ @marination @rohitwaghchaure -erpnext/manufacturing/ @marination @rohitwaghchaure @ankush +erpnext/maintenance/ @marination @rohitwaghchaure @s-aga-r +erpnext/manufacturing/ @marination @rohitwaghchaure @s-aga-r erpnext/portal/ @marination -erpnext/quality_management/ @marination @rohitwaghchaure +erpnext/quality_management/ @marination @rohitwaghchaure @s-aga-r erpnext/shopping_cart/ @marination -erpnext/stock/ @marination @rohitwaghchaure @ankush +erpnext/stock/ @marination @rohitwaghchaure @s-aga-r -erpnext/crm/ @ruchamahabal @pateljannat -erpnext/education/ @ruchamahabal @pateljannat -erpnext/hr/ @ruchamahabal @pateljannat -erpnext/payroll @ruchamahabal @pateljannat -erpnext/projects/ @ruchamahabal @pateljannat +erpnext/crm/ @NagariaHussain +erpnext/education/ @rutwikhdev +erpnext/projects/ @ruchamahabal -erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure @marination @ankush -erpnext/patches/ @deepeshgarg007 @nextchamp-saqib @marination @ankush +erpnext/controllers/ @deepeshgarg007 @nextchamp-saqib @rohitwaghchaure @marination +erpnext/patches/ @deepeshgarg007 @nextchamp-saqib @marination erpnext/public/ @nextchamp-saqib @marination .github/ @ankush -requirements.txt @gavindsouza +pyproject.toml @gavindsouza @ankush diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000000..8847564e53 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,25 @@ +module.exports = { + parserPreset: 'conventional-changelog-conventionalcommits', + rules: { + 'subject-empty': [2, 'never'], + 'type-case': [2, 'always', 'lower-case'], + 'type-empty': [2, 'never'], + 'type-enum': [ + 2, + 'always', + [ + 'build', + 'chore', + 'ci', + 'docs', + 'feat', + 'fix', + 'perf', + 'refactor', + 'revert', + 'style', + 'test', + ], + ], + }, +}; diff --git a/cypress.json b/cypress.json deleted file mode 100644 index 02b10d893f..0000000000 --- a/cypress.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "baseUrl": "http://test_site:8000/", - "projectId": "da59y9", - "adminPassword": "admin", - "defaultCommandTimeout": 20000, - "pageLoadTimeout": 15000, - "retries": { - "runMode": 2, - "openMode": 2 - } -} diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index da18d9352a..0000000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} \ No newline at end of file diff --git a/cypress/integration/test_bulk_transaction_processing.js b/cypress/integration/test_bulk_transaction_processing.js deleted file mode 100644 index 428ec5100b..0000000000 --- a/cypress/integration/test_bulk_transaction_processing.js +++ /dev/null @@ -1,44 +0,0 @@ -describe("Bulk Transaction Processing", () => { - before(() => { - cy.login(); - cy.visit("/app/website"); - }); - - it("Creates To Sales Order", () => { - cy.visit("/app/sales-order"); - cy.url().should("include", "/sales-order"); - cy.window() - .its("frappe.csrf_token") - .then((csrf_token) => { - return cy - .request({ - url: "/api/method/erpnext.tests.ui_test_bulk_transaction_processing.create_records", - method: "POST", - headers: { - Accept: "application/json", - "Content-Type": "application/json", - "X-Frappe-CSRF-Token": csrf_token, - }, - timeout: 60000, - }) - .then((res) => { - expect(res.status).eq(200); - }); - }); - cy.wait(5000); - cy.get( - ".list-row-head > .list-header-subject > .list-row-col > .list-check-all" - ).check({ force: true }); - cy.wait(3000); - cy.get(".actions-btn-group > .btn-primary").click({ force: true }); - cy.wait(3000); - cy.get(".dropdown-menu-right > .user-action > .dropdown-item") - .contains("Sales Invoice") - .click({ force: true }); - cy.wait(3000); - cy.get(".modal-content > .modal-footer > .standard-actions") - .contains("Yes") - .click({ force: true }); - cy.contains("Creation of Sales Invoice successful"); - }); -}); diff --git a/cypress/integration/test_customer.js b/cypress/integration/test_customer.js deleted file mode 100644 index 3d6ed5d0d8..0000000000 --- a/cypress/integration/test_customer.js +++ /dev/null @@ -1,13 +0,0 @@ - -context('Customer', () => { - before(() => { - cy.login(); - }); - it('Check Customer Group', () => { - cy.visit(`app/customer/`); - cy.get('.primary-action').click(); - cy.wait(500); - cy.get('.custom-actions > .btn').click(); - cy.get_field('customer_group', 'Link').should('have.value', 'All Customer Groups'); - }); -}); diff --git a/cypress/integration/test_item.js b/cypress/integration/test_item.js deleted file mode 100644 index fcb7533a22..0000000000 --- a/cypress/integration/test_item.js +++ /dev/null @@ -1,44 +0,0 @@ -describe("Test Item Dashboard", () => { - before(() => { - cy.login(); - cy.visit("/app/item"); - cy.insert_doc( - "Item", - { - item_code: "e2e_test_item", - item_group: "All Item Groups", - opening_stock: 42, - valuation_rate: 100, - }, - true - ); - cy.go_to_doc("item", "e2e_test_item"); - }); - - it("should show dashboard with correct data on first load", () => { - cy.get(".stock-levels").contains("Stock Levels").should("be.visible"); - cy.get(".stock-levels").contains("e2e_test_item").should("exist"); - - // reserved and available qty - cy.get(".stock-levels .inline-graph-count") - .eq(0) - .contains("0") - .should("exist"); - cy.get(".stock-levels .inline-graph-count") - .eq(1) - .contains("42") - .should("exist"); - }); - - it("should persist on field change", () => { - cy.get('input[data-fieldname="disabled"]').check(); - cy.wait(500); - cy.get(".stock-levels").contains("Stock Levels").should("be.visible"); - cy.get(".stock-levels").should("have.length", 1); - }); - - it("should persist on reload", () => { - cy.reload(); - cy.get(".stock-levels").contains("Stock Levels").should("be.visible"); - }); -}); diff --git a/cypress/integration/test_organizational_chart_desktop.js b/cypress/integration/test_organizational_chart_desktop.js deleted file mode 100644 index 464cce48d0..0000000000 --- a/cypress/integration/test_organizational_chart_desktop.js +++ /dev/null @@ -1,116 +0,0 @@ -context('Organizational Chart', () => { - before(() => { - cy.login(); - cy.visit('/app/website'); - }); - - it('navigates to org chart', () => { - cy.visit('/app'); - cy.visit('/app/organizational-chart'); - cy.url().should('include', '/organizational-chart'); - - cy.window().its('frappe.csrf_token').then(csrf_token => { - return cy.request({ - url: `/api/method/erpnext.tests.ui_test_helpers.create_employee_records`, - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - 'X-Frappe-CSRF-Token': csrf_token - }, - timeout: 60000 - }).then(res => { - expect(res.status).eq(200); - cy.get('.frappe-control[data-fieldname=company] input').focus().as('input'); - cy.get('@input') - .clear({ force: true }) - .type('Test Org Chart{downarrow}{enter}', { force: true }) - .blur({ force: true }); - }); - }); - }); - - it('renders root nodes and loads children for the first expandable node', () => { - // check rendered root nodes and the node name, title, connections - cy.get('.hierarchy').find('.root-level ul.node-children').children() - .should('have.length', 2) - .first() - .as('first-child'); - - cy.get('@first-child').get('.node-name').contains('Test Employee 1'); - cy.get('@first-child').get('.node-info').find('.node-title').contains('CEO'); - cy.get('@first-child').get('.node-info').find('.node-connections').contains('· 2 Connections'); - - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - // children of 1st root visible - cy.get(`div[data-parent="${employee_records.message[0]}"]`).as('child-node'); - cy.get('@child-node') - .should('have.length', 1) - .should('be.visible'); - cy.get('@child-node').get('.node-name').contains('Test Employee 3'); - - // connectors between first root node and immediate child - cy.get(`path[data-parent="${employee_records.message[0]}"]`) - .should('be.visible') - .invoke('attr', 'data-child') - .should('equal', employee_records.message[2]); - }); - }); - - it('hides active nodes children and connectors on expanding sibling node', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - // click sibling - cy.get(`#${employee_records.message[1]}`) - .click() - .should('have.class', 'active'); - - // child nodes and connectors hidden - cy.get(`[data-parent="${employee_records.message[0]}"]`).should('not.be.visible'); - cy.get(`path[data-parent="${employee_records.message[0]}"]`).should('not.be.visible'); - }); - }); - - it('collapses previous level nodes and refreshes connectors on expanding child node', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - // click child node - cy.get(`#${employee_records.message[3]}`) - .click() - .should('have.class', 'active'); - - // previous level nodes: parent should be on active-path; other nodes should be collapsed - cy.get(`#${employee_records.message[0]}`).should('have.class', 'collapsed'); - cy.get(`#${employee_records.message[1]}`).should('have.class', 'active-path'); - - // previous level connectors refreshed - cy.get(`path[data-parent="${employee_records.message[1]}"]`) - .should('have.class', 'collapsed-connector'); - - // child node's children and connectors rendered - cy.get(`[data-parent="${employee_records.message[3]}"]`).should('be.visible'); - cy.get(`path[data-parent="${employee_records.message[3]}"]`).should('be.visible'); - }); - }); - - it('expands previous level nodes', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[0]}`) - .click() - .should('have.class', 'active'); - - cy.get(`[data-parent="${employee_records.message[0]}"]`) - .should('be.visible'); - - cy.get('ul.hierarchy').children().should('have.length', 2); - cy.get(`#connectors`).children().should('have.length', 1); - }); - }); - - it('edit node navigates to employee master', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[0]}`).find('.btn-edit-node') - .click(); - - cy.url().should('include', `/employee/${employee_records.message[0]}`); - }); - }); -}); diff --git a/cypress/integration/test_organizational_chart_mobile.js b/cypress/integration/test_organizational_chart_mobile.js deleted file mode 100644 index 971ac6d3ef..0000000000 --- a/cypress/integration/test_organizational_chart_mobile.js +++ /dev/null @@ -1,195 +0,0 @@ -context('Organizational Chart Mobile', () => { - before(() => { - cy.login(); - cy.visit('/app/website'); - }); - - it('navigates to org chart', () => { - cy.viewport(375, 667); - cy.visit('/app'); - cy.visit('/app/organizational-chart'); - cy.url().should('include', '/organizational-chart'); - - cy.window().its('frappe.csrf_token').then(csrf_token => { - return cy.request({ - url: `/api/method/erpnext.tests.ui_test_helpers.create_employee_records`, - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - 'X-Frappe-CSRF-Token': csrf_token - }, - timeout: 60000 - }).then(res => { - expect(res.status).eq(200); - cy.get('.frappe-control[data-fieldname=company] input').focus().as('input'); - cy.get('@input') - .clear({ force: true }) - .type('Test Org Chart{downarrow}{enter}', { force: true }) - .blur({ force: true }); - }); - }); - }); - - it('renders root nodes', () => { - // check rendered root nodes and the node name, title, connections - cy.get('.hierarchy-mobile').find('.root-level').children() - .should('have.length', 2) - .first() - .as('first-child'); - - cy.get('@first-child').get('.node-name').contains('Test Employee 1'); - cy.get('@first-child').get('.node-info').find('.node-title').contains('CEO'); - cy.get('@first-child').get('.node-info').find('.node-connections').contains('· 2'); - }); - - it('expands root node', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[1]}`) - .click() - .should('have.class', 'active'); - - // other root node removed - cy.get(`#${employee_records.message[0]}`).should('not.exist'); - - // children of active root node - cy.get('.hierarchy-mobile').find('.level').first().find('ul.node-children').children() - .should('have.length', 2); - - cy.get(`div[data-parent="${employee_records.message[1]}"]`).first().as('child-node'); - cy.get('@child-node').should('be.visible'); - - cy.get('@child-node') - .get('.node-name') - .contains('Test Employee 4'); - - // connectors between root node and immediate children - cy.get(`path[data-parent="${employee_records.message[1]}"]`).as('connectors'); - cy.get('@connectors') - .should('have.length', 2) - .should('be.visible'); - - cy.get('@connectors') - .first() - .invoke('attr', 'data-child') - .should('eq', employee_records.message[3]); - }); - }); - - it('expands child node', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[3]}`) - .click() - .should('have.class', 'active') - .as('expanded_node'); - - // 2 levels on screen; 1 on active path; 1 collapsed - cy.get('.hierarchy-mobile').children().should('have.length', 2); - cy.get(`#${employee_records.message[1]}`).should('have.class', 'active-path'); - - // children of expanded node visible - cy.get('@expanded_node') - .next() - .should('have.class', 'node-children') - .as('node-children'); - - cy.get('@node-children').children().should('have.length', 1); - cy.get('@node-children') - .first() - .get('.node-card') - .should('have.class', 'active-child') - .contains('Test Employee 7'); - - // orphan connectors removed - cy.get(`#connectors`).children().should('have.length', 2); - }); - }); - - it('renders sibling group', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - // sibling group visible for parent - cy.get(`#${employee_records.message[1]}`) - .next() - .as('sibling_group'); - - cy.get('@sibling_group') - .should('have.attr', 'data-parent', 'undefined') - .should('have.class', 'node-group') - .and('have.class', 'collapsed'); - - cy.get('@sibling_group').get('.avatar-group').children().as('siblings'); - cy.get('@siblings').should('have.length', 1); - cy.get('@siblings') - .first() - .should('have.attr', 'title', 'Test Employee 1'); - - }); - }); - - it('expands previous level nodes', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[6]}`) - .click() - .should('have.class', 'active'); - - // clicking on previous level node should remove all the nodes ahead - // and expand that node - cy.get(`#${employee_records.message[3]}`).click(); - cy.get(`#${employee_records.message[3]}`) - .should('have.class', 'active') - .should('not.have.class', 'active-path'); - - cy.get(`#${employee_records.message[6]}`).should('have.class', 'active-child'); - cy.get('.hierarchy-mobile').children().should('have.length', 2); - cy.get(`#connectors`).children().should('have.length', 2); - }); - }); - - it('expands sibling group', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - // sibling group visible for parent - cy.get(`#${employee_records.message[6]}`).click(); - - cy.get(`#${employee_records.message[3]}`) - .next() - .click(); - - // siblings of parent should be visible - cy.get('.hierarchy-mobile').prev().as('sibling_group'); - cy.get('@sibling_group') - .should('exist') - .should('have.class', 'sibling-group') - .should('not.have.class', 'collapsed'); - - cy.get(`#${employee_records.message[1]}`) - .should('be.visible') - .should('have.class', 'active'); - - cy.get(`[data-parent="${employee_records.message[1]}"]`) - .should('be.visible') - .should('have.length', 2) - .should('have.class', 'active-child'); - }); - }); - - it('goes to the respective level after clicking on non-collapsed sibling group', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(() => { - // click on non-collapsed sibling group - cy.get('.hierarchy-mobile') - .prev() - .click(); - - // should take you to that level - cy.get('.hierarchy-mobile').find('li.level .node-card').should('have.length', 2); - }); - }); - - it('edit node navigates to employee master', () => { - cy.call('erpnext.tests.ui_test_helpers.get_employee_records').then(employee_records => { - cy.get(`#${employee_records.message[0]}`).find('.btn-edit-node') - .click(); - - cy.url().should('include', `/employee/${employee_records.message[0]}`); - }); - }); -}); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index 07d9804a73..0000000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -module.exports = () => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -}; diff --git a/cypress/support/commands.js b/cypress/support/commands.js deleted file mode 100644 index 7ddc80ab8d..0000000000 --- a/cypress/support/commands.js +++ /dev/null @@ -1,31 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }); -// -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }); -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }); -// -// -// -- This is will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }); - -const slug = (name) => name.toLowerCase().replace(" ", "-"); - -Cypress.Commands.add("go_to_doc", (doctype, name) => { - cy.visit(`/app/${slug(doctype)}/${encodeURIComponent(name)}`); -}); diff --git a/cypress/support/index.js b/cypress/support/index.js deleted file mode 100644 index 72070cc81c..0000000000 --- a/cypress/support/index.js +++ /dev/null @@ -1,26 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands'; -import '../../../frappe/cypress/support/commands' // eslint-disable-line - - -// Alternatively you can use CommonJS syntax: -// require('./commands') - -Cypress.Cookies.defaults({ - preserve: 'sid' -}); diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json deleted file mode 100644 index d90ebf6856..0000000000 --- a/cypress/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "baseUrl": "../node_modules", - "types": [ - "cypress" - ] - }, - "include": [ - "**/*.*" - ] -} \ No newline at end of file diff --git a/dev-requirements.txt b/dev-requirements.txt deleted file mode 100644 index 15545c0efa..0000000000 --- a/dev-requirements.txt +++ /dev/null @@ -1 +0,0 @@ -hypothesis~=6.31.0 diff --git a/erpnext/accounts/README.md b/erpnext/accounts/README.md index da1f201570..15f7039207 100644 --- a/erpnext/accounts/README.md +++ b/erpnext/accounts/README.md @@ -10,4 +10,42 @@ Entries are: - Sales Invoice (Itemised) - Purchase Invoice (Itemised) -All accounting entries are stored in the `General Ledger` \ No newline at end of file +All accounting entries are stored in the `General Ledger` + +## Payment Ledger +Transactions on Receivable and Payable Account types will also be stored in `Payment Ledger`. This is so that payment reconciliation process only requires update on this ledger. + +### Key Fields +| Field | Description | +|----------------------|----------------------------------| +| `account_type` | Receivable/Payable | +| `account` | Accounting head | +| `party` | Party Name | +| `voucher_no` | Voucher No | +| `against_voucher_no` | Linked voucher(secondary effect) | +| `amount` | can be +ve/-ve | + +### Design +`debit` and `credit` have been replaced with `account_type` and `amount`. `against_voucher_no` is populated for all entries. So, outstanding amount can be calculated by summing up amount only using `against_voucher_no`. + +Ex: +1. Consider an invoice for ₹100 and a partial payment of ₹80 against that invoice. Payment Ledger will have following entries. + +| voucher_no | against_voucher_no | amount | +|------------|--------------------|--------| +| SINV-01 | SINV-01 | 100 | +| PAY-01 | SINV-01 | -80 | + + +2. Reconcile a Credit Note against an invoice using a Journal Entry + +An invoice for ₹100 partially reconciled against a credit of ₹70 using a Journal Entry. Payment Ledger will have the following entries. + +| voucher_no | against_voucher_no | amount | +|------------|--------------------|--------| +| SINV-01 | SINV-01 | 100 | +| | | | +| CR-NOTE-01 | CR-NOTE-01 | -70 | +| | | | +| JE-01 | CR-NOTE-01 | +70 | +| JE-01 | SINV-01 | -70 | diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index c71ea3648b..2610c8655e 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -322,9 +322,9 @@ def get_parent_account(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """select name from tabAccount where is_group = 1 and docstatus != 2 and company = %s - and %s like %s order by name limit %s, %s""" + and %s like %s order by name limit %s offset %s""" % ("%s", searchfield, "%s", "%s", "%s"), - (filters["company"], "%%%s%%" % txt, start, page_len), + (filters["company"], "%%%s%%" % txt, page_len, start), as_list=1, ) diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py index 3f1998a3b3..ce1ed336d0 100644 --- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py +++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py @@ -234,17 +234,19 @@ def get_checks_for_pl_and_bs_accounts(): return dimensions -def get_dimension_with_children(doctype, dimension): +def get_dimension_with_children(doctype, dimensions): - if isinstance(dimension, list): - dimension = dimension[0] + if isinstance(dimensions, str): + dimensions = [dimensions] all_dimensions = [] - lft, rgt = frappe.db.get_value(doctype, dimension, ["lft", "rgt"]) - children = frappe.get_all( - doctype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]}, order_by="lft" - ) - all_dimensions += [c.name for c in children] + + for dimension in dimensions: + lft, rgt = frappe.db.get_value(doctype, dimension, ["lft", "rgt"]) + children = frappe.get_all( + doctype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]}, order_by="lft" + ) + all_dimensions += [c.name for c in children] return all_dimensions diff --git a/erpnext/accounts/doctype/accounting_period/accounting_period.py b/erpnext/accounts/doctype/accounting_period/accounting_period.py index 0c15d6a207..80c9715e8e 100644 --- a/erpnext/accounts/doctype/accounting_period/accounting_period.py +++ b/erpnext/accounts/doctype/accounting_period/accounting_period.py @@ -49,15 +49,9 @@ class AccountingPeriod(Document): @frappe.whitelist() def get_doctypes_for_closing(self): docs_for_closing = [] - doctypes = [ - "Sales Invoice", - "Purchase Invoice", - "Journal Entry", - "Payroll Entry", - "Bank Clearance", - "Asset", - "Stock Entry", - ] + # get period closing doctypes from all the apps + doctypes = frappe.get_hooks("period_closing_doctypes") + closed_doctypes = [{"document_type": doctype, "closed": 1} for doctype in doctypes] for closed_doctype in closed_doctypes: docs_for_closing.append(closed_doctype) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 417611fecd..3e0b82c561 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -18,6 +18,7 @@ "automatically_fetch_payment_terms", "column_break_17", "enable_common_party_accounting", + "allow_multi_currency_invoices_against_single_party_account", "report_setting_section", "use_custom_cash_flow", "deferred_accounting_settings_section", @@ -339,6 +340,13 @@ "fieldname": "report_setting_section", "fieldtype": "Section Break", "label": "Report Setting" + }, + { + "default": "0", + "description": "Enabling this will allow creation of multi-currency invoices against single party account in company currency", + "fieldname": "allow_multi_currency_invoices_against_single_party_account", + "fieldtype": "Check", + "label": "Allow multi-currency invoices against single party account " } ], "icon": "icon-cog", @@ -346,7 +354,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2022-04-08 14:45:06.796418", + "modified": "2022-07-11 13:37:50.605141", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py index 98ba399a35..1a572d9823 100644 --- a/erpnext/accounts/doctype/bank_clearance/bank_clearance.py +++ b/erpnext/accounts/doctype/bank_clearance/bank_clearance.py @@ -104,7 +104,7 @@ class BankClearance(Document): loan_repayment = frappe.qb.DocType("Loan Repayment") - loan_repayments = ( + query = ( frappe.qb.from_(loan_repayment) .select( ConstantColumn("Loan Repayment").as_("payment_document"), @@ -118,13 +118,17 @@ class BankClearance(Document): ) .where(loan_repayment.docstatus == 1) .where(loan_repayment.clearance_date.isnull()) - .where(loan_repayment.repay_from_salary == 0) .where(loan_repayment.posting_date >= self.from_date) .where(loan_repayment.posting_date <= self.to_date) .where(loan_repayment.payment_account.isin([self.bank_account, self.account])) - .orderby(loan_repayment.posting_date) - .orderby(loan_repayment.name, frappe.qb.desc) - ).run(as_dict=1) + ) + + if frappe.db.has_column("Loan Repayment", "repay_from_salary"): + query = query.where((loan_repayment.repay_from_salary == 0)) + + query = query.orderby(loan_repayment.posting_date).orderby(loan_repayment.name, frappe.qb.desc) + + loan_repayments = query.run(as_dict=True) pos_sales_invoices, pos_purchase_invoices = [], [] if self.include_pos_transactions: diff --git a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py index 0efe086d94..cc3727ce83 100644 --- a/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py +++ b/erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py @@ -10,7 +10,6 @@ from frappe.model.document import Document from frappe.query_builder.custom import ConstantColumn from frappe.utils import flt -from erpnext import get_company_currency from erpnext.accounts.doctype.bank_transaction.bank_transaction import get_paid_amount from erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement import ( get_amounts_not_reflected_in_system, @@ -368,6 +367,27 @@ def get_queries(bank_account, company, transaction, document_types): account_from_to = "paid_to" if transaction.deposit > 0 else "paid_from" queries = [] + # get matching queries from all the apps + for method_name in frappe.get_hooks("get_matching_queries"): + queries.extend( + frappe.get_attr(method_name)( + bank_account, + company, + transaction, + document_types, + amount_condition, + account_from_to, + ) + or [] + ) + + return queries + + +def get_matching_queries( + bank_account, company, transaction, document_types, amount_condition, account_from_to +): + queries = [] if "payment_entry" in document_types: pe_amount_matching = get_pe_matching_query(amount_condition, account_from_to, transaction) queries.extend([pe_amount_matching]) @@ -385,10 +405,6 @@ def get_queries(bank_account, company, transaction, document_types): pi_amount_matching = get_pi_matching_query(amount_condition) queries.extend([pi_amount_matching]) - if "expense_claim" in document_types: - ec_amount_matching = get_ec_matching_query(bank_account, company, amount_condition) - queries.extend([ec_amount_matching]) - return queries @@ -467,11 +483,13 @@ def get_lr_matching_query(bank_account, amount_condition, filters): loan_repayment.posting_date, ) .where(loan_repayment.docstatus == 1) - .where(loan_repayment.repay_from_salary == 0) .where(loan_repayment.clearance_date.isnull()) .where(loan_repayment.payment_account == bank_account) ) + if frappe.db.has_column("Loan Repayment", "repay_from_salary"): + query = query.where((loan_repayment.repay_from_salary == 0)) + if amount_condition: query.where(loan_repayment.amount_paid == filters.get("amount")) else: @@ -602,37 +620,3 @@ def get_pi_matching_query(amount_condition): AND ifnull(clearance_date, '') = "" AND cash_bank_account = %(bank_account)s """ - - -def get_ec_matching_query(bank_account, company, amount_condition): - # get matching Expense Claim query - mode_of_payments = [ - x["parent"] - for x in frappe.db.get_all( - "Mode of Payment Account", filters={"default_account": bank_account}, fields=["parent"] - ) - ] - mode_of_payments = "('" + "', '".join(mode_of_payments) + "' )" - company_currency = get_company_currency(company) - return f""" - SELECT - ( CASE WHEN employee = %(party)s THEN 1 ELSE 0 END - + 1 ) AS rank, - 'Expense Claim' as doctype, - name, - total_sanctioned_amount as paid_amount, - '' as reference_no, - '' as reference_date, - employee as party, - 'Employee' as party_type, - posting_date, - '{company_currency}' as currency - FROM - `tabExpense Claim` - WHERE - total_sanctioned_amount {amount_condition} %(amount)s - AND docstatus = 1 - AND is_paid = 1 - AND ifnull(clearance_date, '') = "" - AND mode_of_payment in {mode_of_payments} - """ diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js index 3758b524da..6f2900a680 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.js +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.js @@ -3,28 +3,21 @@ frappe.ui.form.on("Bank Transaction", { onload(frm) { - frm.set_query("payment_document", "payment_entries", function () { + frm.set_query("payment_document", "payment_entries", function() { + const payment_doctypes = frm.events.get_payment_doctypes(frm); return { filters: { - name: [ - "in", - [ - "Payment Entry", - "Journal Entry", - "Sales Invoice", - "Purchase Invoice", - "Expense Claim", - ], - ], + name: ["in", payment_doctypes], }, }; }); }, - bank_account: function (frm) { + + bank_account: function(frm) { set_bank_statement_filter(frm); }, - setup: function (frm) { + setup: function(frm) { frm.set_query("party_type", function () { return { filters: { @@ -33,6 +26,16 @@ frappe.ui.form.on("Bank Transaction", { }; }); }, + + get_payment_doctypes: function() { + // get payment doctypes from all the apps + return [ + "Payment Entry", + "Journal Entry", + "Sales Invoice", + "Purchase Invoice", + ]; + } }); frappe.ui.form.on("Bank Transaction Payments", { diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index 9a0891f147..a788514335 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -58,18 +58,10 @@ class BankTransaction(StatusUpdater): def clear_linked_payment_entries(self, for_cancel=False): for payment_entry in self.payment_entries: - if payment_entry.payment_document in [ - "Payment Entry", - "Journal Entry", - "Purchase Invoice", - "Expense Claim", - "Loan Repayment", - "Loan Disbursement", - ]: - self.clear_simple_entry(payment_entry, for_cancel=for_cancel) - - elif payment_entry.payment_document == "Sales Invoice": + if payment_entry.payment_document == "Sales Invoice": self.clear_sales_invoice(payment_entry, for_cancel=for_cancel) + elif payment_entry.payment_document in get_doctypes_for_bank_reconciliation(): + self.clear_simple_entry(payment_entry, for_cancel=for_cancel) def clear_simple_entry(self, payment_entry, for_cancel=False): if payment_entry.payment_document == "Payment Entry": @@ -95,6 +87,12 @@ class BankTransaction(StatusUpdater): ) +@frappe.whitelist() +def get_doctypes_for_bank_reconciliation(): + """Get Bank Reconciliation doctypes from all the apps""" + return frappe.get_hooks("bank_reconciliation_doctypes") + + def get_reconciled_bank_transactions(payment_entry): reconciled_bank_transactions = frappe.get_all( "Bank Transaction Payments", diff --git a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py index 8cbed4c795..a5d0413799 100644 --- a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py @@ -5,6 +5,7 @@ import json import unittest import frappe +from frappe.tests.utils import FrappeTestCase from erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool import ( get_linked_payments, @@ -18,28 +19,21 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sal test_dependencies = ["Item", "Cost Center"] -class TestBankTransaction(unittest.TestCase): - @classmethod - def setUpClass(cls): +class TestBankTransaction(FrappeTestCase): + def setUp(self): + for dt in [ + "Loan Repayment", + "Bank Transaction", + "Payment Entry", + "Payment Entry Reference", + "POS Profile", + ]: + frappe.db.delete(dt) + make_pos_profile() add_transactions() add_vouchers() - @classmethod - def tearDownClass(cls): - for bt in frappe.get_all("Bank Transaction"): - doc = frappe.get_doc("Bank Transaction", bt.name) - if doc.docstatus == 1: - doc.cancel() - doc.delete() - - # Delete directly in DB to avoid validation errors for countries not allowing deletion - frappe.db.sql("""delete from `tabPayment Entry Reference`""") - frappe.db.sql("""delete from `tabPayment Entry`""") - - # Delete POS Profile - frappe.db.sql("delete from `tabPOS Profile`") - # This test checks if ERPNext is able to provide a linked payment for a bank transaction based on the amount of the bank transaction. def test_linked_payments(self): bank_transaction = frappe.get_doc( @@ -155,6 +149,35 @@ class TestBankTransaction(unittest.TestCase): is not None ) + def test_matching_loan_repayment(self): + from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts + + create_loan_accounts() + bank_account = frappe.get_doc( + { + "doctype": "Bank Account", + "account_name": "Payment Account", + "bank": "Citi Bank", + "account": "Payment Account - _TC", + } + ).insert(ignore_if_duplicate=True) + + bank_transaction = frappe.get_doc( + { + "doctype": "Bank Transaction", + "description": "Loan Repayment - OPSKATTUZWXXX AT776000000098709837 Herr G", + "date": "2018-10-27", + "deposit": 500, + "currency": "INR", + "bank_account": bank_account.name, + } + ).submit() + + repayment_entry = create_loan_and_repayment() + + linked_payments = get_linked_payments(bank_transaction.name, ["loan_repayment", "exact_match"]) + self.assertEqual(linked_payments[0][2], repayment_entry.name) + def create_bank_account(bank_name="Citi Bank", account_name="_Test Bank - _TC"): try: @@ -364,3 +387,59 @@ def add_vouchers(): ) si.insert() si.submit() + + +def create_loan_and_repayment(): + from erpnext.loan_management.doctype.loan.test_loan import ( + create_loan, + create_loan_type, + create_repayment_entry, + make_loan_disbursement_entry, + ) + from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( + process_loan_interest_accrual_for_term_loans, + ) + from erpnext.setup.doctype.employee.test_employee import make_employee + + create_loan_type( + "Personal Loan", + 500000, + 8.4, + is_term_loan=1, + mode_of_payment="Cash", + disbursement_account="Disbursement Account - _TC", + payment_account="Payment Account - _TC", + loan_account="Loan Account - _TC", + interest_income_account="Interest Income Account - _TC", + penalty_income_account="Penalty Income Account - _TC", + ) + + applicant = make_employee("test_bank_reco@loan.com", company="_Test Company") + loan = create_loan(applicant, "Personal Loan", 5000, "Repay Over Number of Periods", 20) + loan = frappe.get_doc( + { + "doctype": "Loan", + "applicant_type": "Employee", + "company": "_Test Company", + "applicant": applicant, + "loan_type": "Personal Loan", + "loan_amount": 5000, + "repayment_method": "Repay Fixed Amount per Period", + "monthly_repayment_amount": 500, + "repayment_start_date": "2018-09-27", + "is_term_loan": 1, + "posting_date": "2018-09-27", + } + ).insert() + + make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date="2018-09-27") + process_loan_interest_accrual_for_term_loans(posting_date="2018-10-27") + + repayment_entry = create_repayment_entry( + loan.name, + applicant, + "2018-10-27", + 500, + ) + repayment_entry.submit() + return repayment_entry diff --git a/erpnext/accounts/doctype/c_form/README.md b/erpnext/accounts/doctype/c_form/README.md deleted file mode 100644 index 25c13b0849..0000000000 --- a/erpnext/accounts/doctype/c_form/README.md +++ /dev/null @@ -1 +0,0 @@ -C Form (India specific only) - Will be deprecated. \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form/c_form.js b/erpnext/accounts/doctype/c_form/c_form.js deleted file mode 100644 index 846408ff24..0000000000 --- a/erpnext/accounts/doctype/c_form/c_form.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -//c-form js file -// ----------------------------- - -frappe.ui.form.on('C-Form', { - setup(frm) { - frm.fields_dict.invoices.grid.get_field("invoice_no").get_query = function(doc) { - return { - filters: { - "docstatus": 1, - "customer": doc.customer, - "company": doc.company, - "c_form_applicable": 'Yes', - "c_form_no": '' - } - }; - } - - frm.fields_dict.state.get_query = function() { - return { - filters: { - country: "India" - } - }; - } - } -}); - -frappe.ui.form.on('C-Form Invoice Detail', { - invoice_no(frm, cdt, cdn) { - let d = frappe.get_doc(cdt, cdn); - - if (d.invoice_no) { - frm.call('get_invoice_details', { - invoice_no: d.invoice_no - }).then(r => { - frappe.model.set_value(cdt, cdn, r.message); - }); - } - } -}); diff --git a/erpnext/accounts/doctype/c_form/c_form.json b/erpnext/accounts/doctype/c_form/c_form.json deleted file mode 100644 index 19c167511b..0000000000 --- a/erpnext/accounts/doctype/c_form/c_form.json +++ /dev/null @@ -1,511 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "naming_series:", - "beta": 0, - "creation": "2013-03-07 11:55:06", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 0, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "naming_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Series", - "length": 0, - "no_copy": 0, - "options": "ACC-CF-.YYYY.-", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 1, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "c_form_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "C-Form No", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "received_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Received Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "customer", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Customer", - "length": 0, - "no_copy": 0, - "options": "Customer", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break1", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "50%", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0, - "width": "50%" - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "quarter", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Quarter", - "length": 0, - "no_copy": 0, - "options": "\nI\nII\nIII\nIV", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "total_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Total Amount", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "state", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "State", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break0", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "invoices", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Invoices", - "length": 0, - "no_copy": 0, - "options": "C-Form Invoice Detail", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "total_invoiced_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Total Invoiced Amount", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "C-Form", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-file-text", - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 3, - "modified": "2018-08-21 14:44:30.558767", - "modified_by": "Administrator", - "module": "Accounts", - "name": "C-Form", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 1, - "print": 0, - "read": 1, - "report": 1, - "role": "All", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_order": "DESC", - "timeline_field": "customer", - "track_changes": 0, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py deleted file mode 100644 index 0de75c7869..0000000000 --- a/erpnext/accounts/doctype/c_form/c_form.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt - - -class CForm(Document): - def validate(self): - """Validate invoice that c-form is applicable - and no other c-form is received for that""" - - for d in self.get("invoices"): - if d.invoice_no: - inv = frappe.db.sql( - """select c_form_applicable, c_form_no from - `tabSales Invoice` where name = %s and docstatus = 1""", - d.invoice_no, - ) - - if inv and inv[0][0] != "Yes": - frappe.throw(_("C-form is not applicable for Invoice: {0}").format(d.invoice_no)) - - elif inv and inv[0][1] and inv[0][1] != self.name: - frappe.throw( - _( - """Invoice {0} is tagged in another C-form: {1}. - If you want to change C-form no for this invoice, - please remove invoice no from the previous c-form and then try again""".format( - d.invoice_no, inv[0][1] - ) - ) - ) - - elif not inv: - frappe.throw( - _( - "Row {0}: Invoice {1} is invalid, it might be cancelled / does not exist. \ - Please enter a valid Invoice".format( - d.idx, d.invoice_no - ) - ) - ) - - def on_update(self): - """Update C-Form No on invoices""" - self.set_total_invoiced_amount() - - def on_submit(self): - self.set_cform_in_sales_invoices() - - def before_cancel(self): - # remove cform reference - frappe.db.sql("""update `tabSales Invoice` set c_form_no=null where c_form_no=%s""", self.name) - - def set_cform_in_sales_invoices(self): - inv = [d.invoice_no for d in self.get("invoices")] - if inv: - frappe.db.sql( - """update `tabSales Invoice` set c_form_no=%s, modified=%s where name in (%s)""" - % ("%s", "%s", ", ".join(["%s"] * len(inv))), - tuple([self.name, self.modified] + inv), - ) - - frappe.db.sql( - """update `tabSales Invoice` set c_form_no = null, modified = %s - where name not in (%s) and ifnull(c_form_no, '') = %s""" - % ("%s", ", ".join(["%s"] * len(inv)), "%s"), - tuple([self.modified] + inv + [self.name]), - ) - else: - frappe.throw(_("Please enter atleast 1 invoice in the table")) - - def set_total_invoiced_amount(self): - total = sum(flt(d.grand_total) for d in self.get("invoices")) - frappe.db.set(self, "total_invoiced_amount", total) - - @frappe.whitelist() - def get_invoice_details(self, invoice_no): - """Pull details from invoices for referrence""" - if invoice_no: - inv = frappe.db.get_value( - "Sales Invoice", - invoice_no, - ["posting_date", "territory", "base_net_total", "base_grand_total"], - as_dict=True, - ) - return { - "invoice_date": inv.posting_date, - "territory": inv.territory, - "net_total": inv.base_net_total, - "grand_total": inv.base_grand_total, - } diff --git a/erpnext/accounts/doctype/c_form/test_c_form.py b/erpnext/accounts/doctype/c_form/test_c_form.py deleted file mode 100644 index 87ad60fdda..0000000000 --- a/erpnext/accounts/doctype/c_form/test_c_form.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('C-Form') - - -class TestCForm(unittest.TestCase): - pass diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/README.md b/erpnext/accounts/doctype/c_form_invoice_detail/README.md deleted file mode 100644 index 3b260ac361..0000000000 --- a/erpnext/accounts/doctype/c_form_invoice_detail/README.md +++ /dev/null @@ -1 +0,0 @@ -Invoice detail for parent C-Form. \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json deleted file mode 100644 index 9da4411874..0000000000 --- a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:38", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "invoice_no", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Invoice No", - "length": 0, - "no_copy": 0, - "options": "Sales Invoice", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "160px", - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "160px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "invoice_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Invoice Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "120px", - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "120px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "", - "fieldname": "territory", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Territory", - "length": 0, - "no_copy": 0, - "options": "Territory", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "120px", - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "120px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "net_total", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Net Total", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "120px", - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "120px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "grand_total", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Grand Total", - "length": 0, - "no_copy": 0, - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "120px", - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "120px" - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:27:58.768719", - "modified_by": "Administrator", - "module": "Accounts", - "name": "C-Form Invoice Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.py b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.py deleted file mode 100644 index 1e6ab97978..0000000000 --- a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from frappe.model.document import Document - - -class CFormInvoiceDetail(Document): - pass diff --git a/erpnext/accounts/doctype/coupon_code/test_coupon_code.py b/erpnext/accounts/doctype/coupon_code/test_coupon_code.py index b897546b03..aad341e9e1 100644 --- a/erpnext/accounts/doctype/coupon_code/test_coupon_code.py +++ b/erpnext/accounts/doctype/coupon_code/test_coupon_code.py @@ -29,7 +29,6 @@ def test_create_test_data(): "item_name": "_Test Tesla Car", "apply_warehouse_wise_reorder_level": 0, "warehouse": "Stores - _TC", - "gst_hsn_code": "999800", "valuation_rate": 5000, "standard_rate": 5000, "item_defaults": [ diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index e5fa57df7f..1987c8340d 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -42,7 +42,7 @@ class GLEntry(Document): self.validate_and_set_fiscal_year() self.pl_must_have_cost_center() - if not self.flags.from_repost: + if not self.flags.from_repost and self.voucher_type != "Period Closing Voucher": self.check_mandatory() self.validate_cost_center() self.check_pl_account() @@ -51,23 +51,27 @@ class GLEntry(Document): def on_update(self): adv_adj = self.flags.adv_adj - if not self.flags.from_repost: + if not self.flags.from_repost and self.voucher_type != "Period Closing Voucher": self.validate_account_details(adv_adj) self.validate_dimensions_for_pl_and_bs() self.validate_allowed_dimensions() validate_balance_type(self.account, adv_adj) validate_frozen_account(self.account, adv_adj) - # Update outstanding amt on against voucher - if ( - self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"] - and self.against_voucher - and self.flags.update_outstanding == "Yes" - and not frappe.flags.is_reverse_depr_entry - ): - update_outstanding_amt( - self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher - ) + if frappe.db.get_value("Account", self.account, "account_type") not in [ + "Receivable", + "Payable", + ]: + # Update outstanding amt on against voucher + if ( + self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"] + and self.against_voucher + and self.flags.update_outstanding == "Yes" + and not frappe.flags.is_reverse_depr_entry + ): + update_outstanding_amt( + self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher + ) def check_mandatory(self): mandatory = ["account", "voucher_type", "voucher_no", "company"] diff --git a/erpnext/accounts/doctype/gst_account/gst_account.json b/erpnext/accounts/doctype/gst_account/gst_account.json deleted file mode 100644 index be5124c2d4..0000000000 --- a/erpnext/accounts/doctype/gst_account/gst_account.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "actions": [], - "creation": "2018-01-02 15:48:58.768352", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "cgst_account", - "sgst_account", - "igst_account", - "cess_account", - "utgst_account", - "is_reverse_charge_account" - ], - "fields": [ - { - "columns": 1, - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "columns": 2, - "fieldname": "cgst_account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "CGST Account", - "options": "Account", - "reqd": 1 - }, - { - "columns": 2, - "fieldname": "sgst_account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "SGST Account", - "options": "Account", - "reqd": 1 - }, - { - "columns": 2, - "fieldname": "igst_account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "IGST Account", - "options": "Account", - "reqd": 1 - }, - { - "columns": 2, - "fieldname": "cess_account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "CESS Account", - "options": "Account" - }, - { - "columns": 1, - "default": "0", - "fieldname": "is_reverse_charge_account", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Is Reverse Charge Account" - }, - { - "fieldname": "utgst_account", - "fieldtype": "Link", - "label": "UTGST Account", - "options": "Account" - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2022-04-07 12:59:14.039768", - "modified_by": "Administrator", - "module": "Accounts", - "name": "GST Account", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/accounts/doctype/gst_account/gst_account.py b/erpnext/accounts/doctype/gst_account/gst_account.py deleted file mode 100644 index befca41b57..0000000000 --- a/erpnext/accounts/doctype/gst_account/gst_account.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class GSTAccount(Document): - pass diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 3cc28a3dc8..7af41f398a 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -149,22 +149,6 @@ frappe.ui.form.on("Journal Entry", { } }); } - else if(frm.doc.voucher_type=="Opening Entry") { - return frappe.call({ - type:"GET", - method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_opening_accounts", - args: { - "company": frm.doc.company - }, - callback: function(r) { - frappe.model.clear_table(frm.doc, "accounts"); - if(r.message) { - update_jv_details(frm.doc, r.message); - } - cur_frm.set_value("is_opening", "Yes"); - } - }); - } } }, @@ -240,25 +224,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro me.frm.set_query("reference_name", "accounts", function(doc, cdt, cdn) { var jvd = frappe.get_doc(cdt, cdn); - // expense claim - if(jvd.reference_type==="Expense Claim") { - return { - filters: { - 'total_sanctioned_amount': ['>', 0], - 'status': ['!=', 'Paid'], - 'docstatus': 1 - } - }; - } - - if(jvd.reference_type==="Employee Advance") { - return { - filters: { - 'docstatus': 1 - } - }; - } - // journal entry if(jvd.reference_type==="Journal Entry") { frappe.model.validate_missing(jvd, "account"); @@ -271,13 +236,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro }; } - // payroll entry - if(jvd.reference_type==="Payroll Entry") { - return { - query: "erpnext.payroll.doctype.payroll_entry.payroll_entry.get_payroll_entries_for_jv", - }; - } - var out = { filters: [ [jvd.reference_type, "docstatus", "=", 1] diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json index 4493c72254..8e5ba3718f 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.json +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json @@ -137,7 +137,8 @@ "fieldname": "finance_book", "fieldtype": "Link", "label": "Finance Book", - "options": "Finance Book" + "options": "Finance Book", + "read_only": 1 }, { "fieldname": "2_add_edit_gl_entries", @@ -538,7 +539,7 @@ "idx": 176, "is_submittable": 1, "links": [], - "modified": "2022-04-06 17:18:46.865259", + "modified": "2022-06-23 22:01:32.348337", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry", diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index d28c3a8687..63c6547f1d 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -24,7 +24,6 @@ from erpnext.accounts.utils import ( get_stock_and_account_balance, ) from erpnext.controllers.accounts_controller import AccountsController -from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount class StockAccountInvalidTransaction(frappe.ValidationError): @@ -66,7 +65,6 @@ class JournalEntry(AccountsController): self.set_against_account() self.create_remarks() self.set_print_format_fields() - self.validate_expense_claim() self.validate_credit_debit_note() self.validate_empty_accounts_table() self.set_account_and_party_balance() @@ -83,27 +81,21 @@ class JournalEntry(AccountsController): self.check_credit_limit() self.make_gl_entries() self.update_advance_paid() - self.update_expense_claim() self.update_inter_company_jv() self.update_invoice_discounting() - self.update_status_for_full_and_final_statement() def on_cancel(self): from erpnext.accounts.utils import unlink_ref_doc_from_payment_entries - from erpnext.payroll.doctype.salary_slip.salary_slip import unlink_ref_doc_from_salary_slip unlink_ref_doc_from_payment_entries(self) - unlink_ref_doc_from_salary_slip(self.name) - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") + self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry") self.make_gl_entries(1) self.update_advance_paid() - self.update_expense_claim() self.unlink_advance_entry_reference() self.unlink_asset_reference() self.unlink_inter_company_jv() self.unlink_asset_adjustment_entry() self.update_invoice_discounting() - self.update_status_for_full_and_final_statement() def get_title(self): return self.pay_to_recd_from or self.accounts[0].account @@ -112,21 +104,13 @@ class JournalEntry(AccountsController): advance_paid = frappe._dict() for d in self.get("accounts"): if d.is_advance: - if d.reference_type in ("Sales Order", "Purchase Order", "Employee Advance"): + if d.reference_type in frappe.get_hooks("advance_payment_doctypes"): advance_paid.setdefault(d.reference_type, []).append(d.reference_name) for voucher_type, order_list in advance_paid.items(): for voucher_no in list(set(order_list)): frappe.get_doc(voucher_type, voucher_no).set_total_advance_paid() - def update_status_for_full_and_final_statement(self): - for entry in self.accounts: - if entry.reference_type == "Full and Final Statement": - if self.docstatus == 1: - frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Paid") - elif self.docstatus == 2: - frappe.db.set_value("Full and Final Statement", entry.reference_name, "status", "Unpaid") - def validate_inter_company_accounts(self): if ( self.voucher_type == "Inter Company Journal Entry" @@ -416,7 +400,7 @@ class JournalEntry(AccountsController): against_entries = frappe.db.sql( """select * from `tabJournal Entry Account` where account = %s and docstatus = 1 and parent = %s - and (reference_type is null or reference_type in ("", "Sales Order", "Purchase Order")) + and (reference_type is null or reference_type in ('', 'Sales Order', 'Purchase Order')) """, (d.account, d.reference_name), as_dict=True, @@ -800,9 +784,7 @@ class JournalEntry(AccountsController): self.total_amount_in_words = money_in_words(amt, currency) - def make_gl_entries(self, cancel=0, adv_adj=0): - from erpnext.accounts.general_ledger import make_gl_entries - + def build_gl_map(self): gl_map = [] for d in self.get("accounts"): if d.debit or d.credit: @@ -838,7 +820,12 @@ class JournalEntry(AccountsController): item=d, ) ) + return gl_map + def make_gl_entries(self, cancel=0, adv_adj=0): + from erpnext.accounts.general_ledger import make_gl_entries + + gl_map = self.build_gl_map() if self.voucher_type in ("Deferred Revenue", "Deferred Expense"): update_outstanding = "No" else: @@ -932,29 +919,6 @@ class JournalEntry(AccountsController): as_dict=True, ) - def update_expense_claim(self): - for d in self.accounts: - if d.reference_type == "Expense Claim" and d.reference_name: - doc = frappe.get_doc("Expense Claim", d.reference_name) - if self.docstatus == 2: - update_reimbursed_amount(doc, -1 * d.debit) - else: - update_reimbursed_amount(doc, d.debit) - - def validate_expense_claim(self): - for d in self.accounts: - if d.reference_type == "Expense Claim": - sanctioned_amount, reimbursed_amount = frappe.db.get_value( - "Expense Claim", d.reference_name, ("total_sanctioned_amount", "total_amount_reimbursed") - ) - pending_amount = flt(sanctioned_amount) - flt(reimbursed_amount) - if d.debit > pending_amount: - frappe.throw( - _( - "Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2}" - ).format(d.idx, d.reference_name, pending_amount) - ) - def validate_credit_debit_note(self): if self.stock_entry: if frappe.db.get_value("Stock Entry", self.stock_entry, "docstatus") != 1: @@ -1201,24 +1165,6 @@ def get_payment_entry(ref_doc, args): return je if args.get("journal_entry") else je.as_dict() -@frappe.whitelist() -def get_opening_accounts(company): - """get all balance sheet accounts for opening entry""" - accounts = frappe.db.sql_list( - """select - name from tabAccount - where - is_group=0 and report_type='Balance Sheet' and company={0} and - name not in (select distinct account from tabWarehouse where - account is not null and account != '') - order by name asc""".format( - frappe.db.escape(company) - ) - ) - - return [{"account": a, "balance": get_balance_on(a)} for a in accounts] - - @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def get_against_jv(doctype, txt, searchfield, start, page_len, filters): @@ -1239,7 +1185,7 @@ def get_against_jv(doctype, txt, searchfield, start, page_len, filters): AND jv.docstatus = 1 AND jv.`{0}` LIKE %(txt)s ORDER BY jv.name DESC - LIMIT %(offset)s, %(limit)s + LIMIT %(limit)s offset %(offset)s """.format( searchfield ), diff --git a/erpnext/accounts/doctype/journal_entry/regional/india.js b/erpnext/accounts/doctype/journal_entry/regional/india.js deleted file mode 100644 index c5f5520479..0000000000 --- a/erpnext/accounts/doctype/journal_entry/regional/india.js +++ /dev/null @@ -1,17 +0,0 @@ -frappe.ui.form.on("Journal Entry", { - refresh: function(frm) { - frm.set_query('company_address', function(doc) { - if(!doc.company) { - frappe.throw(__('Please set Company')); - } - - return { - query: 'frappe.contacts.doctype.address.address.address_query', - filters: { - link_doctype: 'Company', - link_name: doc.company - } - }; - }); - } -}); diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index d7fae6d2a3..0f53079403 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -110,8 +110,6 @@ frappe.ui.form.on('Payment Entry', { var doctypes = ["Sales Order", "Sales Invoice", "Journal Entry", "Dunning"]; } else if (frm.doc.party_type == "Supplier") { var doctypes = ["Purchase Order", "Purchase Invoice", "Journal Entry"]; - } else if (frm.doc.party_type == "Employee") { - var doctypes = ["Expense Claim", "Journal Entry"]; } else { var doctypes = ["Journal Entry"]; } @@ -140,17 +138,12 @@ frappe.ui.form.on('Payment Entry', { const child = locals[cdt][cdn]; const filters = {"docstatus": 1, "company": doc.company}; const party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice', - 'Purchase Order', 'Expense Claim', 'Fees', 'Dunning']; + 'Purchase Order', 'Dunning']; if (in_list(party_type_doctypes, child.reference_doctype)) { filters[doc.party_type.toLowerCase()] = doc.party; } - if(child.reference_doctype == "Expense Claim") { - filters["docstatus"] = 1; - filters["is_paid"] = 0; - } - return { filters: filters }; @@ -730,7 +723,7 @@ frappe.ui.form.on('Payment Entry', { c.payment_term = d.payment_term; c.allocated_amount = d.allocated_amount; - if(!in_list(["Sales Order", "Purchase Order", "Expense Claim", "Fees"], d.voucher_type)) { + if(!in_list(frm.events.get_order_doctypes(frm), d.voucher_type)) { if(flt(d.outstanding_amount) > 0) total_positive_outstanding += flt(d.outstanding_amount); else @@ -745,7 +738,7 @@ frappe.ui.form.on('Payment Entry', { } else { c.exchange_rate = 1; } - if (in_list(['Sales Invoice', 'Purchase Invoice', "Expense Claim", "Fees"], d.reference_doctype)){ + if (in_list(frm.events.get_invoice_doctypes(frm), d.reference_doctype)){ c.due_date = d.due_date; } }); @@ -776,6 +769,14 @@ frappe.ui.form.on('Payment Entry', { }); }, + get_order_doctypes: function(frm) { + return ["Sales Order", "Purchase Order"]; + }, + + get_invoice_doctypes: function(frm) { + return ["Sales Invoice", "Purchase Invoice"]; + }, + allocate_party_amount_against_ref_docs: function(frm, paid_amount, paid_amount_change) { var total_positive_outstanding_including_order = 0; var total_negative_outstanding = 0; @@ -946,14 +947,6 @@ frappe.ui.form.on('Payment Entry', { frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx])); return false; } - - if(frm.doc.party_type=="Employee" && - !in_list(["Expense Claim", "Journal Entry"], row.reference_doctype) - ) { - frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null); - frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Expense Claim or Journal Entry", [row.idx])); - return false; - } } if (row) { diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 7257e6d75f..af5a5e249d 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -6,7 +6,7 @@ import json from functools import reduce import frappe -from frappe import ValidationError, _, scrub, throw +from frappe import ValidationError, _, qb, scrub, throw from frappe.utils import cint, comma_or, flt, getdate, nowdate import erpnext @@ -29,7 +29,6 @@ from erpnext.controllers.accounts_controller import ( get_supplier_block_status, validate_taxes_and_charges, ) -from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount from erpnext.setup.utils import get_exchange_rate @@ -88,16 +87,14 @@ class PaymentEntry(AccountsController): if self.difference_amount: frappe.throw(_("Difference Amount must be zero")) self.make_gl_entries() - self.update_expense_claim() self.update_outstanding_amounts() self.update_advance_paid() self.update_payment_schedule() self.set_status() def on_cancel(self): - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") + self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry") self.make_gl_entries(cancel=1) - self.update_expense_claim() self.update_outstanding_amounts() self.update_advance_paid() self.delink_advance_entry_references() @@ -296,14 +293,7 @@ class PaymentEntry(AccountsController): frappe.throw(_("{0} is mandatory").format(self.meta.get_label(field))) def validate_reference_documents(self): - if self.party_type == "Customer": - valid_reference_doctypes = ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning") - elif self.party_type == "Supplier": - valid_reference_doctypes = ("Purchase Order", "Purchase Invoice", "Journal Entry") - elif self.party_type == "Employee": - valid_reference_doctypes = ("Expense Claim", "Journal Entry", "Employee Advance", "Gratuity") - elif self.party_type == "Shareholder": - valid_reference_doctypes = "Journal Entry" + valid_reference_doctypes = self.get_valid_reference_doctypes() for d in self.get("references"): if not d.allocated_amount: @@ -329,7 +319,7 @@ class PaymentEntry(AccountsController): else: self.validate_journal_entry() - if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim", "Fees"): + if d.reference_doctype in frappe.get_hooks("invoice_doctypes"): if self.party_type == "Customer": ref_party_account = ( get_party_account_based_on_invoice_discounting(d.reference_name) or ref_doc.debit_to @@ -346,9 +336,25 @@ class PaymentEntry(AccountsController): ) ) + if ref_doc.doctype == "Purchase Invoice" and ref_doc.get("on_hold"): + frappe.throw( + _("{0} {1} is on hold").format(d.reference_doctype, d.reference_name), + title=_("Invalid Invoice"), + ) + if ref_doc.docstatus != 1: frappe.throw(_("{0} {1} must be submitted").format(d.reference_doctype, d.reference_name)) + def get_valid_reference_doctypes(self): + if self.party_type == "Customer": + return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning") + elif self.party_type == "Supplier": + return ("Purchase Order", "Purchase Invoice", "Journal Entry") + elif self.party_type == "Shareholder": + return ("Journal Entry",) + elif self.party_type == "Employee": + return ("Journal Entry",) + def validate_paid_invoices(self): no_oustanding_refs = {} @@ -779,7 +785,7 @@ class PaymentEntry(AccountsController): self.set("remarks", "\n".join(remarks)) - def make_gl_entries(self, cancel=0, adv_adj=0): + def build_gl_map(self): if self.payment_type in ("Receive", "Pay") and not self.get("party_account_field"): self.setup_party_account_field() @@ -788,7 +794,10 @@ class PaymentEntry(AccountsController): self.add_bank_gl_entries(gl_entries) self.add_deductions_gl_entries(gl_entries) self.add_tax_gl_entries(gl_entries) + return gl_entries + def make_gl_entries(self, cancel=0, adv_adj=0): + gl_entries = self.build_gl_map() gl_entries = process_gl_map(gl_entries) make_gl_entries(gl_entries, cancel=cancel, adv_adj=adv_adj) @@ -971,24 +980,9 @@ class PaymentEntry(AccountsController): def update_advance_paid(self): if self.payment_type in ("Receive", "Pay") and self.party: for d in self.get("references"): - if d.allocated_amount and d.reference_doctype in ( - "Sales Order", - "Purchase Order", - "Employee Advance", - "Gratuity", - ): + if d.allocated_amount and d.reference_doctype in frappe.get_hooks("advance_payment_doctypes"): frappe.get_doc(d.reference_doctype, d.reference_name).set_total_advance_paid() - def update_expense_claim(self): - if self.payment_type in ("Pay") and self.party: - for d in self.get("references"): - if d.reference_doctype == "Expense Claim" and d.reference_name: - doc = frappe.get_doc("Expense Claim", d.reference_name) - if self.docstatus == 2: - update_reimbursed_amount(doc, -1 * d.allocated_amount) - else: - update_reimbursed_amount(doc, d.allocated_amount) - def on_recurring(self, reference_doc, auto_repeat_doc): self.reference_no = reference_doc.name self.reference_date = nowdate() @@ -1182,13 +1176,15 @@ def validate_inclusive_tax(tax, doc): @frappe.whitelist() def get_outstanding_reference_documents(args): - if isinstance(args, str): args = json.loads(args) if args.get("party_type") == "Member": return + ple = qb.DocType("Payment Ledger Entry") + common_filter = [] + # confirm that Supplier is not blocked if args.get("party_type") == "Supplier": supplier_status = get_supplier_block_status(args["party"]) @@ -1210,10 +1206,13 @@ def get_outstanding_reference_documents(args): condition = " and voucher_type={0} and voucher_no={1}".format( frappe.db.escape(args["voucher_type"]), frappe.db.escape(args["voucher_no"]) ) + common_filter.append(ple.voucher_type == args["voucher_type"]) + common_filter.append(ple.voucher_no == args["voucher_no"]) # Add cost center condition if args.get("cost_center"): condition += " and cost_center='%s'" % args.get("cost_center") + common_filter.append(ple.cost_center == args.get("cost_center")) date_fields_dict = { "posting_date": ["from_posting_date", "to_posting_date"], @@ -1225,16 +1224,19 @@ def get_outstanding_reference_documents(args): condition += " and {0} between '{1}' and '{2}'".format( fieldname, args.get(date_fields[0]), args.get(date_fields[1]) ) + common_filter.append(ple[fieldname][args.get(date_fields[0]) : args.get(date_fields[1])]) if args.get("company"): condition += " and company = {0}".format(frappe.db.escape(args.get("company"))) + common_filter.append(ple.company == args.get("company")) outstanding_invoices = get_outstanding_invoices( args.get("party_type"), args.get("party"), args.get("party_account"), - filters=args, - condition=condition, + common_filter=common_filter, + min_outstanding=args.get("outstanding_amt_greater_than"), + max_outstanding=args.get("outstanding_amt_less_than"), ) outstanding_invoices = split_invoices_based_on_payment_terms(outstanding_invoices) @@ -1242,7 +1244,7 @@ def get_outstanding_reference_documents(args): for d in outstanding_invoices: d["exchange_rate"] = 1 if party_account_currency != company_currency: - if d.voucher_type in ("Sales Invoice", "Purchase Invoice", "Expense Claim"): + if d.voucher_type in frappe.get_hooks("invoice_doctypes"): d["exchange_rate"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "conversion_rate") elif d.voucher_type == "Journal Entry": d["exchange_rate"] = get_exchange_rate( @@ -1438,7 +1440,7 @@ def get_negative_outstanding_invoices( voucher_type = "Sales Invoice" if party_type == "Customer" else "Purchase Invoice" supplier_condition = "" if voucher_type == "Purchase Invoice": - supplier_condition = "and (release_date is null or release_date <= CURDATE())" + supplier_condition = "and (release_date is null or release_date <= CURRENT_DATE)" if party_account_currency == company_currency: grand_total_field = "base_grand_total" rounded_total_field = "base_rounded_total" @@ -1569,20 +1571,17 @@ def get_outstanding_on_journal_entry(name): @frappe.whitelist() def get_reference_details(reference_doctype, reference_name, party_account_currency): - total_amount = outstanding_amount = exchange_rate = bill_no = None + total_amount = outstanding_amount = exchange_rate = None + ref_doc = frappe.get_doc(reference_doctype, reference_name) company_currency = ref_doc.get("company_currency") or erpnext.get_company_currency( ref_doc.company ) - if reference_doctype == "Fees": - total_amount = ref_doc.get("grand_total") + if reference_doctype == "Dunning": + total_amount = outstanding_amount = ref_doc.get("dunning_amount") exchange_rate = 1 - outstanding_amount = ref_doc.get("outstanding_amount") - elif reference_doctype == "Dunning": - total_amount = ref_doc.get("dunning_amount") - exchange_rate = 1 - outstanding_amount = ref_doc.get("dunning_amount") + elif reference_doctype == "Journal Entry" and ref_doc.docstatus == 1: total_amount = ref_doc.get("total_amount") if ref_doc.multi_currency: @@ -1592,16 +1591,8 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre else: exchange_rate = 1 outstanding_amount = get_outstanding_on_journal_entry(reference_name) + elif reference_doctype != "Journal Entry": - if ref_doc.doctype == "Expense Claim": - total_amount = flt(ref_doc.total_sanctioned_amount) + flt(ref_doc.total_taxes_and_charges) - elif ref_doc.doctype == "Employee Advance": - total_amount = ref_doc.advance_amount - exchange_rate = ref_doc.get("exchange_rate") - if party_account_currency != ref_doc.currency: - total_amount = flt(total_amount) * flt(exchange_rate) - elif ref_doc.doctype == "Gratuity": - total_amount = ref_doc.amount if not total_amount: if party_account_currency == company_currency: total_amount = ref_doc.base_grand_total @@ -1614,26 +1605,12 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre exchange_rate = ref_doc.get("conversion_rate") or get_exchange_rate( party_account_currency, company_currency, ref_doc.posting_date ) + if reference_doctype in ("Sales Invoice", "Purchase Invoice"): outstanding_amount = ref_doc.get("outstanding_amount") - bill_no = ref_doc.get("bill_no") - elif reference_doctype == "Expense Claim": - outstanding_amount = ( - flt(ref_doc.get("total_sanctioned_amount")) - + flt(ref_doc.get("total_taxes_and_charges")) - - flt(ref_doc.get("total_amount_reimbursed")) - - flt(ref_doc.get("total_advance_amount")) - ) - elif reference_doctype == "Employee Advance": - outstanding_amount = flt(ref_doc.advance_amount) - flt(ref_doc.paid_amount) - if party_account_currency != ref_doc.currency: - outstanding_amount = flt(outstanding_amount) * flt(exchange_rate) - if party_account_currency == company_currency: - exchange_rate = 1 - elif reference_doctype == "Gratuity": - outstanding_amount = ref_doc.amount - flt(ref_doc.paid_amount) else: outstanding_amount = flt(total_amount) - flt(ref_doc.advance_paid) + else: # Get the exchange rate based on the posting date of the ref doc. exchange_rate = get_exchange_rate(party_account_currency, company_currency, ref_doc.posting_date) @@ -1644,114 +1621,11 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre "total_amount": flt(total_amount), "outstanding_amount": flt(outstanding_amount), "exchange_rate": flt(exchange_rate), - "bill_no": bill_no, + "bill_no": ref_doc.get("bill_no"), } ) -def get_amounts_based_on_reference_doctype( - reference_doctype, ref_doc, party_account_currency, company_currency, reference_name -): - total_amount = outstanding_amount = exchange_rate = None - if reference_doctype == "Fees": - total_amount = ref_doc.get("grand_total") - exchange_rate = 1 - outstanding_amount = ref_doc.get("outstanding_amount") - elif reference_doctype == "Dunning": - total_amount = ref_doc.get("dunning_amount") - exchange_rate = 1 - outstanding_amount = ref_doc.get("dunning_amount") - elif reference_doctype == "Journal Entry" and ref_doc.docstatus == 1: - total_amount = ref_doc.get("total_amount") - if ref_doc.multi_currency: - exchange_rate = get_exchange_rate( - party_account_currency, company_currency, ref_doc.posting_date - ) - else: - exchange_rate = 1 - outstanding_amount = get_outstanding_on_journal_entry(reference_name) - - return total_amount, outstanding_amount, exchange_rate - - -def get_amounts_based_on_ref_doc( - reference_doctype, ref_doc, party_account_currency, company_currency -): - total_amount = outstanding_amount = exchange_rate = None - if ref_doc.doctype == "Expense Claim": - total_amount = flt(ref_doc.total_sanctioned_amount) + flt(ref_doc.total_taxes_and_charges) - elif ref_doc.doctype == "Employee Advance": - total_amount, exchange_rate = get_total_amount_exchange_rate_for_employee_advance( - party_account_currency, ref_doc - ) - - if not total_amount: - total_amount, exchange_rate = get_total_amount_exchange_rate_base_on_currency( - party_account_currency, company_currency, ref_doc - ) - - if not exchange_rate: - # Get the exchange rate from the original ref doc - # or get it based on the posting date of the ref doc - exchange_rate = ref_doc.get("conversion_rate") or get_exchange_rate( - party_account_currency, company_currency, ref_doc.posting_date - ) - - outstanding_amount, exchange_rate, bill_no = get_bill_no_and_update_amounts( - reference_doctype, ref_doc, total_amount, exchange_rate, party_account_currency, company_currency - ) - - return total_amount, outstanding_amount, exchange_rate, bill_no - - -def get_total_amount_exchange_rate_for_employee_advance(party_account_currency, ref_doc): - total_amount = ref_doc.advance_amount - exchange_rate = ref_doc.get("exchange_rate") - if party_account_currency != ref_doc.currency: - total_amount = flt(total_amount) * flt(exchange_rate) - - return total_amount, exchange_rate - - -def get_total_amount_exchange_rate_base_on_currency( - party_account_currency, company_currency, ref_doc -): - exchange_rate = None - if party_account_currency == company_currency: - total_amount = ref_doc.base_grand_total - exchange_rate = 1 - else: - total_amount = ref_doc.grand_total - - return total_amount, exchange_rate - - -def get_bill_no_and_update_amounts( - reference_doctype, ref_doc, total_amount, exchange_rate, party_account_currency, company_currency -): - outstanding_amount = bill_no = None - if reference_doctype in ("Sales Invoice", "Purchase Invoice"): - outstanding_amount = ref_doc.get("outstanding_amount") - bill_no = ref_doc.get("bill_no") - elif reference_doctype == "Expense Claim": - outstanding_amount = ( - flt(ref_doc.get("total_sanctioned_amount")) - + flt(ref_doc.get("total_taxes_and_charges")) - - flt(ref_doc.get("total_amount_reimbursed")) - - flt(ref_doc.get("total_advance_amount")) - ) - elif reference_doctype == "Employee Advance": - outstanding_amount = flt(ref_doc.advance_amount) - flt(ref_doc.paid_amount) - if party_account_currency != ref_doc.currency: - outstanding_amount = flt(outstanding_amount) * flt(exchange_rate) - if party_account_currency == company_currency: - exchange_rate = 1 - else: - outstanding_amount = flt(total_amount) - flt(ref_doc.advance_paid) - - return outstanding_amount, exchange_rate, bill_no - - @frappe.whitelist() def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None): reference_doc = None @@ -1870,8 +1744,6 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= pe.set_missing_values() if party_account and bank: - if dt == "Employee Advance": - reference_doc = doc pe.set_exchange_rate(ref_doc=reference_doc) pe.set_amounts() if discount_amount: @@ -1906,8 +1778,6 @@ def set_party_type(dt): party_type = "Customer" elif dt in ("Purchase Invoice", "Purchase Order"): party_type = "Supplier" - elif dt in ("Expense Claim", "Employee Advance", "Gratuity"): - party_type = "Employee" return party_type @@ -1918,12 +1788,6 @@ def set_party_account(dt, dn, doc, party_type): party_account = doc.credit_to elif dt == "Fees": party_account = doc.receivable_account - elif dt == "Employee Advance": - party_account = doc.advance_account - elif dt == "Expense Claim": - party_account = doc.payable_account - elif dt == "Gratuity": - party_account = doc.payable_account else: party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company) return party_account @@ -1958,24 +1822,12 @@ def set_grand_total_and_outstanding_amount(party_amount, dt, party_account_curre else: grand_total = doc.rounded_total or doc.grand_total outstanding_amount = doc.outstanding_amount - elif dt in ("Expense Claim"): - grand_total = doc.total_sanctioned_amount + doc.total_taxes_and_charges - outstanding_amount = doc.grand_total - doc.total_amount_reimbursed - elif dt == "Employee Advance": - grand_total = flt(doc.advance_amount) - outstanding_amount = flt(doc.advance_amount) - flt(doc.paid_amount) - if party_account_currency != doc.currency: - grand_total = flt(doc.advance_amount) * flt(doc.exchange_rate) - outstanding_amount = (flt(doc.advance_amount) - flt(doc.paid_amount)) * flt(doc.exchange_rate) elif dt == "Fees": grand_total = doc.grand_total outstanding_amount = doc.outstanding_amount elif dt == "Dunning": grand_total = doc.grand_total outstanding_amount = doc.grand_total - elif dt == "Gratuity": - grand_total = doc.amount - outstanding_amount = flt(doc.amount) - flt(doc.paid_amount) else: if party_account_currency == doc.company_currency: grand_total = flt(doc.get("base_rounded_total") or doc.base_grand_total) @@ -1997,8 +1849,6 @@ def set_paid_amount_and_received_amount( received_amount = bank_amount else: received_amount = paid_amount * doc.get("conversion_rate", 1) - if dt == "Employee Advance": - received_amount = paid_amount * doc.get("exchange_rate", 1) else: received_amount = abs(outstanding_amount) if bank_amount: @@ -2006,8 +1856,6 @@ def set_paid_amount_and_received_amount( else: # if party account currency and bank currency is different then populate paid amount as well paid_amount = received_amount * doc.get("conversion_rate", 1) - if dt == "Employee Advance": - paid_amount = received_amount * doc.get("exchange_rate", 1) return paid_amount, received_amount diff --git a/erpnext/accounts/doctype/payment_entry/regional/india.js b/erpnext/accounts/doctype/payment_entry/regional/india.js deleted file mode 100644 index abb344581c..0000000000 --- a/erpnext/accounts/doctype/payment_entry/regional/india.js +++ /dev/null @@ -1,29 +0,0 @@ -frappe.ui.form.on("Payment Entry", { - company: function(frm) { - frappe.call({ - 'method': 'frappe.contacts.doctype.address.address.get_default_address', - 'args': { - 'doctype': 'Company', - 'name': frm.doc.company - }, - 'callback': function(r) { - frm.set_value('company_address', r.message); - } - }); - }, - - party: function(frm) { - if (frm.doc.party_type == "Customer" && frm.doc.party) { - frappe.call({ - 'method': 'frappe.contacts.doctype.address.address.get_default_address', - 'args': { - 'doctype': 'Customer', - 'name': frm.doc.party - }, - 'callback': function(r) { - frm.set_value('customer_address', r.message); - } - }); - } - } -}); \ No newline at end of file diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py index 5b70b510d2..02627eb007 100644 --- a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py @@ -4,6 +4,7 @@ import unittest import frappe +from frappe.tests.utils import FrappeTestCase from frappe.utils import flt, nowdate from erpnext.accounts.doctype.payment_entry.payment_entry import ( @@ -18,13 +19,16 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import ( create_sales_invoice, create_sales_invoice_against_cost_center, ) -from erpnext.hr.doctype.expense_claim.test_expense_claim import make_expense_claim from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order +from erpnext.setup.doctype.employee.test_employee import make_employee test_dependencies = ["Item"] -class TestPaymentEntry(unittest.TestCase): +class TestPaymentEntry(FrappeTestCase): + def tearDown(self): + frappe.db.rollback() + def test_payment_entry_against_order(self): so = make_sales_order() pe = get_payment_entry("Sales Order", so.name, bank_account="_Test Cash - _TC") @@ -293,31 +297,6 @@ class TestPaymentEntry(unittest.TestCase): self.assertEqual(flt(outstanding_amount), 250) self.assertEqual(status, "Unpaid") - def test_payment_entry_against_ec(self): - - payable = frappe.get_cached_value("Company", "_Test Company", "default_payable_account") - ec = make_expense_claim(payable, 300, 300, "_Test Company", "Travel Expenses - _TC") - pe = get_payment_entry( - "Expense Claim", ec.name, bank_account="_Test Bank USD - _TC", bank_amount=300 - ) - pe.reference_no = "1" - pe.reference_date = "2016-01-01" - pe.source_exchange_rate = 1 - pe.paid_to = payable - pe.insert() - pe.submit() - - expected_gle = dict( - (d[0], d) for d in [[payable, 300, 0, ec.name], ["_Test Bank USD - _TC", 0, 300, None]] - ) - - self.validate_gl_entries(pe.name, expected_gle) - - outstanding_amount = flt( - frappe.db.get_value("Expense Claim", ec.name, "total_sanctioned_amount") - ) - flt(frappe.db.get_value("Expense Claim", ec.name, "total_amount_reimbursed")) - self.assertEqual(outstanding_amount, 0) - def test_payment_entry_against_si_usd_to_inr(self): si = create_sales_invoice( customer="_Test Customer USD", @@ -743,6 +722,25 @@ class TestPaymentEntry(unittest.TestCase): flt(payment_entry.total_taxes_and_charges, 2), flt(10 / payment_entry.target_exchange_rate, 2) ) + def test_payment_entry_against_onhold_purchase_invoice(self): + pi = make_purchase_invoice() + + pe = get_payment_entry("Purchase Invoice", pi.name, bank_account="_Test Bank USD - _TC") + pe.reference_no = "1" + pe.reference_date = "2016-01-01" + + # block invoice after creating payment entry + # since `get_payment_entry` will not attach blocked invoice to payment + pi.block_invoice() + with self.assertRaises(frappe.ValidationError) as err: + pe.save() + + self.assertTrue("is on hold" in str(err.exception).lower()) + + def test_payment_entry_for_employee(self): + employee = make_employee("test_payment_entry@salary.com", company="_Test Company") + create_payment_entry(party_type="Employee", party=employee, save=True) + def create_payment_entry(**args): payment_entry = frappe.new_doc("Payment Entry") diff --git a/erpnext/accounts/doctype/c_form/__init__.py b/erpnext/accounts/doctype/payment_ledger_entry/__init__.py similarity index 100% rename from erpnext/accounts/doctype/c_form/__init__.py rename to erpnext/accounts/doctype/payment_ledger_entry/__init__.py diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js new file mode 100644 index 0000000000..5a7be8e5ab --- /dev/null +++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.js @@ -0,0 +1,8 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Payment Ledger Entry', { + // refresh: function(frm) { + + // } +}); diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json new file mode 100644 index 0000000000..4596b00fc1 --- /dev/null +++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json @@ -0,0 +1,182 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2022-05-09 19:35:03.334361", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "posting_date", + "company", + "account_type", + "account", + "party_type", + "party", + "due_date", + "cost_center", + "finance_book", + "voucher_type", + "voucher_no", + "against_voucher_type", + "against_voucher_no", + "amount", + "account_currency", + "amount_in_account_currency", + "delinked" + ], + "fields": [ + { + "fieldname": "posting_date", + "fieldtype": "Date", + "label": "Posting Date" + }, + { + "fieldname": "account_type", + "fieldtype": "Select", + "label": "Account Type", + "options": "Receivable\nPayable" + }, + { + "fieldname": "account", + "fieldtype": "Link", + "label": "Account", + "options": "Account", + "search_index": 1 + }, + { + "fieldname": "party_type", + "fieldtype": "Link", + "label": "Party Type", + "options": "DocType", + "search_index": 1 + }, + { + "fieldname": "party", + "fieldtype": "Dynamic Link", + "label": "Party", + "options": "party_type", + "search_index": 1 + }, + { + "fieldname": "voucher_type", + "fieldtype": "Link", + "in_standard_filter": 1, + "label": "Voucher Type", + "options": "DocType" + }, + { + "fieldname": "voucher_no", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Voucher No", + "options": "voucher_type" + }, + { + "fieldname": "against_voucher_type", + "fieldtype": "Link", + "in_standard_filter": 1, + "label": "Against Voucher Type", + "options": "DocType" + }, + { + "fieldname": "against_voucher_no", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Against Voucher No", + "options": "against_voucher_type" + }, + { + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "options": "Company:company:default_currency" + }, + { + "fieldname": "account_currency", + "fieldtype": "Link", + "label": "Currency", + "options": "Currency" + }, + { + "fieldname": "amount_in_account_currency", + "fieldtype": "Currency", + "label": "Amount in Account Currency", + "options": "account_currency" + }, + { + "default": "0", + "fieldname": "delinked", + "fieldtype": "Check", + "in_list_view": 1, + "label": "DeLinked" + }, + { + "fieldname": "company", + "fieldtype": "Link", + "label": "Company", + "options": "Company", + "search_index": 1 + }, + { + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center" + }, + { + "fieldname": "due_date", + "fieldtype": "Date", + "label": "Due Date" + }, + { + "fieldname": "finance_book", + "fieldtype": "Link", + "label": "Finance Book", + "options": "Finance Book" + } + ], + "in_create": 1, + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-07-11 09:13:54.379168", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Payment Ledger Entry", + "owner": "Administrator", + "permissions": [ + { + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "share": 1 + }, + { + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "share": 1 + }, + { + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Auditor", + "share": 1 + } + ], + "search_fields": "voucher_no, against_voucher_no", + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py new file mode 100644 index 0000000000..bcbcb670fa --- /dev/null +++ b/erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.py @@ -0,0 +1,154 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + + +import frappe +from frappe import _ +from frappe.model.document import Document + +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( + get_checks_for_pl_and_bs_accounts, +) +from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_filter import ( + get_dimension_filter_map, +) +from erpnext.accounts.doctype.gl_entry.gl_entry import ( + validate_balance_type, + validate_frozen_account, +) +from erpnext.accounts.utils import update_voucher_outstanding +from erpnext.exceptions import InvalidAccountDimensionError, MandatoryAccountDimensionError + + +class PaymentLedgerEntry(Document): + def validate_account(self): + valid_account = frappe.db.get_list( + "Account", + "name", + filters={"name": self.account, "account_type": self.account_type, "company": self.company}, + ignore_permissions=True, + ) + if not valid_account: + frappe.throw(_("{0} account is not of type {1}").format(self.account, self.account_type)) + + def validate_account_details(self): + """Account must be ledger, active and not freezed""" + + ret = frappe.db.sql( + """select is_group, docstatus, company + from tabAccount where name=%s""", + self.account, + as_dict=1, + )[0] + + if ret.is_group == 1: + frappe.throw( + _( + """{0} {1}: Account {2} is a Group Account and group accounts cannot be used in transactions""" + ).format(self.voucher_type, self.voucher_no, self.account) + ) + + if ret.docstatus == 2: + frappe.throw( + _("{0} {1}: Account {2} is inactive").format(self.voucher_type, self.voucher_no, self.account) + ) + + if ret.company != self.company: + frappe.throw( + _("{0} {1}: Account {2} does not belong to Company {3}").format( + self.voucher_type, self.voucher_no, self.account, self.company + ) + ) + + def validate_allowed_dimensions(self): + dimension_filter_map = get_dimension_filter_map() + for key, value in dimension_filter_map.items(): + dimension = key[0] + account = key[1] + + if self.account == account: + if value["is_mandatory"] and not self.get(dimension): + frappe.throw( + _("{0} is mandatory for account {1}").format( + frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account) + ), + MandatoryAccountDimensionError, + ) + + if value["allow_or_restrict"] == "Allow": + if self.get(dimension) and self.get(dimension) not in value["allowed_dimensions"]: + frappe.throw( + _("Invalid value {0} for {1} against account {2}").format( + frappe.bold(self.get(dimension)), + frappe.bold(frappe.unscrub(dimension)), + frappe.bold(self.account), + ), + InvalidAccountDimensionError, + ) + else: + if self.get(dimension) and self.get(dimension) in value["allowed_dimensions"]: + frappe.throw( + _("Invalid value {0} for {1} against account {2}").format( + frappe.bold(self.get(dimension)), + frappe.bold(frappe.unscrub(dimension)), + frappe.bold(self.account), + ), + InvalidAccountDimensionError, + ) + + def validate_dimensions_for_pl_and_bs(self): + account_type = frappe.db.get_value("Account", self.account, "report_type") + + for dimension in get_checks_for_pl_and_bs_accounts(): + if ( + account_type == "Profit and Loss" + and self.company == dimension.company + and dimension.mandatory_for_pl + and not dimension.disabled + ): + if not self.get(dimension.fieldname): + frappe.throw( + _("Accounting Dimension {0} is required for 'Profit and Loss' account {1}.").format( + dimension.label, self.account + ) + ) + + if ( + account_type == "Balance Sheet" + and self.company == dimension.company + and dimension.mandatory_for_bs + and not dimension.disabled + ): + if not self.get(dimension.fieldname): + frappe.throw( + _("Accounting Dimension {0} is required for 'Balance Sheet' account {1}.").format( + dimension.label, self.account + ) + ) + + def validate(self): + self.validate_account() + + def on_update(self): + adv_adj = self.flags.adv_adj + if not self.flags.from_repost: + self.validate_account_details() + self.validate_dimensions_for_pl_and_bs() + self.validate_allowed_dimensions() + validate_balance_type(self.account, adv_adj) + validate_frozen_account(self.account, adv_adj) + + # update outstanding amount + if ( + self.against_voucher_type in ["Journal Entry", "Sales Invoice", "Purchase Invoice", "Fees"] + and self.flags.update_outstanding == "Yes" + and not frappe.flags.is_reverse_depr_entry + ): + update_voucher_outstanding( + self.against_voucher_type, self.against_voucher_no, self.account, self.party_type, self.party + ) + + +def on_doctype_update(): + frappe.db.add_index("Payment Ledger Entry", ["against_voucher_no", "against_voucher_type"]) + frappe.db.add_index("Payment Ledger Entry", ["voucher_no", "voucher_type"]) diff --git a/erpnext/accounts/doctype/payment_ledger_entry/test_payment_ledger_entry.py b/erpnext/accounts/doctype/payment_ledger_entry/test_payment_ledger_entry.py new file mode 100644 index 0000000000..a71b19e092 --- /dev/null +++ b/erpnext/accounts/doctype/payment_ledger_entry/test_payment_ledger_entry.py @@ -0,0 +1,408 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +import frappe +from frappe import qb +from frappe.tests.utils import FrappeTestCase +from frappe.utils import nowdate + +from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry +from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.stock.doctype.item.test_item import create_item + + +class TestPaymentLedgerEntry(FrappeTestCase): + def setUp(self): + self.ple = qb.DocType("Payment Ledger Entry") + self.create_company() + self.create_item() + self.create_customer() + self.clear_old_entries() + + def tearDown(self): + frappe.db.rollback() + + def create_company(self): + company_name = "_Test Payment Ledger" + company = None + if frappe.db.exists("Company", company_name): + company = frappe.get_doc("Company", company_name) + else: + company = frappe.get_doc( + { + "doctype": "Company", + "company_name": company_name, + "country": "India", + "default_currency": "INR", + "create_chart_of_accounts_based_on": "Standard Template", + "chart_of_accounts": "Standard", + } + ) + company = company.save() + + self.company = company.name + self.cost_center = company.cost_center + self.warehouse = "All Warehouses - _PL" + self.income_account = "Sales - _PL" + self.expense_account = "Cost of Goods Sold - _PL" + self.debit_to = "Debtors - _PL" + self.creditors = "Creditors - _PL" + + # create bank account + if frappe.db.exists("Account", "HDFC - _PL"): + self.bank = "HDFC - _PL" + else: + bank_acc = frappe.get_doc( + { + "doctype": "Account", + "account_name": "HDFC", + "parent_account": "Bank Accounts - _PL", + "company": self.company, + } + ) + bank_acc.save() + self.bank = bank_acc.name + + def create_item(self): + item_name = "_Test PL Item" + item = create_item( + item_code=item_name, is_stock_item=0, company=self.company, warehouse=self.warehouse + ) + self.item = item if isinstance(item, str) else item.item_code + + def create_customer(self): + name = "_Test PL Customer" + if frappe.db.exists("Customer", name): + self.customer = name + else: + customer = frappe.new_doc("Customer") + customer.customer_name = name + customer.type = "Individual" + customer.save() + self.customer = customer.name + + def create_sales_invoice( + self, qty=1, rate=100, posting_date=nowdate(), do_not_save=False, do_not_submit=False + ): + """ + Helper function to populate default values in sales invoice + """ + sinv = create_sales_invoice( + qty=qty, + rate=rate, + company=self.company, + customer=self.customer, + item_code=self.item, + item_name=self.item, + cost_center=self.cost_center, + warehouse=self.warehouse, + debit_to=self.debit_to, + parent_cost_center=self.cost_center, + update_stock=0, + currency="INR", + is_pos=0, + is_return=0, + return_against=None, + income_account=self.income_account, + expense_account=self.expense_account, + do_not_save=do_not_save, + do_not_submit=do_not_submit, + ) + return sinv + + def create_payment_entry(self, amount=100, posting_date=nowdate()): + """ + Helper function to populate default values in payment entry + """ + payment = create_payment_entry( + company=self.company, + payment_type="Receive", + party_type="Customer", + party=self.customer, + paid_from=self.debit_to, + paid_to=self.bank, + paid_amount=amount, + ) + payment.posting_date = posting_date + return payment + + def clear_old_entries(self): + doctype_list = [ + "GL Entry", + "Payment Ledger Entry", + "Sales Invoice", + "Purchase Invoice", + "Payment Entry", + "Journal Entry", + ] + for doctype in doctype_list: + qb.from_(qb.DocType(doctype)).delete().where(qb.DocType(doctype).company == self.company).run() + + def create_journal_entry( + self, acc1=None, acc2=None, amount=0, posting_date=None, cost_center=None + ): + je = frappe.new_doc("Journal Entry") + je.posting_date = posting_date or nowdate() + je.company = self.company + je.user_remark = "test" + if not cost_center: + cost_center = self.cost_center + je.set( + "accounts", + [ + { + "account": acc1, + "cost_center": cost_center, + "debit_in_account_currency": amount if amount > 0 else 0, + "credit_in_account_currency": abs(amount) if amount < 0 else 0, + }, + { + "account": acc2, + "cost_center": cost_center, + "credit_in_account_currency": amount if amount > 0 else 0, + "debit_in_account_currency": abs(amount) if amount < 0 else 0, + }, + ], + ) + return je + + def test_payment_against_invoice(self): + transaction_date = nowdate() + amount = 100 + ple = self.ple + + # full payment using PE + si1 = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + pe1 = get_payment_entry(si1.doctype, si1.name).save().submit() + + pl_entries = ( + qb.from_(ple) + .select( + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.amount, + ple.delinked, + ) + .where((ple.against_voucher_type == si1.doctype) & (ple.against_voucher_no == si1.name)) + .orderby(ple.creation) + .run(as_dict=True) + ) + + expected_values = [ + { + "voucher_type": si1.doctype, + "voucher_no": si1.name, + "against_voucher_type": si1.doctype, + "against_voucher_no": si1.name, + "amount": amount, + "delinked": 0, + }, + { + "voucher_type": pe1.doctype, + "voucher_no": pe1.name, + "against_voucher_type": si1.doctype, + "against_voucher_no": si1.name, + "amount": -amount, + "delinked": 0, + }, + ] + self.assertEqual(pl_entries[0], expected_values[0]) + self.assertEqual(pl_entries[1], expected_values[1]) + + def test_partial_payment_against_invoice(self): + ple = self.ple + transaction_date = nowdate() + amount = 100 + + # partial payment of invoice using PE + si2 = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + pe2 = get_payment_entry(si2.doctype, si2.name) + pe2.get("references")[0].allocated_amount = 50 + pe2.get("references")[0].outstanding_amount = 50 + pe2 = pe2.save().submit() + + pl_entries = ( + qb.from_(ple) + .select( + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.amount, + ple.delinked, + ) + .where((ple.against_voucher_type == si2.doctype) & (ple.against_voucher_no == si2.name)) + .orderby(ple.creation) + .run(as_dict=True) + ) + + expected_values = [ + { + "voucher_type": si2.doctype, + "voucher_no": si2.name, + "against_voucher_type": si2.doctype, + "against_voucher_no": si2.name, + "amount": amount, + "delinked": 0, + }, + { + "voucher_type": pe2.doctype, + "voucher_no": pe2.name, + "against_voucher_type": si2.doctype, + "against_voucher_no": si2.name, + "amount": -50, + "delinked": 0, + }, + ] + self.assertEqual(pl_entries[0], expected_values[0]) + self.assertEqual(pl_entries[1], expected_values[1]) + + def test_cr_note_against_invoice(self): + ple = self.ple + transaction_date = nowdate() + amount = 100 + + # reconcile against return invoice + si3 = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + cr_note1 = self.create_sales_invoice( + qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + cr_note1.is_return = 1 + cr_note1.return_against = si3.name + cr_note1 = cr_note1.save().submit() + + pl_entries = ( + qb.from_(ple) + .select( + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.amount, + ple.delinked, + ) + .where((ple.against_voucher_type == si3.doctype) & (ple.against_voucher_no == si3.name)) + .orderby(ple.creation) + .run(as_dict=True) + ) + + expected_values = [ + { + "voucher_type": si3.doctype, + "voucher_no": si3.name, + "against_voucher_type": si3.doctype, + "against_voucher_no": si3.name, + "amount": amount, + "delinked": 0, + }, + { + "voucher_type": cr_note1.doctype, + "voucher_no": cr_note1.name, + "against_voucher_type": si3.doctype, + "against_voucher_no": si3.name, + "amount": -amount, + "delinked": 0, + }, + ] + self.assertEqual(pl_entries[0], expected_values[0]) + self.assertEqual(pl_entries[1], expected_values[1]) + + def test_je_against_inv_and_note(self): + ple = self.ple + transaction_date = nowdate() + amount = 100 + + # reconcile against return invoice using JE + si4 = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + cr_note2 = self.create_sales_invoice( + qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + cr_note2.is_return = 1 + cr_note2 = cr_note2.save().submit() + je1 = self.create_journal_entry( + self.debit_to, self.debit_to, amount, posting_date=transaction_date + ) + je1.get("accounts")[0].party_type = je1.get("accounts")[1].party_type = "Customer" + je1.get("accounts")[0].party = je1.get("accounts")[1].party = self.customer + je1.get("accounts")[0].reference_type = cr_note2.doctype + je1.get("accounts")[0].reference_name = cr_note2.name + je1.get("accounts")[1].reference_type = si4.doctype + je1.get("accounts")[1].reference_name = si4.name + je1 = je1.save().submit() + + pl_entries_for_invoice = ( + qb.from_(ple) + .select( + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.amount, + ple.delinked, + ) + .where((ple.against_voucher_type == si4.doctype) & (ple.against_voucher_no == si4.name)) + .orderby(ple.creation) + .run(as_dict=True) + ) + + expected_values = [ + { + "voucher_type": si4.doctype, + "voucher_no": si4.name, + "against_voucher_type": si4.doctype, + "against_voucher_no": si4.name, + "amount": amount, + "delinked": 0, + }, + { + "voucher_type": je1.doctype, + "voucher_no": je1.name, + "against_voucher_type": si4.doctype, + "against_voucher_no": si4.name, + "amount": -amount, + "delinked": 0, + }, + ] + self.assertEqual(pl_entries_for_invoice[0], expected_values[0]) + self.assertEqual(pl_entries_for_invoice[1], expected_values[1]) + + pl_entries_for_crnote = ( + qb.from_(ple) + .select( + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.amount, + ple.delinked, + ) + .where( + (ple.against_voucher_type == cr_note2.doctype) & (ple.against_voucher_no == cr_note2.name) + ) + .orderby(ple.creation) + .run(as_dict=True) + ) + + expected_values = [ + { + "voucher_type": cr_note2.doctype, + "voucher_no": cr_note2.name, + "against_voucher_type": cr_note2.doctype, + "against_voucher_no": cr_note2.name, + "amount": -amount, + "delinked": 0, + }, + { + "voucher_type": je1.doctype, + "voucher_no": je1.name, + "against_voucher_type": cr_note2.doctype, + "against_voucher_no": cr_note2.name, + "amount": amount, + "delinked": 0, + }, + ] + self.assertEqual(pl_entries_for_crnote[0], expected_values[0]) + self.assertEqual(pl_entries_for_crnote[1], expected_values[1]) diff --git a/erpnext/accounts/doctype/payment_order/payment_order.py b/erpnext/accounts/doctype/payment_order/payment_order.py index 3c45d20770..ff9615d14f 100644 --- a/erpnext/accounts/doctype/payment_order/payment_order.py +++ b/erpnext/accounts/doctype/payment_order/payment_order.py @@ -39,7 +39,7 @@ def get_mop_query(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """ select mode_of_payment from `tabPayment Order Reference` where parent = %(parent)s and mode_of_payment like %(txt)s - limit %(start)s, %(page_len)s""", + limit %(page_len)s offset %(start)s""", {"parent": filters.get("parent"), "start": start, "page_len": page_len, "txt": "%%%s%%" % txt}, ) @@ -51,7 +51,7 @@ def get_supplier_query(doctype, txt, searchfield, start, page_len, filters): """ select supplier from `tabPayment Order Reference` where parent = %(parent)s and supplier like %(txt)s and (payment_reference is null or payment_reference='') - limit %(start)s, %(page_len)s""", + limit %(page_len)s offset %(start)s""", {"parent": filters.get("parent"), "start": start, "page_len": page_len, "txt": "%%%s%%" % txt}, ) diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index e5b942fb6e..5ed34d34a3 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -3,16 +3,26 @@ import frappe -from frappe import _, msgprint +from frappe import _, msgprint, qb from frappe.model.document import Document +from frappe.query_builder.custom import ConstantColumn +from frappe.query_builder.functions import IfNull from frappe.utils import flt, getdate, nowdate, today import erpnext -from erpnext.accounts.utils import get_outstanding_invoices, reconcile_against_document +from erpnext.accounts.utils import ( + QueryPaymentLedger, + get_outstanding_invoices, + reconcile_against_document, +) from erpnext.controllers.accounts_controller import get_advance_payment_entries class PaymentReconciliation(Document): + def __init__(self, *args, **kwargs): + super(PaymentReconciliation, self).__init__(*args, **kwargs) + self.common_filter_conditions = [] + @frappe.whitelist() def get_unreconciled_entries(self): self.get_nonreconciled_payment_entries() @@ -108,54 +118,58 @@ class PaymentReconciliation(Document): return list(journal_entries) def get_dr_or_cr_notes(self): - condition = self.get_conditions(get_return_invoices=True) - dr_or_cr = ( - "credit_in_account_currency" - if erpnext.get_party_account_type(self.party_type) == "Receivable" - else "debit_in_account_currency" - ) - reconciled_dr_or_cr = ( - "debit_in_account_currency" - if dr_or_cr == "credit_in_account_currency" - else "credit_in_account_currency" - ) + self.build_qb_filter_conditions(get_return_invoices=True) + ple = qb.DocType("Payment Ledger Entry") voucher_type = "Sales Invoice" if self.party_type == "Customer" else "Purchase Invoice" - return frappe.db.sql( - """ SELECT doc.name as reference_name, %(voucher_type)s as reference_type, - (sum(gl.{dr_or_cr}) - sum(gl.{reconciled_dr_or_cr})) as amount, doc.posting_date, - account_currency as currency - FROM `tab{doc}` doc, `tabGL Entry` gl - WHERE - (doc.name = gl.against_voucher or doc.name = gl.voucher_no) - and doc.{party_type_field} = %(party)s - and doc.is_return = 1 and ifnull(doc.return_against, "") = "" - and gl.against_voucher_type = %(voucher_type)s - and doc.docstatus = 1 and gl.party = %(party)s - and gl.party_type = %(party_type)s and gl.account = %(account)s - and gl.is_cancelled = 0 {condition} - GROUP BY doc.name - Having - amount > 0 - ORDER BY doc.posting_date - """.format( - doc=voucher_type, - dr_or_cr=dr_or_cr, - reconciled_dr_or_cr=reconciled_dr_or_cr, - party_type_field=frappe.scrub(self.party_type), - condition=condition or "", - ), - { - "party": self.party, - "party_type": self.party_type, - "voucher_type": voucher_type, - "account": self.receivable_payable_account, - }, - as_dict=1, + if erpnext.get_party_account_type(self.party_type) == "Receivable": + self.common_filter_conditions.append(ple.account_type == "Receivable") + else: + self.common_filter_conditions.append(ple.account_type == "Payable") + self.common_filter_conditions.append(ple.account == self.receivable_payable_account) + + # get return invoices + doc = qb.DocType(voucher_type) + return_invoices = ( + qb.from_(doc) + .select(ConstantColumn(voucher_type).as_("voucher_type"), doc.name.as_("voucher_no")) + .where( + (doc.docstatus == 1) + & (doc[frappe.scrub(self.party_type)] == self.party) + & (doc.is_return == 1) + & (IfNull(doc.return_against, "") == "") + ) + .run(as_dict=True) ) + outstanding_dr_or_cr = [] + if return_invoices: + ple_query = QueryPaymentLedger() + return_outstanding = ple_query.get_voucher_outstandings( + vouchers=return_invoices, + common_filter=self.common_filter_conditions, + min_outstanding=-(self.minimum_payment_amount) if self.minimum_payment_amount else None, + max_outstanding=-(self.maximum_payment_amount) if self.maximum_payment_amount else None, + get_payments=True, + ) + + for inv in return_outstanding: + if inv.outstanding != 0: + outstanding_dr_or_cr.append( + frappe._dict( + { + "reference_type": inv.voucher_type, + "reference_name": inv.voucher_no, + "amount": -(inv.outstanding_in_account_currency), + "posting_date": inv.posting_date, + "currency": inv.currency, + } + ) + ) + return outstanding_dr_or_cr + def add_payment_entries(self, non_reconciled_payments): self.set("payments", []) @@ -166,10 +180,15 @@ class PaymentReconciliation(Document): def get_invoice_entries(self): # Fetch JVs, Sales and Purchase Invoices for 'invoices' to reconcile against - condition = self.get_conditions(get_invoices=True) + self.build_qb_filter_conditions(get_invoices=True) non_reconciled_invoices = get_outstanding_invoices( - self.party_type, self.party, self.receivable_payable_account, condition=condition + self.party_type, + self.party, + self.receivable_payable_account, + common_filter=self.common_filter_conditions, + min_outstanding=self.minimum_invoice_amount if self.minimum_invoice_amount else None, + max_outstanding=self.maximum_invoice_amount if self.maximum_invoice_amount else None, ) if self.invoice_limit: @@ -329,89 +348,56 @@ class PaymentReconciliation(Document): if not invoices_to_reconcile: frappe.throw(_("No records found in Allocation table")) - def get_conditions(self, get_invoices=False, get_payments=False, get_return_invoices=False): - condition = " and company = '{0}' ".format(self.company) + def build_qb_filter_conditions(self, get_invoices=False, get_return_invoices=False): + self.common_filter_conditions.clear() + ple = qb.DocType("Payment Ledger Entry") - if self.get("cost_center") and (get_invoices or get_payments or get_return_invoices): - condition = " and cost_center = '{0}' ".format(self.cost_center) + self.common_filter_conditions.append(ple.company == self.company) + + if self.get("cost_center") and (get_invoices or get_return_invoices): + self.common_filter_conditions.append(ple.cost_center == self.cost_center) if get_invoices: - condition += ( - " and posting_date >= {0}".format(frappe.db.escape(self.from_invoice_date)) - if self.from_invoice_date - else "" - ) - condition += ( - " and posting_date <= {0}".format(frappe.db.escape(self.to_invoice_date)) - if self.to_invoice_date - else "" - ) - dr_or_cr = ( - "debit_in_account_currency" - if erpnext.get_party_account_type(self.party_type) == "Receivable" - else "credit_in_account_currency" - ) - - if self.minimum_invoice_amount: - condition += " and {dr_or_cr} >= {amount}".format( - dr_or_cr=dr_or_cr, amount=flt(self.minimum_invoice_amount) - ) - if self.maximum_invoice_amount: - condition += " and {dr_or_cr} <= {amount}".format( - dr_or_cr=dr_or_cr, amount=flt(self.maximum_invoice_amount) - ) + if self.from_invoice_date: + self.common_filter_conditions.append(ple.posting_date.gte(self.from_invoice_date)) + if self.to_invoice_date: + self.common_filter_conditions.append(ple.posting_date.lte(self.to_invoice_date)) elif get_return_invoices: - condition = " and doc.company = '{0}' ".format(self.company) - condition += ( - " and doc.posting_date >= {0}".format(frappe.db.escape(self.from_payment_date)) - if self.from_payment_date - else "" - ) - condition += ( - " and doc.posting_date <= {0}".format(frappe.db.escape(self.to_payment_date)) - if self.to_payment_date - else "" - ) - dr_or_cr = ( - "debit_in_account_currency" - if erpnext.get_party_account_type(self.party_type) == "Receivable" - else "credit_in_account_currency" - ) + if self.from_payment_date: + self.common_filter_conditions.append(ple.posting_date.gte(self.from_payment_date)) + if self.to_payment_date: + self.common_filter_conditions.append(ple.posting_date.lte(self.to_payment_date)) - if self.minimum_invoice_amount: - condition += " and gl.{dr_or_cr} >= {amount}".format( - dr_or_cr=dr_or_cr, amount=flt(self.minimum_payment_amount) - ) - if self.maximum_invoice_amount: - condition += " and gl.{dr_or_cr} <= {amount}".format( - dr_or_cr=dr_or_cr, amount=flt(self.maximum_payment_amount) - ) + def get_conditions(self, get_payments=False): + condition = " and company = '{0}' ".format(self.company) - else: - condition += ( - " and posting_date >= {0}".format(frappe.db.escape(self.from_payment_date)) - if self.from_payment_date - else "" - ) - condition += ( - " and posting_date <= {0}".format(frappe.db.escape(self.to_payment_date)) - if self.to_payment_date - else "" - ) + if self.get("cost_center") and get_payments: + condition = " and cost_center = '{0}' ".format(self.cost_center) - if self.minimum_payment_amount: - condition += ( - " and unallocated_amount >= {0}".format(flt(self.minimum_payment_amount)) - if get_payments - else " and total_debit >= {0}".format(flt(self.minimum_payment_amount)) - ) - if self.maximum_payment_amount: - condition += ( - " and unallocated_amount <= {0}".format(flt(self.maximum_payment_amount)) - if get_payments - else " and total_debit <= {0}".format(flt(self.maximum_payment_amount)) - ) + condition += ( + " and posting_date >= {0}".format(frappe.db.escape(self.from_payment_date)) + if self.from_payment_date + else "" + ) + condition += ( + " and posting_date <= {0}".format(frappe.db.escape(self.to_payment_date)) + if self.to_payment_date + else "" + ) + + if self.minimum_payment_amount: + condition += ( + " and unallocated_amount >= {0}".format(flt(self.minimum_payment_amount)) + if get_payments + else " and total_debit >= {0}".format(flt(self.minimum_payment_amount)) + ) + if self.maximum_payment_amount: + condition += ( + " and unallocated_amount <= {0}".format(flt(self.maximum_payment_amount)) + if get_payments + else " and total_debit <= {0}".format(flt(self.maximum_payment_amount)) + ) return condition diff --git a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py index d2374b77a6..625382a3e9 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py @@ -4,93 +4,542 @@ import unittest import frappe -from frappe.utils import add_days, getdate +from frappe import qb +from frappe.tests.utils import FrappeTestCase +from frappe.utils import add_days, nowdate +from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.accounts.party import get_party_account +from erpnext.stock.doctype.item.test_item import create_item -class TestPaymentReconciliation(unittest.TestCase): - @classmethod - def setUpClass(cls): - make_customer() - make_invoice_and_payment() +class TestPaymentReconciliation(FrappeTestCase): + def setUp(self): + self.create_company() + self.create_item() + self.create_customer() + self.create_account() + self.clear_old_entries() - def test_payment_reconciliation(self): - payment_reco = frappe.get_doc("Payment Reconciliation") - payment_reco.company = "_Test Company" - payment_reco.party_type = "Customer" - payment_reco.party = "_Test Payment Reco Customer" - payment_reco.receivable_payable_account = "Debtors - _TC" - payment_reco.from_invoice_date = add_days(getdate(), -1) - payment_reco.to_invoice_date = getdate() - payment_reco.from_payment_date = add_days(getdate(), -1) - payment_reco.to_payment_date = getdate() - payment_reco.maximum_invoice_amount = 1000 - payment_reco.maximum_payment_amount = 1000 - payment_reco.invoice_limit = 10 - payment_reco.payment_limit = 10 - payment_reco.bank_cash_account = "_Test Bank - _TC" - payment_reco.cost_center = "_Test Cost Center - _TC" - payment_reco.get_unreconciled_entries() + def tearDown(self): + frappe.db.rollback() - self.assertEqual(len(payment_reco.get("invoices")), 1) - self.assertEqual(len(payment_reco.get("payments")), 1) + def create_company(self): + company = None + if frappe.db.exists("Company", "_Test Payment Reconciliation"): + company = frappe.get_doc("Company", "_Test Payment Reconciliation") + else: + company = frappe.get_doc( + { + "doctype": "Company", + "company_name": "_Test Payment Reconciliation", + "country": "India", + "default_currency": "INR", + "create_chart_of_accounts_based_on": "Standard Template", + "chart_of_accounts": "Standard", + } + ) + company = company.save() - payment_entry = payment_reco.get("payments")[0].reference_name - invoice = payment_reco.get("invoices")[0].invoice_number + self.company = company.name + self.cost_center = company.cost_center + self.warehouse = "All Warehouses - _PR" + self.income_account = "Sales - _PR" + self.expense_account = "Cost of Goods Sold - _PR" + self.debit_to = "Debtors - _PR" + self.creditors = "Creditors - _PR" - payment_reco.allocate_entries( - { - "payments": [payment_reco.get("payments")[0].as_dict()], - "invoices": [payment_reco.get("invoices")[0].as_dict()], - } + # create bank account + if frappe.db.exists("Account", "HDFC - _PR"): + self.bank = "HDFC - _PR" + else: + bank_acc = frappe.get_doc( + { + "doctype": "Account", + "account_name": "HDFC", + "parent_account": "Bank Accounts - _PR", + "company": self.company, + } + ) + bank_acc.save() + self.bank = bank_acc.name + + def create_item(self): + item = create_item( + item_code="_Test PR Item", is_stock_item=0, company=self.company, warehouse=self.warehouse ) - payment_reco.reconcile() + self.item = item if isinstance(item, str) else item.item_code - payment_entry_doc = frappe.get_doc("Payment Entry", payment_entry) - self.assertEqual(payment_entry_doc.get("references")[0].reference_name, invoice) + def create_customer(self): + if frappe.db.exists("Customer", "_Test PR Customer"): + self.customer = "_Test PR Customer" + else: + customer = frappe.new_doc("Customer") + customer.customer_name = "_Test PR Customer" + customer.type = "Individual" + customer.save() + self.customer = customer.name + if frappe.db.exists("Customer", "_Test PR Customer 2"): + self.customer2 = "_Test PR Customer 2" + else: + customer = frappe.new_doc("Customer") + customer.customer_name = "_Test PR Customer 2" + customer.type = "Individual" + customer.save() + self.customer2 = customer.name -def make_customer(): - if not frappe.db.get_value("Customer", "_Test Payment Reco Customer"): - frappe.get_doc( - { - "doctype": "Customer", - "customer_name": "_Test Payment Reco Customer", - "customer_type": "Individual", - "customer_group": "_Test Customer Group", - "territory": "_Test Territory", - } - ).insert() + if frappe.db.exists("Customer", "_Test PR Customer 3"): + self.customer3 = "_Test PR Customer 3" + else: + customer = frappe.new_doc("Customer") + customer.customer_name = "_Test PR Customer 3" + customer.type = "Individual" + customer.default_currency = "EUR" + customer.save() + self.customer3 = customer.name + def create_account(self): + account_name = "Debtors EUR" + if not frappe.db.get_value( + "Account", filters={"account_name": account_name, "company": self.company} + ): + acc = frappe.new_doc("Account") + acc.account_name = account_name + acc.parent_account = "Accounts Receivable - _PR" + acc.company = self.company + acc.account_currency = "EUR" + acc.account_type = "Receivable" + acc.insert() + else: + name = frappe.db.get_value( + "Account", + filters={"account_name": account_name, "company": self.company}, + fieldname="name", + pluck=True, + ) + acc = frappe.get_doc("Account", name) + self.debtors_eur = acc.name -def make_invoice_and_payment(): - si = create_sales_invoice( - customer="_Test Payment Reco Customer", qty=1, rate=690, do_not_save=True - ) - si.cost_center = "_Test Cost Center - _TC" - si.save() - si.submit() + def create_sales_invoice( + self, qty=1, rate=100, posting_date=nowdate(), do_not_save=False, do_not_submit=False + ): + """ + Helper function to populate default values in sales invoice + """ + sinv = create_sales_invoice( + qty=qty, + rate=rate, + company=self.company, + customer=self.customer, + item_code=self.item, + item_name=self.item, + cost_center=self.cost_center, + warehouse=self.warehouse, + debit_to=self.debit_to, + parent_cost_center=self.cost_center, + update_stock=0, + currency="INR", + is_pos=0, + is_return=0, + return_against=None, + income_account=self.income_account, + expense_account=self.expense_account, + do_not_save=do_not_save, + do_not_submit=do_not_submit, + ) + return sinv - pe = frappe.get_doc( - { - "doctype": "Payment Entry", - "payment_type": "Receive", - "party_type": "Customer", - "party": "_Test Payment Reco Customer", - "company": "_Test Company", - "paid_from_account_currency": "INR", - "paid_to_account_currency": "INR", - "source_exchange_rate": 1, - "target_exchange_rate": 1, - "reference_no": "1", - "reference_date": getdate(), - "received_amount": 690, - "paid_amount": 690, - "paid_from": "Debtors - _TC", - "paid_to": "_Test Bank - _TC", - "cost_center": "_Test Cost Center - _TC", - } - ) - pe.insert() - pe.submit() + def create_payment_entry(self, amount=100, posting_date=nowdate(), customer=None): + """ + Helper function to populate default values in payment entry + """ + payment = create_payment_entry( + company=self.company, + payment_type="Receive", + party_type="Customer", + party=customer or self.customer, + paid_from=self.debit_to, + paid_to=self.bank, + paid_amount=amount, + ) + payment.posting_date = posting_date + return payment + + def clear_old_entries(self): + doctype_list = [ + "GL Entry", + "Payment Ledger Entry", + "Sales Invoice", + "Purchase Invoice", + "Payment Entry", + "Journal Entry", + ] + for doctype in doctype_list: + qb.from_(qb.DocType(doctype)).delete().where(qb.DocType(doctype).company == self.company).run() + + def create_payment_reconciliation(self): + pr = frappe.new_doc("Payment Reconciliation") + pr.company = self.company + pr.party_type = "Customer" + pr.party = self.customer + pr.receivable_payable_account = get_party_account(pr.party_type, pr.party, pr.company) + pr.from_invoice_date = pr.to_invoice_date = pr.from_payment_date = pr.to_payment_date = nowdate() + return pr + + def create_journal_entry( + self, acc1=None, acc2=None, amount=0, posting_date=None, cost_center=None + ): + je = frappe.new_doc("Journal Entry") + je.posting_date = posting_date or nowdate() + je.company = self.company + je.user_remark = "test" + if not cost_center: + cost_center = self.cost_center + je.set( + "accounts", + [ + { + "account": acc1, + "cost_center": cost_center, + "debit_in_account_currency": amount if amount > 0 else 0, + "credit_in_account_currency": abs(amount) if amount < 0 else 0, + }, + { + "account": acc2, + "cost_center": cost_center, + "credit_in_account_currency": amount if amount > 0 else 0, + "debit_in_account_currency": abs(amount) if amount < 0 else 0, + }, + ], + ) + return je + + def test_filter_min_max(self): + # check filter condition minimum and maximum amount + self.create_sales_invoice(qty=1, rate=300) + self.create_sales_invoice(qty=1, rate=400) + self.create_sales_invoice(qty=1, rate=500) + self.create_payment_entry(amount=300).save().submit() + self.create_payment_entry(amount=400).save().submit() + self.create_payment_entry(amount=500).save().submit() + + pr = self.create_payment_reconciliation() + pr.minimum_invoice_amount = 400 + pr.maximum_invoice_amount = 500 + pr.minimum_payment_amount = 300 + pr.maximum_payment_amount = 600 + pr.get_unreconciled_entries() + self.assertEqual(len(pr.get("invoices")), 2) + self.assertEqual(len(pr.get("payments")), 3) + + pr.minimum_invoice_amount = 300 + pr.maximum_invoice_amount = 600 + pr.minimum_payment_amount = 400 + pr.maximum_payment_amount = 500 + pr.get_unreconciled_entries() + self.assertEqual(len(pr.get("invoices")), 3) + self.assertEqual(len(pr.get("payments")), 2) + + pr.minimum_invoice_amount = ( + pr.maximum_invoice_amount + ) = pr.minimum_payment_amount = pr.maximum_payment_amount = 0 + pr.get_unreconciled_entries() + self.assertEqual(len(pr.get("invoices")), 3) + self.assertEqual(len(pr.get("payments")), 3) + + def test_filter_posting_date(self): + # check filter condition using transaction date + date1 = nowdate() + date2 = add_days(nowdate(), -1) + amount = 100 + self.create_sales_invoice(qty=1, rate=amount, posting_date=date1) + si2 = self.create_sales_invoice( + qty=1, rate=amount, posting_date=date2, do_not_save=True, do_not_submit=True + ) + si2.set_posting_time = 1 + si2.posting_date = date2 + si2.save().submit() + self.create_payment_entry(amount=amount, posting_date=date1).save().submit() + self.create_payment_entry(amount=amount, posting_date=date2).save().submit() + + pr = self.create_payment_reconciliation() + pr.from_invoice_date = pr.to_invoice_date = date1 + pr.from_payment_date = pr.to_payment_date = date1 + + pr.get_unreconciled_entries() + # assert only si and pe are fetched + self.assertEqual(len(pr.get("invoices")), 1) + self.assertEqual(len(pr.get("payments")), 1) + + pr.from_invoice_date = date2 + pr.to_invoice_date = date1 + pr.from_payment_date = date2 + pr.to_payment_date = date1 + + pr.get_unreconciled_entries() + # assert only si and pe are fetched + self.assertEqual(len(pr.get("invoices")), 2) + self.assertEqual(len(pr.get("payments")), 2) + + def test_filter_invoice_limit(self): + # check filter condition - invoice limit + transaction_date = nowdate() + rate = 100 + invoices = [] + payments = [] + for i in range(5): + invoices.append(self.create_sales_invoice(qty=1, rate=rate, posting_date=transaction_date)) + pe = self.create_payment_entry(amount=rate, posting_date=transaction_date).save().submit() + payments.append(pe) + + pr = self.create_payment_reconciliation() + pr.from_invoice_date = pr.to_invoice_date = transaction_date + pr.from_payment_date = pr.to_payment_date = transaction_date + pr.invoice_limit = 2 + pr.payment_limit = 3 + pr.get_unreconciled_entries() + + self.assertEqual(len(pr.get("invoices")), 2) + self.assertEqual(len(pr.get("payments")), 3) + + def test_payment_against_invoice(self): + si = self.create_sales_invoice(qty=1, rate=200) + pe = self.create_payment_entry(amount=55).save().submit() + # second payment entry + self.create_payment_entry(amount=35).save().submit() + + pr = self.create_payment_reconciliation() + + # reconcile multiple payments against invoice + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.reconcile() + + si.reload() + self.assertEqual(si.status, "Partly Paid") + # check PR tool output post reconciliation + self.assertEqual(len(pr.get("invoices")), 1) + self.assertEqual(pr.get("invoices")[0].get("outstanding_amount"), 110) + self.assertEqual(pr.get("payments"), []) + + # cancel one PE + pe.reload() + pe.cancel() + pr.get_unreconciled_entries() + # check PR tool output + self.assertEqual(len(pr.get("invoices")), 1) + self.assertEqual(len(pr.get("payments")), 0) + self.assertEqual(pr.get("invoices")[0].get("outstanding_amount"), 165) + + def test_payment_against_journal(self): + transaction_date = nowdate() + + sales = "Sales - _PR" + amount = 921 + # debit debtors account to record an invoice + je = self.create_journal_entry(self.debit_to, sales, amount, transaction_date) + je.accounts[0].party_type = "Customer" + je.accounts[0].party = self.customer + je.save() + je.submit() + + self.create_payment_entry(amount=amount, posting_date=transaction_date).save().submit() + + pr = self.create_payment_reconciliation() + pr.minimum_invoice_amount = pr.maximum_invoice_amount = amount + pr.from_invoice_date = pr.to_invoice_date = transaction_date + pr.from_payment_date = pr.to_payment_date = transaction_date + + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.reconcile() + + # check PR tool output + self.assertEqual(len(pr.get("invoices")), 0) + self.assertEqual(len(pr.get("payments")), 0) + + def test_journal_against_invoice(self): + transaction_date = nowdate() + amount = 100 + si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + + # credit debtors account to record a payment + je = self.create_journal_entry(self.bank, self.debit_to, amount, transaction_date) + je.accounts[1].party_type = "Customer" + je.accounts[1].party = self.customer + je.save() + je.submit() + + pr = self.create_payment_reconciliation() + + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.reconcile() + + # assert outstanding + si.reload() + self.assertEqual(si.status, "Paid") + self.assertEqual(si.outstanding_amount, 0) + + # check PR tool output + self.assertEqual(len(pr.get("invoices")), 0) + self.assertEqual(len(pr.get("payments")), 0) + + def test_journal_against_journal(self): + transaction_date = nowdate() + sales = "Sales - _PR" + amount = 100 + + # debit debtors account to simulate a invoice + je1 = self.create_journal_entry(self.debit_to, sales, amount, transaction_date) + je1.accounts[0].party_type = "Customer" + je1.accounts[0].party = self.customer + je1.save() + je1.submit() + + # credit debtors account to simulate a payment + je2 = self.create_journal_entry(self.bank, self.debit_to, amount, transaction_date) + je2.accounts[1].party_type = "Customer" + je2.accounts[1].party = self.customer + je2.save() + je2.submit() + + pr = self.create_payment_reconciliation() + + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.reconcile() + + self.assertEqual(pr.get("invoices"), []) + self.assertEqual(pr.get("payments"), []) + + def test_cr_note_against_invoice(self): + transaction_date = nowdate() + amount = 100 + + si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + + cr_note = self.create_sales_invoice( + qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + cr_note.is_return = 1 + cr_note = cr_note.save().submit() + + pr = self.create_payment_reconciliation() + + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.reconcile() + + pr.get_unreconciled_entries() + # check reconciliation tool output + # reconciled invoice and credit note shouldn't show up in selection + self.assertEqual(pr.get("invoices"), []) + self.assertEqual(pr.get("payments"), []) + + # assert outstanding + si.reload() + self.assertEqual(si.status, "Paid") + self.assertEqual(si.outstanding_amount, 0) + + def test_cr_note_partial_against_invoice(self): + transaction_date = nowdate() + amount = 100 + allocated_amount = 80 + + si = self.create_sales_invoice(qty=1, rate=amount, posting_date=transaction_date) + + cr_note = self.create_sales_invoice( + qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + cr_note.is_return = 1 + cr_note = cr_note.save().submit() + + pr = self.create_payment_reconciliation() + + pr.get_unreconciled_entries() + invoices = [x.as_dict() for x in pr.get("invoices")] + payments = [x.as_dict() for x in pr.get("payments")] + pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) + pr.allocation[0].allocated_amount = allocated_amount + pr.reconcile() + + # assert outstanding + si.reload() + self.assertEqual(si.status, "Partly Paid") + self.assertEqual(si.outstanding_amount, 20) + + pr.get_unreconciled_entries() + # check reconciliation tool output + self.assertEqual(len(pr.get("invoices")), 1) + self.assertEqual(len(pr.get("payments")), 1) + self.assertEqual(pr.get("invoices")[0].outstanding_amount, 20) + self.assertEqual(pr.get("payments")[0].amount, 20) + + def test_pr_output_foreign_currency_and_amount(self): + # test for currency and amount invoices and payments + transaction_date = nowdate() + # In EUR + amount = 100 + exchange_rate = 80 + + si = self.create_sales_invoice( + qty=1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + si.customer = self.customer3 + si.currency = "EUR" + si.conversion_rate = exchange_rate + si.debit_to = self.debtors_eur + si = si.save().submit() + + cr_note = self.create_sales_invoice( + qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True + ) + cr_note.customer = self.customer3 + cr_note.is_return = 1 + cr_note.currency = "EUR" + cr_note.conversion_rate = exchange_rate + cr_note.debit_to = self.debtors_eur + cr_note = cr_note.save().submit() + + pr = self.create_payment_reconciliation() + pr.party = self.customer3 + pr.receivable_payable_account = self.debtors_eur + pr.get_unreconciled_entries() + + self.assertEqual(len(pr.invoices), 1) + self.assertEqual(len(pr.payments), 1) + + self.assertEqual(pr.invoices[0].amount, amount) + self.assertEqual(pr.invoices[0].currency, "EUR") + self.assertEqual(pr.payments[0].amount, amount) + self.assertEqual(pr.payments[0].currency, "EUR") + + cr_note.cancel() + + pay = self.create_payment_entry( + amount=amount, posting_date=transaction_date, customer=self.customer3 + ) + pay.paid_from = self.debtors_eur + pay.paid_from_account_currency = "EUR" + pay.source_exchange_rate = exchange_rate + pay.received_amount = exchange_rate * amount + pay = pay.save().submit() + + pr.get_unreconciled_entries() + self.assertEqual(len(pr.invoices), 1) + self.assertEqual(len(pr.payments), 1) + self.assertEqual(pr.payments[0].amount, amount) + self.assertEqual(pr.payments[0].currency, "EUR") diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.json b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.json index 84c941ecc1..54a76b3419 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.json +++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.json @@ -10,10 +10,11 @@ "fiscal_year", "amended_from", "company", - "cost_center_wise_pnl", "column_break1", "closing_account_head", - "remarks" + "remarks", + "gle_processing_status", + "error_message" ], "fields": [ { @@ -86,17 +87,26 @@ "reqd": 1 }, { - "default": "0", - "fieldname": "cost_center_wise_pnl", - "fieldtype": "Check", - "label": "Book Cost Center Wise Profit/Loss" + "depends_on": "eval:doc.docstatus!=0", + "fieldname": "gle_processing_status", + "fieldtype": "Select", + "label": "GL Entry Processing Status", + "options": "In Progress\nCompleted\nFailed", + "read_only": 1 + }, + { + "depends_on": "eval:doc.gle_processing_status=='Failed'", + "fieldname": "error_message", + "fieldtype": "Text", + "label": "Error Message", + "read_only": 1 } ], "icon": "fa fa-file-text", "idx": 1, "is_submittable": 1, "links": [], - "modified": "2021-05-20 15:27:37.210458", + "modified": "2022-07-20 14:51:04.714154", "modified_by": "Administrator", "module": "Accounts", "name": "Period Closing Voucher", diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py index 53b1c64c46..866a94d04b 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -8,7 +8,6 @@ from frappe.utils import flt from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( get_accounting_dimensions, - get_dimensions, ) from erpnext.accounts.utils import get_account_currency from erpnext.controllers.accounts_controller import AccountsController @@ -20,13 +19,28 @@ class PeriodClosingVoucher(AccountsController): self.validate_posting_date() def on_submit(self): + self.db_set("gle_processing_status", "In Progress") self.make_gl_entries() def on_cancel(self): + self.db_set("gle_processing_status", "In Progress") self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") - from erpnext.accounts.general_ledger import make_reverse_gl_entries - - make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name) + gle_count = frappe.db.count( + "GL Entry", + {"voucher_type": "Period Closing Voucher", "voucher_no": self.name, "is_cancelled": 0}, + ) + if gle_count > 5000: + frappe.enqueue( + make_reverse_gl_entries, + voucher_type="Period Closing Voucher", + voucher_no=self.name, + queue="long", + ) + frappe.msgprint( + _("The GL Entries will be cancelled in the background, it can take a few minutes."), alert=True + ) + else: + make_reverse_gl_entries(voucher_type="Period Closing Voucher", voucher_no=self.name) def validate_account_head(self): closing_account_type = frappe.db.get_value("Account", self.closing_account_head, "root_type") @@ -54,8 +68,8 @@ class PeriodClosingVoucher(AccountsController): pce = frappe.db.sql( """select name from `tabPeriod Closing Voucher` - where posting_date > %s and fiscal_year = %s and docstatus = 1""", - (self.posting_date, self.fiscal_year), + where posting_date > %s and fiscal_year = %s and docstatus = 1 and company = %s""", + (self.posting_date, self.fiscal_year, self.company), ) if pce and pce[0][0]: frappe.throw( @@ -67,90 +81,80 @@ class PeriodClosingVoucher(AccountsController): def make_gl_entries(self): gl_entries = self.get_gl_entries() if gl_entries: - from erpnext.accounts.general_ledger import make_gl_entries - - make_gl_entries(gl_entries) + if len(gl_entries) > 5000: + frappe.enqueue(process_gl_entries, gl_entries=gl_entries, queue="long") + frappe.msgprint( + _("The GL Entries will be processed in the background, it can take a few minutes."), + alert=True, + ) + else: + process_gl_entries(gl_entries) def get_gl_entries(self): gl_entries = [] - pl_accounts = self.get_pl_balances() - for acc in pl_accounts: + # pl account + for acc in self.get_pl_balances_based_on_dimensions(group_by_account=True): if flt(acc.bal_in_company_currency): - gl_entries.append( - self.get_gl_dict( - { - "account": acc.account, - "cost_center": acc.cost_center, - "finance_book": acc.finance_book, - "account_currency": acc.account_currency, - "debit_in_account_currency": abs(flt(acc.bal_in_account_currency)) - if flt(acc.bal_in_account_currency) < 0 - else 0, - "debit": abs(flt(acc.bal_in_company_currency)) - if flt(acc.bal_in_company_currency) < 0 - else 0, - "credit_in_account_currency": abs(flt(acc.bal_in_account_currency)) - if flt(acc.bal_in_account_currency) > 0 - else 0, - "credit": abs(flt(acc.bal_in_company_currency)) - if flt(acc.bal_in_company_currency) > 0 - else 0, - }, - item=acc, - ) - ) + gl_entries.append(self.get_gle_for_pl_account(acc)) - if gl_entries: - gle_for_net_pl_bal = self.get_pnl_gl_entry(pl_accounts) - gl_entries += gle_for_net_pl_bal + # closing liability account + for acc in self.get_pl_balances_based_on_dimensions(group_by_account=False): + if flt(acc.bal_in_company_currency): + gl_entries.append(self.get_gle_for_closing_account(acc)) return gl_entries - def get_pnl_gl_entry(self, pl_accounts): - company_cost_center = frappe.db.get_value("Company", self.company, "cost_center") - gl_entries = [] + def get_gle_for_pl_account(self, acc): + gl_entry = self.get_gl_dict( + { + "account": acc.account, + "cost_center": acc.cost_center, + "finance_book": acc.finance_book, + "account_currency": acc.account_currency, + "debit_in_account_currency": abs(flt(acc.bal_in_account_currency)) + if flt(acc.bal_in_account_currency) < 0 + else 0, + "debit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) < 0 else 0, + "credit_in_account_currency": abs(flt(acc.bal_in_account_currency)) + if flt(acc.bal_in_account_currency) > 0 + else 0, + "credit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) > 0 else 0, + }, + item=acc, + ) + self.update_default_dimensions(gl_entry, acc) + return gl_entry - for acc in pl_accounts: - if flt(acc.bal_in_company_currency): - cost_center = acc.cost_center if self.cost_center_wise_pnl else company_cost_center - gl_entry = self.get_gl_dict( - { - "account": self.closing_account_head, - "cost_center": cost_center, - "finance_book": acc.finance_book, - "account_currency": acc.account_currency, - "debit_in_account_currency": abs(flt(acc.bal_in_account_currency)) - if flt(acc.bal_in_account_currency) > 0 - else 0, - "debit": abs(flt(acc.bal_in_company_currency)) - if flt(acc.bal_in_company_currency) > 0 - else 0, - "credit_in_account_currency": abs(flt(acc.bal_in_account_currency)) - if flt(acc.bal_in_account_currency) < 0 - else 0, - "credit": abs(flt(acc.bal_in_company_currency)) - if flt(acc.bal_in_company_currency) < 0 - else 0, - }, - item=acc, - ) + def get_gle_for_closing_account(self, acc): + gl_entry = self.get_gl_dict( + { + "account": self.closing_account_head, + "cost_center": acc.cost_center, + "finance_book": acc.finance_book, + "account_currency": acc.account_currency, + "debit_in_account_currency": abs(flt(acc.bal_in_account_currency)) + if flt(acc.bal_in_account_currency) > 0 + else 0, + "debit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) > 0 else 0, + "credit_in_account_currency": abs(flt(acc.bal_in_account_currency)) + if flt(acc.bal_in_account_currency) < 0 + else 0, + "credit": abs(flt(acc.bal_in_company_currency)) if flt(acc.bal_in_company_currency) < 0 else 0, + }, + item=acc, + ) + self.update_default_dimensions(gl_entry, acc) + return gl_entry - self.update_default_dimensions(gl_entry) - - gl_entries.append(gl_entry) - - return gl_entries - - def update_default_dimensions(self, gl_entry): + def update_default_dimensions(self, gl_entry, acc): if not self.accounting_dimensions: self.accounting_dimensions = get_accounting_dimensions() - _, default_dimensions = get_dimensions() for dimension in self.accounting_dimensions: - gl_entry.update({dimension: default_dimensions.get(self.company, {}).get(dimension)}) + gl_entry.update({dimension: acc.get(dimension)}) - def get_pl_balances(self): + def get_pl_balances_based_on_dimensions(self, group_by_account=False): """Get balance for dimension-wise pl accounts""" dimension_fields = ["t1.cost_center", "t1.finance_book"] @@ -159,20 +163,56 @@ class PeriodClosingVoucher(AccountsController): for dimension in self.accounting_dimensions: dimension_fields.append("t1.{0}".format(dimension)) + if group_by_account: + dimension_fields.append("t1.account") + return frappe.db.sql( """ select - t1.account, t2.account_currency, {dimension_fields}, + t2.account_currency, + {dimension_fields}, sum(t1.debit_in_account_currency) - sum(t1.credit_in_account_currency) as bal_in_account_currency, sum(t1.debit) - sum(t1.credit) as bal_in_company_currency from `tabGL Entry` t1, `tabAccount` t2 - where t1.is_cancelled = 0 and t1.account = t2.name and t2.report_type = 'Profit and Loss' - and t2.docstatus < 2 and t2.company = %s - and t1.posting_date between %s and %s - group by t1.account, {dimension_fields} + where + t1.is_cancelled = 0 + and t1.account = t2.name + and t2.report_type = 'Profit and Loss' + and t2.docstatus < 2 + and t2.company = %s + and t1.posting_date between %s and %s + group by {dimension_fields} """.format( dimension_fields=", ".join(dimension_fields) ), (self.company, self.get("year_start_date"), self.posting_date), as_dict=1, ) + + +def process_gl_entries(gl_entries): + from erpnext.accounts.general_ledger import make_gl_entries + + try: + make_gl_entries(gl_entries, merge_entries=False) + frappe.db.set_value( + "Period Closing Voucher", gl_entries[0].get("voucher_no"), "gle_processing_status", "Completed" + ) + except Exception as e: + frappe.db.rollback() + frappe.log_error(e) + frappe.db.set_value( + "Period Closing Voucher", gl_entries[0].get("voucher_no"), "gle_processing_status", "Failed" + ) + + +def make_reverse_gl_entries(voucher_type, voucher_no): + from erpnext.accounts.general_ledger import make_reverse_gl_entries + + try: + make_reverse_gl_entries(voucher_type=voucher_type, voucher_no=voucher_no) + frappe.db.set_value("Period Closing Voucher", voucher_no, "gle_processing_status", "Completed") + except Exception as e: + frappe.db.rollback() + frappe.log_error(e) + frappe.db.set_value("Period Closing Voucher", voucher_no, "gle_processing_status", "Failed") diff --git a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py index 8e0e62d5f8..3dca58856b 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py +++ b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py @@ -49,7 +49,7 @@ class TestPeriodClosingVoucher(unittest.TestCase): expected_gle = ( ("Cost of Goods Sold - TPC", 0.0, 600.0), - (surplus_account, 600.0, 400.0), + (surplus_account, 200.0, 0.0), ("Sales - TPC", 400.0, 0.0), ) @@ -59,7 +59,8 @@ class TestPeriodClosingVoucher(unittest.TestCase): """, (pcv.name), ) - + pcv.reload() + self.assertEqual(pcv.gle_processing_status, "Completed") self.assertEqual(pcv_gle, expected_gle) def test_cost_center_wise_posting(self): @@ -78,6 +79,8 @@ class TestPeriodClosingVoucher(unittest.TestCase): expense_account="Cost of Goods Sold - TPC", rate=400, debit_to="Debtors - TPC", + currency="USD", + customer="_Test Customer USD", ) create_sales_invoice( company=company, @@ -86,10 +89,11 @@ class TestPeriodClosingVoucher(unittest.TestCase): expense_account="Cost of Goods Sold - TPC", rate=200, debit_to="Debtors - TPC", + currency="USD", + customer="_Test Customer USD", ) pcv = self.make_period_closing_voucher(submit=False) - pcv.cost_center_wise_pnl = 1 pcv.save() pcv.submit() surplus_account = pcv.closing_account_head @@ -112,6 +116,16 @@ class TestPeriodClosingVoucher(unittest.TestCase): self.assertEqual(pcv_gle, expected_gle) + pcv.reload() + pcv.cancel() + + self.assertFalse( + frappe.db.get_value( + "GL Entry", + {"voucher_type": "Period Closing Voucher", "voucher_no": pcv.name, "is_cancelled": 0}, + ) + ) + def test_period_closing_with_finance_book_entries(self): frappe.db.sql("delete from `tabGL Entry` where company='Test PCV Company'") @@ -119,14 +133,17 @@ class TestPeriodClosingVoucher(unittest.TestCase): surplus_account = create_account() cost_center = create_cost_center("Test Cost Center 1") - create_sales_invoice( + si = create_sales_invoice( company=company, income_account="Sales - TPC", expense_account="Cost of Goods Sold - TPC", cost_center=cost_center, rate=400, debit_to="Debtors - TPC", + currency="USD", + customer="_Test Customer USD", ) + jv = make_journal_entry( account1="Cash - TPC", account2="Sales - TPC", diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js index 264d4a68b0..98f3420d87 100644 --- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js +++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js @@ -64,13 +64,15 @@ frappe.ui.form.on('POS Closing Entry', { pos_opening_entry(frm) { if (frm.doc.pos_opening_entry && frm.doc.period_start_date && frm.doc.period_end_date && frm.doc.user) { reset_values(frm); - frm.trigger("set_opening_amounts"); - frm.trigger("get_pos_invoices"); + frappe.run_serially([ + () => frm.trigger("set_opening_amounts"), + () => frm.trigger("get_pos_invoices") + ]); } }, set_opening_amounts(frm) { - frappe.db.get_doc("POS Opening Entry", frm.doc.pos_opening_entry) + return frappe.db.get_doc("POS Opening Entry", frm.doc.pos_opening_entry) .then(({ balance_details }) => { balance_details.forEach(detail => { frm.add_child("payment_reconciliation", { @@ -83,7 +85,7 @@ frappe.ui.form.on('POS Closing Entry', { }, get_pos_invoices(frm) { - frappe.call({ + return frappe.call({ method: 'erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_pos_invoices', args: { start: frappe.datetime.get_datetime_as_string(frm.doc.period_start_date), @@ -100,7 +102,9 @@ frappe.ui.form.on('POS Closing Entry', { }); }, - before_save: function(frm) { + before_save: async function(frm) { + frappe.dom.freeze(__('Processing Sales! Please Wait...')); + frm.set_value("grand_total", 0); frm.set_value("net_total", 0); frm.set_value("total_quantity", 0); @@ -110,17 +114,23 @@ frappe.ui.form.on('POS Closing Entry', { row.expected_amount = row.opening_amount; } - for (let row of frm.doc.pos_transactions) { - frappe.db.get_doc("POS Invoice", row.pos_invoice).then(doc => { - frm.doc.grand_total += flt(doc.grand_total); - frm.doc.net_total += flt(doc.net_total); - frm.doc.total_quantity += flt(doc.total_qty); - refresh_payments(doc, frm); - refresh_taxes(doc, frm); - refresh_fields(frm); - set_html_data(frm); - }); + const pos_inv_promises = frm.doc.pos_transactions.map( + row => frappe.db.get_doc("POS Invoice", row.pos_invoice) + ); + + const pos_invoices = await Promise.all(pos_inv_promises); + + for (let doc of pos_invoices) { + frm.doc.grand_total += flt(doc.grand_total); + frm.doc.net_total += flt(doc.net_total); + frm.doc.total_quantity += flt(doc.total_qty); + refresh_payments(doc, frm); + refresh_taxes(doc, frm); + refresh_fields(frm); + set_html_data(frm); } + + frappe.dom.unfreeze(); } }); diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json index b8500270d1..b126d57400 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -164,8 +164,6 @@ "debit_to", "party_account_currency", "is_opening", - "c_form_applicable", - "c_form_no", "column_break8", "remarks", "sales_team_section_break", @@ -1399,23 +1397,6 @@ "options": "No\nYes", "print_hide": 1 }, - { - "fieldname": "c_form_applicable", - "fieldtype": "Select", - "label": "C-Form Applicable", - "no_copy": 1, - "options": "No\nYes", - "print_hide": 1 - }, - { - "fieldname": "c_form_no", - "fieldtype": "Link", - "label": "C-Form No", - "no_copy": 1, - "options": "C-Form", - "print_hide": 1, - "read_only": 1 - }, { "fieldname": "column_break8", "fieldtype": "Column Break", diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py index 94246e135b..6e3a0766f1 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py @@ -96,6 +96,7 @@ class POSInvoice(SalesInvoice): ) def on_cancel(self): + self.ignore_linked_doctypes = "Payment Ledger Entry" # run on cancel method of selling controller super(SalesInvoice, self).on_cancel() if not self.is_return and self.loyalty_program: @@ -221,9 +222,6 @@ class POSInvoice(SalesInvoice): from erpnext.stock.stock_ledger import is_negative_stock_allowed for d in self.get("items"): - is_service_item = not (frappe.db.get_value("Item", d.get("item_code"), "is_stock_item")) - if is_service_item: - return if d.serial_no: self.validate_pos_reserved_serial_nos(d) self.validate_delivered_serial_nos(d) diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py index d3a81fe61d..5003a1d6a8 100644 --- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py +++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py @@ -9,7 +9,7 @@ from frappe import _ from frappe.core.page.background_jobs.background_jobs import get_info from frappe.model.document import Document from frappe.model.mapper import map_child_doc, map_doc -from frappe.utils import flt, getdate, nowdate +from frappe.utils import cint, flt, getdate, nowdate from frappe.utils.background_jobs import enqueue from frappe.utils.scheduler import is_scheduler_inactive @@ -219,6 +219,9 @@ class POSInvoiceMergeLog(Document): invoice.taxes_and_charges = None invoice.ignore_pricing_rule = 1 invoice.customer = self.customer + invoice.disable_rounded_total = cint( + frappe.db.get_value("POS Profile", invoice.pos_profile, "disable_rounded_total") + ) if self.merge_invoices_based_on == "Customer Group": invoice.flags.ignore_pos_profile = True diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json index 11646a6517..d5f7ee4f21 100644 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.json +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json @@ -44,6 +44,7 @@ "write_off_account", "write_off_cost_center", "account_for_change_amount", + "disable_rounded_total", "column_break_23", "income_account", "expense_account", @@ -358,6 +359,13 @@ "fieldname": "validate_stock_on_save", "fieldtype": "Check", "label": "Validate Stock on Save" + }, + { + "default": "0", + "description": "If enabled, the consolidated invoices will have rounded total disabled", + "fieldname": "disable_rounded_total", + "fieldtype": "Check", + "label": "Disable Rounded Total" } ], "icon": "icon-cog", @@ -385,7 +393,7 @@ "link_fieldname": "pos_profile" } ], - "modified": "2022-03-21 13:29:28.480533", + "modified": "2022-07-21 11:16:46.911173", "modified_by": "Administrator", "module": "Accounts", "name": "POS Profile", diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.py b/erpnext/accounts/doctype/pos_profile/pos_profile.py index e83dc0f11e..e8aee737f2 100644 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.py +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.py @@ -173,7 +173,7 @@ def pos_profile_query(doctype, txt, searchfield, start, page_len, filters): where pfu.parent = pf.name and pfu.user = %(user)s and pf.company = %(company)s and (pf.name like %(txt)s) - and pf.disabled = 0 limit %(start)s, %(page_len)s""", + and pf.disabled = 0 limit %(page_len)s offset %(start)s""", args, ) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 2438f4b1ab..98e0a9b215 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -36,8 +36,12 @@ class PricingRule(Document): def validate_duplicate_apply_on(self): if self.apply_on != "Transaction": - field = apply_on_dict.get(self.apply_on) - values = [d.get(frappe.scrub(self.apply_on)) for d in self.get(field) if field] + apply_on_table = apply_on_dict.get(self.apply_on) + if not apply_on_table: + return + + apply_on_field = frappe.scrub(self.apply_on) + values = [d.get(apply_on_field) for d in self.get(apply_on_table) if d.get(apply_on_field)] if len(values) != len(set(values)): frappe.throw(_("Duplicate {0} found in the table").format(self.apply_on)) diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py index 4cf19b4454..3bd0cd2e83 100644 --- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py @@ -752,7 +752,7 @@ class TestPricingRule(unittest.TestCase): title="_Test Pricing Rule with Min Qty - 2", ) - si = create_sales_invoice(do_not_submit=True, customer="_Test Customer 1", qty=1, currency="USD") + si = create_sales_invoice(do_not_submit=True, customer="_Test Customer 1", qty=1) item = si.items[0] item.stock_qty = 1 si.save() diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 42917f811d..ec861a2787 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -45,8 +45,6 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying. if (this.frm.doc.supplier && this.frm.doc.__islocal) { this.frm.trigger('supplier'); } - - erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); } refresh(doc) { @@ -541,7 +539,7 @@ frappe.ui.form.on("Purchase Invoice", { }, add_custom_buttons: function(frm) { - if (frm.doc.per_received < 100) { + if (frm.doc.docstatus == 1 && frm.doc.per_received < 100) { frm.add_custom_button(__('Purchase Receipt'), () => { frm.events.make_purchase_receipt(frm); }, __('Create')); @@ -574,9 +572,10 @@ frappe.ui.form.on("Purchase Invoice", { }, is_subcontracted: function(frm) { - if (frm.doc.is_subcontracted) { + if (frm.doc.is_old_subcontracting_flow) { erpnext.buying.get_default_bom(frm); } + frm.toggle_reqd("supplier_warehouse", frm.doc.is_subcontracted); }, diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 9f87c5ab54..534b879e78 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -169,7 +169,8 @@ "column_break_114", "auto_repeat", "update_auto_repeat_reference", - "per_received" + "per_received", + "is_old_subcontracting_flow" ], "fields": [ { @@ -547,7 +548,8 @@ "fieldname": "is_subcontracted", "fieldtype": "Check", "label": "Is Subcontracted", - "print_hide": 1 + "print_hide": 1, + "read_only": 1 }, { "fieldname": "items_section", @@ -1365,7 +1367,7 @@ "width": "50px" }, { - "depends_on": "eval:doc.update_stock && doc.is_subcontracted", + "depends_on": "eval:doc.is_subcontracted", "fieldname": "supplier_warehouse", "fieldtype": "Link", "label": "Supplier Warehouse", @@ -1416,13 +1418,21 @@ "label": "Advance Tax", "options": "Advance Tax", "read_only": 1 - } + }, + { + "default": "0", + "fieldname": "is_old_subcontracting_flow", + "fieldtype": "Check", + "hidden": 1, + "label": "Is Old Subcontracting Flow", + "read_only": 1 + } ], "icon": "fa fa-file-text", "idx": 204, "is_submittable": 1, "links": [], - "modified": "2021-11-25 13:31:02.716727", + "modified": "2022-06-15 15:40:58.527065", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index a1d86e2219..775d2550a9 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -165,17 +165,6 @@ class PurchaseInvoice(BuyingController): super(PurchaseInvoice, self).set_missing_values(for_validate) - def check_conversion_rate(self): - default_currency = erpnext.get_company_currency(self.company) - if not default_currency: - throw(_("Please enter default currency in Company Master")) - if ( - (self.currency == default_currency and flt(self.conversion_rate) != 1.00) - or not self.conversion_rate - or (self.currency != default_currency and flt(self.conversion_rate) == 1.00) - ): - throw(_("Conversion rate cannot be 0 or 1")) - def validate_credit_to_acc(self): if not self.credit_to: self.credit_to = get_party_account("Supplier", self.supplier, self.company) @@ -513,7 +502,10 @@ class PurchaseInvoice(BuyingController): # because updating ordered qty in bin depends upon updated ordered qty in PO if self.update_stock == 1: self.update_stock_ledger() - self.set_consumed_qty_in_po() + + if self.is_old_subcontracting_flow: + self.set_consumed_qty_in_subcontract_order() + from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit update_serial_nos_after_submit(self, "items") @@ -545,7 +537,16 @@ class PurchaseInvoice(BuyingController): from_repost=from_repost, ) elif self.docstatus == 2: + provisional_entries = [a for a in gl_entries if a.voucher_type == "Purchase Receipt"] make_reverse_gl_entries(voucher_type=self.doctype, voucher_no=self.name) + if provisional_entries: + for entry in provisional_entries: + frappe.db.set_value( + "GL Entry", + {"voucher_type": "Purchase Receipt", "voucher_detail_no": entry.voucher_detail_no}, + "is_cancelled", + 1, + ) if update_outstanding == "No": update_outstanding_amt( @@ -1127,7 +1128,7 @@ class PurchaseInvoice(BuyingController): # Stock ledger value is not matching with the warehouse amount if ( self.update_stock - and voucher_wise_stock_value.get(item.name) + and voucher_wise_stock_value.get((item.name, item.warehouse)) and warehouse_debit_amount != flt(voucher_wise_stock_value.get((item.name, item.warehouse)), net_amt_precision) ): @@ -1407,7 +1408,9 @@ class PurchaseInvoice(BuyingController): if self.update_stock == 1: self.update_stock_ledger() self.delete_auto_created_batches() - self.set_consumed_qty_in_po() + + if self.is_old_subcontracting_flow: + self.set_consumed_qty_in_subcontract_order() self.make_gl_entries_on_cancel() @@ -1418,7 +1421,12 @@ class PurchaseInvoice(BuyingController): frappe.db.set(self, "status", "Cancelled") unlink_inter_company_doc(self.doctype, self.name, self.inter_company_invoice_reference) - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Repost Item Valuation") + self.ignore_linked_doctypes = ( + "GL Entry", + "Stock Ledger Entry", + "Repost Item Valuation", + "Payment Ledger Entry", + ) self.update_advance_tax_references(cancel=1) def update_project(self): diff --git a/erpnext/accounts/doctype/purchase_invoice/regional/india.js b/erpnext/accounts/doctype/purchase_invoice/regional/india.js deleted file mode 100644 index 81488a2c52..0000000000 --- a/erpnext/accounts/doctype/purchase_invoice/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Purchase Invoice'); diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 30d26acf3a..e55d3a70af 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -27,12 +27,13 @@ from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import ( make_purchase_receipt, ) from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction +from erpnext.stock.tests.test_utils import StockTestMixin test_dependencies = ["Item", "Cost Center", "Payment Term", "Payment Terms Template"] test_ignore = ["Serial No"] -class TestPurchaseInvoice(unittest.TestCase): +class TestPurchaseInvoice(unittest.TestCase, StockTestMixin): @classmethod def setUpClass(self): unlink_payment_on_cancel_of_invoice() @@ -469,37 +470,6 @@ class TestPurchaseInvoice(unittest.TestCase): self.assertEqual(tax.tax_amount, expected_values[i][1]) self.assertEqual(tax.total, expected_values[i][2]) - def test_purchase_invoice_with_subcontracted_item(self): - wrapper = frappe.copy_doc(test_records[0]) - wrapper.get("items")[0].item_code = "_Test FG Item" - wrapper.insert() - wrapper.load_from_db() - - expected_values = [["_Test FG Item", 90, 59], ["_Test Item Home Desktop 200", 135, 177]] - for i, item in enumerate(wrapper.get("items")): - self.assertEqual(item.item_code, expected_values[i][0]) - self.assertEqual(item.item_tax_amount, expected_values[i][1]) - self.assertEqual(item.valuation_rate, expected_values[i][2]) - - self.assertEqual(wrapper.base_net_total, 1250) - - # tax amounts - expected_values = [ - ["_Test Account Shipping Charges - _TC", 100, 1350], - ["_Test Account Customs Duty - _TC", 125, 1350], - ["_Test Account Excise Duty - _TC", 140, 1490], - ["_Test Account Education Cess - _TC", 2.8, 1492.8], - ["_Test Account S&H Education Cess - _TC", 1.4, 1494.2], - ["_Test Account CST - _TC", 29.88, 1524.08], - ["_Test Account VAT - _TC", 156.25, 1680.33], - ["_Test Account Discount - _TC", 168.03, 1512.30], - ] - - for i, tax in enumerate(wrapper.get("taxes")): - self.assertEqual(tax.account_head, expected_values[i][0]) - self.assertEqual(tax.tax_amount, expected_values[i][1]) - self.assertEqual(tax.total, expected_values[i][2]) - def test_purchase_invoice_with_advance(self): from erpnext.accounts.doctype.journal_entry.test_journal_entry import ( test_records as jv_test_records, @@ -693,6 +663,80 @@ class TestPurchaseInvoice(unittest.TestCase): self.assertEqual(expected_values[gle.account][0], gle.debit) self.assertEqual(expected_values[gle.account][1], gle.credit) + def test_standalone_return_using_pi(self): + from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry + + item = self.make_item().name + company = "_Test Company with perpetual inventory" + warehouse = "Stores - TCP1" + + make_stock_entry(item_code=item, target=warehouse, qty=50, rate=120) + + return_pi = make_purchase_invoice( + is_return=1, + item=item, + qty=-10, + update_stock=1, + rate=100, + company=company, + warehouse=warehouse, + cost_center="Main - TCP1", + ) + + # assert that stock consumption is with actual rate + self.assertGLEs( + return_pi, + [{"credit": 1200, "debit": 0}], + gle_filters={"account": "Stock In Hand - TCP1"}, + ) + + # assert loss booked in COGS + self.assertGLEs( + return_pi, + [{"credit": 0, "debit": 200}], + gle_filters={"account": "Cost of Goods Sold - TCP1"}, + ) + + def test_return_with_lcv(self): + from erpnext.controllers.sales_and_purchase_return import make_return_doc + from erpnext.stock.doctype.landed_cost_voucher.test_landed_cost_voucher import ( + create_landed_cost_voucher, + ) + + item = self.make_item().name + company = "_Test Company with perpetual inventory" + warehouse = "Stores - TCP1" + cost_center = "Main - TCP1" + + pi = make_purchase_invoice( + item=item, + company=company, + warehouse=warehouse, + cost_center=cost_center, + update_stock=1, + qty=10, + rate=100, + ) + + # Create landed cost voucher - will increase valuation of received item by 10 + create_landed_cost_voucher("Purchase Invoice", pi.name, pi.company, charges=100) + return_pi = make_return_doc(pi.doctype, pi.name) + return_pi.save().submit() + + # assert that stock consumption is with actual in rate + self.assertGLEs( + return_pi, + [{"credit": 1100, "debit": 0}], + gle_filters={"account": "Stock In Hand - TCP1"}, + ) + + # assert loss booked in COGS + self.assertGLEs( + return_pi, + [{"credit": 0, "debit": 100}], + gle_filters={"account": "Cost of Goods Sold - TCP1"}, + ) + def test_multi_currency_gle(self): pi = make_purchase_invoice( supplier="_Test Supplier USD", @@ -886,30 +930,6 @@ class TestPurchaseInvoice(unittest.TestCase): pi.cancel() self.assertEqual(actual_qty_0, get_qty_after_transaction()) - def test_subcontracting_via_purchase_invoice(self): - from erpnext.buying.doctype.purchase_order.test_purchase_order import update_backflush_based_on - from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - update_backflush_based_on("BOM") - make_stock_entry( - item_code="_Test Item", target="_Test Warehouse 1 - _TC", qty=100, basic_rate=100 - ) - make_stock_entry( - item_code="_Test Item Home Desktop 100", - target="_Test Warehouse 1 - _TC", - qty=100, - basic_rate=100, - ) - - pi = make_purchase_invoice( - item_code="_Test FG Item", qty=10, rate=500, update_stock=1, is_subcontracted=1 - ) - - self.assertEqual(len(pi.get("supplied_items")), 2) - - rm_supp_cost = sum(d.amount for d in pi.get("supplied_items")) - self.assertEqual(flt(pi.get("items")[0].rm_supp_cost, 2), flt(rm_supp_cost, 2)) - def test_rejected_serial_no(self): pi = make_purchase_invoice( item_code="_Test Serialized Item With Series", @@ -1399,15 +1419,30 @@ class TestPurchaseInvoice(unittest.TestCase): def test_purchase_invoice_advance_taxes(self): from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry + company = "_Test Company" + + tds_account_args = { + "doctype": "Account", + "account_name": "TDS Payable", + "account_type": "Tax", + "parent_account": frappe.db.get_value( + "Account", {"account_name": "Duties and Taxes", "company": company} + ), + "company": company, + } + + tds_account = create_account(**tds_account_args) + tax_withholding_category = "Test TDS - 194 - Dividends - Individual" + + # Update tax withholding category with current fiscal year and rate details + create_tax_witholding_category(tax_withholding_category, company, tds_account) + # create a new supplier to test supplier = create_supplier( supplier_name="_Test TDS Advance Supplier", - tax_withholding_category="TDS - 194 - Dividends - Individual", + tax_withholding_category=tax_withholding_category, ) - # Update tax withholding category with current fiscal year and rate details - update_tax_witholding_category("_Test Company", "TDS Payable - _TC") - # Create Purchase Order with TDS applied po = create_purchase_order( do_not_save=1, @@ -1423,7 +1458,7 @@ class TestPurchaseInvoice(unittest.TestCase): payment_entry = get_payment_entry(dt="Purchase Order", dn=po.name) payment_entry.paid_from = "Cash - _TC" payment_entry.apply_tax_withholding_amount = 1 - payment_entry.tax_withholding_category = "TDS - 194 - Dividends - Individual" + payment_entry.tax_withholding_category = tax_withholding_category payment_entry.save() payment_entry.submit() @@ -1431,7 +1466,7 @@ class TestPurchaseInvoice(unittest.TestCase): expected_gle = [ ["Cash - _TC", 0, 27000], ["Creditors - _TC", 30000, 0], - ["TDS Payable - _TC", 0, 3000], + [tds_account, 0, 3000], ] gl_entries = frappe.db.sql( @@ -1457,7 +1492,7 @@ class TestPurchaseInvoice(unittest.TestCase): purchase_invoice.submit() # Check GLE for Purchase Invoice - # Zero net effect on final TDS Payable on invoice + # Zero net effect on final TDS payable on invoice expected_gle = [["_Test Account Cost for Goods Sold - _TC", 30000], ["Creditors - _TC", -30000]] gl_entries = frappe.db.sql( @@ -1526,9 +1561,41 @@ class TestPurchaseInvoice(unittest.TestCase): check_gl_entries(self, pr.name, expected_gle_for_purchase_receipt, pr.posting_date) + # Cancel purchase invoice to check reverse provisional entry cancellation + pi.cancel() + + expected_gle_for_purchase_receipt_post_pi_cancel = [ + ["Provision Account - _TC", 0, 250, pi.posting_date], + ["_Test Account Cost for Goods Sold - _TC", 250, 0, pi.posting_date], + ] + + check_gl_entries( + self, pr.name, expected_gle_for_purchase_receipt_post_pi_cancel, pr.posting_date + ) + company.enable_provisional_accounting_for_non_stock_items = 0 company.save() + def test_item_less_defaults(self): + + pi = frappe.new_doc("Purchase Invoice") + pi.supplier = "_Test Supplier" + pi.company = "_Test Company" + pi.append( + "items", + { + "item_name": "Opening item", + "qty": 1, + "uom": "Tonne", + "stock_uom": "Kg", + "rate": 1000, + "expense_account": "Stock Received But Not Billed - _TC", + }, + ) + + pi.save() + self.assertEqual(pi.items[0].conversion_factor, 1000) + def check_gl_entries(doc, voucher_no, expected_gle, posting_date): gl_entries = frappe.db.sql( @@ -1547,40 +1614,28 @@ def check_gl_entries(doc, voucher_no, expected_gle, posting_date): doc.assertEqual(getdate(expected_gle[i][3]), gle.posting_date) -def update_tax_witholding_category(company, account): +def create_tax_witholding_category(category_name, company, account): from erpnext.accounts.utils import get_fiscal_year fiscal_year = get_fiscal_year(date=nowdate()) - if not frappe.db.get_value( - "Tax Withholding Rate", + return frappe.get_doc( { - "parent": "TDS - 194 - Dividends - Individual", - "from_date": (">=", fiscal_year[1]), - "to_date": ("<=", fiscal_year[2]), - }, - ): - tds_category = frappe.get_doc("Tax Withholding Category", "TDS - 194 - Dividends - Individual") - tds_category.set("rates", []) - - tds_category.append( - "rates", - { - "from_date": fiscal_year[1], - "to_date": fiscal_year[2], - "tax_withholding_rate": 10, - "single_threshold": 2500, - "cumulative_threshold": 0, - }, - ) - tds_category.save() - - if not frappe.db.get_value( - "Tax Withholding Account", {"parent": "TDS - 194 - Dividends - Individual", "account": account} - ): - tds_category = frappe.get_doc("Tax Withholding Category", "TDS - 194 - Dividends - Individual") - tds_category.append("accounts", {"company": company, "account": account}) - tds_category.save() + "doctype": "Tax Withholding Category", + "name": category_name, + "category_name": category_name, + "accounts": [{"company": company, "account": account}], + "rates": [ + { + "from_date": fiscal_year[1], + "to_date": fiscal_year[2], + "tax_withholding_rate": 10, + "single_threshold": 2500, + "cumulative_threshold": 0, + } + ], + } + ).insert(ignore_if_duplicate=True) def unlink_payment_on_cancel_of_invoice(enable=1): diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 6651195e5f..7fa2fe2a66 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -195,6 +195,7 @@ "label": "Rejected Qty" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -214,6 +215,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "UOM Conversion Factor", @@ -222,6 +224,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Accepted Qty in Stock UOM", @@ -616,10 +619,13 @@ "search_index": 1 }, { + "depends_on": "eval:parent.is_old_subcontracting_flow", "fieldname": "bom", "fieldtype": "Link", "label": "BOM", - "options": "BOM" + "options": "BOM", + "read_only": 1, + "read_only_depends_on": "eval:!parent.is_old_subcontracting_flow" }, { "default": "0", @@ -871,7 +877,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2021-11-15 17:04:07.191013", + "modified": "2022-06-17 05:31:10.520171", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", @@ -879,5 +885,6 @@ "owner": "Administrator", "permissions": [], "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "states": [] } \ No newline at end of file diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json index b46d2e32f2..c36efb89a3 100644 --- a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json +++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json @@ -1,10 +1,12 @@ { + "actions": [], "allow_import": 1, "allow_rename": 1, "creation": "2013-01-10 16:34:08", "description": "Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like \"Shipping\", \"Insurance\", \"Handling\" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on \"Previous Row Total\" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.", "doctype": "DocType", "document_type": "Setup", + "engine": "InnoDB", "field_order": [ "title", "is_default", @@ -74,7 +76,8 @@ ], "icon": "fa fa-money", "idx": 1, - "modified": "2019-11-25 13:05:26.220275", + "links": [], + "modified": "2022-05-16 16:15:29.059370", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Taxes and Charges Template", @@ -103,6 +106,10 @@ "role": "Purchase User" } ], + "show_title_field_in_link": 1, + "sort_field": "modified", "sort_order": "DESC", + "states": [], + "title_field": "title", "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/salary_component_account/salary_component_account.json b/erpnext/accounts/doctype/salary_component_account/salary_component_account.json deleted file mode 100644 index f1ed8efa31..0000000000 --- a/erpnext/accounts/doctype/salary_component_account/salary_component_account.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "actions": [], - "creation": "2016-07-27 17:24:24.956896", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "account" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company" - }, - { - "description": "Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.", - "fieldname": "account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Account", - "options": "Account" - } - ], - "istable": 1, - "links": [], - "modified": "2020-10-18 17:57:57.110257", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Salary Component Account", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/accounts/doctype/salary_component_account/salary_component_account.py b/erpnext/accounts/doctype/salary_component_account/salary_component_account.py deleted file mode 100644 index b70179aa91..0000000000 --- a/erpnext/accounts/doctype/salary_component_account/salary_component_account.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class SalaryComponentAccount(Document): - pass diff --git a/erpnext/accounts/doctype/sales_invoice/regional/india.js b/erpnext/accounts/doctype/sales_invoice/regional/india.js deleted file mode 100644 index f54bce8aac..0000000000 --- a/erpnext/accounts/doctype/sales_invoice/regional/india.js +++ /dev/null @@ -1,53 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} -{% include "erpnext/regional/india/e_invoice/einvoice.js" %} - -erpnext.setup_auto_gst_taxation('Sales Invoice'); -erpnext.setup_einvoice_actions('Sales Invoice') - -frappe.ui.form.on("Sales Invoice", { - setup: function(frm) { - frm.set_query('transporter', function() { - return { - filters: { - 'is_transporter': 1 - } - }; - }); - - frm.set_query('driver', function(doc) { - return { - filters: { - 'transporter': doc.transporter - } - }; - }); - }, - - refresh: function(frm) { - if(frm.doc.docstatus == 1 && !frm.is_dirty() - && !frm.doc.is_return && !frm.doc.ewaybill) { - - frm.add_custom_button('E-Way Bill JSON', () => { - frappe.call({ - method: 'erpnext.regional.india.utils.generate_ewb_json', - args: { - 'dt': frm.doc.doctype, - 'dn': [frm.doc.name] - }, - callback: function(r) { - if (r.message) { - const args = { - cmd: 'erpnext.regional.india.utils.download_ewb_json', - data: r.message, - docname: frm.doc.name - }; - open_url_post(frappe.request.url, args); - } - } - }); - - }, __("Create")); - } - } - -}); diff --git a/erpnext/accounts/doctype/sales_invoice/regional/india_list.js b/erpnext/accounts/doctype/sales_invoice/regional/india_list.js deleted file mode 100644 index f01325d80b..0000000000 --- a/erpnext/accounts/doctype/sales_invoice/regional/india_list.js +++ /dev/null @@ -1,174 +0,0 @@ -var globalOnload = frappe.listview_settings['Sales Invoice'].onload; -frappe.listview_settings['Sales Invoice'].onload = function (list_view) { - - // Provision in case onload event is added to sales_invoice.js in future - if (globalOnload) { - globalOnload(list_view); - } - - const action = () => { - const selected_docs = list_view.get_checked_items(); - const docnames = list_view.get_checked_items(true); - - for (let doc of selected_docs) { - if (doc.docstatus !== 1) { - frappe.throw(__("E-Way Bill JSON can only be generated from a submitted document")); - } - } - - frappe.call({ - method: 'erpnext.regional.india.utils.generate_ewb_json', - args: { - 'dt': list_view.doctype, - 'dn': docnames - }, - callback: function(r) { - if (r.message) { - const args = { - cmd: 'erpnext.regional.india.utils.download_ewb_json', - data: r.message, - docname: docnames - }; - open_url_post(frappe.request.url, args); - } - } - }); - }; - - list_view.page.add_actions_menu_item(__('Generate E-Way Bill JSON'), action, false); - - const generate_irns = () => { - const docnames = list_view.get_checked_items(true); - if (docnames && docnames.length) { - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.generate_einvoices', - args: { docnames }, - freeze: true, - freeze_message: __('Generating E-Invoices...') - }); - } else { - frappe.msgprint({ - message: __('Please select at least one sales invoice to generate IRN'), - title: __('No Invoice Selected'), - indicator: 'red' - }); - } - }; - - const cancel_irns = () => { - const docnames = list_view.get_checked_items(true); - - const fields = [ - { - "label": "Reason", - "fieldname": "reason", - "fieldtype": "Select", - "reqd": 1, - "default": "1-Duplicate", - "options": ["1-Duplicate", "2-Data Entry Error", "3-Order Cancelled", "4-Other"] - }, - { - "label": "Remark", - "fieldname": "remark", - "fieldtype": "Data", - "reqd": 1 - } - ]; - - const d = new frappe.ui.Dialog({ - title: __("Cancel IRN"), - fields: fields, - primary_action: function() { - const data = d.get_values(); - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.cancel_irns', - args: { - doctype: list_view.doctype, - docnames, - reason: data.reason.split('-')[0], - remark: data.remark - }, - freeze: true, - freeze_message: __('Cancelling E-Invoices...'), - }); - d.hide(); - }, - primary_action_label: __('Submit') - }); - d.show(); - }; - - let einvoicing_enabled = false; - frappe.db.get_single_value("E Invoice Settings", "enable").then(enabled => { - einvoicing_enabled = enabled; - }); - - list_view.$result.on("change", "input[type=checkbox]", () => { - if (einvoicing_enabled) { - const docnames = list_view.get_checked_items(true); - // show/hide e-invoicing actions when no sales invoices are checked - if (docnames && docnames.length) { - // prevent adding actions twice if e-invoicing action group already exists - if (list_view.page.get_inner_group_button(__('E-Invoicing')).length == 0) { - list_view.page.add_inner_button(__('Generate IRNs'), generate_irns, __('E-Invoicing')); - list_view.page.add_inner_button(__('Cancel IRNs'), cancel_irns, __('E-Invoicing')); - } - } else { - list_view.page.remove_inner_button(__('Generate IRNs'), __('E-Invoicing')); - list_view.page.remove_inner_button(__('Cancel IRNs'), __('E-Invoicing')); - } - } - }); - - frappe.realtime.on("bulk_einvoice_generation_complete", (data) => { - const { failures, user, invoices } = data; - - if (invoices.length != failures.length) { - frappe.msgprint({ - message: __('{0} e-invoices generated successfully', [invoices.length]), - title: __('Bulk E-Invoice Generation Complete'), - indicator: 'orange' - }); - } - - if (failures && failures.length && user == frappe.session.user) { - let message = ` - Failed to generate IRNs for following ${failures.length} sales invoices: - - `; - frappe.msgprint({ - message: message, - title: __('Bulk E-Invoice Generation Complete'), - indicator: 'orange' - }); - } - }); - - frappe.realtime.on("bulk_einvoice_cancellation_complete", (data) => { - const { failures, user, invoices } = data; - - if (invoices.length != failures.length) { - frappe.msgprint({ - message: __('{0} e-invoices cancelled successfully', [invoices.length]), - title: __('Bulk E-Invoice Cancellation Complete'), - indicator: 'orange' - }); - } - - if (failures && failures.length && user == frappe.session.user) { - let message = ` - Failed to cancel IRNs for following ${failures.length} sales invoices: - - `; - frappe.msgprint({ - message: message, - title: __('Bulk E-Invoice Cancellation Complete'), - indicator: 'orange' - }); - } - }); -}; diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index e30289a62c..ba4cdd606e 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -52,7 +52,6 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e me.frm.refresh_fields(); } erpnext.queries.setup_warehouse_query(this.frm); - erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); } refresh(doc, dt, dn) { @@ -477,6 +476,13 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends e this.frm.trigger("calculate_timesheet_totals"); } } + + is_cash_or_non_trade_discount() { + this.frm.set_df_property("additional_discount_account", "hidden", 1 - this.frm.doc.is_cash_or_non_trade_discount); + if (!this.frm.doc.is_cash_or_non_trade_discount) { + this.frm.set_value("additional_discount_account", ""); + } + } }; // for backward compatibility: combine new and previous states @@ -784,10 +790,6 @@ frappe.ui.form.on('Sales Invoice', { } } - // India related fields - if (frappe.boot.sysdefaults.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']); - else hide_field(['c_form_applicable', 'c_form_no']); - frm.refresh_fields(); }, @@ -861,27 +863,44 @@ frappe.ui.form.on('Sales Invoice', { set_timesheet_data: function(frm, timesheets) { frm.clear_table("timesheets") - timesheets.forEach(timesheet => { + timesheets.forEach(async (timesheet) => { if (frm.doc.currency != timesheet.currency) { - frappe.call({ - method: "erpnext.setup.utils.get_exchange_rate", - args: { - from_currency: timesheet.currency, - to_currency: frm.doc.currency - }, - callback: function(r) { - if (r.message) { - exchange_rate = r.message; - frm.events.append_time_log(frm, timesheet, exchange_rate); - } - } - }); + const exchange_rate = await frm.events.get_exchange_rate( + frm, timesheet.currency, frm.doc.currency + ) + frm.events.append_time_log(frm, timesheet, exchange_rate) } else { frm.events.append_time_log(frm, timesheet, 1.0); } }); }, + async get_exchange_rate(frm, from_currency, to_currency) { + if ( + frm.exchange_rates + && frm.exchange_rates[from_currency] + && frm.exchange_rates[from_currency][to_currency] + ) { + return frm.exchange_rates[from_currency][to_currency]; + } + + return frappe.call({ + method: "erpnext.setup.utils.get_exchange_rate", + args: { + from_currency, + to_currency + }, + callback: function(r) { + if (r.message) { + // cache exchange rates + frm.exchange_rates = frm.exchange_rates || {}; + frm.exchange_rates[from_currency] = frm.exchange_rates[from_currency] || {}; + frm.exchange_rates[from_currency][to_currency] = r.message; + } + } + }); + }, + append_time_log: function(frm, time_log, exchange_rate) { const row = frm.add_child("timesheets"); row.activity_type = time_log.activity_type; @@ -892,7 +911,7 @@ frappe.ui.form.on('Sales Invoice', { row.billing_hours = time_log.billing_hours; row.billing_amount = flt(time_log.billing_amount) * flt(exchange_rate); row.timesheet_detail = time_log.name; - row.project_name = time_log.project_name; + row.project_name = time_log.project_name; frm.refresh_field("timesheets"); frm.trigger("calculate_timesheet_totals"); diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 80b95db886..17dd80400c 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -106,6 +106,7 @@ "loyalty_redemption_cost_center", "section_break_49", "apply_discount_on", + "is_cash_or_non_trade_discount", "base_discount_amount", "additional_discount_account", "column_break_51", @@ -174,8 +175,6 @@ "debit_to", "party_account_currency", "is_opening", - "c_form_applicable", - "c_form_no", "column_break8", "unrealized_profit_loss_account", "remarks", @@ -1716,28 +1715,6 @@ "options": "No\nYes", "print_hide": 1 }, - { - "fieldname": "c_form_applicable", - "fieldtype": "Select", - "hide_days": 1, - "hide_seconds": 1, - "label": "C-Form Applicable", - "length": 4, - "no_copy": 1, - "options": "No\nYes", - "print_hide": 1 - }, - { - "fieldname": "c_form_no", - "fieldtype": "Link", - "hide_days": 1, - "hide_seconds": 1, - "label": "C-Form No", - "no_copy": 1, - "options": "C-Form", - "print_hide": 1, - "read_only": 1 - }, { "fieldname": "column_break8", "fieldtype": "Column Break", @@ -1988,7 +1965,7 @@ { "fieldname": "additional_discount_account", "fieldtype": "Link", - "label": "Additional Discount Account", + "label": "Discount Account", "options": "Account" }, { @@ -2026,6 +2003,13 @@ "fieldtype": "Currency", "label": "Amount Eligible for Commission", "read_only": 1 + }, + { + "default": "0", + "depends_on": "eval: doc.apply_discount_on == \"Grand Total\"", + "fieldname": "is_cash_or_non_trade_discount", + "fieldtype": "Check", + "label": "Is Cash or Non Trade Discount" } ], "icon": "fa fa-file-text", @@ -2038,7 +2022,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2022-03-08 16:08:53.517903", + "modified": "2022-06-16 16:22:44.870575", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index f0880c19e3..f8c26d1e92 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -114,6 +114,7 @@ class SalesInvoice(SellingController): self.set_income_account_for_fixed_assets() self.validate_item_cost_centers() self.validate_income_account() + self.check_conversion_rate() validate_inter_company_party( self.doctype, self.customer, self.company, self.inter_company_invoice_reference @@ -150,7 +151,6 @@ class SalesInvoice(SellingController): ) self.set_against_income_account() - self.validate_c_form() self.validate_time_sheets_are_submitted() self.validate_multiple_billing("Delivery Note", "dn_detail", "amount", "items") if not self.is_return: @@ -365,8 +365,6 @@ class SalesInvoice(SellingController): self.update_billing_status_for_zero_amount_refdoc("Sales Order") self.update_serial_no(in_cancel=True) - self.validate_c_form_on_cancel() - # Updating stock ledger should always be called after updating prevdoc status, # because updating reserved qty in bin depends upon updated delivered qty in SO if self.update_stock == 1: @@ -396,7 +394,12 @@ class SalesInvoice(SellingController): unlink_inter_company_doc(self.doctype, self.name, self.inter_company_invoice_reference) self.unlink_sales_invoice_from_timesheets() - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Repost Item Valuation") + self.ignore_linked_doctypes = ( + "GL Entry", + "Stock Ledger Entry", + "Repost Item Valuation", + "Payment Ledger Entry", + ) def update_status_updater_args(self): if cint(self.update_stock): @@ -809,25 +812,6 @@ class SalesInvoice(SellingController): if flt(self.change_amount) and not self.account_for_change_amount: msgprint(_("Please enter Account for Change Amount"), raise_exception=1) - def validate_c_form(self): - """Blank C-form no if C-form applicable marked as 'No'""" - if self.amended_from and self.c_form_applicable == "No" and self.c_form_no: - frappe.db.sql( - """delete from `tabC-Form Invoice Detail` where invoice_no = %s - and parent = %s""", - (self.amended_from, self.c_form_no), - ) - - frappe.db.set(self, "c_form_no", "") - - def validate_c_form_on_cancel(self): - """Display message if C-Form no exists on cancellation of Sales Invoice""" - if self.c_form_applicable == "Yes" and self.c_form_no: - msgprint( - _("Please remove this Invoice {0} from C-Form {1}").format(self.name, self.c_form_no), - raise_exception=1, - ) - def validate_dropship_item(self): for item in self.items: if item.sales_order: @@ -1024,7 +1008,7 @@ class SalesInvoice(SellingController): ) if grand_total and not self.is_internal_transfer(): - # Didnot use base_grand_total to book rounding loss gle + # Did not use base_grand_total to book rounding loss gle gl_entries.append( self.get_gl_dict( { @@ -1049,6 +1033,22 @@ class SalesInvoice(SellingController): ) ) + if self.apply_discount_on == "Grand Total" and self.get("is_cash_or_discount_account"): + gl_entries.append( + self.get_gl_dict( + { + "account": self.additional_discount_account, + "against": self.debit_to, + "debit": self.base_discount_amount, + "debit_in_account_currency": self.discount_amount, + "cost_center": self.cost_center, + "project": self.project, + }, + self.currency, + item=self, + ) + ) + def make_tax_gl_entries(self, gl_entries): enable_discount_accounting = cint( frappe.db.get_single_value("Selling Settings", "enable_discount_accounting") @@ -1506,9 +1506,7 @@ class SalesInvoice(SellingController): frappe.get_doc("Delivery Note", dn).update_billing_percentage(update_modified=update_modified) def on_recurring(self, reference_doc, auto_repeat_doc): - for fieldname in ("c_form_applicable", "c_form_no", "write_off_amount"): - self.set(fieldname, reference_doc.get(fieldname)) - + self.set("write_off_amount", reference_doc.get("write_off_amount")) self.due_date = None def update_serial_no(self, in_cancel=False): @@ -2111,6 +2109,8 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): source_document_warehouse_field = "from_warehouse" target_document_warehouse_field = "target_warehouse" + received_items = get_received_items(source_name, target_doctype, target_detail_field) + validate_inter_company_transaction(source_doc, doctype) details = get_inter_company_details(source_doc, doctype) @@ -2175,12 +2175,17 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): shipping_address_name=target_doc.shipping_address_name, ) + def update_item(source, target, source_parent): + target.qty = flt(source.qty) - received_items.get(source.name, 0.0) + item_field_map = { "doctype": target_doctype + " Item", "field_no_map": ["income_account", "expense_account", "cost_center", "warehouse"], "field_map": { "rate": "rate", }, + "postprocess": update_item, + "condition": lambda doc: doc.qty > 0, } if doctype in ["Sales Invoice", "Sales Order"]: @@ -2218,6 +2223,28 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): return doclist +def get_received_items(reference_name, doctype, reference_fieldname): + target_doctypes = frappe.get_all( + doctype, + filters={"inter_company_invoice_reference": reference_name, "docstatus": 1}, + as_list=True, + ) + + if target_doctypes: + target_doctypes = list(target_doctypes[0]) + + received_items_map = frappe._dict( + frappe.get_all( + doctype + " Item", + filters={"parent": ("in", target_doctypes)}, + fields=[reference_fieldname, "qty"], + as_list=1, + ) + ) + + return received_items_map + + def set_purchase_references(doc): # add internal PO or PR links if any if doc.is_internal_transfer(): diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice_dashboard.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice_dashboard.py index c0005f78cf..0a765f3f46 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice_dashboard.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice_dashboard.py @@ -11,6 +11,7 @@ def get_data(): "Payment Request": "reference_name", "Sales Invoice": "return_against", "Auto Repeat": "reference_document", + "Purchase Invoice": "inter_company_invoice_reference", }, "internal_links": { "Sales Order": ["items", "sales_order"], @@ -30,5 +31,6 @@ def get_data(): {"label": _("Reference"), "items": ["Timesheet", "Delivery Note", "Sales Order"]}, {"label": _("Returns"), "items": ["Sales Invoice"]}, {"label": _("Subscription"), "items": ["Auto Repeat"]}, + {"label": _("Internal Transfers"), "items": ["Purchase Invoice"]}, ], } diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index f2a696d565..782e08e33b 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -24,7 +24,6 @@ from erpnext.assets.doctype.asset.test_asset import create_asset, create_asset_d from erpnext.controllers.accounts_controller import update_invoice_status from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_data from erpnext.exceptions import InvalidAccountCurrency, InvalidCurrency -from erpnext.regional.india.utils import get_ewb_data from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice from erpnext.stock.doctype.item.test_item import create_item from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt @@ -792,6 +791,54 @@ class TestSalesInvoice(unittest.TestCase): jv.cancel() self.assertEqual(frappe.db.get_value("Sales Invoice", w.name, "outstanding_amount"), 562.0) + def test_outstanding_on_cost_center_allocation(self): + # setup cost centers + from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center + from erpnext.accounts.doctype.cost_center_allocation.test_cost_center_allocation import ( + create_cost_center_allocation, + ) + + cost_centers = [ + "Main Cost Center 1", + "Sub Cost Center 1", + "Sub Cost Center 2", + ] + for cc in cost_centers: + create_cost_center(cost_center_name=cc, company="_Test Company") + + cca = create_cost_center_allocation( + "_Test Company", + "Main Cost Center 1 - _TC", + {"Sub Cost Center 1 - _TC": 60, "Sub Cost Center 2 - _TC": 40}, + ) + + # make invoice + si = frappe.copy_doc(test_records[0]) + si.is_pos = 0 + si.insert() + si.submit() + + from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry + + # make payment - fully paid + pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Bank - _TC") + pe.reference_no = "1" + pe.reference_date = nowdate() + pe.paid_from_account_currency = si.currency + pe.paid_to_account_currency = si.currency + pe.source_exchange_rate = 1 + pe.target_exchange_rate = 1 + pe.paid_amount = si.outstanding_amount + pe.cost_center = cca.main_cost_center + pe.insert() + pe.submit() + + # cancel cost center allocation + cca.cancel() + + si.reload() + self.assertEqual(si.outstanding_amount, 0) + def test_sales_invoice_gl_entry_without_perpetual_inventory(self): si = frappe.copy_doc(test_records[1]) si.insert() @@ -1583,6 +1630,17 @@ class TestSalesInvoice(unittest.TestCase): self.assertTrue(gle) + def test_invoice_exchange_rate(self): + si = create_sales_invoice( + customer="_Test Customer USD", + debit_to="_Test Receivable USD - _TC", + currency="USD", + conversion_rate=1, + do_not_save=1, + ) + + self.assertRaises(frappe.ValidationError, si.save) + def test_invalid_currency(self): # Customer currency = USD @@ -1786,24 +1844,7 @@ class TestSalesInvoice(unittest.TestCase): for i, k in enumerate(expected_values["keys"]): self.assertEqual(d.get(k), expected_values[d.item_code][i]) - def test_item_wise_tax_breakup_india(self): - frappe.flags.country = "India" - - si = self.create_si_to_test_tax_breakup() - itemised_tax, itemised_taxable_amount = get_itemised_tax_breakup_data(si) - - expected_itemised_tax = { - "_Test Item": {"Service Tax": {"tax_rate": 10.0, "tax_amount": 1000.0}}, - "_Test Item 2": {"Service Tax": {"tax_rate": 10.0, "tax_amount": 500.0}}, - } - expected_itemised_taxable_amount = {"_Test Item": 10000.0, "_Test Item 2": 5000.0} - - self.assertEqual(itemised_tax, expected_itemised_tax) - self.assertEqual(itemised_taxable_amount, expected_itemised_taxable_amount) - - frappe.flags.country = None - - def test_item_wise_tax_breakup_outside_india(self): + def test_item_wise_tax_breakup(self): frappe.flags.country = "United States" si = self.create_si_to_test_tax_breakup() @@ -1827,7 +1868,6 @@ class TestSalesInvoice(unittest.TestCase): "items", { "item_code": "_Test Item", - "gst_hsn_code": "999800", "warehouse": "_Test Warehouse - _TC", "qty": 100, "rate": 50, @@ -1840,7 +1880,6 @@ class TestSalesInvoice(unittest.TestCase): "items", { "item_code": "_Test Item 2", - "gst_hsn_code": "999800", "warehouse": "_Test Warehouse - _TC", "qty": 100, "rate": 50, @@ -1927,7 +1966,6 @@ class TestSalesInvoice(unittest.TestCase): "items", { "item_code": "_Test Item", - "gst_hsn_code": "999800", "warehouse": "_Test Warehouse - _TC", "qty": 1, "rate": rate, @@ -2600,77 +2638,6 @@ class TestSalesInvoice(unittest.TestCase): check_gl_entries(self, target_doc.name, pi_gl_entries, add_days(nowdate(), -1)) - def test_eway_bill_json(self): - si = make_sales_invoice_for_ewaybill() - - si.submit() - - data = get_ewb_data("Sales Invoice", [si.name]) - - self.assertEqual(data["version"], "1.0.0421") - self.assertEqual(data["billLists"][0]["fromGstin"], "27AAECE4835E1ZR") - self.assertEqual(data["billLists"][0]["fromTrdName"], "_Test Company") - self.assertEqual(data["billLists"][0]["toTrdName"], "_Test Customer") - self.assertEqual(data["billLists"][0]["vehicleType"], "R") - self.assertEqual(data["billLists"][0]["totalValue"], 60000) - self.assertEqual(data["billLists"][0]["cgstValue"], 5400) - self.assertEqual(data["billLists"][0]["sgstValue"], 5400) - self.assertEqual(data["billLists"][0]["vehicleNo"], "KA12KA1234") - self.assertEqual(data["billLists"][0]["itemList"][0]["taxableAmount"], 60000) - self.assertEqual(data["billLists"][0]["actualFromStateCode"], 7) - self.assertEqual(data["billLists"][0]["fromStateCode"], 27) - - def test_einvoice_submission_without_irn(self): - # init - einvoice_settings = frappe.get_doc("E Invoice Settings") - einvoice_settings.enable = 1 - einvoice_settings.applicable_from = nowdate() - einvoice_settings.append( - "credentials", - { - "company": "_Test Company", - "gstin": "27AAECE4835E1ZR", - "username": "test", - "password": "test", - }, - ) - einvoice_settings.save() - - country = frappe.flags.country - frappe.flags.country = "India" - - si = make_sales_invoice_for_ewaybill() - self.assertRaises(frappe.ValidationError, si.submit) - - si.irn = "test_irn" - si.submit() - - # reset - einvoice_settings = frappe.get_doc("E Invoice Settings") - einvoice_settings.enable = 0 - frappe.flags.country = country - - def test_einvoice_json(self): - from erpnext.regional.india.e_invoice.utils import make_einvoice, validate_totals - - si = get_sales_invoice_for_e_invoice() - si.discount_amount = 100 - si.save() - - einvoice = make_einvoice(si) - self.assertTrue(einvoice["EwbDtls"]) - validate_totals(einvoice) - - si.apply_discount_on = "Net Total" - si.save() - einvoice = make_einvoice(si) - validate_totals(einvoice) - - [d.set("included_in_print_rate", 1) for d in si.taxes] - si.save() - einvoice = make_einvoice(si) - validate_totals(einvoice) - def test_item_tax_net_range(self): item = create_item("T Shirt") @@ -3139,6 +3106,40 @@ class TestSalesInvoice(unittest.TestCase): si.reload() self.assertTrue(si.items[0].serial_no) + def test_sales_invoice_with_disabled_account(self): + try: + account_name = "Sales Expenses - _TC" + account = frappe.get_doc("Account", account_name) + account.disabled = 1 + account.save() + + si = create_sales_invoice(do_not_save=True) + si.posting_date = add_days(getdate(), 1) + si.taxes = [] + + si.append( + "taxes", + { + "charge_type": "On Net Total", + "account_head": account_name, + "cost_center": "Main - _TC", + "description": "Commission", + "rate": 5, + }, + ) + si.save() + + with self.assertRaises(frappe.ValidationError) as err: + si.submit() + + self.assertTrue( + "Cannot create accounting entries against disabled accounts" in str(err.exception) + ) + + finally: + account.disabled = 0 + account.save() + def test_gain_loss_with_advance_entry(self): from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry @@ -3231,177 +3232,6 @@ def get_sales_invoice_for_e_invoice(): return si -def make_test_address_for_ewaybill(): - if not frappe.db.exists("Address", "_Test Address for Eway bill-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_line2": "_Test Address Line 2", - "address_title": "_Test Address for Eway bill", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+910000000000", - "gstin": "27AAECE4835E1ZR", - "gst_state": "Maharashtra", - "gst_state_number": "27", - "pincode": "401108", - } - ).insert() - - address.append("links", {"link_doctype": "Company", "link_name": "_Test Company"}) - - address.save() - - if not frappe.db.exists("Address", "_Test Customer-Address for Eway bill-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_line2": "_Test Address Line 2", - "address_title": "_Test Customer-Address for Eway bill", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+910000000000", - "gstin": "27AACCM7806M1Z3", - "gst_state": "Maharashtra", - "gst_state_number": "27", - "pincode": "410038", - } - ).insert() - - address.append("links", {"link_doctype": "Customer", "link_name": "_Test Customer"}) - - address.save() - - if not frappe.db.exists("Address", "_Test Customer-Address for Eway bill-Shipping"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_line2": "_Test Address Line 2", - "address_title": "_Test Customer-Address for Eway bill", - "address_type": "Shipping", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+910000000000", - "gst_state": "Maharashtra", - "gst_state_number": "27", - "pincode": "410098", - } - ).insert() - - address.append("links", {"link_doctype": "Customer", "link_name": "_Test Customer"}) - - address.save() - - if not frappe.db.exists("Address", "_Test Dispatch-Address for Eway bill-Shipping"): - address = frappe.get_doc( - { - "address_line1": "_Test Dispatch Address Line 1", - "address_line2": "_Test Dispatch Address Line 2", - "address_title": "_Test Dispatch-Address for Eway bill", - "address_type": "Shipping", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 0, - "phone": "+910000000000", - "gstin": "07AAACC1206D1ZI", - "gst_state": "Delhi", - "gst_state_number": "07", - "pincode": "1100101", - } - ).insert() - - address.save() - - -def make_test_transporter_for_ewaybill(): - if not frappe.db.exists("Supplier", "_Test Transporter"): - frappe.get_doc( - { - "doctype": "Supplier", - "supplier_name": "_Test Transporter", - "country": "India", - "supplier_group": "_Test Supplier Group", - "supplier_type": "Company", - "is_transporter": 1, - } - ).insert() - - -def make_sales_invoice_for_ewaybill(): - make_test_address_for_ewaybill() - make_test_transporter_for_ewaybill() - - gst_settings = frappe.get_doc("GST Settings") - - gst_account = frappe.get_all( - "GST Account", - fields=["cgst_account", "sgst_account", "igst_account"], - filters={"company": "_Test Company"}, - ) - - if not gst_account: - gst_settings.append( - "gst_accounts", - { - "company": "_Test Company", - "cgst_account": "Output Tax CGST - _TC", - "sgst_account": "Output Tax SGST - _TC", - "igst_account": "Output Tax IGST - _TC", - }, - ) - - gst_settings.save() - - si = create_sales_invoice(do_not_save=1, rate="60000") - - si.distance = 2000 - si.company_address = "_Test Address for Eway bill-Billing" - si.customer_address = "_Test Customer-Address for Eway bill-Billing" - si.shipping_address_name = "_Test Customer-Address for Eway bill-Shipping" - si.dispatch_address_name = "_Test Dispatch-Address for Eway bill-Shipping" - si.vehicle_no = "KA12KA1234" - si.gst_category = "Registered Regular" - si.mode_of_transport = "Road" - si.transporter = "_Test Transporter" - - si.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax CGST - _TC", - "cost_center": "Main - _TC", - "description": "CGST @ 9.0", - "rate": 9, - }, - ) - - si.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax SGST - _TC", - "cost_center": "Main - _TC", - "description": "SGST @ 9.0", - "rate": 9, - }, - ) - - return si - - def check_gl_entries(doc, voucher_no, expected_gle, posting_date): gl_entries = frappe.db.sql( """select account, debit, credit, posting_date @@ -3444,7 +3274,6 @@ def create_sales_invoice(**args): "item_code": args.item or args.item_code or "_Test Item", "item_name": args.item_name or "_Test Item", "description": args.description or "_Test Item", - "gst_hsn_code": "999800", "warehouse": args.warehouse or "_Test Warehouse - _TC", "qty": args.qty or 1, "uom": args.uom or "Nos", @@ -3497,7 +3326,6 @@ def create_sales_invoice_against_cost_center(**args): "items", { "item_code": args.item or args.item_code or "_Test Item", - "gst_hsn_code": "999800", "warehouse": args.warehouse or "_Test Warehouse - _TC", "qty": args.qty or 1, "rate": args.rate or 100, diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json index b3ba1199b6..b417c7de03 100644 --- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -182,6 +182,7 @@ "oldfieldtype": "Currency" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -200,6 +201,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "UOM Conversion Factor", @@ -207,6 +209,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Qty as per Stock UOM", @@ -843,7 +846,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-03-23 08:18:04.928287", + "modified": "2022-06-17 05:33:15.335912", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice Item", diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json index 19781bdffa..408ecbf36d 100644 --- a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json +++ b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json @@ -1,4 +1,5 @@ { + "actions": [], "allow_import": 1, "allow_rename": 1, "creation": "2013-01-10 16:34:09", @@ -77,7 +78,8 @@ ], "icon": "fa fa-money", "idx": 1, - "modified": "2019-11-25 13:06:03.279099", + "links": [], + "modified": "2022-05-16 16:14:52.061672", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Taxes and Charges Template", @@ -113,7 +115,10 @@ "write": 1 } ], + "show_title_field_in_link": 1, "sort_field": "modified", "sort_order": "ASC", + "states": [], + "title_field": "title", "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py index 2243b191da..9dab4e91fb 100644 --- a/erpnext/accounts/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -145,13 +145,14 @@ class Subscription(Document): You shouldn't need to call this directly. Use `get_billing_cycle` instead. """ plan_names = [plan.plan for plan in self.plans] - billing_info = frappe.db.sql( - "select distinct `billing_interval`, `billing_interval_count` " - "from `tabSubscription Plan` " - "where name in %s", - (plan_names,), - as_dict=1, - ) + + subscription_plan = frappe.qb.DocType("Subscription Plan") + billing_info = ( + frappe.qb.from_(subscription_plan) + .select(subscription_plan.billing_interval, subscription_plan.billing_interval_count) + .distinct() + .where(subscription_plan.name.isin(plan_names)) + ).run(as_dict=1) return billing_info diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py index 5bfca96bb1..4d201292ed 100644 --- a/erpnext/accounts/doctype/tax_rule/tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py @@ -163,17 +163,15 @@ def get_party_details(party, party_type, args=None): def get_tax_template(posting_date, args): """Get matching tax rule""" args = frappe._dict(args) - from_date = to_date = posting_date - if not posting_date: - from_date = "1900-01-01" - to_date = "4000-01-01" + conditions = [] - conditions = [ - """(from_date is null or from_date <= '{0}') - and (to_date is null or to_date >= '{1}')""".format( - from_date, to_date + if posting_date: + conditions.append( + f"""(from_date is null or from_date <= '{posting_date}') + and (to_date is null or to_date >= '{posting_date}')""" ) - ] + else: + conditions.append("(from_date is null) and (to_date is null)") conditions.append( "ifnull(tax_category, '') = {0}".format(frappe.db.escape(cstr(args.get("tax_category")))) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 89034ebb8c..16072f331f 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -14,6 +14,7 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( get_accounting_dimensions, ) from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget +from erpnext.accounts.utils import create_payment_ledger_entry class ClosedAccountingPeriod(frappe.ValidationError): @@ -31,8 +32,16 @@ def make_gl_entries( if gl_map: if not cancel: validate_accounting_period(gl_map) + validate_disabled_accounts(gl_map) gl_map = process_gl_map(gl_map, merge_entries) if gl_map and len(gl_map) > 1: + create_payment_ledger_entry( + gl_map, + cancel=0, + adv_adj=adv_adj, + update_outstanding=update_outstanding, + from_repost=from_repost, + ) save_entries(gl_map, adv_adj, update_outstanding, from_repost) # Post GL Map proccess there may no be any GL Entries elif gl_map: @@ -45,6 +54,26 @@ def make_gl_entries( make_reverse_gl_entries(gl_map, adv_adj=adv_adj, update_outstanding=update_outstanding) +def validate_disabled_accounts(gl_map): + accounts = [d.account for d in gl_map if d.account] + + Account = frappe.qb.DocType("Account") + + disabled_accounts = ( + frappe.qb.from_(Account) + .where(Account.name.isin(accounts) & Account.disabled == 1) + .select(Account.name, Account.disabled) + ).run(as_dict=True) + + if disabled_accounts: + account_list = "
" + account_list += ", ".join([frappe.bold(d.name) for d in disabled_accounts]) + frappe.throw( + _("Cannot create accounting entries against disabled accounts: {0}").format(account_list), + title=_("Disabled Account Selected"), + ) + + def validate_accounting_period(gl_map): accounting_periods = frappe.db.sql( """ SELECT @@ -103,7 +132,7 @@ def distribute_gl_based_on_cost_center_allocation(gl_map, precision=None): for sub_cost_center, percentage in cost_center_allocation.get(cost_center, {}).items(): gle = copy.deepcopy(d) gle.cost_center = sub_cost_center - for field in ("debit", "credit", "debit_in_account_currency", "credit_in_company_currency"): + for field in ("debit", "credit", "debit_in_account_currency", "credit_in_account_currency"): gle[field] = flt(flt(d.get(field)) * percentage / 100, precision) new_gl_map.append(gle) else: @@ -139,6 +168,7 @@ def get_cost_center_allocation_data(company, posting_date): def merge_similar_entries(gl_map, precision=None): merged_gl_map = [] accounting_dimensions = get_accounting_dimensions() + for entry in gl_map: # if there is already an entry in this account then just add it # to that entry @@ -269,9 +299,10 @@ def make_entry(args, adv_adj, update_outstanding, from_repost=False): gle.flags.from_repost = from_repost gle.flags.adv_adj = adv_adj gle.flags.update_outstanding = update_outstanding or "Yes" + gle.flags.notify_update = False gle.submit() - if not from_repost: + if not from_repost and gle.voucher_type != "Period Closing Voucher": validate_expense_against_budget(args) @@ -458,6 +489,10 @@ def make_reverse_gl_entries( ).run(as_dict=1) if gl_entries: + create_payment_ledger_entry(gl_entries, cancel=1) + create_payment_ledger_entry( + gl_entries, cancel=1, adv_adj=adv_adj, update_outstanding=update_outstanding + ) validate_accounting_period(gl_entries) check_freezing_date(gl_entries[0]["posting_date"], adv_adj) set_as_cancel(gl_entries[0]["voucher_type"], gl_entries[0]["voucher_no"]) diff --git a/erpnext/accounts/module_onboarding/accounts/accounts.json b/erpnext/accounts/module_onboarding/accounts/accounts.json index aa7cdf788b..9916d1622d 100644 --- a/erpnext/accounts/module_onboarding/accounts/accounts.json +++ b/erpnext/accounts/module_onboarding/accounts/accounts.json @@ -13,7 +13,7 @@ "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/accounts", "idx": 0, "is_complete": 0, - "modified": "2022-01-18 18:35:52.326688", + "modified": "2022-06-14 17:38:24.967834", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts", diff --git a/erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json b/erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json index 67553baec7..0973ab3962 100644 --- a/erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json +++ b/erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json @@ -1,8 +1,8 @@ { - "action": "Watch Video", + "action": "Go to Page", "action_label": "Learn more about Chart of Accounts", "callback_message": "You can continue with the onboarding after exploring this page", - "callback_title": "Awesome Work", + "callback_title": "Explore Chart of Accounts", "creation": "2020-05-13 19:58:20.928127", "description": "# Chart Of Accounts\n\nERPNext sets up a simple chart of accounts for each Company you create, but you can modify it according to business and legal requirements.", "docstatus": 0, @@ -12,7 +12,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2021-08-13 11:46:25.878506", + "modified": "2022-06-07 14:21:26.264769", "modified_by": "Administrator", "name": "Chart of Accounts", "owner": "Administrator", diff --git a/erpnext/accounts/onboarding_step/setup_taxes/setup_taxes.json b/erpnext/accounts/onboarding_step/setup_taxes/setup_taxes.json index 9f4c873e34..e323f6cb1a 100644 --- a/erpnext/accounts/onboarding_step/setup_taxes/setup_taxes.json +++ b/erpnext/accounts/onboarding_step/setup_taxes/setup_taxes.json @@ -2,14 +2,14 @@ "action": "Create Entry", "action_label": "Manage Sales Tax Templates", "creation": "2020-05-13 19:29:43.844463", - "description": "# Setting up Taxes\n\nERPNext lets you configure your taxes so that they are automatically applied in your buying and selling transactions. You can configure them globally or even on Items. ERPNext taxes are pre-configured for most regions.\n", + "description": "# Setting up Taxes\n\nERPNext lets you configure your taxes so that they are automatically applied in your buying and selling transactions. You can configure them globally or even on Items. ERPNext taxes are pre-configured for most regions.", "docstatus": 0, "doctype": "Onboarding Step", "idx": 0, "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2021-08-13 11:48:37.238610", + "modified": "2022-06-14 17:37:56.694261", "modified_by": "Administrator", "name": "Setup Taxes", "owner": "Administrator", diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index db741d97e1..e39f22b4cf 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -211,7 +211,7 @@ def set_address_details( else: party_details.update(get_company_address(company)) - if doctype and doctype in ["Delivery Note", "Sales Invoice", "Sales Order"]: + if doctype and doctype in ["Delivery Note", "Sales Invoice", "Sales Order", "Quotation"]: if party_details.company_address: party_details.update( get_fetch_values(doctype, "company_address", party_details.company_address) @@ -897,3 +897,18 @@ def get_default_contact(doctype, name): return None else: return None + + +def add_party_account(party_type, party, company, account): + doc = frappe.get_doc(party_type, party) + account_exists = False + for d in doc.get("accounts"): + if d.account == account: + account_exists = True + + if not account_exists: + accounts = {"company": company, "account": account} + + doc.append("accounts", accounts) + + doc.save() diff --git a/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html b/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html deleted file mode 100644 index 605ce8383e..0000000000 --- a/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.html +++ /dev/null @@ -1,180 +0,0 @@ -{%- from "templates/print_formats/standard_macros.html" import add_header, render_field, print_value -%} - -
- {% if doc.signed_einvoice %} - {%- set einvoice = json.loads(doc.signed_einvoice) -%} -
- {% if letter_head and not no_letterhead %} -
{{ letter_head }}
- {% endif %} - -
- {% if print_settings.repeat_header_footer %} - - {% endif %} -
1. Transaction Details
-
-
-
-
-
{{ einvoice.Irn }}
-
-
-
-
{{ einvoice.AckNo }}
-
-
-
-
{{ frappe.utils.format_datetime(einvoice.AckDt, "dd/MM/yyyy hh:mm:ss") }}
-
-
-
-
{{ einvoice.TranDtls.SupTyp }}
-
-
-
-
{{ einvoice.DocDtls.Typ }}
-
-
-
-
{{ einvoice.DocDtls.No }}
-
-
-
- -
-
-
2. Party Details
-
- {%- set seller = einvoice.SellerDtls -%} -
-
Seller
-

{{ seller.Gstin }}

-

{{ seller.LglNm }}

-

{{ seller.Addr1 }}

- {%- if seller.Addr2 -%}

{{ seller.Addr2 }}

{% endif %} -

{{ seller.Loc }}

-

{{ frappe.db.get_value("Address", doc.company_address, "gst_state") }} - {{ seller.Pin }}

- - {%- if einvoice.ShipDtls -%} - {%- set shipping = einvoice.ShipDtls -%} -
Shipped From
-

{{ shipping.Gstin }}

-

{{ shipping.LglNm }}

-

{{ shipping.Addr1 }}

- {%- if shipping.Addr2 -%}

{{ shipping.Addr2 }}

{% endif %} -

{{ shipping.Loc }}

-

{{ frappe.db.get_value("Address", doc.shipping_address_name, "gst_state") }} - {{ shipping.Pin }}

- {% endif %} -
- {%- set buyer = einvoice.BuyerDtls -%} -
-
Buyer
-

{{ buyer.Gstin }}

-

{{ buyer.LglNm }}

-

{{ buyer.Addr1 }}

- {%- if buyer.Addr2 -%}

{{ buyer.Addr2 }}

{% endif %} -

{{ buyer.Loc }}

-

{{ frappe.db.get_value("Address", doc.customer_address, "gst_state") }} - {{ buyer.Pin }}

- - {%- if einvoice.DispDtls -%} - {%- set dispatch = einvoice.DispDtls -%} -
Dispatched From
- {%- if dispatch.Gstin -%}

{{ dispatch.Gstin }}

{% endif %} -

{{ dispatch.LglNm }}

-

{{ dispatch.Addr1 }}

- {%- if dispatch.Addr2 -%}

{{ dispatch.Addr2 }}

{% endif %} -

{{ dispatch.Loc }}

-

{{ frappe.db.get_value("Address", doc.dispatch_address_name, "gst_state") }} - {{ dispatch.Pin }}

- {% endif %} -
-
-
-
3. Item Details
- - - - - - - - - - - - - - - - - - {% for item in einvoice.ItemList %} - - - - - - - - - - - - - - {% endfor %} - -
Sr. No.ItemHSN CodeQtyUOMRateDiscountTaxable AmountTax RateOther ChargesTotal
{{ item.SlNo }}{{ item.PrdDesc }}{{ item.HsnCd }}{{ item.Qty }}{{ item.Unit }}{{ frappe.utils.fmt_money(item.UnitPrice, None, "INR") }}{{ frappe.utils.fmt_money(item.Discount, None, "INR") }}{{ frappe.utils.fmt_money(item.AssAmt, None, "INR") }}{{ item.GstRt + item.CesRt }} %{{ frappe.utils.fmt_money(0, None, "INR") }}{{ frappe.utils.fmt_money(item.TotItemVal, None, "INR") }}
-
-
-
4. Value Details
- - - - - - - - - - - - - - - - - {%- set value_details = einvoice.ValDtls -%} - - - - - - - - - - - - - -
Taxable AmountCGSTSGSTIGSTCESSState CESSDiscountOther ChargesRound OffTotal Value
{{ frappe.utils.fmt_money(value_details.AssVal, None, "INR") }}{{ frappe.utils.fmt_money(value_details.CgstVal, None, "INR") }}{{ frappe.utils.fmt_money(value_details.SgstVal, None, "INR") }}{{ frappe.utils.fmt_money(value_details.IgstVal, None, "INR") }}{{ frappe.utils.fmt_money(value_details.CesVal, None, "INR") }}{{ frappe.utils.fmt_money(0, None, "INR") }}{{ frappe.utils.fmt_money(value_details.Discount, None, "INR") }}{{ frappe.utils.fmt_money(value_details.OthChrg, None, "INR") }}{{ frappe.utils.fmt_money(value_details.RndOffAmt, None, "INR") }}{{ frappe.utils.fmt_money(value_details.TotInvVal, None, "INR") }}
-
- {% else %} -
- You must generate IRN before you can preview GST E-Invoice. -
- {% endif %} -
- diff --git a/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.json b/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.json deleted file mode 100644 index 1001199a09..0000000000 --- a/erpnext/accounts/print_format/gst_e_invoice/gst_e_invoice.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "align_labels_right": 1, - "creation": "2020-10-10 18:01:21.032914", - "custom_format": 0, - "default_print_language": "en-US", - "disabled": 1, - "doc_type": "Sales Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "html": "", - "idx": 0, - "line_breaks": 1, - "modified": "2020-10-23 19:54:40.634936", - "modified_by": "Administrator", - "module": "Accounts", - "name": "GST E-Invoice", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 1, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/accounts/print_format/gst_purchase_invoice/gst_purchase_invoice.json b/erpnext/accounts/print_format/gst_purchase_invoice/gst_purchase_invoice.json deleted file mode 100644 index 1467f27e66..0000000000 --- a/erpnext/accounts/print_format/gst_purchase_invoice/gst_purchase_invoice.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "align_labels_right": 0, - "creation": "2018-04-07 11:59:51.169725", - "custom_format": 0, - "disabled": 0, - "doc_type": "Purchase Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"
\\t\\t\\t\\t

Purchase Invoice
{{ doc.name }}\\t\\t\\t\\t

\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"supplier_name\", \"label\": \"Supplier Name\"}, {\"print_hide\": 0, \"fieldname\": \"due_date\", \"label\": \"Due Date\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"address_display\", \"label\": \"Address\"}, {\"print_hide\": 0, \"fieldname\": \"contact_display\", \"label\": \"Contact\"}, {\"print_hide\": 0, \"fieldname\": \"contact_mobile\", \"label\": \"Mobile No\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"item_name\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}, {\"print_hide\": 0, \"fieldname\": \"image\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"received_qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rejected_qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"discount_percentage\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"pricing_rule\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"weight_per_unit\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"total_weight\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"weight_uom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"warehouse\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rejected_warehouse\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"batch_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"serial_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"bom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"asset\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"gst_hsn_code\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"items\", \"label\": \"Items\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"total\", \"label\": \"Total\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"category\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"add_deduct_tax\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"charge_type\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"row_id\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"included_in_print_rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"account_head\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"cost_center\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"tax_amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"total\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"taxes\", \"label\": \"Purchase Taxes and Charges\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"grand_total\", \"label\": \"Grand Total\"}, {\"print_hide\": 0, \"fieldname\": \"in_words\", \"label\": \"In Words\"}, {\"print_hide\": 0, \"fieldname\": \"disable_rounded_total\", \"label\": \"Disable Rounded Total\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Payments\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"cash_bank_account\", \"label\": \"Cash/Bank Account\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"other_charges_calculation\", \"align\": \"left\", \"label\": \"Tax Breakup\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Raw\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"main_item_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rm_item_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}, {\"print_hide\": 0, \"fieldname\": \"batch_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"serial_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"required_qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"consumed_qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"stock_uom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"conversion_factor\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"current_stock\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"reference_name\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"bom_detail_no\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"supplied_items\", \"label\": \"Supplied Items\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Terms\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"terms\", \"label\": \"Terms and Conditions1\"}]", - "idx": 0, - "line_breaks": 0, - "modified": "2019-03-04 13:38:47.362002", - "modified_by": "Administrator", - "module": "Accounts", - "name": "GST Purchase Invoice", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Jinja", - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html index f4fd06ba03..f2bf9424f7 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.html @@ -42,7 +42,7 @@ {% if(filters.show_future_payments) { %} {% var balance_row = data.slice(-1).pop(); - var start = filters.based_on_payment_terms ? 13 : 11; + var start = report.columns.findIndex((elem) => (elem.fieldname == 'age')); var range1 = report.columns[start].label; var range2 = report.columns[start+1].label; var range3 = report.columns[start+2].label; diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js index 748bcde435..0238711a70 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js @@ -172,11 +172,6 @@ frappe.query_reports["Accounts Receivable"] = { "label": __("Show Sales Person"), "fieldtype": "Check", }, - { - "fieldname": "show_remarks", - "label": __("Show Remarks"), - "fieldtype": "Check", - }, { "fieldname": "tax_id", "label": __("Tax Id"), diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index de9d63d849..411b31371b 100755 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -5,7 +5,9 @@ from collections import OrderedDict import frappe -from frappe import _, scrub +from frappe import _, qb, scrub +from frappe.query_builder import Criterion +from frappe.query_builder.functions import Date from frappe.utils import cint, cstr, flt, getdate, nowdate from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( @@ -41,6 +43,8 @@ def execute(filters=None): class ReceivablePayableReport(object): def __init__(self, filters=None): self.filters = frappe._dict(filters or {}) + self.qb_selection_filter = [] + self.ple = qb.DocType("Payment Ledger Entry") self.filters.report_date = getdate(self.filters.report_date or nowdate()) self.age_as_on = ( getdate(nowdate()) @@ -78,7 +82,7 @@ class ReceivablePayableReport(object): self.skip_total_row = 1 def get_data(self): - self.get_gl_entries() + self.get_ple_entries() self.get_sales_invoices_or_customers_based_on_sales_person() self.voucher_balance = OrderedDict() self.init_voucher_balance() # invoiced, paid, credit_note, outstanding @@ -96,25 +100,25 @@ class ReceivablePayableReport(object): self.get_return_entries() self.data = [] - for gle in self.gl_entries: - self.update_voucher_balance(gle) + + for ple in self.ple_entries: + self.update_voucher_balance(ple) self.build_data() def init_voucher_balance(self): # build all keys, since we want to exclude vouchers beyond the report date - for gle in self.gl_entries: + for ple in self.ple_entries: # get the balance object for voucher_type - key = (gle.voucher_type, gle.voucher_no, gle.party) + key = (ple.voucher_type, ple.voucher_no, ple.party) if not key in self.voucher_balance: self.voucher_balance[key] = frappe._dict( - voucher_type=gle.voucher_type, - voucher_no=gle.voucher_no, - party=gle.party, - party_account=gle.account, - posting_date=gle.posting_date, - account_currency=gle.account_currency, - remarks=gle.remarks if self.filters.get("show_remarks") else None, + voucher_type=ple.voucher_type, + voucher_no=ple.voucher_no, + party=ple.party, + party_account=ple.account, + posting_date=ple.posting_date, + account_currency=ple.account_currency, invoiced=0.0, paid=0.0, credit_note=0.0, @@ -124,23 +128,23 @@ class ReceivablePayableReport(object): credit_note_in_account_currency=0.0, outstanding_in_account_currency=0.0, ) - self.get_invoices(gle) + self.get_invoices(ple) if self.filters.get("group_by_party"): - self.init_subtotal_row(gle.party) + self.init_subtotal_row(ple.party) if self.filters.get("group_by_party"): self.init_subtotal_row("Total") - def get_invoices(self, gle): - if gle.voucher_type in ("Sales Invoice", "Purchase Invoice"): + def get_invoices(self, ple): + if ple.voucher_type in ("Sales Invoice", "Purchase Invoice"): if self.filters.get("sales_person"): - if gle.voucher_no in self.sales_person_records.get( + if ple.voucher_no in self.sales_person_records.get( "Sales Invoice", [] - ) or gle.party in self.sales_person_records.get("Customer", []): - self.invoices.add(gle.voucher_no) + ) or ple.party in self.sales_person_records.get("Customer", []): + self.invoices.add(ple.voucher_no) else: - self.invoices.add(gle.voucher_no) + self.invoices.add(ple.voucher_no) def init_subtotal_row(self, party): if not self.total_row_map.get(party): @@ -162,39 +166,49 @@ class ReceivablePayableReport(object): "range5", ] - def update_voucher_balance(self, gle): + def get_voucher_balance(self, ple): + if self.filters.get("sales_person"): + if not ( + ple.party in self.sales_person_records.get("Customer", []) + or ple.against_voucher_no in self.sales_person_records.get("Sales Invoice", []) + ): + return + + key = (ple.against_voucher_type, ple.against_voucher_no, ple.party) + row = self.voucher_balance.get(key) + return row + + def update_voucher_balance(self, ple): # get the row where this balance needs to be updated # if its a payment, it will return the linked invoice or will be considered as advance - row = self.get_voucher_balance(gle) + row = self.get_voucher_balance(ple) if not row: return - # gle_balance will be the total "debit - credit" for receivable type reports and - # and vice-versa for payable type reports - gle_balance = self.get_gle_balance(gle) - gle_balance_in_account_currency = self.get_gle_balance_in_account_currency(gle) - if gle_balance > 0: - if gle.voucher_type in ("Journal Entry", "Payment Entry") and gle.against_voucher: - # debit against sales / purchase invoice - row.paid -= gle_balance - row.paid_in_account_currency -= gle_balance_in_account_currency + amount = ple.amount + amount_in_account_currency = ple.amount_in_account_currency + + # update voucher + if ple.amount > 0: + if ( + ple.voucher_type in ["Journal Entry", "Payment Entry"] + and ple.voucher_no != ple.against_voucher_no + ): + row.paid -= amount + row.paid_in_account_currency -= amount_in_account_currency else: - # invoice - row.invoiced += gle_balance - row.invoiced_in_account_currency += gle_balance_in_account_currency + row.invoiced += amount + row.invoiced_in_account_currency += amount_in_account_currency else: - # payment or credit note for receivables - if self.is_invoice(gle): - # stand alone debit / credit note - row.credit_note -= gle_balance - row.credit_note_in_account_currency -= gle_balance_in_account_currency + if self.is_invoice(ple): + row.credit_note -= amount + row.credit_note_in_account_currency -= amount_in_account_currency else: - # advance / unlinked payment or other adjustment - row.paid -= gle_balance - row.paid_in_account_currency -= gle_balance_in_account_currency + row.paid -= amount + row.paid_in_account_currency -= amount_in_account_currency - if gle.cost_center: - row.cost_center = str(gle.cost_center) + if ple.cost_center: + row.cost_center = str(ple.cost_center) def update_sub_total_row(self, row, party): total_row = self.total_row_map.get(party) @@ -210,39 +224,6 @@ class ReceivablePayableReport(object): self.data.append({}) self.update_sub_total_row(sub_total_row, "Total") - def get_voucher_balance(self, gle): - if self.filters.get("sales_person"): - against_voucher = gle.against_voucher or gle.voucher_no - if not ( - gle.party in self.sales_person_records.get("Customer", []) - or against_voucher in self.sales_person_records.get("Sales Invoice", []) - ): - return - - voucher_balance = None - if gle.against_voucher: - # find invoice - against_voucher = gle.against_voucher - - # If payment is made against credit note - # and credit note is made against a Sales Invoice - # then consider the payment against original sales invoice. - if gle.against_voucher_type in ("Sales Invoice", "Purchase Invoice"): - if gle.against_voucher in self.return_entries: - return_against = self.return_entries.get(gle.against_voucher) - if return_against: - against_voucher = return_against - - voucher_balance = self.voucher_balance.get( - (gle.against_voucher_type, against_voucher, gle.party) - ) - - if not voucher_balance: - # no invoice, this is an invoice / stand-alone payment / credit note - voucher_balance = self.voucher_balance.get((gle.voucher_type, gle.voucher_no, gle.party)) - - return voucher_balance - def build_data(self): # set outstanding for all the accumulated balances # as we can use this to filter out invoices without outstanding @@ -260,6 +241,7 @@ class ReceivablePayableReport(object): if (abs(row.outstanding) > 1.0 / 10**self.currency_precision) and ( abs(row.outstanding_in_account_currency) > 1.0 / 10**self.currency_precision ): + # non-zero oustanding, we must consider this row if self.is_invoice(row) and self.filters.based_on_payment_terms: @@ -669,48 +651,53 @@ class ReceivablePayableReport(object): index = 4 row["range" + str(index + 1)] = row.outstanding - def get_gl_entries(self): + def get_ple_entries(self): # get all the GL entries filtered by the given filters - conditions, values = self.prepare_conditions() - order_by = self.get_order_by_condition() + self.prepare_conditions() if self.filters.show_future_payments: - values.insert(2, self.filters.report_date) - - date_condition = """AND (posting_date <= %s - OR (against_voucher IS NULL AND DATE(creation) <= %s))""" + self.qb_selection_filter.append( + ( + self.ple.posting_date.lte(self.filters.report_date) + | ( + (self.ple.voucher_no == self.ple.against_voucher_no) + & (Date(self.ple.creation).lte(self.filters.report_date)) + ) + ) + ) else: - date_condition = "AND posting_date <=%s" + self.qb_selection_filter.append(self.ple.posting_date.lte(self.filters.report_date)) - if self.filters.get(scrub(self.party_type)): - select_fields = "debit_in_account_currency as debit, credit_in_account_currency as credit" - else: - select_fields = "debit, credit" - - doc_currency_fields = "debit_in_account_currency, credit_in_account_currency" - - remarks = ", remarks" if self.filters.get("show_remarks") else "" - - self.gl_entries = frappe.db.sql( - """ - select - name, posting_date, account, party_type, party, voucher_type, voucher_no, cost_center, - against_voucher_type, against_voucher, account_currency, {0}, {1} {remarks} - from - `tabGL Entry` - where - docstatus < 2 - and is_cancelled = 0 - and party_type=%s - and (party is not null and party != '') - {2} {3} {4}""".format( - select_fields, doc_currency_fields, date_condition, conditions, order_by, remarks=remarks - ), - values, - as_dict=True, + ple = qb.DocType("Payment Ledger Entry") + query = ( + qb.from_(ple) + .select( + ple.account, + ple.voucher_type, + ple.voucher_no, + ple.against_voucher_type, + ple.against_voucher_no, + ple.party_type, + ple.cost_center, + ple.party, + ple.posting_date, + ple.due_date, + ple.account_currency.as_("currency"), + ple.amount, + ple.amount_in_account_currency, + ) + .where(ple.delinked == 0) + .where(Criterion.all(self.qb_selection_filter)) ) + if self.filters.get("group_by_party"): + query = query.orderby(self.ple.party, self.ple.posting_date) + else: + query = query.orderby(self.ple.posting_date, self.ple.party) + + self.ple_entries = query.run(as_dict=True) + def get_sales_invoices_or_customers_based_on_sales_person(self): if self.filters.get("sales_person"): lft, rgt = frappe.db.get_value("Sales Person", self.filters.get("sales_person"), ["lft", "rgt"]) @@ -731,23 +718,21 @@ class ReceivablePayableReport(object): self.sales_person_records.setdefault(d.parenttype, set()).add(d.parent) def prepare_conditions(self): - conditions = [""] - values = [self.party_type, self.filters.report_date] + self.qb_selection_filter = [] party_type_field = scrub(self.party_type) - self.add_common_filters(conditions, values, party_type_field) + self.add_common_filters(party_type_field=party_type_field) if party_type_field == "customer": - self.add_customer_filters(conditions, values) + self.add_customer_filters() elif party_type_field == "supplier": - self.add_supplier_filters(conditions, values) + self.add_supplier_filters() if self.filters.cost_center: - self.get_cost_center_conditions(conditions) + self.get_cost_center_conditions() - self.add_accounting_dimensions_filters(conditions, values) - return " and ".join(conditions), values + self.add_accounting_dimensions_filters() def get_cost_center_conditions(self, conditions): lft, rgt = frappe.db.get_value("Cost Center", self.filters.cost_center, ["lft", "rgt"]) @@ -755,32 +740,20 @@ class ReceivablePayableReport(object): center.name for center in frappe.get_list("Cost Center", filters={"lft": (">=", lft), "rgt": ("<=", rgt)}) ] + self.qb_selection_filter.append(self.ple.cost_center.isin(cost_center_list)) - cost_center_string = '", "'.join(cost_center_list) - conditions.append('cost_center in ("{0}")'.format(cost_center_string)) - - def get_order_by_condition(self): - if self.filters.get("group_by_party"): - return "order by party, posting_date" - else: - return "order by posting_date, party" - - def add_common_filters(self, conditions, values, party_type_field): + def add_common_filters(self, party_type_field): if self.filters.company: - conditions.append("company=%s") - values.append(self.filters.company) + self.qb_selection_filter.append(self.ple.company == self.filters.company) if self.filters.finance_book: - conditions.append("ifnull(finance_book, '') in (%s, '')") - values.append(self.filters.finance_book) + self.qb_selection_filter.append(self.ple.finance_book == self.filters.finance_book) if self.filters.get(party_type_field): - conditions.append("party=%s") - values.append(self.filters.get(party_type_field)) + self.qb_selection_filter.append(self.ple.party == self.filters.get(party_type_field)) if self.filters.party_account: - conditions.append("account =%s") - values.append(self.filters.party_account) + self.qb_selection_filter.append(self.ple.account == self.filters.party_account) else: # get GL with "receivable" or "payable" account_type account_type = "Receivable" if self.party_type == "Customer" else "Payable" @@ -792,46 +765,68 @@ class ReceivablePayableReport(object): ] if accounts: - conditions.append("account in (%s)" % ",".join(["%s"] * len(accounts))) - values += accounts + self.qb_selection_filter.append(self.ple.account.isin(accounts)) + + def add_customer_filters( + self, + ): + self.customter = qb.DocType("Customer") - def add_customer_filters(self, conditions, values): if self.filters.get("customer_group"): - conditions.append(self.get_hierarchical_filters("Customer Group", "customer_group")) + self.get_hierarchical_filters("Customer Group", "customer_group") if self.filters.get("territory"): - conditions.append(self.get_hierarchical_filters("Territory", "territory")) + self.get_hierarchical_filters("Territory", "territory") if self.filters.get("payment_terms_template"): - conditions.append("party in (select name from tabCustomer where payment_terms=%s)") - values.append(self.filters.get("payment_terms_template")) + self.qb_selection_filter.append( + self.ple.party_isin( + qb.from_(self.customer).where( + self.customer.payment_terms == self.filters.get("payment_terms_template") + ) + ) + ) if self.filters.get("sales_partner"): - conditions.append("party in (select name from tabCustomer where default_sales_partner=%s)") - values.append(self.filters.get("sales_partner")) - - def add_supplier_filters(self, conditions, values): - if self.filters.get("supplier_group"): - conditions.append( - """party in (select name from tabSupplier - where supplier_group=%s)""" + self.qb_selection_filter.append( + self.ple.party_isin( + qb.from_(self.customer).where( + self.customer.default_sales_partner == self.filters.get("payment_terms_template") + ) + ) + ) + + def add_supplier_filters(self): + supplier = qb.DocType("Supplier") + if self.filters.get("supplier_group"): + self.qb_selection_filter.append( + self.ple.party.isin( + qb.from_(supplier) + .select(supplier.name) + .where(supplier.supplier_group == self.filters.get("supplier_group")) + ) ) - values.append(self.filters.get("supplier_group")) if self.filters.get("payment_terms_template"): - conditions.append("party in (select name from tabSupplier where payment_terms=%s)") - values.append(self.filters.get("payment_terms_template")) + self.qb_selection_filter.append( + self.ple.party.isin( + qb.from_(supplier) + .select(supplier.name) + .where(supplier.payment_terms == self.filters.get("supplier_group")) + ) + ) def get_hierarchical_filters(self, doctype, key): lft, rgt = frappe.db.get_value(doctype, self.filters.get(key), ["lft", "rgt"]) - return """party in (select name from tabCustomer - where exists(select name from `tab{doctype}` where lft >= {lft} and rgt <= {rgt} - and name=tabCustomer.{key}))""".format( - doctype=doctype, lft=lft, rgt=rgt, key=key - ) + doc = qb.DocType(doctype) + ple = self.ple + customer = self.customer + groups = qb.from_(doc).select(doc.name).where((doc.lft >= lft) & (doc.rgt <= rgt)) + customers = qb.from_(customer).select(customer.name).where(customer[key].isin(groups)) + self.qb_selection_filter.append(ple.isin(ple.party.isin(customers))) - def add_accounting_dimensions_filters(self, conditions, values): + def add_accounting_dimensions_filters(self): accounting_dimensions = get_accounting_dimensions(as_list=False) if accounting_dimensions: @@ -841,30 +836,16 @@ class ReceivablePayableReport(object): self.filters[dimension.fieldname] = get_dimension_with_children( dimension.document_type, self.filters.get(dimension.fieldname) ) - conditions.append("{0} in %s".format(dimension.fieldname)) - values.append(tuple(self.filters.get(dimension.fieldname))) + self.qb_selection_filter.append( + self.ple[dimension.fieldname].isin(self.filters[dimension.fieldname]) + ) + else: + self.qb_selection_filter.append( + self.ple[dimension.fieldname] == self.filters[dimension.fieldname] + ) - def get_gle_balance(self, gle): - # get the balance of the GL (debit - credit) or reverse balance based on report type - return gle.get(self.dr_or_cr) - self.get_reverse_balance(gle) - - def get_gle_balance_in_account_currency(self, gle): - # get the balance of the GL (debit - credit) or reverse balance based on report type - return gle.get( - self.dr_or_cr + "_in_account_currency" - ) - self.get_reverse_balance_in_account_currency(gle) - - def get_reverse_balance_in_account_currency(self, gle): - return gle.get( - "debit_in_account_currency" if self.dr_or_cr == "credit" else "credit_in_account_currency" - ) - - def get_reverse_balance(self, gle): - # get "credit" balance if report type is "debit" and vice versa - return gle.get("debit" if self.dr_or_cr == "credit" else "credit") - - def is_invoice(self, gle): - if gle.voucher_type in ("Sales Invoice", "Purchase Invoice"): + def is_invoice(self, ple): + if ple.voucher_type in ("Sales Invoice", "Purchase Invoice"): return True def get_party_details(self, party): @@ -926,9 +907,6 @@ class ReceivablePayableReport(object): width=180, ) - if self.filters.show_remarks: - self.add_column(label=_("Remarks"), fieldname="remarks", fieldtype="Text", width=200), - self.add_column(label="Due Date", fieldtype="Date") if self.party_type == "Supplier": diff --git a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py index f38890e980..edddbbce21 100644 --- a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py @@ -12,6 +12,7 @@ class TestAccountsReceivable(unittest.TestCase): def test_accounts_receivable(self): frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company 2'") frappe.db.sql("delete from `tabGL Entry` where company='_Test Company 2'") + frappe.db.sql("delete from `tabPayment Ledger Entry` where company='_Test Company 2'") filters = { "company": "_Test Company 2", diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py index 20f7643a1c..9d2deea523 100644 --- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py +++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py @@ -43,7 +43,7 @@ def get_columns(): "options": "Account", "width": 170, }, - {"label": _("Amount"), "fieldname": "amount", "width": 120}, + {"label": _("Amount"), "fieldname": "amount", "fieldtype": "Currency", "width": 120}, ] return columns diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py index f3ccc868c4..fbc1a69ddc 100644 --- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py @@ -219,8 +219,8 @@ def get_loan_entries(filters): .where(ifnull(loan_doc.clearance_date, "4000-01-01") > getdate(filters.get("report_date"))) ) - if doctype == "Loan Repayment": - query.where(loan_doc.repay_from_salary == 0) + if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"): + query = query.where((loan_doc.repay_from_salary == 0)) entries = query.run(as_dict=1) loan_docs.extend(entries) @@ -272,16 +272,19 @@ def get_loan_amount(filters): posting_date = (loan_doc.posting_date).as_("posting_date") account = loan_doc.payment_account - amount = ( + query = ( frappe.qb.from_(loan_doc) .select(amount_field) .where(loan_doc.docstatus == 1) .where(account == filters.get("account")) .where(posting_date > getdate(filters.get("report_date"))) .where(ifnull(loan_doc.clearance_date, "4000-01-01") <= getdate(filters.get("report_date"))) - .run()[0][0] ) + if doctype == "Loan Repayment" and frappe.db.has_column("Loan Repayment", "repay_from_salary"): + query = query.where((loan_doc.repay_from_salary == 0)) + + amount = query.run()[0][0] total_amount += flt(amount) return total_amount diff --git a/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py b/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py new file mode 100644 index 0000000000..d7c871608e --- /dev/null +++ b/erpnext/accounts/report/bank_reconciliation_statement/test_bank_reconciliation_statement.py @@ -0,0 +1,40 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +import frappe +from frappe.tests.utils import FrappeTestCase + +from erpnext.accounts.doctype.bank_transaction.test_bank_transaction import ( + create_loan_and_repayment, +) +from erpnext.accounts.report.bank_reconciliation_statement.bank_reconciliation_statement import ( + execute, +) +from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts + + +class TestBankReconciliationStatement(FrappeTestCase): + def setUp(self): + for dt in [ + "Loan Repayment", + "Loan Disbursement", + "Journal Entry", + "Journal Entry Account", + "Payment Entry", + ]: + frappe.db.delete(dt) + + def test_loan_entries_in_bank_reco_statement(self): + create_loan_accounts() + repayment_entry = create_loan_and_repayment() + + filters = frappe._dict( + { + "company": "Test Company", + "account": "Payment Account - _TC", + "report_date": "2018-10-30", + } + ) + result = execute(filters) + + self.assertEqual(result[1][0].payment_entry, repayment_entry.name) diff --git a/erpnext/accounts/report/cash_flow/cash_flow.py b/erpnext/accounts/report/cash_flow/cash_flow.py index 74926b90ff..75e983afc0 100644 --- a/erpnext/accounts/report/cash_flow/cash_flow.py +++ b/erpnext/accounts/report/cash_flow/cash_flow.py @@ -262,7 +262,10 @@ def get_report_summary(summary_data, currency): def get_chart_data(columns, data): labels = [d.get("label") for d in columns[2:]] datasets = [ - {"name": account.get("account").replace("'", ""), "values": [account.get("total")]} + { + "name": account.get("account").replace("'", ""), + "values": [account.get(d.get("fieldname")) for d in columns[2:]], + } for account in data if account.get("parent_account") == None and account.get("currency") ] diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js index d3e836afd1..dd965a9813 100644 --- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js +++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js @@ -50,7 +50,15 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { "fieldtype": "Link", "options": "Fiscal Year", "default": frappe.defaults.get_user_default("fiscal_year"), - "reqd": 1 + "reqd": 1, + on_change: () => { + frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), function(r) { + let year_start_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), "year_start_date"); + frappe.query_report.set_filter_value({ + period_start_date: year_start_date + }); + }); + } }, { "fieldname":"to_fiscal_year", @@ -58,7 +66,15 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() { "fieldtype": "Link", "options": "Fiscal Year", "default": frappe.defaults.get_user_default("fiscal_year"), - "reqd": 1 + "reqd": 1, + on_change: () => { + frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), function(r) { + let year_end_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), "year_end_date"); + frappe.query_report.set_filter_value({ + period_end_date: year_end_date + }); + }); + } }, { "fieldname":"finance_book", diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 56d68e1fa9..36825771f8 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -507,7 +507,7 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters): ) additional_conditions.append("{0} in %({0})s".format(dimension.fieldname)) else: - additional_conditions.append("{0} in (%({0})s)".format(dimension.fieldname)) + additional_conditions.append("{0} in %({0})s".format(dimension.fieldname)) return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 865cf14622..e77e828e16 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -275,7 +275,7 @@ def get_conditions(filters): ) conditions.append("{0} in %({0})s".format(dimension.fieldname)) else: - conditions.append("{0} in (%({0})s)".format(dimension.fieldname)) + conditions.append("{0} in %({0})s".format(dimension.fieldname)) return "and {}".format(" and ".join(conditions)) if conditions else "" @@ -425,7 +425,7 @@ def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map): update_value_in_dict(totals, "opening", gle) update_value_in_dict(totals, "closing", gle) - elif gle.posting_date <= to_date: + elif gle.posting_date <= to_date or (cstr(gle.is_opening) == "Yes" and show_opening_entries): if not group_by_voucher_consolidated: update_value_in_dict(gle_map[group_by_value].totals, "total", gle) update_value_in_dict(gle_map[group_by_value].totals, "closing", gle) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.js b/erpnext/accounts/report/gross_profit/gross_profit.js index 158ff4d343..3d37b5898c 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.js +++ b/erpnext/accounts/report/gross_profit/gross_profit.js @@ -35,7 +35,7 @@ frappe.query_reports["Gross Profit"] = { "fieldname":"group_by", "label": __("Group By"), "fieldtype": "Select", - "options": "Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject", + "options": "Invoice\nItem Code\nItem Group\nBrand\nWarehouse\nCustomer\nCustomer Group\nTerritory\nSales Person\nProject\nMonthly\nPayment Term", "default": "Invoice" }, ], diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index 9668992e02..526ea9d6e2 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -4,7 +4,7 @@ import frappe from frappe import _, scrub -from frappe.utils import cint, flt +from frappe.utils import cint, flt, formatdate from erpnext.controllers.queries import get_match_cond from erpnext.stock.utils import get_incoming_rate @@ -124,6 +124,23 @@ def execute(filters=None): "gross_profit", "gross_profit_percent", ], + "monthly": [ + "monthly", + "qty", + "base_rate", + "buying_rate", + "base_amount", + "buying_amount", + "gross_profit", + "gross_profit_percent", + ], + "payment_term": [ + "payment_term", + "base_amount", + "buying_amount", + "gross_profit", + "gross_profit_percent", + ], } ) @@ -317,6 +334,19 @@ def get_columns(group_wise_columns, filters): "options": "territory", "width": 100, }, + "monthly": { + "label": _("Monthly"), + "fieldname": "monthly", + "fieldtype": "Data", + "width": 100, + }, + "payment_term": { + "label": _("Payment Term"), + "fieldname": "payment_term", + "fieldtype": "Link", + "options": "Payment Term", + "width": 170, + }, } ) @@ -390,6 +420,9 @@ class GrossProfitGenerator(object): buying_amount = 0 for row in reversed(self.si_list): + if self.filters.get("group_by") == "Monthly": + row.monthly = formatdate(row.posting_date, "MMM YYYY") + if self.skip_row(row): continue @@ -445,17 +478,7 @@ class GrossProfitGenerator(object): def get_average_rate_based_on_group_by(self): for key in list(self.grouped): - if self.filters.get("group_by") != "Invoice": - for i, row in enumerate(self.grouped[key]): - if i == 0: - new_row = row - else: - new_row.qty += flt(row.qty) - new_row.buying_amount += flt(row.buying_amount, self.currency_precision) - new_row.base_amount += flt(row.base_amount, self.currency_precision) - new_row = self.set_average_rate(new_row) - self.grouped_data.append(new_row) - else: + if self.filters.get("group_by") == "Invoice": for i, row in enumerate(self.grouped[key]): if row.indent == 1.0: if ( @@ -469,6 +492,44 @@ class GrossProfitGenerator(object): if flt(row.qty) or row.base_amount: row = self.set_average_rate(row) self.grouped_data.append(row) + elif self.filters.get("group_by") == "Payment Term": + for i, row in enumerate(self.grouped[key]): + invoice_portion = 0 + + if row.is_return: + invoice_portion = 100 + elif row.invoice_portion: + invoice_portion = row.invoice_portion + else: + invoice_portion = row.payment_amount * 100 / row.base_net_amount + + if i == 0: + new_row = row + self.set_average_based_on_payment_term_portion(new_row, row, invoice_portion) + else: + new_row.qty += flt(row.qty) + self.set_average_based_on_payment_term_portion(new_row, row, invoice_portion, True) + + new_row = self.set_average_rate(new_row) + self.grouped_data.append(new_row) + else: + for i, row in enumerate(self.grouped[key]): + if i == 0: + new_row = row + else: + new_row.qty += flt(row.qty) + new_row.buying_amount += flt(row.buying_amount, self.currency_precision) + new_row.base_amount += flt(row.base_amount, self.currency_precision) + new_row = self.set_average_rate(new_row) + self.grouped_data.append(new_row) + + def set_average_based_on_payment_term_portion(self, new_row, row, invoice_portion, aggr=False): + cols = ["base_amount", "buying_amount", "gross_profit"] + for col in cols: + if aggr: + new_row[col] += row[col] * invoice_portion / 100 + else: + new_row[col] = row[col] * invoice_portion / 100 def is_not_invoice_row(self, row): return (self.filters.get("group_by") == "Invoice" and row.indent != 0.0) or self.filters.get( @@ -622,6 +683,20 @@ class GrossProfitGenerator(object): sales_person_cols = "" sales_team_table = "" + if self.filters.group_by == "Payment Term": + payment_term_cols = """,if(`tabSales Invoice`.is_return = 1, + '{0}', + coalesce(schedule.payment_term, '{1}')) as payment_term, + schedule.invoice_portion, + schedule.payment_amount """.format( + _("Sales Return"), _("No Terms") + ) + payment_term_table = """ left join `tabPayment Schedule` schedule on schedule.parent = `tabSales Invoice`.name and + `tabSales Invoice`.is_return = 0 """ + else: + payment_term_cols = "" + payment_term_table = "" + if self.filters.get("sales_invoice"): conditions += " and `tabSales Invoice`.name = %(sales_invoice)s" @@ -644,10 +719,12 @@ class GrossProfitGenerator(object): `tabSales Invoice Item`.name as "item_row", `tabSales Invoice`.is_return, `tabSales Invoice Item`.cost_center {sales_person_cols} + {payment_term_cols} from `tabSales Invoice` inner join `tabSales Invoice Item` on `tabSales Invoice Item`.parent = `tabSales Invoice`.name {sales_team_table} + {payment_term_table} where `tabSales Invoice`.docstatus=1 and `tabSales Invoice`.is_opening!='Yes' {conditions} {match_cond} order by @@ -655,6 +732,8 @@ class GrossProfitGenerator(object): conditions=conditions, sales_person_cols=sales_person_cols, sales_team_table=sales_team_table, + payment_term_cols=payment_term_cols, + payment_term_table=payment_term_table, match_cond=get_match_cond("Sales Invoice"), ), self.filters, diff --git a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py index 1a003993aa..230b18c293 100644 --- a/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py +++ b/erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py @@ -100,7 +100,7 @@ def get_sales_details(filters): sales_data = frappe.db.sql( """ select s.territory, s.customer, si.item_group, si.item_code, si.qty, {date_field} as last_order_date, - DATEDIFF(CURDATE(), {date_field}) as days_since_last_order + DATEDIFF(CURRENT_DATE, {date_field}) as days_since_last_order from `tab{doctype}` s, `tab{doctype} Item` si where s.name = si.parent and s.docstatus = 1 order by days_since_last_order """.format( # nosec diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index 2e7213f42b..ac70666654 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -443,12 +443,6 @@ def get_grand_total(filters, doctype): ] # nosec -def get_deducted_taxes(): - return frappe.db.sql_list( - "select name from `tabPurchase Taxes and Charges` where add_deduct_tax = 'Deduct'" - ) - - def get_tax_accounts( item_list, columns, @@ -462,6 +456,7 @@ def get_tax_accounts( tax_columns = [] invoice_item_row = {} itemised_tax = {} + add_deduct_tax = "charge_type" tax_amount_precision = ( get_field_precision( @@ -477,13 +472,13 @@ def get_tax_accounts( conditions = "" if doctype == "Purchase Invoice": conditions = " and category in ('Total', 'Valuation and Total') and base_tax_amount_after_discount_amount != 0" + add_deduct_tax = "add_deduct_tax" - deducted_tax = get_deducted_taxes() tax_details = frappe.db.sql( """ select name, parent, description, item_wise_tax_detail, - charge_type, base_tax_amount_after_discount_amount + charge_type, {add_deduct_tax}, base_tax_amount_after_discount_amount from `tab%s` where parenttype = %s and docstatus = 1 @@ -491,12 +486,22 @@ def get_tax_accounts( and parent in (%s) %s order by description - """ + """.format( + add_deduct_tax=add_deduct_tax + ) % (tax_doctype, "%s", ", ".join(["%s"] * len(invoice_item_row)), conditions), tuple([doctype] + list(invoice_item_row)), ) - for name, parent, description, item_wise_tax_detail, charge_type, tax_amount in tax_details: + for ( + name, + parent, + description, + item_wise_tax_detail, + charge_type, + add_deduct_tax, + tax_amount, + ) in tax_details: description = handle_html(description) if description not in tax_columns and tax_amount: # as description is text editor earlier and markup can break the column convention in reports @@ -529,7 +534,9 @@ def get_tax_accounts( if item_tax_amount: tax_value = flt(item_tax_amount, tax_amount_precision) tax_value = ( - tax_value * -1 if (doctype == "Purchase Invoice" and name in deducted_tax) else tax_value + tax_value * -1 + if (doctype == "Purchase Invoice" and add_deduct_tax == "Deduct") + else tax_value ) itemised_tax.setdefault(d.name, {})[description] = frappe._dict( diff --git a/erpnext/accounts/report/pos_register/pos_register.py b/erpnext/accounts/report/pos_register/pos_register.py index 1bda0d8ae3..9c0aba332e 100644 --- a/erpnext/accounts/report/pos_register/pos_register.py +++ b/erpnext/accounts/report/pos_register/pos_register.py @@ -62,7 +62,7 @@ def get_pos_entries(filters, group_by_field): """ SELECT p.posting_date, p.name as pos_invoice, p.pos_profile, - p.owner, p.base_grand_total as grand_total, p.base_paid_amount as paid_amount, + p.owner, p.base_grand_total as grand_total, p.base_paid_amount - p.change_amount as paid_amount, p.customer, p.is_return {select_mop_field} FROM `tabPOS Invoice` p {from_sales_invoice_payment} diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.py b/erpnext/accounts/report/profitability_analysis/profitability_analysis.py index 3e7aa1e368..183e279fe5 100644 --- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.py +++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.py @@ -211,6 +211,7 @@ def set_gl_entries_by_account( {additional_conditions} and posting_date <= %(to_date)s and {based_on} is not null + and is_cancelled = 0 order by {based_on}, posting_date""".format( additional_conditions="\n".join(additional_conditions), based_on=based_on ), diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py index a73c72c6d8..e8a1e795d9 100644 --- a/erpnext/accounts/report/purchase_register/purchase_register.py +++ b/erpnext/accounts/report/purchase_register/purchase_register.py @@ -237,7 +237,7 @@ def get_conditions(filters): else: conditions += ( common_condition - + "and ifnull(`tabPurchase Invoice Item`.{0}, '') in (%({0})s))".format(dimension.fieldname) + + "and ifnull(`tabPurchase Invoice Item`.{0}, '') in %({0})s)".format(dimension.fieldname) ) return conditions diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py index 4eef307286..057721479e 100644 --- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py +++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py @@ -179,7 +179,7 @@ def get_sales_invoice_data(filters): def get_mode_of_payments(filters): mode_of_payments = {} invoice_list = get_invoices(filters) - invoice_list_names = ",".join('"' + invoice["name"] + '"' for invoice in invoice_list) + invoice_list_names = ",".join("'" + invoice["name"] + "'" for invoice in invoice_list) if invoice_list: inv_mop = frappe.db.sql( """select a.owner,a.posting_date, ifnull(b.mode_of_payment, '') as mode_of_payment @@ -200,7 +200,7 @@ def get_mode_of_payments(filters): from `tabJournal Entry` a, `tabJournal Entry Account` b where a.name = b.parent and a.docstatus = 1 - and b.reference_type = "Sales Invoice" + and b.reference_type = 'Sales Invoice' and b.reference_name in ({invoice_list_names}) """.format( invoice_list_names=invoice_list_names @@ -228,7 +228,7 @@ def get_invoices(filters): def get_mode_of_payment_details(filters): mode_of_payment_details = {} invoice_list = get_invoices(filters) - invoice_list_names = ",".join('"' + invoice["name"] + '"' for invoice in invoice_list) + invoice_list_names = ",".join("'" + invoice["name"] + "'" for invoice in invoice_list) if invoice_list: inv_mop_detail = frappe.db.sql( """ @@ -259,7 +259,7 @@ def get_mode_of_payment_details(filters): from `tabJournal Entry` a, `tabJournal Entry Account` b where a.name = b.parent and a.docstatus = 1 - and b.reference_type = "Sales Invoice" + and b.reference_type = 'Sales Invoice' and b.reference_name in ({invoice_list_names}) group by a.owner, a.posting_date, mode_of_payment ) t diff --git a/erpnext/accounts/report/sales_register/sales_register.py b/erpnext/accounts/report/sales_register/sales_register.py index fc48dd2816..33bd3c7496 100644 --- a/erpnext/accounts/report/sales_register/sales_register.py +++ b/erpnext/accounts/report/sales_register/sales_register.py @@ -346,9 +346,13 @@ def get_columns(invoice_list, additional_table_columns): def get_conditions(filters): conditions = "" + accounting_dimensions = get_accounting_dimensions(as_list=False) or [] + accounting_dimensions_list = [d.fieldname for d in accounting_dimensions] + if filters.get("company"): conditions += " and company=%(company)s" - if filters.get("customer"): + + if filters.get("customer") and "customer" not in accounting_dimensions_list: conditions += " and customer = %(customer)s" if filters.get("from_date"): @@ -359,32 +363,18 @@ def get_conditions(filters): if filters.get("owner"): conditions += " and owner = %(owner)s" - if filters.get("mode_of_payment"): - conditions += """ and exists(select name from `tabSales Invoice Payment` - where parent=`tabSales Invoice`.name - and ifnull(`tabSales Invoice Payment`.mode_of_payment, '') = %(mode_of_payment)s)""" + def get_sales_invoice_item_field_condition(field, table="Sales Invoice Item") -> str: + if not filters.get(field) or field in accounting_dimensions_list: + return "" + return f""" and exists(select name from `tab{table}` + where parent=`tabSales Invoice`.name + and ifnull(`tab{table}`.{field}, '') = %({field})s)""" - if filters.get("cost_center"): - conditions += """ and exists(select name from `tabSales Invoice Item` - where parent=`tabSales Invoice`.name - and ifnull(`tabSales Invoice Item`.cost_center, '') = %(cost_center)s)""" - - if filters.get("warehouse"): - conditions += """ and exists(select name from `tabSales Invoice Item` - where parent=`tabSales Invoice`.name - and ifnull(`tabSales Invoice Item`.warehouse, '') = %(warehouse)s)""" - - if filters.get("brand"): - conditions += """ and exists(select name from `tabSales Invoice Item` - where parent=`tabSales Invoice`.name - and ifnull(`tabSales Invoice Item`.brand, '') = %(brand)s)""" - - if filters.get("item_group"): - conditions += """ and exists(select name from `tabSales Invoice Item` - where parent=`tabSales Invoice`.name - and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)""" - - accounting_dimensions = get_accounting_dimensions(as_list=False) + conditions += get_sales_invoice_item_field_condition("mode_of_payments", "Sales Invoice Payment") + conditions += get_sales_invoice_item_field_condition("cost_center") + conditions += get_sales_invoice_item_field_condition("warehouse") + conditions += get_sales_invoice_item_field_condition("brand") + conditions += get_sales_invoice_item_field_condition("item_group") if accounting_dimensions: common_condition = """ @@ -405,7 +395,7 @@ def get_conditions(filters): else: conditions += ( common_condition - + "and ifnull(`tabSales Invoice Item`.{0}, '') in (%({0})s))".format(dimension.fieldname) + + "and ifnull(`tabSales Invoice Item`.{0}, '') in %({0})s)".format(dimension.fieldname) ) return conditions diff --git a/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py b/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py index 30ea5a9e4e..16e0ac1de6 100644 --- a/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py +++ b/erpnext/accounts/report/tds_payable_monthly/tds_payable_monthly.py @@ -8,11 +8,11 @@ from frappe import _ def execute(filters=None): validate_filters(filters) - tds_docs, tds_accounts, tax_category_map = get_tds_docs(filters) + tds_docs, tds_accounts, tax_category_map, journal_entry_party_map = get_tds_docs(filters) columns = get_columns(filters) - res = get_result(filters, tds_docs, tds_accounts, tax_category_map) + res = get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map) return columns, res @@ -22,10 +22,11 @@ def validate_filters(filters): frappe.throw(_("From Date must be before To Date")) -def get_result(filters, tds_docs, tds_accounts, tax_category_map): +def get_result(filters, tds_docs, tds_accounts, tax_category_map, journal_entry_party_map): supplier_map = get_supplier_pan_map() tax_rate_map = get_tax_rate_map(filters) gle_map = get_gle_map(tds_docs) + print(journal_entry_party_map) out = [] for name, details in gle_map.items(): @@ -38,6 +39,11 @@ def get_result(filters, tds_docs, tds_accounts, tax_category_map): posting_date = entry.posting_date voucher_type = entry.voucher_type + if voucher_type == "Journal Entry": + suppliers = journal_entry_party_map.get(name) + if suppliers: + supplier = suppliers[0] + if not tax_withholding_category: tax_withholding_category = supplier_map.get(supplier, {}).get("tax_withholding_category") rate = tax_rate_map.get(tax_withholding_category) @@ -176,6 +182,7 @@ def get_tds_docs(filters): journal_entries = [] tax_category_map = {} or_filters = {} + journal_entry_party_map = {} bank_accounts = frappe.get_all("Account", {"is_group": 0, "account_type": "Bank"}, pluck="name") tds_accounts = frappe.get_all( @@ -218,9 +225,24 @@ def get_tds_docs(filters): get_tax_category_map(payment_entries, "Payment Entry", tax_category_map) if journal_entries: + journal_entry_party_map = get_journal_entry_party_map(journal_entries) get_tax_category_map(journal_entries, "Journal Entry", tax_category_map) - return tds_documents, tds_accounts, tax_category_map + return tds_documents, tds_accounts, tax_category_map, journal_entry_party_map + + +def get_journal_entry_party_map(journal_entries): + journal_entry_party_map = {} + for d in frappe.db.get_all( + "Journal Entry Account", + {"parent": ("in", journal_entries), "party_type": "Supplier", "party": ("is", "set")}, + ["parent", "party"], + ): + if d.parent not in journal_entry_party_map: + journal_entry_party_map[d.parent] = [] + journal_entry_party_map[d.parent].append(d.party) + + return journal_entry_party_map def get_tax_category_map(vouchers, doctype, tax_category_map): diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index dd0ac75654..6bd08ad837 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -160,14 +160,12 @@ def get_rootwise_opening_balances(filters, report_type): if filters.project: additional_conditions += " and project = %(project)s" - if filters.finance_book: - fb_conditions = " AND finance_book = %(finance_book)s" - if filters.include_default_book_entries: - fb_conditions = ( - " AND (finance_book in (%(finance_book)s, %(company_fb)s, '') OR finance_book IS NULL)" - ) - - additional_conditions += fb_conditions + if filters.get("include_default_book_entries"): + additional_conditions += ( + " AND (finance_book in (%(finance_book)s, %(company_fb)s, '') OR finance_book IS NULL)" + ) + else: + additional_conditions += " AND (finance_book in (%(finance_book)s, '') OR finance_book IS NULL)" accounting_dimensions = get_accounting_dimensions(as_list=False) @@ -188,9 +186,9 @@ def get_rootwise_opening_balances(filters, report_type): filters[dimension.fieldname] = get_dimension_with_children( dimension.document_type, filters.get(dimension.fieldname) ) - additional_conditions += "and {0} in %({0})s".format(dimension.fieldname) + additional_conditions += " and {0} in %({0})s".format(dimension.fieldname) else: - additional_conditions += "and {0} in (%({0})s)".format(dimension.fieldname) + additional_conditions += " and {0} in %({0})s".format(dimension.fieldname) query_filters.update({dimension.fieldname: filters.get(dimension.fieldname)}) diff --git a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.js b/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.js deleted file mode 100644 index f0ba78c960..0000000000 --- a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.query_reports["Unpaid Expense Claim"] = { - "filters": [ - { - "fieldname": "employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee" - } - ] -} diff --git a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.json b/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.json deleted file mode 100644 index 966d5bb85f..0000000000 --- a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2017-01-04 16:26:18.309717", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 19:59:29.747039", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Unpaid Expense Claim", - "owner": "Administrator", - "ref_doctype": "Expense Claim", - "report_name": "Unpaid Expense Claim", - "report_type": "Script Report", - "roles": [ - { - "role": "HR Manager" - }, - { - "role": "Expense Approver" - }, - { - "role": "HR User" - } - ] -} \ No newline at end of file diff --git a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.py b/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.py deleted file mode 100644 index 62b4f63b3a..0000000000 --- a/erpnext/accounts/report/unpaid_expense_claim/unpaid_expense_claim.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - - -def execute(filters=None): - columns, data = [], [] - columns = get_columns() - data = get_unclaimed_expese_claims(filters) - return columns, data - - -def get_columns(): - return [ - _("Employee") + ":Link/Employee:120", - _("Employee Name") + "::120", - _("Expense Claim") + ":Link/Expense Claim:120", - _("Sanctioned Amount") + ":Currency:120", - _("Paid Amount") + ":Currency:120", - _("Outstanding Amount") + ":Currency:150", - ] - - -def get_unclaimed_expese_claims(filters): - cond = "1=1" - if filters.get("employee"): - cond = "ec.employee = %(employee)s" - - return frappe.db.sql( - """ - select - ec.employee, ec.employee_name, ec.name, ec.total_sanctioned_amount, ec.total_amount_reimbursed, - sum(gle.credit_in_account_currency - gle.debit_in_account_currency) as outstanding_amt - from - `tabExpense Claim` ec, `tabGL Entry` gle - where - gle.against_voucher_type = "Expense Claim" and gle.against_voucher = ec.name - and gle.party is not null and ec.docstatus = 1 and ec.is_paid = 0 and {cond} group by ec.name - having - outstanding_amt > 0 - """.format( - cond=cond - ), - filters, - as_list=1, - ) diff --git a/erpnext/accounts/test/test_reports.py b/erpnext/accounts/test/test_reports.py index 19fe74fffc..3f06c30adb 100644 --- a/erpnext/accounts/test/test_reports.py +++ b/erpnext/accounts/test/test_reports.py @@ -28,6 +28,7 @@ REPORT_FILTER_TEST_CASES: List[Tuple[ReportName, ReportFilters]] = [ ("Item-wise Sales Register", {}), ("Item-wise Purchase Register", {}), ("Sales Register", {}), + ("Sales Register", {"item_group": "All Item Groups"}), ("Purchase Register", {}), ( "Tax Detail", diff --git a/erpnext/accounts/test/test_utils.py b/erpnext/accounts/test/test_utils.py index 77c40bae2d..882cd694a3 100644 --- a/erpnext/accounts/test/test_utils.py +++ b/erpnext/accounts/test/test_utils.py @@ -62,8 +62,8 @@ class TestUtils(unittest.TestCase): stock_entry = {"item": item, "to_warehouse": "_Test Warehouse - _TC", "qty": 1, "rate": 10} se1 = make_stock_entry(posting_date="2022-01-01", **stock_entry) - se2 = make_stock_entry(posting_date="2022-02-01", **stock_entry) se3 = make_stock_entry(posting_date="2022-03-01", **stock_entry) + se2 = make_stock_entry(posting_date="2022-02-01", **stock_entry) for doc in (se1, se2, se3): vouchers.append((doc.doctype, doc.name)) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 405922e16e..9dafef74f4 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -3,21 +3,40 @@ from json import loads -from typing import List, Tuple +from typing import TYPE_CHECKING, List, Optional, Tuple import frappe import frappe.defaults -from frappe import _, throw +from frappe import _, qb, throw from frappe.model.meta import get_field_precision -from frappe.utils import cint, cstr, flt, formatdate, get_number_format_info, getdate, now, nowdate +from frappe.query_builder import AliasedQuery, Criterion, Table +from frappe.query_builder.functions import Sum +from frappe.query_builder.utils import DocType +from frappe.utils import ( + cint, + create_batch, + cstr, + flt, + formatdate, + get_number_format_info, + getdate, + now, + nowdate, +) +from pypika import Order +from pypika.terms import ExistsCriterion import erpnext # imported to enable erpnext.accounts.utils.get_account_currency from erpnext.accounts.doctype.account.account import get_account_currency # noqa +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_dimensions from erpnext.stock import get_warehouse_account_map from erpnext.stock.utils import get_stock_value_on +if TYPE_CHECKING: + from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import RepostItemValuation + class FiscalYearError(frappe.ValidationError): pass @@ -27,6 +46,9 @@ class PaymentEntryUnlinkError(frappe.ValidationError): pass +GL_REPOSTING_CHUNK = 100 + + @frappe.whitelist() def get_fiscal_year( date=None, fiscal_year=None, label="Date", verbose=1, company=None, as_dict=False @@ -41,37 +63,32 @@ def get_fiscal_years( if not fiscal_years: # if year start date is 2012-04-01, year end date should be 2013-03-31 (hence subdate) - cond = "" - if fiscal_year: - cond += " and fy.name = {0}".format(frappe.db.escape(fiscal_year)) - if company: - cond += """ - and (not exists (select name - from `tabFiscal Year Company` fyc - where fyc.parent = fy.name) - or exists(select company - from `tabFiscal Year Company` fyc - where fyc.parent = fy.name - and fyc.company=%(company)s) - ) - """ + FY = DocType("Fiscal Year") - fiscal_years = frappe.db.sql( - """ - select - fy.name, fy.year_start_date, fy.year_end_date - from - `tabFiscal Year` fy - where - disabled = 0 {0} - order by - fy.year_start_date desc""".format( - cond - ), - {"company": company}, - as_dict=True, + query = ( + frappe.qb.from_(FY) + .select(FY.name, FY.year_start_date, FY.year_end_date) + .where(FY.disabled == 0) ) + if fiscal_year: + query = query.where(FY.name == fiscal_year) + + if company: + FYC = DocType("Fiscal Year Company") + query = query.where( + ExistsCriterion(frappe.qb.from_(FYC).select(FYC.name).where(FYC.parent == FY.name)).negate() + | ExistsCriterion( + frappe.qb.from_(FYC) + .select(FYC.company) + .where(FYC.parent == FY.name) + .where(FYC.company == company) + ) + ) + + query = query.orderby(FY.year_start_date, Order.desc) + fiscal_years = query.run(as_dict=True) + frappe.cache().hset("fiscal_years", company, fiscal_years) if not transaction_date and not fiscal_year: @@ -403,7 +420,7 @@ def add_cc(args=None): return cc.name -def reconcile_against_document(args): +def reconcile_against_document(args): # nosemgrep """ Cancel PE or JV, Update against document, split if required and resubmit """ @@ -422,7 +439,8 @@ def reconcile_against_document(args): # cancel advance entry doc = frappe.get_doc(voucher_type, voucher_no) frappe.flags.ignore_party_validation = True - doc.make_gl_entries(cancel=1, adv_adj=1) + gl_map = doc.build_gl_map() + create_payment_ledger_entry(gl_map, cancel=1, adv_adj=1) for entry in entries: check_if_advance_entry_modified(entry) @@ -437,11 +455,14 @@ def reconcile_against_document(args): doc.save(ignore_permissions=True) # re-submit advance entry doc = frappe.get_doc(entry.voucher_type, entry.voucher_no) - doc.make_gl_entries(cancel=0, adv_adj=1) + gl_map = doc.build_gl_map() + create_payment_ledger_entry(gl_map, cancel=0, adv_adj=1) + frappe.flags.ignore_party_validation = False if entry.voucher_type in ("Payment Entry", "Journal Entry"): - doc.update_expense_claim() + if hasattr(doc, "update_expense_claim"): + doc.update_expense_claim() def check_if_advance_entry_modified(args): @@ -460,7 +481,7 @@ def check_if_advance_entry_modified(args): select t2.{dr_or_cr} from `tabJournal Entry` t1, `tabJournal Entry Account` t2 where t1.name = t2.parent and t2.account = %(account)s and t2.party_type = %(party_type)s and t2.party = %(party)s - and (t2.reference_type is null or t2.reference_type in ("", "Sales Order", "Purchase Order")) + and (t2.reference_type is null or t2.reference_type in ('', 'Sales Order', 'Purchase Order')) and t1.name = %(voucher_no)s and t2.name = %(voucher_detail_no)s and t1.docstatus=1 """.format( dr_or_cr=args.get("dr_or_cr") @@ -480,7 +501,7 @@ def check_if_advance_entry_modified(args): t1.name = t2.parent and t1.docstatus = 1 and t1.name = %(voucher_no)s and t2.name = %(voucher_detail_no)s and t1.party_type = %(party_type)s and t1.party = %(party)s and t1.{0} = %(account)s - and t2.reference_doctype in ("", "Sales Order", "Purchase Order") + and t2.reference_doctype in ('', 'Sales Order', 'Purchase Order') and t2.allocated_amount = %(unreconciled_amount)s """.format( party_account_field @@ -801,7 +822,11 @@ def get_held_invoices(party_type, party): return held_invoices -def get_outstanding_invoices(party_type, party, account, condition=None, filters=None): +def get_outstanding_invoices( + party_type, party, account, common_filter=None, min_outstanding=None, max_outstanding=None +): + + ple = qb.DocType("Payment Ledger Entry") outstanding_invoices = [] precision = frappe.get_precision("Sales Invoice", "outstanding_amount") or 2 @@ -814,76 +839,30 @@ def get_outstanding_invoices(party_type, party, account, condition=None, filters else: party_account_type = erpnext.get_party_account_type(party_type) - if party_account_type == "Receivable": - dr_or_cr = "debit_in_account_currency - credit_in_account_currency" - payment_dr_or_cr = "credit_in_account_currency - debit_in_account_currency" - else: - dr_or_cr = "credit_in_account_currency - debit_in_account_currency" - payment_dr_or_cr = "debit_in_account_currency - credit_in_account_currency" - held_invoices = get_held_invoices(party_type, party) - invoice_list = frappe.db.sql( - """ - select - voucher_no, voucher_type, posting_date, due_date, - ifnull(sum({dr_or_cr}), 0) as invoice_amount, - account_currency as currency - from - `tabGL Entry` - where - party_type = %(party_type)s and party = %(party)s - and account = %(account)s and {dr_or_cr} > 0 - and is_cancelled=0 - {condition} - and ((voucher_type = 'Journal Entry' - and (against_voucher = '' or against_voucher is null)) - or (voucher_type not in ('Journal Entry', 'Payment Entry'))) - group by voucher_type, voucher_no - order by posting_date, name""".format( - dr_or_cr=dr_or_cr, condition=condition or "" - ), - { - "party_type": party_type, - "party": party, - "account": account, - }, - as_dict=True, - ) + common_filter = common_filter or [] + common_filter.append(ple.account_type == party_account_type) + common_filter.append(ple.account == account) + common_filter.append(ple.party_type == party_type) + common_filter.append(ple.party == party) - payment_entries = frappe.db.sql( - """ - select against_voucher_type, against_voucher, - ifnull(sum({payment_dr_or_cr}), 0) as payment_amount - from `tabGL Entry` - where party_type = %(party_type)s and party = %(party)s - and account = %(account)s - and {payment_dr_or_cr} > 0 - and against_voucher is not null and against_voucher != '' - and is_cancelled=0 - group by against_voucher_type, against_voucher - """.format( - payment_dr_or_cr=payment_dr_or_cr - ), - {"party_type": party_type, "party": party, "account": account}, - as_dict=True, + ple_query = QueryPaymentLedger() + invoice_list = ple_query.get_voucher_outstandings( + common_filter=common_filter, + min_outstanding=min_outstanding, + max_outstanding=max_outstanding, + get_invoices=True, ) - pe_map = frappe._dict() - for d in payment_entries: - pe_map.setdefault((d.against_voucher_type, d.against_voucher), d.payment_amount) - for d in invoice_list: - payment_amount = pe_map.get((d.voucher_type, d.voucher_no), 0) - outstanding_amount = flt(d.invoice_amount - payment_amount, precision) + payment_amount = d.invoice_amount_in_account_currency - d.outstanding_in_account_currency + outstanding_amount = d.outstanding_in_account_currency if outstanding_amount > 0.5 / (10**precision): if ( - filters - and filters.get("outstanding_amt_greater_than") - and not ( - outstanding_amount >= filters.get("outstanding_amt_greater_than") - and outstanding_amount <= filters.get("outstanding_amt_less_than") - ) + min_outstanding + and max_outstanding + and not (outstanding_amount >= min_outstanding and outstanding_amount <= max_outstanding) ): continue @@ -894,7 +873,7 @@ def get_outstanding_invoices(party_type, party, account, condition=None, filters "voucher_no": d.voucher_no, "voucher_type": d.voucher_type, "posting_date": d.posting_date, - "invoice_amount": flt(d.invoice_amount), + "invoice_amount": flt(d.invoice_amount_in_account_currency), "payment_amount": payment_amount, "outstanding_amount": outstanding_amount, "due_date": d.due_date, @@ -1121,38 +1100,62 @@ def update_gl_entries_after( def repost_gle_for_stock_vouchers( - stock_vouchers, posting_date, company=None, warehouse_account=None + stock_vouchers: List[Tuple[str, str]], + posting_date: str, + company: Optional[str] = None, + warehouse_account=None, + repost_doc: Optional["RepostItemValuation"] = None, ): + + from erpnext.accounts.general_ledger import toggle_debit_credit_if_negative + if not stock_vouchers: return - def _delete_gl_entries(voucher_type, voucher_no): - frappe.db.sql( - """delete from `tabGL Entry` - where voucher_type=%s and voucher_no=%s""", - (voucher_type, voucher_no), - ) - - stock_vouchers = sort_stock_vouchers_by_posting_date(stock_vouchers) - if not warehouse_account: warehouse_account = get_warehouse_account_map(company) + stock_vouchers = sort_stock_vouchers_by_posting_date(stock_vouchers) + if repost_doc and repost_doc.gl_reposting_index: + # Restore progress + stock_vouchers = stock_vouchers[cint(repost_doc.gl_reposting_index) :] + precision = get_field_precision(frappe.get_meta("GL Entry").get_field("debit")) or 2 - gle = get_voucherwise_gl_entries(stock_vouchers, posting_date) - for voucher_type, voucher_no in stock_vouchers: - existing_gle = gle.get((voucher_type, voucher_no), []) - voucher_obj = frappe.get_cached_doc(voucher_type, voucher_no) - expected_gle = voucher_obj.get_gl_entries(warehouse_account) - if expected_gle: - if not existing_gle or not compare_existing_and_expected_gle( - existing_gle, expected_gle, precision - ): + for stock_vouchers_chunk in create_batch(stock_vouchers, GL_REPOSTING_CHUNK): + gle = get_voucherwise_gl_entries(stock_vouchers_chunk, posting_date) + + for voucher_type, voucher_no in stock_vouchers_chunk: + existing_gle = gle.get((voucher_type, voucher_no), []) + voucher_obj = frappe.get_doc(voucher_type, voucher_no) + # Some transactions post credit as negative debit, this is handled while posting GLE + # but while comparing we need to make sure it's flipped so comparisons are accurate + expected_gle = toggle_debit_credit_if_negative(voucher_obj.get_gl_entries(warehouse_account)) + if expected_gle: + if not existing_gle or not compare_existing_and_expected_gle( + existing_gle, expected_gle, precision + ): + _delete_gl_entries(voucher_type, voucher_no) + voucher_obj.make_gl_entries(gl_entries=expected_gle, from_repost=True) + else: _delete_gl_entries(voucher_type, voucher_no) - voucher_obj.make_gl_entries(gl_entries=expected_gle, from_repost=True) - else: - _delete_gl_entries(voucher_type, voucher_no) + + if not frappe.flags.in_test: + frappe.db.commit() + + if repost_doc: + repost_doc.db_set( + "gl_reposting_index", + cint(repost_doc.gl_reposting_index) + len(stock_vouchers_chunk), + ) + + +def _delete_gl_entries(voucher_type, voucher_no): + frappe.db.sql( + """delete from `tabGL Entry` + where voucher_type=%s and voucher_no=%s""", + (voucher_type, voucher_no), + ) def sort_stock_vouchers_by_posting_date( @@ -1166,6 +1169,9 @@ def sort_stock_vouchers_by_posting_date( .select(sle.voucher_type, sle.voucher_no, sle.posting_date, sle.posting_time, sle.creation) .where((sle.is_cancelled == 0) & (sle.voucher_no.isin(voucher_nos))) .groupby(sle.voucher_type, sle.voucher_no) + .orderby(sle.posting_date) + .orderby(sle.posting_time) + .orderby(sle.creation) ).run(as_dict=True) sorted_vouchers = [(sle.voucher_type, sle.voucher_no) for sle in sles] @@ -1345,3 +1351,330 @@ def check_and_delete_linked_reports(report): if icons: for icon in icons: frappe.delete_doc("Desktop Icon", icon) + + +def create_payment_ledger_entry( + gl_entries, cancel=0, adv_adj=0, update_outstanding="Yes", from_repost=0 +): + if gl_entries: + ple = None + + # companies + account = qb.DocType("Account") + companies = list(set([x.company for x in gl_entries])) + + # receivable/payable account + accounts_with_types = ( + qb.from_(account) + .select(account.name, account.account_type) + .where( + (account.account_type.isin(["Receivable", "Payable"]) & (account.company.isin(companies))) + ) + .run(as_dict=True) + ) + receivable_or_payable_accounts = [y.name for y in accounts_with_types] + + def get_account_type(account): + for entry in accounts_with_types: + if entry.name == account: + return entry.account_type + + dr_or_cr = 0 + account_type = None + for gle in gl_entries: + if gle.account in receivable_or_payable_accounts: + account_type = get_account_type(gle.account) + if account_type == "Receivable": + dr_or_cr = gle.debit - gle.credit + dr_or_cr_account_currency = gle.debit_in_account_currency - gle.credit_in_account_currency + elif account_type == "Payable": + dr_or_cr = gle.credit - gle.debit + dr_or_cr_account_currency = gle.credit_in_account_currency - gle.debit_in_account_currency + + if cancel: + dr_or_cr *= -1 + dr_or_cr_account_currency *= -1 + + ple = frappe.get_doc( + { + "doctype": "Payment Ledger Entry", + "posting_date": gle.posting_date, + "company": gle.company, + "account_type": account_type, + "account": gle.account, + "party_type": gle.party_type, + "party": gle.party, + "cost_center": gle.cost_center, + "finance_book": gle.finance_book, + "due_date": gle.due_date, + "voucher_type": gle.voucher_type, + "voucher_no": gle.voucher_no, + "against_voucher_type": gle.against_voucher_type + if gle.against_voucher_type + else gle.voucher_type, + "against_voucher_no": gle.against_voucher if gle.against_voucher else gle.voucher_no, + "account_currency": gle.account_currency, + "amount": dr_or_cr, + "amount_in_account_currency": dr_or_cr_account_currency, + "delinked": True if cancel else False, + } + ) + + dimensions_and_defaults = get_dimensions() + if dimensions_and_defaults: + for dimension in dimensions_and_defaults[0]: + ple.set(dimension.fieldname, gle.get(dimension.fieldname)) + + if cancel: + delink_original_entry(ple) + ple.flags.ignore_permissions = 1 + ple.flags.adv_adj = adv_adj + ple.flags.from_repost = from_repost + ple.flags.update_outstanding = update_outstanding + ple.submit() + + +def update_voucher_outstanding(voucher_type, voucher_no, account, party_type, party): + ple = frappe.qb.DocType("Payment Ledger Entry") + vouchers = [frappe._dict({"voucher_type": voucher_type, "voucher_no": voucher_no})] + common_filter = [] + if account: + common_filter.append(ple.account == account) + + if party_type: + common_filter.append(ple.party_type == party_type) + + if party: + common_filter.append(ple.party == party) + + ple_query = QueryPaymentLedger() + + # on cancellation outstanding can be an empty list + voucher_outstanding = ple_query.get_voucher_outstandings(vouchers, common_filter=common_filter) + if voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"] and voucher_outstanding: + outstanding = voucher_outstanding[0] + ref_doc = frappe.get_doc(voucher_type, voucher_no) + + # Didn't use db_set for optimisation purpose + ref_doc.outstanding_amount = outstanding["outstanding_in_account_currency"] + frappe.db.set_value( + voucher_type, voucher_no, "outstanding_amount", outstanding["outstanding_in_account_currency"] + ) + + ref_doc.set_status(update=True) + + +def delink_original_entry(pl_entry): + if pl_entry: + ple = qb.DocType("Payment Ledger Entry") + query = ( + qb.update(ple) + .set(ple.delinked, True) + .set(ple.modified, now()) + .set(ple.modified_by, frappe.session.user) + .where( + (ple.company == pl_entry.company) + & (ple.account_type == pl_entry.account_type) + & (ple.account == pl_entry.account) + & (ple.party_type == pl_entry.party_type) + & (ple.party == pl_entry.party) + & (ple.voucher_type == pl_entry.voucher_type) + & (ple.voucher_no == pl_entry.voucher_no) + & (ple.against_voucher_type == pl_entry.against_voucher_type) + & (ple.against_voucher_no == pl_entry.against_voucher_no) + ) + ) + query.run() + + +class QueryPaymentLedger(object): + """ + Helper Class for Querying Payment Ledger Entry + """ + + def __init__(self): + self.ple = qb.DocType("Payment Ledger Entry") + + # query result + self.voucher_outstandings = [] + + # query filters + self.vouchers = [] + self.common_filter = [] + self.min_outstanding = None + self.max_outstanding = None + + def reset(self): + # clear filters + self.vouchers.clear() + self.common_filter.clear() + self.min_outstanding = self.max_outstanding = None + + # clear result + self.voucher_outstandings.clear() + + def query_for_outstanding(self): + """ + Database query to fetch voucher amount and voucher outstanding using Common Table Expression + """ + + ple = self.ple + + filter_on_voucher_no = [] + filter_on_against_voucher_no = [] + if self.vouchers: + voucher_types = set([x.voucher_type for x in self.vouchers]) + voucher_nos = set([x.voucher_no for x in self.vouchers]) + + filter_on_voucher_no.append(ple.voucher_type.isin(voucher_types)) + filter_on_voucher_no.append(ple.voucher_no.isin(voucher_nos)) + + filter_on_against_voucher_no.append(ple.against_voucher_type.isin(voucher_types)) + filter_on_against_voucher_no.append(ple.against_voucher_no.isin(voucher_nos)) + + # build outstanding amount filter + filter_on_outstanding_amount = [] + if self.min_outstanding: + if self.min_outstanding > 0: + filter_on_outstanding_amount.append( + Table("outstanding").amount_in_account_currency >= self.min_outstanding + ) + else: + filter_on_outstanding_amount.append( + Table("outstanding").amount_in_account_currency <= self.min_outstanding + ) + if self.max_outstanding: + if self.max_outstanding > 0: + filter_on_outstanding_amount.append( + Table("outstanding").amount_in_account_currency <= self.max_outstanding + ) + else: + filter_on_outstanding_amount.append( + Table("outstanding").amount_in_account_currency >= self.max_outstanding + ) + + # build query for voucher amount + query_voucher_amount = ( + qb.from_(ple) + .select( + ple.account, + ple.voucher_type, + ple.voucher_no, + ple.party_type, + ple.party, + ple.posting_date, + ple.due_date, + ple.account_currency.as_("currency"), + Sum(ple.amount).as_("amount"), + Sum(ple.amount_in_account_currency).as_("amount_in_account_currency"), + ) + .where(ple.delinked == 0) + .where(Criterion.all(filter_on_voucher_no)) + .where(Criterion.all(self.common_filter)) + .groupby(ple.voucher_type, ple.voucher_no, ple.party_type, ple.party) + ) + + # build query for voucher outstanding + query_voucher_outstanding = ( + qb.from_(ple) + .select( + ple.account, + ple.against_voucher_type.as_("voucher_type"), + ple.against_voucher_no.as_("voucher_no"), + ple.party_type, + ple.party, + ple.posting_date, + ple.due_date, + ple.account_currency.as_("currency"), + Sum(ple.amount).as_("amount"), + Sum(ple.amount_in_account_currency).as_("amount_in_account_currency"), + ) + .where(ple.delinked == 0) + .where(Criterion.all(filter_on_against_voucher_no)) + .where(Criterion.all(self.common_filter)) + .groupby(ple.against_voucher_type, ple.against_voucher_no, ple.party_type, ple.party) + ) + + # build CTE for combining voucher amount and outstanding + self.cte_query_voucher_amount_and_outstanding = ( + qb.with_(query_voucher_amount, "vouchers") + .with_(query_voucher_outstanding, "outstanding") + .from_(AliasedQuery("vouchers")) + .left_join(AliasedQuery("outstanding")) + .on( + (AliasedQuery("vouchers").account == AliasedQuery("outstanding").account) + & (AliasedQuery("vouchers").voucher_type == AliasedQuery("outstanding").voucher_type) + & (AliasedQuery("vouchers").voucher_no == AliasedQuery("outstanding").voucher_no) + & (AliasedQuery("vouchers").party_type == AliasedQuery("outstanding").party_type) + & (AliasedQuery("vouchers").party == AliasedQuery("outstanding").party) + ) + .select( + Table("vouchers").account, + Table("vouchers").voucher_type, + Table("vouchers").voucher_no, + Table("vouchers").party_type, + Table("vouchers").party, + Table("vouchers").posting_date, + Table("vouchers").amount.as_("invoice_amount"), + Table("vouchers").amount_in_account_currency.as_("invoice_amount_in_account_currency"), + Table("outstanding").amount.as_("outstanding"), + Table("outstanding").amount_in_account_currency.as_("outstanding_in_account_currency"), + (Table("vouchers").amount - Table("outstanding").amount).as_("paid_amount"), + ( + Table("vouchers").amount_in_account_currency - Table("outstanding").amount_in_account_currency + ).as_("paid_amount_in_account_currency"), + Table("vouchers").due_date, + Table("vouchers").currency, + ) + .where(Criterion.all(filter_on_outstanding_amount)) + ) + + # build CTE filter + # only fetch invoices + if self.get_invoices: + self.cte_query_voucher_amount_and_outstanding = ( + self.cte_query_voucher_amount_and_outstanding.having( + qb.Field("outstanding_in_account_currency") > 0 + ) + ) + # only fetch payments + elif self.get_payments: + self.cte_query_voucher_amount_and_outstanding = ( + self.cte_query_voucher_amount_and_outstanding.having( + qb.Field("outstanding_in_account_currency") < 0 + ) + ) + + # execute SQL + self.voucher_outstandings = self.cte_query_voucher_amount_and_outstanding.run(as_dict=True) + + def get_voucher_outstandings( + self, + vouchers=None, + common_filter=None, + min_outstanding=None, + max_outstanding=None, + get_payments=False, + get_invoices=False, + ): + """ + Fetch voucher amount and outstanding amount from Payment Ledger using Database CTE + + vouchers - dict of vouchers to get + common_filter - array of criterions + min_outstanding - filter on minimum total outstanding amount + max_outstanding - filter on maximum total outstanding amount + get_invoices - only fetch vouchers(ledger entries with +ve outstanding) + get_payments - only fetch payments(ledger entries with -ve outstanding) + """ + + self.reset() + self.vouchers = vouchers + self.common_filter = common_filter or [] + self.min_outstanding = min_outstanding + self.max_outstanding = max_outstanding + self.get_payments = get_payments + self.get_invoices = get_invoices + self.query_for_outstanding() + + return self.voucher_outstandings diff --git a/erpnext/accounts/workspace/accounting/accounting.json b/erpnext/accounts/workspace/accounting/accounting.json index a456c7fb57..b0c112494d 100644 --- a/erpnext/accounts/workspace/accounting/accounting.json +++ b/erpnext/accounts/workspace/accounting/accounting.json @@ -5,7 +5,7 @@ "label": "Profit and Loss" } ], - "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Accounts\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Profit and Loss\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Chart of Accounts\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Purchase Invoice\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Journal Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payment Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Accounts Receivable\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"General Ledger\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Trial Balance\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounting Masters\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"General Ledger\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounts Receivable\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounts Payable\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Financial Statements\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Multi Currency\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Bank Statement\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Subscription Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Goods and Services Tax (GST India)\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Share Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Cost Center and Budgeting\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Opening and Closing\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Taxes\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Profitability\",\"col\":4}}]", + "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Accounts\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Profit and Loss\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Chart of Accounts\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Sales Invoice\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Purchase Invoice\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Journal Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payment Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Accounts Receivable\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"General Ledger\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Trial Balance\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounting Masters\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"General Ledger\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounts Receivable\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Accounts Payable\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Financial Statements\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Multi Currency\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Bank Statement\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Subscription Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Share Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Cost Center and Budgeting\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Opening and Closing\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Taxes\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Profitability\",\"col\":4}}]", "creation": "2020-03-02 15:41:59.515192", "docstatus": 0, "doctype": "Workspace", @@ -504,18 +504,6 @@ "onboard": 0, "type": "Link" }, - { - "dependencies": "GL Entry", - "hidden": 0, - "is_query_report": 1, - "label": "DATEV Export", - "link_count": 0, - "link_to": "DATEV", - "link_type": "Report", - "onboard": 0, - "only_for": "Germany", - "type": "Link" - }, { "dependencies": "GL Entry", "hidden": 0, @@ -789,147 +777,6 @@ "onboard": 0, "type": "Link" }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Goods and Services Tax (GST India)", - "link_count": 0, - "onboard": 0, - "only_for": "India", - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "GST Settings", - "link_count": 0, - "link_to": "GST Settings", - "link_type": "DocType", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "GST HSN Code", - "link_count": 0, - "link_to": "GST HSN Code", - "link_type": "DocType", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GSTR-1", - "link_count": 0, - "link_to": "GSTR-1", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GSTR-2", - "link_count": 0, - "link_to": "GSTR-2", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "GSTR 3B Report", - "link_count": 0, - "link_to": "GSTR 3B Report", - "link_type": "DocType", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GST Sales Register", - "link_count": 0, - "link_to": "GST Sales Register", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GST Purchase Register", - "link_count": 0, - "link_to": "GST Purchase Register", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GST Itemised Sales Register", - "link_count": 0, - "link_to": "GST Itemised Sales Register", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 1, - "label": "GST Itemised Purchase Register", - "link_count": 0, - "link_to": "GST Itemised Purchase Register", - "link_type": "Report", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "C-Form", - "link_count": 0, - "link_to": "C-Form", - "link_type": "DocType", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Lower Deduction Certificate", - "link_count": 0, - "link_to": "Lower Deduction Certificate", - "link_type": "DocType", - "onboard": 0, - "only_for": "India", - "type": "Link" - }, { "hidden": 0, "is_query_report": 0, @@ -1024,16 +871,16 @@ "type": "Link" }, { - "dependencies": "Cost Center", - "hidden": 0, - "is_query_report": 0, - "label": "Cost Center Allocation", - "link_count": 0, - "link_to": "Cost Center Allocation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, + "dependencies": "Cost Center", + "hidden": 0, + "is_query_report": 0, + "label": "Cost Center Allocation", + "link_count": 0, + "link_to": "Cost Center Allocation", + "link_type": "DocType", + "onboard": 0, + "type": "Link" + }, { "dependencies": "Cost Center", "hidden": 0, @@ -1171,6 +1018,17 @@ "onboard": 0, "type": "Link" }, + { + "hidden": 0, + "is_query_report": 0, + "label": "Lower Deduction Certificate", + "link_count": 0, + "link_to": "Lower Deduction Certificate", + "link_type": "DocType", + "onboard": 0, + "only_for": "India", + "type": "Link" + }, { "hidden": 0, "is_query_report": 0, @@ -1235,13 +1093,14 @@ "type": "Link" } ], - "modified": "2022-01-13 17:25:09.835345", + "modified": "2022-06-24 05:41:09.236458", "modified_by": "Administrator", "module": "Accounts", "name": "Accounting", "owner": "Administrator", "parent_page": "", "public": 1, + "quick_lists": [], "restrict_to_domain": "", "roles": [], "sequence_id": 2.0, diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index 6e6bbf1cd2..991df4eada 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -40,7 +40,6 @@ "purchase_date", "section_break_23", "calculate_depreciation", - "allow_monthly_depreciation", "column_break_33", "opening_accumulated_depreciation", "number_of_depreciations_booked", @@ -456,13 +455,6 @@ "fieldname": "dimension_col_break", "fieldtype": "Column Break" }, - { - "default": "0", - "depends_on": "calculate_depreciation", - "fieldname": "allow_monthly_depreciation", - "fieldtype": "Check", - "label": "Allow Monthly Depreciation" - }, { "collapsible": 1, "collapsible_depends_on": "is_existing_asset", @@ -518,7 +510,7 @@ "link_fieldname": "asset" } ], - "modified": "2022-01-30 20:19:24.680027", + "modified": "2022-07-20 10:15:12.887372", "modified_by": "Administrator", "module": "Assets", "name": "Asset", diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 257488dfc3..a22d70dd63 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -252,6 +252,7 @@ class Asset(AccountsController): number_of_pending_depreciations += 1 skip_row = False + should_get_last_day = is_last_day_of_the_month(finance_book.depreciation_start_date) for n in range(start[finance_book.idx - 1], number_of_pending_depreciations): # If depreciation is already completed (for double declining balance) @@ -265,6 +266,9 @@ class Asset(AccountsController): finance_book.depreciation_start_date, n * cint(finance_book.frequency_of_depreciation) ) + if should_get_last_day: + schedule_date = get_last_day(schedule_date) + # schedule date will be a year later from start date # so monthly schedule date is calculated by removing 11 months from it monthly_schedule_date = add_months(schedule_date, -finance_book.frequency_of_depreciation + 1) @@ -339,51 +343,13 @@ class Asset(AccountsController): skip_row = True if depreciation_amount > 0: - # With monthly depreciation, each depreciation is divided by months remaining until next date - if self.allow_monthly_depreciation: - # month range is 1 to 12 - # In pro rata case, for first and last depreciation, month range would be different - month_range = ( - months - if (has_pro_rata and n == 0) - or (has_pro_rata and n == cint(number_of_pending_depreciations) - 1) - else finance_book.frequency_of_depreciation - ) - - for r in range(month_range): - if has_pro_rata and n == 0: - # For first entry of monthly depr - if r == 0: - days_until_first_depr = date_diff(monthly_schedule_date, self.available_for_use_date) - per_day_amt = depreciation_amount / days - depreciation_amount_for_current_month = per_day_amt * days_until_first_depr - depreciation_amount -= depreciation_amount_for_current_month - date = monthly_schedule_date - amount = depreciation_amount_for_current_month - else: - date = add_months(monthly_schedule_date, r) - amount = depreciation_amount / (month_range - 1) - elif (has_pro_rata and n == cint(number_of_pending_depreciations) - 1) and r == cint( - month_range - ) - 1: - # For last entry of monthly depr - date = last_schedule_date - amount = depreciation_amount / month_range - else: - date = add_months(monthly_schedule_date, r) - amount = depreciation_amount / month_range - - self._add_depreciation_row( - date, amount, finance_book.depreciation_method, finance_book.finance_book, finance_book.idx - ) - else: - self._add_depreciation_row( - schedule_date, - depreciation_amount, - finance_book.depreciation_method, - finance_book.finance_book, - finance_book.idx, - ) + self._add_depreciation_row( + schedule_date, + depreciation_amount, + finance_book.depreciation_method, + finance_book.finance_book, + finance_book.idx, + ) def _add_depreciation_row( self, schedule_date, depreciation_amount, depreciation_method, finance_book, finance_book_id @@ -849,16 +815,9 @@ class Asset(AccountsController): if args.get("rate_of_depreciation") and on_validate: return args.get("rate_of_depreciation") - no_of_years = ( - flt(args.get("total_number_of_depreciations") * flt(args.get("frequency_of_depreciation"))) - / 12 - ) value = flt(args.get("expected_value_after_useful_life")) / flt(self.gross_purchase_amount) - - # square root of flt(salvage_value) / flt(asset_cost) - depreciation_rate = math.pow(value, 1.0 / flt(no_of_years, 2)) - - return 100 * (1 - flt(depreciation_rate, float_precision)) + depreciation_rate = math.pow(value, 1.0 / flt(args.get("total_number_of_depreciations"), 2)) + return flt((100 * (1 - depreciation_rate)), float_precision) def get_pro_rata_amt(self, row, depreciation_amount, from_date, to_date): days = date_diff(to_date, from_date) @@ -1105,9 +1064,18 @@ def is_cwip_accounting_enabled(asset_category): def get_total_days(date, frequency): period_start_date = add_months(date, cint(frequency) * -1) + if is_last_day_of_the_month(date): + period_start_date = get_last_day(period_start_date) + return date_diff(date, period_start_date) +def is_last_day_of_the_month(date): + last_day_of_the_month = get_last_day(date) + + return getdate(last_day_of_the_month) == getdate(date) + + @erpnext.allow_regional def get_depreciation_amount(asset, depreciable_value, row): if row.depreciation_method in ("Straight Line", "Manual"): diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index e759ad0719..34d374c9e8 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -707,35 +707,26 @@ class TestDepreciationMethods(AssetSetup): self.assertEqual(schedules, expected_schedules) - def test_discounted_wdv_depreciation_rate_for_indian_region(self): - # set indian company - company_flag = frappe.flags.company - frappe.flags.company = "_Test Company" - - finance_book = frappe.new_doc("Finance Book") - finance_book.finance_book_name = "Income Tax" - finance_book.for_income_tax = 1 - finance_book.insert(ignore_if_duplicate=True) - + def test_monthly_depreciation_by_wdv_method(self): asset = create_asset( calculate_depreciation=1, - available_for_use_date="2030-07-12", - purchase_date="2030-01-01", - finance_book=finance_book.name, + available_for_use_date="2022-02-15", + purchase_date="2022-02-15", depreciation_method="Written Down Value", - expected_value_after_useful_life=12500, - depreciation_start_date="2030-12-31", - total_number_of_depreciations=3, - frequency_of_depreciation=12, + gross_purchase_amount=10000, + expected_value_after_useful_life=5000, + depreciation_start_date="2022-02-28", + total_number_of_depreciations=5, + frequency_of_depreciation=1, ) - self.assertEqual(asset.finance_books[0].rate_of_depreciation, 50.0) - expected_schedules = [ - ["2030-12-31", 11849.32, 11849.32], - ["2031-12-31", 44075.34, 55924.66], - ["2032-12-31", 22037.67, 77962.33], - ["2033-07-12", 9537.67, 87500.0], + ["2022-02-28", 647.25, 647.25], + ["2022-03-31", 1210.71, 1857.96], + ["2022-04-30", 1053.99, 2911.95], + ["2022-05-31", 917.55, 3829.5], + ["2022-06-30", 798.77, 4628.27], + ["2022-07-15", 371.73, 5000.0], ] schedules = [ @@ -746,12 +737,8 @@ class TestDepreciationMethods(AssetSetup): ] for d in asset.get("schedules") ] - self.assertEqual(schedules, expected_schedules) - # reset indian company - frappe.flags.company = company_flag - class TestDepreciationBasics(AssetSetup): def test_depreciation_without_pro_rata(self): @@ -838,7 +825,7 @@ class TestDepreciationBasics(AssetSetup): expected_values = [["2020-12-31", 30000.0], ["2021-12-31", 30000.0], ["2022-12-31", 30000.0]] for i, schedule in enumerate(asset.schedules): - self.assertEqual(expected_values[i][0], schedule.schedule_date) + self.assertEqual(getdate(expected_values[i][0]), schedule.schedule_date) self.assertEqual(expected_values[i][1], schedule.depreciation_amount) def test_set_accumulated_depreciation(self): @@ -1333,6 +1320,32 @@ class TestDepreciationBasics(AssetSetup): asset.cost_center = "Main - _TC" asset.submit() + def test_depreciation_on_final_day_of_the_month(self): + """Tests if final day of the month is picked each time, if the depreciation start date is the last day of the month.""" + + asset = create_asset( + item_code="Macbook Pro", + calculate_depreciation=1, + purchase_date="2020-01-30", + available_for_use_date="2020-02-15", + depreciation_start_date="2020-02-29", + frequency_of_depreciation=1, + total_number_of_depreciations=5, + submit=1, + ) + + expected_dates = [ + "2020-02-29", + "2020-03-31", + "2020-04-30", + "2020-05-31", + "2020-06-30", + "2020-07-15", + ] + + for i, schedule in enumerate(asset.schedules): + self.assertEqual(getdate(expected_dates[i]), getdate(schedule.schedule_date)) + def create_asset_data(): if not frappe.db.exists("Asset Category", "Computers"): diff --git a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py index e603d34626..0028d84508 100644 --- a/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py +++ b/erpnext/assets/doctype/asset_maintenance/asset_maintenance.py @@ -47,17 +47,19 @@ def assign_tasks(asset_maintenance_name, assign_to_member, maintenance_task, nex team_member = frappe.db.get_value("User", assign_to_member, "email") args = { "doctype": "Asset Maintenance", - "assign_to": [team_member], + "assign_to": team_member, "name": asset_maintenance_name, "description": maintenance_task, "date": next_due_date, } if not frappe.db.sql( """select owner from `tabToDo` - where reference_type=%(doctype)s and reference_name=%(name)s and status="Open" + where reference_type=%(doctype)s and reference_name=%(name)s and status='Open' and owner=%(assign_to)s""", args, ): + # assign_to function expects a list + args["assign_to"] = [args["assign_to"]] assign_to.add(args) diff --git a/erpnext/assets/doctype/asset_movement/test_asset_movement.py b/erpnext/assets/doctype/asset_movement/test_asset_movement.py index a5fe52cefa..72c05752c5 100644 --- a/erpnext/assets/doctype/asset_movement/test_asset_movement.py +++ b/erpnext/assets/doctype/asset_movement/test_asset_movement.py @@ -7,7 +7,7 @@ import frappe from frappe.utils import now from erpnext.assets.doctype.asset.test_asset import create_asset_data -from erpnext.hr.doctype.employee.test_employee import make_employee +from erpnext.setup.doctype.employee.test_employee import make_employee from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py index 20865e8ddc..59ab6a910d 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -12,9 +12,6 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( ) from erpnext.assets.doctype.asset.asset import get_depreciation_amount from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts -from erpnext.regional.india.utils import ( - get_depreciation_amount as get_depreciation_amount_for_india, -) class AssetValueAdjustment(Document): @@ -133,10 +130,7 @@ class AssetValueAdjustment(Document): depreciation_amount = days * rate_per_day from_date = data.schedule_date else: - if country == "India": - depreciation_amount = get_depreciation_amount_for_india(asset, value_after_depreciation, d) - else: - depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, d) + depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, d) if depreciation_amount: value_after_depreciation -= flt(depreciation_amount) diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.json b/erpnext/buying/doctype/buying_settings/buying_settings.json index 89a9448716..6c18a4650b 100644 --- a/erpnext/buying/doctype/buying_settings/buying_settings.json +++ b/erpnext/buying/doctype/buying_settings/buying_settings.json @@ -148,7 +148,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2022-04-14 15:56:42.340223", + "modified": "2022-05-31 19:40:26.103909", "modified_by": "Administrator", "module": "Buying", "name": "Buying Settings", @@ -162,6 +162,16 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "role": "Purchase Manager", + "share": 1, + "write": 1 } ], "sort_field": "modified", diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.py b/erpnext/buying/doctype/buying_settings/buying_settings.py index c52b59e4c0..7b18cdbedc 100644 --- a/erpnext/buying/doctype/buying_settings/buying_settings.py +++ b/erpnext/buying/doctype/buying_settings/buying_settings.py @@ -18,7 +18,7 @@ class BuyingSettings(Document): for key in ["supplier_group", "supp_master_name", "maintain_same_rate", "buying_price_list"]: frappe.db.set_default(key, self.get(key, "")) - from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series + from erpnext.utilities.naming import set_by_naming_series set_by_naming_series( "Supplier", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index c9e67987c6..fbb42fe2f6 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -8,15 +8,17 @@ frappe.provide("erpnext.accounts.dimensions"); frappe.ui.form.on("Purchase Order", { setup: function(frm) { - frm.set_query("reserve_warehouse", "supplied_items", function() { - return { - filters: { - "company": frm.doc.company, - "name": ['!=', frm.doc.supplier_warehouse], - "is_group": 0 + if (frm.doc.is_old_subcontracting_flow) { + frm.set_query("reserve_warehouse", "supplied_items", function() { + return { + filters: { + "company": frm.doc.company, + "name": ['!=', frm.doc.supplier_warehouse], + "is_group": 0 + } } - } - }); + }); + } frm.set_indicator_formatter('item_code', function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" }) @@ -28,35 +30,32 @@ frappe.ui.form.on("Purchase Order", { } }); + frm.set_query("fg_item", "items", function() { + return { + filters: { + 'is_sub_contracted_item': 1, + 'default_bom': ['!=', ''] + } + } + }); }, company: function(frm) { erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); }, - onload: function(frm) { - set_schedule_date(frm); - if (!frm.doc.transaction_date){ - frm.set_value('transaction_date', frappe.datetime.get_today()) - } - - erpnext.queries.setup_queries(frm, "Warehouse", function() { - return erpnext.queries.warehouse(frm.doc); - }); - - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); - }, - - apply_tds: function(frm) { - if (!frm.doc.apply_tds) { - frm.set_value("tax_withholding_category", ''); - } else { - frm.set_value("tax_withholding_category", frm.supplier_tds); - } - }, - refresh: function(frm) { - frm.trigger('get_materials_from_supplier'); + if(frm.doc.is_old_subcontracting_flow) { + frm.trigger('get_materials_from_supplier'); + + $('a.grey-link').each(function () { + var id = $(this).children(':first-child').attr('data-label'); + if (id == 'Duplicate') { + $(this).remove(); + return false; + } + }); + } }, get_materials_from_supplier: function(frm) { @@ -73,10 +72,14 @@ frappe.ui.form.on("Purchase Order", { if (po_details && po_details.length) { frm.add_custom_button(__('Return of Components'), () => { frm.call({ - method: 'erpnext.buying.doctype.purchase_order.purchase_order.get_materials_from_supplier', + method: 'erpnext.controllers.subcontracting_controller.get_materials_from_supplier', freeze: true, freeze_message: __('Creating Stock Entry'), - args: { purchase_order: frm.doc.name, po_details: po_details }, + args: { + subcontract_order: frm.doc.name, + rm_details: po_details, + order_doctype: cur_frm.doc.doctype + }, callback: function(r) { if (r && r.message) { const doc = frappe.model.sync(r.message); @@ -86,7 +89,26 @@ frappe.ui.form.on("Purchase Order", { }); }, __('Create')); } - } + }, + + onload: function(frm) { + set_schedule_date(frm); + if (!frm.doc.transaction_date){ + frm.set_value('transaction_date', frappe.datetime.get_today()) + } + + erpnext.queries.setup_queries(frm, "Warehouse", function() { + return erpnext.queries.warehouse(frm.doc); + }); + }, + + apply_tds: function(frm) { + if (!frm.doc.apply_tds) { + frm.set_value("tax_withholding_category", ''); + } else { + frm.set_value("tax_withholding_category", frm.supplier_tds); + } + }, }); frappe.ui.form.on("Purchase Order Item", { @@ -99,6 +121,16 @@ frappe.ui.form.on("Purchase Order Item", { set_schedule_date(frm); } } + }, + + qty: function(frm, cdt, cdn) { + if (frm.doc.is_subcontracted && !frm.doc.is_old_subcontracting_flow) { + var row = locals[cdt][cdn]; + + if (row.qty) { + row.fg_item_qty = row.qty; + } + } } }); @@ -107,12 +139,12 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e this.frm.custom_make_buttons = { 'Purchase Receipt': 'Purchase Receipt', 'Purchase Invoice': 'Purchase Invoice', - 'Stock Entry': 'Material to Supplier', 'Payment Entry': 'Payment', + 'Subcontracting Order': 'Subcontracting Order', + 'Stock Entry': 'Material to Supplier' } super.setup(); - } refresh(doc, cdt, cdn) { @@ -144,14 +176,17 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e if(!in_list(["Closed", "Delivered"], doc.status)) { if(this.frm.doc.status !== 'Closed' && flt(this.frm.doc.per_received) < 100 && flt(this.frm.doc.per_billed) < 100) { - this.frm.add_custom_button(__('Update Items'), () => { - erpnext.utils.update_child_items({ - frm: this.frm, - child_docname: "items", - child_doctype: "Purchase Order Detail", - cannot_add_row: false, - }) - }); + // Don't add Update Items button if the PO is following the new subcontracting flow. + if (!(this.frm.doc.is_subcontracted && !this.frm.doc.is_old_subcontracting_flow)) { + this.frm.add_custom_button(__('Update Items'), () => { + erpnext.utils.update_child_items({ + frm: this.frm, + child_docname: "items", + child_doctype: "Purchase Order Detail", + cannot_add_row: false, + }) + }); + } } if (this.frm.has_perm("submit")) { if(flt(doc.per_billed, 6) < 100 || flt(doc.per_received, 6) < 100) { @@ -179,9 +214,15 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e if (doc.status != "On Hold") { if(flt(doc.per_received) < 100 && allow_receipt) { cur_frm.add_custom_button(__('Purchase Receipt'), this.make_purchase_receipt, __('Create')); - if(doc.is_subcontracted && me.has_unsupplied_items()) { - cur_frm.add_custom_button(__('Material to Supplier'), - function() { me.make_stock_entry(); }, __("Transfer")); + if (doc.is_subcontracted) { + if (doc.is_old_subcontracting_flow) { + if (me.has_unsupplied_items()) { + cur_frm.add_custom_button(__('Material to Supplier'), function() { me.make_stock_entry(); }, __("Transfer")); + } + } + else { + cur_frm.add_custom_button(__('Subcontracting Order'), this.make_subcontracting_order, __('Create')); + } } } if(flt(doc.per_billed) < 100) @@ -372,10 +413,11 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e _make_rm_stock_entry(rm_items) { frappe.call({ - method:"erpnext.buying.doctype.purchase_order.purchase_order.make_rm_stock_entry", + method:"erpnext.controllers.subcontracting_controller.make_rm_stock_entry", args: { - purchase_order: cur_frm.doc.name, - rm_items: rm_items + subcontract_order: cur_frm.doc.name, + rm_items: rm_items, + order_doctype: cur_frm.doc.doctype } , callback: function(r) { @@ -407,6 +449,14 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e }) } + make_subcontracting_order() { + frappe.model.open_mapped_doc({ + method: "erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order", + frm: cur_frm, + freeze_message: __("Creating Subcontracting Order ...") + }) + } + add_from_mappers() { var me = this; this.frm.add_custom_button(__('Material Request'), @@ -427,7 +477,7 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends e company: me.frm.doc.company }, allow_child_item_selection: true, - child_fielname: "items", + child_fieldname: "items", child_columns: ["item_code", "qty"] }) }, __("Get Items From")); @@ -615,15 +665,17 @@ cur_frm.fields_dict['items'].grid.get_field('project').get_query = function(doc, } } -cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt, cdn) { - var d = locals[cdt][cdn] - return { - filters: [ - ['BOM', 'item', '=', d.item_code], - ['BOM', 'is_active', '=', '1'], - ['BOM', 'docstatus', '=', '1'], - ['BOM', 'company', '=', doc.company] - ] +if (cur_frm.doc.is_old_subcontracting_flow) { + cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt, cdn) { + var d = locals[cdt][cdn] + return { + filters: [ + ['BOM', 'item', '=', d.item_code], + ['BOM', 'is_active', '=', '1'], + ['BOM', 'docstatus', '=', '1'], + ['BOM', 'company', '=', doc.company] + ] + } } } @@ -636,7 +688,7 @@ function set_schedule_date(frm) { frappe.provide("erpnext.buying"); frappe.ui.form.on("Purchase Order", "is_subcontracted", function(frm) { - if (frm.doc.is_subcontracted) { + if (frm.doc.is_old_subcontracting_flow) { erpnext.buying.get_default_bom(frm); } -}); +}); \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index b365a836cd..aa50487d78 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -16,6 +16,8 @@ "supplier_name", "apply_tds", "tax_withholding_category", + "is_subcontracted", + "supplier_warehouse", "column_break1", "company", "transaction_date", @@ -55,10 +57,7 @@ "price_list_currency", "plc_conversion_rate", "ignore_pricing_rule", - "sec_warehouse", - "is_subcontracted", - "col_break_warehouse", - "supplier_warehouse", + "section_break_45", "before_items_section", "scan_barcode", "items_col_break", @@ -142,7 +141,8 @@ "party_account_currency", "is_internal_supplier", "represents_company", - "inter_company_order_reference" + "inter_company_order_reference", + "is_old_subcontracting_flow" ], "fields": [ { @@ -158,7 +158,8 @@ "hidden": 1, "label": "Title", "no_copy": 1, - "print_hide": 1 + "print_hide": 1, + "reqd": 1 }, { "fieldname": "naming_series", @@ -443,11 +444,6 @@ "permlevel": 1, "print_hide": 1 }, - { - "fieldname": "sec_warehouse", - "fieldtype": "Section Break", - "label": "Subcontracting" - }, { "description": "Sets 'Warehouse' in each row of the Items table.", "fieldname": "set_warehouse", @@ -456,15 +452,10 @@ "options": "Warehouse", "print_hide": 1 }, - { - "fieldname": "col_break_warehouse", - "fieldtype": "Column Break" - }, { "default": "0", "fieldname": "is_subcontracted", "fieldtype": "Check", - "in_standard_filter": 1, "label": "Is Subcontracted", "print_hide": 1 }, @@ -1142,6 +1133,10 @@ "label": "Tax Withholding Category", "options": "Tax Withholding Category" }, + { + "fieldname": "section_break_45", + "fieldtype": "Section Break" + }, { "collapsible": 1, "fieldname": "accounting_dimensions_section", @@ -1163,13 +1158,21 @@ "fieldtype": "Link", "label": "Project", "options": "Project" + }, + { + "default": "0", + "fieldname": "is_old_subcontracting_flow", + "fieldtype": "Check", + "hidden": 1, + "label": "Is Old Subcontracting Flow", + "read_only": 1 } ], "icon": "fa fa-file-text", "idx": 105, "is_submittable": 1, "links": [], - "modified": "2022-04-26 12:16:38.694276", + "modified": "2022-06-15 15:40:58.527065", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 5860c4c8ae..cd58d25136 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -69,8 +69,12 @@ class PurchaseOrder(BuyingController): self.validate_with_previous_doc() self.validate_for_subcontracting() self.validate_minimum_order_qty() - self.validate_bom_for_subcontracting_items() - self.create_raw_materials_supplied("supplied_items") + + if self.is_old_subcontracting_flow: + self.validate_bom_for_subcontracting_items() + self.create_raw_materials_supplied() + + self.validate_fg_item_for_subcontracting() self.set_received_qty_for_drop_ship_items() validate_inter_company_party( self.doctype, self.supplier, self.company, self.inter_company_order_reference @@ -194,12 +198,38 @@ class PurchaseOrder(BuyingController): ) def validate_bom_for_subcontracting_items(self): - if self.is_subcontracted: + for item in self.items: + if not item.bom: + frappe.throw( + _("Row #{0}: BOM is not specified for subcontracting item {0}").format( + item.idx, item.item_code + ) + ) + + def validate_fg_item_for_subcontracting(self): + if self.is_subcontracted and not self.is_old_subcontracting_flow: for item in self.items: - if not item.bom: + if not item.fg_item: frappe.throw( - _("BOM is not specified for subcontracting item {0} at row {1}").format( - item.item_code, item.idx + _("Row #{0}: Finished Good Item is not specified for service item {1}").format( + item.idx, item.item_code + ) + ) + else: + if not frappe.get_value("Item", item.fg_item, "is_sub_contracted_item"): + frappe.throw( + _( + "Row #{0}: Finished Good Item {1} must be a sub-contracted item for service item {2}" + ).format(item.idx, item.fg_item, item.item_code) + ) + elif not frappe.get_value("Item", item.fg_item, "default_bom"): + frappe.throw( + _("Row #{0}: Default BOM not found for FG Item {1}").format(item.idx, item.fg_item) + ) + if not item.fg_item_qty: + frappe.throw( + _("Row #{0}: Finished Good Item Qty is not specified for service item {0}").format( + item.idx, item.item_code ) ) @@ -294,9 +324,7 @@ class PurchaseOrder(BuyingController): self.set_status(update=True, status=status) self.update_requested_qty() self.update_ordered_qty() - if self.is_subcontracted: - self.update_reserved_qty_for_subcontract() - + self.update_reserved_qty_for_subcontract() self.notify_update() clear_doctype_notifications(self) @@ -310,9 +338,7 @@ class PurchaseOrder(BuyingController): self.update_requested_qty() self.update_ordered_qty() self.validate_budget() - - if self.is_subcontracted: - self.update_reserved_qty_for_subcontract() + self.update_reserved_qty_for_subcontract() frappe.get_doc("Authorization Control").validate_approving_authority( self.doctype, self.company, self.base_grand_total @@ -323,6 +349,7 @@ class PurchaseOrder(BuyingController): update_linked_doc(self.doctype, self.name, self.inter_company_order_reference) def on_cancel(self): + self.ignore_linked_doctypes = "Payment Ledger Entry" super(PurchaseOrder, self).on_cancel() if self.is_against_so(): @@ -331,9 +358,7 @@ class PurchaseOrder(BuyingController): if self.has_drop_ship_item(): self.update_delivered_qty_in_sales_order() - if self.is_subcontracted: - self.update_reserved_qty_for_subcontract() - + self.update_reserved_qty_for_subcontract() self.check_on_hold_or_closed_status() frappe.db.set(self, "status", "Cancelled") @@ -404,10 +429,11 @@ class PurchaseOrder(BuyingController): item.received_qty = item.qty def update_reserved_qty_for_subcontract(self): - for d in self.supplied_items: - if d.rm_item_code: - stock_bin = get_bin(d.rm_item_code, d.reserve_warehouse) - stock_bin.update_reserved_qty_for_sub_contracting() + if self.is_old_subcontracting_flow: + for d in self.supplied_items: + if d.rm_item_code: + stock_bin = get_bin(d.rm_item_code, d.reserve_warehouse) + stock_bin.update_reserved_qty_for_sub_contracting(subcontract_doctype="Purchase Order") def update_receiving_percentage(self): total_qty, received_qty = 0.0, 0.0 @@ -586,78 +612,6 @@ def get_mapped_purchase_invoice(source_name, target_doc=None, ignore_permissions return doc -@frappe.whitelist() -def make_rm_stock_entry(purchase_order, rm_items): - rm_items_list = rm_items - - if isinstance(rm_items, str): - rm_items_list = json.loads(rm_items) - elif not rm_items: - frappe.throw(_("No Items available for transfer")) - - if rm_items_list: - fg_items = list(set(d["item_code"] for d in rm_items_list)) - else: - frappe.throw(_("No Items selected for transfer")) - - if purchase_order: - purchase_order = frappe.get_doc("Purchase Order", purchase_order) - - if fg_items: - items = tuple(set(d["rm_item_code"] for d in rm_items_list)) - item_wh = get_item_details(items) - - stock_entry = frappe.new_doc("Stock Entry") - stock_entry.purpose = "Send to Subcontractor" - stock_entry.purchase_order = purchase_order.name - stock_entry.supplier = purchase_order.supplier - stock_entry.supplier_name = purchase_order.supplier_name - stock_entry.supplier_address = purchase_order.supplier_address - stock_entry.address_display = purchase_order.address_display - stock_entry.company = purchase_order.company - stock_entry.to_warehouse = purchase_order.supplier_warehouse - stock_entry.set_stock_entry_type() - - for item_code in fg_items: - for rm_item_data in rm_items_list: - if rm_item_data["item_code"] == item_code: - rm_item_code = rm_item_data["rm_item_code"] - items_dict = { - rm_item_code: { - "po_detail": rm_item_data.get("name"), - "item_name": rm_item_data["item_name"], - "description": item_wh.get(rm_item_code, {}).get("description", ""), - "qty": rm_item_data["qty"], - "from_warehouse": rm_item_data["warehouse"], - "stock_uom": rm_item_data["stock_uom"], - "serial_no": rm_item_data.get("serial_no"), - "batch_no": rm_item_data.get("batch_no"), - "main_item_code": rm_item_data["item_code"], - "allow_alternative_item": item_wh.get(rm_item_code, {}).get("allow_alternative_item"), - } - } - stock_entry.add_to_stock_entry_detail(items_dict) - return stock_entry.as_dict() - else: - frappe.throw(_("No Items selected for transfer")) - return purchase_order.name - - -def get_item_details(items): - item_details = {} - for d in frappe.db.sql( - """select item_code, description, allow_alternative_item from `tabItem` - where name in ({0})""".format( - ", ".join(["%s"] * len(items)) - ), - items, - as_dict=1, - ): - item_details[d.item_code] = d - - return item_details - - def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context @@ -688,61 +642,61 @@ def make_inter_company_sales_order(source_name, target_doc=None): @frappe.whitelist() -def get_materials_from_supplier(purchase_order, po_details): - if isinstance(po_details, str): - po_details = json.loads(po_details) - - doc = frappe.get_cached_doc("Purchase Order", purchase_order) - doc.initialized_fields() - doc.purchase_orders = [doc.name] - doc.get_available_materials() - - if not doc.available_materials: - frappe.throw( - _("Materials are already received against the purchase order {0}").format(purchase_order) - ) - - return make_return_stock_entry_for_subcontract(doc.available_materials, doc, po_details) +def make_subcontracting_order(source_name, target_doc=None): + return get_mapped_subcontracting_order(source_name, target_doc) -def make_return_stock_entry_for_subcontract(available_materials, po_doc, po_details): - ste_doc = frappe.new_doc("Stock Entry") - ste_doc.purpose = "Material Transfer" - ste_doc.purchase_order = po_doc.name - ste_doc.company = po_doc.company - ste_doc.is_return = 1 +def get_mapped_subcontracting_order(source_name, target_doc=None): - for key, value in available_materials.items(): - if not value.qty: - continue + if target_doc and isinstance(target_doc, str): + target_doc = json.loads(target_doc) + for key in ["service_items", "items", "supplied_items"]: + if key in target_doc: + del target_doc[key] + target_doc = json.dumps(target_doc) - if value.batch_no: - for batch_no, qty in value.batch_no.items(): - if qty > 0: - add_items_in_ste(ste_doc, value, value.qty, po_details, batch_no) - else: - add_items_in_ste(ste_doc, value, value.qty, po_details) - - ste_doc.set_stock_entry_type() - ste_doc.calculate_rate_and_amount() - - return ste_doc - - -def add_items_in_ste(ste_doc, row, qty, po_details, batch_no=None): - item = ste_doc.append("items", row.item_details) - - po_detail = list(set(row.po_details).intersection(po_details)) - item.update( + target_doc = get_mapped_doc( + "Purchase Order", + source_name, { - "qty": qty, - "batch_no": batch_no, - "basic_rate": row.item_details["rate"], - "po_detail": po_detail[0] if po_detail else "", - "s_warehouse": row.item_details["t_warehouse"], - "t_warehouse": row.item_details["s_warehouse"], - "item_code": row.item_details["rm_item_code"], - "subcontracted_item": row.item_details["main_item_code"], - "serial_no": "\n".join(row.serial_no) if row.serial_no else "", - } + "Purchase Order": { + "doctype": "Subcontracting Order", + "field_map": {}, + "field_no_map": ["total_qty", "total", "net_total"], + "validation": { + "docstatus": ["=", 1], + }, + }, + "Purchase Order Item": { + "doctype": "Subcontracting Order Service Item", + "field_map": {}, + "field_no_map": [], + }, + }, + target_doc, ) + + target_doc.populate_items_table() + + if target_doc.set_warehouse: + for item in target_doc.items: + item.warehouse = target_doc.set_warehouse + else: + source_doc = frappe.get_doc("Purchase Order", source_name) + if source_doc.set_warehouse: + for item in target_doc.items: + item.warehouse = source_doc.set_warehouse + else: + for idx, item in enumerate(target_doc.items): + item.warehouse = source_doc.items[idx].warehouse + + return target_doc + + +@frappe.whitelist() +def is_subcontracting_order_created(po_name) -> bool: + count = frappe.db.count( + "Subcontracting Order", {"purchase_order": po_name, "status": ["not in", ["Draft", "Cancelled"]]} + ) + + return True if count else False diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py b/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py index 81f20100c3..01b55c00d6 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py @@ -22,6 +22,6 @@ def get_data(): "label": _("Reference"), "items": ["Material Request", "Supplier Quotation", "Project", "Auto Repeat"], }, - {"label": _("Sub-contracting"), "items": ["Stock Entry"]}, + {"label": _("Sub-contracting"), "items": ["Subcontracting Order", "Stock Entry"]}, ], } diff --git a/erpnext/buying/doctype/purchase_order/regional/india.js b/erpnext/buying/doctype/purchase_order/regional/india.js deleted file mode 100644 index ef83f203e7..0000000000 --- a/erpnext/buying/doctype/purchase_order/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Purchase Order'); diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 1a7f2dd5d9..bd7e4e8d86 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -13,9 +13,6 @@ from erpnext.buying.doctype.purchase_order.purchase_order import ( make_purchase_invoice as make_pi_from_po, ) from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt -from erpnext.buying.doctype.purchase_order.purchase_order import ( - make_rm_stock_entry as make_subcontract_transfer_entry, -) from erpnext.controllers.accounts_controller import update_child_qty_rate from erpnext.manufacturing.doctype.blanket_order.test_blanket_order import make_blanket_order from erpnext.stock.doctype.item.test_item import make_item @@ -24,7 +21,6 @@ from erpnext.stock.doctype.material_request.test_material_request import make_ma from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( make_purchase_invoice as make_pi_from_pr, ) -from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry class TestPurchaseOrder(FrappeTestCase): @@ -330,7 +326,7 @@ class TestPurchaseOrder(FrappeTestCase): else: # update valid from frappe.db.sql( - """UPDATE `tabItem Tax` set valid_from = CURDATE() + """UPDATE `tabItem Tax` set valid_from = CURRENT_DATE where parent = %(item)s and item_tax_template = %(tax)s""", {"item": item, "tax": tax_template}, ) @@ -389,31 +385,6 @@ class TestPurchaseOrder(FrappeTestCase): new_item_with_tax.delete() frappe.get_doc("Item Tax Template", "Test Update Items Template - _TC").delete() - def test_update_child_uom_conv_factor_change(self): - po = create_purchase_order(item_code="_Test FG Item", is_subcontracted=1) - total_reqd_qty = sum([d.get("required_qty") for d in po.as_dict().get("supplied_items")]) - - trans_item = json.dumps( - [ - { - "item_code": po.get("items")[0].item_code, - "rate": po.get("items")[0].rate, - "qty": po.get("items")[0].qty, - "uom": "_Test UOM 1", - "conversion_factor": 2, - "docname": po.get("items")[0].name, - } - ] - ) - update_child_qty_rate("Purchase Order", trans_item, po.name) - po.reload() - - total_reqd_qty_after_change = sum( - d.get("required_qty") for d in po.as_dict().get("supplied_items") - ) - - self.assertEqual(total_reqd_qty_after_change, 2 * total_reqd_qty) - def test_update_qty(self): po = create_purchase_order() @@ -572,10 +543,6 @@ class TestPurchaseOrder(FrappeTestCase): ) automatically_fetch_payment_terms(enable=0) - def test_subcontracting(self): - po = create_purchase_order(item_code="_Test FG Item", is_subcontracted=1) - self.assertEqual(len(po.get("supplied_items")), 2) - def test_warehouse_company_validation(self): from erpnext.stock.utils import InvalidWarehouseCompany @@ -740,379 +707,6 @@ class TestPurchaseOrder(FrappeTestCase): pi.insert() self.assertTrue(pi.get("payment_schedule")) - def test_reserved_qty_subcontract_po(self): - # Make stock available for raw materials - make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100) - make_stock_entry( - target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", qty=20, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse 1 - _TC", item_code="_Test Item", qty=30, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse 1 - _TC", - item_code="_Test Item Home Desktop 100", - qty=30, - basic_rate=100, - ) - - bin1 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname=["reserved_qty_for_sub_contract", "projected_qty", "modified"], - as_dict=1, - ) - - # Submit PO - po = create_purchase_order(item_code="_Test FG Item", is_subcontracted=1) - - bin2 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname=["reserved_qty_for_sub_contract", "projected_qty", "modified"], - as_dict=1, - ) - - self.assertEqual(bin2.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract + 10) - self.assertEqual(bin2.projected_qty, bin1.projected_qty - 10) - self.assertNotEqual(bin1.modified, bin2.modified) - - # Create stock transfer - rm_item = [ - { - "item_code": "_Test FG Item", - "rm_item_code": "_Test Item", - "item_name": "_Test Item", - "qty": 6, - "warehouse": "_Test Warehouse - _TC", - "rate": 100, - "amount": 600, - "stock_uom": "Nos", - } - ] - rm_item_string = json.dumps(rm_item) - se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string)) - se.to_warehouse = "_Test Warehouse 1 - _TC" - se.save() - se.submit() - - bin3 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin3.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) - - # close PO - po.update_status("Closed") - bin4 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin4.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) - - # Re-open PO - po.update_status("Submitted") - bin5 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin5.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) - - make_stock_entry( - target="_Test Warehouse 1 - _TC", item_code="_Test Item", qty=40, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse 1 - _TC", - item_code="_Test Item Home Desktop 100", - qty=40, - basic_rate=100, - ) - - # make Purchase Receipt against PO - pr = make_purchase_receipt(po.name) - pr.supplier_warehouse = "_Test Warehouse 1 - _TC" - pr.save() - pr.submit() - - bin6 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin6.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) - - # Cancel PR - pr.cancel() - bin7 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin7.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) - - # Make Purchase Invoice - pi = make_pi_from_po(po.name) - pi.update_stock = 1 - pi.supplier_warehouse = "_Test Warehouse 1 - _TC" - pi.insert() - pi.submit() - bin8 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin8.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) - - # Cancel PR - pi.cancel() - bin9 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin9.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) - - # Cancel Stock Entry - se.cancel() - bin10 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin10.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract + 10) - - # Cancel PO - po.reload() - po.cancel() - bin11 = frappe.db.get_value( - "Bin", - filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, - fieldname="reserved_qty_for_sub_contract", - as_dict=1, - ) - - self.assertEqual(bin11.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) - - def test_exploded_items_in_subcontracted(self): - item_code = "_Test Subcontracted FG Item 11" - make_subcontracted_item(item_code=item_code) - - po = create_purchase_order( - item_code=item_code, - qty=1, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - include_exploded_items=1, - ) - - name = frappe.db.get_value("BOM", {"item": item_code}, "name") - bom = frappe.get_doc("BOM", name) - - exploded_items = sorted( - [d.item_code for d in bom.exploded_items if not d.get("sourced_by_supplier")] - ) - supplied_items = sorted([d.rm_item_code for d in po.supplied_items]) - self.assertEqual(exploded_items, supplied_items) - - po1 = create_purchase_order( - item_code=item_code, - qty=1, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - include_exploded_items=0, - ) - - supplied_items1 = sorted([d.rm_item_code for d in po1.supplied_items]) - bom_items = sorted([d.item_code for d in bom.items if not d.get("sourced_by_supplier")]) - - self.assertEqual(supplied_items1, bom_items) - - def test_backflush_based_on_stock_entry(self): - item_code = "_Test Subcontracted FG Item 1" - make_subcontracted_item(item_code=item_code) - make_item("Sub Contracted Raw Material 1", {"is_stock_item": 1, "is_sub_contracted_item": 1}) - - update_backflush_based_on("Material Transferred for Subcontract") - - order_qty = 5 - po = create_purchase_order( - item_code=item_code, - qty=order_qty, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - ) - - make_stock_entry( - target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", qty=20, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse - _TC", item_code="Test Extra Item 1", qty=100, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse - _TC", item_code="Test Extra Item 2", qty=10, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse - _TC", - item_code="Sub Contracted Raw Material 1", - qty=10, - basic_rate=100, - ) - - rm_items = [ - { - "item_code": item_code, - "rm_item_code": "Sub Contracted Raw Material 1", - "item_name": "_Test Item", - "qty": 10, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - { - "item_code": item_code, - "rm_item_code": "_Test Item Home Desktop 100", - "item_name": "_Test Item Home Desktop 100", - "qty": 20, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - { - "item_code": item_code, - "rm_item_code": "Test Extra Item 1", - "item_name": "Test Extra Item 1", - "qty": 10, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - { - "item_code": item_code, - "rm_item_code": "Test Extra Item 2", - "stock_uom": "Nos", - "qty": 10, - "warehouse": "_Test Warehouse - _TC", - "item_name": "Test Extra Item 2", - }, - ] - - rm_item_string = json.dumps(rm_items) - se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string)) - se.submit() - - pr = make_purchase_receipt(po.name) - - received_qty = 2 - # partial receipt - pr.get("items")[0].qty = received_qty - pr.save() - pr.submit() - - transferred_items = sorted( - [d.item_code for d in se.get("items") if se.purchase_order == po.name] - ) - issued_items = sorted([d.rm_item_code for d in pr.get("supplied_items")]) - - self.assertEqual(transferred_items, issued_items) - self.assertEqual(pr.get("items")[0].rm_supp_cost, 2000) - - transferred_rm_map = frappe._dict() - for item in rm_items: - transferred_rm_map[item.get("rm_item_code")] = item - - update_backflush_based_on("BOM") - - def test_supplied_qty_against_subcontracted_po(self): - item_code = "_Test Subcontracted FG Item 5" - make_item("Sub Contracted Raw Material 4", {"is_stock_item": 1, "is_sub_contracted_item": 1}) - - make_subcontracted_item(item_code=item_code, raw_materials=["Sub Contracted Raw Material 4"]) - - update_backflush_based_on("Material Transferred for Subcontract") - - order_qty = 250 - po = create_purchase_order( - item_code=item_code, - qty=order_qty, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - do_not_save=True, - ) - - # Add same subcontracted items multiple times - po.append( - "items", - { - "item_code": item_code, - "qty": order_qty, - "schedule_date": add_days(nowdate(), 1), - "warehouse": "_Test Warehouse - _TC", - }, - ) - - po.set_missing_values() - po.submit() - - # Material receipt entry for the raw materials which will be send to supplier - make_stock_entry( - target="_Test Warehouse - _TC", - item_code="Sub Contracted Raw Material 4", - qty=500, - basic_rate=100, - ) - - rm_items = [ - { - "item_code": item_code, - "rm_item_code": "Sub Contracted Raw Material 4", - "item_name": "_Test Item", - "qty": 250, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - "name": po.supplied_items[0].name, - }, - { - "item_code": item_code, - "rm_item_code": "Sub Contracted Raw Material 4", - "item_name": "_Test Item", - "qty": 250, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - ] - - # Raw Materials transfer entry from stores to supplier's warehouse - rm_item_string = json.dumps(rm_items) - se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string)) - se.submit() - - # Test po_detail field has value or not - for item_row in se.items: - self.assertEqual(item_row.po_detail, po.supplied_items[item_row.idx - 1].name) - - po_doc = frappe.get_doc("Purchase Order", po.name) - for row in po_doc.supplied_items: - # Valid that whether transferred quantity is matching with supplied qty or not in the purchase order - self.assertEqual(row.supplied_qty, 250.0) - - update_backflush_based_on("BOM") - def test_advance_payment_entry_unlink_against_purchase_order(self): from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry @@ -1211,50 +805,6 @@ def make_pr_against_po(po, received_qty=0): return pr -def make_subcontracted_item(**args): - from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom - - args = frappe._dict(args) - - if not frappe.db.exists("Item", args.item_code): - make_item( - args.item_code, - { - "is_stock_item": 1, - "is_sub_contracted_item": 1, - "has_batch_no": args.get("has_batch_no") or 0, - }, - ) - - if not args.raw_materials: - if not frappe.db.exists("Item", "Test Extra Item 1"): - make_item( - "Test Extra Item 1", - { - "is_stock_item": 1, - }, - ) - - if not frappe.db.exists("Item", "Test Extra Item 2"): - make_item( - "Test Extra Item 2", - { - "is_stock_item": 1, - }, - ) - - args.raw_materials = ["_Test FG Item", "Test Extra Item 1"] - - if not frappe.db.get_value("BOM", {"item": args.item_code}, "name"): - make_bom(item=args.item_code, raw_materials=args.get("raw_materials")) - - -def update_backflush_based_on(based_on): - doc = frappe.get_doc("Buying Settings") - doc.backflush_raw_materials_of_subcontract_based_on = based_on - doc.save() - - def get_same_items(): return [ { diff --git a/erpnext/buying/doctype/purchase_order/test_records.json b/erpnext/buying/doctype/purchase_order/test_records.json index 896050ce43..4df994a68c 100644 --- a/erpnext/buying/doctype/purchase_order/test_records.json +++ b/erpnext/buying/doctype/purchase_order/test_records.json @@ -1,38 +1,4 @@ [ - { - "advance_paid": 0.0, - "buying_price_list": "_Test Price List", - "company": "_Test Company", - "conversion_rate": 1.0, - "currency": "INR", - "doctype": "Purchase Order", - "base_grand_total": 5000.0, - "grand_total": 5000.0, - "is_subcontracted": 1, - "naming_series": "_T-Purchase Order-", - "base_net_total": 5000.0, - "items": [ - { - "base_amount": 5000.0, - "conversion_factor": 1.0, - "description": "_Test FG Item", - "doctype": "Purchase Order Item", - "item_code": "_Test FG Item", - "item_name": "_Test FG Item", - "parentfield": "items", - "qty": 10.0, - "rate": 500.0, - "schedule_date": "2013-03-01", - "stock_uom": "_Test UOM", - "uom": "_Test UOM", - "warehouse": "_Test Warehouse - _TC" - } - ], - "supplier": "_Test Supplier", - "supplier_name": "_Test Supplier", - "transaction_date": "2013-02-12", - "schedule_date": "2013-02-13" - }, { "advance_paid": 0.0, "buying_price_list": "_Test Price List", diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index f72c598840..1a9845396f 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -11,6 +11,8 @@ "supplier_part_no", "item_name", "product_bundle", + "fg_item", + "fg_item_qty", "column_break_4", "schedule_date", "expected_delivery_date", @@ -213,6 +215,7 @@ "width": "60px" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -242,6 +245,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "UOM Conversion Factor", @@ -572,16 +576,18 @@ "read_only": 1 }, { - "depends_on": "eval:parent.is_subcontracted", + "depends_on": "eval:parent.is_old_subcontracting_flow", "fieldname": "bom", "fieldtype": "Link", "label": "BOM", "options": "BOM", - "print_hide": 1 + "print_hide": 1, + "read_only": 1, + "read_only_depends_on": "eval:!parent.is_old_subcontracting_flow" }, { "default": "0", - "depends_on": "eval:parent.is_subcontracted", + "depends_on": "eval:parent.is_old_subcontracting_flow", "fieldname": "include_exploded_items", "fieldtype": "Check", "label": "Include Exploded Items", @@ -593,6 +599,7 @@ "label": "Billed, Received & Returned" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Qty in Stock UOM", @@ -845,13 +852,29 @@ "label": "Sales Order Packed Item", "no_copy": 1, "print_hide": 1 + }, + { + "depends_on": "eval:parent.is_subcontracted && !parent.is_old_subcontracting_flow", + "fieldname": "fg_item", + "fieldtype": "Link", + "label": "Finished Good Item", + "mandatory_depends_on": "eval:parent.is_subcontracted && !parent.is_old_subcontracting_flow", + "options": "Item" + }, + { + "default": "1", + "depends_on": "eval:parent.is_subcontracted && !parent.is_old_subcontracting_flow", + "fieldname": "fg_item_qty", + "fieldtype": "Float", + "label": "Finished Good Item Qty", + "mandatory_depends_on": "eval:parent.is_subcontracted && !parent.is_old_subcontracting_flow" } ], "idx": 1, "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-02-02 13:10:18.398976", + "modified": "2022-06-17 05:29:40.602349", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index e7049fd522..4e29ee53ea 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -31,7 +31,7 @@ frappe.ui.form.on("Request for Quotation",{ if (frm.doc.docstatus === 1) { frm.add_custom_button(__('Supplier Quotation'), - function(){ frm.trigger("make_suppplier_quotation") }, __("Create")); + function(){ frm.trigger("make_supplier_quotation") }, __("Create")); frm.add_custom_button(__("Send Emails to Suppliers"), function() { @@ -87,16 +87,24 @@ frappe.ui.form.on("Request for Quotation",{ }, - make_suppplier_quotation: function(frm) { + make_supplier_quotation: function(frm) { var doc = frm.doc; var dialog = new frappe.ui.Dialog({ title: __("Create Supplier Quotation"), fields: [ - { "fieldtype": "Select", "label": __("Supplier"), + { "fieldtype": "Link", + "label": __("Supplier"), "fieldname": "supplier", - "options": doc.suppliers.map(d => d.supplier), + "options": 'Supplier', "reqd": 1, - "default": doc.suppliers.length === 1 ? doc.suppliers[0].supplier_name : "" }, + get_query: () => { + return { + filters: [ + ["Supplier", "name", "in", frm.doc.suppliers.map((row) => {return row.supplier;})] + ] + } + } + } ], primary_action_label: __("Create"), primary_action: (args) => { diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json index 4993df90d1..083cab78f7 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -32,7 +32,9 @@ "terms", "printing_settings", "select_print_heading", - "letter_head" + "letter_head", + "more_info", + "opportunity" ], "fields": [ { @@ -193,6 +195,23 @@ "options": "Letter Head", "print_hide": 1 }, + { + "collapsible": 1, + "fieldname": "more_info", + "fieldtype": "Section Break", + "label": "More Information", + "oldfieldtype": "Section Break", + "options": "fa fa-file-text", + "print_hide": 1 + }, + { + "fieldname": "opportunity", + "fieldtype": "Link", + "label": "Opportunity", + "options": "Opportunity", + "print_hide": 1, + "read_only": 1 + }, { "fieldname": "status", "fieldtype": "Select", @@ -258,7 +277,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2021-11-24 17:47:49.909000", + "modified": "2022-04-06 17:47:49.909000", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation", @@ -327,4 +346,4 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC" -} \ No newline at end of file +} diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index d39aec19ba..f319506ff9 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -180,12 +180,20 @@ class RequestforQuotation(BuyingController): doc_args = self.as_dict() doc_args.update({"supplier": data.get("supplier"), "supplier_name": data.get("supplier_name")}) + # Get Contact Full Name + supplier_name = None + if data.get("contact"): + contact_name = frappe.db.get_value( + "Contact", data.get("contact"), ["first_name", "middle_name", "last_name"] + ) + supplier_name = (" ").join(x for x in contact_name if x) # remove any blank values + args = { "update_password_link": update_password_link, "message": frappe.render_template(self.message_for_supplier, doc_args), "rfq_link": rfq_link, "user_fullname": full_name, - "supplier_name": data.get("supplier_name"), + "supplier_name": supplier_name or data.get("supplier_name"), "supplier_salutation": self.salutation or "Dear Mx.", } @@ -285,7 +293,7 @@ def get_supplier_contacts(doctype, txt, searchfield, start, page_len, filters): """select `tabContact`.name from `tabContact`, `tabDynamic Link` where `tabDynamic Link`.link_doctype = 'Supplier' and (`tabDynamic Link`.link_name=%(name)s and `tabDynamic Link`.link_name like %(txt)s) and `tabContact`.name = `tabDynamic Link`.parent - limit %(start)s, %(page_len)s""", + limit %(page_len)s offset %(start)s""", {"start": start, "page_len": page_len, "txt": "%%%s%%" % txt, "name": filters.get("supplier")}, ) diff --git a/erpnext/buying/doctype/supplier/regional/india.js b/erpnext/buying/doctype/supplier/regional/india.js deleted file mode 100644 index 5f49a47e75..0000000000 --- a/erpnext/buying/doctype/supplier/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/party.js" %} - -erpnext.setup_gst_reminder_button('Supplier'); diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py index 97d0ba0b9c..43152e89a8 100644 --- a/erpnext/buying/doctype/supplier/supplier.py +++ b/erpnext/buying/doctype/supplier/supplier.py @@ -84,6 +84,9 @@ class Supplier(TransactionBase): self.save() def validate_internal_supplier(self): + if not self.is_internal_supplier: + self.represents_company = "" + internal_supplier = frappe.db.get_value( "Supplier", { diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.py b/erpnext/buying/report/procurement_tracker/procurement_tracker.py index e0b02ee4e2..d70ac46ce3 100644 --- a/erpnext/buying/report/procurement_tracker/procurement_tracker.py +++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.py @@ -252,7 +252,7 @@ def get_mapped_pi_records(): ON pi_item.`purchase_order` = po.`name` WHERE pi_item.docstatus = 1 - AND po.status not in ("Closed","Completed","Cancelled") + AND po.status not in ('Closed','Completed','Cancelled') AND pi_item.po_detail IS NOT NULL """ ) @@ -271,7 +271,7 @@ def get_mapped_pr_records(): pr.docstatus=1 AND pr.name=pr_item.parent AND pr_item.purchase_order_item IS NOT NULL - AND pr.status not in ("Closed","Completed","Cancelled") + AND pr.status not in ('Closed','Completed','Cancelled') """ ) ) @@ -302,7 +302,7 @@ def get_po_entries(conditions): WHERE parent.docstatus = 1 AND parent.name = child.parent - AND parent.status not in ("Closed","Completed","Cancelled") + AND parent.status not in ('Closed','Completed','Cancelled') {conditions} GROUP BY parent.name, child.item_code diff --git a/erpnext/buying/report/purchase_analytics/purchase_analytics.js b/erpnext/buying/report/purchase_analytics/purchase_analytics.js index ba8535a3ae..a884f06d2c 100644 --- a/erpnext/buying/report/purchase_analytics/purchase_analytics.js +++ b/erpnext/buying/report/purchase_analytics/purchase_analytics.js @@ -68,9 +68,6 @@ frappe.query_reports["Purchase Analytics"] = { } ], - after_datatable_render: function(datatable_obj) { - $(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click(); - }, get_datatable_options(options) { return Object.assign(options, { checkboxColumn: true, @@ -130,11 +127,8 @@ frappe.query_reports["Purchase Analytics"] = { labels: raw_data.labels, datasets: new_datasets, }; - chart_options = { - data: new_data, - type: "line", - }; - frappe.query_report.render_chart(chart_options); + const new_options = Object.assign({}, frappe.query_report.chart_options, {data: new_data}); + frappe.query_report.render_chart(new_options); frappe.query_report.raw_chart_data = new_data; }, diff --git a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js index ca3be03da6..721e54e46f 100644 --- a/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js +++ b/erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js @@ -59,6 +59,7 @@ frappe.query_reports["Purchase Order Analysis"] = { for (let option of status){ options.push({ "value": option, + "label": __(option), "description": "" }) } diff --git a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js index 6889322fb9..075671f4ec 100644 --- a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js +++ b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.js @@ -14,32 +14,29 @@ frappe.query_reports["Subcontract Order Summary"] = { }, { label: __("From Date"), - fieldname:"from_date", + fieldname: "from_date", fieldtype: "Date", default: frappe.datetime.add_months(frappe.datetime.get_today(), -1), reqd: 1 }, { label: __("To Date"), - fieldname:"to_date", + fieldname: "to_date", fieldtype: "Date", default: frappe.datetime.get_today(), reqd: 1 }, { - label: __("Purchase Order"), + label: __("Order Type"), + fieldname: "order_type", + fieldtype: "Select", + options: ["Purchase Order", "Subcontracting Order"], + default: "Subcontracting Order" + }, + { + label: __("Subcontract Order"), fieldname: "name", - fieldtype: "Link", - options: "Purchase Order", - get_query: function() { - return { - filters: { - docstatus: 1, - is_subcontracted: 1, - company: frappe.query_report.get_filter_value('company') - } - } - } + fieldtype: "Data" } ] -}; +}; \ No newline at end of file diff --git a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.json b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.json index 526a8d8ad0..7861e49ccf 100644 --- a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.json +++ b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.json @@ -15,7 +15,7 @@ "name": "Subcontract Order Summary", "owner": "Administrator", "prepared_report": 0, - "ref_doctype": "Purchase Order", + "ref_doctype": "Subcontracting Order", "report_name": "Subcontract Order Summary", "report_type": "Script Report", "roles": [ diff --git a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.py b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.py index 3d66637576..0213051aeb 100644 --- a/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.py +++ b/erpnext/buying/report/subcontract_order_summary/subcontract_order_summary.py @@ -8,7 +8,7 @@ from frappe import _ def execute(filters=None): columns, data = [], [] - columns = get_columns() + columns = get_columns(filters) data = get_data(filters) return columns, data @@ -20,43 +20,45 @@ def get_data(report_filters): if orders: supplied_items = get_supplied_items(orders, report_filters) - po_details = prepare_subcontracted_data(orders, supplied_items) - get_subcontracted_data(po_details, data) + order_details = prepare_subcontracted_data(orders, supplied_items) + get_subcontracted_data(order_details, data) return data def get_subcontracted_orders(report_filters): fields = [ - "`tabPurchase Order Item`.`parent` as po_id", - "`tabPurchase Order Item`.`item_code`", - "`tabPurchase Order Item`.`item_name`", - "`tabPurchase Order Item`.`qty`", - "`tabPurchase Order Item`.`name`", - "`tabPurchase Order Item`.`received_qty`", - "`tabPurchase Order`.`status`", + f"`tab{report_filters.order_type} Item`.`parent` as order_id", + f"`tab{report_filters.order_type} Item`.`item_code`", + f"`tab{report_filters.order_type} Item`.`item_name`", + f"`tab{report_filters.order_type} Item`.`qty`", + f"`tab{report_filters.order_type} Item`.`name`", + f"`tab{report_filters.order_type} Item`.`received_qty`", + f"`tab{report_filters.order_type}`.`status`", ] filters = get_filters(report_filters) - return frappe.get_all("Purchase Order", fields=fields, filters=filters) or [] + return frappe.get_all(report_filters.order_type, fields=fields, filters=filters) or [] def get_filters(report_filters): filters = [ - ["Purchase Order", "docstatus", "=", 1], - ["Purchase Order", "is_subcontracted", "=", 1], + [report_filters.order_type, "docstatus", "=", 1], [ - "Purchase Order", + report_filters.order_type, "transaction_date", "between", (report_filters.from_date, report_filters.to_date), ], ] + if report_filters.order_type == "Purchase Order": + filters.append(["Purchase Order", "is_old_subcontracting_flow", "=", 1]) + for field in ["name", "company"]: if report_filters.get(field): - filters.append(["Purchase Order", field, "=", report_filters.get(field)]) + filters.append([report_filters.order_type, field, "=", report_filters.get(field)]) return filters @@ -77,10 +79,15 @@ def get_supplied_items(orders, report_filters): "reference_name", ] - filters = {"parent": ("in", [d.po_id for d in orders]), "docstatus": 1} + filters = {"parent": ("in", [d.order_id for d in orders]), "docstatus": 1} supplied_items = {} - for row in frappe.get_all("Purchase Order Item Supplied", fields=fields, filters=filters): + supplied_items_table = ( + "Purchase Order Item Supplied" + if report_filters.order_type == "Purchase Order" + else "Subcontracting Order Supplied Item" + ) + for row in frappe.get_all(supplied_items_table, fields=fields, filters=filters): new_key = (row.parent, row.reference_name, row.main_item_code) supplied_items.setdefault(new_key, []).append(row) @@ -89,24 +96,24 @@ def get_supplied_items(orders, report_filters): def prepare_subcontracted_data(orders, supplied_items): - po_details = {} + order_details = {} for row in orders: - key = (row.po_id, row.name, row.item_code) - if key not in po_details: - po_details.setdefault(key, frappe._dict({"po_item": row, "supplied_items": []})) + key = (row.order_id, row.name, row.item_code) + if key not in order_details: + order_details.setdefault(key, frappe._dict({"order_item": row, "supplied_items": []})) - details = po_details[key] + details = order_details[key] if supplied_items.get(key): for supplied_item in supplied_items[key]: details["supplied_items"].append(supplied_item) - return po_details + return order_details -def get_subcontracted_data(po_details, data): - for key, details in po_details.items(): - res = details.po_item +def get_subcontracted_data(order_details, data): + for key, details in order_details.items(): + res = details.order_item for index, row in enumerate(details.supplied_items): if index != 0: res = {} @@ -115,13 +122,13 @@ def get_subcontracted_data(po_details, data): data.append(res) -def get_columns(): +def get_columns(filters): return [ { - "label": _("Purchase Order"), - "fieldname": "po_id", + "label": _("Subcontract Order"), + "fieldname": "order_id", "fieldtype": "Link", - "options": "Purchase Order", + "options": filters.order_type, "width": 100, }, {"label": _("Status"), "fieldname": "status", "fieldtype": "Data", "width": 80}, diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js index fc58b6aaaf..6304a0908d 100644 --- a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js +++ b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.js @@ -4,6 +4,13 @@ frappe.query_reports["Subcontracted Item To Be Received"] = { "filters": [ + { + label: __("Order Type"), + fieldname: "order_type", + fieldtype: "Select", + options: ["Purchase Order", "Subcontracting Order"], + default: "Subcontracting Order" + }, { fieldname: "supplier", label: __("Supplier"), diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.json b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.json index fdf6cf702d..f40b788fe0 100644 --- a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.json +++ b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.json @@ -13,7 +13,7 @@ "name": "Subcontracted Item To Be Received", "owner": "Administrator", "prepared_report": 0, - "ref_doctype": "Purchase Order", + "ref_doctype": "Subcontracting Order", "report_name": "Subcontracted Item To Be Received", "report_type": "Script Report", "roles": [ diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py index 2e90de66ef..135449bb2b 100644 --- a/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py +++ b/erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py @@ -11,18 +11,18 @@ def execute(filters=None): frappe.msgprint(_("To Date must be greater than From Date")) data = [] - columns = get_columns() + columns = get_columns(filters) get_data(data, filters) return columns, data -def get_columns(): +def get_columns(filters): return [ { - "label": _("Purchase Order"), + "label": _("Subcontract Order"), "fieldtype": "Link", - "fieldname": "purchase_order", - "options": "Purchase Order", + "fieldname": "subcontract_order", + "options": filters.order_type, "width": 150, }, {"label": _("Date"), "fieldtype": "Date", "fieldname": "date", "hidden": 1, "width": 150}, @@ -57,14 +57,14 @@ def get_columns(): def get_data(data, filters): - po = get_po(filters) - po_name = [v.name for v in po] - sub_items = get_purchase_order_item_supplied(po_name) - for item in sub_items: - for order in po: + orders = get_subcontract_orders(filters) + orders_name = [order.name for order in orders] + subcontracted_items = get_subcontract_order_supplied_item(filters.order_type, orders_name) + for item in subcontracted_items: + for order in orders: if order.name == item.parent and item.received_qty < item.qty: row = { - "purchase_order": item.parent, + "subcontract_order": item.parent, "date": order.transaction_date, "supplier": order.supplier, "fg_item_code": item.item_code, @@ -76,22 +76,25 @@ def get_data(data, filters): data.append(row) -def get_po(filters): +def get_subcontract_orders(filters): record_filters = [ - ["is_subcontracted", "=", 1], ["supplier", "=", filters.supplier], ["transaction_date", "<=", filters.to_date], ["transaction_date", ">=", filters.from_date], ["docstatus", "=", 1], ] + + if filters.order_type == "Purchase Order": + record_filters.append(["is_old_subcontracting_flow", "=", 1]) + return frappe.get_all( - "Purchase Order", filters=record_filters, fields=["name", "transaction_date", "supplier"] + filters.order_type, filters=record_filters, fields=["name", "transaction_date", "supplier"] ) -def get_purchase_order_item_supplied(po): +def get_subcontract_order_supplied_item(order_type, orders): return frappe.get_all( - "Purchase Order Item", - filters=[("parent", "IN", po)], + f"{order_type} Item", + filters=[("parent", "IN", orders)], fields=["parent", "item_code", "item_name", "qty", "received_qty"], ) diff --git a/erpnext/buying/report/subcontracted_item_to_be_received/test_subcontracted_item_to_be_received.py b/erpnext/buying/report/subcontracted_item_to_be_received/test_subcontracted_item_to_be_received.py index 57f8741b5b..c772c1a1b1 100644 --- a/erpnext/buying/report/subcontracted_item_to_be_received/test_subcontracted_item_to_be_received.py +++ b/erpnext/buying/report/subcontracted_item_to_be_received/test_subcontracted_item_to_be_received.py @@ -7,18 +7,35 @@ import frappe from frappe.tests.utils import FrappeTestCase -from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt -from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order from erpnext.buying.report.subcontracted_item_to_be_received.subcontracted_item_to_be_received import ( execute, ) +from erpnext.controllers.tests.test_subcontracting_controller import ( + get_subcontracting_order, + make_service_item, +) from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry +from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, +) class TestSubcontractedItemToBeReceived(FrappeTestCase): def test_pending_and_received_qty(self): - po = create_purchase_order(item_code="_Test FG Item", is_subcontracted=1) - transfer_param = [] + make_service_item("Subcontracted Service Item 1") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 10, + "rate": 500, + "fg_item": "_Test FG Item", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order( + service_items=service_items, supplier_warehouse="_Test Warehouse 1 - _TC" + ) make_stock_entry( item_code="_Test Item", target="_Test Warehouse 1 - _TC", qty=100, basic_rate=100 ) @@ -28,28 +45,28 @@ class TestSubcontractedItemToBeReceived(FrappeTestCase): qty=100, basic_rate=100, ) - make_purchase_receipt_against_po(po.name) - po.reload() + make_subcontracting_receipt_against_sco(sco.name) + sco.reload() col, data = execute( filters=frappe._dict( { - "supplier": po.supplier, + "order_type": "Subcontracting Order", + "supplier": sco.supplier, "from_date": frappe.utils.get_datetime( - frappe.utils.add_to_date(po.transaction_date, days=-10) + frappe.utils.add_to_date(sco.transaction_date, days=-10) ), - "to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(po.transaction_date, days=10)), + "to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(sco.transaction_date, days=10)), } ) ) self.assertEqual(data[0]["pending_qty"], 5) self.assertEqual(data[0]["received_qty"], 5) - self.assertEqual(data[0]["purchase_order"], po.name) - self.assertEqual(data[0]["supplier"], po.supplier) + self.assertEqual(data[0]["subcontract_order"], sco.name) + self.assertEqual(data[0]["supplier"], sco.supplier) -def make_purchase_receipt_against_po(po, quantity=5): - pr = make_purchase_receipt(po) - pr.items[0].qty = quantity - pr.supplier_warehouse = "_Test Warehouse 1 - _TC" - pr.insert() - pr.submit() +def make_subcontracting_receipt_against_sco(sco, quantity=5): + scr = make_subcontracting_receipt(sco) + scr.items[0].qty = quantity + scr.insert() + scr.submit() diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js index 0853afd657..b6739fe663 100644 --- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js +++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js @@ -4,6 +4,13 @@ frappe.query_reports["Subcontracted Raw Materials To Be Transferred"] = { "filters": [ + { + label: __("Order Type"), + fieldname: "order_type", + fieldtype: "Select", + options: ["Purchase Order", "Subcontracting Order"], + default: "Subcontracting Order" + }, { fieldname: "supplier", label: __("Supplier"), diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.json b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.json index c7cee5e20b..f689fbcf24 100644 --- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.json +++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.json @@ -13,7 +13,7 @@ "name": "Subcontracted Raw Materials To Be Transferred", "owner": "Administrator", "prepared_report": 0, - "ref_doctype": "Purchase Order", + "ref_doctype": "Subcontracting Order", "report_name": "Subcontracted Raw Materials To Be Transferred", "report_type": "Script Report", "roles": [ diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py index 6b8a3b140a..ef28eda62a 100644 --- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py +++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py @@ -10,19 +10,19 @@ def execute(filters=None): if filters.from_date >= filters.to_date: frappe.msgprint(_("To Date must be greater than From Date")) - columns = get_columns() + columns = get_columns(filters) data = get_data(filters) return columns, data or [] -def get_columns(): +def get_columns(filters): return [ { - "label": _("Purchase Order"), + "label": _("Subcontract Order"), "fieldtype": "Link", - "fieldname": "purchase_order", - "options": "Purchase Order", + "fieldname": "subcontract_order", + "options": filters.order_type, "width": 200, }, {"label": _("Date"), "fieldtype": "Date", "fieldname": "date", "width": 150}, @@ -46,10 +46,10 @@ def get_columns(): def get_data(filters): - po_rm_item_details = get_po_items_to_supply(filters) + order_rm_item_details = get_order_items_to_supply(filters) data = [] - for row in po_rm_item_details: + for row in order_rm_item_details: transferred_qty = row.get("transferred_qty") or 0 if transferred_qty < row.get("reqd_qty", 0): pending_qty = frappe.utils.flt(row.get("reqd_qty", 0) - transferred_qty) @@ -59,23 +59,33 @@ def get_data(filters): return data -def get_po_items_to_supply(filters): +def get_order_items_to_supply(filters): + supplied_items_table = ( + "Purchase Order Item Supplied" + if filters.order_type == "Purchase Order" + else "Subcontracting Order Supplied Item" + ) + + record_filters = [ + [filters.order_type, "per_received", "<", "100"], + [filters.order_type, "supplier", "=", filters.supplier], + [filters.order_type, "transaction_date", "<=", filters.to_date], + [filters.order_type, "transaction_date", ">=", filters.from_date], + [filters.order_type, "docstatus", "=", 1], + ] + + if filters.order_type == "Purchase Order": + record_filters.append([filters.order_type, "is_old_subcontracting_flow", "=", 1]) + return frappe.db.get_all( - "Purchase Order", + filters.order_type, fields=[ - "name as purchase_order", + "name as subcontract_order", "transaction_date as date", "supplier as supplier", - "`tabPurchase Order Item Supplied`.rm_item_code as rm_item_code", - "`tabPurchase Order Item Supplied`.required_qty as reqd_qty", - "`tabPurchase Order Item Supplied`.supplied_qty as transferred_qty", - ], - filters=[ - ["Purchase Order", "per_received", "<", "100"], - ["Purchase Order", "is_subcontracted", "=", 1], - ["Purchase Order", "supplier", "=", filters.supplier], - ["Purchase Order", "transaction_date", "<=", filters.to_date], - ["Purchase Order", "transaction_date", ">=", filters.from_date], - ["Purchase Order", "docstatus", "=", 1], + f"`tab{supplied_items_table}`.rm_item_code as rm_item_code", + f"`tab{supplied_items_table}`.required_qty as reqd_qty", + f"`tab{supplied_items_table}`.supplied_qty as transferred_qty", ], + filters=record_filters, ) diff --git a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/test_subcontracted_raw_materials_to_be_transferred.py b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/test_subcontracted_raw_materials_to_be_transferred.py index 2791a26db7..160295776b 100644 --- a/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/test_subcontracted_raw_materials_to_be_transferred.py +++ b/erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/test_subcontracted_raw_materials_to_be_transferred.py @@ -3,24 +3,34 @@ # Compiled at: 2019-05-06 10:24:35 # Decompiled by https://python-decompiler.com -import json - import frappe from frappe.tests.utils import FrappeTestCase -from erpnext.buying.doctype.purchase_order.purchase_order import make_rm_stock_entry -from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order from erpnext.buying.report.subcontracted_raw_materials_to_be_transferred.subcontracted_raw_materials_to_be_transferred import ( execute, ) +from erpnext.controllers.subcontracting_controller import make_rm_stock_entry +from erpnext.controllers.tests.test_subcontracting_controller import ( + get_subcontracting_order, + make_service_item, +) from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry class TestSubcontractedItemToBeTransferred(FrappeTestCase): def test_pending_and_transferred_qty(self): - po = create_purchase_order( - item_code="_Test FG Item", is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) + make_service_item("Subcontracted Service Item 1") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 10, + "rate": 500, + "fg_item": "_Test FG Item", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) # Material Receipt of RMs make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=100, basic_rate=100) @@ -28,50 +38,48 @@ class TestSubcontractedItemToBeTransferred(FrappeTestCase): item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=100, basic_rate=100 ) - se = transfer_subcontracted_raw_materials(po) + transfer_subcontracted_raw_materials(sco) col, data = execute( filters=frappe._dict( { - "supplier": po.supplier, + "order_type": "Subcontracting Order", + "supplier": sco.supplier, "from_date": frappe.utils.get_datetime( - frappe.utils.add_to_date(po.transaction_date, days=-10) + frappe.utils.add_to_date(sco.transaction_date, days=-10) ), - "to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(po.transaction_date, days=10)), + "to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(sco.transaction_date, days=10)), } ) ) - po.reload() + sco.reload() - po_data = [row for row in data if row.get("purchase_order") == po.name] + sco_data = [row for row in data if row.get("subcontract_order") == sco.name] # Alphabetically sort to be certain of order - po_data = sorted(po_data, key=lambda i: i["rm_item_code"]) + sco_data = sorted(sco_data, key=lambda i: i["rm_item_code"]) - self.assertEqual(len(po_data), 2) - self.assertEqual(po_data[0]["purchase_order"], po.name) + self.assertEqual(len(sco_data), 2) + self.assertEqual(sco_data[0]["subcontract_order"], sco.name) - self.assertEqual(po_data[0]["rm_item_code"], "_Test Item") - self.assertEqual(po_data[0]["p_qty"], 8) - self.assertEqual(po_data[0]["transferred_qty"], 2) + self.assertEqual(sco_data[0]["rm_item_code"], "_Test Item") + self.assertEqual(sco_data[0]["p_qty"], 8) + self.assertEqual(sco_data[0]["transferred_qty"], 2) - self.assertEqual(po_data[1]["rm_item_code"], "_Test Item Home Desktop 100") - self.assertEqual(po_data[1]["p_qty"], 19) - self.assertEqual(po_data[1]["transferred_qty"], 1) - - se.cancel() - po.cancel() + self.assertEqual(sco_data[1]["rm_item_code"], "_Test Item Home Desktop 100") + self.assertEqual(sco_data[1]["p_qty"], 19) + self.assertEqual(sco_data[1]["transferred_qty"], 1) -def transfer_subcontracted_raw_materials(po): - # Order of supplied items fetched in PO is flaky +def transfer_subcontracted_raw_materials(sco): + # Order of supplied items fetched in SCO is flaky transfer_qty_map = {"_Test Item": 2, "_Test Item Home Desktop 100": 1} - item_1 = po.supplied_items[0].rm_item_code - item_2 = po.supplied_items[1].rm_item_code + item_1 = sco.supplied_items[0].rm_item_code + item_2 = sco.supplied_items[1].rm_item_code - rm_item = [ + rm_items = [ { - "name": po.supplied_items[0].name, + "name": sco.supplied_items[0].name, "item_code": item_1, "rm_item_code": item_1, "item_name": item_1, @@ -82,7 +90,7 @@ def transfer_subcontracted_raw_materials(po): "stock_uom": "Nos", }, { - "name": po.supplied_items[1].name, + "name": sco.supplied_items[1].name, "item_code": item_2, "rm_item_code": item_2, "item_name": item_2, @@ -93,8 +101,7 @@ def transfer_subcontracted_raw_materials(po): "stock_uom": "Nos", }, ] - rm_item_string = json.dumps(rm_item) - se = frappe.get_doc(make_rm_stock_entry(po.name, rm_item_string)) + se = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) se.from_warehouse = "_Test Warehouse - _TC" se.to_warehouse = "_Test Warehouse - _TC" se.stock_entry_type = "Send to Subcontractor" diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 78645e0d4f..70d2bc68a1 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -34,6 +34,7 @@ from erpnext.accounts.doctype.pricing_rule.utils import ( from erpnext.accounts.party import ( get_party_account, get_party_account_currency, + get_party_gle_currency, validate_party_frozen_disabled, ) from erpnext.accounts.utils import get_account_currency, get_fiscal_years, validate_fiscal_year @@ -45,6 +46,7 @@ from erpnext.controllers.print_settings import ( from erpnext.controllers.sales_and_purchase_return import validate_return from erpnext.exceptions import InvalidCurrency from erpnext.setup.utils import get_exchange_rate +from erpnext.stock.doctype.item.item import get_uom_conv_factor from erpnext.stock.doctype.packed_item.packed_item import make_packing_list from erpnext.stock.get_item_details import ( _get_item_tax_template, @@ -148,6 +150,7 @@ class AccountsController(TransactionBase): self.validate_inter_company_reference() + self.disable_pricing_rule_on_internal_transfer() self.set_incoming_rate() if self.meta.get_field("currency"): @@ -167,6 +170,7 @@ class AccountsController(TransactionBase): self.validate_party() self.validate_currency() + self.validate_party_account_currency() if self.doctype in ["Purchase Invoice", "Sales Invoice"]: pos_check_field = "is_pos" if self.doctype == "Sales Invoice" else "is_paid" @@ -382,6 +386,14 @@ class AccountsController(TransactionBase): msg += _("Please create purchase from internal sale or delivery document itself") frappe.throw(msg, title=_("Internal Sales Reference Missing")) + def disable_pricing_rule_on_internal_transfer(self): + if not self.get("ignore_pricing_rule") and self.is_internal_transfer(): + self.ignore_pricing_rule = 1 + frappe.msgprint( + _("Disabled pricing rules since this {} is an internal transfer").format(self.doctype), + alert=1, + ) + def validate_due_date(self): if self.get("is_pos"): return @@ -537,6 +549,15 @@ class AccountsController(TransactionBase): if ret.get("pricing_rules"): self.apply_pricing_rule_on_items(item, ret) self.set_pricing_rule_details(item, ret) + else: + # Transactions line item without item code + + uom = item.get("uom") + stock_uom = item.get("stock_uom") + if bool(uom) != bool(stock_uom): # xor + item.stock_uom = item.uom = uom or stock_uom + + item.conversion_factor = get_uom_conv_factor(item.get("uom"), item.get("stock_uom")) if self.doctype == "Purchase Invoice": self.set_expense_account(for_validate) @@ -1121,11 +1142,10 @@ class AccountsController(TransactionBase): { "account": item.discount_account, "against": supplier_or_customer, - dr_or_cr: flt(discount_amount, item.precision("discount_amount")), - dr_or_cr - + "_in_account_currency": flt( + dr_or_cr: flt( discount_amount * self.get("conversion_rate"), item.precision("discount_amount") ), + dr_or_cr + "_in_account_currency": flt(discount_amount, item.precision("discount_amount")), "cost_center": item.cost_center, "project": item.project, }, @@ -1140,11 +1160,11 @@ class AccountsController(TransactionBase): { "account": income_or_expense_account, "against": supplier_or_customer, - rev_dr_cr: flt(discount_amount, item.precision("discount_amount")), - rev_dr_cr - + "_in_account_currency": flt( + rev_dr_cr: flt( discount_amount * self.get("conversion_rate"), item.precision("discount_amount") ), + rev_dr_cr + + "_in_account_currency": flt(discount_amount, item.precision("discount_amount")), "cost_center": item.cost_center, "project": item.project or self.project, }, @@ -1439,6 +1459,34 @@ class AccountsController(TransactionBase): # at quotation / sales order level and we shouldn't stop someone # from creating a sales invoice if sales order is already created + def validate_party_account_currency(self): + if self.doctype not in ("Sales Invoice", "Purchase Invoice"): + return + + if self.is_opening == "Yes": + return + + party_type, party = self.get_party() + party_gle_currency = get_party_gle_currency(party_type, party, self.company) + party_account = ( + self.get("debit_to") if self.doctype == "Sales Invoice" else self.get("credit_to") + ) + party_account_currency = get_account_currency(party_account) + allow_multi_currency_invoices_against_single_party_account = frappe.db.get_singles_value( + "Accounts Settings", "allow_multi_currency_invoices_against_single_party_account" + ) + + if ( + not party_gle_currency + and (party_account_currency != self.currency) + and not allow_multi_currency_invoices_against_single_party_account + ): + frappe.throw( + _("Party Account {0} currency ({1}) and document currency ({2}) should be same").format( + frappe.bold(party_account), party_account_currency, self.currency + ) + ) + def delink_advance_entries(self, linked_doc_name): total_allocated_amount = 0 for adv in self.advances: @@ -1738,6 +1786,8 @@ class AccountsController(TransactionBase): internal_party_field = "is_internal_customer" elif self.doctype in ("Purchase Invoice", "Purchase Receipt", "Purchase Order"): internal_party_field = "is_internal_supplier" + else: + return False if self.get(internal_party_field) and (self.represents_company == self.company): return True @@ -1805,6 +1855,17 @@ class AccountsController(TransactionBase): jv.save() jv.submit() + def check_conversion_rate(self): + default_currency = erpnext.get_company_currency(self.company) + if not default_currency: + throw(_("Please enter default currency in Company Master")) + if ( + (self.currency == default_currency and flt(self.conversion_rate) != 1.00) + or not self.conversion_rate + or (self.currency != default_currency and flt(self.conversion_rate) == 1.00) + ): + throw(_("Conversion rate cannot be 0 or 1")) + @frappe.whitelist() def get_tax_rate(account_head): @@ -1833,7 +1894,7 @@ def get_default_taxes_and_charges(master_doctype, tax_template=None, company=Non def get_taxes_and_charges(master_doctype, master_name): if not master_name: return - from frappe.model import default_fields + from frappe.model import child_table_fields, default_fields tax_master = frappe.get_doc(master_doctype, master_name) @@ -1841,7 +1902,7 @@ def get_taxes_and_charges(master_doctype, master_name): for i, tax in enumerate(tax_master.get("taxes")): tax = tax.as_dict() - for fieldname in default_fields: + for fieldname in default_fields + child_table_fields: if fieldname in tax: del tax[fieldname] @@ -2006,7 +2067,7 @@ def get_advance_journal_entries( journal_entries = frappe.db.sql( """ select - "Journal Entry" as reference_type, t1.name as reference_name, + 'Journal Entry' as reference_type, t1.name as reference_name, t1.remark as remarks, t2.{0} as amount, t2.name as reference_row, t2.reference_name as against_order, t2.exchange_rate from @@ -2061,7 +2122,7 @@ def get_advance_payment_entries( payment_entries_against_order = frappe.db.sql( """ select - "Payment Entry" as reference_type, t1.name as reference_name, + 'Payment Entry' as reference_type, t1.name as reference_name, t1.remarks, t2.allocated_amount as amount, t2.name as reference_row, t2.reference_name as against_order, t1.posting_date, t1.{0} as currency, t1.{4} as exchange_rate @@ -2081,7 +2142,7 @@ def get_advance_payment_entries( if include_unallocated: unallocated_payment_entries = frappe.db.sql( """ - select "Payment Entry" as reference_type, name as reference_name, posting_date, + select 'Payment Entry' as reference_type, name as reference_name, posting_date, remarks, unallocated_amount as amount, {2} as exchange_rate, {3} as currency from `tabPayment Entry` where @@ -2386,7 +2447,7 @@ def update_bin_on_delete(row, doctype): update_bin_qty(row.item_code, row.warehouse, qty_dict) -def validate_and_delete_children(parent, data): +def validate_and_delete_children(parent, data) -> bool: deleted_children = [] updated_item_names = [d.get("docname") for d in data] for item in parent.items: @@ -2405,6 +2466,8 @@ def validate_and_delete_children(parent, data): for d in deleted_children: update_bin_on_delete(d, parent.doctype) + return bool(deleted_children) + @frappe.whitelist() def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, child_docname="items"): @@ -2451,20 +2514,55 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil parent_doctype, parent_doctype_name, child_doctype, child_docname, item_row ) - def validate_quantity(child_item, d): - if parent_doctype == "Sales Order" and flt(d.get("qty")) < flt(child_item.delivered_qty): + def validate_quantity(child_item, new_data): + if not flt(new_data.get("qty")): + frappe.throw( + _("Row # {0}: Quantity for Item {1} cannot be zero").format( + new_data.get("idx"), frappe.bold(new_data.get("item_code")) + ), + title=_("Invalid Qty"), + ) + + if parent_doctype == "Sales Order" and flt(new_data.get("qty")) < flt(child_item.delivered_qty): frappe.throw(_("Cannot set quantity less than delivered quantity")) - if parent_doctype == "Purchase Order" and flt(d.get("qty")) < flt(child_item.received_qty): + if parent_doctype == "Purchase Order" and flt(new_data.get("qty")) < flt( + child_item.received_qty + ): frappe.throw(_("Cannot set quantity less than received quantity")) + def should_update_supplied_items(doc) -> bool: + """Subcontracted PO can allow following changes *after submit*: + + 1. Change rate of subcontracting - regardless of other changes. + 2. Change qty and/or add new items and/or remove items + Exception: Transfer/Consumption is already made, qty change not allowed. + """ + + supplied_items_processed = any( + item.supplied_qty or item.consumed_qty or item.returned_qty for item in doc.supplied_items + ) + + update_supplied_items = ( + any_qty_changed or items_added_or_removed or any_conversion_factor_changed + ) + if update_supplied_items and supplied_items_processed: + frappe.throw(_("Item qty can not be updated as raw materials are already processed.")) + + return update_supplied_items + data = json.loads(trans_items) + any_qty_changed = False # updated to true if any item's qty changes + items_added_or_removed = False # updated to true if any new item is added or removed + any_conversion_factor_changed = False + sales_doctypes = ["Sales Order", "Sales Invoice", "Delivery Note", "Quotation"] parent = frappe.get_doc(parent_doctype, parent_doctype_name) check_doc_permissions(parent, "write") - validate_and_delete_children(parent, data) + _removed_items = validate_and_delete_children(parent, data) + items_added_or_removed |= _removed_items for d in data: new_child_flag = False @@ -2475,6 +2573,7 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil if not d.get("docname"): new_child_flag = True + items_added_or_removed = True check_doc_permissions(parent, "create") child_item = get_new_child_item(d) else: @@ -2497,6 +2596,7 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil qty_unchanged = prev_qty == new_qty uom_unchanged = prev_uom == new_uom conversion_factor_unchanged = prev_con_fac == new_con_fac + any_conversion_factor_changed |= not conversion_factor_unchanged date_unchanged = ( prev_date == getdate(new_date) if prev_date and new_date else False ) # in case of delivery note etc @@ -2510,6 +2610,8 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil continue validate_quantity(child_item, d) + if flt(child_item.get("qty")) != flt(d.get("qty")): + any_qty_changed = True child_item.qty = flt(d.get("qty")) rate_precision = child_item.precision("rate") or 2 @@ -2614,11 +2716,13 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil parent.update_ordered_qty() parent.update_ordered_and_reserved_qty() parent.update_receiving_percentage() - if parent.is_subcontracted: - parent.update_reserved_qty_for_subcontract() - parent.create_raw_materials_supplied("supplied_items") + if parent.is_old_subcontracting_flow: + if should_update_supplied_items(parent): + parent.update_reserved_qty_for_subcontract() + parent.create_raw_materials_supplied() parent.save() - else: + else: # Sales Order + parent.validate_warehouse() parent.update_reserved_qty() parent.update_project() parent.update_prevdoc_status("submit") diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 233b476a14..036733c0c3 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -11,8 +11,7 @@ from erpnext.accounts.doctype.budget.budget import validate_expense_against_budg from erpnext.accounts.party import get_party_details from erpnext.buying.utils import update_last_purchase_rate, validate_for_items from erpnext.controllers.sales_and_purchase_return import get_rate_for_return -from erpnext.controllers.stock_controller import StockController -from erpnext.controllers.subcontracting import Subcontracting +from erpnext.controllers.subcontracting_controller import SubcontractingController from erpnext.stock.get_item_details import get_conversion_factor from erpnext.stock.utils import get_incoming_rate @@ -21,7 +20,7 @@ class QtyMismatchError(ValidationError): pass -class BuyingController(StockController, Subcontracting): +class BuyingController(SubcontractingController): def __setup__(self): self.flags.ignore_permlevel_for_fields = ["buying_price_list", "price_list_currency"] @@ -55,7 +54,8 @@ class BuyingController(StockController, Subcontracting): # sub-contracting self.validate_for_subcontracting() - self.create_raw_materials_supplied("supplied_items") + if self.get("is_old_subcontracting_flow"): + self.create_raw_materials_supplied() self.set_landed_cost_voucher_amount() if self.doctype in ("Purchase Receipt", "Purchase Invoice"): @@ -256,13 +256,18 @@ class BuyingController(StockController, Subcontracting): ) qty_in_stock_uom = flt(item.qty * item.conversion_factor) - item.rm_supp_cost = self.get_supplied_items_cost(item.name, reset_outgoing_rate) - item.valuation_rate = ( - item.base_net_amount - + item.item_tax_amount - + item.rm_supp_cost - + flt(item.landed_cost_voucher_amount) - ) / qty_in_stock_uom + if self.get("is_old_subcontracting_flow"): + item.rm_supp_cost = self.get_supplied_items_cost(item.name, reset_outgoing_rate) + item.valuation_rate = ( + item.base_net_amount + + item.item_tax_amount + + item.rm_supp_cost + + flt(item.landed_cost_voucher_amount) + ) / qty_in_stock_uom + else: + item.valuation_rate = ( + item.base_net_amount + item.item_tax_amount + flt(item.landed_cost_voucher_amount) + ) / qty_in_stock_uom else: item.valuation_rate = 0.0 @@ -300,92 +305,42 @@ class BuyingController(StockController, Subcontracting): raise_error_if_no_rate=False, ) - rate = flt(outgoing_rate * d.conversion_factor, d.precision("rate")) + rate = flt(outgoing_rate * (d.conversion_factor or 1), d.precision("rate")) else: rate = frappe.db.get_value(ref_doctype, d.get(frappe.scrub(ref_doctype)), "rate") if self.is_internal_transfer(): if rate != d.rate: d.rate = rate - d.discount_percentage = 0 - d.discount_amount = 0 frappe.msgprint( _( "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer" ).format(d.idx), alert=1, ) - - def get_supplied_items_cost(self, item_row_id, reset_outgoing_rate=True): - supplied_items_cost = 0.0 - for d in self.get("supplied_items"): - if d.reference_name == item_row_id: - if reset_outgoing_rate and frappe.get_cached_value("Item", d.rm_item_code, "is_stock_item"): - rate = get_incoming_rate( - { - "item_code": d.rm_item_code, - "warehouse": self.supplier_warehouse, - "posting_date": self.posting_date, - "posting_time": self.posting_time, - "qty": -1 * d.consumed_qty, - "serial_no": d.serial_no, - "batch_no": d.batch_no, - } - ) - - if rate > 0: - d.rate = rate - - d.amount = flt(flt(d.consumed_qty) * flt(d.rate), d.precision("amount")) - supplied_items_cost += flt(d.amount) - - return supplied_items_cost + d.discount_percentage = 0.0 + d.discount_amount = 0.0 + d.margin_rate_or_amount = 0.0 def validate_for_subcontracting(self): - if self.is_subcontracted: + if self.is_subcontracted and self.get("is_old_subcontracting_flow"): if self.doctype in ["Purchase Receipt", "Purchase Invoice"] and not self.supplier_warehouse: frappe.throw(_("Supplier Warehouse mandatory for sub-contracted {0}").format(self.doctype)) for item in self.get("items"): if item in self.sub_contracted_items and not item.bom: frappe.throw(_("Please select BOM in BOM field for Item {0}").format(item.item_code)) - if self.doctype != "Purchase Order": return - for row in self.get("supplied_items"): if not row.reserve_warehouse: msg = f"Reserved Warehouse is mandatory for the Item {frappe.bold(row.rm_item_code)} in Raw Materials supplied" frappe.throw(_(msg)) else: for item in self.get("items"): - if item.bom: + if item.get("bom"): item.bom = None - def create_raw_materials_supplied(self, raw_material_table): - if self.is_subcontracted: - self.set_materials_for_subcontracted_items(raw_material_table) - - elif self.doctype in ["Purchase Receipt", "Purchase Invoice"]: - for item in self.get("items"): - item.rm_supp_cost = 0.0 - - if not self.is_subcontracted and self.get("supplied_items"): - self.set("supplied_items", []) - - @property - def sub_contracted_items(self): - if not hasattr(self, "_sub_contracted_items"): - self._sub_contracted_items = [] - item_codes = list(set(item.item_code for item in self.get("items"))) - if item_codes: - items = frappe.get_all( - "Item", filters={"name": ["in", item_codes], "is_sub_contracted_item": 1} - ) - self._sub_contracted_items = [item.name for item in items] - - return self._sub_contracted_items - def set_qty_as_per_stock_uom(self): for d in self.get("items"): if d.meta.get_field("stock_qty"): @@ -509,7 +464,9 @@ class BuyingController(StockController, Subcontracting): sle.update( { "incoming_rate": incoming_rate, - "recalculate_rate": 1 if (self.is_subcontracted and d.bom) or d.from_warehouse else 0, + "recalculate_rate": 1 + if (self.is_subcontracted and (d.bom or d.fg_item)) or d.from_warehouse + else 0, } ) sl_entries.append(sle) @@ -537,7 +494,8 @@ class BuyingController(StockController, Subcontracting): ) ) - self.make_sl_entries_for_supplier_warehouse(sl_entries) + if self.get("is_old_subcontracting_flow"): + self.make_sl_entries_for_supplier_warehouse(sl_entries) self.make_sl_entries( sl_entries, allow_negative_stock=allow_negative_stock, @@ -564,26 +522,9 @@ class BuyingController(StockController, Subcontracting): ) po_obj.update_ordered_qty(po_item_rows) - if self.is_subcontracted: + if self.get("is_old_subcontracting_flow"): po_obj.update_reserved_qty_for_subcontract() - def make_sl_entries_for_supplier_warehouse(self, sl_entries): - if hasattr(self, "supplied_items"): - for d in self.get("supplied_items"): - # negative quantity is passed, as raw material qty has to be decreased - # when PR is submitted and it has to be increased when PR is cancelled - sl_entries.append( - self.get_sl_entries( - d, - { - "item_code": d.rm_item_code, - "warehouse": self.supplier_warehouse, - "actual_qty": -1 * flt(d.consumed_qty), - "dependant_sle_voucher_detail_no": d.reference_name, - }, - ) - ) - def on_submit(self): if self.get("is_return"): return @@ -807,7 +748,7 @@ class BuyingController(StockController, Subcontracting): if self.doctype == "Material Request": return - if hasattr(self, "is_subcontracted") and self.is_subcontracted: + if self.get("is_old_subcontracting_flow"): validate_item_type(self, "is_sub_contracted_item", "subcontracted") else: validate_item_type(self, "is_purchase_item", "purchase") diff --git a/erpnext/controllers/employee_boarding_controller.py b/erpnext/controllers/employee_boarding_controller.py index 8ff397dbfc..c06fb5930d 100644 --- a/erpnext/controllers/employee_boarding_controller.py +++ b/erpnext/controllers/employee_boarding_controller.py @@ -7,8 +7,8 @@ from frappe.desk.form import assign_to from frappe.model.document import Document from frappe.utils import add_days, flt, unique -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday +from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee +from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday class EmployeeBoardingController(Document): diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index abe9977c84..243ebb66e2 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -29,11 +29,11 @@ def employee_query(doctype, txt, searchfield, start, page_len, filters): or employee_name like %(txt)s) {fcond} {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, employee_name), locate(%(_txt)s, employee_name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), + (case when locate(%(_txt)s, employee_name) > 0 then locate(%(_txt)s, employee_name) else 99999 end), idx desc, name, employee_name - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( **{ "fields": ", ".join(fields), "key": searchfield, @@ -60,12 +60,12 @@ def lead_query(doctype, txt, searchfield, start, page_len, filters): or company_name like %(txt)s) {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, lead_name), locate(%(_txt)s, lead_name), 99999), - if(locate(%(_txt)s, company_name), locate(%(_txt)s, company_name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), + (case when locate(%(_txt)s, lead_name) > 0 then locate(%(_txt)s, lead_name) else 99999 end), + (case when locate(%(_txt)s, company_name) > 0 then locate(%(_txt)s, company_name) else 99999 end), idx desc, name, lead_name - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( **{"fields": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)} ), {"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len}, @@ -96,11 +96,11 @@ def customer_query(doctype, txt, searchfield, start, page_len, filters): and ({scond}) and disabled=0 {fcond} {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, customer_name), locate(%(_txt)s, customer_name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), + (case when locate(%(_txt)s, customer_name) > 0 then locate(%(_txt)s, customer_name) else 99999 end), idx desc, name, customer_name - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( **{ "fields": ", ".join(fields), "scond": searchfields, @@ -130,14 +130,14 @@ def supplier_query(doctype, txt, searchfield, start, page_len, filters): where docstatus < 2 and ({key} like %(txt)s or supplier_name like %(txt)s) and disabled=0 - and (on_hold = 0 or (on_hold = 1 and CURDATE() > release_date)) + and (on_hold = 0 or (on_hold = 1 and CURRENT_DATE > release_date)) {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, supplier_name), locate(%(_txt)s, supplier_name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), + (case when locate(%(_txt)s, supplier_name) > 0 then locate(%(_txt)s, supplier_name) else 99999 end), idx desc, name, supplier_name - limit %(start)s, %(page_len)s """.format( + limit %(page_len)s offset %(start)s""".format( **{"field": ", ".join(fields), "key": searchfield, "mcond": get_match_cond(doctype)} ), {"txt": "%%%s%%" % txt, "_txt": txt.replace("%", ""), "start": start, "page_len": page_len}, @@ -162,11 +162,12 @@ def tax_account_query(doctype, txt, searchfield, start, page_len, filters): {account_type_condition} AND is_group = 0 AND company = %(company)s + AND disabled = %(disabled)s AND (account_currency = %(currency)s or ifnull(account_currency, '') = '') AND `{searchfield}` LIKE %(txt)s {mcond} ORDER BY idx DESC, name - LIMIT %(offset)s, %(limit)s + LIMIT %(limit)s offset %(offset)s """.format( account_type_condition=account_type_condition, searchfield=searchfield, @@ -175,6 +176,7 @@ def tax_account_query(doctype, txt, searchfield, start, page_len, filters): dict( account_types=filters.get("account_type"), company=filters.get("company"), + disabled=filters.get("disabled", 0), currency=company_currency, txt="%{}%".format(txt), offset=start, @@ -303,15 +305,15 @@ def bom(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """select {fields} - from tabBOM - where tabBOM.docstatus=1 - and tabBOM.is_active=1 - and tabBOM.`{key}` like %(txt)s + from `tabBOM` + where `tabBOM`.docstatus=1 + and `tabBOM`.is_active=1 + and `tabBOM`.`{key}` like %(txt)s {fcond} {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), idx desc, name - limit %(start)s, %(page_len)s """.format( + limit %(page_len)s offset %(start)s""".format( fields=", ".join(fields), fcond=get_filters_cond(doctype, filters, conditions).replace("%", "%%"), mcond=get_match_cond(doctype).replace("%", "%%"), @@ -338,18 +340,18 @@ def get_project_name(doctype, txt, searchfield, start, page_len, filters): fields = get_fields("Project", ["name", "project_name"]) searchfields = frappe.get_meta("Project").get_search_fields() - searchfields = " or ".join([field + " like %(txt)s" for field in searchfields]) + searchfields = " or ".join(["`tabProject`." + field + " like %(txt)s" for field in searchfields]) return frappe.db.sql( """select {fields} from `tabProject` where - `tabProject`.status not in ("Completed", "Cancelled") + `tabProject`.status not in ('Completed', 'Cancelled') and {cond} {scond} {match_cond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - idx desc, + (case when locate(%(_txt)s, `tabProject`.name) > 0 then locate(%(_txt)s, `tabProject`.name) else 99999 end), + `tabProject`.idx desc, `tabProject`.name asc - limit {start}, {page_len}""".format( + limit {page_len} offset {start}""".format( fields=", ".join(["`tabProject`.{0}".format(f) for f in fields]), cond=cond, scond=searchfields, @@ -372,7 +374,7 @@ def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, from `tabDelivery Note` where `tabDelivery Note`.`%(key)s` like %(txt)s and `tabDelivery Note`.docstatus = 1 - and status not in ("Stopped", "Closed") %(fcond)s + and status not in ('Stopped', 'Closed') %(fcond)s and ( (`tabDelivery Note`.is_return = 0 and `tabDelivery Note`.per_billed < 100) or (`tabDelivery Note`.grand_total = 0 and `tabDelivery Note`.per_billed < 100) @@ -381,7 +383,7 @@ def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, and return_against in (select name from `tabDelivery Note` where per_billed < 100) ) ) - %(mcond)s order by `tabDelivery Note`.`%(key)s` asc limit %(start)s, %(page_len)s + %(mcond)s order by `tabDelivery Note`.`%(key)s` asc limit %(page_len)s offset %(start)s """ % { "fields": ", ".join(["`tabDelivery Note`.{0}".format(f) for f in fields]), @@ -454,7 +456,7 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters): {match_conditions} group by batch_no {having_clause} order by batch.expiry_date, sle.batch_no desc - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( search_columns=search_columns, cond=cond, match_conditions=get_match_cond(doctype), @@ -481,7 +483,7 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters): {match_conditions} order by expiry_date, name desc - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( cond, search_columns=search_columns, search_cond=search_cond, @@ -652,7 +654,7 @@ def warehouse_query(doctype, txt, searchfield, start, page_len, filters): filter_dict = get_doctype_wise_filters(filters) query = """select `tabWarehouse`.name, - CONCAT_WS(" : ", "Actual Qty", ifnull(round(`tabBin`.actual_qty, 2), 0 )) actual_qty + CONCAT_WS(' : ', 'Actual Qty', ifnull(round(`tabBin`.actual_qty, 2), 0 )) actual_qty from `tabWarehouse` left join `tabBin` on `tabBin`.warehouse = `tabWarehouse`.name {bin_conditions} where @@ -660,7 +662,7 @@ def warehouse_query(doctype, txt, searchfield, start, page_len, filters): {fcond} {mcond} order by ifnull(`tabBin`.actual_qty, 0) desc limit - {start}, {page_len} + {page_len} offset {start} """.format( bin_conditions=get_filters_cond( doctype, filter_dict.get("Bin"), bin_conditions, ignore_permissions=True @@ -689,7 +691,7 @@ def get_doctype_wise_filters(filters): def get_batch_numbers(doctype, txt, searchfield, start, page_len, filters): query = """select batch_id from `tabBatch` where disabled = 0 - and (expiry_date >= CURDATE() or expiry_date IS NULL) + and (expiry_date >= CURRENT_DATE or expiry_date IS NULL) and name like {txt}""".format( txt=frappe.db.escape("%{0}%".format(txt)) ) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index bd4b59b385..04a0dfa3d4 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -77,7 +77,7 @@ def validate_returned_items(doc): if doc.doctype != "Purchase Invoice": select_fields += ",serial_no, batch_no" - if doc.doctype in ["Purchase Invoice", "Purchase Receipt"]: + if doc.doctype in ["Purchase Invoice", "Purchase Receipt", "Subcontracting Receipt"]: select_fields += ",rejected_qty, received_qty" for d in frappe.db.sql( @@ -161,7 +161,7 @@ def validate_returned_items(doc): def validate_quantity(doc, args, ref, valid_items, already_returned_items): fields = ["stock_qty"] - if doc.doctype in ["Purchase Receipt", "Purchase Invoice"]: + if doc.doctype in ["Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"]: fields.extend(["received_qty", "rejected_qty"]) already_returned_data = already_returned_items.get(args.item_code) or {} @@ -224,7 +224,7 @@ def get_ref_item_dict(valid_items, ref_item_row): if ref_item_row.get("rate", 0) > item_dict["rate"]: item_dict["rate"] = ref_item_row.get("rate", 0) - if ref_item_row.parenttype in ["Purchase Invoice", "Purchase Receipt"]: + if ref_item_row.parenttype in ["Purchase Invoice", "Purchase Receipt", "Subcontracting Receipt"]: item_dict["received_qty"] += ref_item_row.received_qty item_dict["rejected_qty"] += ref_item_row.rejected_qty @@ -239,7 +239,7 @@ def get_ref_item_dict(valid_items, ref_item_row): def get_already_returned_items(doc): column = "child.item_code, sum(abs(child.qty)) as qty, sum(abs(child.stock_qty)) as stock_qty" - if doc.doctype in ["Purchase Invoice", "Purchase Receipt"]: + if doc.doctype in ["Purchase Invoice", "Purchase Receipt", "Subcontracting Receipt"]: column += """, sum(abs(child.rejected_qty) * child.conversion_factor) as rejected_qty, sum(abs(child.received_qty) * child.conversion_factor) as received_qty""" @@ -281,17 +281,21 @@ def get_returned_qty_map_for_row(return_against, party, row_name, doctype): child_doctype = doctype + " Item" reference_field = "dn_detail" if doctype == "Delivery Note" else frappe.scrub(child_doctype) - if doctype in ("Purchase Receipt", "Purchase Invoice"): + if doctype in ("Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"): party_type = "supplier" else: party_type = "customer" fields = [ "sum(abs(`tab{0}`.qty)) as qty".format(child_doctype), - "sum(abs(`tab{0}`.stock_qty)) as stock_qty".format(child_doctype), ] - if doctype in ("Purchase Receipt", "Purchase Invoice"): + if doctype != "Subcontracting Receipt": + fields += [ + "sum(abs(`tab{0}`.stock_qty)) as stock_qty".format(child_doctype), + ] + + if doctype in ("Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"): fields += [ "sum(abs(`tab{0}`.rejected_qty)) as rejected_qty".format(child_doctype), "sum(abs(`tab{0}`.received_qty)) as received_qty".format(child_doctype), @@ -316,7 +320,7 @@ def get_returned_qty_map_for_row(return_against, party, row_name, doctype): return data[0] -def make_return_doc(doctype, source_name, target_doc=None): +def make_return_doc(doctype: str, source_name: str, target_doc=None): from frappe.model.mapper import get_mapped_doc from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos @@ -342,7 +346,7 @@ def make_return_doc(doctype, source_name, target_doc=None): # look for Print Heading "Debit Note" doc.select_print_heading = frappe.db.get_value("Print Heading", _("Debit Note")) - for tax in doc.get("taxes"): + for tax in doc.get("taxes") or []: if tax.charge_type == "Actual": tax.tax_amount = -1 * tax.tax_amount @@ -381,8 +385,11 @@ def make_return_doc(doctype, source_name, target_doc=None): for d in doc.get("packed_items"): d.qty = d.qty * -1 - doc.discount_amount = -1 * source.discount_amount - doc.run_method("calculate_taxes_and_totals") + if doc.get("discount_amount"): + doc.discount_amount = -1 * source.discount_amount + + if doctype != "Subcontracting Receipt": + doc.run_method("calculate_taxes_and_totals") def update_item(source_doc, target_doc, source_parent): target_doc.qty = -1 * source_doc.qty @@ -393,7 +400,7 @@ def make_return_doc(doctype, source_name, target_doc=None): if serial_nos: target_doc.serial_no = "\n".join(serial_nos) - if doctype == "Purchase Receipt": + if doctype in ["Purchase Receipt", "Subcontracting Receipt"]: returned_qty_map = get_returned_qty_map_for_row( source_parent.name, source_parent.supplier, source_doc.name, doctype ) @@ -405,15 +412,24 @@ def make_return_doc(doctype, source_name, target_doc=None): ) target_doc.qty = -1 * flt(source_doc.qty - (returned_qty_map.get("qty") or 0)) - target_doc.stock_qty = -1 * flt(source_doc.stock_qty - (returned_qty_map.get("stock_qty") or 0)) - target_doc.received_stock_qty = -1 * flt( - source_doc.received_stock_qty - (returned_qty_map.get("received_stock_qty") or 0) - ) + if hasattr(target_doc, "stock_qty"): + target_doc.stock_qty = -1 * flt( + source_doc.stock_qty - (returned_qty_map.get("stock_qty") or 0) + ) + target_doc.received_stock_qty = -1 * flt( + source_doc.received_stock_qty - (returned_qty_map.get("received_stock_qty") or 0) + ) - target_doc.purchase_order = source_doc.purchase_order - target_doc.purchase_order_item = source_doc.purchase_order_item - target_doc.rejected_warehouse = source_doc.rejected_warehouse - target_doc.purchase_receipt_item = source_doc.name + if doctype == "Subcontracting Receipt": + target_doc.subcontracting_order = source_doc.subcontracting_order + target_doc.subcontracting_order_item = source_doc.subcontracting_order_item + target_doc.rejected_warehouse = source_doc.rejected_warehouse + target_doc.subcontracting_receipt_item = source_doc.name + else: + target_doc.purchase_order = source_doc.purchase_order + target_doc.purchase_order_item = source_doc.purchase_order_item + target_doc.rejected_warehouse = source_doc.rejected_warehouse + target_doc.purchase_receipt_item = source_doc.name elif doctype == "Purchase Invoice": returned_qty_map = get_returned_qty_map_for_row( @@ -525,7 +541,7 @@ def get_rate_for_return( item_row, ) - if voucher_type in ("Purchase Receipt", "Purchase Invoice"): + if voucher_type in ("Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"): select_field = "incoming_rate" else: select_field = "abs(stock_value_difference / actual_qty)" @@ -560,6 +576,7 @@ def get_return_against_item_fields(voucher_type): "Purchase Invoice": "purchase_invoice_item", "Delivery Note": "dn_detail", "Sales Invoice": "sales_invoice_item", + "Subcontracting Receipt": "subcontracting_receipt_item", } return return_against_item_fields[voucher_type] diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 19fedb3c38..a3d41ab29a 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -447,15 +447,16 @@ class SellingController(StockController): rate = flt(d.incoming_rate * d.conversion_factor, d.precision("rate")) if d.rate != rate: d.rate = rate + frappe.msgprint( + _( + "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer" + ).format(d.idx), + alert=1, + ) - d.discount_percentage = 0 - d.discount_amount = 0 - frappe.msgprint( - _( - "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer" - ).format(d.idx), - alert=1, - ) + d.discount_percentage = 0.0 + d.discount_amount = 0.0 + d.margin_rate_or_amount = 0.0 elif self.get("return_against"): # Get incoming rate of return entry from reference document @@ -614,13 +615,13 @@ class SellingController(StockController): stock_items = [d.item_code, d.description, d.warehouse, ""] non_stock_items = [d.item_code, d.description] + duplicate_items_msg = _("Item {0} entered multiple times.").format(frappe.bold(d.item_code)) + duplicate_items_msg += "

" + duplicate_items_msg += _("Please enable {} in {} to allow same item in multiple rows").format( + frappe.bold("Allow Item to Be Added Multiple Times in a Transaction"), + get_link_to_form("Selling Settings", "Selling Settings"), + ) if frappe.db.get_value("Item", d.item_code, "is_stock_item") == 1: - duplicate_items_msg = _("Item {0} entered multiple times.").format(frappe.bold(d.item_code)) - duplicate_items_msg += "

" - duplicate_items_msg += _("Please enable {} in {} to allow same item in multiple rows").format( - frappe.bold("Allow Item to Be Added Multiple Times in a Transaction"), - get_link_to_form("Selling Settings", "Selling Settings"), - ) if stock_items in check_list: frappe.throw(duplicate_items_msg) else: diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 3c0a10e086..197d2ba2dc 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -35,7 +35,8 @@ status_map = { ["Draft", None], ["Open", "eval:self.docstatus==1"], ["Lost", "eval:self.status=='Lost'"], - ["Ordered", "has_sales_order"], + ["Partially Ordered", "is_partially_ordered"], + ["Ordered", "is_fully_ordered"], ["Cancelled", "eval:self.docstatus==2"], ], "Sales Order": [ @@ -351,9 +352,9 @@ class StatusUpdater(Document): for args in self.status_updater: # condition to include current record (if submit or no if cancel) if self.docstatus == 1: - args["cond"] = ' or parent="%s"' % self.name.replace('"', '"') + args["cond"] = " or parent='%s'" % self.name.replace('"', '"') else: - args["cond"] = ' and parent!="%s"' % self.name.replace('"', '"') + args["cond"] = " and parent!='%s'" % self.name.replace('"', '"') self._update_children(args, update_modified) @@ -383,7 +384,7 @@ class StatusUpdater(Document): args["second_source_condition"] = frappe.db.sql( """ select ifnull((select sum(%(second_source_field)s) from `tab%(second_source_dt)s` - where `%(second_join_field)s`="%(detail_id)s" + where `%(second_join_field)s`='%(detail_id)s' and (`tab%(second_source_dt)s`.docstatus=1) %(second_source_extra_cond)s), 0) """ % args @@ -397,7 +398,7 @@ class StatusUpdater(Document): frappe.db.sql( """ (select ifnull(sum(%(source_field)s), 0) - from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" + from `tab%(source_dt)s` where `%(join_field)s`='%(detail_id)s' and (docstatus=1 %(cond)s) %(extra_cond)s) """ % args @@ -442,9 +443,9 @@ class StatusUpdater(Document): """update `tab%(target_parent_dt)s` set %(target_parent_field)s = round( ifnull((select - ifnull(sum(if(abs(%(target_ref_field)s) > abs(%(target_field)s), abs(%(target_field)s), abs(%(target_ref_field)s))), 0) + ifnull(sum(case when abs(%(target_ref_field)s) > abs(%(target_field)s) then abs(%(target_field)s) else abs(%(target_ref_field)s) end), 0) / sum(abs(%(target_ref_field)s)) * 100 - from `tab%(target_dt)s` where parent="%(name)s" having sum(abs(%(target_ref_field)s)) > 0), 0), 6) + from `tab%(target_dt)s` where parent='%(name)s' having sum(abs(%(target_ref_field)s)) > 0), 0), 6) %(update_modified)s where name='%(name)s'""" % args @@ -454,9 +455,9 @@ class StatusUpdater(Document): if args.get("status_field"): frappe.db.sql( """update `tab%(target_parent_dt)s` - set %(status_field)s = if(%(target_parent_field)s<0.001, - 'Not %(keyword)s', if(%(target_parent_field)s>=99.999999, - 'Fully %(keyword)s', 'Partly %(keyword)s')) + set %(status_field)s = (case when %(target_parent_field)s<0.001 then 'Not %(keyword)s' + else case when %(target_parent_field)s>=99.999999 then 'Fully %(keyword)s' + else 'Partly %(keyword)s' end end) where name='%(name)s'""" % args ) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index feec42f43a..e27718a9b4 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -18,6 +18,9 @@ from erpnext.accounts.general_ledger import ( from erpnext.accounts.utils import get_fiscal_year from erpnext.controllers.accounts_controller import AccountsController from erpnext.stock import get_warehouse_account_map +from erpnext.stock.doctype.inventory_dimension.inventory_dimension import ( + get_evaluated_inventory_dimension, +) from erpnext.stock.stock_ledger import get_items_to_be_repost @@ -166,7 +169,7 @@ class StockController(AccountsController): "against": warehouse_account[sle.warehouse]["account"], "cost_center": item_row.cost_center, "remarks": self.get("remarks") or _("Accounting Entry for Stock"), - "credit": flt(sle.stock_value_difference, precision), + "debit": -1 * flt(sle.stock_value_difference, precision), "project": item_row.get("project") or self.get("project"), "is_opening": item_row.get("is_opening") or self.get("is_opening") or "No", }, @@ -364,8 +367,16 @@ class StockController(AccountsController): ) sl_dict.update(args) + self.update_inventory_dimensions(d, sl_dict) + return sl_dict + def update_inventory_dimensions(self, row, sl_dict) -> None: + dimensions = get_evaluated_inventory_dimension(row, sl_dict, parent_doc=self) + for dimension in dimensions: + if dimension and row.get(dimension.source_fieldname): + sl_dict[dimension.target_fieldname] = row.get(dimension.source_fieldname) + def make_sl_entries(self, sl_entries, allow_negative_stock=False, via_landed_cost_voucher=False): from erpnext.stock.stock_ledger import make_sl_entries diff --git a/erpnext/controllers/subcontracting.py b/erpnext/controllers/subcontracting.py deleted file mode 100644 index 4bce06ff9b..0000000000 --- a/erpnext/controllers/subcontracting.py +++ /dev/null @@ -1,469 +0,0 @@ -import copy -from collections import defaultdict - -import frappe -from frappe import _ -from frappe.utils import cint, flt, get_link_to_form - -from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos - - -class Subcontracting: - def set_materials_for_subcontracted_items(self, raw_material_table): - if self.doctype == "Purchase Invoice" and not self.update_stock: - return - - self.raw_material_table = raw_material_table - self.__identify_change_in_item_table() - self.__prepare_supplied_items() - self.__validate_supplied_items() - - def __prepare_supplied_items(self): - self.initialized_fields() - self.__get_purchase_orders() - self.__get_pending_qty_to_receive() - self.get_available_materials() - self.__remove_changed_rows() - self.__set_supplied_items() - - def initialized_fields(self): - self.available_materials = frappe._dict() - self.__transferred_items = frappe._dict() - self.alternative_item_details = frappe._dict() - self.__get_backflush_based_on() - - def __get_backflush_based_on(self): - self.backflush_based_on = frappe.db.get_single_value( - "Buying Settings", "backflush_raw_materials_of_subcontract_based_on" - ) - - def __get_purchase_orders(self): - self.purchase_orders = [] - - if self.doctype == "Purchase Order": - return - - self.purchase_orders = [d.purchase_order for d in self.items if d.purchase_order] - - def __identify_change_in_item_table(self): - self.__changed_name = [] - self.__reference_name = [] - - if self.doctype == "Purchase Order" or self.is_new(): - self.set(self.raw_material_table, []) - return - - item_dict = self.__get_data_before_save() - if not item_dict: - return True - - for n_row in self.items: - self.__reference_name.append(n_row.name) - if (n_row.name not in item_dict) or (n_row.item_code, n_row.qty) != item_dict[n_row.name]: - self.__changed_name.append(n_row.name) - - if item_dict.get(n_row.name): - del item_dict[n_row.name] - - self.__changed_name.extend(item_dict.keys()) - - def __get_data_before_save(self): - item_dict = {} - if self.doctype in ["Purchase Receipt", "Purchase Invoice"] and self._doc_before_save: - for row in self._doc_before_save.get("items"): - item_dict[row.name] = (row.item_code, row.qty) - - return item_dict - - def get_available_materials(self): - """Get the available raw materials which has been transferred to the supplier. - available_materials = { - (item_code, subcontracted_item, purchase_order): { - 'qty': 1, 'serial_no': [ABC], 'batch_no': {'batch1': 1}, 'data': item_details - } - } - """ - if not self.purchase_orders: - return - - for row in self.__get_transferred_items(): - key = (row.rm_item_code, row.main_item_code, row.purchase_order) - - if key not in self.available_materials: - self.available_materials.setdefault( - key, - frappe._dict( - { - "qty": 0, - "serial_no": [], - "batch_no": defaultdict(float), - "item_details": row, - "po_details": [], - } - ), - ) - - details = self.available_materials[key] - details.qty += row.qty - details.po_details.append(row.po_detail) - - if row.serial_no: - details.serial_no.extend(get_serial_nos(row.serial_no)) - - if row.batch_no: - details.batch_no[row.batch_no] += row.qty - - self.__set_alternative_item_details(row) - - self.__transferred_items = copy.deepcopy(self.available_materials) - for doctype in ["Purchase Receipt", "Purchase Invoice"]: - self.__update_consumed_materials(doctype) - - def __update_consumed_materials(self, doctype, return_consumed_items=False): - """Deduct the consumed materials from the available materials.""" - - pr_items = self.__get_received_items(doctype) - if not pr_items: - return ([], {}) if return_consumed_items else None - - pr_items = {d.name: d.get(self.get("po_field") or "purchase_order") for d in pr_items} - consumed_materials = self.__get_consumed_items(doctype, pr_items.keys()) - - if return_consumed_items: - return (consumed_materials, pr_items) - - for row in consumed_materials: - key = (row.rm_item_code, row.main_item_code, pr_items.get(row.reference_name)) - if not self.available_materials.get(key): - continue - - self.available_materials[key]["qty"] -= row.consumed_qty - if row.serial_no: - self.available_materials[key]["serial_no"] = list( - set(self.available_materials[key]["serial_no"]) - set(get_serial_nos(row.serial_no)) - ) - - if row.batch_no: - self.available_materials[key]["batch_no"][row.batch_no] -= row.consumed_qty - - def __get_transferred_items(self): - fields = ["`tabStock Entry`.`purchase_order`"] - alias_dict = { - "item_code": "rm_item_code", - "subcontracted_item": "main_item_code", - "basic_rate": "rate", - } - - child_table_fields = [ - "item_code", - "item_name", - "description", - "qty", - "basic_rate", - "amount", - "serial_no", - "uom", - "subcontracted_item", - "stock_uom", - "batch_no", - "conversion_factor", - "s_warehouse", - "t_warehouse", - "item_group", - "po_detail", - ] - - if self.backflush_based_on == "BOM": - child_table_fields.append("original_item") - - for field in child_table_fields: - fields.append(f"`tabStock Entry Detail`.`{field}` As {alias_dict.get(field, field)}") - - filters = [ - ["Stock Entry", "docstatus", "=", 1], - ["Stock Entry", "purpose", "=", "Send to Subcontractor"], - ["Stock Entry", "purchase_order", "in", self.purchase_orders], - ] - - return frappe.get_all("Stock Entry", fields=fields, filters=filters) - - def __get_received_items(self, doctype): - fields = [] - self.po_field = "purchase_order" - - for field in ["name", self.po_field, "parent"]: - fields.append(f"`tab{doctype} Item`.`{field}`") - - filters = [ - [doctype, "docstatus", "=", 1], - [f"{doctype} Item", self.po_field, "in", self.purchase_orders], - ] - if doctype == "Purchase Invoice": - filters.append(["Purchase Invoice", "update_stock", "=", 1]) - - return frappe.get_all(f"{doctype}", fields=fields, filters=filters) - - def __get_consumed_items(self, doctype, pr_items): - return frappe.get_all( - "Purchase Receipt Item Supplied", - fields=[ - "serial_no", - "rm_item_code", - "reference_name", - "batch_no", - "consumed_qty", - "main_item_code", - ], - filters={"docstatus": 1, "reference_name": ("in", list(pr_items)), "parenttype": doctype}, - ) - - def __set_alternative_item_details(self, row): - if row.get("original_item"): - self.alternative_item_details[row.get("original_item")] = row - - def __get_pending_qty_to_receive(self): - """Get qty to be received against the purchase order.""" - - self.qty_to_be_received = defaultdict(float) - - if ( - self.doctype != "Purchase Order" and self.backflush_based_on != "BOM" and self.purchase_orders - ): - for row in frappe.get_all( - "Purchase Order Item", - fields=["item_code", "(qty - received_qty) as qty", "parent", "name"], - filters={"docstatus": 1, "parent": ("in", self.purchase_orders)}, - ): - - self.qty_to_be_received[(row.item_code, row.parent)] += row.qty - - def __get_materials_from_bom(self, item_code, bom_no, exploded_item=0): - doctype = "BOM Item" if not exploded_item else "BOM Explosion Item" - fields = [f"`tab{doctype}`.`stock_qty` / `tabBOM`.`quantity` as qty_consumed_per_unit"] - - alias_dict = { - "item_code": "rm_item_code", - "name": "bom_detail_no", - "source_warehouse": "reserve_warehouse", - } - for field in [ - "item_code", - "name", - "rate", - "stock_uom", - "source_warehouse", - "description", - "item_name", - "stock_uom", - ]: - fields.append(f"`tab{doctype}`.`{field}` As {alias_dict.get(field, field)}") - - filters = [ - [doctype, "parent", "=", bom_no], - [doctype, "docstatus", "=", 1], - ["BOM", "item", "=", item_code], - [doctype, "sourced_by_supplier", "=", 0], - ] - - return ( - frappe.get_all("BOM", fields=fields, filters=filters, order_by=f"`tab{doctype}`.`idx`") or [] - ) - - def __remove_changed_rows(self): - if not self.__changed_name: - return - - i = 1 - self.set(self.raw_material_table, []) - for d in self._doc_before_save.supplied_items: - if d.reference_name in self.__changed_name: - continue - - if d.reference_name not in self.__reference_name: - continue - - d.idx = i - self.append("supplied_items", d) - - i += 1 - - def __set_supplied_items(self): - self.bom_items = {} - - has_supplied_items = True if self.get(self.raw_material_table) else False - for row in self.items: - if self.doctype != "Purchase Order" and ( - (self.__changed_name and row.name not in self.__changed_name) - or (has_supplied_items and not self.__changed_name) - ): - continue - - if self.doctype == "Purchase Order" or self.backflush_based_on == "BOM": - for bom_item in self.__get_materials_from_bom( - row.item_code, row.bom, row.get("include_exploded_items") - ): - qty = flt(bom_item.qty_consumed_per_unit) * flt(row.qty) * row.conversion_factor - bom_item.main_item_code = row.item_code - self.__update_reserve_warehouse(bom_item, row) - self.__set_alternative_item(bom_item) - self.__add_supplied_item(row, bom_item, qty) - - elif self.backflush_based_on != "BOM": - for key, transfer_item in self.available_materials.items(): - if (key[1], key[2]) == (row.item_code, row.purchase_order) and transfer_item.qty > 0: - qty = self.__get_qty_based_on_material_transfer(row, transfer_item) or 0 - transfer_item.qty -= qty - self.__add_supplied_item(row, transfer_item.get("item_details"), qty) - - if self.qty_to_be_received: - self.qty_to_be_received[(row.item_code, row.purchase_order)] -= row.qty - - def __update_reserve_warehouse(self, row, item): - if self.doctype == "Purchase Order": - row.reserve_warehouse = self.set_reserve_warehouse or item.warehouse - - def __get_qty_based_on_material_transfer(self, item_row, transfer_item): - key = (item_row.item_code, item_row.purchase_order) - - if self.qty_to_be_received == item_row.qty: - return transfer_item.qty - - if self.qty_to_be_received: - qty = (flt(item_row.qty) * flt(transfer_item.qty)) / flt(self.qty_to_be_received.get(key, 0)) - transfer_item.item_details.required_qty = transfer_item.qty - - if transfer_item.serial_no or frappe.get_cached_value( - "UOM", transfer_item.item_details.stock_uom, "must_be_whole_number" - ): - return frappe.utils.ceil(qty) - - return qty - - def __set_alternative_item(self, bom_item): - if self.alternative_item_details.get(bom_item.rm_item_code): - bom_item.update(self.alternative_item_details[bom_item.rm_item_code]) - - def __add_supplied_item(self, item_row, bom_item, qty): - bom_item.conversion_factor = item_row.conversion_factor - rm_obj = self.append(self.raw_material_table, bom_item) - rm_obj.reference_name = item_row.name - - if self.doctype == "Purchase Order": - rm_obj.required_qty = qty - else: - rm_obj.consumed_qty = 0 - rm_obj.purchase_order = item_row.purchase_order - self.__set_batch_nos(bom_item, item_row, rm_obj, qty) - - def __set_batch_nos(self, bom_item, item_row, rm_obj, qty): - key = (rm_obj.rm_item_code, item_row.item_code, item_row.purchase_order) - - if self.available_materials.get(key) and self.available_materials[key]["batch_no"]: - new_rm_obj = None - for batch_no, batch_qty in self.available_materials[key]["batch_no"].items(): - if batch_qty >= qty: - self.__set_batch_no_as_per_qty(item_row, rm_obj, batch_no, qty) - self.available_materials[key]["batch_no"][batch_no] -= qty - return - - elif qty > 0 and batch_qty > 0: - qty -= batch_qty - new_rm_obj = self.append(self.raw_material_table, bom_item) - new_rm_obj.reference_name = item_row.name - self.__set_batch_no_as_per_qty(item_row, new_rm_obj, batch_no, batch_qty) - self.available_materials[key]["batch_no"][batch_no] = 0 - - if abs(qty) > 0 and not new_rm_obj: - self.__set_consumed_qty(rm_obj, qty) - else: - self.__set_consumed_qty(rm_obj, qty, bom_item.required_qty or qty) - self.__set_serial_nos(item_row, rm_obj) - - def __set_consumed_qty(self, rm_obj, consumed_qty, required_qty=0): - rm_obj.required_qty = required_qty - rm_obj.consumed_qty = consumed_qty - - def __set_batch_no_as_per_qty(self, item_row, rm_obj, batch_no, qty): - rm_obj.update( - { - "consumed_qty": qty, - "batch_no": batch_no, - "required_qty": qty, - "purchase_order": item_row.purchase_order, - } - ) - - self.__set_serial_nos(item_row, rm_obj) - - def __set_serial_nos(self, item_row, rm_obj): - key = (rm_obj.rm_item_code, item_row.item_code, item_row.purchase_order) - if self.available_materials.get(key) and self.available_materials[key]["serial_no"]: - used_serial_nos = self.available_materials[key]["serial_no"][0 : cint(rm_obj.consumed_qty)] - rm_obj.serial_no = "\n".join(used_serial_nos) - - # Removed the used serial nos from the list - for sn in used_serial_nos: - self.available_materials[key]["serial_no"].remove(sn) - - def set_consumed_qty_in_po(self): - # Update consumed qty back in the purchase order - if not self.is_subcontracted: - return - - self.__get_purchase_orders() - itemwise_consumed_qty = defaultdict(float) - for doctype in ["Purchase Receipt", "Purchase Invoice"]: - consumed_items, pr_items = self.__update_consumed_materials(doctype, return_consumed_items=True) - - for row in consumed_items: - key = (row.rm_item_code, row.main_item_code, pr_items.get(row.reference_name)) - itemwise_consumed_qty[key] += row.consumed_qty - - self.__update_consumed_qty_in_po(itemwise_consumed_qty) - - def __update_consumed_qty_in_po(self, itemwise_consumed_qty): - fields = ["main_item_code", "rm_item_code", "parent", "supplied_qty", "name"] - filters = {"docstatus": 1, "parent": ("in", self.purchase_orders)} - - for row in frappe.get_all( - "Purchase Order Item Supplied", fields=fields, filters=filters, order_by="idx" - ): - key = (row.rm_item_code, row.main_item_code, row.parent) - consumed_qty = itemwise_consumed_qty.get(key, 0) - - if row.supplied_qty < consumed_qty: - consumed_qty = row.supplied_qty - - itemwise_consumed_qty[key] -= consumed_qty - frappe.db.set_value("Purchase Order Item Supplied", row.name, "consumed_qty", consumed_qty) - - def __validate_supplied_items(self): - if self.doctype not in ["Purchase Invoice", "Purchase Receipt"]: - return - - for row in self.get(self.raw_material_table): - key = (row.rm_item_code, row.main_item_code, row.purchase_order) - if not self.__transferred_items or not self.__transferred_items.get(key): - return - - self.__validate_batch_no(row, key) - self.__validate_serial_no(row, key) - - def __validate_batch_no(self, row, key): - if row.get("batch_no") and row.get("batch_no") not in self.__transferred_items.get(key).get( - "batch_no" - ): - link = get_link_to_form("Purchase Order", row.purchase_order) - msg = f'The Batch No {frappe.bold(row.get("batch_no"))} has not supplied against the Purchase Order {link}' - frappe.throw(_(msg), title=_("Incorrect Batch Consumed")) - - def __validate_serial_no(self, row, key): - if row.get("serial_no"): - serial_nos = get_serial_nos(row.get("serial_no")) - incorrect_sn = set(serial_nos).difference(self.__transferred_items.get(key).get("serial_no")) - - if incorrect_sn: - incorrect_sn = "\n".join(incorrect_sn) - link = get_link_to_form("Purchase Order", row.purchase_order) - msg = f"The Serial Nos {incorrect_sn} has not supplied against the Purchase Order {link}" - frappe.throw(_(msg), title=_("Incorrect Serial Number Consumed")) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py new file mode 100644 index 0000000000..2a2f8f562e --- /dev/null +++ b/erpnext/controllers/subcontracting_controller.py @@ -0,0 +1,902 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import copy +import json +from collections import defaultdict + +import frappe +from frappe import _ +from frappe.utils import cint, cstr, flt, get_link_to_form + +from erpnext.controllers.stock_controller import StockController +from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos +from erpnext.stock.utils import get_incoming_rate + + +class SubcontractingController(StockController): + def __init__(self, *args, **kwargs): + super(SubcontractingController, self).__init__(*args, **kwargs) + if self.get("is_old_subcontracting_flow"): + self.subcontract_data = frappe._dict( + { + "order_doctype": "Purchase Order", + "order_field": "purchase_order", + "rm_detail_field": "po_detail", + "receipt_supplied_items_field": "Purchase Receipt Item Supplied", + "order_supplied_items_field": "Purchase Order Item Supplied", + } + ) + else: + self.subcontract_data = frappe._dict( + { + "order_doctype": "Subcontracting Order", + "order_field": "subcontracting_order", + "rm_detail_field": "sco_rm_detail", + "receipt_supplied_items_field": "Subcontracting Receipt Supplied Item", + "order_supplied_items_field": "Subcontracting Order Supplied Item", + } + ) + + def before_validate(self): + if self.doctype in ["Subcontracting Order", "Subcontracting Receipt"]: + self.remove_empty_rows() + self.set_items_conversion_factor() + + def validate(self): + if self.doctype in ["Subcontracting Order", "Subcontracting Receipt"]: + self.validate_items() + self.create_raw_materials_supplied() + else: + super(SubcontractingController, self).validate() + + def remove_empty_rows(self): + for key in ["service_items", "items", "supplied_items"]: + if self.get(key): + idx = 1 + for item in self.get(key)[:]: + if not (item.get("item_code") or item.get("main_item_code")): + self.get(key).remove(item) + else: + item.idx = idx + idx += 1 + + def set_items_conversion_factor(self): + for item in self.get("items"): + if not item.conversion_factor: + item.conversion_factor = 1 + + def validate_items(self): + for item in self.items: + if not frappe.get_value("Item", item.item_code, "is_sub_contracted_item"): + msg = f"Item {item.item_name} must be a subcontracted item." + frappe.throw(_(msg)) + if item.bom: + bom = frappe.get_doc("BOM", item.bom) + if not bom.is_active: + msg = f"Please select an active BOM for Item {item.item_name}." + frappe.throw(_(msg)) + if bom.item != item.item_code: + msg = f"Please select an valid BOM for Item {item.item_name}." + frappe.throw(_(msg)) + + def __get_data_before_save(self): + item_dict = {} + if ( + self.doctype in ["Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt"] + and self._doc_before_save + ): + for row in self._doc_before_save.get("items"): + item_dict[row.name] = (row.item_code, row.qty) + + return item_dict + + def __identify_change_in_item_table(self): + self.__changed_name = [] + self.__reference_name = [] + + if self.doctype in ["Purchase Order", "Subcontracting Order"] or self.is_new(): + self.set(self.raw_material_table, []) + return + + item_dict = self.__get_data_before_save() + if not item_dict: + return True + + for row in self.items: + self.__reference_name.append(row.name) + if (row.name not in item_dict) or (row.item_code, row.qty) != item_dict[row.name]: + self.__changed_name.append(row.name) + + if item_dict.get(row.name): + del item_dict[row.name] + + self.__changed_name.extend(item_dict.keys()) + + def __get_backflush_based_on(self): + self.backflush_based_on = frappe.db.get_single_value( + "Buying Settings", "backflush_raw_materials_of_subcontract_based_on" + ) + + def initialized_fields(self): + self.available_materials = frappe._dict() + self.__transferred_items = frappe._dict() + self.alternative_item_details = frappe._dict() + self.__get_backflush_based_on() + + def __get_subcontract_orders(self): + self.subcontract_orders = [] + + if self.doctype in ["Purchase Order", "Subcontracting Order"]: + return + + self.subcontract_orders = [ + item.get(self.subcontract_data.order_field) + for item in self.items + if item.get(self.subcontract_data.order_field) + ] + + def __get_pending_qty_to_receive(self): + """Get qty to be received against the subcontract order.""" + + self.qty_to_be_received = defaultdict(float) + + if ( + self.doctype != self.subcontract_data.order_doctype + and self.backflush_based_on != "BOM" + and self.subcontract_orders + ): + for row in frappe.get_all( + f"{self.subcontract_data.order_doctype} Item", + fields=["item_code", "(qty - received_qty) as qty", "parent", "name"], + filters={"docstatus": 1, "parent": ("in", self.subcontract_orders)}, + ): + + self.qty_to_be_received[(row.item_code, row.parent)] += row.qty + + def __get_transferred_items(self): + fields = [f"`tabStock Entry`.`{self.subcontract_data.order_field}`"] + alias_dict = { + "item_code": "rm_item_code", + "subcontracted_item": "main_item_code", + "basic_rate": "rate", + } + + child_table_fields = [ + "item_code", + "item_name", + "description", + "qty", + "basic_rate", + "amount", + "serial_no", + "uom", + "subcontracted_item", + "stock_uom", + "batch_no", + "conversion_factor", + "s_warehouse", + "t_warehouse", + "item_group", + self.subcontract_data.rm_detail_field, + ] + + if self.backflush_based_on == "BOM": + child_table_fields.append("original_item") + + for field in child_table_fields: + fields.append(f"`tabStock Entry Detail`.`{field}` As {alias_dict.get(field, field)}") + + filters = [ + ["Stock Entry", "docstatus", "=", 1], + ["Stock Entry", "purpose", "=", "Send to Subcontractor"], + ["Stock Entry", self.subcontract_data.order_field, "in", self.subcontract_orders], + ] + + return frappe.get_all("Stock Entry", fields=fields, filters=filters) + + def __set_alternative_item_details(self, row): + if row.get("original_item"): + self.alternative_item_details[row.get("original_item")] = row + + def __get_received_items(self, doctype): + fields = [] + for field in ["name", self.subcontract_data.order_field, "parent"]: + fields.append(f"`tab{doctype} Item`.`{field}`") + + filters = [ + [doctype, "docstatus", "=", 1], + [f"{doctype} Item", self.subcontract_data.order_field, "in", self.subcontract_orders], + ] + if doctype == "Purchase Invoice": + filters.append(["Purchase Invoice", "update_stock", "=", 1]) + + return frappe.get_all(f"{doctype}", fields=fields, filters=filters) + + def __get_consumed_items(self, doctype, receipt_items): + return frappe.get_all( + self.subcontract_data.receipt_supplied_items_field, + fields=[ + "serial_no", + "rm_item_code", + "reference_name", + "batch_no", + "consumed_qty", + "main_item_code", + ], + filters={"docstatus": 1, "reference_name": ("in", list(receipt_items)), "parenttype": doctype}, + ) + + def __update_consumed_materials(self, doctype, return_consumed_items=False): + """Deduct the consumed materials from the available materials.""" + + receipt_items = self.__get_received_items(doctype) + if not receipt_items: + return ([], {}) if return_consumed_items else None + + receipt_items = { + item.name: item.get(self.subcontract_data.order_field) for item in receipt_items + } + consumed_materials = self.__get_consumed_items(doctype, receipt_items.keys()) + + if return_consumed_items: + return (consumed_materials, receipt_items) + + for row in consumed_materials: + key = (row.rm_item_code, row.main_item_code, receipt_items.get(row.reference_name)) + if not self.available_materials.get(key): + continue + + self.available_materials[key]["qty"] -= row.consumed_qty + if row.serial_no: + self.available_materials[key]["serial_no"] = list( + set(self.available_materials[key]["serial_no"]) - set(get_serial_nos(row.serial_no)) + ) + + if row.batch_no: + self.available_materials[key]["batch_no"][row.batch_no] -= row.consumed_qty + + def get_available_materials(self): + """Get the available raw materials which has been transferred to the supplier. + available_materials = { + (item_code, subcontracted_item, subcontract_order): { + 'qty': 1, 'serial_no': [ABC], 'batch_no': {'batch1': 1}, 'data': item_details + } + } + """ + if not self.subcontract_orders: + return + + for row in self.__get_transferred_items(): + key = (row.rm_item_code, row.main_item_code, row.get(self.subcontract_data.order_field)) + + if key not in self.available_materials: + self.available_materials.setdefault( + key, + frappe._dict( + { + "qty": 0, + "serial_no": [], + "batch_no": defaultdict(float), + "item_details": row, + f"{self.subcontract_data.rm_detail_field}s": [], + } + ), + ) + + details = self.available_materials[key] + details.qty += row.qty + details[f"{self.subcontract_data.rm_detail_field}s"].append( + row.get(self.subcontract_data.rm_detail_field) + ) + + if row.serial_no: + details.serial_no.extend(get_serial_nos(row.serial_no)) + + if row.batch_no: + details.batch_no[row.batch_no] += row.qty + + self.__set_alternative_item_details(row) + + self.__transferred_items = copy.deepcopy(self.available_materials) + if self.get("is_old_subcontracting_flow"): + for doctype in ["Purchase Receipt", "Purchase Invoice"]: + self.__update_consumed_materials(doctype) + else: + self.__update_consumed_materials("Subcontracting Receipt") + + def __remove_changed_rows(self): + if not self.__changed_name: + return + + i = 1 + self.set(self.raw_material_table, []) + for item in self._doc_before_save.supplied_items: + if item.reference_name in self.__changed_name: + continue + + if item.reference_name not in self.__reference_name: + continue + + item.idx = i + self.append("supplied_items", item) + + i += 1 + + def __get_materials_from_bom(self, item_code, bom_no, exploded_item=0): + doctype = "BOM Item" if not exploded_item else "BOM Explosion Item" + fields = [f"`tab{doctype}`.`stock_qty` / `tabBOM`.`quantity` as qty_consumed_per_unit"] + + alias_dict = { + "item_code": "rm_item_code", + "name": "bom_detail_no", + "source_warehouse": "reserve_warehouse", + } + for field in [ + "item_code", + "name", + "rate", + "stock_uom", + "source_warehouse", + "description", + "item_name", + "stock_uom", + ]: + fields.append(f"`tab{doctype}`.`{field}` As {alias_dict.get(field, field)}") + + filters = [ + [doctype, "parent", "=", bom_no], + [doctype, "docstatus", "=", 1], + ["BOM", "item", "=", item_code], + [doctype, "sourced_by_supplier", "=", 0], + ] + + return ( + frappe.get_all("BOM", fields=fields, filters=filters, order_by=f"`tab{doctype}`.`idx`") or [] + ) + + def __update_reserve_warehouse(self, row, item): + if self.doctype == self.subcontract_data.order_doctype: + row.reserve_warehouse = self.set_reserve_warehouse or item.warehouse + + def __set_alternative_item(self, bom_item): + if self.alternative_item_details.get(bom_item.rm_item_code): + bom_item.update(self.alternative_item_details[bom_item.rm_item_code]) + + def __set_serial_nos(self, item_row, rm_obj): + key = (rm_obj.rm_item_code, item_row.item_code, item_row.get(self.subcontract_data.order_field)) + if self.available_materials.get(key) and self.available_materials[key]["serial_no"]: + used_serial_nos = self.available_materials[key]["serial_no"][0 : cint(rm_obj.consumed_qty)] + rm_obj.serial_no = "\n".join(used_serial_nos) + + # Removed the used serial nos from the list + for sn in used_serial_nos: + self.available_materials[key]["serial_no"].remove(sn) + + def __set_batch_no_as_per_qty(self, item_row, rm_obj, batch_no, qty): + rm_obj.update( + { + "consumed_qty": qty, + "batch_no": batch_no, + "required_qty": qty, + self.subcontract_data.order_field: item_row.get(self.subcontract_data.order_field), + } + ) + + self.__set_serial_nos(item_row, rm_obj) + + def __set_consumed_qty(self, rm_obj, consumed_qty, required_qty=0): + rm_obj.required_qty = required_qty + rm_obj.consumed_qty = consumed_qty + + def __set_batch_nos(self, bom_item, item_row, rm_obj, qty): + key = (rm_obj.rm_item_code, item_row.item_code, item_row.get(self.subcontract_data.order_field)) + + if self.available_materials.get(key) and self.available_materials[key]["batch_no"]: + new_rm_obj = None + for batch_no, batch_qty in self.available_materials[key]["batch_no"].items(): + if batch_qty >= qty: + self.__set_batch_no_as_per_qty(item_row, rm_obj, batch_no, qty) + self.available_materials[key]["batch_no"][batch_no] -= qty + return + + elif qty > 0 and batch_qty > 0: + qty -= batch_qty + new_rm_obj = self.append(self.raw_material_table, bom_item) + new_rm_obj.reference_name = item_row.name + self.__set_batch_no_as_per_qty(item_row, new_rm_obj, batch_no, batch_qty) + self.available_materials[key]["batch_no"][batch_no] = 0 + + if abs(qty) > 0 and not new_rm_obj: + self.__set_consumed_qty(rm_obj, qty) + else: + self.__set_consumed_qty(rm_obj, qty, bom_item.required_qty or qty) + self.__set_serial_nos(item_row, rm_obj) + + def __add_supplied_item(self, item_row, bom_item, qty): + bom_item.conversion_factor = item_row.conversion_factor + rm_obj = self.append(self.raw_material_table, bom_item) + rm_obj.reference_name = item_row.name + + if self.doctype == "Subcontracting Receipt": + args = frappe._dict( + { + "item_code": rm_obj.rm_item_code, + "warehouse": self.supplier_warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time, + "qty": -1 * flt(rm_obj.consumed_qty), + "serial_no": rm_obj.serial_no, + "batch_no": rm_obj.batch_no, + "voucher_type": self.doctype, + "voucher_no": self.name, + "company": self.company, + "allow_zero_valuation": 1, + } + ) + rm_obj.rate = get_incoming_rate(args) + + if self.doctype == self.subcontract_data.order_doctype: + rm_obj.required_qty = qty + rm_obj.amount = rm_obj.required_qty * rm_obj.rate + else: + rm_obj.consumed_qty = 0 + setattr( + rm_obj, self.subcontract_data.order_field, item_row.get(self.subcontract_data.order_field) + ) + self.__set_batch_nos(bom_item, item_row, rm_obj, qty) + + def __get_qty_based_on_material_transfer(self, item_row, transfer_item): + key = (item_row.item_code, item_row.get(self.subcontract_data.order_field)) + + if self.qty_to_be_received == item_row.qty: + return transfer_item.qty + + if self.qty_to_be_received: + qty = (flt(item_row.qty) * flt(transfer_item.qty)) / flt(self.qty_to_be_received.get(key, 0)) + transfer_item.item_details.required_qty = transfer_item.qty + + if transfer_item.serial_no or frappe.get_cached_value( + "UOM", transfer_item.item_details.stock_uom, "must_be_whole_number" + ): + return frappe.utils.ceil(qty) + + return qty + + def __set_supplied_items(self): + self.bom_items = {} + + has_supplied_items = True if self.get(self.raw_material_table) else False + for row in self.items: + if self.doctype != self.subcontract_data.order_doctype and ( + (self.__changed_name and row.name not in self.__changed_name) + or (has_supplied_items and not self.__changed_name) + ): + continue + + if self.doctype == self.subcontract_data.order_doctype or self.backflush_based_on == "BOM": + for bom_item in self.__get_materials_from_bom( + row.item_code, row.bom, row.get("include_exploded_items") + ): + qty = flt(bom_item.qty_consumed_per_unit) * flt(row.qty) * row.conversion_factor + bom_item.main_item_code = row.item_code + self.__update_reserve_warehouse(bom_item, row) + self.__set_alternative_item(bom_item) + self.__add_supplied_item(row, bom_item, qty) + + elif self.backflush_based_on != "BOM": + for key, transfer_item in self.available_materials.items(): + if (key[1], key[2]) == ( + row.item_code, + row.get(self.subcontract_data.order_field), + ) and transfer_item.qty > 0: + qty = self.__get_qty_based_on_material_transfer(row, transfer_item) or 0 + transfer_item.qty -= qty + self.__add_supplied_item(row, transfer_item.get("item_details"), qty) + + if self.qty_to_be_received: + self.qty_to_be_received[ + (row.item_code, row.get(self.subcontract_data.order_field)) + ] -= row.qty + + def __prepare_supplied_items(self): + self.initialized_fields() + self.__get_subcontract_orders() + self.__get_pending_qty_to_receive() + self.get_available_materials() + self.__remove_changed_rows() + self.__set_supplied_items() + + def __validate_batch_no(self, row, key): + if row.get("batch_no") and row.get("batch_no") not in self.__transferred_items.get(key).get( + "batch_no" + ): + link = get_link_to_form( + self.subcontract_data.order_doctype, row.get(self.subcontract_data.order_field) + ) + msg = f'The Batch No {frappe.bold(row.get("batch_no"))} has not supplied against the {self.subcontract_data.order_doctype} {link}' + frappe.throw(_(msg), title=_("Incorrect Batch Consumed")) + + def __validate_serial_no(self, row, key): + if row.get("serial_no"): + serial_nos = get_serial_nos(row.get("serial_no")) + incorrect_sn = set(serial_nos).difference(self.__transferred_items.get(key).get("serial_no")) + + if incorrect_sn: + incorrect_sn = "\n".join(incorrect_sn) + link = get_link_to_form( + self.subcontract_data.order_doctype, row.get(self.subcontract_data.order_field) + ) + msg = f"The Serial Nos {incorrect_sn} has not supplied against the {self.subcontract_data.order_doctype} {link}" + frappe.throw(_(msg), title=_("Incorrect Serial Number Consumed")) + + def __validate_supplied_items(self): + if self.doctype not in ["Purchase Invoice", "Purchase Receipt", "Subcontracting Receipt"]: + return + + for row in self.get(self.raw_material_table): + key = (row.rm_item_code, row.main_item_code, row.get(self.subcontract_data.order_field)) + if not self.__transferred_items or not self.__transferred_items.get(key): + return + + self.__validate_batch_no(row, key) + self.__validate_serial_no(row, key) + + def set_materials_for_subcontracted_items(self, raw_material_table): + if self.doctype == "Purchase Invoice" and not self.update_stock: + return + + self.raw_material_table = raw_material_table + self.__identify_change_in_item_table() + self.__prepare_supplied_items() + self.__validate_supplied_items() + + def create_raw_materials_supplied(self, raw_material_table="supplied_items"): + self.set_materials_for_subcontracted_items(raw_material_table) + + if self.doctype in ["Subcontracting Receipt", "Purchase Receipt", "Purchase Invoice"]: + for item in self.get("items"): + item.rm_supp_cost = 0.0 + + def __update_consumed_qty_in_subcontract_order(self, itemwise_consumed_qty): + fields = ["main_item_code", "rm_item_code", "parent", "supplied_qty", "name"] + filters = {"docstatus": 1, "parent": ("in", self.subcontract_orders)} + + for row in frappe.get_all( + self.subcontract_data.order_supplied_items_field, fields=fields, filters=filters, order_by="idx" + ): + key = (row.rm_item_code, row.main_item_code, row.parent) + consumed_qty = itemwise_consumed_qty.get(key, 0) + + if row.supplied_qty < consumed_qty: + consumed_qty = row.supplied_qty + + itemwise_consumed_qty[key] -= consumed_qty + frappe.db.set_value( + self.subcontract_data.order_supplied_items_field, row.name, "consumed_qty", consumed_qty + ) + + def set_consumed_qty_in_subcontract_order(self): + # Update consumed qty back in the subcontract order + if self.doctype in ["Subcontracting Order", "Subcontracting Receipt"] or self.get( + "is_old_subcontracting_flow" + ): + self.__get_subcontract_orders() + itemwise_consumed_qty = defaultdict(float) + if self.get("is_old_subcontracting_flow"): + doctypes = ["Purchase Receipt", "Purchase Invoice"] + else: + doctypes = ["Subcontracting Receipt"] + + for doctype in doctypes: + consumed_items, receipt_items = self.__update_consumed_materials( + doctype, return_consumed_items=True + ) + + for row in consumed_items: + key = (row.rm_item_code, row.main_item_code, receipt_items.get(row.reference_name)) + itemwise_consumed_qty[key] += row.consumed_qty + + self.__update_consumed_qty_in_subcontract_order(itemwise_consumed_qty) + + def update_ordered_and_reserved_qty(self): + sco_map = {} + for item in self.get("items"): + if self.doctype == "Subcontracting Receipt" and item.subcontracting_order: + sco_map.setdefault(item.subcontracting_order, []).append(item.subcontracting_order_item) + + for sco, sco_item_rows in sco_map.items(): + if sco and sco_item_rows: + sco_doc = frappe.get_doc("Subcontracting Order", sco) + + if sco_doc.status in ["Closed", "Cancelled"]: + frappe.throw( + _("{0} {1} is cancelled or closed").format(_("Subcontracting Order"), sco), + frappe.InvalidStatusError, + ) + + sco_doc.update_ordered_qty_for_subcontracting(sco_item_rows) + sco_doc.update_reserved_qty_for_subcontracting() + + def make_sl_entries_for_supplier_warehouse(self, sl_entries): + if hasattr(self, "supplied_items"): + for item in self.get("supplied_items"): + # negative quantity is passed, as raw material qty has to be decreased + # when SCR is submitted and it has to be increased when SCR is cancelled + sl_entries.append( + self.get_sl_entries( + item, + { + "item_code": item.rm_item_code, + "warehouse": self.supplier_warehouse, + "actual_qty": -1 * flt(item.consumed_qty), + "dependant_sle_voucher_detail_no": item.reference_name, + }, + ) + ) + + def update_stock_ledger(self, allow_negative_stock=False, via_landed_cost_voucher=False): + self.update_ordered_and_reserved_qty() + + sl_entries = [] + stock_items = self.get_stock_items() + + for item in self.get("items"): + if item.item_code in stock_items and item.warehouse: + scr_qty = flt(item.qty) * flt(item.conversion_factor) + + if scr_qty: + sle = self.get_sl_entries( + item, {"actual_qty": flt(scr_qty), "serial_no": cstr(item.serial_no).strip()} + ) + rate_db_precision = 6 if cint(self.precision("rate", item)) <= 6 else 9 + incoming_rate = flt(item.rate, rate_db_precision) + sle.update( + { + "incoming_rate": incoming_rate, + "recalculate_rate": 1, + } + ) + sl_entries.append(sle) + + if flt(item.rejected_qty) != 0: + sl_entries.append( + self.get_sl_entries( + item, + { + "warehouse": item.rejected_warehouse, + "actual_qty": flt(item.rejected_qty) * flt(item.conversion_factor), + "serial_no": cstr(item.rejected_serial_no).strip(), + "incoming_rate": 0.0, + "recalculate_rate": 1, + }, + ) + ) + + self.make_sl_entries_for_supplier_warehouse(sl_entries) + self.make_sl_entries( + sl_entries, + allow_negative_stock=allow_negative_stock, + via_landed_cost_voucher=via_landed_cost_voucher, + ) + + def get_supplied_items_cost(self, item_row_id, reset_outgoing_rate=True): + supplied_items_cost = 0.0 + for item in self.get("supplied_items"): + if item.reference_name == item_row_id: + if ( + self.get("is_old_subcontracting_flow") + and reset_outgoing_rate + and frappe.get_cached_value("Item", item.rm_item_code, "is_stock_item") + ): + rate = get_incoming_rate( + { + "item_code": item.rm_item_code, + "warehouse": self.supplier_warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time, + "qty": -1 * item.consumed_qty, + "serial_no": item.serial_no, + "batch_no": item.batch_no, + } + ) + + if rate > 0: + item.rate = rate + + item.amount = flt(flt(item.consumed_qty) * flt(item.rate), item.precision("amount")) + supplied_items_cost += item.amount + + return supplied_items_cost + + def set_subcontracting_order_status(self): + if self.doctype == "Subcontracting Order": + self.update_status() + elif self.doctype == "Subcontracting Receipt": + self.__get_subcontract_orders + + if self.subcontract_orders: + for sco in set(self.subcontract_orders): + sco_doc = frappe.get_doc("Subcontracting Order", sco) + sco_doc.update_status() + + @frappe.whitelist() + def get_current_stock(self): + if self.doctype in ["Purchase Receipt", "Subcontracting Receipt"]: + for item in self.get("supplied_items"): + if self.supplier_warehouse: + actual_qty = frappe.db.get_value( + "Bin", + {"item_code": item.rm_item_code, "warehouse": self.supplier_warehouse}, + "actual_qty", + ) + item.current_stock = flt(actual_qty) or 0 + + @property + def sub_contracted_items(self): + if not hasattr(self, "_sub_contracted_items"): + self._sub_contracted_items = [] + item_codes = list(set(item.item_code for item in self.get("items"))) + if item_codes: + items = frappe.get_all( + "Item", filters={"name": ["in", item_codes], "is_sub_contracted_item": 1} + ) + self._sub_contracted_items = [item.name for item in items] + + return self._sub_contracted_items + + +def get_item_details(items): + item = frappe.qb.DocType("Item") + item_list = ( + frappe.qb.from_(item) + .select(item.item_code, item.description, item.allow_alternative_item) + .where(item.name.isin(items)) + .run(as_dict=True) + ) + + item_details = {} + for item in item_list: + item_details[item.item_code] = item + + return item_details + + +@frappe.whitelist() +def make_rm_stock_entry(subcontract_order, rm_items, order_doctype="Subcontracting Order"): + rm_items_list = rm_items + + if isinstance(rm_items, str): + rm_items_list = json.loads(rm_items) + elif not rm_items: + frappe.throw(_("No Items available for transfer")) + + if rm_items_list: + fg_items = list(set(item["item_code"] for item in rm_items_list)) + else: + frappe.throw(_("No Items selected for transfer")) + + if subcontract_order: + subcontract_order = frappe.get_doc(order_doctype, subcontract_order) + + if fg_items: + items = tuple(set(item["rm_item_code"] for item in rm_items_list)) + item_wh = get_item_details(items) + + stock_entry = frappe.new_doc("Stock Entry") + stock_entry.purpose = "Send to Subcontractor" + if order_doctype == "Purchase Order": + stock_entry.purchase_order = subcontract_order.name + else: + stock_entry.subcontracting_order = subcontract_order.name + stock_entry.supplier = subcontract_order.supplier + stock_entry.supplier_name = subcontract_order.supplier_name + stock_entry.supplier_address = subcontract_order.supplier_address + stock_entry.address_display = subcontract_order.address_display + stock_entry.company = subcontract_order.company + stock_entry.to_warehouse = subcontract_order.supplier_warehouse + stock_entry.set_stock_entry_type() + + if order_doctype == "Purchase Order": + rm_detail_field = "po_detail" + else: + rm_detail_field = "sco_rm_detail" + + for item_code in fg_items: + for rm_item_data in rm_items_list: + if rm_item_data["item_code"] == item_code: + rm_item_code = rm_item_data["rm_item_code"] + items_dict = { + rm_item_code: { + rm_detail_field: rm_item_data.get("name"), + "item_name": rm_item_data["item_name"], + "description": item_wh.get(rm_item_code, {}).get("description", ""), + "qty": rm_item_data["qty"], + "from_warehouse": rm_item_data["warehouse"], + "stock_uom": rm_item_data["stock_uom"], + "serial_no": rm_item_data.get("serial_no"), + "batch_no": rm_item_data.get("batch_no"), + "main_item_code": rm_item_data["item_code"], + "allow_alternative_item": item_wh.get(rm_item_code, {}).get("allow_alternative_item"), + } + } + stock_entry.add_to_stock_entry_detail(items_dict) + return stock_entry.as_dict() + else: + frappe.throw(_("No Items selected for transfer")) + return subcontract_order.name + + +def add_items_in_ste( + ste_doc, row, qty, rm_details, rm_detail_field="sco_rm_detail", batch_no=None +): + item = ste_doc.append("items", row.item_details) + + rm_detail = list(set(row.get(f"{rm_detail_field}s")).intersection(rm_details)) + item.update( + { + "qty": qty, + "batch_no": batch_no, + "basic_rate": row.item_details["rate"], + rm_detail_field: rm_detail[0] if rm_detail else "", + "s_warehouse": row.item_details["t_warehouse"], + "t_warehouse": row.item_details["s_warehouse"], + "item_code": row.item_details["rm_item_code"], + "subcontracted_item": row.item_details["main_item_code"], + "serial_no": "\n".join(row.serial_no) if row.serial_no else "", + } + ) + + +def make_return_stock_entry_for_subcontract( + available_materials, order_doc, rm_details, order_doctype="Subcontracting Order" +): + ste_doc = frappe.new_doc("Stock Entry") + ste_doc.purpose = "Material Transfer" + + if order_doctype == "Purchase Order": + ste_doc.purchase_order = order_doc.name + rm_detail_field = "po_detail" + else: + ste_doc.subcontracting_order = order_doc.name + rm_detail_field = "sco_rm_detail" + ste_doc.company = order_doc.company + ste_doc.is_return = 1 + + for key, value in available_materials.items(): + if not value.qty: + continue + + if value.batch_no: + for batch_no, qty in value.batch_no.items(): + if qty > 0: + add_items_in_ste(ste_doc, value, value.qty, rm_details, rm_detail_field, batch_no) + else: + add_items_in_ste(ste_doc, value, value.qty, rm_details, rm_detail_field) + + ste_doc.set_stock_entry_type() + ste_doc.calculate_rate_and_amount() + + return ste_doc + + +@frappe.whitelist() +def get_materials_from_supplier( + subcontract_order, rm_details, order_doctype="Subcontracting Order" +): + if isinstance(rm_details, str): + rm_details = json.loads(rm_details) + + doc = frappe.get_cached_doc(order_doctype, subcontract_order) + doc.initialized_fields() + doc.subcontract_orders = [doc.name] + doc.get_available_materials() + + if not doc.available_materials: + frappe.throw( + _("Materials are already received against the {0} {1}").format(order_doctype, subcontract_order) + ) + + return make_return_stock_entry_for_subcontract( + doc.available_materials, doc, rm_details, order_doctype + ) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 2144055b34..0d8cffe03f 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -500,6 +500,9 @@ class calculate_taxes_and_totals(object): else: self.doc.grand_total = flt(self.doc.net_total) + if self.doc.apply_discount_on == "Grand Total" and self.doc.get("is_cash_or_non_trade_discount"): + self.doc.grand_total -= self.doc.discount_amount + if self.doc.get("taxes"): self.doc.total_taxes_and_charges = flt( self.doc.grand_total - self.doc.net_total - flt(self.doc.rounding_adjustment), @@ -594,6 +597,12 @@ class calculate_taxes_and_totals(object): if not self.doc.apply_discount_on: frappe.throw(_("Please select Apply Discount On")) + if self.doc.apply_discount_on == "Grand Total" and self.doc.get( + "is_cash_or_non_trade_discount" + ): + self.discount_amount_applied = True + return + self.doc.base_discount_amount = flt( self.doc.discount_amount * self.doc.conversion_rate, self.doc.precision("base_discount_amount") ) diff --git a/erpnext/controllers/tests/test_subcontracting_controller.py b/erpnext/controllers/tests/test_subcontracting_controller.py new file mode 100644 index 0000000000..4fab8058b8 --- /dev/null +++ b/erpnext/controllers/tests/test_subcontracting_controller.py @@ -0,0 +1,1077 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import copy +from collections import defaultdict + +import frappe +from frappe.tests.utils import FrappeTestCase +from frappe.utils import cint + +from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order +from erpnext.controllers.subcontracting_controller import ( + get_materials_from_supplier, + make_rm_stock_entry, +) +from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom +from erpnext.stock.doctype.item.test_item import make_item +from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos +from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry +from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, +) + + +class TestSubcontractingController(FrappeTestCase): + def setUp(self): + make_subcontracted_items() + make_raw_materials() + make_service_items() + make_bom_for_subcontracted_items() + + def test_remove_empty_rows(self): + sco = get_subcontracting_order() + len_before = len(sco.service_items) + sco.service_items[0].item_code = None + sco.remove_empty_rows() + self.assertEqual((len_before - 1), len(sco.service_items)) + + def test_create_raw_materials_supplied(self): + sco = get_subcontracting_order() + sco.supplied_items = None + sco.create_raw_materials_supplied() + self.assertIsNotNone(sco.supplied_items) + + def test_sco_with_bom(self): + """ + - Set backflush based on BOM. + - Create SCO for the item Subcontracted Item SA1 and add same item two times. + - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. + - Create SCR against the SCO and check serial nos and batch no. + """ + + set_backflush_based_on("BOM") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA1", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA1", + "fg_item_qty": 6, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name if item.get("qty") == 5 else sco.items[1].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + scr = make_subcontracting_receipt(sco.name) + scr.save() + scr.submit() + + for key, value in get_supplied_items(scr).items(): + transferred_detais = itemwise_details.get(key) + + for field in ["qty", "serial_no", "batch_no"]: + if value.get(field): + transfer, consumed = (transferred_detais.get(field), value.get(field)) + if field == "serial_no": + transfer, consumed = (sorted(transfer), sorted(consumed)) + + self.assertEqual(transfer, consumed) + + def test_sco_with_material_transfer(self): + """ + - Set backflush based on Material Transfer. + - Create SCO for the item Subcontracted Item SA1 and Subcontracted Item SA5. + - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. + - Transfer extra item Subcontracted SRM Item 4 for the subcontract item Subcontracted Item SA5. + - Create partial SCR against the SCO and check serial nos and batch no. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA1", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 5", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA5", + "fg_item_qty": 6, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + rm_items.append( + { + "main_item_code": "Subcontracted Item SA5", + "item_code": "Subcontracted SRM Item 4", + "qty": 6, + } + ) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name if item.get("qty") == 5 else sco.items[1].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.remove(scr1.items[1]) + scr1.save() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + transferred_detais = itemwise_details.get(key) + + for field in ["qty", "serial_no", "batch_no"]: + if value.get(field): + self.assertEqual(value.get(field), transferred_detais.get(field)) + + scr2 = make_subcontracting_receipt(sco.name) + scr2.save() + scr2.submit() + + for key, value in get_supplied_items(scr2).items(): + transferred_detais = itemwise_details.get(key) + + for field in ["qty", "serial_no", "batch_no"]: + if value.get(field): + self.assertEqual(value.get(field), transferred_detais.get(field)) + + def test_subcontracting_with_same_components_different_fg(self): + """ + - Set backflush based on Material Transfer. + - Create SCO for the item Subcontracted Item SA2 and Subcontracted Item SA3. + - Transfer the components from Stores to Supplier warehouse with serial nos. + - Transfer extra qty of components for the item Subcontracted Item SA2. + - Create partial SCR against the SCO and check serial nos. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 2", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA2", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 3", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA3", + "fg_item_qty": 6, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + rm_items[0]["qty"] += 1 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name if item.get("qty") == 5 else sco.items[1].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.items[0].qty = 3 + scr1.remove(scr1.items[1]) + scr1.save() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + transferred_detais = itemwise_details.get(key) + + self.assertEqual(value.qty, 4) + self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[0:4])) + + scr2 = make_subcontracting_receipt(sco.name) + scr2.items[0].qty = 2 + scr2.remove(scr2.items[1]) + scr2.save() + scr2.submit() + + for key, value in get_supplied_items(scr2).items(): + transferred_detais = itemwise_details.get(key) + + self.assertEqual(value.qty, 2) + self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[4:6])) + + scr3 = make_subcontracting_receipt(sco.name) + scr3.save() + scr3.submit() + + for key, value in get_supplied_items(scr3).items(): + transferred_detais = itemwise_details.get(key) + + self.assertEqual(value.qty, 6) + self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[6:12])) + + def test_return_non_consumed_materials(self): + """ + - Set backflush based on Material Transfer. + - Create SCO for item Subcontracted Item SA2. + - Transfer the components from Stores to Supplier warehouse with serial nos. + - Transfer extra qty of component for the subcontracted item Subcontracted Item SA2. + - Create SCR for full qty against the SCO and change the qty of raw material. + - After that return the non consumed material back to the store from supplier's warehouse. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 2", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA2", + "fg_item_qty": 5, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + rm_items[0]["qty"] += 1 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.save() + scr1.supplied_items[0].consumed_qty = 5 + scr1.supplied_items[0].serial_no = "\n".join( + sorted(itemwise_details.get("Subcontracted SRM Item 2").get("serial_no")[0:5]) + ) + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + transferred_detais = itemwise_details.get(key) + self.assertEqual(value.qty, 5) + self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[0:5])) + + sco.load_from_db() + self.assertEqual(sco.supplied_items[0].consumed_qty, 5) + doc = get_materials_from_supplier(sco.name, [d.name for d in sco.supplied_items]) + self.assertEqual(doc.items[0].qty, 1) + self.assertEqual(doc.items[0].s_warehouse, "_Test Warehouse 1 - _TC") + self.assertEqual(doc.items[0].t_warehouse, "_Test Warehouse - _TC") + self.assertEqual( + get_serial_nos(doc.items[0].serial_no), + itemwise_details.get(doc.items[0].item_code)["serial_no"][5:6], + ) + + def test_item_with_batch_based_on_bom(self): + """ + - Set backflush based on BOM. + - Create SCO for item Subcontracted Item SA4 (has batch no). + - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. + - Transfer the components in multiple batches. + - Create the 3 SCR against the SCO and split Subcontracted Items into two batches. + - Keep the qty as 2 for Subcontracted Item in the SCR. + """ + + set_backflush_based_on("BOM") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 4", + "qty": 10, + "rate": 100, + "fg_item": "Subcontracted Item SA4", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = [ + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 1", + "qty": 10.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 2", + "qty": 10.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 1.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + ] + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.items[0].qty = 2 + add_second_row_in_scr(scr1) + scr1.flags.ignore_mandatory = True + scr1.save() + scr1.set_missing_values() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + self.assertEqual(value.qty, 4) + + scr2 = make_subcontracting_receipt(sco.name) + scr2.items[0].qty = 2 + add_second_row_in_scr(scr2) + scr2.flags.ignore_mandatory = True + scr2.save() + scr2.set_missing_values() + scr2.submit() + + for key, value in get_supplied_items(scr2).items(): + self.assertEqual(value.qty, 4) + + scr3 = make_subcontracting_receipt(sco.name) + scr3.items[0].qty = 2 + scr3.flags.ignore_mandatory = True + scr3.save() + scr3.set_missing_values() + scr3.submit() + + for key, value in get_supplied_items(scr3).items(): + self.assertEqual(value.qty, 2) + + def test_item_with_batch_based_on_material_transfer(self): + """ + - Set backflush based on Material Transferred for Subcontract. + - Create SCO for item Subcontracted Item SA4 (has batch no). + - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. + - Transfer the components in multiple batches with extra 2 qty for the batched item. + - Create the 3 SCR against the SCO and split Subcontracted Items into two batches. + - Keep the qty as 2 for Subcontracted Item in the SCR. + - In the first SCR the batched raw materials will be consumed 2 extra qty. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 4", + "qty": 10, + "rate": 100, + "fg_item": "Subcontracted Item SA4", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = [ + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 1", + "qty": 10.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 2", + "qty": 10.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + { + "main_item_code": "Subcontracted Item SA4", + "item_code": "Subcontracted SRM Item 3", + "qty": 3.0, + "rate": 100.0, + "stock_uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + }, + ] + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.items[0].qty = 2 + add_second_row_in_scr(scr1) + scr1.flags.ignore_mandatory = True + scr1.save() + scr1.set_missing_values() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + qty = 4 if key != "Subcontracted SRM Item 3" else 6 + self.assertEqual(value.qty, qty) + + scr2 = make_subcontracting_receipt(sco.name) + scr2.items[0].qty = 2 + add_second_row_in_scr(scr2) + scr2.flags.ignore_mandatory = True + scr2.save() + scr2.set_missing_values() + scr2.submit() + + for key, value in get_supplied_items(scr2).items(): + self.assertEqual(value.qty, 4) + + scr3 = make_subcontracting_receipt(sco.name) + scr3.items[0].qty = 2 + scr3.flags.ignore_mandatory = True + scr3.save() + scr3.set_missing_values() + scr3.submit() + + for key, value in get_supplied_items(scr3).items(): + self.assertEqual(value.qty, 1) + + def test_partial_transfer_serial_no_components_based_on_material_transfer(self): + """ + - Set backflush based on Material Transferred for Subcontract. + - Create SCO for the item Subcontracted Item SA2. + - Transfer the partial components from Stores to Supplier warehouse with serial nos. + - Create partial SCR against the SCO and change the qty manually. + - Transfer the remaining components from Stores to Supplier warehouse with serial nos. + - Create SCR for remaining qty against the SCO and change the qty manually. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 2", + "qty": 10, + "rate": 100, + "fg_item": "Subcontracted Item SA2", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + rm_items[0]["qty"] = 5 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.items[0].qty = 5 + scr1.flags.ignore_mandatory = True + scr1.save() + scr1.set_missing_values() + + for key, value in get_supplied_items(scr1).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, 3) + self.assertEqual(sorted(value.serial_no), sorted(details.serial_no[0:3])) + + scr1.load_from_db() + scr1.supplied_items[0].consumed_qty = 5 + scr1.supplied_items[0].serial_no = "\n".join( + itemwise_details[scr1.supplied_items[0].rm_item_code]["serial_no"] + ) + scr1.save() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, details.qty) + self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) + + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr2 = make_subcontracting_receipt(sco.name) + scr2.submit() + + for key, value in get_supplied_items(scr2).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, details.qty) + self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) + + def test_incorrect_serial_no_components_based_on_material_transfer(self): + """ + - Set backflush based on Material Transferred for Subcontract. + - Create SCO for the item Subcontracted Item SA2. + - Transfer the serialized componenets to the supplier. + - Create SCR and change the serial no which is not transferred. + - System should throw the error and not allowed to save the SCR. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 2", + "qty": 10, + "rate": 100, + "fg_item": "Subcontracted Item SA2", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.save() + scr1.supplied_items[0].serial_no = "ABCD" + self.assertRaises(frappe.ValidationError, scr1.save) + scr1.delete() + + def test_partial_transfer_batch_based_on_material_transfer(self): + """ + - Set backflush based on Material Transferred for Subcontract. + - Create SCO for the item Subcontracted Item SA6. + - Transfer the partial components from Stores to Supplier warehouse with batch. + - Create partial SCR against the SCO and change the qty manually. + - Transfer the remaining components from Stores to Supplier warehouse with batch. + - Create SCR for remaining qty against the SCO and change the qty manually. + """ + + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 6", + "qty": 10, + "rate": 100, + "fg_item": "Subcontracted Item SA6", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + rm_items[0]["qty"] = 5 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.items[0].qty = 5 + scr1.save() + + transferred_batch_no = "" + for key, value in get_supplied_items(scr1).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, 3) + transferred_batch_no = details.batch_no + self.assertEqual(value.batch_no, details.batch_no) + + scr1.load_from_db() + scr1.supplied_items[0].consumed_qty = 5 + scr1.supplied_items[0].batch_no = list(transferred_batch_no.keys())[0] + scr1.save() + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, details.qty) + self.assertEqual(value.batch_no, details.batch_no) + + itemwise_details = make_stock_in_entry(rm_items=rm_items) + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name + + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + scr1 = make_subcontracting_receipt(sco.name) + scr1.submit() + + for key, value in get_supplied_items(scr1).items(): + details = itemwise_details.get(key) + self.assertEqual(value.qty, details.qty) + self.assertEqual(value.batch_no, details.batch_no) + + def test_sco_supplied_qty(self): + """ + Check if 'Supplied Qty' in SCO's Supplied Items table is reset on submit/cancel. + """ + set_backflush_based_on("Material Transferred for Subcontract") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA1", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 5", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA5", + "fg_item_qty": 6, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = [ + {"item_code": "Subcontracted SRM Item 1", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, + {"item_code": "Subcontracted SRM Item 2", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, + {"item_code": "Subcontracted SRM Item 3", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, + {"item_code": "Subcontracted SRM Item 5", "qty": 6, "main_item_code": "Subcontracted Item SA5"}, + {"item_code": "Subcontracted SRM Item 4", "qty": 6, "main_item_code": "Subcontracted Item SA5"}, + ] + itemwise_details = make_stock_in_entry(rm_items=rm_items) + + for item in rm_items: + item["sco_rm_detail"] = sco.items[0].name if item.get("qty") == 5 else sco.items[1].name + + se = make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + + sco.reload() + for item in sco.get("supplied_items"): + self.assertIn(item.supplied_qty, [5.0, 6.0]) + + se.cancel() + sco.reload() + for item in sco.get("supplied_items"): + self.assertEqual(item.supplied_qty, 0.0) + + +def add_second_row_in_scr(scr): + item_dict = {} + for column in [ + "item_code", + "item_name", + "qty", + "uom", + "warehouse", + "stock_uom", + "subcontracting_order", + "subcontracting_order_finished_good_item", + "conversion_factor", + "rate", + "expense_account", + "sco_rm_detail", + ]: + item_dict[column] = scr.items[0].get(column) + + scr.append("items", item_dict) + + +def get_supplied_items(scr_doc): + supplied_items = {} + for row in scr_doc.get("supplied_items"): + if row.rm_item_code not in supplied_items: + supplied_items.setdefault( + row.rm_item_code, frappe._dict({"qty": 0, "serial_no": [], "batch_no": defaultdict(float)}) + ) + + details = supplied_items[row.rm_item_code] + update_item_details(row, details) + + return supplied_items + + +def make_stock_in_entry(**args): + args = frappe._dict(args) + + items = {} + for row in args.rm_items: + row = frappe._dict(row) + + doc = make_stock_entry( + target=row.warehouse or "_Test Warehouse - _TC", + item_code=row.item_code, + qty=row.qty or 1, + basic_rate=row.rate or 100, + ) + + if row.item_code not in items: + items.setdefault( + row.item_code, frappe._dict({"qty": 0, "serial_no": [], "batch_no": defaultdict(float)}) + ) + + child_row = doc.items[0] + details = items[child_row.item_code] + update_item_details(child_row, details) + + return items + + +def update_item_details(child_row, details): + details.qty += ( + child_row.get("qty") + if child_row.doctype == "Stock Entry Detail" + else child_row.get("consumed_qty") + ) + + if child_row.serial_no: + details.serial_no.extend(get_serial_nos(child_row.serial_no)) + + if child_row.batch_no: + details.batch_no[child_row.batch_no] += child_row.get("qty") or child_row.get("consumed_qty") + + +def make_stock_transfer_entry(**args): + args = frappe._dict(args) + + items = [] + for row in args.rm_items: + row = frappe._dict(row) + + item = { + "item_code": row.main_item_code or args.main_item_code, + "rm_item_code": row.item_code, + "qty": row.qty or 1, + "item_name": row.item_code, + "rate": row.rate or 100, + "stock_uom": row.stock_uom or "Nos", + "warehouse": row.warehuose or "_Test Warehouse - _TC", + } + + item_details = args.itemwise_details.get(row.item_code) + + if item_details and item_details.serial_no: + serial_nos = item_details.serial_no[0 : cint(row.qty)] + item["serial_no"] = "\n".join(serial_nos) + item_details.serial_no = list(set(item_details.serial_no) - set(serial_nos)) + + if item_details and item_details.batch_no: + for batch_no, batch_qty in item_details.batch_no.items(): + if batch_qty >= row.qty: + item["batch_no"] = batch_no + item_details.batch_no[batch_no] -= row.qty + break + + items.append(item) + + ste_dict = make_rm_stock_entry(args.sco_no, items) + doc = frappe.get_doc(ste_dict) + doc.insert() + doc.submit() + + return doc + + +def make_subcontracted_items(): + sub_contracted_items = { + "Subcontracted Item SA1": {}, + "Subcontracted Item SA2": {}, + "Subcontracted Item SA3": {}, + "Subcontracted Item SA4": { + "has_batch_no": 1, + "create_new_batch": 1, + "batch_number_series": "SBAT.####", + }, + "Subcontracted Item SA5": {}, + "Subcontracted Item SA6": {}, + "Subcontracted Item SA7": {}, + } + + for item, properties in sub_contracted_items.items(): + if not frappe.db.exists("Item", item): + properties.update({"is_stock_item": 1, "is_sub_contracted_item": 1}) + make_item(item, properties) + + +def make_raw_materials(): + raw_materials = { + "Subcontracted SRM Item 1": {}, + "Subcontracted SRM Item 2": {"has_serial_no": 1, "serial_no_series": "SRI.####"}, + "Subcontracted SRM Item 3": { + "has_batch_no": 1, + "create_new_batch": 1, + "batch_number_series": "BAT.####", + }, + "Subcontracted SRM Item 4": {"has_serial_no": 1, "serial_no_series": "SRII.####"}, + "Subcontracted SRM Item 5": {"has_serial_no": 1, "serial_no_series": "SRII.####"}, + } + + for item, properties in raw_materials.items(): + if not frappe.db.exists("Item", item): + properties.update({"is_stock_item": 1}) + make_item(item, properties) + + +def make_service_item(item, properties={}): + if not frappe.db.exists("Item", item): + properties.update({"is_stock_item": 0}) + make_item(item, properties) + + +def make_service_items(): + service_items = { + "Subcontracted Service Item 1": {}, + "Subcontracted Service Item 2": {}, + "Subcontracted Service Item 3": {}, + "Subcontracted Service Item 4": {}, + "Subcontracted Service Item 5": {}, + "Subcontracted Service Item 6": {}, + "Subcontracted Service Item 7": {}, + } + + for item, properties in service_items.items(): + make_service_item(item, properties) + + +def make_bom_for_subcontracted_items(): + boms = { + "Subcontracted Item SA1": [ + "Subcontracted SRM Item 1", + "Subcontracted SRM Item 2", + "Subcontracted SRM Item 3", + ], + "Subcontracted Item SA2": ["Subcontracted SRM Item 2"], + "Subcontracted Item SA3": ["Subcontracted SRM Item 2"], + "Subcontracted Item SA4": [ + "Subcontracted SRM Item 1", + "Subcontracted SRM Item 2", + "Subcontracted SRM Item 3", + ], + "Subcontracted Item SA5": ["Subcontracted SRM Item 5"], + "Subcontracted Item SA6": ["Subcontracted SRM Item 3"], + "Subcontracted Item SA7": ["Subcontracted SRM Item 1"], + } + + for item_code, raw_materials in boms.items(): + if not frappe.db.exists("BOM", {"item": item_code}): + make_bom(item=item_code, raw_materials=raw_materials, rate=100) + + +def set_backflush_based_on(based_on): + frappe.db.set_value( + "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", based_on + ) + + +def get_subcontracting_order(**args): + from erpnext.subcontracting.doctype.subcontracting_order.test_subcontracting_order import ( + create_subcontracting_order, + ) + + args = frappe._dict(args) + + if args.get("po_name"): + po = frappe.get_doc("Purchase Order", args.get("po_name")) + + if po.is_subcontracted: + return create_subcontracting_order(po_name=po.name, **args) + + if not args.service_items: + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 7", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA7", + "fg_item_qty": 10, + }, + ] + else: + service_items = args.service_items + + po = create_purchase_order( + rm_items=service_items, + is_subcontracted=1, + supplier_warehouse=args.supplier_warehouse or "_Test Warehouse 1 - _TC", + ) + + return create_subcontracting_order(po_name=po.name, **args) + + +def get_rm_items(supplied_items): + rm_items = [] + + for item in supplied_items: + rm_items.append( + { + "main_item_code": item.main_item_code, + "item_code": item.rm_item_code, + "qty": item.required_qty, + "rate": item.rate, + "stock_uom": item.stock_uom, + "warehouse": item.reserve_warehouse, + } + ) + + return rm_items + + +def make_subcontracted_item(**args): + from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom + + args = frappe._dict(args) + + if not frappe.db.exists("Item", args.item_code): + make_item( + args.item_code, + { + "is_stock_item": 1, + "is_sub_contracted_item": 1, + "has_batch_no": args.get("has_batch_no") or 0, + }, + ) + + if not args.raw_materials: + if not frappe.db.exists("Item", "Test Extra Item 1"): + make_item( + "Test Extra Item 1", + { + "is_stock_item": 1, + }, + ) + + if not frappe.db.exists("Item", "Test Extra Item 2"): + make_item( + "Test Extra Item 2", + { + "is_stock_item": 1, + }, + ) + + args.raw_materials = ["_Test FG Item", "Test Extra Item 1"] + + if not frappe.db.get_value("BOM", {"item": args.item_code}, "name"): + make_bom(item=args.item_code, raw_materials=args.get("raw_materials")) diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/__init__.py b/erpnext/crm/doctype/crm_note/__init__.py similarity index 100% rename from erpnext/accounts/doctype/c_form_invoice_detail/__init__.py rename to erpnext/crm/doctype/crm_note/__init__.py diff --git a/erpnext/crm/doctype/crm_note/crm_note.json b/erpnext/crm/doctype/crm_note/crm_note.json new file mode 100644 index 0000000000..fc2a4d1192 --- /dev/null +++ b/erpnext/crm/doctype/crm_note/crm_note.json @@ -0,0 +1,48 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2022-06-04 15:49:23.416644", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "note", + "added_by", + "added_on" + ], + "fields": [ + { + "columns": 5, + "fieldname": "note", + "fieldtype": "Text Editor", + "in_list_view": 1, + "label": "Note" + }, + { + "fieldname": "added_by", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Added By", + "options": "User" + }, + { + "fieldname": "added_on", + "fieldtype": "Datetime", + "in_list_view": 1, + "label": "Added On" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-06-04 16:29:07.807252", + "modified_by": "Administrator", + "module": "CRM", + "name": "CRM Note", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/skill/skill.py b/erpnext/crm/doctype/crm_note/crm_note.py similarity index 58% rename from erpnext/hr/doctype/skill/skill.py rename to erpnext/crm/doctype/crm_note/crm_note.py index d26e7ca490..6c7eeb4c7e 100644 --- a/erpnext/hr/doctype/skill/skill.py +++ b/erpnext/crm/doctype/crm_note/crm_note.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class Skill(Document): +class CRMNote(Document): pass diff --git a/erpnext/crm/doctype/crm_settings/crm_settings.json b/erpnext/crm/doctype/crm_settings/crm_settings.json index a2a19b9e79..26a07d2e85 100644 --- a/erpnext/crm/doctype/crm_settings/crm_settings.json +++ b/erpnext/crm/doctype/crm_settings/crm_settings.json @@ -10,12 +10,10 @@ "campaign_naming_by", "allow_lead_duplication_based_on_emails", "column_break_4", - "create_event_on_next_contact_date", "auto_creation_of_contact", "opportunity_section", "close_opportunity_after_days", "column_break_9", - "create_event_on_next_contact_date_opportunity", "quotation_section", "default_valid_till", "section_break_13", @@ -55,12 +53,6 @@ "fieldtype": "Check", "label": "Auto Creation of Contact" }, - { - "default": "1", - "fieldname": "create_event_on_next_contact_date", - "fieldtype": "Check", - "label": "Create Event on Next Contact Date" - }, { "fieldname": "opportunity_section", "fieldtype": "Section Break", @@ -73,12 +65,6 @@ "fieldtype": "Int", "label": "Close Replied Opportunity After Days" }, - { - "default": "1", - "fieldname": "create_event_on_next_contact_date_opportunity", - "fieldtype": "Check", - "label": "Create Event on Next Contact Date" - }, { "fieldname": "column_break_4", "fieldtype": "Column Break" @@ -105,7 +91,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2021-12-20 12:51:38.894252", + "modified": "2022-06-06 11:22:08.464253", "modified_by": "Administrator", "module": "CRM", "name": "CRM Settings", @@ -143,5 +129,6 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/crm/doctype/lead/lead.js b/erpnext/crm/doctype/lead/lead.js index 999599ce95..37fb3509ce 100644 --- a/erpnext/crm/doctype/lead/lead.js +++ b/erpnext/crm/doctype/lead/lead.js @@ -24,31 +24,39 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller this.frm.set_query("lead_owner", function (doc, cdt, cdn) { return { query: "frappe.core.doctype.user.user.user_query" } }); - - this.frm.set_query("contact_by", function (doc, cdt, cdn) { - return { query: "frappe.core.doctype.user.user.user_query" } - }); } refresh () { + var me = this; let doc = this.frm.doc; erpnext.toggle_naming_series(); - frappe.dynamic_link = { doc: doc, fieldname: 'name', doctype: 'Lead' } + frappe.dynamic_link = { + doc: doc, + fieldname: 'name', + doctype: 'Lead' + }; if (!this.frm.is_new() && doc.__onload && !doc.__onload.is_customer) { this.frm.add_custom_button(__("Customer"), this.make_customer, __("Create")); - this.frm.add_custom_button(__("Opportunity"), this.make_opportunity, __("Create")); + this.frm.add_custom_button(__("Opportunity"), function() { + me.frm.trigger("make_opportunity"); + }, __("Create")); this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create")); - this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create")); - this.frm.add_custom_button(__('Add to Prospect'), this.add_lead_to_prospect, __('Action')); + if (!doc.__onload.linked_prospects.length) { + this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create")); + this.frm.add_custom_button(__('Add to Prospect'), this.add_lead_to_prospect, __('Action')); + } } if (!this.frm.is_new()) { frappe.contacts.render_address_and_contact(this.frm); - cur_frm.trigger('render_contact_day_html'); } else { frappe.contacts.clear_address_and_contact(this.frm); } + + this.frm.dashboard.links_area.hide(); + this.show_notes(); + this.show_activities(); } add_lead_to_prospect () { @@ -74,7 +82,7 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller } }, freeze: true, - freeze_message: __('...Adding Lead to Prospect') + freeze_message: __('Adding Lead to Prospect...') }); }, __('Add Lead to Prospect'), __('Add')); } @@ -86,13 +94,6 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller }) } - make_opportunity () { - frappe.model.open_mapped_doc({ - method: "erpnext.crm.doctype.lead.lead.make_opportunity", - frm: cur_frm - }) - } - make_quotation () { frappe.model.open_mapped_doc({ method: "erpnext.crm.doctype.lead.lead.make_quotation", @@ -111,9 +112,10 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller prospect.fax = cur_frm.doc.fax; prospect.website = cur_frm.doc.website; prospect.prospect_owner = cur_frm.doc.lead_owner; + prospect.notes = cur_frm.doc.notes; - let lead_prospect_row = frappe.model.add_child(prospect, 'prospect_lead'); - lead_prospect_row.lead = cur_frm.doc.name; + let leads_row = frappe.model.add_child(prospect, 'leads'); + leads_row.lead = cur_frm.doc.name; frappe.set_route("Form", "Prospect", prospect.name); }); @@ -125,26 +127,109 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller } } - contact_date () { - if (this.frm.doc.contact_date) { - let d = moment(this.frm.doc.contact_date); - d.add(1, "day"); - this.frm.set_value("ends_on", d.format(frappe.defaultDatetimeFormat)); - } + show_notes() { + if (this.frm.doc.docstatus == 1) return; + + const crm_notes = new erpnext.utils.CRMNotes({ + frm: this.frm, + notes_wrapper: $(this.frm.fields_dict.notes_html.wrapper), + }); + crm_notes.refresh(); } - render_contact_day_html() { - if (cur_frm.doc.contact_date) { - let contact_date = frappe.datetime.obj_to_str(cur_frm.doc.contact_date); - let diff_days = frappe.datetime.get_day_diff(contact_date, frappe.datetime.get_today()); - let color = diff_days > 0 ? "orange" : "green"; - let message = diff_days > 0 ? __("Next Contact Date") : __("Last Contact Date"); - let html = `
- ${message} : ${frappe.datetime.global_date_format(contact_date)} -
` ; - cur_frm.dashboard.set_headline_alert(html); - } + show_activities() { + if (this.frm.doc.docstatus == 1) return; + + const crm_activities = new erpnext.utils.CRMActivities({ + frm: this.frm, + open_activities_wrapper: $(this.frm.fields_dict.open_activities_html.wrapper), + all_activities_wrapper: $(this.frm.fields_dict.all_activities_html.wrapper), + form_wrapper: $(this.frm.wrapper), + }); + crm_activities.refresh(); } }; + extend_cscript(cur_frm.cscript, new erpnext.LeadController({ frm: cur_frm })); + +frappe.ui.form.on("Lead", { + make_opportunity: async function(frm) { + let existing_prospect = (await frappe.db.get_value("Prospect Lead", + { + "lead": frm.doc.name + }, + "name", null, "Prospect" + )).message.name; + + if (!existing_prospect) { + var fields = [ + { + "label": "Create Prospect", + "fieldname": "create_prospect", + "fieldtype": "Check", + "default": 1 + }, + { + "label": "Prospect Name", + "fieldname": "prospect_name", + "fieldtype": "Data", + "default": frm.doc.company_name, + "depends_on": "create_prospect" + } + ]; + } + let existing_contact = (await frappe.db.get_value("Contact", + { + "first_name": frm.doc.first_name || frm.doc.lead_name, + "last_name": frm.doc.last_name + }, + "name" + )).message.name; + + if (!existing_contact) { + fields.push( + { + "label": "Create Contact", + "fieldname": "create_contact", + "fieldtype": "Check", + "default": "1" + } + ); + } + + if (fields) { + var d = new frappe.ui.Dialog({ + title: __('Create Opportunity'), + fields: fields, + primary_action: function() { + var data = d.get_values(); + frappe.call({ + method: 'create_prospect_and_contact', + doc: frm.doc, + args: { + data: data, + }, + freeze: true, + callback: function(r) { + if (!r.exc) { + frappe.model.open_mapped_doc({ + method: "erpnext.crm.doctype.lead.lead.make_opportunity", + frm: frm + }); + } + d.hide(); + } + }); + }, + primary_action_label: __('Create') + }); + d.show(); + } else { + frappe.model.open_mapped_doc({ + method: "erpnext.crm.doctype.lead.lead.make_opportunity", + frm: frm + }); + } + } +}); \ No newline at end of file diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json index 542977e689..d47373fa61 100644 --- a/erpnext/crm/doctype/lead/lead.json +++ b/erpnext/crm/doctype/lead/lead.json @@ -3,78 +3,80 @@ "allow_events_in_timeline": 1, "allow_import": 1, "autoname": "naming_series:", - "creation": "2013-04-10 11:45:37", + "creation": "2022-02-08 13:14:41.083327", "doctype": "DocType", "document_type": "Document", "email_append_to": 1, "engine": "InnoDB", "field_order": [ - "lead_details", "naming_series", "salutation", "first_name", "middle_name", "last_name", + "column_break_1", "lead_name", - "col_break123", - "status", - "company_name", - "designation", + "job_title", "gender", - "contact_details_section", + "source", + "col_break123", + "lead_owner", + "status", + "customer", + "type", + "request_type", + "contact_info_tab", "email_id", + "website", + "column_break_20", "mobile_no", "whatsapp_no", "column_break_16", "phone", "phone_ext", - "additional_information_section", + "organization_section", + "company_name", "no_of_employees", + "column_break_28", + "annual_revenue", "industry", "market_segment", - "column_break_22", + "column_break_31", + "territory", "fax", - "website", - "type", - "request_type", "address_section", "address_html", + "column_break_38", "city", - "pincode", - "county", - "column_break2", - "contact_html", "state", "country", - "section_break_12", - "lead_owner", - "ends_on", - "column_break_14", - "contact_by", - "contact_date", - "lead_source_details_section", - "company", - "territory", - "language", - "column_break_50", - "source", + "column_break2", + "contact_html", + "qualification_tab", + "qualification_status", + "column_break_64", + "qualified_by", + "qualified_on", + "other_info_tab", "campaign_name", + "company", + "column_break_22", + "language", + "image", + "title", + "column_break_50", + "disabled", "unsubscribed", "blog_subscriber", - "notes_section", - "notes", - "other_information_section", - "customer", - "image", - "title" + "activities_tab", + "open_activities_html", + "all_activities_section", + "all_activities_html", + "notes_tab", + "notes_html", + "notes" ], "fields": [ - { - "fieldname": "lead_details", - "fieldtype": "Section Break", - "label": "Lead Details", - "options": "fa fa-user" - }, { "fieldname": "naming_series", "fieldtype": "Select", @@ -86,6 +88,7 @@ "set_only_once": 1 }, { + "depends_on": "eval:!doc.__islocal", "fieldname": "lead_name", "fieldtype": "Data", "in_global_search": 1, @@ -108,7 +111,7 @@ { "fieldname": "email_id", "fieldtype": "Data", - "label": "Email Address", + "label": "Email", "oldfieldname": "email_id", "oldfieldtype": "Data", "options": "Email", @@ -189,50 +192,9 @@ "print_hide": 1 }, { - "fieldname": "section_break_12", + "fieldname": "contact_info_tab", "fieldtype": "Section Break", - "label": "Follow Up" - }, - { - "fieldname": "contact_by", - "fieldtype": "Link", - "label": "Next Contact By", - "oldfieldname": "contact_by", - "oldfieldtype": "Link", - "options": "User", - "width": "100px" - }, - { - "fieldname": "column_break_14", - "fieldtype": "Column Break" - }, - { - "bold": 1, - "fieldname": "contact_date", - "fieldtype": "Datetime", - "label": "Next Contact Date", - "no_copy": 1, - "oldfieldname": "contact_date", - "oldfieldtype": "Date", - "width": "100px" - }, - { - "bold": 1, - "fieldname": "ends_on", - "fieldtype": "Datetime", - "label": "Ends On", - "no_copy": 1 - }, - { - "collapsible": 1, - "fieldname": "notes_section", - "fieldtype": "Section Break", - "label": "Notes" - }, - { - "fieldname": "notes", - "fieldtype": "Text Editor", - "label": "Notes" + "label": "Contact Info" }, { "fieldname": "address_html", @@ -240,34 +202,6 @@ "label": "Address HTML", "read_only": 1 }, - { - "fieldname": "city", - "fieldtype": "Data", - "label": "City/Town", - "mandatory_depends_on": "eval: doc.address_title && doc.address_type" - }, - { - "fieldname": "county", - "fieldtype": "Data", - "label": "County" - }, - { - "fieldname": "state", - "fieldtype": "Data", - "label": "State" - }, - { - "fieldname": "country", - "fieldtype": "Link", - "label": "Country", - "mandatory_depends_on": "eval: doc.address_title && doc.address_type", - "options": "Country" - }, - { - "fieldname": "pincode", - "fieldtype": "Data", - "label": "Postal Code" - }, { "fieldname": "column_break2", "fieldtype": "Column Break" @@ -289,7 +223,7 @@ { "fieldname": "mobile_no", "fieldtype": "Data", - "label": "Mobile No.", + "label": "Mobile No", "oldfieldname": "mobile_no", "oldfieldtype": "Data", "options": "Phone" @@ -347,8 +281,7 @@ "fieldtype": "Data", "label": "Website", "oldfieldname": "website", - "oldfieldtype": "Data", - "options": "URL" + "oldfieldtype": "Data" }, { "fieldname": "territory", @@ -380,14 +313,6 @@ "label": "Title", "print_hide": 1 }, - { - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Designation", - "options": "Designation" - }, { "fieldname": "language", "fieldtype": "Link", @@ -410,12 +335,6 @@ "fieldtype": "Data", "label": "Last Name" }, - { - "collapsible": 1, - "fieldname": "additional_information_section", - "fieldtype": "Section Break", - "label": "Additional Information" - }, { "fieldname": "no_of_employees", "fieldtype": "Int", @@ -428,35 +347,13 @@ { "fieldname": "whatsapp_no", "fieldtype": "Data", - "label": "WhatsApp No.", + "label": "WhatsApp", "options": "Phone" }, - { - "collapsible": 1, - "depends_on": "eval: !doc.__islocal", - "fieldname": "address_section", - "fieldtype": "Section Break", - "label": "Address" - }, - { - "fieldname": "lead_source_details_section", - "fieldtype": "Section Break", - "label": "Lead Source Details" - }, { "fieldname": "column_break_50", "fieldtype": "Column Break" }, - { - "fieldname": "other_information_section", - "fieldtype": "Section Break", - "label": "Other Information" - }, - { - "fieldname": "contact_details_section", - "fieldtype": "Section Break", - "label": "Contact Details" - }, { "fieldname": "column_break_16", "fieldtype": "Column Break" @@ -465,17 +362,156 @@ "fieldname": "phone_ext", "fieldtype": "Data", "label": "Phone Ext." + }, + { + "collapsible": 1, + "fieldname": "qualification_tab", + "fieldtype": "Section Break", + "label": "Qualification" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "notes_tab", + "fieldtype": "Tab Break", + "label": "Notes" + }, + { + "collapsible": 1, + "fieldname": "other_info_tab", + "fieldtype": "Section Break", + "label": "Additional Information" + }, + { + "fieldname": "column_break_1", + "fieldtype": "Column Break" + }, + { + "fieldname": "qualified_by", + "fieldtype": "Link", + "label": "Qualified By", + "options": "User" + }, + { + "fieldname": "qualified_on", + "fieldtype": "Date", + "label": "Qualified on" + }, + { + "fieldname": "qualification_status", + "fieldtype": "Select", + "label": "Qualification Status", + "options": "Unqualified\nIn Process\nQualified" + }, + { + "collapsible": 1, + "fieldname": "address_section", + "fieldtype": "Section Break", + "label": "Address & Contacts" + }, + { + "fieldname": "column_break_64", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_20", + "fieldtype": "Column Break" + }, + { + "fieldname": "job_title", + "fieldtype": "Data", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Job Title" + }, + { + "fieldname": "annual_revenue", + "fieldtype": "Currency", + "label": "Annual Revenue" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "activities_tab", + "fieldtype": "Tab Break", + "label": "Activities" + }, + { + "fieldname": "organization_section", + "fieldtype": "Section Break", + "label": "Organization" + }, + { + "fieldname": "column_break_28", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_31", + "fieldtype": "Column Break" + }, + { + "fieldname": "notes_html", + "fieldtype": "HTML", + "label": "Notes HTML" + }, + { + "fieldname": "open_activities_html", + "fieldtype": "HTML", + "label": "Open Activities HTML" + }, + { + "fieldname": "all_activities_section", + "fieldtype": "Section Break", + "label": "All Activities" + }, + { + "fieldname": "all_activities_html", + "fieldtype": "HTML", + "label": "All Activities HTML" + }, + { + "fieldname": "notes", + "fieldtype": "Table", + "hidden": 1, + "label": "Notes", + "no_copy": 1, + "options": "CRM Note" + }, + { + "default": "0", + "fieldname": "disabled", + "fieldtype": "Check", + "label": "Disabled" + }, + { + "fieldname": "column_break_38", + "fieldtype": "Column Break" + }, + { + "fieldname": "city", + "fieldtype": "Data", + "label": "City" + }, + { + "fieldname": "state", + "fieldtype": "Data", + "label": "State" + }, + { + "fieldname": "country", + "fieldtype": "Link", + "label": "Country", + "options": "Country" } ], "icon": "fa fa-user", "idx": 5, "image_field": "image", "links": [], - "modified": "2021-08-04 00:24:57.208590", + "modified": "2022-06-27 21:56:17.392756", "modified_by": "Administrator", "module": "CRM", "name": "Lead", "name_case": "Title Case", + "naming_rule": "By \"Naming Series\" field", "owner": "Administrator", "permissions": [ { @@ -535,6 +571,7 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", + "states": [], "subject_field": "title", "title_field": "title" } \ No newline at end of file diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index c9a64ff8e6..0d12499771 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -1,27 +1,19 @@ # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt - import frappe from frappe import _ from frappe.contacts.address_and_contact import load_address_and_contact from frappe.email.inbox import link_communication_to_document from frappe.model.mapper import get_mapped_doc -from frappe.utils import ( - comma_and, - cstr, - get_link_to_form, - getdate, - has_gravatar, - nowdate, - validate_email_address, -) +from frappe.utils import comma_and, get_link_to_form, has_gravatar, validate_email_address from erpnext.accounts.party import set_taxes from erpnext.controllers.selling_controller import SellingController +from erpnext.crm.utils import CRMNote, copy_comments, link_communications, link_open_events -class Lead(SellingController): +class Lead(SellingController, CRMNote): def get_feed(self): return "{0}: {1}".format(_(self.status), self.lead_name) @@ -29,6 +21,7 @@ class Lead(SellingController): customer = frappe.db.get_value("Customer", {"lead_name": self.name}) self.get("__onload").is_customer = customer load_address_and_contact(self) + self.set_onload("linked_prospects", self.get_linked_prospects()) def validate(self): self.set_full_name() @@ -37,79 +30,42 @@ class Lead(SellingController): self.set_status() self.check_email_id_is_unique() self.validate_email_id() - self.validate_contact_date() - self.set_prev() + + def before_insert(self): + self.contact_doc = None + if frappe.db.get_single_value("CRM Settings", "auto_creation_of_contact"): + self.contact_doc = self.create_contact() + + def after_insert(self): + self.link_to_contact() + + def on_update(self): + self.update_prospect() + + def on_trash(self): + frappe.db.sql("""update `tabIssue` set lead='' where lead=%s""", self.name) + + self.unlink_dynamic_links() + self.remove_link_from_prospect() def set_full_name(self): if self.first_name: - self.lead_name = " ".join(filter(None, [self.first_name, self.middle_name, self.last_name])) - - def validate_email_id(self): - if self.email_id: - if not self.flags.ignore_email_validation: - validate_email_address(self.email_id, throw=True) - - if self.email_id == self.lead_owner: - frappe.throw(_("Lead Owner cannot be same as the Lead")) - - if self.email_id == self.contact_by: - frappe.throw(_("Next Contact By cannot be same as the Lead Email Address")) - - if self.is_new() or not self.image: - self.image = has_gravatar(self.email_id) - - def validate_contact_date(self): - if self.contact_date and getdate(self.contact_date) < getdate(nowdate()): - frappe.throw(_("Next Contact Date cannot be in the past")) - - if self.ends_on and self.contact_date and (getdate(self.ends_on) < getdate(self.contact_date)): - frappe.throw(_("Ends On date cannot be before Next Contact Date.")) - - def on_update(self): - self.add_calendar_event() - self.update_prospects() - - def set_prev(self): - if self.is_new(): - self._prev = frappe._dict({"contact_date": None, "ends_on": None, "contact_by": None}) - else: - self._prev = frappe.db.get_value( - "Lead", self.name, ["contact_date", "ends_on", "contact_by"], as_dict=1 + self.lead_name = " ".join( + filter(None, [self.salutation, self.first_name, self.middle_name, self.last_name]) ) - def before_insert(self): - self.contact_doc = self.create_contact() + def set_lead_name(self): + if not self.lead_name: + # Check for leads being created through data import + if not self.company_name and not self.email_id and not self.flags.ignore_mandatory: + frappe.throw(_("A Lead requires either a person's name or an organization's name")) + elif self.company_name: + self.lead_name = self.company_name + else: + self.lead_name = self.email_id.split("@")[0] - def after_insert(self): - self.update_links() - - def update_links(self): - # update contact links - if self.contact_doc: - self.contact_doc.append( - "links", {"link_doctype": "Lead", "link_name": self.name, "link_title": self.lead_name} - ) - self.contact_doc.save() - - def add_calendar_event(self, opts=None, force=False): - if frappe.db.get_single_value("CRM Settings", "create_event_on_next_contact_date"): - super(Lead, self).add_calendar_event( - { - "owner": self.lead_owner, - "starts_on": self.contact_date, - "ends_on": self.ends_on or "", - "subject": ("Contact " + cstr(self.lead_name)), - "description": ("Contact " + cstr(self.lead_name)) - + (self.contact_by and (". By : " + cstr(self.contact_by)) or ""), - }, - force, - ) - - def update_prospects(self): - prospects = frappe.get_all("Prospect Lead", filters={"lead": self.name}, fields=["parent"]) - for row in prospects: - prospect = frappe.get_doc("Prospect", row.parent) - prospect.save(ignore_permissions=True) + def set_title(self): + self.title = self.company_name or self.lead_name def check_email_id_is_unique(self): if self.email_id: @@ -124,15 +80,47 @@ class Lead(SellingController): if duplicate_leads: frappe.throw( - _("Email Address must be unique, already exists for {0}").format(comma_and(duplicate_leads)), + _("Email Address must be unique, it is already used in {0}").format( + comma_and(duplicate_leads) + ), frappe.DuplicateEntryError, ) - def on_trash(self): - frappe.db.sql("""update `tabIssue` set lead='' where lead=%s""", self.name) + def validate_email_id(self): + if self.email_id: + if not self.flags.ignore_email_validation: + validate_email_address(self.email_id, throw=True) - self.unlink_dynamic_links() - self.delete_events() + if self.email_id == self.lead_owner: + frappe.throw(_("Lead Owner cannot be same as the Lead Email Address")) + + if self.is_new() or not self.image: + self.image = has_gravatar(self.email_id) + + def link_to_contact(self): + # update contact links + if self.contact_doc: + self.contact_doc.append( + "links", {"link_doctype": "Lead", "link_name": self.name, "link_title": self.lead_name} + ) + self.contact_doc.save() + + def update_prospect(self): + lead_row_name = frappe.db.get_value( + "Prospect Lead", filters={"lead": self.name}, fieldname="name" + ) + if lead_row_name: + lead_row = frappe.get_doc("Prospect Lead", lead_row_name) + lead_row.update( + { + "lead_name": self.lead_name, + "email": self.email_id, + "mobile_no": self.mobile_no, + "lead_owner": self.lead_owner, + "status": self.status, + } + ) + lead_row.db_update() def unlink_dynamic_links(self): links = frappe.get_all( @@ -155,6 +143,30 @@ class Lead(SellingController): linked_doc.remove(to_remove) linked_doc.save(ignore_permissions=True) + def remove_link_from_prospect(self): + prospects = self.get_linked_prospects() + + for d in prospects: + prospect = frappe.get_doc("Prospect", d.parent) + if len(prospect.get("leads")) == 1: + prospect.delete(ignore_permissions=True) + else: + to_remove = None + for d in prospect.get("leads"): + if d.lead == self.name: + to_remove = d + + if to_remove: + prospect.remove(to_remove) + prospect.save(ignore_permissions=True) + + def get_linked_prospects(self): + return frappe.get_all( + "Prospect Lead", + filters={"lead": self.name}, + fields=["parent"], + ) + def has_customer(self): return frappe.db.get_value("Customer", {"lead_name": self.name}) @@ -171,50 +183,78 @@ class Lead(SellingController): "Quotation", {"party_name": self.name, "docstatus": 1, "status": "Lost"} ) - def set_lead_name(self): - if not self.lead_name: - # Check for leads being created through data import - if not self.company_name and not self.email_id and not self.flags.ignore_mandatory: - frappe.throw(_("A Lead requires either a person's name or an organization's name")) - elif self.company_name: - self.lead_name = self.company_name - else: - self.lead_name = self.email_id.split("@")[0] + @frappe.whitelist() + def create_prospect_and_contact(self, data): + data = frappe._dict(data) + if data.create_contact: + self.create_contact() - def set_title(self): - self.title = self.company_name or self.lead_name + if data.create_prospect: + self.create_prospect(data.prospect_name) def create_contact(self): - if frappe.db.get_single_value("CRM Settings", "auto_creation_of_contact"): - if not self.lead_name: - self.set_full_name() - self.set_lead_name() + if not self.lead_name: + self.set_full_name() + self.set_lead_name() - contact = frappe.new_doc("Contact") - contact.update( + contact = frappe.new_doc("Contact") + contact.update( + { + "first_name": self.first_name or self.lead_name, + "last_name": self.last_name, + "salutation": self.salutation, + "gender": self.gender, + "job_title": self.job_title, + "company_name": self.company_name, + } + ) + + if self.email_id: + contact.append("email_ids", {"email_id": self.email_id, "is_primary": 1}) + + if self.phone: + contact.append("phone_nos", {"phone": self.phone, "is_primary_phone": 1}) + + if self.mobile_no: + contact.append("phone_nos", {"phone": self.mobile_no, "is_primary_mobile_no": 1}) + + contact.insert(ignore_permissions=True) + contact.reload() # load changes by hooks on contact + + return contact + + def create_prospect(self, company_name): + try: + prospect = frappe.new_doc("Prospect") + + prospect.company_name = company_name or self.company_name + prospect.no_of_employees = self.no_of_employees + prospect.industry = self.industry + prospect.market_segment = self.market_segment + prospect.annual_revenue = self.annual_revenue + prospect.territory = self.territory + prospect.fax = self.fax + prospect.website = self.website + prospect.prospect_owner = self.lead_owner + prospect.company = self.company + prospect.notes = self.notes + + prospect.append( + "leads", { - "first_name": self.first_name or self.lead_name, - "last_name": self.last_name, - "salutation": self.salutation, - "gender": self.gender, - "designation": self.designation, - "company_name": self.company_name, - } + "lead": self.name, + "lead_name": self.lead_name, + "email": self.email_id, + "mobile_no": self.mobile_no, + "lead_owner": self.lead_owner, + "status": self.status, + }, ) - - if self.email_id: - contact.append("email_ids", {"email_id": self.email_id, "is_primary": 1}) - - if self.phone: - contact.append("phone_nos", {"phone": self.phone, "is_primary_phone": 1}) - - if self.mobile_no: - contact.append("phone_nos", {"phone": self.mobile_no, "is_primary_mobile_no": 1}) - - contact.insert(ignore_permissions=True) - contact.reload() # load changes by hooks on contact - - return contact + prospect.flags.ignore_permissions = True + prospect.flags.ignore_mandatory = True + prospect.save() + except frappe.DuplicateEntryError: + frappe.throw(_("Prospect {0} already exists").format(company_name or self.company_name)) @frappe.whitelist() @@ -274,6 +314,8 @@ def make_opportunity(source_name, target_doc=None): "company_name": "customer_name", "email_id": "contact_email", "mobile_no": "contact_mobile", + "lead_owner": "opportunity_owner", + "notes": "notes", }, } }, @@ -422,21 +464,25 @@ def get_lead_with_phone_number(number): return lead -def daily_open_lead(): - leads = frappe.get_all("Lead", filters=[["contact_date", "Between", [nowdate(), nowdate()]]]) - for lead in leads: - frappe.db.set_value("Lead", lead.name, "status", "Open") - - @frappe.whitelist() def add_lead_to_prospect(lead, prospect): prospect = frappe.get_doc("Prospect", prospect) - prospect.append("prospect_lead", {"lead": lead}) + prospect.append("leads", {"lead": lead}) prospect.save(ignore_permissions=True) + + carry_forward_communication_and_comments = frappe.db.get_single_value( + "CRM Settings", "carry_forward_communication_and_comments" + ) + + if carry_forward_communication_and_comments: + copy_comments("Lead", lead, prospect) + link_communications("Lead", lead, prospect) + link_open_events("Lead", lead, prospect) + frappe.msgprint( _("Lead {0} has been added to prospect {1}.").format( frappe.bold(lead), frappe.bold(prospect.name) ), - title=_("Lead Added"), + title=_("Lead -> Prospect"), indicator="green", ) diff --git a/erpnext/crm/doctype/lead/lead_list.js b/erpnext/crm/doctype/lead/lead_list.js index 75208fa64b..dbeaf608ff 100644 --- a/erpnext/crm/doctype/lead/lead_list.js +++ b/erpnext/crm/doctype/lead/lead_list.js @@ -16,7 +16,7 @@ frappe.listview_settings['Lead'] = { prospect.prospect_owner = r.lead_owner; leads.forEach(function(lead) { - let lead_prospect_row = frappe.model.add_child(prospect, 'prospect_lead'); + let lead_prospect_row = frappe.model.add_child(prospect, 'leads'); lead_prospect_row.lead = lead.name; }); frappe.set_route("Form", "Prospect", prospect.name); diff --git a/erpnext/crm/doctype/lead/test_lead.py b/erpnext/crm/doctype/lead/test_lead.py index 166ae2c353..8fe688de46 100644 --- a/erpnext/crm/doctype/lead/test_lead.py +++ b/erpnext/crm/doctype/lead/test_lead.py @@ -5,7 +5,10 @@ import unittest import frappe -from frappe.utils import random_string +from frappe.utils import random_string, today + +from erpnext.crm.doctype.lead.lead import make_opportunity +from erpnext.crm.utils import get_linked_prospect test_records = frappe.get_test_records("Lead") @@ -83,6 +86,105 @@ class TestLead(unittest.TestCase): self.assertEqual(frappe.db.exists("Lead", lead_doc.name), None) self.assertEqual(len(address_1.get("links")), 1) + def test_prospect_creation_from_lead(self): + frappe.db.sql("delete from `tabLead` where lead_name='Rahul Tripathi'") + frappe.db.sql("delete from `tabProspect` where name='Prospect Company'") + + lead = make_lead( + first_name="Rahul", + last_name="Tripathi", + email_id="rahul@gmail.com", + company_name="Prospect Company", + ) + + event = create_event("Meeting 1", today(), "Lead", lead.name) + + lead.create_prospect(lead.company_name) + + prospect = get_linked_prospect("Lead", lead.name) + self.assertEqual(prospect, "Prospect Company") + + event.reload() + self.assertEqual(event.event_participants[1].reference_doctype, "Prospect") + self.assertEqual(event.event_participants[1].reference_docname, prospect) + + def test_opportunity_from_lead(self): + frappe.db.sql("delete from `tabLead` where lead_name='Rahul Tripathi'") + frappe.db.sql("delete from `tabOpportunity` where party_name='Rahul Tripathi'") + + lead = make_lead( + first_name="Rahul", + last_name="Tripathi", + email_id="rahul@gmail.com", + company_name="Prospect Company", + ) + + lead.add_note("test note") + event = create_event("Meeting 1", today(), "Lead", lead.name) + create_todo("followup", "Lead", lead.name) + + opportunity = make_opportunity(lead.name) + opportunity.save() + + self.assertEqual(opportunity.get("party_name"), lead.name) + self.assertEqual(opportunity.notes[0].note, "test note") + + event.reload() + self.assertEqual(event.event_participants[1].reference_doctype, "Opportunity") + self.assertEqual(event.event_participants[1].reference_docname, opportunity.name) + + self.assertTrue( + frappe.db.get_value( + "ToDo", {"reference_type": "Opportunity", "reference_name": opportunity.name} + ) + ) + + def test_copy_events_from_lead_to_prospect(self): + frappe.db.sql("delete from `tabLead` where lead_name='Rahul Tripathi'") + frappe.db.sql("delete from `tabProspect` where name='Prospect Company'") + + lead = make_lead( + first_name="Rahul", + last_name="Tripathi", + email_id="rahul@gmail.com", + company_name="Prospect Company", + ) + + lead.create_prospect(lead.company_name) + prospect = get_linked_prospect("Lead", lead.name) + + event = create_event("Meeting", today(), "Lead", lead.name) + + self.assertEqual(len(event.event_participants), 2) + self.assertEqual(event.event_participants[1].reference_doctype, "Prospect") + self.assertEqual(event.event_participants[1].reference_docname, prospect) + + +def create_event(subject, starts_on, reference_type, reference_name): + event = frappe.new_doc("Event") + event.subject = subject + event.starts_on = starts_on + event.event_type = "Private" + event.all_day = 1 + event.owner = "Administrator" + event.append( + "event_participants", {"reference_doctype": reference_type, "reference_docname": reference_name} + ) + event.reference_type = reference_type + event.reference_name = reference_name + event.insert() + return event + + +def create_todo(description, reference_type, reference_name): + todo = frappe.new_doc("ToDo") + todo.description = description + todo.owner = "Administrator" + todo.reference_type = reference_type + todo.reference_name = reference_name + todo.insert() + return todo + def make_lead(**args): args = frappe._dict(args) @@ -93,6 +195,7 @@ def make_lead(**args): "first_name": args.first_name or "_Test", "last_name": args.last_name or "Lead", "email_id": args.email_id or "new_lead_{}@example.com".format(random_string(5)), + "company_name": args.company_name or "_Test Company", } ).insert() diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js index 8e7d67e057..c53ea9d5c3 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.js +++ b/erpnext/crm/doctype/opportunity/opportunity.js @@ -32,13 +32,6 @@ frappe.ui.form.on("Opportunity", { } }, - contact_date: function(frm) { - if(frm.doc.contact_date < frappe.datetime.now_datetime()){ - frm.set_value("contact_date", ""); - frappe.throw(__("Next follow up date should be greater than now.")) - } - }, - onload_post_render: function(frm) { frm.get_field("items").grid.set_multiple_add("item_code", "qty"); }, @@ -130,6 +123,13 @@ frappe.ui.form.on("Opportunity", { }); } } + + if (!frm.is_new()) { + frappe.contacts.render_address_and_contact(frm); + // frm.trigger('render_contact_day_html'); + } else { + frappe.contacts.clear_address_and_contact(frm); + } }, set_contact_link: function(frm) { @@ -227,8 +227,7 @@ frappe.ui.form.on("Opportunity", { 'total': flt(total), 'base_total': flt(base_total) }); - } - + }, }); frappe.ui.form.on("Opportunity Item", { calculate: function(frm, cdt, cdn) { @@ -264,13 +263,14 @@ erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller { this.frm.trigger('currency'); } + refresh() { + this.show_notes(); + this.show_activities(); + } + setup_queries() { var me = this; - if(this.frm.fields_dict.contact_by.df.options.match(/^User/)) { - this.frm.set_query("contact_by", erpnext.queries.user); - } - me.frm.set_query('customer_address', erpnext.queries.address_query); this.frm.set_query("item_code", "items", function() { @@ -287,6 +287,14 @@ erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller { } else if (me.frm.doc.opportunity_from == "Customer") { me.frm.set_query('party_name', erpnext.queries['customer']); + } else if (me.frm.doc.opportunity_from == "Prospect") { + me.frm.set_query('party_name', function() { + return { + filters: { + "company": me.frm.doc.company + } + }; + }); } } @@ -303,6 +311,24 @@ erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller { frm: cur_frm }) } + + show_notes() { + const crm_notes = new erpnext.utils.CRMNotes({ + frm: this.frm, + notes_wrapper: $(this.frm.fields_dict.notes_html.wrapper), + }); + crm_notes.refresh(); + } + + show_activities() { + const crm_activities = new erpnext.utils.CRMActivities({ + frm: this.frm, + open_activities_wrapper: $(this.frm.fields_dict.open_activities_html.wrapper), + all_activities_wrapper: $(this.frm.fields_dict.all_activities_html.wrapper), + form_wrapper: $(this.frm.wrapper), + }); + crm_activities.refresh(); + } }; extend_cscript(cur_frm.cscript, new erpnext.crm.Opportunity({frm: cur_frm})); diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json index 089f2d2faa..1a6f23bc7b 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.json +++ b/erpnext/crm/doctype/opportunity/opportunity.json @@ -1,5 +1,6 @@ { "actions": [], + "allow_events_in_timeline": 1, "allow_import": 1, "allow_rename": 1, "autoname": "naming_series:", @@ -11,68 +12,87 @@ "email_append_to": 1, "engine": "InnoDB", "field_order": [ - "from_section", "naming_series", "opportunity_from", "party_name", "customer_name", - "source", - "column_break0", - "title", - "opportunity_type", "status", - "converted_by", + "column_break0", + "opportunity_type", + "source", + "opportunity_owner", + "column_break_10", "sales_stage", - "first_response_time", "expected_closing", - "next_contact", - "contact_by", - "contact_date", - "column_break2", - "to_discuss", + "probability", + "organization_details_section", + "no_of_employees", + "annual_revenue", + "customer_group", + "column_break_23", + "industry", + "market_segment", + "website", + "column_break_31", + "city", + "state", + "country", + "territory", "section_break_14", "currency", + "column_break_36", "conversion_rate", - "base_opportunity_amount", - "with_items", "column_break_17", - "probability", "opportunity_amount", + "base_opportunity_amount", + "more_info", + "company", + "campaign", + "transaction_date", + "column_break1", + "language", + "amended_from", + "title", + "first_response_time", + "lost_detail_section", + "lost_reasons", + "order_lost_reason", + "column_break_56", + "competitors", + "contact_info", + "primary_contact_section", + "contact_person", + "job_title", + "column_break_54", + "contact_email", + "contact_mobile", + "column_break_22", + "whatsapp", + "phone", + "phone_ext", + "address_contact_section", + "address_html", + "customer_address", + "address_display", + "column_break3", + "contact_html", + "contact_display", "items_section", "items", "section_break_32", "base_total", "column_break_33", "total", - "contact_info", - "customer_address", - "address_display", - "territory", - "customer_group", - "column_break3", - "contact_person", - "contact_display", - "contact_email", - "contact_mobile", - "more_info", - "company", - "campaign", - "column_break1", - "transaction_date", - "language", - "amended_from", - "lost_detail_section", - "lost_reasons", - "order_lost_reason", - "column_break_56", - "competitors" + "activities_tab", + "open_activities_html", + "all_activities_section", + "all_activities_html", + "notes_tab", + "notes_html", + "notes", + "dashboard_tab" ], "fields": [ - { - "fieldname": "from_section", - "fieldtype": "Section Break", - "options": "fa fa-user" - }, { "fieldname": "naming_series", "fieldtype": "Select", @@ -113,8 +133,9 @@ "bold": 1, "fieldname": "customer_name", "fieldtype": "Data", + "hidden": 1, "in_global_search": 1, - "label": "Customer / Lead Name", + "label": "Customer Name", "read_only": 1 }, { @@ -166,48 +187,10 @@ "fieldtype": "Date", "label": "Expected Closing Date" }, - { - "collapsible": 1, - "collapsible_depends_on": "contact_by", - "fieldname": "next_contact", - "fieldtype": "Section Break", - "label": "Follow Up" - }, - { - "fieldname": "contact_by", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Next Contact By", - "oldfieldname": "contact_by", - "oldfieldtype": "Link", - "options": "User", - "width": "75px" - }, - { - "fieldname": "contact_date", - "fieldtype": "Datetime", - "label": "Next Contact Date", - "oldfieldname": "contact_date", - "oldfieldtype": "Date" - }, - { - "fieldname": "column_break2", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "to_discuss", - "fieldtype": "Small Text", - "label": "To Discuss", - "no_copy": 1, - "oldfieldname": "to_discuss", - "oldfieldtype": "Small Text" - }, { "fieldname": "section_break_14", "fieldtype": "Section Break", - "label": "Sales" + "label": "Opportunity Value" }, { "fieldname": "currency", @@ -221,12 +204,6 @@ "label": "Opportunity Amount", "options": "currency" }, - { - "default": "0", - "fieldname": "with_items", - "fieldtype": "Check", - "label": "With Items" - }, { "fieldname": "column_break_17", "fieldtype": "Column Break" @@ -245,9 +222,8 @@ "label": "Probability (%)" }, { - "depends_on": "with_items", "fieldname": "items_section", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Items", "oldfieldtype": "Section Break", "options": "fa fa-shopping-cart" @@ -262,18 +238,16 @@ "options": "Opportunity Item" }, { - "collapsible": 1, - "collapsible_depends_on": "next_contact_by", - "depends_on": "eval:doc.party_name", "fieldname": "contact_info", - "fieldtype": "Section Break", - "label": "Contact Info", + "fieldtype": "Tab Break", + "label": "Contacts", "options": "fa fa-bullhorn" }, { "depends_on": "eval:doc.party_name", "fieldname": "customer_address", "fieldtype": "Link", + "hidden": 1, "label": "Customer / Lead Address", "options": "Address", "print_hide": 1 @@ -327,19 +301,16 @@ "read_only": 1 }, { - "depends_on": "eval:doc.party_name", "fieldname": "contact_email", "fieldtype": "Data", "label": "Contact Email", - "options": "Email", - "read_only": 1 + "options": "Email" }, { - "depends_on": "eval:doc.party_name", "fieldname": "contact_mobile", - "fieldtype": "Small Text", - "label": "Contact Mobile No", - "read_only": 1 + "fieldtype": "Data", + "label": "Contact Mobile", + "options": "Phone" }, { "collapsible": 1, @@ -416,12 +387,6 @@ "options": "Opportunity Lost Reason Detail", "read_only": 1 }, - { - "fieldname": "converted_by", - "fieldtype": "Link", - "label": "Converted By", - "options": "User" - }, { "bold": 1, "fieldname": "first_response_time", @@ -474,6 +439,7 @@ "fieldtype": "Column Break" }, { + "depends_on": "eval:doc.status===\"Lost\"", "fieldname": "lost_detail_section", "fieldtype": "Section Break", "label": "Lost Reasons" @@ -488,12 +454,179 @@ "label": "Competitors", "options": "Competitor Detail", "read_only": 1 + }, + { + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, + { + "fieldname": "organization_details_section", + "fieldtype": "Section Break", + "label": "Organization" + }, + { + "fieldname": "no_of_employees", + "fieldtype": "Int", + "label": "No of Employees" + }, + { + "fieldname": "annual_revenue", + "fieldtype": "Currency", + "label": "Annual Revenue" + }, + { + "fieldname": "industry", + "fieldtype": "Link", + "label": "Industry", + "options": "Industry Type" + }, + { + "fieldname": "market_segment", + "fieldtype": "Link", + "label": "Market Segment", + "options": "Market Segment" + }, + { + "fieldname": "column_break_23", + "fieldtype": "Column Break" + }, + { + "fieldname": "address_contact_section", + "fieldtype": "Section Break", + "label": "Address & Contact" + }, + { + "fieldname": "column_break_36", + "fieldtype": "Column Break" + }, + { + "fieldname": "opportunity_owner", + "fieldtype": "Link", + "label": "Opportunity Owner", + "options": "User" + }, + { + "fieldname": "website", + "fieldtype": "Data", + "label": "Website" + }, + { + "fieldname": "column_break_22", + "fieldtype": "Column Break" + }, + { + "fieldname": "whatsapp", + "fieldtype": "Data", + "label": "WhatsApp", + "options": "Phone" + }, + { + "fieldname": "phone", + "fieldtype": "Data", + "label": "Phone", + "options": "Phone" + }, + { + "fieldname": "phone_ext", + "fieldtype": "Data", + "label": "Phone Ext." + }, + { + "fieldname": "column_break_31", + "fieldtype": "Column Break" + }, + { + "fieldname": "primary_contact_section", + "fieldtype": "Section Break", + "label": "Primary Contact" + }, + { + "fieldname": "column_break_54", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "dashboard_tab", + "fieldtype": "Tab Break", + "label": "Dashboard", + "show_dashboard": 1 + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "notes_tab", + "fieldtype": "Tab Break", + "label": "Notes" + }, + { + "fieldname": "notes_html", + "fieldtype": "HTML", + "label": "Notes HTML" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "activities_tab", + "fieldtype": "Tab Break", + "label": "Activities" + }, + { + "fieldname": "job_title", + "fieldtype": "Data", + "label": "Job Title" + }, + { + "fieldname": "address_html", + "fieldtype": "HTML", + "label": "Address HTML" + }, + { + "fieldname": "contact_html", + "fieldtype": "HTML", + "label": "Contact HTML" + }, + { + "fieldname": "open_activities_html", + "fieldtype": "HTML", + "label": "Open Activities HTML" + }, + { + "fieldname": "all_activities_section", + "fieldtype": "Section Break", + "label": "All Activities" + }, + { + "fieldname": "all_activities_html", + "fieldtype": "HTML", + "label": "All Activities HTML" + }, + { + "fieldname": "notes", + "fieldtype": "Table", + "hidden": 1, + "label": "Notes", + "no_copy": 1, + "options": "CRM Note" + }, + { + "fieldname": "city", + "fieldtype": "Data", + "label": "City" + }, + { + "fieldname": "state", + "fieldtype": "Data", + "label": "State" + }, + { + "fieldname": "country", + "fieldtype": "Link", + "label": "Country", + "options": "Country" } ], "icon": "fa fa-info-sign", "idx": 195, "links": [], - "modified": "2022-01-29 19:32:26.382896", + "modified": "2022-06-27 18:44:32.858696", "modified_by": "Administrator", "module": "CRM", "name": "Opportunity", diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py index 19b4d68e1c..08eb472bb9 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.py +++ b/erpnext/crm/doctype/opportunity/opportunity.py @@ -6,52 +6,54 @@ import json import frappe from frappe import _ +from frappe.contacts.address_and_contact import load_address_and_contact from frappe.email.inbox import link_communication_to_document from frappe.model.mapper import get_mapped_doc -from frappe.query_builder import DocType -from frappe.utils import cint, cstr, flt, get_fullname +from frappe.query_builder import DocType, Interval +from frappe.query_builder.functions import Now +from frappe.utils import flt, get_fullname -from erpnext.crm.utils import add_link_in_communication, copy_comments +from erpnext.crm.utils import ( + CRMNote, + copy_comments, + link_communications, + link_open_events, + link_open_tasks, +) from erpnext.setup.utils import get_exchange_rate from erpnext.utilities.transaction_base import TransactionBase -class Opportunity(TransactionBase): +class Opportunity(TransactionBase, CRMNote): + def onload(self): + ref_doc = frappe.get_doc(self.opportunity_from, self.party_name) + load_address_and_contact(ref_doc) + self.set("__onload", ref_doc.get("__onload")) + def after_insert(self): if self.opportunity_from == "Lead": frappe.get_doc("Lead", self.party_name).set_status(update=True) + self.disable_lead() - if self.opportunity_from in ["Lead", "Prospect"]: + link_open_tasks(self.opportunity_from, self.party_name, self) + link_open_events(self.opportunity_from, self.party_name, self) if frappe.db.get_single_value("CRM Settings", "carry_forward_communication_and_comments"): copy_comments(self.opportunity_from, self.party_name, self) - add_link_in_communication(self.opportunity_from, self.party_name, self) + link_communications(self.opportunity_from, self.party_name, self) def validate(self): - self._prev = frappe._dict( - { - "contact_date": frappe.db.get_value("Opportunity", self.name, "contact_date") - if (not cint(self.get("__islocal"))) - else None, - "contact_by": frappe.db.get_value("Opportunity", self.name, "contact_by") - if (not cint(self.get("__islocal"))) - else None, - } - ) - self.make_new_lead_if_required() self.validate_item_details() self.validate_uom_is_integer("uom", "qty") self.validate_cust_name() self.map_fields() + self.set_exchange_rate() if not self.title: self.title = self.customer_name - if not self.with_items: - self.items = [] - - else: - self.calculate_totals() + self.calculate_totals() + self.update_prospect() def map_fields(self): for field in self.meta.get_valid_columns(): @@ -62,18 +64,65 @@ class Opportunity(TransactionBase): except Exception: continue + def set_exchange_rate(self): + company_currency = frappe.get_cached_value("Company", self.company, "default_currency") + if self.currency == company_currency: + self.conversion_rate = 1.0 + return + + if not self.conversion_rate or self.conversion_rate == 1.0: + self.conversion_rate = get_exchange_rate(self.currency, company_currency, self.transaction_date) + def calculate_totals(self): total = base_total = 0 for item in self.get("items"): item.amount = flt(item.rate) * flt(item.qty) - item.base_rate = flt(self.conversion_rate * item.rate) - item.base_amount = flt(self.conversion_rate * item.amount) + item.base_rate = flt(self.conversion_rate) * flt(item.rate) + item.base_amount = flt(self.conversion_rate) * flt(item.amount) total += item.amount base_total += item.base_amount self.total = flt(total) self.base_total = flt(base_total) + def update_prospect(self): + prospect_name = None + if self.opportunity_from == "Prospect" and self.party_name: + prospect_name = self.party_name + elif self.opportunity_from == "Lead": + prospect_name = frappe.db.get_value("Prospect Lead", {"lead": self.party_name}, "parent") + + if prospect_name: + prospect = frappe.get_doc("Prospect", prospect_name) + + opportunity_values = { + "opportunity": self.name, + "amount": self.opportunity_amount, + "stage": self.sales_stage, + "deal_owner": self.opportunity_owner, + "probability": self.probability, + "expected_closing": self.expected_closing, + "currency": self.currency, + "contact_person": self.contact_person, + } + + opportunity_already_added = False + for d in prospect.get("opportunities", []): + if d.opportunity == self.name: + opportunity_already_added = True + d.update(opportunity_values) + d.db_update() + + if not opportunity_already_added: + prospect.append("opportunities", opportunity_values) + prospect.flags.ignore_permissions = True + prospect.flags.ignore_mandatory = True + prospect.save() + + def disable_lead(self): + if self.opportunity_from == "Lead": + frappe.db.set_value("Lead", self.party_name, {"disabled": 1, "docstatus": 1}) + def make_new_lead_if_required(self): """Set lead against new opportunity""" if (not self.get("party_name")) and self.contact_email: @@ -143,11 +192,8 @@ class Opportunity(TransactionBase): else: frappe.throw(_("Cannot declare as lost, because Quotation has been made.")) - def on_trash(self): - self.delete_events() - def has_active_quotation(self): - if not self.with_items: + if not self.get("items", []): return frappe.get_all( "Quotation", {"opportunity": self.name, "status": ("not in", ["Lost", "Closed"]), "docstatus": 1}, @@ -164,7 +210,7 @@ class Opportunity(TransactionBase): ) def has_ordered_quotation(self): - if not self.with_items: + if not self.get("items", []): return frappe.get_all( "Quotation", {"opportunity": self.name, "status": "Ordered", "docstatus": 1}, "name" ) @@ -194,43 +240,20 @@ class Opportunity(TransactionBase): return True def validate_cust_name(self): - if self.party_name and self.opportunity_from == "Customer": - self.customer_name = frappe.db.get_value("Customer", self.party_name, "customer_name") - elif self.party_name and self.opportunity_from == "Lead": - lead_name, company_name = frappe.db.get_value( - "Lead", self.party_name, ["lead_name", "company_name"] - ) - self.customer_name = company_name or lead_name + if self.party_name: + if self.opportunity_from == "Customer": + self.customer_name = frappe.db.get_value("Customer", self.party_name, "customer_name") + elif self.opportunity_from == "Lead": + customer_name = frappe.db.get_value("Prospect Lead", {"lead": self.party_name}, "parent") + if not customer_name: + lead_name, company_name = frappe.db.get_value( + "Lead", self.party_name, ["lead_name", "company_name"] + ) + customer_name = company_name or lead_name - def on_update(self): - self.add_calendar_event() - - def add_calendar_event(self, opts=None, force=False): - if frappe.db.get_single_value("CRM Settings", "create_event_on_next_contact_date_opportunity"): - if not opts: - opts = frappe._dict() - - opts.description = "" - opts.contact_date = self.contact_date - - if self.party_name and self.opportunity_from == "Customer": - if self.contact_person: - opts.description = "Contact " + cstr(self.contact_person) - else: - opts.description = "Contact customer " + cstr(self.party_name) - elif self.party_name and self.opportunity_from == "Lead": - if self.contact_display: - opts.description = "Contact " + cstr(self.contact_display) - else: - opts.description = "Contact lead " + cstr(self.party_name) - - opts.subject = opts.description - opts.description += ". By : " + cstr(self.contact_by) - - if self.to_discuss: - opts.description += " To Discuss : " + cstr(self.to_discuss) - - super(Opportunity, self).add_calendar_event(opts, force) + self.customer_name = customer_name + elif self.opportunity_from == "Prospect": + self.customer_name = self.party_name def validate_item_details(self): if not self.get("items"): @@ -294,7 +317,7 @@ def make_quotation(source_name, target_doc=None): quotation.run_method("set_missing_values") quotation.run_method("calculate_taxes_and_totals") - if not source.with_items: + if not source.get("items", []): quotation.opportunity = source.name doclist = get_mapped_doc( @@ -398,15 +421,17 @@ def auto_close_opportunity(): frappe.db.get_single_value("CRM Settings", "close_opportunity_after_days") or 15 ) - opportunities = frappe.db.sql( - """ select name from tabOpportunity where status='Replied' and - modified1000\n1000+" }, { "fieldname": "annual_revenue", @@ -97,8 +100,7 @@ { "fieldname": "website", "fieldtype": "Data", - "label": "Website", - "options": "URL" + "label": "Website" }, { "fieldname": "prospect_owner", @@ -108,23 +110,14 @@ }, { "fieldname": "leads_section", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Leads" }, - { - "fieldname": "prospect_lead", - "fieldtype": "Table", - "options": "Prospect Lead" - }, { "fieldname": "address_html", "fieldtype": "HTML", "label": "Address HTML" }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, { "fieldname": "contact_html", "fieldtype": "HTML", @@ -132,28 +125,16 @@ }, { "collapsible": 1, + "depends_on": "eval:!doc.__islocal", "fieldname": "notes_section", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Notes" }, - { - "fieldname": "notes", - "fieldtype": "Text Editor" - }, - { - "fieldname": "more_details_section", - "fieldtype": "Section Break", - "label": "More Details" - }, - { - "fieldname": "column_break_13", - "fieldtype": "Column Break" - }, { "depends_on": "eval: !doc.__islocal", "fieldname": "address_and_contact_section", "fieldtype": "Section Break", - "label": "Address and Contact" + "label": "Address" }, { "fieldname": "company", @@ -161,11 +142,83 @@ "label": "Company", "options": "Company", "reqd": 1 + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "fieldname": "opportunities_tab", + "fieldtype": "Tab Break", + "label": "Opportunities" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "activities_tab", + "fieldtype": "Tab Break", + "label": "Activities" + }, + { + "fieldname": "notes_html", + "fieldtype": "HTML", + "label": "Notes HTML" + }, + { + "fieldname": "opportunities", + "fieldtype": "Table", + "label": "Opportunities", + "options": "Prospect Opportunity" + }, + { + "fieldname": "contacts_tab", + "fieldtype": "Tab Break", + "label": "Address & Contact" + }, + { + "fieldname": "column_break_18", + "fieldtype": "Column Break" + }, + { + "fieldname": "leads", + "fieldtype": "Table", + "options": "Prospect Lead" + }, + { + "fieldname": "column_break_16", + "fieldtype": "Column Break" + }, + { + "fieldname": "overview_tab", + "fieldtype": "Tab Break", + "label": "Overview" + }, + { + "fieldname": "open_activities_html", + "fieldtype": "HTML", + "label": "Open Activities HTML" + }, + { + "fieldname": "all_activities_section", + "fieldtype": "Section Break", + "label": "All Activities" + }, + { + "fieldname": "all_activities_html", + "fieldtype": "HTML", + "label": "All Activities HTML" + }, + { + "fieldname": "notes", + "fieldtype": "Table", + "hidden": 1, + "label": "Notes", + "no_copy": 1, + "options": "CRM Note" } ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-11-01 13:10:36.759249", + "modified": "2022-06-21 15:10:26.887502", "modified_by": "Administrator", "module": "CRM", "name": "Prospect", @@ -207,6 +260,7 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], "title_field": "company_name", "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/crm/doctype/prospect/prospect.py b/erpnext/crm/doctype/prospect/prospect.py index 39436f5918..fbb115883f 100644 --- a/erpnext/crm/doctype/prospect/prospect.py +++ b/erpnext/crm/doctype/prospect/prospect.py @@ -3,19 +3,15 @@ import frappe from frappe.contacts.address_and_contact import load_address_and_contact -from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc -from erpnext.crm.utils import add_link_in_communication, copy_comments +from erpnext.crm.utils import CRMNote, copy_comments, link_communications, link_open_events -class Prospect(Document): +class Prospect(CRMNote): def onload(self): load_address_and_contact(self) - def validate(self): - self.update_lead_details() - def on_update(self): self.link_with_lead_contact_and_address() @@ -23,23 +19,24 @@ class Prospect(Document): self.unlink_dynamic_links() def after_insert(self): - if frappe.db.get_single_value("CRM Settings", "carry_forward_communication_and_comments"): - for row in self.get("prospect_lead"): - copy_comments("Lead", row.lead, self) - add_link_in_communication("Lead", row.lead, self) + carry_forward_communication_and_comments = frappe.db.get_single_value( + "CRM Settings", "carry_forward_communication_and_comments" + ) - def update_lead_details(self): - for row in self.get("prospect_lead"): - lead = frappe.get_value( - "Lead", row.lead, ["lead_name", "status", "email_id", "mobile_no"], as_dict=True - ) - row.lead_name = lead.lead_name - row.status = lead.status - row.email = lead.email_id - row.mobile_no = lead.mobile_no + for row in self.get("leads"): + if carry_forward_communication_and_comments: + copy_comments("Lead", row.lead, self) + link_communications("Lead", row.lead, self) + link_open_events("Lead", row.lead, self) + + for row in self.get("opportunities"): + if carry_forward_communication_and_comments: + copy_comments("Opportunity", row.opportunity, self) + link_communications("Opportunity", row.opportunity, self) + link_open_events("Opportunity", row.opportunity, self) def link_with_lead_contact_and_address(self): - for row in self.prospect_lead: + for row in self.leads: links = frappe.get_all( "Dynamic Link", filters={"link_doctype": "Lead", "link_name": row.lead}, @@ -116,9 +113,7 @@ def make_opportunity(source_name, target_doc=None): { "Prospect": { "doctype": "Opportunity", - "field_map": { - "name": "party_name", - }, + "field_map": {"name": "party_name", "prospect_owner": "opportunity_owner"}, } }, target_doc, @@ -127,3 +122,25 @@ def make_opportunity(source_name, target_doc=None): ) return doclist + + +@frappe.whitelist() +def get_opportunities(prospect): + return frappe.get_all( + "Opportunity", + filters={"opportunity_from": "Prospect", "party_name": prospect}, + fields=[ + "opportunity_owner", + "sales_stage", + "status", + "expected_closing", + "probability", + "opportunity_amount", + "currency", + "contact_person", + "contact_email", + "contact_mobile", + "creation", + "name", + ], + ) diff --git a/erpnext/crm/doctype/prospect/test_prospect.py b/erpnext/crm/doctype/prospect/test_prospect.py index ddd7b932aa..874f84ca84 100644 --- a/erpnext/crm/doctype/prospect/test_prospect.py +++ b/erpnext/crm/doctype/prospect/test_prospect.py @@ -20,7 +20,7 @@ class TestProspect(unittest.TestCase): add_lead_to_prospect(lead_doc.name, prospect_doc.name) prospect_doc.reload() lead_exists_in_prosoect = False - for rec in prospect_doc.get("prospect_lead"): + for rec in prospect_doc.get("leads"): if rec.lead == lead_doc.name: lead_exists_in_prosoect = True self.assertEqual(lead_exists_in_prosoect, True) diff --git a/erpnext/crm/doctype/prospect_lead/prospect_lead.json b/erpnext/crm/doctype/prospect_lead/prospect_lead.json index 3c160d9e80..075c0f9be5 100644 --- a/erpnext/crm/doctype/prospect_lead/prospect_lead.json +++ b/erpnext/crm/doctype/prospect_lead/prospect_lead.json @@ -7,12 +7,15 @@ "field_order": [ "lead", "lead_name", - "status", "email", - "mobile_no" + "column_break_4", + "mobile_no", + "lead_owner", + "status" ], "fields": [ { + "columns": 2, "fieldname": "lead", "fieldtype": "Link", "in_list_view": 1, @@ -21,6 +24,8 @@ "reqd": 1 }, { + "columns": 2, + "fetch_from": "lead.lead_name", "fieldname": "lead_name", "fieldtype": "Data", "in_list_view": 1, @@ -28,14 +33,17 @@ "read_only": 1 }, { + "columns": 1, + "fetch_from": "lead.status", "fieldname": "status", - "fieldtype": "Select", + "fieldtype": "Data", "in_list_view": 1, "label": "Status", - "options": "Lead\nOpen\nReplied\nOpportunity\nQuotation\nLost Quotation\nInterested\nConverted\nDo Not Contact", "read_only": 1 }, { + "columns": 2, + "fetch_from": "lead.email_id", "fieldname": "email", "fieldtype": "Data", "in_list_view": 1, @@ -44,18 +52,32 @@ "read_only": 1 }, { + "columns": 2, + "fetch_from": "lead.mobile_no", "fieldname": "mobile_no", "fieldtype": "Data", "in_list_view": 1, "label": "Mobile No", "options": "Phone", "read_only": 1 + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "columns": 1, + "fetch_from": "lead.lead_owner", + "fieldname": "lead_owner", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Lead Owner" } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2021-08-25 12:58:24.638054", + "modified": "2022-04-28 20:27:58.805970", "modified_by": "Administrator", "module": "CRM", "name": "Prospect Lead", @@ -63,5 +85,6 @@ "permissions": [], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/accounts/doctype/gst_account/__init__.py b/erpnext/crm/doctype/prospect_opportunity/__init__.py similarity index 100% rename from erpnext/accounts/doctype/gst_account/__init__.py rename to erpnext/crm/doctype/prospect_opportunity/__init__.py diff --git a/erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.json b/erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.json new file mode 100644 index 0000000000..d8c2520176 --- /dev/null +++ b/erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.json @@ -0,0 +1,101 @@ +{ + "actions": [], + "autoname": "autoincrement", + "creation": "2022-04-27 17:40:37.965161", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "opportunity", + "amount", + "stage", + "deal_owner", + "column_break_4", + "probability", + "expected_closing", + "currency", + "contact_person" + ], + "fields": [ + { + "columns": 2, + "fieldname": "opportunity", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Opportunity", + "options": "Opportunity" + }, + { + "columns": 2, + "fetch_from": "opportunity.opportunity_amount", + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "options": "currency" + }, + { + "columns": 2, + "fetch_from": "opportunity.sales_stage", + "fieldname": "stage", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Stage" + }, + { + "columns": 1, + "fetch_from": "opportunity.probability", + "fieldname": "probability", + "fieldtype": "Percent", + "in_list_view": 1, + "label": "Probability" + }, + { + "columns": 1, + "fetch_from": "opportunity.expected_closing", + "fieldname": "expected_closing", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Closing" + }, + { + "fetch_from": "opportunity.currency", + "fieldname": "currency", + "fieldtype": "Link", + "label": "Currency", + "options": "Currency" + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "columns": 2, + "fetch_from": "opportunity.opportunity_owner", + "fieldname": "deal_owner", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Deal Owner" + }, + { + "fetch_from": "opportunity.contact_person", + "fieldname": "contact_person", + "fieldtype": "Link", + "label": "Contact Person", + "options": "Contact" + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-04-28 10:05:38.730368", + "modified_by": "Administrator", + "module": "CRM", + "name": "Prospect Opportunity", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_training/employee_training.py b/erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.py similarity index 54% rename from erpnext/hr/doctype/employee_training/employee_training.py rename to erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.py index cd92dd609f..8f5d19aaf2 100644 --- a/erpnext/hr/doctype/employee_training/employee_training.py +++ b/erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class EmployeeTraining(Document): +class ProspectOpportunity(Document): pass diff --git a/erpnext/crm/report/lost_opportunity/lost_opportunity.js b/erpnext/crm/report/lost_opportunity/lost_opportunity.js index 97c56f8c43..927c54df07 100644 --- a/erpnext/crm/report/lost_opportunity/lost_opportunity.js +++ b/erpnext/crm/report/lost_opportunity/lost_opportunity.js @@ -57,11 +57,5 @@ frappe.query_reports["Lost Opportunity"] = { "fieldtype": "Dynamic Link", "options": "opportunity_from" }, - { - "fieldname":"contact_by", - "label": __("Next Contact By"), - "fieldtype": "Link", - "options": "User" - }, ] }; diff --git a/erpnext/crm/report/lost_opportunity/lost_opportunity.json b/erpnext/crm/report/lost_opportunity/lost_opportunity.json index e7a8e12ba7..f6f36bd2b5 100644 --- a/erpnext/crm/report/lost_opportunity/lost_opportunity.json +++ b/erpnext/crm/report/lost_opportunity/lost_opportunity.json @@ -7,8 +7,8 @@ "doctype": "Report", "idx": 0, "is_standard": "Yes", - "json": "{\"order_by\": \"`tabOpportunity`.`modified` desc\", \"filters\": [[\"Opportunity\", \"status\", \"=\", \"Lost\"]], \"fields\": [[\"name\", \"Opportunity\"], [\"opportunity_from\", \"Opportunity\"], [\"party_name\", \"Opportunity\"], [\"customer_name\", \"Opportunity\"], [\"opportunity_type\", \"Opportunity\"], [\"status\", \"Opportunity\"], [\"contact_by\", \"Opportunity\"], [\"docstatus\", \"Opportunity\"], [\"lost_reason\", \"Lost Reason Detail\"]], \"add_totals_row\": 0, \"add_total_row\": 0, \"page_length\": 20}", - "modified": "2020-07-29 15:49:02.848845", + "json": "{\"order_by\": \"`tabOpportunity`.`modified` desc\", \"filters\": [[\"Opportunity\", \"status\", \"=\", \"Lost\"]], \"fields\": [[\"name\", \"Opportunity\"], [\"opportunity_from\", \"Opportunity\"], [\"party_name\", \"Opportunity\"], [\"customer_name\", \"Opportunity\"], [\"opportunity_type\", \"Opportunity\"], [\"status\", \"Opportunity\"], [\"docstatus\", \"Opportunity\"], [\"lost_reason\", \"Lost Reason Detail\"]], \"add_totals_row\": 0, \"add_total_row\": 0, \"page_length\": 20}", + "modified": "2022-06-04 15:49:02.848845", "modified_by": "Administrator", "module": "CRM", "name": "Lost Opportunity", diff --git a/erpnext/crm/report/lost_opportunity/lost_opportunity.py b/erpnext/crm/report/lost_opportunity/lost_opportunity.py index a57b44be47..254511c92f 100644 --- a/erpnext/crm/report/lost_opportunity/lost_opportunity.py +++ b/erpnext/crm/report/lost_opportunity/lost_opportunity.py @@ -61,13 +61,6 @@ def get_columns(): "options": "Territory", "width": 150, }, - { - "label": _("Next Contact By"), - "fieldname": "contact_by", - "fieldtype": "Link", - "options": "User", - "width": 150, - }, ] return columns @@ -81,7 +74,6 @@ def get_data(filters): `tabOpportunity`.party_name, `tabOpportunity`.customer_name, `tabOpportunity`.opportunity_type, - `tabOpportunity`.contact_by, GROUP_CONCAT(`tabOpportunity Lost Reason Detail`.lost_reason separator ', ') lost_reason, `tabOpportunity`.sales_stage, `tabOpportunity`.territory @@ -115,9 +107,6 @@ def get_conditions(filters): if filters.get("party_name"): conditions.append(" and `tabOpportunity`.party_name=%(party_name)s") - if filters.get("contact_by"): - conditions.append(" and `tabOpportunity`.contact_by=%(contact_by)s") - return " ".join(conditions) if conditions else "" diff --git a/erpnext/crm/utils.py b/erpnext/crm/utils.py index 5783b2c661..a2528c3703 100644 --- a/erpnext/crm/utils.py +++ b/erpnext/crm/utils.py @@ -1,4 +1,7 @@ import frappe +from frappe.model.document import Document +from frappe.utils import cstr, now, today +from pypika import functions def update_lead_phone_numbers(contact, method): @@ -41,7 +44,7 @@ def copy_comments(doctype, docname, doc): comment.insert() -def add_link_in_communication(doctype, docname, doc): +def link_communications(doctype, docname, doc): communication_list = get_linked_communication_list(doctype, docname) for communication in communication_list: @@ -60,3 +63,159 @@ def get_linked_communication_list(doctype, docname): ) return communications + communication_links + + +def link_communications_with_prospect(communication, method): + prospect = get_linked_prospect(communication.reference_doctype, communication.reference_name) + + if prospect: + already_linked = any( + [ + d.name + for d in communication.get("timeline_links") + if d.link_doctype == "Prospect" and d.link_name == prospect + ] + ) + if not already_linked: + row = communication.append("timeline_links") + row.link_doctype = "Prospect" + row.link_name = prospect + row.db_update() + + +def get_linked_prospect(reference_doctype, reference_name): + prospect = None + if reference_doctype == "Lead": + prospect = frappe.db.get_value("Prospect Lead", {"lead": reference_name}, "parent") + + elif reference_doctype == "Opportunity": + opportunity_from, party_name = frappe.db.get_value( + "Opportunity", reference_name, ["opportunity_from", "party_name"] + ) + if opportunity_from == "Lead": + prospect = frappe.db.get_value( + "Prospect Opportunity", {"opportunity": reference_name}, "parent" + ) + if opportunity_from == "Prospect": + prospect = party_name + + return prospect + + +def link_events_with_prospect(event, method): + if event.event_participants: + ref_doctype = event.event_participants[0].reference_doctype + ref_docname = event.event_participants[0].reference_docname + prospect = get_linked_prospect(ref_doctype, ref_docname) + if prospect: + event.add_participant("Prospect", prospect) + event.save() + + +def link_open_tasks(ref_doctype, ref_docname, doc): + todos = get_open_todos(ref_doctype, ref_docname) + + for todo in todos: + todo_doc = frappe.get_doc("ToDo", todo.name) + todo_doc.reference_type = doc.doctype + todo_doc.reference_name = doc.name + todo_doc.db_update() + + +def link_open_events(ref_doctype, ref_docname, doc): + events = get_open_events(ref_doctype, ref_docname) + for event in events: + event_doc = frappe.get_doc("Event", event.name) + event_doc.add_participant(doc.doctype, doc.name) + event_doc.save() + + +@frappe.whitelist() +def get_open_activities(ref_doctype, ref_docname): + tasks = get_open_todos(ref_doctype, ref_docname) + events = get_open_events(ref_doctype, ref_docname) + + return {"tasks": tasks, "events": events} + + +def get_open_todos(ref_doctype, ref_docname): + return frappe.get_all( + "ToDo", + filters={"reference_type": ref_doctype, "reference_name": ref_docname, "status": "Open"}, + fields=[ + "name", + "description", + "allocated_to", + "date", + ], + ) + + +def get_open_events(ref_doctype, ref_docname): + event = frappe.qb.DocType("Event") + event_link = frappe.qb.DocType("Event Participants") + + query = ( + frappe.qb.from_(event) + .join(event_link) + .on(event_link.parent == event.name) + .select( + event.name, + event.subject, + event.event_category, + event.starts_on, + event.ends_on, + event.description, + ) + .where( + (event_link.reference_doctype == ref_doctype) + & (event_link.reference_docname == ref_docname) + & (event.status == "Open") + ) + ) + data = query.run(as_dict=True) + + return data + + +def open_leads_opportunities_based_on_todays_event(): + event = frappe.qb.DocType("Event") + event_link = frappe.qb.DocType("Event Participants") + + query = ( + frappe.qb.from_(event) + .join(event_link) + .on(event_link.parent == event.name) + .select(event_link.reference_doctype, event_link.reference_docname) + .where( + (event_link.reference_doctype.isin(["Lead", "Opportunity"])) + & (event.status == "Open") + & (functions.Date(event.starts_on) == today()) + ) + ) + data = query.run(as_dict=True) + + for d in data: + frappe.db.set_value(d.reference_doctype, d.reference_docname, "status", "Open") + + +class CRMNote(Document): + @frappe.whitelist() + def add_note(self, note): + self.append("notes", {"note": note, "added_by": frappe.session.user, "added_on": now()}) + self.save() + + @frappe.whitelist() + def edit_note(self, note, row_id): + for d in self.notes: + if cstr(d.name) == row_id: + d.note = note + d.db_update() + + @frappe.whitelist() + def delete_note(self, row_id): + for d in self.notes: + if cstr(d.name) == row_id: + self.remove(d) + break + self.save() diff --git a/erpnext/e_commerce/doctype/website_item/website_item.py b/erpnext/e_commerce/doctype/website_item/website_item.py index 02ec3bf1f3..f6fea72f8a 100644 --- a/erpnext/e_commerce/doctype/website_item/website_item.py +++ b/erpnext/e_commerce/doctype/website_item/website_item.py @@ -34,9 +34,7 @@ class WebsiteItem(WebsiteGenerator): def autoname(self): # use naming series to accomodate items with same name (different item code) - from frappe.model.naming import make_autoname - - from erpnext.setup.doctype.naming_series.naming_series import get_default_naming_series + from frappe.model.naming import get_default_naming_series, make_autoname naming_series = get_default_naming_series("Website Item") if not self.name and naming_series: diff --git a/erpnext/e_commerce/redisearch_utils.py b/erpnext/e_commerce/redisearch_utils.py index 61b4b9ee1f..1f649c7b48 100644 --- a/erpnext/e_commerce/redisearch_utils.py +++ b/erpnext/e_commerce/redisearch_utils.py @@ -38,7 +38,7 @@ def is_search_module_loaded(): out = cache.execute_command("MODULE LIST") parsed_output = " ".join( - (" ".join([s.decode() for s in o if not isinstance(s, int)]) for o in out) + (" ".join([frappe.as_unicode(s) for s in o if not isinstance(s, int)]) for o in out) ) return "search" in parsed_output except Exception: diff --git a/erpnext/e_commerce/shopping_cart/test_shopping_cart.py b/erpnext/e_commerce/shopping_cart/test_shopping_cart.py index 437ebeac06..f44f8fe298 100644 --- a/erpnext/e_commerce/shopping_cart/test_shopping_cart.py +++ b/erpnext/e_commerce/shopping_cart/test_shopping_cart.py @@ -129,6 +129,7 @@ class TestShoppingCart(unittest.TestCase): self.assertEqual(quotation.net_total, 20) self.assertEqual(len(quotation.get("items")), 1) + @unittest.skip("Flaky in CI") def test_tax_rule(self): self.create_tax_rule() self.login_as_customer() @@ -139,7 +140,7 @@ class TestShoppingCart(unittest.TestCase): tax_rule_master = set_taxes( quotation.party_name, "Customer", - quotation.transaction_date, + None, quotation.company, customer_group=None, supplier_group=None, diff --git a/erpnext/erpnext_integrations/connectors/github_connection.py b/erpnext/erpnext_integrations/connectors/github_connection.py deleted file mode 100644 index f28065e724..0000000000 --- a/erpnext/erpnext_integrations/connectors/github_connection.py +++ /dev/null @@ -1,44 +0,0 @@ -import frappe -from frappe.data_migration.doctype.data_migration_connector.connectors.base import BaseConnection -from github import Github - -class GithubConnection(BaseConnection): - def __init__(self, connector): - self.connector = connector - - try: - password = self.get_password() - except frappe.AuthenticationError: - password = None - - if self.connector.username and password: - self.connection = Github(self.connector.username, self.get_password()) - else: - self.connection = Github() - - self.name_field = 'id' - - def insert(self, doctype, doc): - pass - - def update(self, doctype, doc, migration_id): - pass - - def delete(self, doctype, migration_id): - pass - - def get(self, remote_objectname, fields=None, filters=None, start=0, page_length=10): - repo = filters.get('repo') - - if remote_objectname == 'Milestone': - return self.get_milestones(repo, start, page_length) - if remote_objectname == 'Issue': - return self.get_issues(repo, start, page_length) - - def get_milestones(self, repo, start=0, page_length=10): - _repo = self.connection.get_repo(repo) - return list(_repo.get_milestones()[start:start+page_length]) - - def get_issues(self, repo, start=0, page_length=10): - _repo = self.connection.get_repo(repo) - return list(_repo.get_issues()[start:start+page_length]) diff --git a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py deleted file mode 100644 index 616ecfbac6..0000000000 --- a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -import frappe - - -def pre_process(issue): - - project = frappe.db.get_value("Project", filters={"project_name": issue.milestone}) - return { - "title": issue.title, - "body": frappe.utils.md_to_html(issue.body or ""), - "state": issue.state.title(), - "project": project or "", - } diff --git a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json b/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json deleted file mode 100644 index e945ba2261..0000000000 --- a/erpnext/erpnext_integrations/data_migration_mapping/issue_to_task/issue_to_task.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "condition": "{\"repo\":\"frappe/erpnext\"}", - "creation": "2017-10-16 16:03:32.772191", - "docstatus": 0, - "doctype": "Data Migration Mapping", - "fields": [ - { - "is_child_table": 0, - "local_fieldname": "subject", - "remote_fieldname": "title" - }, - { - "is_child_table": 0, - "local_fieldname": "description", - "remote_fieldname": "body" - }, - { - "is_child_table": 0, - "local_fieldname": "status", - "remote_fieldname": "state" - } - ], - "idx": 0, - "local_doctype": "Task", - "local_primary_key": "name", - "mapping_name": "Issue to Task", - "mapping_type": "Pull", - "migration_id_field": "github_sync_id", - "modified": "2017-10-20 11:48:54.575993", - "modified_by": "Administrator", - "name": "Issue to Task", - "owner": "Administrator", - "page_length": 10, - "remote_objectname": "Issue", - "remote_primary_key": "id" -} \ No newline at end of file diff --git a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py deleted file mode 100644 index d44fc0454c..0000000000 --- a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -def pre_process(milestone): - return { - "title": milestone.title, - "description": milestone.description, - "state": milestone.state.title(), - } diff --git a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json b/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json deleted file mode 100644 index 5a3e07e37e..0000000000 --- a/erpnext/erpnext_integrations/data_migration_mapping/milestone_to_project/milestone_to_project.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "condition": "{\"repo\": \"frappe/erpnext\"}", - "creation": "2017-10-13 11:16:49.664925", - "docstatus": 0, - "doctype": "Data Migration Mapping", - "fields": [ - { - "is_child_table": 0, - "local_fieldname": "project_name", - "remote_fieldname": "title" - }, - { - "is_child_table": 0, - "local_fieldname": "notes", - "remote_fieldname": "description" - }, - { - "is_child_table": 0, - "local_fieldname": "status", - "remote_fieldname": "state" - } - ], - "idx": 0, - "local_doctype": "Project", - "local_primary_key": "project_name", - "mapping_name": "Milestone to Project", - "mapping_type": "Pull", - "migration_id_field": "github_sync_id", - "modified": "2017-10-20 11:48:54.552305", - "modified_by": "Administrator", - "name": "Milestone to Project", - "owner": "Administrator", - "page_length": 10, - "remote_objectname": "Milestone", - "remote_primary_key": "id" -} \ No newline at end of file diff --git a/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json b/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json deleted file mode 100644 index 20eb387cd8..0000000000 --- a/erpnext/erpnext_integrations/data_migration_plan/github_sync/github_sync.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "creation": "2017-10-13 11:16:53.600026", - "docstatus": 0, - "doctype": "Data Migration Plan", - "idx": 0, - "mappings": [ - { - "enabled": 1, - "mapping": "Milestone to Project" - }, - { - "enabled": 1, - "mapping": "Issue to Task" - } - ], - "modified": "2017-10-20 11:48:54.496123", - "modified_by": "Administrator", - "module": "ERPNext Integrations", - "name": "GitHub Sync", - "owner": "Administrator", - "plan_name": "GitHub Sync" -} \ No newline at end of file diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py index 17e332c7df..b52662421d 100644 --- a/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py +++ b/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py @@ -23,7 +23,7 @@ class TestMpesaSettings(unittest.TestCase): def tearDown(self): frappe.db.sql("delete from `tabMpesa Settings`") - frappe.db.sql('delete from `tabIntegration Request` where integration_request_service = "Mpesa"') + frappe.db.sql("delete from `tabIntegration Request` where integration_request_service = 'Mpesa'") def test_creation_of_payment_gateway(self): mode_of_payment = create_mode_of_payment("Mpesa-_Test", payment_type="Phone") diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 066249ba22..d7cd8b957c 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -12,7 +12,7 @@ source_link = "https://github.com/frappe/erpnext" app_logo_url = "/assets/erpnext/images/erpnext-logo.svg" -develop_version = "13.x.x-develop" +develop_version = "14.x.x-develop" app_include_js = "erpnext.bundle.js" app_include_css = "erpnext.bundle.css" @@ -80,13 +80,14 @@ calendars = [ "Holiday List", ] -website_generators = ["Item Group", "Website Item", "BOM", "Sales Partner", "Job Opening"] +website_generators = ["Item Group", "Website Item", "BOM", "Sales Partner"] website_context = { "favicon": "/assets/erpnext/images/erpnext-favicon.svg", "splash_image": "/assets/erpnext/images/erpnext-logo.svg", } +# nosemgrep website_route_rules = [ {"from_route": "/orders", "to_route": "Sales Order"}, { @@ -163,7 +164,6 @@ website_route_rules = [ "to_route": "addresses", "defaults": {"doctype": "Address", "parents": [{"label": _("Addresses"), "route": "addresses"}]}, }, - {"from_route": "/jobs", "to_route": "Job Opening"}, {"from_route": "/boms", "to_route": "BOM"}, {"from_route": "/timesheets", "to_route": "Timesheet"}, {"from_route": "/material-requests", "to_route": "Material Request"}, @@ -256,7 +256,9 @@ sounds = [ {"name": "call-disconnect", "src": "/assets/erpnext/sounds/call-disconnect.mp3", "volume": 0.2}, ] -has_upload_permission = {"Employee": "erpnext.hr.doctype.employee.employee.has_upload_permission"} +has_upload_permission = { + "Employee": "erpnext.setup.doctype.employee.employee.has_upload_permission" +} has_website_permission = { "Sales Order": "erpnext.controllers.website_list_for_contact.has_website_permission", @@ -289,9 +291,9 @@ doc_events = { }, "User": { "after_insert": "frappe.contacts.doctype.contact.contact.update_contact", - "validate": "erpnext.hr.doctype.employee.employee.validate_employee_role", + "validate": "erpnext.setup.doctype.employee.employee.validate_employee_role", "on_update": [ - "erpnext.hr.doctype.employee.employee.update_user_permissions", + "erpnext.setup.doctype.employee.employee.update_user_permissions", "erpnext.portal.utils.set_default_role", ], }, @@ -299,12 +301,15 @@ doc_events = { "on_update": [ "erpnext.support.doctype.service_level_agreement.service_level_agreement.on_communication_update", "erpnext.support.doctype.issue.issue.set_first_response_time", - ] + ], + "after_insert": "erpnext.crm.utils.link_communications_with_prospect", + }, + "Event": { + "after_insert": "erpnext.crm.utils.link_events_with_prospect", }, "Sales Taxes and Charges Template": { "on_update": "erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings.validate_cart_settings" }, - "Tax Category": {"validate": "erpnext.regional.india.utils.validate_tax_category"}, "Sales Invoice": { "on_submit": [ "erpnext.regional.create_transaction_log", @@ -318,23 +323,15 @@ doc_events = { "erpnext.regional.saudi_arabia.utils.delete_qr_code_file", ], "on_trash": "erpnext.regional.check_deletion_permission", - "validate": [ - "erpnext.regional.india.utils.validate_document_name", - "erpnext.regional.india.utils.update_taxable_values", - ], }, "POS Invoice": {"on_submit": ["erpnext.regional.saudi_arabia.utils.create_qr_code"]}, "Purchase Invoice": { "validate": [ - "erpnext.regional.india.utils.validate_reverse_charge_transaction", - "erpnext.regional.india.utils.update_itc_availed_fields", "erpnext.regional.united_arab_emirates.utils.update_grand_total_for_rcm", "erpnext.regional.united_arab_emirates.utils.validate_returns", - "erpnext.regional.india.utils.update_taxable_values", ] }, "Payment Entry": { - "validate": "erpnext.regional.india.utils.update_place_of_supply", "on_submit": [ "erpnext.regional.create_transaction_log", "erpnext.accounts.doctype.payment_request.payment_request.update_payment_req_status", @@ -344,20 +341,9 @@ doc_events = { }, "Address": { "validate": [ - "erpnext.regional.india.utils.validate_gstin_for_india", "erpnext.regional.italy.utils.set_state_code", - "erpnext.regional.india.utils.update_gst_category", ], }, - "Supplier": {"validate": "erpnext.regional.india.utils.validate_pan_for_india"}, - ( - "Sales Invoice", - "Sales Order", - "Delivery Note", - "Purchase Invoice", - "Purchase Order", - "Purchase Receipt", - ): {"validate": ["erpnext.regional.india.utils.set_place_of_supply"]}, "Contact": { "on_trash": "erpnext.support.doctype.issue.issue.update_issue", "after_insert": "erpnext.telephony.doctype.call_log.call_log.link_existing_conversations", @@ -369,12 +355,7 @@ doc_events = { ("Quotation", "Sales Order", "Sales Invoice"): { "validate": ["erpnext.erpnext_integrations.taxjar_integration.set_sales_tax"] }, - "Company": { - "on_trash": [ - "erpnext.regional.india.utils.delete_gst_settings_for_company", - "erpnext.regional.saudi_arabia.utils.delete_vat_settings_for_company", - ] - }, + "Company": {"on_trash": ["erpnext.regional.saudi_arabia.utils.delete_vat_settings_for_company"]}, "Integration Request": { "validate": "erpnext.accounts.doctype.payment_request.payment_request.validate_payment" }, @@ -387,43 +368,44 @@ auto_cancel_exempted_doctypes = [ "Payment Entry", ] -after_migrate = ["erpnext.setup.install.update_select_perm_after_install"] - scheduler_events = { "cron": { + "0/5 * * * *": [ + "erpnext.manufacturing.doctype.bom_update_log.bom_update_log.resume_bom_cost_update_jobs", + ], "0/30 * * * *": [ "erpnext.utilities.doctype.video.video.update_youtube_data", - ] + ], + # Hourly but offset by 30 minutes + "30 * * * *": [ + "erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs", + ], + # Daily but offset by 45 minutes + "45 0 * * *": [ + "erpnext.stock.reorder_item.reorder_item", + ], }, "all": [ "erpnext.projects.doctype.project.project.project_status_update_reminder", - "erpnext.hr.doctype.interview.interview.send_interview_reminder", "erpnext.crm.doctype.social_media_post.social_media_post.process_scheduled_social_media_posts", ], "hourly": [ - "erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group.trigger_emails", "erpnext.accounts.doctype.subscription.subscription.process_all", - "erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs", "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.automatic_synchronization", "erpnext.projects.doctype.project.project.hourly_reminder", "erpnext.projects.doctype.project.project.collect_project_status", - "erpnext.hr.doctype.shift_type.shift_type.process_auto_attendance_for_all_shifts", ], "hourly_long": [ "erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.repost_entries", "erpnext.bulk_transaction.doctype.bulk_transaction_log.bulk_transaction_log.retry_failing_transaction", ], "daily": [ - "erpnext.stock.reorder_item.reorder_item", "erpnext.support.doctype.issue.issue.auto_close_tickets", "erpnext.crm.doctype.opportunity.opportunity.auto_close_opportunity", "erpnext.controllers.accounts_controller.update_invoice_status", "erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year", - "erpnext.hr.doctype.employee.employee_reminders.send_work_anniversary_reminders", - "erpnext.hr.doctype.employee.employee_reminders.send_birthday_reminders", "erpnext.projects.doctype.task.task.set_tasks_as_overdue", "erpnext.assets.doctype.asset.depreciation.post_depreciation_entries", - "erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group.send_summary", "erpnext.stock.doctype.serial_no.serial_no.update_maintenance_status", "erpnext.buying.doctype.supplier_scorecard.supplier_scorecard.refresh_scorecards", "erpnext.setup.doctype.company.company.cache_companies_monthly_sales_history", @@ -439,20 +421,14 @@ scheduler_events = { "erpnext.selling.doctype.quotation.quotation.set_expired_status", "erpnext.buying.doctype.supplier_quotation.supplier_quotation.set_expired_status", "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_auto_email", - "erpnext.hr.doctype.interview.interview.send_daily_feedback_reminder", ], "daily_long": [ "erpnext.setup.doctype.email_digest.email_digest.send", "erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.auto_update_latest_price_in_all_boms", - "erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.process_expired_allocation", - "erpnext.hr.utils.generate_leave_encashment", - "erpnext.hr.utils.allocate_earned_leaves", "erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall.create_process_loan_security_shortfall", "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_term_loans", - "erpnext.crm.doctype.lead.lead.daily_open_lead", + "erpnext.crm.utils.open_leads_opportunities_based_on_todays_event", ], - "weekly": ["erpnext.hr.doctype.employee.employee_reminders.send_reminders_in_advance_weekly"], - "monthly": ["erpnext.hr.doctype.employee.employee_reminders.send_reminders_in_advance_monthly"], "monthly_long": [ "erpnext.accounts.deferred_revenue.process_deferred_accounting", "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_demand_loans", @@ -484,18 +460,37 @@ payment_gateway_enabled = "erpnext.accounts.utils.create_payment_gateway_account communication_doctypes = ["Customer", "Supplier"] +advance_payment_doctypes = ["Sales Order", "Purchase Order"] + +invoice_doctypes = ["Sales Invoice", "Purchase Invoice"] + +period_closing_doctypes = [ + "Sales Invoice", + "Purchase Invoice", + "Journal Entry", + "Bank Clearance", + "Asset", + "Stock Entry", +] + +bank_reconciliation_doctypes = [ + "Payment Entry", + "Journal Entry", + "Purchase Invoice", + "Sales Invoice", + "Loan Repayment", + "Loan Disbursement", +] + accounting_dimension_doctypes = [ "GL Entry", + "Payment Ledger Entry", "Sales Invoice", "Purchase Invoice", "Payment Entry", "Asset", - "Expense Claim", - "Expense Claim Detail", - "Expense Taxes and Charges", "Stock Entry", "Budget", - "Payroll Entry", "Delivery Note", "Sales Invoice Item", "Purchase Invoice Item", @@ -513,7 +508,6 @@ accounting_dimension_doctypes = [ "Asset Value Adjustment", "Loyalty Program", "Stock Reconciliation", - "Travel Request", "POS Profile", "Opening Invoice Creation Tool", "Opening Invoice Creation Tool Item", @@ -526,22 +520,15 @@ accounting_dimension_doctypes = [ "Sales Order", ] +# get matching queries for Bank Reconciliation +get_matching_queries = ( + "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_matching_queries" +) + regional_overrides = { "France": { "erpnext.tests.test_regional.test_method": "erpnext.regional.france.utils.test_method" }, - "India": { - "erpnext.tests.test_regional.test_method": "erpnext.regional.india.utils.test_method", - "erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header": "erpnext.regional.india.utils.get_itemised_tax_breakup_header", - "erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_data": "erpnext.regional.india.utils.get_itemised_tax_breakup_data", - "erpnext.accounts.party.get_regional_address_details": "erpnext.regional.india.utils.get_regional_address_details", - "erpnext.controllers.taxes_and_totals.get_regional_round_off_accounts": "erpnext.regional.india.utils.get_regional_round_off_accounts", - "erpnext.hr.utils.calculate_annual_eligible_hra_exemption": "erpnext.regional.india.utils.calculate_annual_eligible_hra_exemption", - "erpnext.hr.utils.calculate_hra_exemption_for_period": "erpnext.regional.india.utils.calculate_hra_exemption_for_period", - "erpnext.controllers.accounts_controller.validate_einvoice_fields": "erpnext.regional.india.e_invoice.utils.validate_einvoice_fields", - "erpnext.assets.doctype.asset.asset.get_depreciation_amount": "erpnext.regional.india.utils.get_depreciation_amount", - "erpnext.stock.doctype.item.item.set_item_tax_from_hsn_code": "erpnext.regional.india.utils.set_item_tax_from_hsn_code", - }, "United Arab Emirates": { "erpnext.controllers.taxes_and_totals.update_itemised_tax_data": "erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data", "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_regional_gl_entries": "erpnext.regional.united_arab_emirates.utils.make_regional_gl_entries", @@ -589,9 +576,6 @@ global_search_doctypes = { {"doctype": "Material Request", "index": 16}, {"doctype": "Delivery Trip", "index": 17}, {"doctype": "Pick List", "index": 18}, - {"doctype": "Salary Slip", "index": 19}, - {"doctype": "Leave Application", "index": 20}, - {"doctype": "Expense Claim", "index": 21}, {"doctype": "Payment Entry", "index": 22}, {"doctype": "Lead", "index": 23}, {"doctype": "Opportunity", "index": 24}, @@ -607,13 +591,7 @@ global_search_doctypes = { {"doctype": "Batch", "index": 34}, {"doctype": "Branch", "index": 35}, {"doctype": "Department", "index": 36}, - {"doctype": "Employee Grade", "index": 37}, {"doctype": "Designation", "index": 38}, - {"doctype": "Job Opening", "index": 39}, - {"doctype": "Job Applicant", "index": 40}, - {"doctype": "Job Offer", "index": 41}, - {"doctype": "Salary Structure Assignment", "index": 42}, - {"doctype": "Appraisal", "index": 43}, {"doctype": "Loan", "index": 44}, {"doctype": "Maintenance Schedule", "index": 45}, {"doctype": "Maintenance Visit", "index": 46}, diff --git a/erpnext/hr/README.md b/erpnext/hr/README.md deleted file mode 100644 index 5d1ae6e4ba..0000000000 --- a/erpnext/hr/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Key features: - -- Leave and Attendance -- Payroll -- Appraisal -- Expense Claim \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json b/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json deleted file mode 100644 index 4666aec4c6..0000000000 --- a/erpnext/hr/dashboard_chart/attendance_count/attendance_count.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "chart_name": "Attendance Count", - "chart_type": "Report", - "creation": "2020-07-22 11:56:32.730068", - "custom_options": "{\n\t\t\"type\": \"line\",\n\t\t\"axisOptions\": {\n\t\t\t\"shortenYAxisNumbers\": 1\n\t\t},\n\t\t\"tooltipOptions\": {}\n\t}", - "docstatus": 0, - "doctype": "Dashboard Chart", - "dynamic_filters_json": "{\"month\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1\",\"year\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getFullYear();\",\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\"}", - "filters_json": "{}", - "group_by_type": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "modified": "2020-07-22 14:32:40.334424", - "modified_by": "Administrator", - "module": "HR", - "name": "Attendance Count", - "number_of_groups": 0, - "owner": "Administrator", - "report_name": "Monthly Attendance Sheet", - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Line", - "use_report_chart": 1, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json b/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json deleted file mode 100644 index c21bfb9f36..0000000000 --- a/erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "chart_name": "Department Wise Employee Count", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.760730", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", - "group_by_based_on": "department", - "group_by_type": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 14:27:40.574194", - "modified": "2020-07-22 14:33:38.036794", - "modified_by": "Administrator", - "module": "HR", - "name": "Department Wise Employee Count", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Donut", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json b/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json deleted file mode 100644 index b1953d40ff..0000000000 --- a/erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "aggregate_function_based_on": "planned_vacancies", - "chart_name": "Department Wise Openings", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.849775", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Job Opening", - "filters_json": "[]", - "group_by_based_on": "department", - "group_by_type": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 14:33:44.834801", - "modified": "2020-07-22 14:34:45.273591", - "modified_by": "Administrator", - "module": "HR", - "name": "Department Wise Openings", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Monthly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Bar", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json b/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json deleted file mode 100644 index b10235cb8e..0000000000 --- a/erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "chart_name": "Designation Wise Employee Count", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.790337", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", - "group_by_based_on": "designation", - "group_by_type": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 14:27:40.602783", - "modified": "2020-07-22 14:31:49.665555", - "modified_by": "Administrator", - "module": "HR", - "name": "Designation Wise Employee Count", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Donut", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json b/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json deleted file mode 100644 index 49ea98a4fc..0000000000 --- a/erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "aggregate_function_based_on": "planned_vacancies", - "chart_name": "Designation Wise Openings", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.820217", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Job Opening", - "dynamic_filters_json": "", - "filters_json": "[]", - "group_by_based_on": "designation", - "group_by_type": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 14:33:44.806626", - "modified": "2020-07-22 14:34:32.711881", - "modified_by": "Administrator", - "module": "HR", - "name": "Designation Wise Openings", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Monthly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Bar", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json b/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json deleted file mode 100644 index 48578c9728..0000000000 --- a/erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "chart_name": "Gender Diversity Ratio", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.667291", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", - "group_by_based_on": "gender", - "group_by_type": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 14:27:40.143783", - "modified": "2020-07-22 14:32:50.962459", - "modified_by": "Administrator", - "module": "HR", - "name": "Gender Diversity Ratio", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Pie", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json b/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json deleted file mode 100644 index 42a830970e..0000000000 --- a/erpnext/hr/dashboard_chart/job_application_status/job_application_status.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "chart_name": "Job Application Status", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:32.699696", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Job Applicant", - "dynamic_filters_json": "", - "filters_json": "[[\"Job Applicant\",\"creation\",\"Timespan\",\"last month\",false]]", - "group_by_based_on": "status", - "group_by_type": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-28 16:19:12.109979", - "modified": "2020-07-28 16:19:45.279490", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Application Status", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Yearly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Pie", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.js b/erpnext/hr/doctype/appointment_letter/appointment_letter.js deleted file mode 100644 index a338dc6513..0000000000 --- a/erpnext/hr/doctype/appointment_letter/appointment_letter.js +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Appointment Letter', { - appointment_letter_template: function(frm){ - if (frm.doc.appointment_letter_template){ - frappe.call({ - method: 'erpnext.hr.doctype.appointment_letter.appointment_letter.get_appointment_letter_details', - args : { - template : frm.doc.appointment_letter_template - }, - callback: function(r){ - if(r.message){ - let message_body = r.message; - frm.set_value("introduction", message_body[0].introduction); - frm.set_value("closing_notes", message_body[0].closing_notes); - frm.doc.terms = [] - for (var i in message_body[1].description){ - frm.add_child("terms"); - frm.fields_dict.terms.get_value()[i].title = message_body[1].description[i].title; - frm.fields_dict.terms.get_value()[i].description = message_body[1].description[i].description; - } - frm.refresh(); - } - } - - }); - } - }, -}); diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.json b/erpnext/hr/doctype/appointment_letter/appointment_letter.json deleted file mode 100644 index 012f6b6b49..0000000000 --- a/erpnext/hr/doctype/appointment_letter/appointment_letter.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "actions": [], - "autoname": "HR-APP-LETTER-.#####", - "creation": "2019-12-26 12:35:49.574828", - "default_print_format": "Standard Appointment Letter", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "job_applicant", - "applicant_name", - "column_break_3", - "company", - "appointment_date", - "appointment_letter_template", - "body_section", - "introduction", - "terms", - "closing_notes" - ], - "fields": [ - { - "fetch_from": "job_applicant.applicant_name", - "fieldname": "applicant_name", - "fieldtype": "Data", - "in_global_search": 1, - "in_list_view": 1, - "label": "Applicant Name", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "appointment_date", - "fieldtype": "Date", - "label": "Appointment Date", - "reqd": 1 - }, - { - "fieldname": "appointment_letter_template", - "fieldtype": "Link", - "label": "Appointment Letter Template", - "options": "Appointment Letter Template", - "reqd": 1 - }, - { - "fetch_from": "appointment_letter_template.introduction", - "fieldname": "introduction", - "fieldtype": "Long Text", - "label": "Introduction", - "reqd": 1 - }, - { - "fieldname": "body_section", - "fieldtype": "Section Break", - "label": "Body" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "job_applicant", - "fieldtype": "Link", - "label": "Job Applicant", - "options": "Job Applicant", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "closing_notes", - "fieldtype": "Text", - "label": "Closing Notes" - }, - { - "fieldname": "terms", - "fieldtype": "Table", - "label": "Terms", - "options": "Appointment Letter content", - "reqd": 1 - } - ], - "links": [], - "modified": "2022-01-18 19:27:35.649424", - "modified_by": "Administrator", - "module": "HR", - "name": "Appointment Letter", - "name_case": "Title Case", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - } - ], - "search_fields": "applicant_name, company", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "applicant_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter/appointment_letter.py b/erpnext/hr/doctype/appointment_letter/appointment_letter.py deleted file mode 100644 index a58589af21..0000000000 --- a/erpnext/hr/doctype/appointment_letter/appointment_letter.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe.model.document import Document - - -class AppointmentLetter(Document): - pass - - -@frappe.whitelist() -def get_appointment_letter_details(template): - body = [] - intro = frappe.get_list( - "Appointment Letter Template", - fields=["introduction", "closing_notes"], - filters={"name": template}, - )[0] - content = frappe.get_all( - "Appointment Letter content", - fields=["title", "description"], - filters={"parent": template}, - order_by="idx", - ) - body.append(intro) - body.append({"description": content}) - return body diff --git a/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py b/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py deleted file mode 100644 index e0f65b45d4..0000000000 --- a/erpnext/hr/doctype/appointment_letter/test_appointment_letter.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestAppointmentLetter(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json b/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json deleted file mode 100644 index 17a2b91cff..0000000000 --- a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "actions": [], - "creation": "2019-12-26 12:22:16.575767", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "title", - "description" - ], - "fields": [ - { - "fieldname": "title", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Title", - "reqd": 1 - }, - { - "fieldname": "description", - "fieldtype": "Long Text", - "in_list_view": 1, - "label": "Description", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2019-12-26 12:24:09.824084", - "modified_by": "Administrator", - "module": "HR", - "name": "Appointment Letter content", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js b/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js deleted file mode 100644 index 8270f7aca2..0000000000 --- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Appointment Letter Template', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json b/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json deleted file mode 100644 index 5e50fe6d8f..0000000000 --- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "actions": [], - "autoname": "field:template_name", - "creation": "2019-12-26 12:20:14.219578", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "template_name", - "introduction", - "terms", - "closing_notes" - ], - "fields": [ - { - "fieldname": "introduction", - "fieldtype": "Long Text", - "in_list_view": 1, - "label": "Introduction", - "reqd": 1 - }, - { - "fieldname": "closing_notes", - "fieldtype": "Text", - "label": "Closing Notes" - }, - { - "fieldname": "terms", - "fieldtype": "Table", - "label": "Terms", - "options": "Appointment Letter content", - "reqd": 1 - }, - { - "fieldname": "template_name", - "fieldtype": "Data", - "label": "Template Name", - "reqd": 1, - "unique": 1 - } - ], - "links": [], - "modified": "2022-01-18 19:25:14.614616", - "modified_by": "Administrator", - "module": "HR", - "name": "Appointment Letter Template", - "naming_rule": "By fieldname", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - } - ], - "search_fields": "template_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "template_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py b/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py deleted file mode 100644 index aa87da323f..0000000000 --- a/erpnext/hr/doctype/appointment_letter_template/test_appointment_letter_template.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestAppointmentLetterTemplate(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/appraisal/README.md b/erpnext/hr/doctype/appraisal/README.md deleted file mode 100644 index 7798f188cc..0000000000 --- a/erpnext/hr/doctype/appraisal/README.md +++ /dev/null @@ -1 +0,0 @@ -Performance of an Employee in a Time Period against given goals. \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js deleted file mode 100644 index 50612b923e..0000000000 --- a/erpnext/hr/doctype/appraisal/appraisal.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.ui.form.on('Appraisal', { - setup: function(frm) { - frm.add_fetch('employee', 'company', 'company'); - frm.add_fetch('employee', 'employee_name', 'employee_name'); - frm.fields_dict.employee.get_query = function(doc,cdt,cdn) { - return{ query: "erpnext.controllers.queries.employee_query" } - }; - }, - - onload: function(frm) { - if(!frm.doc.status) { - frm.set_value('status', 'Draft'); - } - }, - - kra_template: function(frm) { - frm.doc.goals = []; - erpnext.utils.map_current_doc({ - method: "erpnext.hr.doctype.appraisal.appraisal.fetch_appraisal_template", - source_name: frm.doc.kra_template, - frm: frm - }); - }, - - calculate_total: function(frm) { - let goals = frm.doc.goals || []; - let total = 0; - - if (goals == []) { - frm.set_value('total_score', 0); - return; - } - for (let i = 0; i 5) { - frappe.msgprint(__("Score must be less than or equal to 5")); - d.score = 0; - refresh_field('score', d.name, 'goals'); - } - else { - frm.trigger('set_score_earned'); - } - }, - per_weightage: function(frm) { - frm.trigger('set_score_earned'); - }, - goals_remove: function(frm) { - frm.trigger('set_score_earned'); - } -}); diff --git a/erpnext/hr/doctype/appraisal/appraisal.json b/erpnext/hr/doctype/appraisal/appraisal.json deleted file mode 100644 index 9ca7bcc354..0000000000 --- a/erpnext/hr/doctype/appraisal/appraisal.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "actions": [], - "autoname": "naming_series:", - "creation": "2013-01-10 16:34:12", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "employee_details", - "naming_series", - "kra_template", - "employee", - "employee_name", - "column_break0", - "status", - "start_date", - "end_date", - "department", - "section_break0", - "goals", - "total_score", - "section_break1", - "remarks", - "other_details", - "company", - "column_break_17", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee_details", - "fieldtype": "Section Break", - "oldfieldtype": "Section Break" - }, - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "HR-APR-.YY.-.MM.", - "print_hide": 1, - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "kra_template", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Appraisal Template", - "oldfieldname": "kra_template", - "oldfieldtype": "Link", - "options": "Appraisal Template", - "reqd": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_standard_filter": 1, - "label": "For Employee", - "oldfieldname": "employee", - "oldfieldtype": "Link", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_global_search": 1, - "label": "For Employee Name", - "oldfieldname": "employee_name", - "oldfieldtype": "Data", - "read_only": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "column_break0", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "default": "Draft", - "depends_on": "kra_template", - "fieldname": "status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Status", - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "\nDraft\nSubmitted\nCompleted\nCancelled", - "read_only": 1, - "reqd": 1, - "search_index": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "start_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Start Date", - "oldfieldname": "start_date", - "oldfieldtype": "Date", - "reqd": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "end_date", - "fieldtype": "Date", - "label": "End Date", - "oldfieldname": "end_date", - "oldfieldtype": "Date", - "reqd": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "section_break0", - "fieldtype": "Section Break", - "label": "Goals", - "oldfieldtype": "Section Break", - "options": "Simple" - }, - { - "fieldname": "goals", - "fieldtype": "Table", - "label": "Goals", - "oldfieldname": "appraisal_details", - "oldfieldtype": "Table", - "options": "Appraisal Goal" - }, - { - "fieldname": "total_score", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Total Score (Out of 5)", - "no_copy": 1, - "oldfieldname": "total_score", - "oldfieldtype": "Currency", - "read_only": 1 - }, - { - "depends_on": "kra_template", - "fieldname": "section_break1", - "fieldtype": "Section Break" - }, - { - "description": "Any other remarks, noteworthy effort that should go in the records.", - "fieldname": "remarks", - "fieldtype": "Text", - "label": "Remarks" - }, - { - "depends_on": "kra_template", - "fieldname": "other_details", - "fieldtype": "Section Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 1, - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Appraisal", - "print_hide": 1, - "read_only": 1, - "report_hide": 1, - "width": "150px" - } - ], - "icon": "fa fa-thumbs-up", - "idx": 1, - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2020-10-03 21:48:33.297065", - "modified_by": "Administrator", - "module": "HR", - "name": "Appraisal", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "status, employee, employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "timeline_field": "employee", - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal/appraisal.py b/erpnext/hr/doctype/appraisal/appraisal.py deleted file mode 100644 index 382c643aba..0000000000 --- a/erpnext/hr/doctype/appraisal/appraisal.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import flt, getdate - -from erpnext.hr.utils import set_employee_name, validate_active_employee - - -class Appraisal(Document): - def validate(self): - if not self.status: - self.status = "Draft" - - if not self.goals: - frappe.throw(_("Goals cannot be empty")) - - validate_active_employee(self.employee) - set_employee_name(self) - self.validate_dates() - self.validate_existing_appraisal() - self.calculate_total() - - def get_employee_name(self): - self.employee_name = frappe.db.get_value("Employee", self.employee, "employee_name") - return self.employee_name - - def validate_dates(self): - if getdate(self.start_date) > getdate(self.end_date): - frappe.throw(_("End Date can not be less than Start Date")) - - def validate_existing_appraisal(self): - chk = frappe.db.sql( - """select name from `tabAppraisal` where employee=%s - and (status='Submitted' or status='Completed') - and ((start_date>=%s and start_date<=%s) - or (end_date>=%s and end_date<=%s))""", - (self.employee, self.start_date, self.end_date, self.start_date, self.end_date), - ) - if chk: - frappe.throw( - _("Appraisal {0} created for Employee {1} in the given date range").format( - chk[0][0], self.employee_name - ) - ) - - def calculate_total(self): - total, total_w = 0, 0 - for d in self.get("goals"): - if d.score: - d.score_earned = flt(d.score) * flt(d.per_weightage) / 100 - total = total + d.score_earned - total_w += flt(d.per_weightage) - - if int(total_w) != 100: - frappe.throw( - _("Total weightage assigned should be 100%.
It is {0}").format(str(total_w) + "%") - ) - - if ( - frappe.db.get_value("Employee", self.employee, "user_id") != frappe.session.user and total == 0 - ): - frappe.throw(_("Total cannot be zero")) - - self.total_score = total - - def on_submit(self): - frappe.db.set(self, "status", "Submitted") - - def on_cancel(self): - frappe.db.set(self, "status", "Cancelled") - - -@frappe.whitelist() -def fetch_appraisal_template(source_name, target_doc=None): - target_doc = get_mapped_doc( - "Appraisal Template", - source_name, - { - "Appraisal Template": { - "doctype": "Appraisal", - }, - "Appraisal Template Goal": { - "doctype": "Appraisal Goal", - }, - }, - target_doc, - ) - - return target_doc diff --git a/erpnext/hr/doctype/appraisal/test_appraisal.py b/erpnext/hr/doctype/appraisal/test_appraisal.py deleted file mode 100644 index 13a39f3820..0000000000 --- a/erpnext/hr/doctype/appraisal/test_appraisal.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Appraisal') - - -class TestAppraisal(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/appraisal_goal/README.md b/erpnext/hr/doctype/appraisal_goal/README.md deleted file mode 100644 index 851a403bde..0000000000 --- a/erpnext/hr/doctype/appraisal_goal/README.md +++ /dev/null @@ -1 +0,0 @@ -Goal for the parent Appraisal. \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json deleted file mode 100644 index b8ec5a8afb..0000000000 --- a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "hash", - "beta": 0, - "creation": "2013-02-22 01:27:44", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "Key Responsibility Area", - "fieldname": "kra", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Goal", - "length": 0, - "no_copy": 0, - "oldfieldname": "kra", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "240px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "240px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "section_break_2", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "per_weightage", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Weightage (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "per_weightage", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "70px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "70px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break_4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "score", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Score (0-5)", - "length": 0, - "no_copy": 1, - "oldfieldname": "score", - "oldfieldtype": "Select", - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "70px", - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "70px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "section_break_6", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "score_earned", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Score Earned", - "length": 0, - "no_copy": 1, - "oldfieldname": "score_earned", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "70px", - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "70px" - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Appraisal Goal", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py deleted file mode 100644 index 3cbc9188ee..0000000000 --- a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from frappe.model.document import Document - - -class AppraisalGoal(Document): - pass diff --git a/erpnext/hr/doctype/appraisal_template/README.md b/erpnext/hr/doctype/appraisal_template/README.md deleted file mode 100644 index d58a744867..0000000000 --- a/erpnext/hr/doctype/appraisal_template/README.md +++ /dev/null @@ -1 +0,0 @@ -Standard set of goals for an Employee / Designation / Job Profile. New Appraisal transactions can be created from the Template. \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.js b/erpnext/hr/doctype/appraisal_template/appraisal_template.js deleted file mode 100644 index cc772927f8..0000000000 --- a/erpnext/hr/doctype/appraisal_template/appraisal_template.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Appraisal Template', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.json b/erpnext/hr/doctype/appraisal_template/appraisal_template.json deleted file mode 100644 index 7329c35dee..0000000000 --- a/erpnext/hr/doctype/appraisal_template/appraisal_template.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:kra_title", - "beta": 0, - "creation": "2012-07-03 13:30:39", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "kra_title", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Appraisal Template Title", - "length": 0, - "no_copy": 0, - "oldfieldname": "kra_title", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "description", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "oldfieldname": "description", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "300px", - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "300px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "goals", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Goals", - "length": 0, - "no_copy": 0, - "oldfieldname": "kra_sheet", - "oldfieldtype": "Table", - "options": "Appraisal Template Goal", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "icon-file-text", - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Appraisal Template", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "is_custom": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "is_custom": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Employee", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.py b/erpnext/hr/doctype/appraisal_template/appraisal_template.py deleted file mode 100644 index 6b5921e6a6..0000000000 --- a/erpnext/hr/doctype/appraisal_template/appraisal_template.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cint, flt - - -class AppraisalTemplate(Document): - def validate(self): - self.check_total_points() - - def check_total_points(self): - total_points = 0 - for d in self.get("goals"): - total_points += flt(d.per_weightage) - - if cint(total_points) != 100: - frappe.throw(_("Sum of points for all goals should be 100. It is {0}").format(total_points)) diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py b/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py deleted file mode 100644 index 476de4f51b..0000000000 --- a/erpnext/hr/doctype/appraisal_template/appraisal_template_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "kra_template", - "transactions": [ - {"items": ["Appraisal"]}, - ], - } diff --git a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py b/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py deleted file mode 100644 index 560e992e8a..0000000000 --- a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Appraisal Template') - - -class TestAppraisalTemplate(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/appraisal_template_goal/README.md b/erpnext/hr/doctype/appraisal_template_goal/README.md deleted file mode 100644 index 1b81afbfce..0000000000 --- a/erpnext/hr/doctype/appraisal_template_goal/README.md +++ /dev/null @@ -1 +0,0 @@ -Goal details for the parent Appraisal Template. \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json deleted file mode 100644 index 2858419f33..0000000000 --- a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "hash", - "beta": 0, - "creation": "2013-02-22 01:27:44", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "description": "Key Performance Area", - "fieldname": "kra", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "KRA", - "length": 0, - "no_copy": 0, - "oldfieldname": "kra", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "200px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "200px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "per_weightage", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Weightage (%)", - "length": 0, - "no_copy": 0, - "oldfieldname": "per_weightage", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "100px" - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Appraisal Template Goal", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py deleted file mode 100644 index e6c5f64e08..0000000000 --- a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from frappe.model.document import Document - - -class AppraisalTemplateGoal(Document): - pass diff --git a/erpnext/hr/doctype/attendance/README.md b/erpnext/hr/doctype/attendance/README.md deleted file mode 100644 index f420b0709c..0000000000 --- a/erpnext/hr/doctype/attendance/README.md +++ /dev/null @@ -1 +0,0 @@ -Attendance record of an Employee on a particular date. \ No newline at end of file diff --git a/erpnext/hr/doctype/attendance/attendance.js b/erpnext/hr/doctype/attendance/attendance.js deleted file mode 100644 index 7964078c7f..0000000000 --- a/erpnext/hr/doctype/attendance/attendance.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -cur_frm.add_fetch('employee', 'company', 'company'); -cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); - -cur_frm.cscript.onload = function(doc, cdt, cdn) { - if(doc.__islocal) cur_frm.set_value("attendance_date", frappe.datetime.get_today()); -} - -cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) { - return{ - query: "erpnext.controllers.queries.employee_query" - } -} diff --git a/erpnext/hr/doctype/attendance/attendance.json b/erpnext/hr/doctype/attendance/attendance.json deleted file mode 100644 index 134098f252..0000000000 --- a/erpnext/hr/doctype/attendance/attendance.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-01-10 16:34:13", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "attendance_details", - "naming_series", - "employee", - "employee_name", - "working_hours", - "status", - "leave_type", - "leave_application", - "column_break0", - "attendance_date", - "company", - "department", - "attendance_request", - "details_section", - "shift", - "in_time", - "out_time", - "column_break_18", - "late_entry", - "early_exit", - "amended_from" - ], - "fields": [ - { - "fieldname": "attendance_details", - "fieldtype": "Section Break", - "oldfieldtype": "Section Break", - "options": "Simple" - }, - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "oldfieldname": "naming_series", - "oldfieldtype": "Select", - "options": "HR-ATT-.YYYY.-", - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_standard_filter": 1, - "label": "Employee", - "oldfieldname": "employee", - "oldfieldtype": "Link", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_global_search": 1, - "label": "Employee Name", - "oldfieldname": "employee_name", - "oldfieldtype": "Data", - "read_only": 1 - }, - { - "depends_on": "working_hours", - "fieldname": "working_hours", - "fieldtype": "Float", - "label": "Working Hours", - "precision": "1", - "read_only": 1 - }, - { - "default": "Present", - "fieldname": "status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Status", - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "\nPresent\nAbsent\nOn Leave\nHalf Day\nWork From Home", - "reqd": 1, - "search_index": 1 - }, - { - "depends_on": "eval:in_list([\"On Leave\", \"Half Day\"], doc.status)", - "fieldname": "leave_type", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Leave Type", - "mandatory_depends_on": "eval:in_list([\"On Leave\", \"Half Day\"], doc.status)", - "oldfieldname": "leave_type", - "oldfieldtype": "Link", - "options": "Leave Type" - }, - { - "fieldname": "leave_application", - "fieldtype": "Link", - "label": "Leave Application", - "no_copy": 1, - "options": "Leave Application", - "read_only": 1 - }, - { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "attendance_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Attendance Date", - "oldfieldname": "attendance_date", - "oldfieldtype": "Date", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "shift", - "fieldtype": "Link", - "label": "Shift", - "options": "Shift Type" - }, - { - "fieldname": "attendance_request", - "fieldtype": "Link", - "label": "Attendance Request", - "options": "Attendance Request", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "options": "Attendance", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fieldname": "late_entry", - "fieldtype": "Check", - "label": "Late Entry" - }, - { - "default": "0", - "fieldname": "early_exit", - "fieldtype": "Check", - "label": "Early Exit" - }, - { - "fieldname": "details_section", - "fieldtype": "Section Break", - "label": "Details" - }, - { - "depends_on": "shift", - "fieldname": "in_time", - "fieldtype": "Datetime", - "label": "In Time", - "read_only": 1 - }, - { - "depends_on": "shift", - "fieldname": "out_time", - "fieldtype": "Datetime", - "label": "Out Time", - "read_only": 1 - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - } - ], - "icon": "fa fa-ok", - "idx": 1, - "is_submittable": 1, - "links": [], - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Attendance", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee,employee_name,attendance_date,status", - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/attendance/attendance.py b/erpnext/hr/doctype/attendance/attendance.py deleted file mode 100644 index e43d40ef56..0000000000 --- a/erpnext/hr/doctype/attendance/attendance.py +++ /dev/null @@ -1,360 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import cint, cstr, formatdate, get_datetime, get_link_to_form, getdate, nowdate - -from erpnext.hr.doctype.shift_assignment.shift_assignment import has_overlapping_timings -from erpnext.hr.utils import get_holiday_dates_for_employee, validate_active_employee - - -class DuplicateAttendanceError(frappe.ValidationError): - pass - - -class OverlappingShiftAttendanceError(frappe.ValidationError): - pass - - -class Attendance(Document): - def validate(self): - from erpnext.controllers.status_updater import validate_status - - validate_status(self.status, ["Present", "Absent", "On Leave", "Half Day", "Work From Home"]) - validate_active_employee(self.employee) - self.validate_attendance_date() - self.validate_duplicate_record() - self.validate_overlapping_shift_attendance() - self.validate_employee_status() - self.check_leave_record() - - def validate_attendance_date(self): - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") - - # leaves can be marked for future dates - if ( - self.status != "On Leave" - and not self.leave_application - and getdate(self.attendance_date) > getdate(nowdate()) - ): - frappe.throw(_("Attendance can not be marked for future dates")) - elif date_of_joining and getdate(self.attendance_date) < getdate(date_of_joining): - frappe.throw(_("Attendance date can not be less than employee's joining date")) - - def validate_duplicate_record(self): - duplicate = get_duplicate_attendance_record( - self.employee, self.attendance_date, self.shift, self.name - ) - - if duplicate: - frappe.throw( - _("Attendance for employee {0} is already marked for the date {1}: {2}").format( - frappe.bold(self.employee), - frappe.bold(self.attendance_date), - get_link_to_form("Attendance", duplicate[0].name), - ), - title=_("Duplicate Attendance"), - exc=DuplicateAttendanceError, - ) - - def validate_overlapping_shift_attendance(self): - attendance = get_overlapping_shift_attendance( - self.employee, self.attendance_date, self.shift, self.name - ) - - if attendance: - frappe.throw( - _("Attendance for employee {0} is already marked for an overlapping shift {1}: {2}").format( - frappe.bold(self.employee), - frappe.bold(attendance.shift), - get_link_to_form("Attendance", attendance.name), - ), - title=_("Overlapping Shift Attendance"), - exc=OverlappingShiftAttendanceError, - ) - - def validate_employee_status(self): - if frappe.db.get_value("Employee", self.employee, "status") == "Inactive": - frappe.throw(_("Cannot mark attendance for an Inactive employee {0}").format(self.employee)) - - def check_leave_record(self): - leave_record = frappe.db.sql( - """ - select leave_type, half_day, half_day_date - from `tabLeave Application` - where employee = %s - and %s between from_date and to_date - and status = 'Approved' - and docstatus = 1 - """, - (self.employee, self.attendance_date), - as_dict=True, - ) - if leave_record: - for d in leave_record: - self.leave_type = d.leave_type - if d.half_day_date == getdate(self.attendance_date): - self.status = "Half Day" - frappe.msgprint( - _("Employee {0} on Half day on {1}").format(self.employee, formatdate(self.attendance_date)) - ) - else: - self.status = "On Leave" - frappe.msgprint( - _("Employee {0} is on Leave on {1}").format(self.employee, formatdate(self.attendance_date)) - ) - - if self.status in ("On Leave", "Half Day"): - if not leave_record: - frappe.msgprint( - _("No leave record found for employee {0} on {1}").format( - self.employee, formatdate(self.attendance_date) - ), - alert=1, - ) - elif self.leave_type: - self.leave_type = None - self.leave_application = None - - def validate_employee(self): - emp = frappe.db.sql( - "select name from `tabEmployee` where name = %s and status = 'Active'", self.employee - ) - if not emp: - frappe.throw(_("Employee {0} is not active or does not exist").format(self.employee)) - - -def get_duplicate_attendance_record(employee, attendance_date, shift, name=None): - attendance = frappe.qb.DocType("Attendance") - query = ( - frappe.qb.from_(attendance) - .select(attendance.name) - .where((attendance.employee == employee) & (attendance.docstatus < 2)) - ) - - if shift: - query = query.where( - Criterion.any( - [ - Criterion.all( - [ - ((attendance.shift.isnull()) | (attendance.shift == "")), - (attendance.attendance_date == attendance_date), - ] - ), - Criterion.all( - [ - ((attendance.shift.isnotnull()) | (attendance.shift != "")), - (attendance.attendance_date == attendance_date), - (attendance.shift == shift), - ] - ), - ] - ) - ) - else: - query = query.where((attendance.attendance_date == attendance_date)) - - if name: - query = query.where(attendance.name != name) - - return query.run(as_dict=True) - - -def get_overlapping_shift_attendance(employee, attendance_date, shift, name=None): - if not shift: - return {} - - attendance = frappe.qb.DocType("Attendance") - query = ( - frappe.qb.from_(attendance) - .select(attendance.name, attendance.shift) - .where( - (attendance.employee == employee) - & (attendance.docstatus < 2) - & (attendance.attendance_date == attendance_date) - & (attendance.shift != shift) - ) - ) - - if name: - query = query.where(attendance.name != name) - - overlapping_attendance = query.run(as_dict=True) - - if overlapping_attendance and has_overlapping_timings(shift, overlapping_attendance[0].shift): - return overlapping_attendance[0] - return {} - - -@frappe.whitelist() -def get_events(start, end, filters=None): - events = [] - - employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user}) - - if not employee: - return events - - from frappe.desk.reportview import get_filters_cond - - conditions = get_filters_cond("Attendance", filters, []) - add_attendance(events, start, end, conditions=conditions) - return events - - -def add_attendance(events, start, end, conditions=None): - query = """select name, attendance_date, status - from `tabAttendance` where - attendance_date between %(from_date)s and %(to_date)s - and docstatus < 2""" - if conditions: - query += conditions - - for d in frappe.db.sql(query, {"from_date": start, "to_date": end}, as_dict=True): - e = { - "name": d.name, - "doctype": "Attendance", - "start": d.attendance_date, - "end": d.attendance_date, - "title": cstr(d.status), - "docstatus": d.docstatus, - } - if e not in events: - events.append(e) - - -def mark_attendance( - employee, - attendance_date, - status, - shift=None, - leave_type=None, - ignore_validate=False, - late_entry=False, - early_exit=False, -): - if get_duplicate_attendance_record(employee, attendance_date, shift): - return - - if get_overlapping_shift_attendance(employee, attendance_date, shift): - return - - company = frappe.db.get_value("Employee", employee, "company") - attendance = frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": attendance_date, - "status": status, - "company": company, - "shift": shift, - "leave_type": leave_type, - "late_entry": late_entry, - "early_exit": early_exit, - } - ) - attendance.flags.ignore_validate = ignore_validate - attendance.insert() - attendance.submit() - return attendance.name - - -@frappe.whitelist() -def mark_bulk_attendance(data): - import json - - if isinstance(data, str): - data = json.loads(data) - data = frappe._dict(data) - company = frappe.get_value("Employee", data.employee, "company") - if not data.unmarked_days: - frappe.throw(_("Please select a date.")) - return - - for date in data.unmarked_days: - doc_dict = { - "doctype": "Attendance", - "employee": data.employee, - "attendance_date": get_datetime(date), - "status": data.status, - "company": company, - } - attendance = frappe.get_doc(doc_dict).insert() - attendance.submit() - - -def get_month_map(): - return frappe._dict( - { - "January": 1, - "February": 2, - "March": 3, - "April": 4, - "May": 5, - "June": 6, - "July": 7, - "August": 8, - "September": 9, - "October": 10, - "November": 11, - "December": 12, - } - ) - - -@frappe.whitelist() -def get_unmarked_days(employee, month, exclude_holidays=0): - import calendar - - month_map = get_month_map() - today = get_datetime() - - joining_date, relieving_date = frappe.get_cached_value( - "Employee", employee, ["date_of_joining", "relieving_date"] - ) - start_day = 1 - end_day = calendar.monthrange(today.year, month_map[month])[1] + 1 - - if joining_date and joining_date.month == month_map[month]: - start_day = joining_date.day - - if relieving_date and relieving_date.month == month_map[month]: - end_day = relieving_date.day + 1 - - dates_of_month = [ - "{}-{}-{}".format(today.year, month_map[month], r) for r in range(start_day, end_day) - ] - month_start, month_end = dates_of_month[0], dates_of_month[-1] - - records = frappe.get_all( - "Attendance", - fields=["attendance_date", "employee"], - filters=[ - ["attendance_date", ">=", month_start], - ["attendance_date", "<=", month_end], - ["employee", "=", employee], - ["docstatus", "!=", 2], - ], - ) - - marked_days = [get_datetime(record.attendance_date) for record in records] - if cint(exclude_holidays): - holiday_dates = get_holiday_dates_for_employee(employee, month_start, month_end) - holidays = [get_datetime(record) for record in holiday_dates] - marked_days.extend(holidays) - - unmarked_days = [] - - for date in dates_of_month: - date_time = get_datetime(date) - if today.day <= date_time.day and today.month <= date_time.month: - break - if date_time not in marked_days: - unmarked_days.append(date) - - return unmarked_days diff --git a/erpnext/hr/doctype/attendance/attendance_calendar.js b/erpnext/hr/doctype/attendance/attendance_calendar.js deleted file mode 100644 index d9f6d2eb3e..0000000000 --- a/erpnext/hr/doctype/attendance/attendance_calendar.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -frappe.views.calendar["Attendance"] = { - options: { - header: { - left: 'prev,next today', - center: 'title', - right: 'month' - } - }, - get_events_method: "erpnext.hr.doctype.attendance.attendance.get_events" -}; diff --git a/erpnext/hr/doctype/attendance/attendance_dashboard.py b/erpnext/hr/doctype/attendance/attendance_dashboard.py deleted file mode 100644 index abed78fbbb..0000000000 --- a/erpnext/hr/doctype/attendance/attendance_dashboard.py +++ /dev/null @@ -1,2 +0,0 @@ -def get_data(): - return {"fieldname": "attendance", "transactions": [{"label": "", "items": ["Employee Checkin"]}]} diff --git a/erpnext/hr/doctype/attendance/attendance_list.js b/erpnext/hr/doctype/attendance/attendance_list.js deleted file mode 100644 index 3a5c591539..0000000000 --- a/erpnext/hr/doctype/attendance/attendance_list.js +++ /dev/null @@ -1,164 +0,0 @@ -frappe.listview_settings['Attendance'] = { - add_fields: ["status", "attendance_date"], - get_indicator: function (doc) { - if (["Present", "Work From Home"].includes(doc.status)) { - return [__(doc.status), "green", "status,=," + doc.status]; - } else if (["Absent", "On Leave"].includes(doc.status)) { - return [__(doc.status), "red", "status,=," + doc.status]; - } else if (doc.status == "Half Day") { - return [__(doc.status), "orange", "status,=," + doc.status]; - } - }, - - onload: function(list_view) { - let me = this; - const months = moment.months(); - list_view.page.add_inner_button(__("Mark Attendance"), function() { - let dialog = new frappe.ui.Dialog({ - title: __("Mark Attendance"), - fields: [{ - fieldname: 'employee', - label: __('For Employee'), - fieldtype: 'Link', - options: 'Employee', - get_query: () => { - return {query: "erpnext.controllers.queries.employee_query"}; - }, - reqd: 1, - onchange: function() { - dialog.set_df_property("unmarked_days", "hidden", 1); - dialog.set_df_property("status", "hidden", 1); - dialog.set_df_property("exclude_holidays", "hidden", 1); - dialog.set_df_property("month", "value", ''); - dialog.set_df_property("unmarked_days", "options", []); - dialog.no_unmarked_days_left = false; - } - }, - { - label: __("For Month"), - fieldtype: "Select", - fieldname: "month", - options: months, - reqd: 1, - onchange: function() { - if (dialog.fields_dict.employee.value && dialog.fields_dict.month.value) { - dialog.set_df_property("status", "hidden", 0); - dialog.set_df_property("exclude_holidays", "hidden", 0); - dialog.set_df_property("unmarked_days", "options", []); - dialog.no_unmarked_days_left = false; - me.get_multi_select_options( - dialog.fields_dict.employee.value, - dialog.fields_dict.month.value, - dialog.fields_dict.exclude_holidays.get_value() - ).then(options => { - if (options.length > 0) { - dialog.set_df_property("unmarked_days", "hidden", 0); - dialog.set_df_property("unmarked_days", "options", options); - } else { - dialog.no_unmarked_days_left = true; - } - }); - } - } - }, - { - label: __("Status"), - fieldtype: "Select", - fieldname: "status", - options: ["Present", "Absent", "Half Day", "Work From Home"], - hidden: 1, - reqd: 1, - - }, - { - label: __("Exclude Holidays"), - fieldtype: "Check", - fieldname: "exclude_holidays", - hidden: 1, - onchange: function() { - if (dialog.fields_dict.employee.value && dialog.fields_dict.month.value) { - dialog.set_df_property("status", "hidden", 0); - dialog.set_df_property("unmarked_days", "options", []); - dialog.no_unmarked_days_left = false; - me.get_multi_select_options( - dialog.fields_dict.employee.value, - dialog.fields_dict.month.value, - dialog.fields_dict.exclude_holidays.get_value() - ).then(options => { - if (options.length > 0) { - dialog.set_df_property("unmarked_days", "hidden", 0); - dialog.set_df_property("unmarked_days", "options", options); - } else { - dialog.no_unmarked_days_left = true; - } - }); - } - } - }, - { - label: __("Unmarked Attendance for days"), - fieldname: "unmarked_days", - fieldtype: "MultiCheck", - options: [], - columns: 2, - hidden: 1 - }], - primary_action(data) { - if (cur_dialog.no_unmarked_days_left) { - frappe.msgprint(__("Attendance for the month of {0} , has already been marked for the Employee {1}", - [dialog.fields_dict.month.value, dialog.fields_dict.employee.value])); - } else { - frappe.confirm(__('Mark attendance as {0} for {1} on selected dates?', [data.status, data.month]), () => { - frappe.call({ - method: "erpnext.hr.doctype.attendance.attendance.mark_bulk_attendance", - args: { - data: data - }, - callback: function (r) { - if (r.message === 1) { - frappe.show_alert({ - message: __("Attendance Marked"), - indicator: 'blue' - }); - cur_dialog.hide(); - } - } - }); - }); - } - dialog.hide(); - list_view.refresh(); - }, - primary_action_label: __('Mark Attendance') - - }); - dialog.show(); - }); - }, - - get_multi_select_options: function(employee, month, exclude_holidays) { - return new Promise(resolve => { - frappe.call({ - method: 'erpnext.hr.doctype.attendance.attendance.get_unmarked_days', - async: false, - args: { - employee: employee, - month: month, - exclude_holidays: exclude_holidays - } - }).then(r => { - var options = []; - for (var d in r.message) { - var momentObj = moment(r.message[d], 'YYYY-MM-DD'); - var date = momentObj.format('DD-MM-YYYY'); - options.push({ - "label": date, - "value": r.message[d], - "checked": 1 - }); - } - resolve(options); - }); - }); - } -}; diff --git a/erpnext/hr/doctype/attendance/test_attendance.py b/erpnext/hr/doctype/attendance/test_attendance.py deleted file mode 100644 index 762d0f7567..0000000000 --- a/erpnext/hr/doctype/attendance/test_attendance.py +++ /dev/null @@ -1,223 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, get_year_ending, get_year_start, getdate, now_datetime, nowdate - -from erpnext.hr.doctype.attendance.attendance import ( - DuplicateAttendanceError, - OverlappingShiftAttendanceError, - get_month_map, - get_unmarked_days, - mark_attendance, -) -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday - -test_records = frappe.get_test_records("Attendance") - - -class TestAttendance(FrappeTestCase): - def setUp(self): - from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - from_date = get_year_start(getdate()) - to_date = get_year_ending(getdate()) - self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - frappe.db.delete("Attendance") - - def test_duplicate_attendance(self): - employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company") - date = nowdate() - - mark_attendance(employee, date, "Present") - attendance = frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": date, - "status": "Absent", - "company": "_Test Company", - } - ) - - self.assertRaises(DuplicateAttendanceError, attendance.insert) - - def test_duplicate_attendance_with_shift(self): - from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type - - employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company") - date = nowdate() - - shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00") - mark_attendance(employee, date, "Present", shift=shift_1.name) - - # attendance record with shift - attendance = frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": date, - "status": "Absent", - "company": "_Test Company", - "shift": shift_1.name, - } - ) - - self.assertRaises(DuplicateAttendanceError, attendance.insert) - - # attendance record without any shift - attendance = frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": date, - "status": "Absent", - "company": "_Test Company", - } - ) - - self.assertRaises(DuplicateAttendanceError, attendance.insert) - - def test_overlapping_shift_attendance_validation(self): - from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type - - employee = make_employee("test_overlap_attendance@example.com", company="_Test Company") - date = nowdate() - - shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00") - shift_2 = setup_shift_type(shift_type="Shift 2", start_time="09:30:00", end_time="11:00:00") - - mark_attendance(employee, date, "Present", shift=shift_1.name) - - # attendance record with overlapping shift - attendance = frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": date, - "status": "Absent", - "company": "_Test Company", - "shift": shift_2.name, - } - ) - - self.assertRaises(OverlappingShiftAttendanceError, attendance.insert) - - def test_allow_attendance_with_different_shifts(self): - # allows attendance with 2 different non-overlapping shifts - from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type - - employee = make_employee("test_duplicate_attendance@example.com", company="_Test Company") - date = nowdate() - - shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00") - shift_2 = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="12:00:00") - - mark_attendance(employee, date, "Present", shift_1.name) - frappe.get_doc( - { - "doctype": "Attendance", - "employee": employee, - "attendance_date": date, - "status": "Absent", - "company": "_Test Company", - "shift": shift_2.name, - } - ).insert() - - def test_mark_absent(self): - employee = make_employee("test_mark_absent@example.com") - date = nowdate() - - attendance = mark_attendance(employee, date, "Absent") - fetch_attendance = frappe.get_value( - "Attendance", {"employee": employee, "attendance_date": date, "status": "Absent"} - ) - self.assertEqual(attendance, fetch_attendance) - - def test_unmarked_days(self): - now = now_datetime() - previous_month = now.month - 1 - first_day = now.replace(day=1).replace(month=previous_month).date() - - employee = make_employee( - "test_unmarked_days@example.com", date_of_joining=add_days(first_day, -1) - ) - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) - - first_sunday = get_first_sunday(self.holiday_list, for_date=first_day) - mark_attendance(employee, first_day, "Present") - month_name = get_month_name(first_day) - - unmarked_days = get_unmarked_days(employee, month_name) - unmarked_days = [getdate(date) for date in unmarked_days] - - # attendance already marked for the day - self.assertNotIn(first_day, unmarked_days) - # attendance unmarked - self.assertIn(getdate(add_days(first_day, 1)), unmarked_days) - # holiday considered in unmarked days - self.assertIn(first_sunday, unmarked_days) - - def test_unmarked_days_excluding_holidays(self): - now = now_datetime() - previous_month = now.month - 1 - first_day = now.replace(day=1).replace(month=previous_month).date() - - employee = make_employee( - "test_unmarked_days@example.com", date_of_joining=add_days(first_day, -1) - ) - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) - - first_sunday = get_first_sunday(self.holiday_list, for_date=first_day) - mark_attendance(employee, first_day, "Present") - month_name = get_month_name(first_day) - - unmarked_days = get_unmarked_days(employee, month_name, exclude_holidays=True) - unmarked_days = [getdate(date) for date in unmarked_days] - - # attendance already marked for the day - self.assertNotIn(first_day, unmarked_days) - # attendance unmarked - self.assertIn(getdate(add_days(first_day, 1)), unmarked_days) - # holidays not considered in unmarked days - self.assertNotIn(first_sunday, unmarked_days) - - def test_unmarked_days_as_per_joining_and_relieving_dates(self): - now = now_datetime() - previous_month = now.month - 1 - first_day = now.replace(day=1).replace(month=previous_month).date() - - doj = add_days(first_day, 1) - relieving_date = add_days(first_day, 5) - employee = make_employee( - "test_unmarked_days_as_per_doj@example.com", date_of_joining=doj, relieving_date=relieving_date - ) - - frappe.db.set_value("Employee", employee, "holiday_list", self.holiday_list) - - attendance_date = add_days(first_day, 2) - mark_attendance(employee, attendance_date, "Present") - month_name = get_month_name(first_day) - - unmarked_days = get_unmarked_days(employee, month_name) - unmarked_days = [getdate(date) for date in unmarked_days] - - # attendance already marked for the day - self.assertNotIn(attendance_date, unmarked_days) - # date before doj not in unmarked days - self.assertNotIn(add_days(doj, -1), unmarked_days) - # date after relieving not in unmarked days - self.assertNotIn(add_days(relieving_date, 1), unmarked_days) - - def tearDown(self): - frappe.db.rollback() - - -def get_month_name(date): - month_number = date.month - for month, number in get_month_map().items(): - if number == month_number: - return month diff --git a/erpnext/hr/doctype/attendance/test_records.json b/erpnext/hr/doctype/attendance/test_records.json deleted file mode 100644 index 096f95c6f7..0000000000 --- a/erpnext/hr/doctype/attendance/test_records.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - { - "doctype": "Attendance", - "name": "_Test Attendance 1", - "employee": "_T-Employee-00001", - "status": "Present", - "attendance_date": "2014-02-01", - "company": "_Test Company" - } -] diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.js b/erpnext/hr/doctype/attendance_request/attendance_request.js deleted file mode 100644 index 2d25d14181..0000000000 --- a/erpnext/hr/doctype/attendance_request/attendance_request.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -cur_frm.add_fetch('employee', 'company', 'company'); - -frappe.ui.form.on('Attendance Request', { - half_day: function(frm) { - if(frm.doc.half_day == 1){ - frm.set_df_property('half_day_date', 'reqd', true); - } - else{ - frm.set_df_property('half_day_date', 'reqd', false); - } - } -}); diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.json b/erpnext/hr/doctype/attendance_request/attendance_request.json deleted file mode 100644 index 837a87824f..0000000000 --- a/erpnext/hr/doctype/attendance_request/attendance_request.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-ARQ-.YY.-.MM.-.#####", - "creation": "2018-04-13 15:37:40.918990", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "column_break_5", - "company", - "from_date", - "to_date", - "half_day", - "half_day_date", - "reason_section", - "reason", - "column_break_4", - "explanation", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "To Date", - "reqd": 1 - }, - { - "default": "0", - "fieldname": "half_day", - "fieldtype": "Check", - "label": "Half Day" - }, - { - "depends_on": "half_day", - "fieldname": "half_day_date", - "fieldtype": "Date", - "label": "Half Day Date" - }, - { - "fieldname": "reason_section", - "fieldtype": "Section Break", - "label": "Reason" - }, - { - "fieldname": "reason", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Reason", - "options": "Work From Home\nOn Duty", - "reqd": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "explanation", - "fieldtype": "Small Text", - "label": "Explanation" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Attendance Request", - "print_hide": 1, - "read_only": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2019-12-16 11:49:26.943173", - "modified_by": "Administrator", - "module": "HR", - "name": "Attendance Request", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/attendance_request/attendance_request.py b/erpnext/hr/doctype/attendance_request/attendance_request.py deleted file mode 100644 index 78652f669d..0000000000 --- a/erpnext/hr/doctype/attendance_request/attendance_request.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, date_diff, getdate - -from erpnext.hr.doctype.employee.employee import is_holiday -from erpnext.hr.utils import validate_active_employee, validate_dates - - -class AttendanceRequest(Document): - def validate(self): - validate_active_employee(self.employee) - validate_dates(self, self.from_date, self.to_date) - if self.half_day: - if not getdate(self.from_date) <= getdate(self.half_day_date) <= getdate(self.to_date): - frappe.throw(_("Half day date should be in between from date and to date")) - - def on_submit(self): - self.create_attendance() - - def on_cancel(self): - attendance_list = frappe.get_list( - "Attendance", {"employee": self.employee, "attendance_request": self.name} - ) - if attendance_list: - for attendance in attendance_list: - attendance_obj = frappe.get_doc("Attendance", attendance["name"]) - attendance_obj.cancel() - - def create_attendance(self): - request_days = date_diff(self.to_date, self.from_date) + 1 - for number in range(request_days): - attendance_date = add_days(self.from_date, number) - skip_attendance = self.validate_if_attendance_not_applicable(attendance_date) - if not skip_attendance: - attendance = frappe.new_doc("Attendance") - attendance.employee = self.employee - attendance.employee_name = self.employee_name - if self.half_day and date_diff(getdate(self.half_day_date), getdate(attendance_date)) == 0: - attendance.status = "Half Day" - elif self.reason == "Work From Home": - attendance.status = "Work From Home" - else: - attendance.status = "Present" - attendance.attendance_date = attendance_date - attendance.company = self.company - attendance.attendance_request = self.name - attendance.save(ignore_permissions=True) - attendance.submit() - - def validate_if_attendance_not_applicable(self, attendance_date): - # Check if attendance_date is a Holiday - if is_holiday(self.employee, attendance_date): - frappe.msgprint( - _("Attendance not submitted for {0} as it is a Holiday.").format(attendance_date), alert=1 - ) - return True - - # Check if employee on Leave - leave_record = frappe.db.sql( - """select half_day from `tabLeave Application` - where employee = %s and %s between from_date and to_date - and docstatus = 1""", - (self.employee, attendance_date), - as_dict=True, - ) - if leave_record: - frappe.msgprint( - _("Attendance not submitted for {0} as {1} on leave.").format(attendance_date, self.employee), - alert=1, - ) - return True - - return False diff --git a/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py b/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py deleted file mode 100644 index 059725cb44..0000000000 --- a/erpnext/hr/doctype/attendance_request/attendance_request_dashboard.py +++ /dev/null @@ -1,2 +0,0 @@ -def get_data(): - return {"fieldname": "attendance_request", "transactions": [{"items": ["Attendance"]}]} diff --git a/erpnext/hr/doctype/attendance_request/test_attendance_request.py b/erpnext/hr/doctype/attendance_request/test_attendance_request.py deleted file mode 100644 index ee436f5068..0000000000 --- a/erpnext/hr/doctype/attendance_request/test_attendance_request.py +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest -from datetime import date - -import frappe -from frappe.utils import nowdate - -test_dependencies = ["Employee"] - - -class TestAttendanceRequest(unittest.TestCase): - def setUp(self): - for doctype in ["Attendance Request", "Attendance"]: - frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype)) - - def tearDown(self): - frappe.db.rollback() - - def test_on_duty_attendance_request(self): - "Test creation/updation of Attendace from Attendance Request, on duty." - today = nowdate() - employee = get_employee() - attendance_request = frappe.new_doc("Attendance Request") - attendance_request.employee = employee.name - attendance_request.from_date = date(date.today().year, 1, 1) - attendance_request.to_date = date(date.today().year, 1, 2) - attendance_request.reason = "On Duty" - attendance_request.company = "_Test Company" - attendance_request.insert() - attendance_request.submit() - - attendance = frappe.db.get_value( - "Attendance", - filters={ - "attendance_request": attendance_request.name, - "attendance_date": date(date.today().year, 1, 1), - }, - fieldname=["status", "docstatus"], - as_dict=True, - ) - self.assertEqual(attendance.status, "Present") - self.assertEqual(attendance.docstatus, 1) - - # cancelling attendance request cancels linked attendances - attendance_request.cancel() - - # cancellation alters docname - # fetch attendance value again to avoid stale docname - attendance_docstatus = frappe.db.get_value( - "Attendance", - filters={ - "attendance_request": attendance_request.name, - "attendance_date": date(date.today().year, 1, 1), - }, - fieldname="docstatus", - ) - self.assertEqual(attendance_docstatus, 2) - - def test_work_from_home_attendance_request(self): - "Test creation/updation of Attendace from Attendance Request, work from home." - today = nowdate() - employee = get_employee() - attendance_request = frappe.new_doc("Attendance Request") - attendance_request.employee = employee.name - attendance_request.from_date = date(date.today().year, 1, 1) - attendance_request.to_date = date(date.today().year, 1, 2) - attendance_request.reason = "Work From Home" - attendance_request.company = "_Test Company" - attendance_request.insert() - attendance_request.submit() - - attendance_status = frappe.db.get_value( - "Attendance", - filters={ - "attendance_request": attendance_request.name, - "attendance_date": date(date.today().year, 1, 1), - }, - fieldname="status", - ) - self.assertEqual(attendance_status, "Work From Home") - - attendance_request.cancel() - - # cancellation alters docname - # fetch attendance value again to avoid stale docname - attendance_docstatus = frappe.db.get_value( - "Attendance", - filters={ - "attendance_request": attendance_request.name, - "attendance_date": date(date.today().year, 1, 1), - }, - fieldname="docstatus", - ) - self.assertEqual(attendance_docstatus, 2) - - -def get_employee(): - return frappe.get_doc("Employee", "_T-Employee-00001") diff --git a/erpnext/hr/doctype/branch/branch.json b/erpnext/hr/doctype/branch/branch.json deleted file mode 100644 index 221b52267e..0000000000 --- a/erpnext/hr/doctype/branch/branch.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:branch", - "beta": 0, - "creation": "2013-01-10 16:34:13", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "branch", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Branch", - "length": 0, - "no_copy": 0, - "oldfieldname": "branch", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-code-fork", - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-07-25 05:24:26.534086", - "modified_by": "Administrator", - "module": "HR", - "name": "Branch", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js deleted file mode 100644 index 1baa1e04e3..0000000000 --- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Compensatory Leave Request', { - refresh: function(frm) { - frm.set_query("leave_type", function() { - return { - filters: { - "is_compensatory": true - } - }; - }); - }, - half_day: function(frm) { - if(frm.doc.half_day == 1){ - frm.set_df_property('half_day_date', 'reqd', true); - } - else{ - frm.set_df_property('half_day_date', 'reqd', false); - } - } -}); diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json deleted file mode 100644 index 3c6374fcde..0000000000 --- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.json +++ /dev/null @@ -1,575 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "HR-CMP-.YY.-.MM.-.#####", - "beta": 0, - "creation": "2018-04-13 14:51:39.326768", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Name", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "leave_type", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Leave Type", - "length": 0, - "no_copy": 0, - "options": "Leave Type", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "leave_allocation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Leave Allocation", - "length": 0, - "no_copy": 0, - "options": "Leave Allocation", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "worked_on", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Worked On Holiday", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "work_from_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Work From Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "work_end_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Work End Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "half_day", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Half Day", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "half_day", - "fieldname": "half_day_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Half Day Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "reason", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Reason", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Compensatory Leave Request", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-21 16:15:36.266924", - "modified_by": "Administrator", - "module": "HR", - "name": "Compensatory Leave Request", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py deleted file mode 100644 index d233226e66..0000000000 --- a/erpnext/hr/doctype/compensatory_leave_request/compensatory_leave_request.py +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, cint, date_diff, format_date, getdate - -from erpnext.hr.utils import ( - create_additional_leave_ledger_entry, - get_holiday_dates_for_employee, - get_leave_period, - validate_active_employee, - validate_dates, - validate_overlap, -) - - -class CompensatoryLeaveRequest(Document): - def validate(self): - validate_active_employee(self.employee) - validate_dates(self, self.work_from_date, self.work_end_date) - if self.half_day: - if not self.half_day_date: - frappe.throw(_("Half Day Date is mandatory")) - if ( - not getdate(self.work_from_date) <= getdate(self.half_day_date) <= getdate(self.work_end_date) - ): - frappe.throw(_("Half Day Date should be in between Work From Date and Work End Date")) - validate_overlap(self, self.work_from_date, self.work_end_date) - self.validate_holidays() - self.validate_attendance() - if not self.leave_type: - frappe.throw(_("Leave Type is madatory")) - - def validate_attendance(self): - attendance = frappe.get_all( - "Attendance", - filters={ - "attendance_date": ["between", (self.work_from_date, self.work_end_date)], - "status": "Present", - "docstatus": 1, - "employee": self.employee, - }, - fields=["attendance_date", "status"], - ) - - if len(attendance) < date_diff(self.work_end_date, self.work_from_date) + 1: - frappe.throw(_("You are not present all day(s) between compensatory leave request days")) - - def validate_holidays(self): - holidays = get_holiday_dates_for_employee(self.employee, self.work_from_date, self.work_end_date) - if len(holidays) < date_diff(self.work_end_date, self.work_from_date) + 1: - if date_diff(self.work_end_date, self.work_from_date): - msg = _("The days between {0} to {1} are not valid holidays.").format( - frappe.bold(format_date(self.work_from_date)), frappe.bold(format_date(self.work_end_date)) - ) - else: - msg = _("{0} is not a holiday.").format(frappe.bold(format_date(self.work_from_date))) - - frappe.throw(msg) - - def on_submit(self): - company = frappe.db.get_value("Employee", self.employee, "company") - date_difference = date_diff(self.work_end_date, self.work_from_date) + 1 - if self.half_day: - date_difference -= 0.5 - leave_period = get_leave_period(self.work_from_date, self.work_end_date, company) - if leave_period: - leave_allocation = self.get_existing_allocation_for_period(leave_period) - if leave_allocation: - leave_allocation.new_leaves_allocated += date_difference - leave_allocation.validate() - leave_allocation.db_set("new_leaves_allocated", leave_allocation.total_leaves_allocated) - leave_allocation.db_set("total_leaves_allocated", leave_allocation.total_leaves_allocated) - - # generate additional ledger entry for the new compensatory leaves off - create_additional_leave_ledger_entry( - leave_allocation, date_difference, add_days(self.work_end_date, 1) - ) - - else: - leave_allocation = self.create_leave_allocation(leave_period, date_difference) - self.db_set("leave_allocation", leave_allocation.name) - else: - frappe.throw( - _("There is no leave period in between {0} and {1}").format( - format_date(self.work_from_date), format_date(self.work_end_date) - ) - ) - - def on_cancel(self): - if self.leave_allocation: - date_difference = date_diff(self.work_end_date, self.work_from_date) + 1 - if self.half_day: - date_difference -= 0.5 - leave_allocation = frappe.get_doc("Leave Allocation", self.leave_allocation) - if leave_allocation: - leave_allocation.new_leaves_allocated -= date_difference - if leave_allocation.new_leaves_allocated - date_difference <= 0: - leave_allocation.new_leaves_allocated = 0 - leave_allocation.validate() - leave_allocation.db_set("new_leaves_allocated", leave_allocation.total_leaves_allocated) - leave_allocation.db_set("total_leaves_allocated", leave_allocation.total_leaves_allocated) - - # create reverse entry on cancelation - create_additional_leave_ledger_entry( - leave_allocation, date_difference * -1, add_days(self.work_end_date, 1) - ) - - def get_existing_allocation_for_period(self, leave_period): - leave_allocation = frappe.db.sql( - """ - select name - from `tabLeave Allocation` - where employee=%(employee)s and leave_type=%(leave_type)s - and docstatus=1 - and (from_date between %(from_date)s and %(to_date)s - or to_date between %(from_date)s and %(to_date)s - or (from_date < %(from_date)s and to_date > %(to_date)s)) - """, - { - "from_date": leave_period[0].from_date, - "to_date": leave_period[0].to_date, - "employee": self.employee, - "leave_type": self.leave_type, - }, - as_dict=1, - ) - - if leave_allocation: - return frappe.get_doc("Leave Allocation", leave_allocation[0].name) - else: - return False - - def create_leave_allocation(self, leave_period, date_difference): - is_carry_forward = frappe.db.get_value("Leave Type", self.leave_type, "is_carry_forward") - allocation = frappe.get_doc( - dict( - doctype="Leave Allocation", - employee=self.employee, - employee_name=self.employee_name, - leave_type=self.leave_type, - from_date=add_days(self.work_end_date, 1), - to_date=leave_period[0].to_date, - carry_forward=cint(is_carry_forward), - new_leaves_allocated=date_difference, - total_leaves_allocated=date_difference, - description=self.reason, - ) - ) - allocation.insert(ignore_permissions=True) - allocation.submit() - return allocation diff --git a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py deleted file mode 100644 index 7bbec293f4..0000000000 --- a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, add_months, today - -from erpnext.hr.doctype.attendance_request.test_attendance_request import get_employee -from erpnext.hr.doctype.leave_application.leave_application import get_leave_balance_on -from erpnext.hr.doctype.leave_period.test_leave_period import create_leave_period - -test_dependencies = ["Employee"] - - -class TestCompensatoryLeaveRequest(unittest.TestCase): - def setUp(self): - frappe.db.sql(""" delete from `tabCompensatory Leave Request`""") - frappe.db.sql(""" delete from `tabLeave Ledger Entry`""") - frappe.db.sql(""" delete from `tabLeave Allocation`""") - frappe.db.sql( - """ delete from `tabAttendance` where attendance_date in {0} """.format( - (today(), add_days(today(), -1)) - ) - ) # nosec - create_leave_period(add_months(today(), -3), add_months(today(), 3), "_Test Company") - create_holiday_list() - - employee = get_employee() - employee.holiday_list = "_Test Compensatory Leave" - employee.save() - - def test_leave_balance_on_submit(self): - """check creation of leave allocation on submission of compensatory leave request""" - employee = get_employee() - mark_attendance(employee) - compensatory_leave_request = get_compensatory_leave_request(employee.name) - - before = get_leave_balance_on(employee.name, compensatory_leave_request.leave_type, today()) - compensatory_leave_request.submit() - - self.assertEqual( - get_leave_balance_on( - employee.name, compensatory_leave_request.leave_type, add_days(today(), 1) - ), - before + 1, - ) - - def test_leave_allocation_update_on_submit(self): - employee = get_employee() - mark_attendance(employee, date=add_days(today(), -1)) - compensatory_leave_request = get_compensatory_leave_request( - employee.name, leave_date=add_days(today(), -1) - ) - compensatory_leave_request.submit() - - # leave allocation creation on submit - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"name": compensatory_leave_request.leave_allocation}, - ["total_leaves_allocated"], - ) - self.assertEqual(leaves_allocated, 1) - - mark_attendance(employee) - compensatory_leave_request = get_compensatory_leave_request(employee.name) - compensatory_leave_request.submit() - - # leave allocation updates on submission of second compensatory leave request - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"name": compensatory_leave_request.leave_allocation}, - ["total_leaves_allocated"], - ) - self.assertEqual(leaves_allocated, 2) - - def test_creation_of_leave_ledger_entry_on_submit(self): - """check creation of leave ledger entry on submission of leave request""" - employee = get_employee() - mark_attendance(employee) - compensatory_leave_request = get_compensatory_leave_request(employee.name) - compensatory_leave_request.submit() - - filters = dict(transaction_name=compensatory_leave_request.leave_allocation) - leave_ledger_entry = frappe.get_all("Leave Ledger Entry", fields="*", filters=filters) - - self.assertEqual(len(leave_ledger_entry), 1) - self.assertEqual(leave_ledger_entry[0].employee, compensatory_leave_request.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, compensatory_leave_request.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, 1) - - # check reverse leave ledger entry on cancellation - compensatory_leave_request.cancel() - leave_ledger_entry = frappe.get_all( - "Leave Ledger Entry", fields="*", filters=filters, order_by="creation desc" - ) - - self.assertEqual(len(leave_ledger_entry), 2) - self.assertEqual(leave_ledger_entry[0].employee, compensatory_leave_request.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, compensatory_leave_request.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, -1) - - -def get_compensatory_leave_request(employee, leave_date=today()): - prev_comp_leave_req = frappe.db.get_value( - "Compensatory Leave Request", - dict( - leave_type="Compensatory Off", - work_from_date=leave_date, - work_end_date=leave_date, - employee=employee, - ), - "name", - ) - if prev_comp_leave_req: - return frappe.get_doc("Compensatory Leave Request", prev_comp_leave_req) - - return frappe.get_doc( - dict( - doctype="Compensatory Leave Request", - employee=employee, - leave_type="Compensatory Off", - work_from_date=leave_date, - work_end_date=leave_date, - reason="test", - ) - ).insert() - - -def mark_attendance(employee, date=today(), status="Present"): - if not frappe.db.exists( - dict(doctype="Attendance", employee=employee.name, attendance_date=date, status="Present") - ): - attendance = frappe.get_doc( - {"doctype": "Attendance", "employee": employee.name, "attendance_date": date, "status": status} - ) - attendance.save() - attendance.submit() - - -def create_holiday_list(): - if frappe.db.exists("Holiday List", "_Test Compensatory Leave"): - return - - holiday_list = frappe.get_doc( - { - "doctype": "Holiday List", - "from_date": add_months(today(), -3), - "to_date": add_months(today(), 3), - "holidays": [ - {"description": "Test Holiday", "holiday_date": today()}, - {"description": "Test Holiday 1", "holiday_date": add_days(today(), -1)}, - ], - "holiday_list_name": "_Test Compensatory Leave", - } - ) - holiday_list.save() diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js deleted file mode 100644 index 82364801ce..0000000000 --- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Daily Work Summary', { - refresh: function (frm) { - - } -}); diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json deleted file mode 100644 index 259416edd4..0000000000 --- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-11-08 04:58:20.001780", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "daily_work_summary_group", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Daily Work Summary Group", - "length": 0, - "no_copy": 0, - "options": "Daily Work Summary Group", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "Open", - "fieldname": "status", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Status", - "length": 0, - "no_copy": 0, - "options": "Open\nSent", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "email_sent_to", - "fieldtype": "Code", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Email Sent To", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 1, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-02-16 11:02:06.727749", - "modified_by": "Administrator", - "module": "HR", - "name": "Daily Work Summary", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Employee", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 1, - "read_only": 1, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py deleted file mode 100644 index bcb0161841..0000000000 --- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from email_reply_parser import EmailReplyParser -from frappe import _ -from frappe.model.document import Document -from frappe.utils import global_date_format - - -class DailyWorkSummary(Document): - def send_mails(self, dws_group, emails): - """Send emails to get daily work summary to all users \ - in selected daily work summary group""" - incoming_email_account = frappe.db.get_value( - "Email Account", dict(enable_incoming=1, default_incoming=1), "email_id" - ) - - self.db_set("email_sent_to", "\n".join(emails)) - frappe.sendmail( - recipients=emails, - message=dws_group.message, - subject=dws_group.subject, - reference_doctype=self.doctype, - reference_name=self.name, - reply_to=incoming_email_account, - ) - - def send_summary(self): - """Send summary of all replies. Called at midnight""" - args = self.get_message_details() - emails = get_user_emails_from_group(self.daily_work_summary_group) - frappe.sendmail( - recipients=emails, - template="daily_work_summary", - args=args, - subject=_(self.daily_work_summary_group), - reference_doctype=self.doctype, - reference_name=self.name, - ) - - self.db_set("status", "Sent") - - def get_message_details(self): - """Return args for template""" - dws_group = frappe.get_doc("Daily Work Summary Group", self.daily_work_summary_group) - - replies = frappe.get_all( - "Communication", - fields=["content", "text_content", "sender"], - filters=dict( - reference_doctype=self.doctype, - reference_name=self.name, - communication_type="Communication", - sent_or_received="Received", - ), - order_by="creation asc", - ) - - did_not_reply = self.email_sent_to.split() - - for d in replies: - user = frappe.db.get_values( - "User", {"email": d.sender}, ["full_name", "user_image"], as_dict=True - ) - - d.sender_name = user[0].full_name if user else d.sender - d.image = user[0].image if user and user[0].image else None - - original_image = d.image - # make thumbnail image - try: - if original_image: - file_name = frappe.get_list("File", {"file_url": original_image}) - - if file_name: - file_name = file_name[0].name - file_doc = frappe.get_doc("File", file_name) - thumbnail_image = file_doc.make_thumbnail( - set_as_thumbnail=False, width=100, height=100, crop=True - ) - d.image = thumbnail_image - except Exception: - d.image = original_image - - if d.sender in did_not_reply: - did_not_reply.remove(d.sender) - if d.text_content: - d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content)) - - did_not_reply = [ - (frappe.db.get_value("User", {"email": email}, "full_name") or email) for email in did_not_reply - ] - - return dict( - replies=replies, - original_message=dws_group.message, - title=_("Work Summary for {0}").format(global_date_format(self.creation)), - did_not_reply=", ".join(did_not_reply) or "", - did_not_reply_title=_("No replies from"), - ) - - -def get_user_emails_from_group(group): - """Returns list of email of enabled users from the given group - - :param group: Daily Work Summary Group `name`""" - group_doc = group - if isinstance(group_doc, str): - group_doc = frappe.get_doc("Daily Work Summary Group", group) - - emails = get_users_email(group_doc) - - return emails - - -def get_users_email(doc): - return [d.email for d in doc.users if frappe.db.get_value("User", d.user, "enabled")] diff --git a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py deleted file mode 100644 index 703436529d..0000000000 --- a/erpnext/hr/doctype/daily_work_summary/test_daily_work_summary.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import os -import unittest - -import frappe -import frappe.utils - -# test_records = frappe.get_test_records('Daily Work Summary') - - -class TestDailyWorkSummary(unittest.TestCase): - def test_email_trigger(self): - self.setup_and_prepare_test() - for d in self.users: - # check that email is sent to users - if d.message: - self.assertTrue( - d.email in [d.recipient for d in self.emails if self.groups.subject in d.message] - ) - - def test_email_trigger_failed(self): - hour = "00:00" - if frappe.utils.nowtime().split(":")[0] == "00": - hour = "01:00" - - self.setup_and_prepare_test(hour) - - for d in self.users: - # check that email is not sent to users - self.assertFalse( - d.email in [d.recipient for d in self.emails if self.groups.subject in d.message] - ) - - def test_incoming(self): - # get test mail with message-id as in-reply-to - self.setup_and_prepare_test() - with open(os.path.join(os.path.dirname(__file__), "test_data", "test-reply.raw"), "r") as f: - if not self.emails: - return - test_mails = [ - f.read() - .replace("{{ sender }}", self.users[-1].email) - .replace("{{ message_id }}", self.emails[-1].message_id) - ] - - # pull the mail - email_account = frappe.get_doc("Email Account", "_Test Email Account 1") - email_account.db_set("enable_incoming", 1) - email_account.receive(test_mails=test_mails) - - daily_work_summary = frappe.get_doc( - "Daily Work Summary", frappe.get_all("Daily Work Summary")[0].name - ) - - args = daily_work_summary.get_message_details() - - self.assertTrue("I built Daily Work Summary!" in args.get("replies")[0].content) - - def setup_and_prepare_test(self, hour=None): - frappe.db.sql("delete from `tabDaily Work Summary`") - frappe.db.sql("delete from `tabEmail Queue`") - frappe.db.sql("delete from `tabEmail Queue Recipient`") - frappe.db.sql("delete from `tabCommunication`") - frappe.db.sql("delete from `tabDaily Work Summary Group`") - - self.users = frappe.get_all( - "User", fields=["email"], filters=dict(email=("!=", "test@example.com")) - ) - self.setup_groups(hour) - - from erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group import trigger_emails - - trigger_emails() - - # check if emails are created - - self.emails = frappe.db.sql( - """select r.recipient, q.message, q.message_id \ - from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r \ - where q.name = r.parent""", - as_dict=1, - ) - - def setup_groups(self, hour=None): - # setup email to trigger at this hour - if not hour: - hour = frappe.utils.nowtime().split(":")[0] - hour = hour + ":00" - - groups = frappe.get_doc( - dict( - doctype="Daily Work Summary Group", - name="Daily Work Summary", - users=self.users, - send_emails_at=hour, - subject="this is a subject for testing summary emails", - message="this is a message for testing summary emails", - ) - ) - groups.insert() - - self.groups = groups - self.groups.save() diff --git a/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw b/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw deleted file mode 100644 index ba01bc2827..0000000000 --- a/erpnext/hr/doctype/daily_work_summary/test_data/test-reply.raw +++ /dev/null @@ -1,75 +0,0 @@ -From: {{ sender }} -Content-Type: multipart/alternative; - boundary="Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361" -Message-Id: <07D687F6-10AA-4B9F-82DE-27753096164E@gmail.com> -Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\)) -X-Smtp-Server: 73CC8281-7E8F-4B47-8324-D5DA86EEDD4F -Subject: Re: What did you work on today? -Date: Thu, 10 Nov 2016 16:04:43 +0530 -X-Universally-Unique-Identifier: A4D9669F-179C-42D8-A3D3-AA6A8C49A6F2 -References: <{{ message_id }}> -To: test_in@iwebnotes.com -In-Reply-To: <{{ message_id }}> - - ---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361 -Content-Transfer-Encoding: quoted-printable -Content-Type: text/plain; - charset=us-ascii - -I built Daily Work Summary! - -> On 10-Nov-2016, at 3:20 PM, Frappe wrote: ->=20 -> Please share what did you do today. If you reply by midnight, your = -response will be recorded! ->=20 -> This email was sent to rmehta@gmail.com -> Unsubscribe from this list = - -> Sent via ERPNext - - ---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361 -Content-Transfer-Encoding: 7bit -Content-Type: text/html; - charset=us-ascii - -I built Daily Work Summary!

On 10-Nov-2016, at 3:20 PM, Frappe <test@erpnext.com> wrote:

- - - - -What did you work on today? - -
- -

Please share what did you do today. If you reply by midnight, your response will be recorded!

- -
- - - - - - -
-

---Apple-Mail=_29597CF7-20DD-4184-B3FA-85582C5C4361-- diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js deleted file mode 100644 index 43206d5dcf..0000000000 --- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.js +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Daily Work Summary Group', { - refresh: function (frm) { - if (!frm.is_new()) { - frm.add_custom_button(__('Daily Work Summary'), function () { - frappe.set_route('List', 'Daily Work Summary'); - }); - } - } -}); diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json deleted file mode 100644 index 562183f354..0000000000 --- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.json +++ /dev/null @@ -1,309 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "Prompt", - "beta": 0, - "creation": "2018-02-12 15:06:18.767239", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "enabled", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Enabled", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "select_users", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Select Users", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "users", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Users", - "length": 0, - "no_copy": 0, - "options": "Daily Work Summary Group User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "send_emails_at", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Send Emails At", - "length": 0, - "no_copy": 0, - "options": "00:00\n01:00\n02:00\n03:00\n04:00\n05:00\n06:00\n07:00\n08:00\n09:00\n10:00\n11:00\n12:00\n13:00\n14:00\n15:00\n16:00\n17:00\n18:00\n19:00\n20:00\n21:00\n22:00\n23:00", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "holiday_list", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Holiday List", - "length": 0, - "no_copy": 0, - "options": "Holiday List", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "mail_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Reminder", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "What did you work on today?", - "fieldname": "subject", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Subject", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "

Please share what did you do today. If you reply by midnight, your response will be recorded!

", - "fieldname": "message", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Message", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-02-16 10:56:03.998495", - "modified_by": "Administrator", - "module": "HR", - "name": "Daily Work Summary Group", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py b/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py deleted file mode 100644 index 4342f1c450..0000000000 --- a/erpnext/hr/doctype/daily_work_summary_group/daily_work_summary_group.py +++ /dev/null @@ -1,55 +0,0 @@ -# # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# # For license information, please see license.txt - - -import frappe -import frappe.utils -from frappe import _ -from frappe.model.document import Document - -from erpnext.hr.doctype.daily_work_summary.daily_work_summary import get_user_emails_from_group -from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday - - -class DailyWorkSummaryGroup(Document): - def validate(self): - if self.users: - if not frappe.flags.in_test and not is_incoming_account_enabled(): - frappe.throw( - _("Please enable default incoming account before creating Daily Work Summary Group") - ) - - -def trigger_emails(): - """Send emails to Employees at the given hour asking - them what did they work on today""" - groups = frappe.get_all("Daily Work Summary Group") - for d in groups: - group_doc = frappe.get_doc("Daily Work Summary Group", d) - if ( - is_current_hour(group_doc.send_emails_at) - and not is_holiday(group_doc.holiday_list) - and group_doc.enabled - ): - emails = get_user_emails_from_group(group_doc) - # find emails relating to a company - if emails: - daily_work_summary = frappe.get_doc( - dict(doctype="Daily Work Summary", daily_work_summary_group=group_doc.name) - ).insert() - daily_work_summary.send_mails(group_doc, emails) - - -def is_current_hour(hour): - return frappe.utils.nowtime().split(":")[0] == hour.split(":")[0] - - -def send_summary(): - """Send summary to everyone""" - for d in frappe.get_all("Daily Work Summary", dict(status="Open")): - daily_work_summary = frappe.get_doc("Daily Work Summary", d.name) - daily_work_summary.send_summary() - - -def is_incoming_account_enabled(): - return frappe.db.get_value("Email Account", dict(enable_incoming=1, default_incoming=1)) diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json b/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json deleted file mode 100644 index b22c051dfc..0000000000 --- a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2018-02-12 14:57:38.332692", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "user", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "User", - "length": 0, - "no_copy": 0, - "options": "User", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "user.email", - "fieldname": "email", - "fieldtype": "Read Only", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "email", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-05-16 22:43:00.481019", - "modified_by": "Administrator", - "module": "HR", - "name": "Daily Work Summary Group User", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py b/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py deleted file mode 100644 index 6e0809af33..0000000000 --- a/erpnext/hr/doctype/daily_work_summary_group_user/daily_work_summary_group_user.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class DailyWorkSummaryGroupUser(Document): - pass diff --git a/erpnext/hr/doctype/department_approver/department_approver.json b/erpnext/hr/doctype/department_approver/department_approver.json deleted file mode 100644 index 317ecb3031..0000000000 --- a/erpnext/hr/doctype/department_approver/department_approver.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "hash", - "beta": 0, - "creation": "2018-04-08 16:31:02.433252", - "custom": 0, - "description": "", - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "approver", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Approver", - "length": 0, - "no_copy": 0, - "options": "User", - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0, - "width": "200" - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-04-17 11:05:46.294340", - "modified_by": "Administrator", - "module": "HR", - "name": "Department Approver", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/department_approver/department_approver.py b/erpnext/hr/doctype/department_approver/department_approver.py deleted file mode 100644 index 87bdddd6ff..0000000000 --- a/erpnext/hr/doctype/department_approver/department_approver.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class DepartmentApprover(Document): - pass - - -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs -def get_approvers(doctype, txt, searchfield, start, page_len, filters): - - if not filters.get("employee"): - frappe.throw(_("Please select Employee first.")) - - approvers = [] - department_details = {} - department_list = [] - employee = frappe.get_value( - "Employee", - filters.get("employee"), - ["employee_name", "department", "leave_approver", "expense_approver", "shift_request_approver"], - as_dict=True, - ) - - employee_department = filters.get("department") or employee.department - if employee_department: - department_details = frappe.db.get_value( - "Department", {"name": employee_department}, ["lft", "rgt"], as_dict=True - ) - if department_details: - department_list = frappe.db.sql( - """select name from `tabDepartment` where lft <= %s - and rgt >= %s - and disabled=0 - order by lft desc""", - (department_details.lft, department_details.rgt), - as_list=True, - ) - - if filters.get("doctype") == "Leave Application" and employee.leave_approver: - approvers.append( - frappe.db.get_value("User", employee.leave_approver, ["name", "first_name", "last_name"]) - ) - - if filters.get("doctype") == "Expense Claim" and employee.expense_approver: - approvers.append( - frappe.db.get_value("User", employee.expense_approver, ["name", "first_name", "last_name"]) - ) - - if filters.get("doctype") == "Shift Request" and employee.shift_request_approver: - approvers.append( - frappe.db.get_value( - "User", employee.shift_request_approver, ["name", "first_name", "last_name"] - ) - ) - - if filters.get("doctype") == "Leave Application": - parentfield = "leave_approvers" - field_name = "Leave Approver" - elif filters.get("doctype") == "Expense Claim": - parentfield = "expense_approvers" - field_name = "Expense Approver" - elif filters.get("doctype") == "Shift Request": - parentfield = "shift_request_approver" - field_name = "Shift Request Approver" - if department_list: - for d in department_list: - approvers += frappe.db.sql( - """select user.name, user.first_name, user.last_name from - tabUser user, `tabDepartment Approver` approver where - approver.parent = %s - and user.name like %s - and approver.parentfield = %s - and approver.approver=user.name""", - (d, "%" + txt + "%", parentfield), - as_list=True, - ) - - if len(approvers) == 0: - error_msg = _("Please set {0} for the Employee: {1}").format( - field_name, frappe.bold(employee.employee_name) - ) - if department_list: - error_msg += " " + _("or for Department: {0}").format(frappe.bold(employee_department)) - frappe.throw(error_msg, title=_(field_name + " Missing")) - - return set(tuple(approver) for approver in approvers) diff --git a/erpnext/hr/doctype/designation/designation.json b/erpnext/hr/doctype/designation/designation.json deleted file mode 100644 index bab6b90d1a..0000000000 --- a/erpnext/hr/doctype/designation/designation.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:designation_name", - "beta": 0, - "creation": "2013-01-10 16:34:13", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "designation_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Designation", - "length": 0, - "no_copy": 0, - "oldfieldname": "designation_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 1 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "description", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "required_skills_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Required Skills", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "skills", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Skills", - "length": 0, - "no_copy": 0, - "options": "Designation Skill", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_toolbar": 0, - "icon": "fa fa-bookmark", - "idx": 1, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "menu_index": 0, - "modified": "2019-04-16 10:02:23.277734", - "modified_by": "Administrator", - "module": "HR", - "name": "Designation", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "read": 1, - "role": "Sales User" - } - ], - "quick_entry": 1, - "read_only": 0, - "show_name_in_global_search": 1, - "sort_order": "ASC", - "track_changes": 0, - "track_seen": 0, - "track_views": 0 -} diff --git a/erpnext/hr/doctype/designation_skill/designation_skill.json b/erpnext/hr/doctype/designation_skill/designation_skill.json deleted file mode 100644 index 30e23d0f02..0000000000 --- a/erpnext/hr/doctype/designation_skill/designation_skill.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2019-04-16 10:01:05.259881", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "skill", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Skill", - "length": 0, - "no_copy": 0, - "options": "Skill", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_toolbar": 0, - "idx": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2019-04-16 13:42:10.760449", - "modified_by": "Administrator", - "module": "HR", - "name": "Designation Skill", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee/employee_dashboard.py b/erpnext/hr/doctype/employee/employee_dashboard.py deleted file mode 100644 index da89a1d651..0000000000 --- a/erpnext/hr/doctype/employee/employee_dashboard.py +++ /dev/null @@ -1,50 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "heatmap": True, - "heatmap_message": _("This is based on the attendance of this Employee"), - "fieldname": "employee", - "non_standard_fieldnames": {"Bank Account": "party", "Employee Grievance": "raised_by"}, - "transactions": [ - {"label": _("Attendance"), "items": ["Attendance", "Attendance Request", "Employee Checkin"]}, - { - "label": _("Leave"), - "items": ["Leave Application", "Leave Allocation", "Leave Policy Assignment"], - }, - { - "label": _("Lifecycle"), - "items": [ - "Employee Onboarding", - "Employee Transfer", - "Employee Promotion", - "Employee Grievance", - ], - }, - { - "label": _("Exit"), - "items": ["Employee Separation", "Exit Interview", "Full and Final Statement"], - }, - {"label": _("Shift"), "items": ["Shift Request", "Shift Assignment"]}, - {"label": _("Expense"), "items": ["Expense Claim", "Travel Request", "Employee Advance"]}, - {"label": _("Benefit"), "items": ["Employee Benefit Application", "Employee Benefit Claim"]}, - { - "label": _("Payroll"), - "items": [ - "Salary Structure Assignment", - "Salary Slip", - "Additional Salary", - "Timesheet", - "Employee Incentive", - "Retention Bonus", - "Bank Account", - ], - }, - { - "label": _("Training"), - "items": ["Training Event", "Training Result", "Training Feedback", "Employee Skill Map"], - }, - {"label": _("Evaluation"), "items": ["Appraisal"]}, - ], - } diff --git a/erpnext/hr/doctype/employee/employee_reminders.py b/erpnext/hr/doctype/employee/employee_reminders.py deleted file mode 100644 index 1829bc4f2f..0000000000 --- a/erpnext/hr/doctype/employee/employee_reminders.py +++ /dev/null @@ -1,268 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe -from frappe import _ -from frappe.utils import add_days, add_months, comma_sep, getdate, today - -from erpnext.hr.doctype.employee.employee import get_all_employee_emails, get_employee_email -from erpnext.hr.utils import get_holidays_for_employee - - -# ----------------- -# HOLIDAY REMINDERS -# ----------------- -def send_reminders_in_advance_weekly(): - to_send_in_advance = int(frappe.db.get_single_value("HR Settings", "send_holiday_reminders")) - frequency = frappe.db.get_single_value("HR Settings", "frequency") - if not (to_send_in_advance and frequency == "Weekly"): - return - - send_advance_holiday_reminders("Weekly") - - -def send_reminders_in_advance_monthly(): - to_send_in_advance = int(frappe.db.get_single_value("HR Settings", "send_holiday_reminders")) - frequency = frappe.db.get_single_value("HR Settings", "frequency") - if not (to_send_in_advance and frequency == "Monthly"): - return - - send_advance_holiday_reminders("Monthly") - - -def send_advance_holiday_reminders(frequency): - """Send Holiday Reminders in Advance to Employees - `frequency` (str): 'Weekly' or 'Monthly' - """ - if frequency == "Weekly": - start_date = getdate() - end_date = add_days(getdate(), 7) - elif frequency == "Monthly": - # Sent on 1st of every month - start_date = getdate() - end_date = add_months(getdate(), 1) - else: - return - - employees = frappe.db.get_all("Employee", filters={"status": "Active"}, pluck="name") - for employee in employees: - holidays = get_holidays_for_employee( - employee, start_date, end_date, only_non_weekly=True, raise_exception=False - ) - - send_holidays_reminder_in_advance(employee, holidays) - - -def send_holidays_reminder_in_advance(employee, holidays): - if not holidays: - return - - employee_doc = frappe.get_doc("Employee", employee) - employee_email = get_employee_email(employee_doc) - frequency = frappe.db.get_single_value("HR Settings", "frequency") - - email_header = _("Holidays this Month.") if frequency == "Monthly" else _("Holidays this Week.") - frappe.sendmail( - recipients=[employee_email], - subject=_("Upcoming Holidays Reminder"), - template="holiday_reminder", - args=dict( - reminder_text=_("Hey {}! This email is to remind you about the upcoming holidays.").format( - employee_doc.get("first_name") - ), - message=_("Below is the list of upcoming holidays for you:"), - advance_holiday_reminder=True, - holidays=holidays, - frequency=frequency[:-2], - ), - header=email_header, - ) - - -# ------------------ -# BIRTHDAY REMINDERS -# ------------------ -def send_birthday_reminders(): - """Send Employee birthday reminders if no 'Stop Birthday Reminders' is not set.""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_birthday_reminders")) - if not to_send: - return - - employees_born_today = get_employees_who_are_born_today() - - for company, birthday_persons in employees_born_today.items(): - employee_emails = get_all_employee_emails(company) - birthday_person_emails = [get_employee_email(doc) for doc in birthday_persons] - recipients = list(set(employee_emails) - set(birthday_person_emails)) - - reminder_text, message = get_birthday_reminder_text_and_message(birthday_persons) - send_birthday_reminder(recipients, reminder_text, birthday_persons, message) - - if len(birthday_persons) > 1: - # special email for people sharing birthdays - for person in birthday_persons: - person_email = person["user_id"] or person["personal_email"] or person["company_email"] - others = [d for d in birthday_persons if d != person] - reminder_text, message = get_birthday_reminder_text_and_message(others) - send_birthday_reminder(person_email, reminder_text, others, message) - - -def get_birthday_reminder_text_and_message(birthday_persons): - if len(birthday_persons) == 1: - birthday_person_text = birthday_persons[0]["name"] - else: - # converts ["Jim", "Rim", "Dim"] to Jim, Rim & Dim - person_names = [d["name"] for d in birthday_persons] - birthday_person_text = comma_sep(person_names, frappe._("{0} & {1}"), False) - - reminder_text = _("Today is {0}'s birthday 🎉").format(birthday_person_text) - message = _("A friendly reminder of an important date for our team.") - message += "
" - message += _("Everyone, let’s congratulate {0} on their birthday.").format(birthday_person_text) - - return reminder_text, message - - -def send_birthday_reminder(recipients, reminder_text, birthday_persons, message): - frappe.sendmail( - recipients=recipients, - subject=_("Birthday Reminder"), - template="birthday_reminder", - args=dict( - reminder_text=reminder_text, - birthday_persons=birthday_persons, - message=message, - ), - header=_("Birthday Reminder 🎂"), - ) - - -def get_employees_who_are_born_today(): - """Get all employee born today & group them based on their company""" - return get_employees_having_an_event_today("birthday") - - -def get_employees_having_an_event_today(event_type): - """Get all employee who have `event_type` today - & group them based on their company. `event_type` - can be `birthday` or `work_anniversary`""" - - from collections import defaultdict - - # Set column based on event type - if event_type == "birthday": - condition_column = "date_of_birth" - elif event_type == "work_anniversary": - condition_column = "date_of_joining" - else: - return - - employees_born_today = frappe.db.multisql( - { - "mariadb": f""" - SELECT `personal_email`, `company`, `company_email`, `user_id`, `employee_name` AS 'name', `image`, `date_of_joining` - FROM `tabEmployee` - WHERE - DAY({condition_column}) = DAY(%(today)s) - AND - MONTH({condition_column}) = MONTH(%(today)s) - AND - YEAR({condition_column}) < YEAR(%(today)s) - AND - `status` = 'Active' - """, - "postgres": f""" - SELECT "personal_email", "company", "company_email", "user_id", "employee_name" AS 'name', "image" - FROM "tabEmployee" - WHERE - DATE_PART('day', {condition_column}) = date_part('day', %(today)s) - AND - DATE_PART('month', {condition_column}) = date_part('month', %(today)s) - AND - DATE_PART('year', {condition_column}) < date_part('year', %(today)s) - AND - "status" = 'Active' - """, - }, - dict(today=today(), condition_column=condition_column), - as_dict=1, - ) - - grouped_employees = defaultdict(lambda: []) - - for employee_doc in employees_born_today: - grouped_employees[employee_doc.get("company")].append(employee_doc) - - return grouped_employees - - -# -------------------------- -# WORK ANNIVERSARY REMINDERS -# -------------------------- -def send_work_anniversary_reminders(): - """Send Employee Work Anniversary Reminders if 'Send Work Anniversary Reminders' is checked""" - to_send = int(frappe.db.get_single_value("HR Settings", "send_work_anniversary_reminders")) - if not to_send: - return - - employees_joined_today = get_employees_having_an_event_today("work_anniversary") - - for company, anniversary_persons in employees_joined_today.items(): - employee_emails = get_all_employee_emails(company) - anniversary_person_emails = [get_employee_email(doc) for doc in anniversary_persons] - recipients = list(set(employee_emails) - set(anniversary_person_emails)) - - reminder_text, message = get_work_anniversary_reminder_text_and_message(anniversary_persons) - send_work_anniversary_reminder(recipients, reminder_text, anniversary_persons, message) - - if len(anniversary_persons) > 1: - # email for people sharing work anniversaries - for person in anniversary_persons: - person_email = person["user_id"] or person["personal_email"] or person["company_email"] - others = [d for d in anniversary_persons if d != person] - reminder_text, message = get_work_anniversary_reminder_text_and_message(others) - send_work_anniversary_reminder(person_email, reminder_text, others, message) - - -def get_work_anniversary_reminder_text_and_message(anniversary_persons): - if len(anniversary_persons) == 1: - anniversary_person = anniversary_persons[0]["name"] - persons_name = anniversary_person - # Number of years completed at the company - completed_years = getdate().year - anniversary_persons[0]["date_of_joining"].year - anniversary_person += f" completed {completed_years} year(s)" - else: - person_names_with_years = [] - names = [] - for person in anniversary_persons: - person_text = person["name"] - names.append(person_text) - # Number of years completed at the company - completed_years = getdate().year - person["date_of_joining"].year - person_text += f" completed {completed_years} year(s)" - person_names_with_years.append(person_text) - - # converts ["Jim", "Rim", "Dim"] to Jim, Rim & Dim - anniversary_person = comma_sep(person_names_with_years, frappe._("{0} & {1}"), False) - persons_name = comma_sep(names, frappe._("{0} & {1}"), False) - - reminder_text = _("Today {0} at our Company! 🎉").format(anniversary_person) - message = _("A friendly reminder of an important date for our team.") - message += "
" - message += _("Everyone, let’s congratulate {0} on their work anniversary!").format(persons_name) - - return reminder_text, message - - -def send_work_anniversary_reminder(recipients, reminder_text, anniversary_persons, message): - frappe.sendmail( - recipients=recipients, - subject=_("Work Anniversary Reminder"), - template="anniversary_reminder", - args=dict( - reminder_text=reminder_text, - anniversary_persons=anniversary_persons, - message=message, - ), - header=_("Work Anniversary Reminder"), - ) diff --git a/erpnext/hr/doctype/employee/test_employee_reminders.py b/erpnext/hr/doctype/employee/test_employee_reminders.py deleted file mode 100644 index 9bde77c956..0000000000 --- a/erpnext/hr/doctype/employee/test_employee_reminders.py +++ /dev/null @@ -1,268 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import unittest -from datetime import timedelta - -import frappe -from frappe.utils import add_months, getdate - -from erpnext.hr.doctype.employee.employee_reminders import send_holidays_reminder_in_advance -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.hr_settings.hr_settings import set_proceed_with_frequency_change -from erpnext.hr.utils import get_holidays_for_employee - - -class TestEmployeeReminders(unittest.TestCase): - @classmethod - def setUpClass(cls): - from erpnext.hr.doctype.holiday_list.test_holiday_list import make_holiday_list - - # Create a test holiday list - test_holiday_dates = cls.get_test_holiday_dates() - test_holiday_list = make_holiday_list( - "TestHolidayRemindersList", - holiday_dates=[ - {"holiday_date": test_holiday_dates[0], "description": "test holiday1"}, - {"holiday_date": test_holiday_dates[1], "description": "test holiday2"}, - {"holiday_date": test_holiday_dates[2], "description": "test holiday3", "weekly_off": 1}, - {"holiday_date": test_holiday_dates[3], "description": "test holiday4"}, - {"holiday_date": test_holiday_dates[4], "description": "test holiday5"}, - {"holiday_date": test_holiday_dates[5], "description": "test holiday6"}, - ], - from_date=getdate() - timedelta(days=10), - to_date=getdate() + timedelta(weeks=5), - ) - - # Create a test employee - test_employee = frappe.get_doc( - "Employee", make_employee("test@gopher.io", company="_Test Company") - ) - - # Attach the holiday list to employee - test_employee.holiday_list = test_holiday_list.name - test_employee.save() - - # Attach to class - cls.test_employee = test_employee - cls.test_holiday_dates = test_holiday_dates - - # Employee without holidays in this month/week - test_employee_2 = make_employee("test@empwithoutholiday.io", company="_Test Company") - test_employee_2 = frappe.get_doc("Employee", test_employee_2) - - test_holiday_list = make_holiday_list( - "TestHolidayRemindersList2", - holiday_dates=[ - {"holiday_date": add_months(getdate(), 1), "description": "test holiday1"}, - ], - from_date=add_months(getdate(), -2), - to_date=add_months(getdate(), 2), - ) - test_employee_2.holiday_list = test_holiday_list.name - test_employee_2.save() - - cls.test_employee_2 = test_employee_2 - cls.holiday_list_2 = test_holiday_list - - @classmethod - def get_test_holiday_dates(cls): - today_date = getdate() - return [ - today_date, - today_date - timedelta(days=4), - today_date - timedelta(days=3), - today_date + timedelta(days=1), - today_date + timedelta(days=3), - today_date + timedelta(weeks=3), - ] - - def setUp(self): - # Clear Email Queue - frappe.db.sql("delete from `tabEmail Queue`") - frappe.db.sql("delete from `tabEmail Queue Recipient`") - - def test_is_holiday(self): - from erpnext.hr.doctype.employee.employee import is_holiday - - self.assertTrue(is_holiday(self.test_employee.name)) - self.assertTrue(is_holiday(self.test_employee.name, date=self.test_holiday_dates[1])) - self.assertFalse(is_holiday(self.test_employee.name, date=getdate() - timedelta(days=1))) - - # Test weekly_off holidays - self.assertTrue(is_holiday(self.test_employee.name, date=self.test_holiday_dates[2])) - self.assertFalse( - is_holiday(self.test_employee.name, date=self.test_holiday_dates[2], only_non_weekly=True) - ) - - # Test with descriptions - has_holiday, descriptions = is_holiday(self.test_employee.name, with_description=True) - self.assertTrue(has_holiday) - self.assertTrue("test holiday1" in descriptions) - - def test_birthday_reminders(self): - employee = frappe.get_doc( - "Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0] - ) - employee.date_of_birth = "1992" + frappe.utils.nowdate()[4:] - employee.company_email = "test@example.com" - employee.company = "_Test Company" - employee.save() - - from erpnext.hr.doctype.employee.employee_reminders import ( - get_employees_who_are_born_today, - send_birthday_reminders, - ) - - employees_born_today = get_employees_who_are_born_today() - self.assertTrue(employees_born_today.get("_Test Company")) - - hr_settings = frappe.get_doc("HR Settings", "HR Settings") - hr_settings.send_birthday_reminders = 1 - hr_settings.save() - - send_birthday_reminders() - - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue("Subject: Birthday Reminder" in email_queue[0].message) - - def test_work_anniversary_reminders(self): - make_employee( - "test_work_anniversary@gmail.com", - date_of_joining="1998" + frappe.utils.nowdate()[4:], - company="_Test Company", - ) - - from erpnext.hr.doctype.employee.employee_reminders import ( - get_employees_having_an_event_today, - send_work_anniversary_reminders, - ) - - employees_having_work_anniversary = get_employees_having_an_event_today("work_anniversary") - employees = employees_having_work_anniversary.get("_Test Company") or [] - user_ids = [] - for entry in employees: - user_ids.append(entry.user_id) - - self.assertTrue("test_work_anniversary@gmail.com" in user_ids) - - hr_settings = frappe.get_doc("HR Settings", "HR Settings") - hr_settings.send_work_anniversary_reminders = 1 - hr_settings.save() - - send_work_anniversary_reminders() - - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue("Subject: Work Anniversary Reminder" in email_queue[0].message) - - def test_work_anniversary_reminder_not_sent_for_0_years(self): - make_employee( - "test_work_anniversary_2@gmail.com", - date_of_joining=getdate(), - company="_Test Company", - ) - - from erpnext.hr.doctype.employee.employee_reminders import get_employees_having_an_event_today - - employees_having_work_anniversary = get_employees_having_an_event_today("work_anniversary") - employees = employees_having_work_anniversary.get("_Test Company") or [] - user_ids = [] - for entry in employees: - user_ids.append(entry.user_id) - - self.assertTrue("test_work_anniversary_2@gmail.com" not in user_ids) - - def test_send_holidays_reminder_in_advance(self): - setup_hr_settings("Weekly") - - holidays = get_holidays_for_employee( - self.test_employee.get("name"), - getdate(), - getdate() + timedelta(days=3), - only_non_weekly=True, - raise_exception=False, - ) - - send_holidays_reminder_in_advance(self.test_employee.get("name"), holidays) - - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertEqual(len(email_queue), 1) - self.assertTrue("Holidays this Week." in email_queue[0].message) - - def test_advance_holiday_reminders_monthly(self): - from erpnext.hr.doctype.employee.employee_reminders import send_reminders_in_advance_monthly - - setup_hr_settings("Monthly") - - # disable emp 2, set same holiday list - frappe.db.set_value( - "Employee", - self.test_employee_2.name, - {"status": "Left", "holiday_list": self.test_employee.holiday_list}, - ) - - send_reminders_in_advance_monthly() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue(len(email_queue) > 0) - - # even though emp 2 has holiday, non-active employees should not be recipients - recipients = frappe.db.get_all("Email Queue Recipient", pluck="recipient") - self.assertTrue(self.test_employee_2.user_id not in recipients) - - # teardown: enable emp 2 - frappe.db.set_value( - "Employee", - self.test_employee_2.name, - {"status": "Active", "holiday_list": self.holiday_list_2.name}, - ) - - def test_advance_holiday_reminders_weekly(self): - from erpnext.hr.doctype.employee.employee_reminders import send_reminders_in_advance_weekly - - setup_hr_settings("Weekly") - - # disable emp 2, set same holiday list - frappe.db.set_value( - "Employee", - self.test_employee_2.name, - {"status": "Left", "holiday_list": self.test_employee.holiday_list}, - ) - - send_reminders_in_advance_weekly() - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue(len(email_queue) > 0) - - # even though emp 2 has holiday, non-active employees should not be recipients - recipients = frappe.db.get_all("Email Queue Recipient", pluck="recipient") - self.assertTrue(self.test_employee_2.user_id not in recipients) - - # teardown: enable emp 2 - frappe.db.set_value( - "Employee", - self.test_employee_2.name, - {"status": "Active", "holiday_list": self.holiday_list_2.name}, - ) - - def test_reminder_not_sent_if_no_holdays(self): - setup_hr_settings("Monthly") - - # reminder not sent if there are no holidays - holidays = get_holidays_for_employee( - self.test_employee_2.get("name"), - getdate(), - getdate() + timedelta(days=3), - only_non_weekly=True, - raise_exception=False, - ) - send_holidays_reminder_in_advance(self.test_employee_2.get("name"), holidays) - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertEqual(len(email_queue), 0) - - -def setup_hr_settings(frequency=None): - # Get HR settings and enable advance holiday reminders - hr_settings = frappe.get_doc("HR Settings", "HR Settings") - hr_settings.send_holiday_reminders = 1 - set_proceed_with_frequency_change() - hr_settings.frequency = frequency or "Weekly" - hr_settings.save() diff --git a/erpnext/hr/doctype/employee_advance/__init__.py b/erpnext/hr/doctype/employee_advance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js deleted file mode 100644 index 7d1c7cbf4a..0000000000 --- a/erpnext/hr/doctype/employee_advance/employee_advance.js +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Advance', { - setup: function(frm) { - frm.add_fetch("employee", "company", "company"); - frm.add_fetch("company", "default_employee_advance_account", "advance_account"); - - frm.set_query("employee", function() { - return { - filters: { - "status": "Active" - } - }; - }); - - frm.set_query("advance_account", function() { - if (!frm.doc.employee) { - frappe.msgprint(__("Please select employee first")); - } - let company_currency = erpnext.get_currency(frm.doc.company); - let currencies = [company_currency]; - if (frm.doc.currency && (frm.doc.currency != company_currency)) { - currencies.push(frm.doc.currency); - } - - return { - filters: { - "root_type": "Asset", - "is_group": 0, - "company": frm.doc.company, - "account_currency": ["in", currencies], - } - }; - }); - - frm.set_query('salary_component', function() { - return { - filters: { - "type": "Deduction" - } - }; - }); - }, - - refresh: function(frm) { - if (frm.doc.docstatus === 1 && - (flt(frm.doc.paid_amount) < flt(frm.doc.advance_amount)) && - frappe.model.can_create("Payment Entry")) { - frm.add_custom_button(__('Payment'), - function () { - frm.events.make_payment_entry(frm); - }, __('Create')); - } else if ( - frm.doc.docstatus === 1 && - flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) - flt(frm.doc.return_amount) && - frappe.model.can_create("Expense Claim") - ) { - frm.add_custom_button( - __("Expense Claim"), - function () { - frm.events.make_expense_claim(frm); - }, - __('Create') - ); - } - - if (frm.doc.docstatus === 1 && - (flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) && flt(frm.doc.paid_amount) != flt(frm.doc.return_amount))) { - - if (frm.doc.repay_unclaimed_amount_from_salary == 0 && frappe.model.can_create("Journal Entry")) { - frm.add_custom_button(__("Return"), function() { - frm.trigger('make_return_entry'); - }, __('Create')); - } else if (frm.doc.repay_unclaimed_amount_from_salary == 1 && frappe.model.can_create("Additional Salary")) { - frm.add_custom_button(__("Deduction from Salary"), function() { - frm.events.make_deduction_via_additional_salary(frm); - }, __('Create')); - } - } - }, - - make_deduction_via_additional_salary: function(frm) { - frappe.call({ - method: "erpnext.hr.doctype.employee_advance.employee_advance.create_return_through_additional_salary", - args: { - doc: frm.doc - }, - callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, - - make_payment_entry: function(frm) { - var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry"; - if (frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) { - method = "erpnext.hr.doctype.employee_advance.employee_advance.make_bank_entry"; - } - return frappe.call({ - method: method, - args: { - "dt": frm.doc.doctype, - "dn": frm.doc.name - }, - callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, - - make_expense_claim: function(frm) { - return frappe.call({ - method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim", - args: { - "employee_name": frm.doc.employee, - "company": frm.doc.company, - "employee_advance_name": frm.doc.name, - "posting_date": frm.doc.posting_date, - "paid_amount": frm.doc.paid_amount, - "claimed_amount": frm.doc.claimed_amount - }, - callback: function(r) { - const doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, - - make_return_entry: function(frm) { - frappe.call({ - method: 'erpnext.hr.doctype.employee_advance.employee_advance.make_return_entry', - args: { - 'employee': frm.doc.employee, - 'company': frm.doc.company, - 'employee_advance_name': frm.doc.name, - 'return_amount': flt(frm.doc.paid_amount - frm.doc.claimed_amount), - 'advance_account': frm.doc.advance_account, - 'mode_of_payment': frm.doc.mode_of_payment, - 'currency': frm.doc.currency, - 'exchange_rate': frm.doc.exchange_rate - }, - callback: function(r) { - const doclist = frappe.model.sync(r.message); - frappe.set_route('Form', doclist[0].doctype, doclist[0].name); - } - }); - }, - - employee: function(frm) { - if (frm.doc.employee) { - frappe.run_serially([ - () => frm.trigger('get_employee_currency'), - () => frm.trigger('get_pending_amount') - ]); - } - }, - - get_pending_amount: function(frm) { - frappe.call({ - method: "erpnext.hr.doctype.employee_advance.employee_advance.get_pending_amount", - args: { - "employee": frm.doc.employee, - "posting_date": frm.doc.posting_date - }, - callback: function(r) { - frm.set_value("pending_amount", r.message); - } - }); - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - }, - - currency: function(frm) { - if (frm.doc.currency) { - var from_currency = frm.doc.currency; - var company_currency; - if (!frm.doc.company) { - company_currency = erpnext.get_currency(frappe.defaults.get_default("Company")); - } else { - company_currency = erpnext.get_currency(frm.doc.company); - } - if (from_currency != company_currency) { - frm.events.set_exchange_rate(frm, from_currency, company_currency); - } else { - frm.set_value("exchange_rate", 1.0); - frm.set_df_property('exchange_rate', 'hidden', 1); - frm.set_df_property("exchange_rate", "description", ""); - } - frm.refresh_fields(); - } - }, - - set_exchange_rate: function(frm, from_currency, company_currency) { - frappe.call({ - method: "erpnext.setup.utils.get_exchange_rate", - args: { - from_currency: from_currency, - to_currency: company_currency, - }, - callback: function(r) { - frm.set_value("exchange_rate", flt(r.message)); - frm.set_df_property('exchange_rate', 'hidden', 0); - frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency + - " = [?] " + company_currency); - } - }); - } -}); diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.json b/erpnext/hr/doctype/employee_advance/employee_advance.json deleted file mode 100644 index b0501830cc..0000000000 --- a/erpnext/hr/doctype/employee_advance/employee_advance.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2022-01-17 18:36:51.450395", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "naming_series", - "employee", - "employee_name", - "department", - "column_break_4", - "posting_date", - "currency", - "exchange_rate", - "repay_unclaimed_amount_from_salary", - "section_break_8", - "purpose", - "column_break_11", - "advance_amount", - "paid_amount", - "pending_amount", - "claimed_amount", - "return_amount", - "section_break_7", - "status", - "company", - "amended_from", - "column_break_18", - "advance_account", - "mode_of_payment" - ], - "fields": [ - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "options": "HR-EAD-.YYYY.-" - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "label": "Employee Name" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "default": "Today", - "fieldname": "posting_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Posting Date", - "reqd": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "section_break_8", - "fieldtype": "Section Break" - }, - { - "fieldname": "purpose", - "fieldtype": "Small Text", - "in_list_view": 1, - "label": "Purpose", - "reqd": 1 - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "fieldname": "advance_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Advance Amount", - "options": "currency", - "reqd": 1 - }, - { - "fieldname": "paid_amount", - "fieldtype": "Currency", - "label": "Paid Amount", - "no_copy": 1, - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "claimed_amount", - "fieldtype": "Currency", - "label": "Claimed Amount", - "no_copy": 1, - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "section_break_7", - "fieldtype": "Section Break" - }, - { - "fieldname": "status", - "fieldtype": "Select", - "label": "Status", - "no_copy": 1, - "options": "Draft\nPaid\nUnpaid\nClaimed\nReturned\nPartly Claimed and Returned\nCancelled", - "read_only": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Advance", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "fieldname": "advance_account", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Advance Account", - "options": "Account", - "reqd": 1 - }, - { - "fieldname": "mode_of_payment", - "fieldtype": "Link", - "label": "Mode of Payment", - "options": "Mode of Payment" - }, - { - "allow_on_submit": 1, - "fieldname": "return_amount", - "fieldtype": "Currency", - "label": "Returned Amount", - "options": "currency", - "read_only": 1 - }, - { - "default": "0", - "fieldname": "repay_unclaimed_amount_from_salary", - "fieldtype": "Check", - "label": "Repay Unclaimed Amount from Salary" - }, - { - "depends_on": "eval:cur_frm.doc.employee", - "fieldname": "pending_amount", - "fieldtype": "Currency", - "label": "Pending Amount", - "options": "currency", - "read_only": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "reqd": 1 - }, - { - "depends_on": "currency", - "fieldname": "exchange_rate", - "fieldtype": "Float", - "label": "Exchange Rate", - "precision": "9", - "print_hide": 1, - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-17 19:33:52.345823", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Advance", - "naming_rule": "By \"Naming Series\" field", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Expense Approver", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee,employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [ - { - "color": "Red", - "custom": 1, - "title": "Draft" - }, - { - "color": "Green", - "custom": 1, - "title": "Paid" - }, - { - "color": "Orange", - "custom": 1, - "title": "Unpaid" - }, - { - "color": "Blue", - "custom": 1, - "title": "Claimed" - }, - { - "color": "Gray", - "title": "Returned" - }, - { - "color": "Yellow", - "title": "Partly Claimed and Returned" - }, - { - "color": "Red", - "custom": 1, - "title": "Cancelled" - } - ], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.py b/erpnext/hr/doctype/employee_advance/employee_advance.py deleted file mode 100644 index c1876b1175..0000000000 --- a/erpnext/hr/doctype/employee_advance/employee_advance.py +++ /dev/null @@ -1,323 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder.functions import Sum -from frappe.utils import flt, nowdate - -import erpnext -from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account -from erpnext.hr.utils import validate_active_employee - - -class EmployeeAdvanceOverPayment(frappe.ValidationError): - pass - - -class EmployeeAdvance(Document): - def onload(self): - self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value( - "Accounts Settings", "make_payment_via_journal_entry" - ) - - def validate(self): - validate_active_employee(self.employee) - self.set_status() - - def on_cancel(self): - self.ignore_linked_doctypes = "GL Entry" - self.set_status(update=True) - - def set_status(self, update=False): - precision = self.precision("paid_amount") - total_amount = flt(flt(self.claimed_amount) + flt(self.return_amount), precision) - status = None - - if self.docstatus == 0: - status = "Draft" - elif self.docstatus == 1: - if flt(self.claimed_amount) > 0 and flt(self.claimed_amount, precision) == flt( - self.paid_amount, precision - ): - status = "Claimed" - elif flt(self.return_amount) > 0 and flt(self.return_amount, precision) == flt( - self.paid_amount, precision - ): - status = "Returned" - elif ( - flt(self.claimed_amount) > 0 - and (flt(self.return_amount) > 0) - and total_amount == flt(self.paid_amount, precision) - ): - status = "Partly Claimed and Returned" - elif flt(self.paid_amount) > 0 and flt(self.advance_amount, precision) == flt( - self.paid_amount, precision - ): - status = "Paid" - else: - status = "Unpaid" - elif self.docstatus == 2: - status = "Cancelled" - - if update: - self.db_set("status", status) - else: - self.status = status - - def set_total_advance_paid(self): - gle = frappe.qb.DocType("GL Entry") - - paid_amount = ( - frappe.qb.from_(gle) - .select(Sum(gle.debit).as_("paid_amount")) - .where( - (gle.against_voucher_type == "Employee Advance") - & (gle.against_voucher == self.name) - & (gle.party_type == "Employee") - & (gle.party == self.employee) - & (gle.docstatus == 1) - & (gle.is_cancelled == 0) - ) - ).run(as_dict=True)[0].paid_amount or 0 - - return_amount = ( - frappe.qb.from_(gle) - .select(Sum(gle.credit).as_("return_amount")) - .where( - (gle.against_voucher_type == "Employee Advance") - & (gle.voucher_type != "Expense Claim") - & (gle.against_voucher == self.name) - & (gle.party_type == "Employee") - & (gle.party == self.employee) - & (gle.docstatus == 1) - & (gle.is_cancelled == 0) - ) - ).run(as_dict=True)[0].return_amount or 0 - - if paid_amount != 0: - paid_amount = flt(paid_amount) / flt(self.exchange_rate) - if return_amount != 0: - return_amount = flt(return_amount) / flt(self.exchange_rate) - - if flt(paid_amount) > self.advance_amount: - frappe.throw( - _("Row {0}# Paid Amount cannot be greater than requested advance amount"), - EmployeeAdvanceOverPayment, - ) - - if flt(return_amount) > self.paid_amount - self.claimed_amount: - frappe.throw(_("Return amount cannot be greater unclaimed amount")) - - self.db_set("paid_amount", paid_amount) - self.db_set("return_amount", return_amount) - self.set_status(update=True) - - def update_claimed_amount(self): - claimed_amount = ( - frappe.db.sql( - """ - SELECT sum(ifnull(allocated_amount, 0)) - FROM `tabExpense Claim Advance` eca, `tabExpense Claim` ec - WHERE - eca.employee_advance = %s - AND ec.approval_status="Approved" - AND ec.name = eca.parent - AND ec.docstatus=1 - AND eca.allocated_amount > 0 - """, - self.name, - )[0][0] - or 0 - ) - - frappe.db.set_value("Employee Advance", self.name, "claimed_amount", flt(claimed_amount)) - self.reload() - self.set_status(update=True) - - -@frappe.whitelist() -def get_pending_amount(employee, posting_date): - employee_due_amount = frappe.get_all( - "Employee Advance", - filters={"employee": employee, "docstatus": 1, "posting_date": ("<=", posting_date)}, - fields=["advance_amount", "paid_amount"], - ) - return sum([(emp.advance_amount - emp.paid_amount) for emp in employee_due_amount]) - - -@frappe.whitelist() -def make_bank_entry(dt, dn): - doc = frappe.get_doc(dt, dn) - payment_account = get_default_bank_cash_account( - doc.company, account_type="Cash", mode_of_payment=doc.mode_of_payment - ) - if not payment_account: - frappe.throw(_("Please set a Default Cash Account in Company defaults")) - - advance_account_currency = frappe.db.get_value("Account", doc.advance_account, "account_currency") - - advance_amount, advance_exchange_rate = get_advance_amount_advance_exchange_rate( - advance_account_currency, doc - ) - - paying_amount, paying_exchange_rate = get_paying_amount_paying_exchange_rate(payment_account, doc) - - je = frappe.new_doc("Journal Entry") - je.posting_date = nowdate() - je.voucher_type = "Bank Entry" - je.company = doc.company - je.remark = "Payment against Employee Advance: " + dn + "\n" + doc.purpose - je.multi_currency = 1 if advance_account_currency != payment_account.account_currency else 0 - - je.append( - "accounts", - { - "account": doc.advance_account, - "account_currency": advance_account_currency, - "exchange_rate": flt(advance_exchange_rate), - "debit_in_account_currency": flt(advance_amount), - "reference_type": "Employee Advance", - "reference_name": doc.name, - "party_type": "Employee", - "cost_center": erpnext.get_default_cost_center(doc.company), - "party": doc.employee, - "is_advance": "Yes", - }, - ) - - je.append( - "accounts", - { - "account": payment_account.account, - "cost_center": erpnext.get_default_cost_center(doc.company), - "credit_in_account_currency": flt(paying_amount), - "account_currency": payment_account.account_currency, - "account_type": payment_account.account_type, - "exchange_rate": flt(paying_exchange_rate), - }, - ) - - return je.as_dict() - - -def get_advance_amount_advance_exchange_rate(advance_account_currency, doc): - if advance_account_currency != doc.currency: - advance_amount = flt(doc.advance_amount) * flt(doc.exchange_rate) - advance_exchange_rate = 1 - else: - advance_amount = doc.advance_amount - advance_exchange_rate = doc.exchange_rate - - return advance_amount, advance_exchange_rate - - -def get_paying_amount_paying_exchange_rate(payment_account, doc): - if payment_account.account_currency != doc.currency: - paying_amount = flt(doc.advance_amount) * flt(doc.exchange_rate) - paying_exchange_rate = 1 - else: - paying_amount = doc.advance_amount - paying_exchange_rate = doc.exchange_rate - - return paying_amount, paying_exchange_rate - - -@frappe.whitelist() -def create_return_through_additional_salary(doc): - import json - - if isinstance(doc, str): - doc = frappe._dict(json.loads(doc)) - - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.employee = doc.employee - additional_salary.currency = doc.currency - additional_salary.amount = doc.paid_amount - doc.claimed_amount - additional_salary.company = doc.company - additional_salary.ref_doctype = doc.doctype - additional_salary.ref_docname = doc.name - - return additional_salary - - -@frappe.whitelist() -def make_return_entry( - employee, - company, - employee_advance_name, - return_amount, - advance_account, - currency, - exchange_rate, - mode_of_payment=None, -): - bank_cash_account = get_default_bank_cash_account( - company, account_type="Cash", mode_of_payment=mode_of_payment - ) - if not bank_cash_account: - frappe.throw(_("Please set a Default Cash Account in Company defaults")) - - advance_account_currency = frappe.db.get_value("Account", advance_account, "account_currency") - - je = frappe.new_doc("Journal Entry") - je.posting_date = nowdate() - je.voucher_type = get_voucher_type(mode_of_payment) - je.company = company - je.remark = "Return against Employee Advance: " + employee_advance_name - je.multi_currency = 1 if advance_account_currency != bank_cash_account.account_currency else 0 - - advance_account_amount = ( - flt(return_amount) - if advance_account_currency == currency - else flt(return_amount) * flt(exchange_rate) - ) - - je.append( - "accounts", - { - "account": advance_account, - "credit_in_account_currency": advance_account_amount, - "account_currency": advance_account_currency, - "exchange_rate": flt(exchange_rate) if advance_account_currency == currency else 1, - "reference_type": "Employee Advance", - "reference_name": employee_advance_name, - "party_type": "Employee", - "party": employee, - "is_advance": "Yes", - "cost_center": erpnext.get_default_cost_center(company), - }, - ) - - bank_amount = ( - flt(return_amount) - if bank_cash_account.account_currency == currency - else flt(return_amount) * flt(exchange_rate) - ) - - je.append( - "accounts", - { - "account": bank_cash_account.account, - "debit_in_account_currency": bank_amount, - "account_currency": bank_cash_account.account_currency, - "account_type": bank_cash_account.account_type, - "exchange_rate": flt(exchange_rate) if bank_cash_account.account_currency == currency else 1, - "cost_center": erpnext.get_default_cost_center(company), - }, - ) - - return je.as_dict() - - -def get_voucher_type(mode_of_payment=None): - voucher_type = "Cash Entry" - - if mode_of_payment: - mode_of_payment_type = frappe.get_cached_value("Mode of Payment", mode_of_payment, "type") - if mode_of_payment_type == "Bank": - voucher_type = "Bank Entry" - - return voucher_type diff --git a/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py b/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py deleted file mode 100644 index 73fac5131e..0000000000 --- a/erpnext/hr/doctype/employee_advance/employee_advance_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -def get_data(): - return { - "fieldname": "employee_advance", - "non_standard_fieldnames": { - "Payment Entry": "reference_name", - "Journal Entry": "reference_name", - }, - "transactions": [{"items": ["Expense Claim"]}, {"items": ["Payment Entry", "Journal Entry"]}], - } diff --git a/erpnext/hr/doctype/employee_advance/test_employee_advance.py b/erpnext/hr/doctype/employee_advance/test_employee_advance.py deleted file mode 100644 index 44d68c9483..0000000000 --- a/erpnext/hr/doctype/employee_advance/test_employee_advance.py +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import flt, nowdate - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.employee_advance.employee_advance import ( - EmployeeAdvanceOverPayment, - create_return_through_additional_salary, - make_bank_entry, - make_return_entry, -) -from erpnext.hr.doctype.expense_claim.expense_claim import get_advances -from erpnext.hr.doctype.expense_claim.test_expense_claim import ( - get_payable_account, - make_expense_claim, -) -from erpnext.payroll.doctype.salary_component.test_salary_component import create_salary_component -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - -class TestEmployeeAdvance(unittest.TestCase): - def setUp(self): - frappe.db.delete("Employee Advance") - - def test_paid_amount_and_status(self): - employee_name = make_employee("_T@employe.advance") - advance = make_employee_advance(employee_name) - - journal_entry = make_payment_entry(advance) - journal_entry.submit() - - advance.reload() - - self.assertEqual(advance.paid_amount, 1000) - self.assertEqual(advance.status, "Paid") - - # try making over payment - journal_entry1 = make_payment_entry(advance) - self.assertRaises(EmployeeAdvanceOverPayment, journal_entry1.submit) - - def test_paid_amount_on_pe_cancellation(self): - employee_name = make_employee("_T@employe.advance") - advance = make_employee_advance(employee_name) - - pe = make_payment_entry(advance) - pe.submit() - - advance.reload() - - self.assertEqual(advance.paid_amount, 1000) - self.assertEqual(advance.status, "Paid") - - pe.cancel() - advance.reload() - - self.assertEqual(advance.paid_amount, 0) - self.assertEqual(advance.status, "Unpaid") - - advance.cancel() - advance.reload() - self.assertEqual(advance.status, "Cancelled") - - def test_claimed_status(self): - # CLAIMED Status check, full amount claimed - payable_account = get_payable_account("_Test Company") - claim = make_expense_claim( - payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - - advance = make_employee_advance(claim.employee) - pe = make_payment_entry(advance) - pe.submit() - - claim = get_advances_for_claim(claim, advance.name) - claim.save() - claim.submit() - - advance.reload() - self.assertEqual(advance.claimed_amount, 1000) - self.assertEqual(advance.status, "Claimed") - - # advance should not be shown in claims - advances = get_advances(claim.employee) - advances = [entry.name for entry in advances] - self.assertTrue(advance.name not in advances) - - # cancel claim; status should be Paid - claim.cancel() - advance.reload() - self.assertEqual(advance.claimed_amount, 0) - self.assertEqual(advance.status, "Paid") - - def test_partly_claimed_and_returned_status(self): - payable_account = get_payable_account("_Test Company") - claim = make_expense_claim( - payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - - advance = make_employee_advance(claim.employee) - pe = make_payment_entry(advance) - pe.submit() - - # PARTLY CLAIMED AND RETURNED status check - # 500 Claimed, 500 Returned - claim = make_expense_claim( - payable_account, 500, 500, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - - advance = make_employee_advance(claim.employee) - pe = make_payment_entry(advance) - pe.submit() - - claim = get_advances_for_claim(claim, advance.name, amount=500) - claim.save() - claim.submit() - - advance.reload() - self.assertEqual(advance.claimed_amount, 500) - self.assertEqual(advance.status, "Paid") - - entry = make_return_entry( - employee=advance.employee, - company=advance.company, - employee_advance_name=advance.name, - return_amount=flt(advance.paid_amount - advance.claimed_amount), - advance_account=advance.advance_account, - mode_of_payment=advance.mode_of_payment, - currency=advance.currency, - exchange_rate=advance.exchange_rate, - ) - - entry = frappe.get_doc(entry) - entry.insert() - entry.submit() - - advance.reload() - self.assertEqual(advance.return_amount, 500) - self.assertEqual(advance.status, "Partly Claimed and Returned") - - # advance should not be shown in claims - advances = get_advances(claim.employee) - advances = [entry.name for entry in advances] - self.assertTrue(advance.name not in advances) - - # Cancel return entry; status should change to PAID - entry.cancel() - advance.reload() - self.assertEqual(advance.return_amount, 0) - self.assertEqual(advance.status, "Paid") - - # advance should be shown in claims - advances = get_advances(claim.employee) - advances = [entry.name for entry in advances] - self.assertTrue(advance.name in advances) - - def test_repay_unclaimed_amount_from_salary(self): - employee_name = make_employee("_T@employe.advance") - advance = make_employee_advance(employee_name, {"repay_unclaimed_amount_from_salary": 1}) - pe = make_payment_entry(advance) - pe.submit() - - args = {"type": "Deduction"} - create_salary_component("Advance Salary - Deduction", **args) - make_salary_structure( - "Test Additional Salary for Advance Return", "Monthly", employee=employee_name - ) - - # additional salary for 700 first - advance.reload() - additional_salary = create_return_through_additional_salary(advance) - additional_salary.salary_component = "Advance Salary - Deduction" - additional_salary.payroll_date = nowdate() - additional_salary.amount = 700 - additional_salary.insert() - additional_salary.submit() - - advance.reload() - self.assertEqual(advance.return_amount, 700) - - # additional salary for remaining 300 - additional_salary = create_return_through_additional_salary(advance) - additional_salary.salary_component = "Advance Salary - Deduction" - additional_salary.payroll_date = nowdate() - additional_salary.amount = 300 - additional_salary.insert() - additional_salary.submit() - - advance.reload() - self.assertEqual(advance.return_amount, 1000) - self.assertEqual(advance.status, "Returned") - - # update advance return amount on additional salary cancellation - additional_salary.cancel() - advance.reload() - self.assertEqual(advance.return_amount, 700) - self.assertEqual(advance.status, "Paid") - - def tearDown(self): - frappe.db.rollback() - - -def make_payment_entry(advance): - journal_entry = frappe.get_doc(make_bank_entry("Employee Advance", advance.name)) - journal_entry.cheque_no = "123123" - journal_entry.cheque_date = nowdate() - journal_entry.save() - - return journal_entry - - -def make_employee_advance(employee_name, args=None): - doc = frappe.new_doc("Employee Advance") - doc.employee = employee_name - doc.company = "_Test company" - doc.purpose = "For site visit" - doc.currency = erpnext.get_company_currency("_Test company") - doc.exchange_rate = 1 - doc.advance_amount = 1000 - doc.posting_date = nowdate() - doc.advance_account = "_Test Employee Advance - _TC" - - if args: - doc.update(args) - - doc.insert() - doc.submit() - - return doc - - -def get_advances_for_claim(claim, advance_name, amount=None): - advances = get_advances(claim.employee, advance_name) - - for entry in advances: - if amount: - allocated_amount = amount - else: - allocated_amount = flt(entry.paid_amount) - flt(entry.claimed_amount) - - claim.append( - "advances", - { - "employee_advance": entry.name, - "posting_date": entry.posting_date, - "advance_account": entry.advance_account, - "advance_paid": entry.paid_amount, - "unclaimed_amount": allocated_amount, - "allocated_amount": allocated_amount, - }, - ) - - return claim diff --git a/erpnext/hr/doctype/employee_attendance_tool/__init__.py b/erpnext/hr/doctype/employee_attendance_tool/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css deleted file mode 100644 index c8d6644b2f..0000000000 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.css +++ /dev/null @@ -1,21 +0,0 @@ -.top-toolbar{ - padding-bottom: 30px; - margin-left: -17px; -} - -.bottom-toolbar{ - margin-left: -17px; - margin-top: 20px; -} - -.btn{ - margin-right: 5px; -} - -.marked-employee-label{ - font-weight: normal; -} - -.checkbox{ - margin-top: -3px; -} diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js deleted file mode 100644 index 5ae8c6bd03..0000000000 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +++ /dev/null @@ -1,269 +0,0 @@ -frappe.ui.form.on("Employee Attendance Tool", { - refresh: function(frm) { - frm.disable_save(); - }, - - onload: function(frm) { - frm.set_value("date", frappe.datetime.get_today()); - erpnext.employee_attendance_tool.load_employees(frm); - }, - - date: function(frm) { - erpnext.employee_attendance_tool.load_employees(frm); - }, - - department: function(frm) { - erpnext.employee_attendance_tool.load_employees(frm); - }, - - branch: function(frm) { - erpnext.employee_attendance_tool.load_employees(frm); - }, - - company: function(frm) { - erpnext.employee_attendance_tool.load_employees(frm); - } - -}); - - -erpnext.employee_attendance_tool = { - load_employees: function(frm) { - if(frm.doc.date) { - frappe.call({ - method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.get_employees", - args: { - date: frm.doc.date, - department: frm.doc.department, - branch: frm.doc.branch, - company: frm.doc.company - }, - callback: function(r) { - if(r.message['unmarked'].length > 0) { - unhide_field('unmarked_attendance_section') - if(!frm.employee_area) { - frm.employee_area = $('
') - .appendTo(frm.fields_dict.employees_html.wrapper); - } - frm.EmployeeSelector = new erpnext.EmployeeSelector(frm, frm.employee_area, r.message['unmarked']) - } - else{ - hide_field('unmarked_attendance_section') - } - - if(r.message['marked'].length > 0) { - unhide_field('marked_attendance_section') - if(!frm.marked_employee_area) { - frm.marked_employee_area = $('
') - .appendTo(frm.fields_dict.marked_attendance_html.wrapper); - } - frm.marked_employee = new erpnext.MarkedEmployee(frm, frm.marked_employee_area, r.message['marked']) - } - else{ - hide_field('marked_attendance_section') - } - } - }); - } - } -} - -erpnext.MarkedEmployee = class MarkedEmployee { - constructor(frm, wrapper, employee) { - this.wrapper = wrapper; - this.frm = frm; - this.make(frm, employee); - } - make(frm, employee) { - var me = this; - $(this.wrapper).empty(); - - var row; - $.each(employee, function(i, m) { - var attendance_icon = "fa fa-check"; - var color_class = ""; - if(m.status == "Absent") { - attendance_icon = "fa fa-check-empty" - color_class = "text-muted"; - } - else if(m.status == "Half Day") { - attendance_icon = "fa fa-check-minus" - } - - if (i===0 || i % 4===0) { - row = $('
').appendTo(me.wrapper); - } - - $(repl('
\ - \ -
', { - employee: m.employee_name, - icon: attendance_icon, - color_class: color_class - })).appendTo(row); - }); - } -}; - - -erpnext.EmployeeSelector = class EmployeeSelector { - constructor(frm, wrapper, employee) { - this.wrapper = wrapper; - this.frm = frm; - this.make(frm, employee); - } - make(frm, employee) { - var me = this; - - $(this.wrapper).empty(); - var employee_toolbar = $('
\ - \ - \ -
').appendTo($(this.wrapper)); - - var mark_employee_toolbar = $('
\ - \ - \ - \ - \ -
'); - - employee_toolbar.find(".btn-add") - .html(__('Check all')) - .on("click", function() { - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if(!$(check).is(":checked")) { - check.checked = true; - } - }); - }); - - employee_toolbar.find(".btn-remove") - .html(__('Uncheck all')) - .on("click", function() { - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - check.checked = false; - } - }); - }); - - mark_employee_toolbar.find(".btn-mark-present") - .html(__('Mark Present')) - .on("click", function() { - var employee_present = []; - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - employee_present.push(employee[i]); - } - }); - frappe.call({ - method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", - args:{ - "employee_list":employee_present, - "status":"Present", - "date":frm.doc.date, - "company":frm.doc.company - }, - - callback: function(r) { - erpnext.employee_attendance_tool.load_employees(frm); - - } - }); - }); - - mark_employee_toolbar.find(".btn-mark-absent") - .html(__('Mark Absent')) - .on("click", function() { - var employee_absent = []; - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - employee_absent.push(employee[i]); - } - }); - frappe.call({ - method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", - args:{ - "employee_list":employee_absent, - "status":"Absent", - "date":frm.doc.date, - "company":frm.doc.company - }, - - callback: function(r) { - erpnext.employee_attendance_tool.load_employees(frm); - - } - }); - }); - - - mark_employee_toolbar.find(".btn-mark-half-day") - .html(__('Mark Half Day')) - .on("click", function() { - var employee_half_day = []; - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - employee_half_day.push(employee[i]); - } - }); - frappe.call({ - method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", - args:{ - "employee_list":employee_half_day, - "status":"Half Day", - "date":frm.doc.date, - "company":frm.doc.company - }, - - callback: function(r) { - erpnext.employee_attendance_tool.load_employees(frm); - - } - }); - }); - - - mark_employee_toolbar.find(".btn-mark-work-from-home") - .html(__('Mark Work From Home')) - .on("click", function() { - var employee_work_from_home = []; - $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { - if($(check).is(":checked")) { - employee_work_from_home.push(employee[i]); - } - }); - frappe.call({ - method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", - args:{ - "employee_list":employee_work_from_home, - "status":"Work From Home", - "date":frm.doc.date, - "company":frm.doc.company - }, - - callback: function(r) { - erpnext.employee_attendance_tool.load_employees(frm); - - } - }); - }); - - var row; - $.each(employee, function(i, m) { - if (i===0 || (i % 4) === 0) { - row = $('
').appendTo(me.wrapper); - } - - $(repl('
\ -
\ - \ -
', {employee: m.employee_name})).appendTo(row); - }); - - mark_employee_toolbar.appendTo($(this.wrapper)); - } -}; diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json deleted file mode 100644 index 256e056ec1..0000000000 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "allow_copy": 1, - "allow_import": 0, - "allow_rename": 0, - "creation": "2016-01-27 14:59:47.849379", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "default": "Today", - "fieldname": "date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "branch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Branch", - "length": 0, - "no_copy": 0, - "options": "Branch", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "depends_on": "date", - "fieldname": "unmarked_attendance_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Unmarked Attendance", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "employees_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Employees HTML", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "depends_on": "date", - "fieldname": "marked_attendance_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Marked Attendance", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "marked_attendance_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Marked Attendance HTML", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 1, - "hide_toolbar": 1, - "idx": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2016-01-29 02:14:36.034952", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Attendance Tool", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 1 - } - ], - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py deleted file mode 100644 index 43665cc8b2..0000000000 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json - -import frappe -from frappe.model.document import Document -from frappe.utils import getdate - - -class EmployeeAttendanceTool(Document): - pass - - -@frappe.whitelist() -def get_employees(date, department=None, branch=None, company=None): - attendance_not_marked = [] - attendance_marked = [] - filters = {"status": "Active", "date_of_joining": ["<=", date]} - - for field, value in {"department": department, "branch": branch, "company": company}.items(): - if value: - filters[field] = value - - employee_list = frappe.get_list( - "Employee", fields=["employee", "employee_name"], filters=filters, order_by="employee_name" - ) - marked_employee = {} - for emp in frappe.get_list( - "Attendance", fields=["employee", "status"], filters={"attendance_date": date} - ): - marked_employee[emp["employee"]] = emp["status"] - - for employee in employee_list: - employee["status"] = marked_employee.get(employee["employee"]) - if employee["employee"] not in marked_employee: - attendance_not_marked.append(employee) - else: - attendance_marked.append(employee) - return {"marked": attendance_marked, "unmarked": attendance_not_marked} - - -@frappe.whitelist() -def mark_employee_attendance(employee_list, status, date, leave_type=None, company=None): - - employee_list = json.loads(employee_list) - for employee in employee_list: - - if status == "On Leave" and leave_type: - leave_type = leave_type - else: - leave_type = None - - company = frappe.db.get_value("Employee", employee["employee"], "Company", cache=True) - - attendance = frappe.get_doc( - dict( - doctype="Attendance", - employee=employee.get("employee"), - employee_name=employee.get("employee_name"), - attendance_date=getdate(date), - status=status, - leave_type=leave_type, - company=company, - ) - ) - attendance.insert() - attendance.submit() diff --git a/erpnext/hr/doctype/employee_boarding_activity/__init__.py b/erpnext/hr/doctype/employee_boarding_activity/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json b/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json deleted file mode 100644 index 8474bd09d5..0000000000 --- a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "actions": [], - "creation": "2018-05-09 05:37:18.439763", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "activity_name", - "user", - "role", - "begin_on", - "duration", - "column_break_3", - "task", - "task_weight", - "required_for_employee_creation", - "section_break_6", - "description" - ], - "fields": [ - { - "columns": 3, - "fieldname": "activity_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Activity Name", - "reqd": 1 - }, - { - "columns": 2, - "depends_on": "eval:!doc.role", - "fieldname": "user", - "fieldtype": "Link", - "in_list_view": 1, - "label": "User", - "options": "User" - }, - { - "columns": 1, - "depends_on": "eval:!doc.user", - "fieldname": "role", - "fieldtype": "Link", - "label": "Role", - "options": "Role" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "task", - "fieldtype": "Link", - "label": "Task", - "no_copy": 1, - "options": "Task", - "read_only": 1 - }, - { - "fieldname": "task_weight", - "fieldtype": "Float", - "label": "Task Weight" - }, - { - "default": "0", - "depends_on": "eval:['Employee Onboarding', 'Employee Onboarding Template'].includes(doc.parenttype)", - "description": "Applicable in the case of Employee Onboarding", - "fieldname": "required_for_employee_creation", - "fieldtype": "Check", - "label": "Required for Employee Creation" - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break" - }, - { - "fieldname": "description", - "fieldtype": "Text Editor", - "label": "Description" - }, - { - "columns": 2, - "fieldname": "duration", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Duration (Days)" - }, - { - "columns": 2, - "fieldname": "begin_on", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Begin On (Days)" - } - ], - "istable": 1, - "links": [], - "modified": "2022-01-29 14:05:00.543122", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Boarding Activity", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py b/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py deleted file mode 100644 index e824081327..0000000000 --- a/erpnext/hr/doctype/employee_boarding_activity/employee_boarding_activity.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeBoardingActivity(Document): - pass diff --git a/erpnext/hr/doctype/employee_checkin/__init__.py b/erpnext/hr/doctype/employee_checkin/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.js b/erpnext/hr/doctype/employee_checkin/employee_checkin.js deleted file mode 100644 index c2403ca2bd..0000000000 --- a/erpnext/hr/doctype/employee_checkin/employee_checkin.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Checkin', { - setup: (frm) => { - if(!frm.doc.time) { - frm.set_value("time", frappe.datetime.now_datetime()); - } - } -}); diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.json b/erpnext/hr/doctype/employee_checkin/employee_checkin.json deleted file mode 100644 index d34316dc0f..0000000000 --- a/erpnext/hr/doctype/employee_checkin/employee_checkin.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "EMP-CKIN-.MM.-.YYYY.-.######", - "creation": "2019-06-10 11:56:34.536413", - "doctype": "DocType", - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "log_type", - "shift", - "column_break_4", - "time", - "device_id", - "skip_auto_attendance", - "attendance", - "shift_start", - "shift_end", - "shift_actual_start", - "shift_actual_end" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "log_type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Log Type", - "options": "\nIN\nOUT" - }, - { - "fieldname": "shift", - "fieldtype": "Link", - "label": "Shift", - "options": "Shift Type", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "default": "Now", - "fieldname": "time", - "fieldtype": "Datetime", - "in_list_view": 1, - "label": "Time", - "permlevel": 1, - "reqd": 1 - }, - { - "fieldname": "device_id", - "fieldtype": "Data", - "label": "Location / Device ID" - }, - { - "default": "0", - "fieldname": "skip_auto_attendance", - "fieldtype": "Check", - "label": "Skip Auto Attendance" - }, - { - "fieldname": "attendance", - "fieldtype": "Link", - "label": "Attendance Marked", - "options": "Attendance", - "read_only": 1 - }, - { - "fieldname": "shift_start", - "fieldtype": "Datetime", - "hidden": 1, - "label": "Shift Start" - }, - { - "fieldname": "shift_end", - "fieldtype": "Datetime", - "hidden": 1, - "label": "Shift End" - }, - { - "fieldname": "shift_actual_start", - "fieldtype": "Datetime", - "hidden": 1, - "label": "Shift Actual Start" - }, - { - "fieldname": "shift_actual_end", - "fieldtype": "Datetime", - "hidden": 1, - "label": "Shift Actual End" - } - ], - "links": [], - "modified": "2020-07-08 11:02:32.660986", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Checkin", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "read": 1, - "role": "Employee", - "write": 1 - }, - { - "delete": 1, - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "delete": 1, - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "delete": 1, - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "permlevel": 1, - "read": 1, - "role": "Employee" - } - ], - "sort_field": "modified", - "sort_order": "ASC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_checkin/employee_checkin.py b/erpnext/hr/doctype/employee_checkin/employee_checkin.py deleted file mode 100644 index e07b5e5db5..0000000000 --- a/erpnext/hr/doctype/employee_checkin/employee_checkin.py +++ /dev/null @@ -1,274 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cint, get_datetime, get_link_to_form - -from erpnext.hr.doctype.attendance.attendance import ( - get_duplicate_attendance_record, - get_overlapping_shift_attendance, -) -from erpnext.hr.doctype.shift_assignment.shift_assignment import ( - get_actual_start_end_datetime_of_shift, -) -from erpnext.hr.utils import validate_active_employee - - -class EmployeeCheckin(Document): - def validate(self): - validate_active_employee(self.employee) - self.validate_duplicate_log() - self.fetch_shift() - - def validate_duplicate_log(self): - doc = frappe.db.exists( - "Employee Checkin", {"employee": self.employee, "time": self.time, "name": ["!=", self.name]} - ) - if doc: - doc_link = frappe.get_desk_link("Employee Checkin", doc) - frappe.throw( - _("This employee already has a log with the same timestamp.{0}").format("
" + doc_link) - ) - - def fetch_shift(self): - shift_actual_timings = get_actual_start_end_datetime_of_shift( - self.employee, get_datetime(self.time), True - ) - if shift_actual_timings: - if ( - shift_actual_timings.shift_type.determine_check_in_and_check_out - == "Strictly based on Log Type in Employee Checkin" - and not self.log_type - and not self.skip_auto_attendance - ): - frappe.throw( - _("Log Type is required for check-ins falling in the shift: {0}.").format( - shift_actual_timings.shift_type.name - ) - ) - if not self.attendance: - self.shift = shift_actual_timings.shift_type.name - self.shift_actual_start = shift_actual_timings.actual_start - self.shift_actual_end = shift_actual_timings.actual_end - self.shift_start = shift_actual_timings.start_datetime - self.shift_end = shift_actual_timings.end_datetime - else: - self.shift = None - - -@frappe.whitelist() -def add_log_based_on_employee_field( - employee_field_value, - timestamp, - device_id=None, - log_type=None, - skip_auto_attendance=0, - employee_fieldname="attendance_device_id", -): - """Finds the relevant Employee using the employee field value and creates a Employee Checkin. - - :param employee_field_value: The value to look for in employee field. - :param timestamp: The timestamp of the Log. Currently expected in the following format as string: '2019-05-08 10:48:08.000000' - :param device_id: (optional)Location / Device ID. A short string is expected. - :param log_type: (optional)Direction of the Punch if available (IN/OUT). - :param skip_auto_attendance: (optional)Skip auto attendance field will be set for this log(0/1). - :param employee_fieldname: (Default: attendance_device_id)Name of the field in Employee DocType based on which employee lookup will happen. - """ - - if not employee_field_value or not timestamp: - frappe.throw(_("'employee_field_value' and 'timestamp' are required.")) - - employee = frappe.db.get_values( - "Employee", - {employee_fieldname: employee_field_value}, - ["name", "employee_name", employee_fieldname], - as_dict=True, - ) - if employee: - employee = employee[0] - else: - frappe.throw( - _("No Employee found for the given employee field value. '{}': {}").format( - employee_fieldname, employee_field_value - ) - ) - - doc = frappe.new_doc("Employee Checkin") - doc.employee = employee.name - doc.employee_name = employee.employee_name - doc.time = timestamp - doc.device_id = device_id - doc.log_type = log_type - if cint(skip_auto_attendance) == 1: - doc.skip_auto_attendance = "1" - doc.insert() - - return doc - - -def mark_attendance_and_link_log( - logs, - attendance_status, - attendance_date, - working_hours=None, - late_entry=False, - early_exit=False, - in_time=None, - out_time=None, - shift=None, -): - """Creates an attendance and links the attendance to the Employee Checkin. - Note: If attendance is already present for the given date, the logs are marked as skipped and no exception is thrown. - - :param logs: The List of 'Employee Checkin'. - :param attendance_status: Attendance status to be marked. One of: (Present, Absent, Half Day, Skip). Note: 'On Leave' is not supported by this function. - :param attendance_date: Date of the attendance to be created. - :param working_hours: (optional)Number of working hours for the given date. - """ - log_names = [x.name for x in logs] - employee = logs[0].employee - - if attendance_status == "Skip": - skip_attendance_in_checkins(log_names) - return None - - elif attendance_status in ("Present", "Absent", "Half Day"): - employee_doc = frappe.get_doc("Employee", employee) - duplicate = get_duplicate_attendance_record(employee, attendance_date, shift) - overlapping = get_overlapping_shift_attendance(employee, attendance_date, shift) - - if not duplicate and not overlapping: - doc_dict = { - "doctype": "Attendance", - "employee": employee, - "attendance_date": attendance_date, - "status": attendance_status, - "working_hours": working_hours, - "company": employee_doc.company, - "shift": shift, - "late_entry": late_entry, - "early_exit": early_exit, - "in_time": in_time, - "out_time": out_time, - } - attendance = frappe.get_doc(doc_dict).insert() - attendance.submit() - - if attendance_status == "Absent": - attendance.add_comment( - text=_("Employee was marked Absent for not meeting the working hours threshold.") - ) - - frappe.db.sql( - """update `tabEmployee Checkin` - set attendance = %s - where name in %s""", - (attendance.name, log_names), - ) - return attendance - else: - skip_attendance_in_checkins(log_names) - add_comment_in_checkins(log_names, duplicate, overlapping) - return None - - else: - frappe.throw(_("{} is an invalid Attendance Status.").format(attendance_status)) - - -def calculate_working_hours(logs, check_in_out_type, working_hours_calc_type): - """Given a set of logs in chronological order calculates the total working hours based on the parameters. - Zero is returned for all invalid cases. - - :param logs: The List of 'Employee Checkin'. - :param check_in_out_type: One of: 'Alternating entries as IN and OUT during the same shift', 'Strictly based on Log Type in Employee Checkin' - :param working_hours_calc_type: One of: 'First Check-in and Last Check-out', 'Every Valid Check-in and Check-out' - """ - total_hours = 0 - in_time = out_time = None - if check_in_out_type == "Alternating entries as IN and OUT during the same shift": - in_time = logs[0].time - if len(logs) >= 2: - out_time = logs[-1].time - if working_hours_calc_type == "First Check-in and Last Check-out": - # assumption in this case: First log always taken as IN, Last log always taken as OUT - total_hours = time_diff_in_hours(in_time, logs[-1].time) - elif working_hours_calc_type == "Every Valid Check-in and Check-out": - logs = logs[:] - while len(logs) >= 2: - total_hours += time_diff_in_hours(logs[0].time, logs[1].time) - del logs[:2] - - elif check_in_out_type == "Strictly based on Log Type in Employee Checkin": - if working_hours_calc_type == "First Check-in and Last Check-out": - first_in_log_index = find_index_in_dict(logs, "log_type", "IN") - first_in_log = ( - logs[first_in_log_index] if first_in_log_index or first_in_log_index == 0 else None - ) - last_out_log_index = find_index_in_dict(reversed(logs), "log_type", "OUT") - last_out_log = ( - logs[len(logs) - 1 - last_out_log_index] - if last_out_log_index or last_out_log_index == 0 - else None - ) - if first_in_log and last_out_log: - in_time, out_time = first_in_log.time, last_out_log.time - total_hours = time_diff_in_hours(in_time, out_time) - elif working_hours_calc_type == "Every Valid Check-in and Check-out": - in_log = out_log = None - for log in logs: - if in_log and out_log: - if not in_time: - in_time = in_log.time - out_time = out_log.time - total_hours += time_diff_in_hours(in_log.time, out_log.time) - in_log = out_log = None - if not in_log: - in_log = log if log.log_type == "IN" else None - elif not out_log: - out_log = log if log.log_type == "OUT" else None - if in_log and out_log: - out_time = out_log.time - total_hours += time_diff_in_hours(in_log.time, out_log.time) - return total_hours, in_time, out_time - - -def time_diff_in_hours(start, end): - return round(float((end - start).total_seconds()) / 3600, 2) - - -def find_index_in_dict(dict_list, key, value): - return next((index for (index, d) in enumerate(dict_list) if d[key] == value), None) - - -def add_comment_in_checkins(log_names, duplicate, overlapping): - if duplicate: - text = _("Auto Attendance skipped due to duplicate attendance record: {}").format( - get_link_to_form("Attendance", duplicate[0].name) - ) - else: - text = _("Auto Attendance skipped due to overlapping attendance record: {}").format( - get_link_to_form("Attendance", overlapping.name) - ) - - for name in log_names: - frappe.get_doc( - { - "doctype": "Comment", - "comment_type": "Comment", - "reference_doctype": "Employee Checkin", - "reference_name": name, - "content": text, - } - ).insert(ignore_permissions=True) - - -def skip_attendance_in_checkins(log_names): - EmployeeCheckin = frappe.qb.DocType("Employee Checkin") - ( - frappe.qb.update(EmployeeCheckin) - .set("skip_auto_attendance", 1) - .where(EmployeeCheckin.name.isin(log_names)) - ).run() diff --git a/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py b/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py deleted file mode 100644 index ced42bbc6e..0000000000 --- a/erpnext/hr/doctype/employee_checkin/test_employee_checkin.py +++ /dev/null @@ -1,330 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest -from datetime import datetime, timedelta - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import ( - add_days, - get_time, - get_year_ending, - get_year_start, - getdate, - now_datetime, - nowdate, -) - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.employee_checkin.employee_checkin import ( - add_log_based_on_employee_field, - calculate_working_hours, - mark_attendance_and_link_log, -) -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday -from erpnext.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type -from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - -class TestEmployeeCheckin(FrappeTestCase): - def setUp(self): - frappe.db.delete("Shift Type") - frappe.db.delete("Shift Assignment") - frappe.db.delete("Employee Checkin") - - from_date = get_year_start(getdate()) - to_date = get_year_ending(getdate()) - self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - - def test_add_log_based_on_employee_field(self): - employee = make_employee("test_add_log_based_on_employee_field@example.com") - employee = frappe.get_doc("Employee", employee) - employee.attendance_device_id = "3344" - employee.save() - - time_now = now_datetime().__str__()[:-7] - employee_checkin = add_log_based_on_employee_field("3344", time_now, "mumbai_first_floor", "IN") - self.assertEqual(employee_checkin.employee, employee.name) - self.assertEqual(employee_checkin.time, time_now) - self.assertEqual(employee_checkin.device_id, "mumbai_first_floor") - self.assertEqual(employee_checkin.log_type, "IN") - - def test_mark_attendance_and_link_log(self): - employee = make_employee("test_mark_attendance_and_link_log@example.com") - logs = make_n_checkins(employee, 3) - mark_attendance_and_link_log(logs, "Skip", nowdate()) - log_names = [log.name for log in logs] - logs_count = frappe.db.count( - "Employee Checkin", {"name": ["in", log_names], "skip_auto_attendance": 1} - ) - self.assertEqual(logs_count, 3) - - logs = make_n_checkins(employee, 4, 2) - now_date = nowdate() - frappe.db.delete("Attendance", {"employee": employee}) - attendance = mark_attendance_and_link_log(logs, "Present", now_date, 8.2) - log_names = [log.name for log in logs] - logs_count = frappe.db.count( - "Employee Checkin", {"name": ["in", log_names], "attendance": attendance.name} - ) - self.assertEqual(logs_count, 4) - attendance_count = frappe.db.count( - "Attendance", - {"status": "Present", "working_hours": 8.2, "employee": employee, "attendance_date": now_date}, - ) - self.assertEqual(attendance_count, 1) - - def test_calculate_working_hours(self): - check_in_out_type = [ - "Alternating entries as IN and OUT during the same shift", - "Strictly based on Log Type in Employee Checkin", - ] - working_hours_calc_type = [ - "First Check-in and Last Check-out", - "Every Valid Check-in and Check-out", - ] - logs_type_1 = [ - {"time": now_datetime() - timedelta(minutes=390)}, - {"time": now_datetime() - timedelta(minutes=300)}, - {"time": now_datetime() - timedelta(minutes=270)}, - {"time": now_datetime() - timedelta(minutes=90)}, - {"time": now_datetime() - timedelta(minutes=0)}, - ] - logs_type_2 = [ - {"time": now_datetime() - timedelta(minutes=390), "log_type": "OUT"}, - {"time": now_datetime() - timedelta(minutes=360), "log_type": "IN"}, - {"time": now_datetime() - timedelta(minutes=300), "log_type": "OUT"}, - {"time": now_datetime() - timedelta(minutes=290), "log_type": "IN"}, - {"time": now_datetime() - timedelta(minutes=260), "log_type": "OUT"}, - {"time": now_datetime() - timedelta(minutes=240), "log_type": "IN"}, - {"time": now_datetime() - timedelta(minutes=150), "log_type": "IN"}, - {"time": now_datetime() - timedelta(minutes=60), "log_type": "OUT"}, - ] - logs_type_1 = [frappe._dict(x) for x in logs_type_1] - logs_type_2 = [frappe._dict(x) for x in logs_type_2] - - working_hours = calculate_working_hours( - logs_type_1, check_in_out_type[0], working_hours_calc_type[0] - ) - self.assertEqual(working_hours, (6.5, logs_type_1[0].time, logs_type_1[-1].time)) - - working_hours = calculate_working_hours( - logs_type_1, check_in_out_type[0], working_hours_calc_type[1] - ) - self.assertEqual(working_hours, (4.5, logs_type_1[0].time, logs_type_1[-1].time)) - - working_hours = calculate_working_hours( - logs_type_2, check_in_out_type[1], working_hours_calc_type[0] - ) - self.assertEqual(working_hours, (5, logs_type_2[1].time, logs_type_2[-1].time)) - - working_hours = calculate_working_hours( - logs_type_2, check_in_out_type[1], working_hours_calc_type[1] - ) - self.assertEqual(working_hours, (4.5, logs_type_2[1].time, logs_type_2[-1].time)) - - def test_fetch_shift(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - # shift setup for 8-12 - shift_type = setup_shift_type() - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - # within shift time - timestamp = datetime.combine(date, get_time("08:45:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift_type.name) - - # "begin checkin before shift time" = 60 mins, so should work for 7:00:00 - timestamp = datetime.combine(date, get_time("07:00:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift_type.name) - - # "allow checkout after shift end time" = 60 mins, so should work for 13:00:00 - timestamp = datetime.combine(date, get_time("13:00:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift_type.name) - - # should not fetch this shift beyond allowed time - timestamp = datetime.combine(date, get_time("13:01:00")) - log = make_checkin(employee, timestamp) - self.assertIsNone(log.shift) - - def test_fetch_shift_for_assignment_with_end_date(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - # shift setup for 8-12 - shift1 = setup_shift_type() - # 12:30 - 16:30 - shift2 = setup_shift_type(shift_type="Shift 2", start_time="12:30:00", end_time="16:30:00") - - date = getdate() - make_shift_assignment(shift1.name, employee, date, add_days(date, 15)) - make_shift_assignment(shift2.name, employee, date, add_days(date, 15)) - - timestamp = datetime.combine(date, get_time("08:45:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift1.name) - - timestamp = datetime.combine(date, get_time("12:45:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift2.name) - - # log after end date - timestamp = datetime.combine(add_days(date, 16), get_time("12:45:00")) - log = make_checkin(employee, timestamp) - self.assertIsNone(log.shift) - - def test_shift_start_and_end_timings(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - # shift setup for 8-12 - shift_type = setup_shift_type() - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:45:00")) - log = make_checkin(employee, timestamp) - - self.assertEqual(log.shift, shift_type.name) - self.assertEqual(log.shift_start, datetime.combine(date, get_time("08:00:00"))) - self.assertEqual(log.shift_end, datetime.combine(date, get_time("12:00:00"))) - self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("07:00:00"))) - self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("13:00:00"))) - - def test_fetch_shift_based_on_default_shift(self): - employee = make_employee("test_default_shift@example.com", company="_Test Company") - default_shift = setup_shift_type( - shift_type="Default Shift", start_time="14:00:00", end_time="16:00:00" - ) - - date = getdate() - frappe.db.set_value("Employee", employee, "default_shift", default_shift.name) - - timestamp = datetime.combine(date, get_time("14:45:00")) - log = make_checkin(employee, timestamp) - - # should consider default shift - self.assertEqual(log.shift, default_shift.name) - - def test_fetch_shift_spanning_over_two_days(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type( - shift_type="Midnight Shift", start_time="23:00:00", end_time="01:00:00" - ) - date = getdate() - next_day = add_days(date, 1) - make_shift_assignment(shift_type.name, employee, date) - - # log falls in the first day - timestamp = datetime.combine(date, get_time("23:00:00")) - log = make_checkin(employee, timestamp) - - self.assertEqual(log.shift, shift_type.name) - self.assertEqual(log.shift_start, datetime.combine(date, get_time("23:00:00"))) - self.assertEqual(log.shift_end, datetime.combine(next_day, get_time("01:00:00"))) - self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("22:00:00"))) - self.assertEqual(log.shift_actual_end, datetime.combine(next_day, get_time("02:00:00"))) - - log.delete() - - # log falls in the second day - prev_day = add_days(date, -1) - timestamp = datetime.combine(date, get_time("01:30:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift_type.name) - self.assertEqual(log.shift_start, datetime.combine(prev_day, get_time("23:00:00"))) - self.assertEqual(log.shift_end, datetime.combine(date, get_time("01:00:00"))) - self.assertEqual(log.shift_actual_start, datetime.combine(prev_day, get_time("22:00:00"))) - self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("02:00:00"))) - - def test_no_shift_fetched_on_holiday_as_per_shift_holiday_list(self): - date = getdate() - from_date = get_year_start(date) - to_date = get_year_ending(date) - holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - - employee = make_employee("test_shift_with_holiday@example.com", company="_Test Company") - setup_shift_type(shift_type="Test Holiday Shift", holiday_list=holiday_list) - - first_sunday = get_first_sunday(holiday_list, for_date=date) - timestamp = datetime.combine(first_sunday, get_time("08:00:00")) - log = make_checkin(employee, timestamp) - - self.assertIsNone(log.shift) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_no_shift_fetched_on_holiday_as_per_employee_holiday_list(self): - employee = make_employee("test_shift_with_holiday@example.com", company="_Test Company") - shift_type = setup_shift_type(shift_type="Test Holiday Shift") - shift_type.holiday_list = None - shift_type.save() - - date = getdate() - - first_sunday = get_first_sunday(self.holiday_list, for_date=date) - timestamp = datetime.combine(first_sunday, get_time("08:00:00")) - log = make_checkin(employee, timestamp) - - self.assertIsNone(log.shift) - - def test_consecutive_shift_assignments_overlapping_within_grace_period(self): - # test adjustment for start and end times if they are overlapping - # within "begin_check_in_before_shift_start_time" and "allow_check_out_after_shift_end_time" periods - employee = make_employee("test_shift@example.com", company="_Test Company") - - # 8 - 12 - shift1 = setup_shift_type() - # 12:30 - 16:30 - shift2 = setup_shift_type( - shift_type="Consecutive Shift", start_time="12:30:00", end_time="16:30:00" - ) - - # the actual start and end times (with grace) for these shifts are 7 - 13 and 11:30 - 17:30 - date = getdate() - make_shift_assignment(shift1.name, employee, date) - make_shift_assignment(shift2.name, employee, date) - - # log at 12:30 should set shift2 and actual start as 12 and not 11:30 - timestamp = datetime.combine(date, get_time("12:30:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift2.name) - self.assertEqual(log.shift_start, datetime.combine(date, get_time("12:30:00"))) - self.assertEqual(log.shift_actual_start, datetime.combine(date, get_time("12:00:00"))) - - # log at 12:00 should set shift1 and actual end as 12 and not 1 since the next shift's grace starts - timestamp = datetime.combine(date, get_time("12:00:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift1.name) - self.assertEqual(log.shift_end, datetime.combine(date, get_time("12:00:00"))) - self.assertEqual(log.shift_actual_end, datetime.combine(date, get_time("12:00:00"))) - - # log at 12:01 should set shift2 - timestamp = datetime.combine(date, get_time("12:01:00")) - log = make_checkin(employee, timestamp) - self.assertEqual(log.shift, shift2.name) - - -def make_n_checkins(employee, n, hours_to_reverse=1): - logs = [make_checkin(employee, now_datetime() - timedelta(hours=hours_to_reverse, minutes=n + 1))] - for i in range(n - 1): - logs.append( - make_checkin(employee, now_datetime() - timedelta(hours=hours_to_reverse, minutes=n - i)) - ) - return logs - - -def make_checkin(employee, time=now_datetime()): - log = frappe.get_doc( - { - "doctype": "Employee Checkin", - "employee": employee, - "time": time, - "device_id": "device1", - "log_type": "IN", - } - ).insert() - return log diff --git a/erpnext/hr/doctype/employee_education/__init__.py b/erpnext/hr/doctype/employee_education/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_education/employee_education.json b/erpnext/hr/doctype/employee_education/employee_education.json deleted file mode 100644 index ef216e3703..0000000000 --- a/erpnext/hr/doctype/employee_education/employee_education.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:45", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "school_univ", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "School/University", - "length": 0, - "no_copy": 0, - "oldfieldname": "school_univ", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "qualification", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Qualification", - "length": 0, - "no_copy": 0, - "oldfieldname": "qualification", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "100px", - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "100px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "level", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Level", - "length": 0, - "no_copy": 0, - "oldfieldname": "level", - "oldfieldtype": "Select", - "options": "Graduate\nPost Graduate\nUnder Graduate", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "year_of_passing", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Year of Passing", - "length": 0, - "no_copy": 0, - "oldfieldname": "year_of_passing", - "oldfieldtype": "Int", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "class_per", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Class / Percentage", - "length": 0, - "no_copy": 0, - "oldfieldname": "class_per", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "maj_opt_subj", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Major/Optional Subjects", - "length": 0, - "no_copy": 0, - "oldfieldname": "maj_opt_subj", - "oldfieldtype": "Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:27:59.995464", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Education", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_external_work_history/__init__.py b/erpnext/hr/doctype/employee_external_work_history/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json b/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json deleted file mode 100644 index f357b20227..0000000000 --- a/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:45", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "company_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Company", - "length": 0, - "no_copy": 0, - "oldfieldname": "company_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "designation", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Designation", - "length": 0, - "no_copy": 0, - "oldfieldname": "designation", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "salary", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Salary", - "length": 0, - "no_copy": 0, - "oldfieldname": "salary", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "address", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Address", - "length": 0, - "no_copy": 0, - "oldfieldname": "address", - "oldfieldtype": "Small Text", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "contact", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Contact", - "length": 0, - "no_copy": 0, - "oldfieldname": "contact", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "total_experience", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Total Experience", - "length": 0, - "no_copy": 0, - "oldfieldname": "total_experience", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:28:00.088980", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee External Work History", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_grade/__init__.py b/erpnext/hr/doctype/employee_grade/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.js b/erpnext/hr/doctype/employee_grade/employee_grade.js deleted file mode 100644 index 6c67f54160..0000000000 --- a/erpnext/hr/doctype/employee_grade/employee_grade.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Grade', { - refresh: function (frm) { - - }, - setup: function (frm) { - frm.set_query("default_salary_structure", function () { - return { - "filters": { - "docstatus": 1, - "is_active": "Yes" - } - }; - }); - - frm.set_query("default_leave_policy", function () { - return { - "filters": { - "docstatus": 1 - } - }; - }); - - - } - -}); diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.json b/erpnext/hr/doctype/employee_grade/employee_grade.json deleted file mode 100644 index 4967137840..0000000000 --- a/erpnext/hr/doctype/employee_grade/employee_grade.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "Prompt", - "creation": "2018-04-13 16:14:24.174138", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "default_salary_structure", - "currency", - "default_base_pay" - ], - "fields": [ - { - "fieldname": "default_salary_structure", - "fieldtype": "Link", - "label": "Default Salary Structure", - "options": "Salary Structure" - }, - { - "depends_on": "default_salary_structure", - "fieldname": "default_base_pay", - "fieldtype": "Currency", - "label": "Default Base Pay", - "options": "currency" - }, - { - "fetch_from": "default_salary_structure.currency", - "fieldname": "currency", - "fieldtype": "Link", - "hidden": 1, - "label": "Currency", - "options": "Currency", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "links": [], - "modified": "2022-05-06 15:42:10.395508", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Grade", - "naming_rule": "Set by user", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_grade/employee_grade.py b/erpnext/hr/doctype/employee_grade/employee_grade.py deleted file mode 100644 index 41b7915c95..0000000000 --- a/erpnext/hr/doctype/employee_grade/employee_grade.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeGrade(Document): - pass diff --git a/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py b/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py deleted file mode 100644 index efc68ce87a..0000000000 --- a/erpnext/hr/doctype/employee_grade/employee_grade_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -def get_data(): - return { - "transactions": [ - { - "items": ["Employee", "Leave Period"], - }, - {"items": ["Employee Onboarding Template", "Employee Separation Template"]}, - ] - } diff --git a/erpnext/hr/doctype/employee_grade/test_employee_grade.py b/erpnext/hr/doctype/employee_grade/test_employee_grade.py deleted file mode 100644 index a70d685348..0000000000 --- a/erpnext/hr/doctype/employee_grade/test_employee_grade.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeGrade(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/employee_grievance/__init__.py b/erpnext/hr/doctype/employee_grievance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.js b/erpnext/hr/doctype/employee_grievance/employee_grievance.js deleted file mode 100644 index 25c5badbc7..0000000000 --- a/erpnext/hr/doctype/employee_grievance/employee_grievance.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Grievance', { - setup: function(frm) { - frm.set_query('grievance_against_party', function() { - return { - filters: { - name: ['in', [ - 'Company', 'Department', 'Employee Group', 'Employee Grade', 'Employee'] - ] - } - }; - }); - frm.set_query('associated_document_type', function() { - let ignore_modules = ["Setup", "Core", "Integrations", "Automation", "Website", - "Utilities", "Event Streaming", "Social", "Chat", "Data Migration", "Printing", "Desk", "Custom"]; - return { - filters: { - istable: 0, - issingle: 0, - module: ["Not In", ignore_modules] - } - }; - }); - }, - - grievance_against_party: function(frm) { - let filters = {}; - if (frm.doc.grievance_against_party == 'Employee' && frm.doc.raised_by) { - filters.name = ["!=", frm.doc.raised_by]; - } - frm.set_query('grievance_against', function() { - return { - filters: filters - }; - }); - }, -}); diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.json b/erpnext/hr/doctype/employee_grievance/employee_grievance.json deleted file mode 100644 index 5a918562af..0000000000 --- a/erpnext/hr/doctype/employee_grievance/employee_grievance.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "actions": [], - "autoname": "HR-GRIEV-.YYYY.-.#####", - "creation": "2021-05-11 13:41:51.485295", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "subject", - "raised_by", - "employee_name", - "designation", - "column_break_3", - "date", - "status", - "reports_to", - "grievance_details_section", - "grievance_against_party", - "grievance_against", - "grievance_type", - "column_break_11", - "associated_document_type", - "associated_document", - "section_break_14", - "description", - "investigation_details_section", - "cause_of_grievance", - "resolution_details_section", - "resolved_by", - "resolution_date", - "employee_responsible", - "column_break_16", - "resolution_detail", - "amended_from" - ], - "fields": [ - { - "fieldname": "grievance_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Grievance Type", - "options": "Grievance Type", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Date ", - "reqd": 1 - }, - { - "default": "Open", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "options": "Open\nInvestigated\nResolved\nInvalid", - "reqd": 1 - }, - { - "fieldname": "description", - "fieldtype": "Text", - "label": "Description", - "reqd": 1 - }, - { - "fieldname": "cause_of_grievance", - "fieldtype": "Text", - "label": "Cause of Grievance", - "mandatory_depends_on": "eval: doc.status == \"Investigated\" || doc.status == \"Resolved\"" - }, - { - "fieldname": "resolution_details_section", - "fieldtype": "Section Break", - "label": "Resolution Details" - }, - { - "fieldname": "resolved_by", - "fieldtype": "Link", - "label": "Resolved By", - "mandatory_depends_on": "eval: doc.status == \"Resolved\"", - "options": "User" - }, - { - "fieldname": "employee_responsible", - "fieldtype": "Link", - "label": "Employee Responsible ", - "options": "Employee" - }, - { - "fieldname": "resolution_detail", - "fieldtype": "Small Text", - "label": "Resolution Details", - "mandatory_depends_on": "eval: doc.status == \"Resolved\"" - }, - { - "fieldname": "column_break_16", - "fieldtype": "Column Break" - }, - { - "fieldname": "resolution_date", - "fieldtype": "Date", - "label": "Resolution Date", - "mandatory_depends_on": "eval: doc.status == \"Resolved\"" - }, - { - "fieldname": "grievance_against", - "fieldtype": "Dynamic Link", - "label": "Grievance Against", - "options": "grievance_against_party", - "reqd": 1 - }, - { - "fieldname": "raised_by", - "fieldtype": "Link", - "label": "Raised By", - "options": "Employee", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Grievance", - "print_hide": 1, - "read_only": 1 - }, - { - "fetch_from": "raised_by.designation", - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fetch_from": "raised_by.reports_to", - "fieldname": "reports_to", - "fieldtype": "Link", - "label": "Reports To", - "options": "Employee", - "read_only": 1 - }, - { - "fieldname": "grievance_details_section", - "fieldtype": "Section Break", - "label": "Grievance Details" - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "fieldname": "section_break_14", - "fieldtype": "Section Break" - }, - { - "fieldname": "grievance_against_party", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Grievance Against Party", - "options": "DocType", - "reqd": 1 - }, - { - "fieldname": "associated_document_type", - "fieldtype": "Link", - "label": "Associated Document Type", - "options": "DocType" - }, - { - "fieldname": "associated_document", - "fieldtype": "Dynamic Link", - "label": "Associated Document", - "options": "associated_document_type" - }, - { - "fieldname": "investigation_details_section", - "fieldtype": "Section Break", - "label": "Investigation Details" - }, - { - "fetch_from": "raised_by.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "subject", - "fieldtype": "Data", - "label": "Subject", - "reqd": 1 - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-06-21 12:51:01.499486", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Grievance", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "select": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "search_fields": "subject,raised_by,grievance_against_party", - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "subject", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance.py b/erpnext/hr/doctype/employee_grievance/employee_grievance.py deleted file mode 100644 index 45de79f4f5..0000000000 --- a/erpnext/hr/doctype/employee_grievance/employee_grievance.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _, bold -from frappe.model.document import Document - - -class EmployeeGrievance(Document): - def on_submit(self): - if self.status not in ["Invalid", "Resolved"]: - frappe.throw( - _("Only Employee Grievance with status {0} or {1} can be submitted").format( - bold("Invalid"), bold("Resolved") - ) - ) diff --git a/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js b/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js deleted file mode 100644 index 11672ca4e0..0000000000 --- a/erpnext/hr/doctype/employee_grievance/employee_grievance_list.js +++ /dev/null @@ -1,12 +0,0 @@ -frappe.listview_settings["Employee Grievance"] = { - has_indicator_for_draft: 1, - get_indicator: function(doc) { - var colors = { - "Open": "red", - "Investigated": "orange", - "Resolved": "green", - "Invalid": "grey" - }; - return [__(doc.status), colors[doc.status], "status,=," + doc.status]; - } -}; diff --git a/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py b/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py deleted file mode 100644 index 910d882860..0000000000 --- a/erpnext/hr/doctype/employee_grievance/test_employee_grievance.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import today - -from erpnext.hr.doctype.employee.test_employee import make_employee - - -class TestEmployeeGrievance(unittest.TestCase): - def test_create_employee_grievance(self): - create_employee_grievance() - - -def create_employee_grievance(): - grievance_type = create_grievance_type() - emp_1 = make_employee("test_emp_grievance_@example.com", company="_Test Company") - emp_2 = make_employee("testculprit@example.com", company="_Test Company") - - grievance = frappe.new_doc("Employee Grievance") - grievance.subject = "Test Employee Grievance" - grievance.raised_by = emp_1 - grievance.date = today() - grievance.grievance_type = grievance_type - grievance.grievance_against_party = "Employee" - grievance.grievance_against = emp_2 - grievance.description = "test descrip" - - # set cause - grievance.cause_of_grievance = "test cause" - - # resolution details - grievance.resolution_date = today() - grievance.resolution_detail = "test resolution detail" - grievance.resolved_by = "test_emp_grievance_@example.com" - grievance.employee_responsible = emp_2 - grievance.status = "Resolved" - - grievance.save() - grievance.submit() - - return grievance - - -def create_grievance_type(): - if frappe.db.exists("Grievance Type", "Employee Abuse"): - return frappe.get_doc("Grievance Type", "Employee Abuse") - grievance_type = frappe.new_doc("Grievance Type") - grievance_type.name = "Employee Abuse" - grievance_type.description = "Test" - grievance_type.save() - - return grievance_type.name diff --git a/erpnext/hr/doctype/employee_group/__init__.py b/erpnext/hr/doctype/employee_group/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_group_table/__init__.py b/erpnext/hr/doctype/employee_group_table/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_health_insurance/__init__.py b/erpnext/hr/doctype/employee_health_insurance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js deleted file mode 100644 index 69d46e20d0..0000000000 --- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Health Insurance', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json deleted file mode 100644 index e63da3974c..0000000000 --- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 1, - "autoname": "field:health_insurance_name", - "beta": 0, - "creation": "2017-03-27 14:32:51.628588", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "health_insurance_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Health Insurance Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-04-15 14:56:46.924890", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Health Insurance", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "health_insurance_name", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py b/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py deleted file mode 100644 index 4a8c437d64..0000000000 --- a/erpnext/hr/doctype/employee_health_insurance/employee_health_insurance.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeHealthInsurance(Document): - pass diff --git a/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py b/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py deleted file mode 100644 index 4f042b7079..0000000000 --- a/erpnext/hr/doctype/employee_health_insurance/test_employee_health_insurance.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeHealthInsurance(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/employee_internal_work_history/__init__.py b/erpnext/hr/doctype/employee_internal_work_history/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json b/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json deleted file mode 100644 index 98632b6b25..0000000000 --- a/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:45", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "branch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Branch", - "length": 0, - "no_copy": 0, - "oldfieldname": "branch", - "oldfieldtype": "Select", - "options": "Branch", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Department", - "length": 0, - "no_copy": 0, - "oldfieldname": "department", - "oldfieldtype": "Select", - "options": "Department", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "designation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Designation", - "length": 0, - "no_copy": 0, - "oldfieldname": "designation", - "oldfieldtype": "Select", - "options": "Designation", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "from_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "From Date", - "length": 0, - "no_copy": 0, - "oldfieldname": "from_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "to_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "To Date", - "length": 0, - "no_copy": 0, - "oldfieldname": "to_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:28:00.195130", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Internal Work History", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.js b/erpnext/hr/doctype/employee_loan/employee_loan.js deleted file mode 100644 index c948be1b0f..0000000000 --- a/erpnext/hr/doctype/employee_loan/employee_loan.js +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Loan', { - onload: function (frm) { - frm.set_query("employee_loan_application", function () { - return { - "filters": { - "employee": frm.doc.employee, - "docstatus": 1, - "status": "Approved" - } - }; - }); - - frm.set_query("interest_income_account", function () { - return { - "filters": { - "company": frm.doc.company, - "root_type": "Income", - "is_group": 0 - } - }; - }); - - frm.set_query("employee", function() { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - - $.each(["payment_account", "employee_loan_account"], function (i, field) { - frm.set_query(field, function () { - return { - "filters": { - "company": frm.doc.company, - "root_type": "Asset", - "is_group": 0 - } - }; - }); - }) - }, - - refresh: function (frm) { - if (frm.doc.docstatus == 1 && (frm.doc.status == "Sanctioned" || frm.doc.status == "Partially Disbursed")) { - frm.add_custom_button(__('Create Disbursement Entry'), function () { - frm.trigger("make_jv"); - }) - } - frm.trigger("toggle_fields"); - }, - - make_jv: function (frm) { - frappe.call({ - args: { - "employee_loan": frm.doc.name, - "company": frm.doc.company, - "employee_loan_account": frm.doc.employee_loan_account, - "employee": frm.doc.employee, - "loan_amount": frm.doc.loan_amount, - "payment_account": frm.doc.payment_account - }, - method: "erpnext.hr.doctype.employee_loan.employee_loan.make_jv_entry", - callback: function (r) { - if (r.message) - var doc = frappe.model.sync(r.message)[0]; - frappe.set_route("Form", doc.doctype, doc.name); - } - }) - }, - - mode_of_payment: function (frm) { - if (frm.doc.mode_of_payment && frm.doc.company) { - frappe.call({ - method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", - args: { - "mode_of_payment": frm.doc.mode_of_payment, - "company": frm.doc.company - }, - callback: function (r, rt) { - if (r.message) { - frm.set_value("payment_account", r.message.account); - } - } - }); - } - }, - - employee_loan_application: function (frm) { - if(frm.doc.employee_loan_application){ - return frappe.call({ - method: "erpnext.hr.doctype.employee_loan.employee_loan.get_employee_loan_application", - args: { - "employee_loan_application": frm.doc.employee_loan_application - }, - callback: function (r) { - if (!r.exc && r.message) { - frm.set_value("loan_type", r.message.loan_type); - frm.set_value("loan_amount", r.message.loan_amount); - frm.set_value("repayment_method", r.message.repayment_method); - frm.set_value("monthly_repayment_amount", r.message.repayment_amount); - frm.set_value("repayment_periods", r.message.repayment_periods); - frm.set_value("rate_of_interest", r.message.rate_of_interest); - } - } - }); - } - }, - - repayment_method: function (frm) { - frm.trigger("toggle_fields") - }, - - toggle_fields: function (frm) { - frm.toggle_enable("monthly_repayment_amount", frm.doc.repayment_method == "Repay Fixed Amount per Period") - frm.toggle_enable("repayment_periods", frm.doc.repayment_method == "Repay Over Number of Periods") - } -}); diff --git a/erpnext/hr/doctype/employee_onboarding/__init__.py b/erpnext/hr/doctype/employee_onboarding/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js deleted file mode 100644 index 6fbb54d002..0000000000 --- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Onboarding', { - setup: function(frm) { - frm.set_query("job_applicant", function () { - return { - filters:{ - "status": "Accepted", - } - }; - }); - - frm.set_query('job_offer', function () { - return { - filters: { - 'job_applicant': frm.doc.job_applicant, - 'docstatus': 1 - } - }; - }); - }, - - refresh: function(frm) { - if (frm.doc.employee) { - frm.add_custom_button(__('Employee'), function() { - frappe.set_route("Form", "Employee", frm.doc.employee); - },__("View")); - } - if (frm.doc.project) { - frm.add_custom_button(__('Project'), function() { - frappe.set_route("Form", "Project", frm.doc.project); - },__("View")); - frm.add_custom_button(__('Task'), function() { - frappe.set_route('List', 'Task', {project: frm.doc.project}); - },__("View")); - } - if ((!frm.doc.employee) && (frm.doc.docstatus === 1)) { - frm.add_custom_button(__('Employee'), function () { - frappe.model.open_mapped_doc({ - method: "erpnext.hr.doctype.employee_onboarding.employee_onboarding.make_employee", - frm: frm - }); - }, __('Create')); - frm.page.set_inner_btn_group_as_primary(__('Create')); - } - }, - - employee_onboarding_template: function(frm) { - frm.set_value("activities" ,""); - if (frm.doc.employee_onboarding_template) { - frappe.call({ - method: "erpnext.controllers.employee_boarding_controller.get_onboarding_details", - args: { - "parent": frm.doc.employee_onboarding_template, - "parenttype": "Employee Onboarding Template" - }, - callback: function(r) { - if (r.message) { - r.message.forEach((d) => { - frm.add_child("activities", d); - }); - refresh_field("activities"); - } - } - }); - } - }, - - job_applicant: function(frm) { - if (frm.doc.job_applicant) { - frappe.db.get_value('Employee', {'job_applicant': frm.doc.job_applicant}, 'name', (r) => { - if (r.name) { - frm.set_value('employee', r.name); - } else { - frm.set_value('employee', ''); - } - }); - } else { - frm.set_value('employee', ''); - } - } -}); diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json deleted file mode 100644 index 1d2ea0c669..0000000000 --- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "actions": [], - "autoname": "HR-EMP-ONB-.YYYY.-.#####", - "creation": "2018-05-09 04:57:20.016220", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "job_applicant", - "job_offer", - "employee_onboarding_template", - "column_break_7", - "company", - "boarding_status", - "project", - "details_section", - "employee", - "employee_name", - "department", - "designation", - "employee_grade", - "holiday_list", - "column_break_13", - "date_of_joining", - "boarding_begins_on", - "table_for_activity", - "activities", - "notify_users_by_email", - "amended_from" - ], - "fields": [ - { - "fieldname": "job_applicant", - "fieldtype": "Link", - "label": "Job Applicant", - "options": "Job Applicant", - "reqd": 1 - }, - { - "fieldname": "job_offer", - "fieldtype": "Link", - "label": "Job Offer", - "options": "Job Offer", - "reqd": 1 - }, - { - "fetch_from": "job_applicant.applicant_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Employee Name", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee", - "options": "Employee", - "read_only": 1 - }, - { - "fieldname": "date_of_joining", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Date of Joining", - "reqd": 1 - }, - { - "allow_on_submit": 1, - "default": "Pending", - "fieldname": "boarding_status", - "fieldtype": "Select", - "label": "Status", - "options": "Pending\nIn Process\nCompleted", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "default": "0", - "fieldname": "notify_users_by_email", - "fieldtype": "Check", - "label": "Notify users by email" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "fieldname": "employee_onboarding_template", - "fieldtype": "Link", - "label": "Employee Onboarding Template", - "options": "Employee Onboarding Template" - }, - { - "fetch_from": "employee_onboarding_template.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fetch_from": "employee_onboarding_template.department", - "fieldname": "department", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Department", - "options": "Department" - }, - { - "fetch_from": "employee_onboarding_template.designation", - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Designation", - "options": "Designation" - }, - { - "fetch_from": "employee_onboarding_template.employee_grade", - "fieldname": "employee_grade", - "fieldtype": "Link", - "label": "Employee Grade", - "options": "Employee Grade" - }, - { - "fieldname": "project", - "fieldtype": "Link", - "label": "Project", - "options": "Project", - "read_only": 1 - }, - { - "fieldname": "table_for_activity", - "fieldtype": "Section Break", - "label": "Onboarding Activities" - }, - { - "allow_on_submit": 1, - "fieldname": "activities", - "fieldtype": "Table", - "label": "Activities", - "options": "Employee Boarding Activity" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Onboarding", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "details_section", - "fieldtype": "Section Break", - "label": "Employee Details" - }, - { - "fieldname": "column_break_13", - "fieldtype": "Column Break" - }, - { - "fieldname": "boarding_begins_on", - "fieldtype": "Date", - "label": "Onboarding Begins On", - "reqd": 1 - }, - { - "fieldname": "holiday_list", - "fieldtype": "Link", - "label": "Holiday List", - "options": "Holiday List" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-29 12:33:57.120384", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Onboarding", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py deleted file mode 100644 index 059f83a5a2..0000000000 --- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py +++ /dev/null @@ -1,86 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.mapper import get_mapped_doc - -from erpnext.controllers.employee_boarding_controller import EmployeeBoardingController - - -class IncompleteTaskError(frappe.ValidationError): - pass - - -class EmployeeOnboarding(EmployeeBoardingController): - def validate(self): - super(EmployeeOnboarding, self).validate() - self.set_employee() - self.validate_duplicate_employee_onboarding() - - def set_employee(self): - if not self.employee: - self.employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") - - def validate_duplicate_employee_onboarding(self): - emp_onboarding = frappe.db.exists( - "Employee Onboarding", {"job_applicant": self.job_applicant, "docstatus": ("!=", 2)} - ) - if emp_onboarding and emp_onboarding != self.name: - frappe.throw( - _("Employee Onboarding: {0} already exists for Job Applicant: {1}").format( - frappe.bold(emp_onboarding), frappe.bold(self.job_applicant) - ) - ) - - def validate_employee_creation(self): - if self.docstatus != 1: - frappe.throw(_("Submit this to create the Employee record")) - else: - for activity in self.activities: - if not activity.required_for_employee_creation: - continue - else: - task_status = frappe.db.get_value("Task", activity.task, "status") - if task_status not in ["Completed", "Cancelled"]: - frappe.throw( - _("All the mandatory tasks for employee creation are not completed yet."), - IncompleteTaskError, - ) - - def on_submit(self): - super(EmployeeOnboarding, self).on_submit() - - def on_update_after_submit(self): - self.create_task_and_notify_user() - - def on_cancel(self): - super(EmployeeOnboarding, self).on_cancel() - - -@frappe.whitelist() -def make_employee(source_name, target_doc=None): - doc = frappe.get_doc("Employee Onboarding", source_name) - doc.validate_employee_creation() - - def set_missing_values(source, target): - target.personal_email = frappe.db.get_value("Job Applicant", source.job_applicant, "email_id") - target.status = "Active" - - doc = get_mapped_doc( - "Employee Onboarding", - source_name, - { - "Employee Onboarding": { - "doctype": "Employee", - "field_map": { - "first_name": "employee_name", - "employee_grade": "grade", - }, - } - }, - target_doc, - set_missing_values, - ) - return doc diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js b/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js deleted file mode 100644 index a33619bed4..0000000000 --- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding_list.js +++ /dev/null @@ -1,7 +0,0 @@ -frappe.listview_settings['Employee Onboarding'] = { - add_fields: ["boarding_status", "employee_name", "date_of_joining", "department"], - filters:[["boarding_status","=", "Pending"]], - get_indicator: function(doc) { - return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; - } -}; diff --git a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py deleted file mode 100644 index 9d91e4bd62..0000000000 --- a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, getdate - -from erpnext.hr.doctype.employee_onboarding.employee_onboarding import ( - IncompleteTaskError, - make_employee, -) -from erpnext.hr.doctype.job_offer.test_job_offer import create_job_offer -from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - -class TestEmployeeOnboarding(unittest.TestCase): - def setUp(self): - if frappe.db.exists("Employee Onboarding", {"employee_name": "Test Researcher"}): - frappe.delete_doc("Employee Onboarding", {"employee_name": "Test Researcher"}) - - project = "Employee Onboarding : test@researcher.com" - frappe.db.sql("delete from tabProject where name=%s", project) - frappe.db.sql("delete from tabTask where project=%s", project) - - def test_employee_onboarding_incomplete_task(self): - onboarding = create_employee_onboarding() - - project_name = frappe.db.get_value("Project", onboarding.project, "project_name") - self.assertEqual(project_name, "Employee Onboarding : test@researcher.com") - - # don't allow making employee if onboarding is not complete - self.assertRaises(IncompleteTaskError, make_employee, onboarding.name) - - # boarding status - self.assertEqual(onboarding.boarding_status, "Pending") - - # start and end dates - start_date, end_date = frappe.db.get_value( - "Task", onboarding.activities[0].task, ["exp_start_date", "exp_end_date"] - ) - self.assertEqual(getdate(start_date), getdate(onboarding.boarding_begins_on)) - self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[0].duration)) - - start_date, end_date = frappe.db.get_value( - "Task", onboarding.activities[1].task, ["exp_start_date", "exp_end_date"] - ) - self.assertEqual( - getdate(start_date), add_days(onboarding.boarding_begins_on, onboarding.activities[0].duration) - ) - self.assertEqual(getdate(end_date), add_days(start_date, onboarding.activities[1].duration)) - - # complete the task - project = frappe.get_doc("Project", onboarding.project) - for task in frappe.get_all("Task", dict(project=project.name)): - task = frappe.get_doc("Task", task.name) - task.status = "Completed" - task.save() - - # boarding status - onboarding.reload() - self.assertEqual(onboarding.boarding_status, "Completed") - - # make employee - onboarding.reload() - employee = make_employee(onboarding.name) - employee.first_name = employee.employee_name - employee.date_of_joining = getdate() - employee.date_of_birth = "1990-05-08" - employee.gender = "Female" - employee.insert() - self.assertEqual(employee.employee_name, "Test Researcher") - - def tearDown(self): - frappe.db.rollback() - - -def get_job_applicant(): - if frappe.db.exists("Job Applicant", "test@researcher.com"): - return frappe.get_doc("Job Applicant", "test@researcher.com") - applicant = frappe.new_doc("Job Applicant") - applicant.applicant_name = "Test Researcher" - applicant.email_id = "test@researcher.com" - applicant.designation = "Researcher" - applicant.status = "Open" - applicant.cover_letter = "I am a great Researcher." - applicant.insert() - return applicant - - -def get_job_offer(applicant_name): - job_offer = frappe.db.exists("Job Offer", {"job_applicant": applicant_name}) - if job_offer: - return frappe.get_doc("Job Offer", job_offer) - - job_offer = create_job_offer(job_applicant=applicant_name) - job_offer.submit() - return job_offer - - -def create_employee_onboarding(): - applicant = get_job_applicant() - job_offer = get_job_offer(applicant.name) - - holiday_list = make_holiday_list("_Test Employee Boarding") - holiday_list = frappe.get_doc("Holiday List", holiday_list) - holiday_list.holidays = [] - holiday_list.save() - - onboarding = frappe.new_doc("Employee Onboarding") - onboarding.job_applicant = applicant.name - onboarding.job_offer = job_offer.name - onboarding.date_of_joining = onboarding.boarding_begins_on = getdate() - onboarding.company = "_Test Company" - onboarding.holiday_list = holiday_list.name - onboarding.designation = "Researcher" - onboarding.append( - "activities", - { - "activity_name": "Assign ID Card", - "role": "HR User", - "required_for_employee_creation": 1, - "begin_on": 0, - "duration": 1, - }, - ) - onboarding.append( - "activities", - {"activity_name": "Assign a laptop", "role": "HR User", "begin_on": 1, "duration": 1}, - ) - onboarding.status = "Pending" - onboarding.insert() - onboarding.submit() - - return onboarding diff --git a/erpnext/hr/doctype/employee_onboarding_template/__init__.py b/erpnext/hr/doctype/employee_onboarding_template/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js deleted file mode 100644 index 5e1b6e9946..0000000000 --- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Onboarding Template', { - setup: function(frm) { - frm.set_query("department", function() { - return { - filters: { - company: frm.doc.company - } - }; - }); - } -}); diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json deleted file mode 100644 index 04de08e161..0000000000 --- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "HR-EMP-ONT-.#####", - "beta": 0, - "creation": "2018-05-09 05:27:02.393377", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_7", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "designation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Designation", - "length": 0, - "no_copy": 0, - "options": "Designation", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee_grade", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee Grade", - "length": 0, - "no_copy": 0, - "options": "Employee Grade", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_7", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Activities", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "activities", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Activities", - "length": 0, - "no_copy": 0, - "options": "Employee Boarding Activity", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-21 16:15:55.720946", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Onboarding Template", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "designation", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py deleted file mode 100644 index 199013a5a1..0000000000 --- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeOnboardingTemplate(Document): - pass diff --git a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py b/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py deleted file mode 100644 index 93237ee379..0000000000 --- a/erpnext/hr/doctype/employee_onboarding_template/employee_onboarding_template_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "employee_onboarding_template", - "transactions": [ - {"items": ["Employee Onboarding"]}, - ], - } diff --git a/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py b/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py deleted file mode 100644 index db09011c87..0000000000 --- a/erpnext/hr/doctype/employee_onboarding_template/test_employee_onboarding_template.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeOnboardingTemplate(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/employee_promotion/__init__.py b/erpnext/hr/doctype/employee_promotion/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.js b/erpnext/hr/doctype/employee_promotion/employee_promotion.js deleted file mode 100644 index 54e06f4581..0000000000 --- a/erpnext/hr/doctype/employee_promotion/employee_promotion.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -{% include 'erpnext/hr/employee_property_update.js' %} - -frappe.ui.form.on('Employee Promotion', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.json b/erpnext/hr/doctype/employee_promotion/employee_promotion.json deleted file mode 100644 index 173573e203..0000000000 --- a/erpnext/hr/doctype/employee_promotion/employee_promotion.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "actions": [], - "autoname": "HR-EMP-PRO-.YYYY.-.#####", - "creation": "2018-04-13 18:33:59.476562", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "salary_currency", - "column_break_3", - "promotion_date", - "company", - "details_section", - "promotion_details", - "salary_details_section", - "current_ctc", - "column_break_12", - "revised_ctc", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "promotion_date", - "fieldtype": "Date", - "label": "Promotion Date", - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "description": "Set the properties that should be updated in the Employee master on promotion submission", - "fieldname": "details_section", - "fieldtype": "Section Break", - "label": "Employee Promotion Details" - }, - { - "fieldname": "promotion_details", - "fieldtype": "Table", - "options": "Employee Property History", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Promotion", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "salary_details_section", - "fieldtype": "Section Break", - "label": "Salary Details" - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.salary_currency", - "fieldname": "salary_currency", - "fieldtype": "Link", - "label": "Salary Currency", - "options": "Currency", - "read_only": 1 - }, - { - "fetch_from": "employee.ctc", - "fetch_if_empty": 1, - "fieldname": "current_ctc", - "fieldtype": "Currency", - "label": "Current CTC", - "mandatory_depends_on": "revised_ctc", - "options": "salary_currency" - }, - { - "depends_on": "current_ctc", - "fieldname": "revised_ctc", - "fieldtype": "Currency", - "label": "Revised CTC", - "options": "salary_currency" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-04-22 18:47:10.168744", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Promotion", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_promotion/employee_promotion.py b/erpnext/hr/doctype/employee_promotion/employee_promotion.py deleted file mode 100644 index 8c802e9991..0000000000 --- a/erpnext/hr/doctype/employee_promotion/employee_promotion.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate - -from erpnext.hr.utils import update_employee_work_history, validate_active_employee - - -class EmployeePromotion(Document): - def validate(self): - validate_active_employee(self.employee) - - def before_submit(self): - if getdate(self.promotion_date) > getdate(): - frappe.throw( - _("Employee Promotion cannot be submitted before Promotion Date"), - frappe.DocstatusTransitionError, - ) - - def on_submit(self): - employee = frappe.get_doc("Employee", self.employee) - employee = update_employee_work_history( - employee, self.promotion_details, date=self.promotion_date - ) - - if self.revised_ctc: - employee.ctc = self.revised_ctc - - employee.save() - - def on_cancel(self): - employee = frappe.get_doc("Employee", self.employee) - employee = update_employee_work_history(employee, self.promotion_details, cancel=True) - - if self.revised_ctc: - employee.ctc = self.current_ctc - - employee.save() diff --git a/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py b/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py deleted file mode 100644 index 71bb1a62c1..0000000000 --- a/erpnext/hr/doctype/employee_promotion/test_employee_promotion.py +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate - -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee - - -class TestEmployeePromotion(FrappeTestCase): - def setUp(self): - frappe.db.delete("Employee Promotion") - - def test_submit_before_promotion_date(self): - employee = make_employee("employee@promotions.com") - promotion = frappe.get_doc( - { - "doctype": "Employee Promotion", - "employee": employee, - "promotion_details": [ - { - "property": "Designation", - "current": "Software Developer", - "new": "Project Manager", - "fieldname": "designation", - } - ], - } - ) - promotion.promotion_date = add_days(getdate(), 1) - self.assertRaises(frappe.DocstatusTransitionError, promotion.submit) - - promotion.promotion_date = getdate() - promotion.submit() - self.assertEqual(promotion.docstatus, 1) - - def test_employee_history(self): - for grade in ["L1", "L2"]: - frappe.get_doc({"doctype": "Employee Grade", "__newname": grade}).insert() - - employee = make_employee( - "test_employee_promotion@example.com", - company="_Test Company", - date_of_birth=getdate("30-09-1980"), - date_of_joining=getdate("01-10-2021"), - designation="Software Developer", - grade="L1", - salary_currency="INR", - ctc="500000", - ) - - promotion = frappe.get_doc( - { - "doctype": "Employee Promotion", - "employee": employee, - "promotion_date": getdate(), - "revised_ctc": "1000000", - "promotion_details": [ - { - "property": "Designation", - "current": "Software Developer", - "new": "Project Manager", - "fieldname": "designation", - }, - {"property": "Grade", "current": "L1", "new": "L2", "fieldname": "grade"}, - ], - } - ).submit() - - # employee fields updated - employee = frappe.get_doc("Employee", employee) - self.assertEqual(employee.grade, "L2") - self.assertEqual(employee.designation, "Project Manager") - self.assertEqual(employee.ctc, 1000000) - - # internal work history updated - self.assertEqual(employee.internal_work_history[0].designation, "Software Developer") - self.assertEqual(employee.internal_work_history[0].from_date, getdate("01-10-2021")) - - self.assertEqual(employee.internal_work_history[1].designation, "Project Manager") - self.assertEqual(employee.internal_work_history[1].from_date, getdate()) - - promotion.cancel() - employee.reload() - - # fields restored - self.assertEqual(employee.grade, "L1") - self.assertEqual(employee.designation, "Software Developer") - self.assertEqual(employee.ctc, 500000) - - # internal work history updated on cancellation - self.assertEqual(len(employee.internal_work_history), 1) - self.assertEqual(employee.internal_work_history[0].designation, "Software Developer") - self.assertEqual(employee.internal_work_history[0].from_date, getdate("01-10-2021")) diff --git a/erpnext/hr/doctype/employee_property_history/__init__.py b/erpnext/hr/doctype/employee_property_history/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_property_history/employee_property_history.json b/erpnext/hr/doctype/employee_property_history/employee_property_history.json deleted file mode 100644 index 0a51579549..0000000000 --- a/erpnext/hr/doctype/employee_property_history/employee_property_history.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2018-04-13 18:24:30.579965", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 4, - "fieldname": "property", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Property", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 3, - "fieldname": "current", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Current", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 3, - "fieldname": "new", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "New", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fieldname", - "fieldtype": "Data", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Field Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-05-02 18:19:54.436391", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Property History", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_property_history/employee_property_history.py b/erpnext/hr/doctype/employee_property_history/employee_property_history.py deleted file mode 100644 index 345899e43c..0000000000 --- a/erpnext/hr/doctype/employee_property_history/employee_property_history.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeePropertyHistory(Document): - pass diff --git a/erpnext/hr/doctype/employee_referral/__init__.py b/erpnext/hr/doctype/employee_referral/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.js b/erpnext/hr/doctype/employee_referral/employee_referral.js deleted file mode 100644 index 8722019fb1..0000000000 --- a/erpnext/hr/doctype/employee_referral/employee_referral.js +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on("Employee Referral", { - refresh: function(frm) { - if (frm.doc.docstatus === 1 && frm.doc.status === "Pending") { - frm.add_custom_button(__("Reject Employee Referral"), function() { - frappe.confirm( - __("Are you sure you want to reject the Employee Referral?"), - function() { - frm.doc.status = "Rejected"; - frm.dirty(); - frm.save_or_update(); - }, - function() { - window.close(); - } - ); - }); - - frm.add_custom_button(__("Create Job Applicant"), function() { - frm.events.create_job_applicant(frm); - }).addClass("btn-primary"); - } - - // To check whether Payment is done or not - if (frm.doc.docstatus === 1 && frm.doc.status === "Accepted") { - frappe.db.get_list("Additional Salary", { - filters: { - ref_docname: cur_frm.doc.name, - docstatus: 1 - }, - fields: ["count(name) as additional_salary_count"] - }).then((data) => { - - let additional_salary_count = data[0].additional_salary_count; - - if (frm.doc.is_applicable_for_referral_bonus && !additional_salary_count) { - frm.add_custom_button(__("Create Additional Salary"), function() { - frm.events.create_additional_salary(frm); - }).addClass("btn-primary"); - } - }); - } - - }, - create_job_applicant: function(frm) { - frappe.model.open_mapped_doc({ - method: "erpnext.hr.doctype.employee_referral.employee_referral.create_job_applicant", - frm: frm - }); - }, - - create_additional_salary: function(frm) { - frappe.call({ - method: "erpnext.hr.doctype.employee_referral.employee_referral.create_additional_salary", - args: { - doc: frm.doc - }, - callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, -}); diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.json b/erpnext/hr/doctype/employee_referral/employee_referral.json deleted file mode 100644 index 3ae73a9e4d..0000000000 --- a/erpnext/hr/doctype/employee_referral/employee_referral.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "actions": [], - "autoname": "format:HR-REF-{####}", - "creation": "2021-03-23 14:54:45.047051", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "first_name", - "last_name", - "full_name", - "column_break_6", - "date", - "status", - "for_designation", - "referral_details_section", - "email", - "contact_no", - "resume_link", - "column_break_12", - "current_employer", - "current_job_title", - "resume", - "referrer_details_section", - "referrer", - "referrer_name", - "column_break_14", - "is_applicable_for_referral_bonus", - "referral_payment_status", - "department", - "additional_information_section", - "qualification_reason", - "work_references", - "amended_from" - ], - "fields": [ - { - "fieldname": "first_name", - "fieldtype": "Data", - "label": "First Name ", - "reqd": 1 - }, - { - "fieldname": "last_name", - "fieldtype": "Data", - "label": "Last Name", - "reqd": 1 - }, - { - "fieldname": "full_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Full Name", - "read_only": 1 - }, - { - "fieldname": "contact_no", - "fieldtype": "Data", - "in_standard_filter": 1, - "label": "Contact No.", - "options": "Phone" - }, - { - "fieldname": "current_employer", - "fieldtype": "Data", - "label": "Current Employer " - }, - { - "fieldname": "column_break_6", - "fieldtype": "Column Break" - }, - { - "fieldname": "date", - "fieldtype": "Date", - "in_standard_filter": 1, - "label": "Date", - "reqd": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Status", - "no_copy": 1, - "options": "Pending\nIn Process\nAccepted\nRejected", - "permlevel": 1, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "current_job_title", - "fieldtype": "Data", - "label": "Current Job Title" - }, - { - "fieldname": "resume", - "fieldtype": "Attach", - "label": "Resume" - }, - { - "fieldname": "referrer_details_section", - "fieldtype": "Section Break", - "label": "Referrer Details" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "additional_information_section", - "fieldtype": "Section Break", - "label": "Additional Information " - }, - { - "fieldname": "work_references", - "fieldtype": "Text Editor", - "label": "Work References" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Referral", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_14", - "fieldtype": "Column Break" - }, - { - "fieldname": "for_designation", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "For Designation ", - "options": "Designation", - "reqd": 1 - }, - { - "fieldname": "email", - "fieldtype": "Data", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Email", - "options": "Email", - "reqd": 1, - "unique": 1 - }, - { - "default": "1", - "fieldname": "is_applicable_for_referral_bonus", - "fieldtype": "Check", - "label": "Is Applicable for Referral Bonus" - }, - { - "fieldname": "qualification_reason", - "fieldtype": "Text Editor", - "label": "Why is this Candidate Qualified for this Position?" - }, - { - "fieldname": "referrer", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Referrer", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "referrer.employee_name", - "fieldname": "referrer_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Referrer Name", - "read_only": 1 - }, - { - "fieldname": "resume_link", - "fieldtype": "Data", - "label": "Resume Link" - }, - { - "fieldname": "referral_payment_status", - "fieldtype": "Select", - "label": "Referral Bonus Payment Status", - "options": "\nUnpaid\nPaid", - "read_only": 1 - }, - { - "fieldname": "referral_details_section", - "fieldtype": "Section Break", - "label": "Referral Details" - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-05-04 17:03:26.134560", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Referral", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "delete": 1, - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "delete": 1, - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "email": 1, - "export": 1, - "permlevel": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "full_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_referral/employee_referral.py b/erpnext/hr/doctype/employee_referral/employee_referral.py deleted file mode 100644 index 47cbfbcd9d..0000000000 --- a/erpnext/hr/doctype/employee_referral/employee_referral.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import get_link_to_form - -from erpnext.hr.utils import validate_active_employee - - -class EmployeeReferral(Document): - def validate(self): - validate_active_employee(self.referrer) - self.set_full_name() - self.set_referral_bonus_payment_status() - - def set_full_name(self): - self.full_name = " ".join(filter(None, [self.first_name, self.last_name])) - - def set_referral_bonus_payment_status(self): - if not self.is_applicable_for_referral_bonus: - self.referral_payment_status = "" - else: - if not self.referral_payment_status: - self.referral_payment_status = "Unpaid" - - -@frappe.whitelist() -def create_job_applicant(source_name, target_doc=None): - emp_ref = frappe.get_doc("Employee Referral", source_name) - # just for Api call if some set status apart from default Status - status = emp_ref.status - if emp_ref.status in ["Pending", "In process"]: - status = "Open" - - job_applicant = frappe.new_doc("Job Applicant") - job_applicant.source = "Employee Referral" - job_applicant.employee_referral = emp_ref.name - job_applicant.status = status - job_applicant.designation = emp_ref.for_designation - job_applicant.applicant_name = emp_ref.full_name - job_applicant.email_id = emp_ref.email - job_applicant.phone_number = emp_ref.contact_no - job_applicant.resume_attachment = emp_ref.resume - job_applicant.resume_link = emp_ref.resume_link - job_applicant.save() - - frappe.msgprint( - _("Job Applicant {0} created successfully.").format( - get_link_to_form("Job Applicant", job_applicant.name) - ), - title=_("Success"), - indicator="green", - ) - - emp_ref.db_set("status", "In Process") - - return job_applicant - - -@frappe.whitelist() -def create_additional_salary(doc): - import json - - if isinstance(doc, str): - doc = frappe._dict(json.loads(doc)) - - if not frappe.db.exists("Additional Salary", {"ref_docname": doc.name}): - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.employee = doc.referrer - additional_salary.company = frappe.db.get_value("Employee", doc.referrer, "company") - additional_salary.overwrite_salary_structure_amount = 0 - additional_salary.ref_doctype = doc.doctype - additional_salary.ref_docname = doc.name - - return additional_salary diff --git a/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py b/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py deleted file mode 100644 index 4d683fbfcf..0000000000 --- a/erpnext/hr/doctype/employee_referral/employee_referral_dashboard.py +++ /dev/null @@ -1,8 +0,0 @@ -def get_data(): - return { - "fieldname": "employee_referral", - "non_standard_fieldnames": {"Additional Salary": "ref_docname"}, - "transactions": [ - {"items": ["Job Applicant", "Additional Salary"]}, - ], - } diff --git a/erpnext/hr/doctype/employee_referral/employee_referral_list.js b/erpnext/hr/doctype/employee_referral/employee_referral_list.js deleted file mode 100644 index 38dfc4d4c8..0000000000 --- a/erpnext/hr/doctype/employee_referral/employee_referral_list.js +++ /dev/null @@ -1,14 +0,0 @@ -frappe.listview_settings['Employee Referral'] = { - add_fields: ["status"], - get_indicator: function (doc) { - if (doc.status == "Pending") { - return [__(doc.status), "grey", "status,=," + doc.status]; - } else if (doc.status == "In Process") { - return [__(doc.status), "orange", "status,=," + doc.status]; - } else if (doc.status == "Accepted") { - return [__(doc.status), "green", "status,=," + doc.status]; - } else if (doc.status == "Rejected") { - return [__(doc.status), "red", "status,=," + doc.status]; - } - }, -}; diff --git a/erpnext/hr/doctype/employee_referral/test_employee_referral.py b/erpnext/hr/doctype/employee_referral/test_employee_referral.py deleted file mode 100644 index 475a935e86..0000000000 --- a/erpnext/hr/doctype/employee_referral/test_employee_referral.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import today - -from erpnext.hr.doctype.designation.test_designation import create_designation -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.employee_referral.employee_referral import ( - create_additional_salary, - create_job_applicant, -) - - -class TestEmployeeReferral(unittest.TestCase): - def setUp(self): - frappe.db.sql("DELETE FROM `tabJob Applicant`") - frappe.db.sql("DELETE FROM `tabEmployee Referral`") - - def test_workflow_and_status_sync(self): - emp_ref = create_employee_referral() - - # Check Initial status - self.assertTrue(emp_ref.status, "Pending") - - job_applicant = create_job_applicant(emp_ref.name) - - # Check status sync - emp_ref.reload() - self.assertTrue(emp_ref.status, "In Process") - - job_applicant.reload() - job_applicant.status = "Rejected" - job_applicant.save() - - emp_ref.reload() - self.assertTrue(emp_ref.status, "Rejected") - - job_applicant.reload() - job_applicant.status = "Accepted" - job_applicant.save() - - emp_ref.reload() - self.assertTrue(emp_ref.status, "Accepted") - - # Check for Referral reference in additional salary - - add_sal = create_additional_salary(emp_ref) - self.assertTrue(add_sal.ref_docname, emp_ref.name) - - def tearDown(self): - frappe.db.sql("DELETE FROM `tabJob Applicant`") - frappe.db.sql("DELETE FROM `tabEmployee Referral`") - - -def create_employee_referral(): - emp_ref = frappe.new_doc("Employee Referral") - emp_ref.first_name = "Mahesh" - emp_ref.last_name = "Singh" - emp_ref.email = "a@b.c" - emp_ref.date = today() - emp_ref.for_designation = create_designation().name - emp_ref.referrer = make_employee("testassetmovemp@example.com", company="_Test Company") - emp_ref.is_applicable_for_employee_referral_compensation = 1 - emp_ref.save() - emp_ref.submit() - - return emp_ref diff --git a/erpnext/hr/doctype/employee_separation/__init__.py b/erpnext/hr/doctype/employee_separation/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.js b/erpnext/hr/doctype/employee_separation/employee_separation.js deleted file mode 100644 index d9011b2001..0000000000 --- a/erpnext/hr/doctype/employee_separation/employee_separation.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Separation', { - setup: function(frm) { - frm.add_fetch("employee_separation_template", "company", "company"); - frm.add_fetch("employee_separation_template", "department", "department"); - frm.add_fetch("employee_separation_template", "designation", "designation"); - frm.add_fetch("employee_separation_template", "employee_grade", "employee_grade"); - }, - - refresh: function(frm) { - if (frm.doc.employee) { - frm.add_custom_button(__('Employee'), function() { - frappe.set_route("Form", "Employee", frm.doc.employee); - },__("View")); - } - if (frm.doc.project) { - frm.add_custom_button(__('Project'), function() { - frappe.set_route("Form", "Project", frm.doc.project); - },__("View")); - frm.add_custom_button(__('Task'), function() { - frappe.set_route('List', 'Task', {project: frm.doc.project}); - },__("View")); - } - }, - - employee_separation_template: function(frm) { - frm.set_value("activities" ,""); - if (frm.doc.employee_separation_template) { - frappe.call({ - method: "erpnext.controllers.employee_boarding_controller.get_onboarding_details", - args: { - "parent": frm.doc.employee_separation_template, - "parenttype": "Employee Separation Template" - }, - callback: function(r) { - if (r.message) { - $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Employee Boarding Activity", "activities"); - $.extend(row, d); - }); - } - refresh_field("activities"); - } - }); - } - } -}); diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.json b/erpnext/hr/doctype/employee_separation/employee_separation.json deleted file mode 100644 index c240493e82..0000000000 --- a/erpnext/hr/doctype/employee_separation/employee_separation.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "actions": [], - "autoname": "HR-EMP-SEP-.YYYY.-.#####", - "creation": "2018-05-10 02:29:16.740490", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "designation", - "employee_grade", - "column_break_7", - "company", - "boarding_status", - "resignation_letter_date", - "boarding_begins_on", - "project", - "table_for_activity", - "employee_separation_template", - "activities", - "notify_users_by_email", - "section_break_14", - "exit_interview", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.resignation_letter_date", - "fieldname": "resignation_letter_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Resignation Letter Date", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "default": "Pending", - "fieldname": "boarding_status", - "fieldtype": "Select", - "label": "Status", - "options": "Pending\nIn Process\nCompleted", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "default": "0", - "fieldname": "notify_users_by_email", - "fieldtype": "Check", - "label": "Notify users by email" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "fieldname": "employee_separation_template", - "fieldtype": "Link", - "label": "Employee Separation Template", - "options": "Employee Separation Template" - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "project", - "fieldtype": "Link", - "label": "Project", - "options": "Project", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fetch_from": "employee.grade", - "fieldname": "employee_grade", - "fieldtype": "Link", - "label": "Employee Grade", - "options": "Employee Grade", - "read_only": 1 - }, - { - "fieldname": "table_for_activity", - "fieldtype": "Section Break", - "label": "Separation Activities" - }, - { - "allow_on_submit": 1, - "fieldname": "activities", - "fieldtype": "Table", - "label": "Activities", - "options": "Employee Boarding Activity" - }, - { - "fieldname": "section_break_14", - "fieldtype": "Section Break" - }, - { - "fieldname": "exit_interview", - "fieldtype": "Text Editor", - "label": "Exit Interview Summary" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Separation", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "boarding_begins_on", - "fieldtype": "Date", - "label": "Separation Begins On", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2021-07-30 14:03:51.218791", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Separation", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_separation/employee_separation.py b/erpnext/hr/doctype/employee_separation/employee_separation.py deleted file mode 100644 index 915e9a876e..0000000000 --- a/erpnext/hr/doctype/employee_separation/employee_separation.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from erpnext.controllers.employee_boarding_controller import EmployeeBoardingController - - -class EmployeeSeparation(EmployeeBoardingController): - def validate(self): - super(EmployeeSeparation, self).validate() - - def on_submit(self): - super(EmployeeSeparation, self).on_submit() - - def on_update_after_submit(self): - self.create_task_and_notify_user() - - def on_cancel(self): - super(EmployeeSeparation, self).on_cancel() diff --git a/erpnext/hr/doctype/employee_separation/employee_separation_list.js b/erpnext/hr/doctype/employee_separation/employee_separation_list.js deleted file mode 100644 index 76c58f5632..0000000000 --- a/erpnext/hr/doctype/employee_separation/employee_separation_list.js +++ /dev/null @@ -1,7 +0,0 @@ -frappe.listview_settings['Employee Separation'] = { - add_fields: ["boarding_status", "employee_name", "department"], - filters:[["boarding_status","=", "Pending"]], - get_indicator: function(doc) { - return [__(doc.boarding_status), frappe.utils.guess_colour(doc.boarding_status), "status,=," + doc.boarding_status]; - } -}; diff --git a/erpnext/hr/doctype/employee_separation/test_employee_separation.py b/erpnext/hr/doctype/employee_separation/test_employee_separation.py deleted file mode 100644 index df31d09179..0000000000 --- a/erpnext/hr/doctype/employee_separation/test_employee_separation.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import getdate - -test_dependencies = ["Employee Onboarding"] - - -class TestEmployeeSeparation(unittest.TestCase): - def test_employee_separation(self): - separation = create_employee_separation() - - self.assertEqual(separation.docstatus, 1) - self.assertEqual(separation.boarding_status, "Pending") - - project = frappe.get_doc("Project", separation.project) - project.percent_complete_method = "Manual" - project.status = "Completed" - project.save() - - separation.reload() - self.assertEqual(separation.boarding_status, "Completed") - - separation.cancel() - self.assertEqual(separation.project, "") - - def tearDown(self): - for entry in frappe.get_all("Employee Separation"): - doc = frappe.get_doc("Employee Separation", entry.name) - if doc.docstatus == 1: - doc.cancel() - doc.delete() - - -def create_employee_separation(): - employee = frappe.db.get_value("Employee", {"status": "Active", "company": "_Test Company"}) - separation = frappe.new_doc("Employee Separation") - separation.employee = employee - separation.boarding_begins_on = getdate() - separation.company = "_Test Company" - separation.append("activities", {"activity_name": "Deactivate Employee", "role": "HR User"}) - separation.boarding_status = "Pending" - separation.insert() - separation.submit() - return separation diff --git a/erpnext/hr/doctype/employee_separation_template/__init__.py b/erpnext/hr/doctype/employee_separation_template/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js deleted file mode 100644 index 172ff9fc5b..0000000000 --- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Separation Template', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json deleted file mode 100644 index e58323159b..0000000000 --- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "HR-EMP-STP-.#####", - "beta": 0, - "creation": "2018-05-09 06:31:44.498557", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_7", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "designation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Designation", - "length": 0, - "no_copy": 0, - "options": "Designation", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee_grade", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee Grade", - "length": 0, - "no_copy": 0, - "options": "Employee Grade", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_7", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Activities", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "activities", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Activities", - "length": 0, - "no_copy": 0, - "options": "Employee Boarding Activity", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-21 16:15:57.469756", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Separation Template", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "designation", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py b/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py deleted file mode 100644 index 70b84b1755..0000000000 --- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeSeparationTemplate(Document): - pass diff --git a/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py b/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py deleted file mode 100644 index 3ffd8dd6e2..0000000000 --- a/erpnext/hr/doctype/employee_separation_template/employee_separation_template_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "employee_separation_template", - "transactions": [ - {"items": ["Employee Separation"]}, - ], - } diff --git a/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py b/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py deleted file mode 100644 index 6a0c9479db..0000000000 --- a/erpnext/hr/doctype/employee_separation_template/test_employee_separation_template.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeSeparationTemplate(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/employee_skill/__init__.py b/erpnext/hr/doctype/employee_skill/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_skill/employee_skill.json b/erpnext/hr/doctype/employee_skill/employee_skill.json deleted file mode 100644 index 4b1419e1ec..0000000000 --- a/erpnext/hr/doctype/employee_skill/employee_skill.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2019-04-16 09:57:52.751635", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "skill", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Skill", - "length": 0, - "no_copy": 0, - "options": "Skill", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "proficiency", - "fieldtype": "Rating", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Proficiency", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "Today", - "fetch_if_empty": 0, - "fieldname": "evaluation_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Evaluation Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_toolbar": 0, - "idx": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2019-04-16 14:13:17.111035", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Skill", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_skill_map/__init__.py b/erpnext/hr/doctype/employee_skill_map/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js b/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js deleted file mode 100644 index b82b18d43b..0000000000 --- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Skill Map', { - // refresh: function(frm) { - - // } - designation: (frm) => { - frm.set_value('employee_skills', null); - if (frm.doc.designation) { - frappe.db.get_doc('Designation', frm.doc.designation).then((designation) => { - designation.skills.forEach(designation_skill => { - let row = frappe.model.add_child(frm.doc, 'Employee Skill', 'employee_skills'); - row.skill = designation_skill.skill; - row.proficiency = 1; - }); - refresh_field('employee_skills'); - }); - } - } -}); diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json b/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json deleted file mode 100644 index 21e25132a1..0000000000 --- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "actions": [], - "autoname": "field:employee", - "creation": "2019-04-16 10:07:48.303426", - "doctype": "DocType", - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "column_break_3", - "designation", - "skills_section", - "employee_skills", - "trainings_section", - "trainings" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee", - "options": "Employee", - "unique": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "label": "Employee Name" - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Read Only", - "label": "Designation" - }, - { - "fieldname": "skills_section", - "fieldtype": "Section Break", - "label": "Skills" - }, - { - "fieldname": "employee_skills", - "fieldtype": "Table", - "label": "Employee Skills", - "options": "Employee Skill" - }, - { - "fieldname": "trainings_section", - "fieldtype": "Section Break", - "label": "Trainings" - }, - { - "fieldname": "trainings", - "fieldtype": "Table", - "label": "Trainings", - "options": "Employee Training" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - } - ], - "links": [], - "modified": "2019-12-16 11:31:09.916893", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Skill Map", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "ASC", - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_training/__init__.py b/erpnext/hr/doctype/employee_training/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_training/employee_training.json b/erpnext/hr/doctype/employee_training/employee_training.json deleted file mode 100644 index 0e0dc15195..0000000000 --- a/erpnext/hr/doctype/employee_training/employee_training.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2019-04-16 16:15:50.931545", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "training", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Training", - "length": 0, - "no_copy": 0, - "options": "Training Event", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "training.end_time", - "fetch_if_empty": 0, - "fieldname": "training_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Training Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_toolbar": 0, - "idx": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2019-04-22 12:48:56.925419", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Training", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_transfer/__init__.py b/erpnext/hr/doctype/employee_transfer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.js b/erpnext/hr/doctype/employee_transfer/employee_transfer.js deleted file mode 100644 index af751a7c05..0000000000 --- a/erpnext/hr/doctype/employee_transfer/employee_transfer.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -{% include 'erpnext/hr/employee_property_update.js' %} - -frappe.ui.form.on('Employee Transfer', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.json b/erpnext/hr/doctype/employee_transfer/employee_transfer.json deleted file mode 100644 index d66ef64305..0000000000 --- a/erpnext/hr/doctype/employee_transfer/employee_transfer.json +++ /dev/null @@ -1,528 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "HR-EMP-TRN-.YYYY.-.#####", - "beta": 0, - "creation": "2018-04-13 18:20:01.603830", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Name", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "transfer_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Transfer Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "new_company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "New Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "default": "", - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "details_section", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Transfer Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "transfer_details", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Transfer Detail", - "length": 0, - "no_copy": 0, - "options": "Employee Property History", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "reallocate_leaves", - "fieldtype": "Check", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Re-allocate Leaves", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "create_new_employee_id", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Create New Employee Id", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "new_employee_id", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "New Employee ID", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Employee Transfer", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-08-21 16:15:36.876312", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Transfer", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 0 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_transfer/employee_transfer.py b/erpnext/hr/doctype/employee_transfer/employee_transfer.py deleted file mode 100644 index 6dbefe59da..0000000000 --- a/erpnext/hr/doctype/employee_transfer/employee_transfer.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate - -from erpnext.hr.utils import update_employee_work_history - - -class EmployeeTransfer(Document): - def before_submit(self): - if getdate(self.transfer_date) > getdate(): - frappe.throw( - _("Employee Transfer cannot be submitted before Transfer Date"), - frappe.DocstatusTransitionError, - ) - - def on_submit(self): - employee = frappe.get_doc("Employee", self.employee) - if self.create_new_employee_id: - new_employee = frappe.copy_doc(employee) - new_employee.name = None - new_employee.employee_number = None - new_employee = update_employee_work_history( - new_employee, self.transfer_details, date=self.transfer_date - ) - if self.new_company and self.company != self.new_company: - new_employee.internal_work_history = [] - new_employee.date_of_joining = self.transfer_date - new_employee.company = self.new_company - # move user_id to new employee before insert - if employee.user_id and not self.validate_user_in_details(): - new_employee.user_id = employee.user_id - employee.db_set("user_id", "") - new_employee.insert() - self.db_set("new_employee_id", new_employee.name) - # relieve the old employee - employee.db_set("relieving_date", self.transfer_date) - employee.db_set("status", "Left") - else: - employee = update_employee_work_history( - employee, self.transfer_details, date=self.transfer_date - ) - if self.new_company and self.company != self.new_company: - employee.company = self.new_company - employee.date_of_joining = self.transfer_date - employee.save() - - def on_cancel(self): - employee = frappe.get_doc("Employee", self.employee) - if self.create_new_employee_id: - if self.new_employee_id: - frappe.throw( - _("Please delete the Employee {0} to cancel this document").format( - "{0}".format(self.new_employee_id) - ) - ) - # mark the employee as active - employee.status = "Active" - employee.relieving_date = "" - else: - employee = update_employee_work_history( - employee, self.transfer_details, date=self.transfer_date, cancel=True - ) - if self.new_company != self.company: - employee.company = self.company - employee.save() - - def validate_user_in_details(self): - for item in self.transfer_details: - if item.fieldname == "user_id" and item.new != item.current: - return True - return False diff --git a/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py b/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py deleted file mode 100644 index 37a190a162..0000000000 --- a/erpnext/hr/doctype/employee_transfer/test_employee_transfer.py +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee - - -class TestEmployeeTransfer(unittest.TestCase): - def setUp(self): - create_company() - - def tearDown(self): - frappe.db.rollback() - - def test_submit_before_transfer_date(self): - make_employee("employee2@transfers.com") - - transfer_obj = frappe.get_doc( - { - "doctype": "Employee Transfer", - "employee": frappe.get_value("Employee", {"user_id": "employee2@transfers.com"}, "name"), - "transfer_details": [ - { - "property": "Designation", - "current": "Software Developer", - "new": "Project Manager", - "fieldname": "designation", - } - ], - } - ) - transfer_obj.transfer_date = add_days(getdate(), 1) - transfer_obj.save() - self.assertRaises(frappe.DocstatusTransitionError, transfer_obj.submit) - transfer = frappe.get_doc("Employee Transfer", transfer_obj.name) - transfer.transfer_date = getdate() - transfer.submit() - self.assertEqual(transfer.docstatus, 1) - - def test_new_employee_creation(self): - make_employee("employee3@transfers.com") - - transfer = frappe.get_doc( - { - "doctype": "Employee Transfer", - "employee": frappe.get_value("Employee", {"user_id": "employee3@transfers.com"}, "name"), - "create_new_employee_id": 1, - "transfer_date": getdate(), - "transfer_details": [ - { - "property": "Designation", - "current": "Software Developer", - "new": "Project Manager", - "fieldname": "designation", - } - ], - } - ).insert() - transfer.submit() - self.assertTrue(transfer.new_employee_id) - self.assertEqual(frappe.get_value("Employee", transfer.new_employee_id, "status"), "Active") - self.assertEqual(frappe.get_value("Employee", transfer.employee, "status"), "Left") - - def test_employee_history(self): - employee = make_employee( - "employee4@transfers.com", - company="Test Company", - date_of_birth=getdate("30-09-1980"), - date_of_joining=getdate("01-10-2021"), - department="Accounts - TC", - designation="Accountant", - ) - transfer = create_employee_transfer(employee) - - count = 0 - department = ["Accounts - TC", "Management - TC"] - designation = ["Accountant", "Manager"] - dt = [getdate("01-10-2021"), getdate()] - - employee = frappe.get_doc("Employee", employee) - for data in employee.internal_work_history: - self.assertEqual(data.department, department[count]) - self.assertEqual(data.designation, designation[count]) - self.assertEqual(data.from_date, dt[count]) - count = count + 1 - - transfer.cancel() - employee.reload() - - for data in employee.internal_work_history: - self.assertEqual(data.designation, designation[0]) - self.assertEqual(data.department, department[0]) - self.assertEqual(data.from_date, dt[0]) - - -def create_company(): - if not frappe.db.exists("Company", "Test Company"): - frappe.get_doc( - { - "doctype": "Company", - "company_name": "Test Company", - "default_currency": "INR", - "country": "India", - } - ).insert() - - -def create_employee_transfer(employee): - doc = frappe.get_doc( - { - "doctype": "Employee Transfer", - "employee": employee, - "transfer_date": getdate(), - "transfer_details": [ - { - "property": "Designation", - "current": "Accountant", - "new": "Manager", - "fieldname": "designation", - }, - { - "property": "Department", - "current": "Accounts - TC", - "new": "Management - TC", - "fieldname": "department", - }, - ], - } - ) - - doc.save() - doc.submit() - - return doc diff --git a/erpnext/hr/doctype/employment_type/README.md b/erpnext/hr/doctype/employment_type/README.md deleted file mode 100644 index 19de703b24..0000000000 --- a/erpnext/hr/doctype/employment_type/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Type of employment. - -e.g. Permanent, Probation, Intern etc. \ No newline at end of file diff --git a/erpnext/hr/doctype/employment_type/__init__.py b/erpnext/hr/doctype/employment_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/employment_type/employment_type.py b/erpnext/hr/doctype/employment_type/employment_type.py deleted file mode 100644 index b2262c0c58..0000000000 --- a/erpnext/hr/doctype/employment_type/employment_type.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from frappe.model.document import Document - - -class EmploymentType(Document): - pass diff --git a/erpnext/hr/doctype/employment_type/test_employment_type.py b/erpnext/hr/doctype/employment_type/test_employment_type.py deleted file mode 100644 index fdf6965e48..0000000000 --- a/erpnext/hr/doctype/employment_type/test_employment_type.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe - -test_records = frappe.get_test_records("Employment Type") diff --git a/erpnext/hr/doctype/employment_type/test_records.json b/erpnext/hr/doctype/employment_type/test_records.json deleted file mode 100644 index fa571798a0..0000000000 --- a/erpnext/hr/doctype/employment_type/test_records.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "doctype": "Employment Type", - "employee_type_name": "_Test Employment Type" - } -] \ No newline at end of file diff --git a/erpnext/hr/doctype/exit_interview/__init__.py b/erpnext/hr/doctype/exit_interview/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.js b/erpnext/hr/doctype/exit_interview/exit_interview.js deleted file mode 100644 index 502af423a2..0000000000 --- a/erpnext/hr/doctype/exit_interview/exit_interview.js +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Exit Interview', { - refresh: function(frm) { - if (!frm.doc.__islocal && !frm.doc.questionnaire_email_sent && frappe.boot.user.can_write.includes('Exit Interview')) { - frm.add_custom_button(__('Send Exit Questionnaire'), function () { - frm.trigger('send_exit_questionnaire'); - }); - } - }, - - employee: function(frm) { - frappe.db.get_value('Employee', frm.doc.employee, 'relieving_date', (message) => { - if (!message.relieving_date) { - frappe.throw({ - message: __('Please set the relieving date for employee {0}', - ['' + frm.doc.employee + '']), - title: __('Relieving Date Missing') - }); - } - }); - }, - - send_exit_questionnaire: function(frm) { - frappe.call({ - method: 'erpnext.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire', - args: { - 'interviews': [frm.doc] - }, - callback: function(r) { - if (!r.exc) { - frm.refresh_field('questionnaire_email_sent'); - } - } - }); - } -}); diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.json b/erpnext/hr/doctype/exit_interview/exit_interview.json deleted file mode 100644 index 989a1b8118..0000000000 --- a/erpnext/hr/doctype/exit_interview/exit_interview.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "autoname": "naming_series:", - "creation": "2021-12-05 13:56:36.241690", - "doctype": "DocType", - "editable_grid": 1, - "email_append_to": 1, - "engine": "InnoDB", - "field_order": [ - "naming_series", - "employee", - "employee_name", - "email", - "column_break_5", - "company", - "status", - "date", - "employee_details_section", - "department", - "designation", - "reports_to", - "column_break_9", - "date_of_joining", - "relieving_date", - "exit_questionnaire_section", - "ref_doctype", - "questionnaire_email_sent", - "column_break_10", - "reference_document_name", - "interview_summary_section", - "interviewers", - "interview_summary", - "employee_status_section", - "employee_status", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.relieving_date", - "fieldname": "relieving_date", - "fieldtype": "Date", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Relieving Date", - "read_only": 1 - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "date", - "fieldtype": "Date", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Date", - "mandatory_depends_on": "eval:doc.status==='Scheduled';" - }, - { - "fieldname": "exit_questionnaire_section", - "fieldtype": "Section Break", - "label": "Exit Questionnaire" - }, - { - "fieldname": "ref_doctype", - "fieldtype": "Link", - "label": "Reference Document Type", - "options": "DocType" - }, - { - "fieldname": "reference_document_name", - "fieldtype": "Dynamic Link", - "in_list_view": 1, - "label": "Reference Document Name", - "options": "ref_doctype" - }, - { - "fieldname": "interview_summary_section", - "fieldtype": "Section Break", - "label": "Interview Details" - }, - { - "fieldname": "column_break_10", - "fieldtype": "Column Break" - }, - { - "fieldname": "interviewers", - "fieldtype": "Table MultiSelect", - "label": "Interviewers", - "mandatory_depends_on": "eval:doc.status==='Scheduled';", - "options": "Interviewer" - }, - { - "fetch_from": "employee.date_of_joining", - "fieldname": "date_of_joining", - "fieldtype": "Date", - "label": "Date of Joining", - "read_only": 1 - }, - { - "fetch_from": "employee.reports_to", - "fieldname": "reports_to", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Reports To", - "options": "Employee", - "read_only": 1 - }, - { - "fieldname": "employee_details_section", - "fieldtype": "Section Break", - "label": "Employee Details" - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Naming Series", - "options": "HR-EXIT-INT-" - }, - { - "default": "0", - "fieldname": "questionnaire_email_sent", - "fieldtype": "Check", - "in_standard_filter": 1, - "label": "Questionnaire Email Sent", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "email", - "fieldtype": "Data", - "label": "Email ID", - "options": "Email", - "read_only": 1 - }, - { - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Status", - "options": "Pending\nScheduled\nCompleted\nCancelled", - "reqd": 1 - }, - { - "fieldname": "employee_status_section", - "fieldtype": "Section Break" - }, - { - "fieldname": "employee_status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Final Decision", - "mandatory_depends_on": "eval:doc.status==='Completed';", - "options": "\nEmployee Retained\nExit Confirmed" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Exit Interview", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "interview_summary", - "fieldtype": "Text Editor", - "label": "Interview Summary" - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-12-07 23:39:22.645401", - "modified_by": "Administrator", - "module": "HR", - "name": "Exit Interview", - "naming_rule": "By \"Naming Series\" field", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "sender_field": "email", - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/exit_interview/exit_interview.py b/erpnext/hr/doctype/exit_interview/exit_interview.py deleted file mode 100644 index 8317310202..0000000000 --- a/erpnext/hr/doctype/exit_interview/exit_interview.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import get_link_to_form - -from erpnext.hr.doctype.employee.employee import get_employee_email - - -class ExitInterview(Document): - def validate(self): - self.validate_relieving_date() - self.validate_duplicate_interview() - self.set_employee_email() - - def validate_relieving_date(self): - if not frappe.db.get_value("Employee", self.employee, "relieving_date"): - frappe.throw( - _("Please set the relieving date for employee {0}").format( - get_link_to_form("Employee", self.employee) - ), - title=_("Relieving Date Missing"), - ) - - def validate_duplicate_interview(self): - doc = frappe.db.exists( - "Exit Interview", {"employee": self.employee, "name": ("!=", self.name), "docstatus": ("!=", 2)} - ) - if doc: - frappe.throw( - _("Exit Interview {0} already exists for Employee: {1}").format( - get_link_to_form("Exit Interview", doc), frappe.bold(self.employee) - ), - frappe.DuplicateEntryError, - ) - - def set_employee_email(self): - employee = frappe.get_doc("Employee", self.employee) - self.email = get_employee_email(employee) - - def on_submit(self): - if self.status != "Completed": - frappe.throw(_("Only Completed documents can be submitted")) - - self.update_interview_date_in_employee() - - def on_cancel(self): - self.update_interview_date_in_employee() - self.db_set("status", "Cancelled") - - def update_interview_date_in_employee(self): - if self.docstatus == 1: - frappe.db.set_value("Employee", self.employee, "held_on", self.date) - elif self.docstatus == 2: - frappe.db.set_value("Employee", self.employee, "held_on", None) - - -@frappe.whitelist() -def send_exit_questionnaire(interviews): - interviews = get_interviews(interviews) - validate_questionnaire_settings() - - email_success = [] - email_failure = [] - - for exit_interview in interviews: - interview = frappe.get_doc("Exit Interview", exit_interview.get("name")) - if interview.get("questionnaire_email_sent"): - continue - - employee = frappe.get_doc("Employee", interview.employee) - email = get_employee_email(employee) - - context = interview.as_dict() - context.update(employee.as_dict()) - template_name = frappe.db.get_single_value( - "HR Settings", "exit_questionnaire_notification_template" - ) - template = frappe.get_doc("Email Template", template_name) - - if email: - frappe.sendmail( - recipients=email, - subject=template.subject, - message=frappe.render_template(template.response, context), - reference_doctype=interview.doctype, - reference_name=interview.name, - ) - interview.db_set("questionnaire_email_sent", True) - interview.notify_update() - email_success.append(email) - else: - email_failure.append(get_link_to_form("Employee", employee.name)) - - show_email_summary(email_success, email_failure) - - -def get_interviews(interviews): - import json - - if isinstance(interviews, str): - interviews = json.loads(interviews) - - if not len(interviews): - frappe.throw(_("Atleast one interview has to be selected.")) - - return interviews - - -def validate_questionnaire_settings(): - settings = frappe.db.get_value( - "HR Settings", - "HR Settings", - ["exit_questionnaire_web_form", "exit_questionnaire_notification_template"], - as_dict=True, - ) - - if ( - not settings.exit_questionnaire_web_form or not settings.exit_questionnaire_notification_template - ): - frappe.throw( - _("Please set {0} and {1} in {2}.").format( - frappe.bold("Exit Questionnaire Web Form"), - frappe.bold("Notification Template"), - get_link_to_form("HR Settings", "HR Settings"), - ), - title=_("Settings Missing"), - ) - - -def show_email_summary(email_success, email_failure): - message = "" - if email_success: - message += _("{0}: {1}").format(frappe.bold("Sent Successfully"), ", ".join(email_success)) - if message and email_failure: - message += "

" - if email_failure: - message += _("{0} due to missing email information for employee(s): {1}").format( - frappe.bold("Sending Failed"), ", ".join(email_failure) - ) - - frappe.msgprint( - message, title=_("Exit Questionnaire"), indicator="blue", is_minimizable=True, wide=True - ) diff --git a/erpnext/hr/doctype/exit_interview/exit_interview_list.js b/erpnext/hr/doctype/exit_interview/exit_interview_list.js deleted file mode 100644 index 93d7b213f2..0000000000 --- a/erpnext/hr/doctype/exit_interview/exit_interview_list.js +++ /dev/null @@ -1,27 +0,0 @@ -frappe.listview_settings['Exit Interview'] = { - has_indicator_for_draft: 1, - get_indicator: function(doc) { - let status_color = { - 'Pending': 'orange', - 'Scheduled': 'yellow', - 'Completed': 'green', - 'Cancelled': 'red', - }; - return [__(doc.status), status_color[doc.status], 'status,=,'+doc.status]; - }, - - onload: function(listview) { - if (frappe.boot.user.can_write.includes('Exit Interview')) { - listview.page.add_action_item(__('Send Exit Questionnaires'), function() { - const interviews = listview.get_checked_items(); - frappe.call({ - method: 'erpnext.hr.doctype.exit_interview.exit_interview.send_exit_questionnaire', - freeze: true, - args: { - 'interviews': interviews - } - }); - }); - } - } -}; diff --git a/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html b/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html deleted file mode 100644 index 0317b1a102..0000000000 --- a/erpnext/hr/doctype/exit_interview/exit_questionnaire_notification_template.html +++ /dev/null @@ -1,16 +0,0 @@ -

Exit Questionnaire

-
- -

- Dear {{ employee_name }}, -

- - Thank you for the contribution you have made during your time at {{ company }}. We value your opinion and welcome the feedback on your experience working with us. - Request you to take out a few minutes to fill up this Exit Questionnaire. - - {% set web_form = frappe.db.get_value('HR Settings', 'HR Settings', 'exit_questionnaire_web_form') %} - {% set web_form_link = frappe.utils.get_url(uri=frappe.db.get_value('Web Form', web_form, 'route')) %} - -

- {{ _('Submit Now') }} -

diff --git a/erpnext/hr/doctype/exit_interview/test_exit_interview.py b/erpnext/hr/doctype/exit_interview/test_exit_interview.py deleted file mode 100644 index 9c2c6442f8..0000000000 --- a/erpnext/hr/doctype/exit_interview/test_exit_interview.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import os -import unittest - -import frappe -from frappe import _ -from frappe.core.doctype.user_permission.test_user_permission import create_user -from frappe.tests.test_webform import create_custom_doctype, create_webform -from frappe.utils import getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.exit_interview.exit_interview import send_exit_questionnaire - - -class TestExitInterview(unittest.TestCase): - def setUp(self): - frappe.db.sql("delete from `tabExit Interview`") - - def test_duplicate_interview(self): - employee = make_employee("employeeexitint1@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) - interview = create_exit_interview(employee) - - doc = frappe.copy_doc(interview) - self.assertRaises(frappe.DuplicateEntryError, doc.save) - - def test_relieving_date_validation(self): - employee = make_employee("employeeexitint2@example.com") - # unset relieving date - frappe.db.set_value("Employee", employee, "relieving_date", None) - - interview = create_exit_interview(employee, save=False) - self.assertRaises(frappe.ValidationError, interview.save) - - # set relieving date - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) - interview = create_exit_interview(employee) - self.assertTrue(interview.name) - - def test_interview_date_updated_in_employee_master(self): - employee = make_employee("employeeexit3@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) - - interview = create_exit_interview(employee) - interview.status = "Completed" - interview.employee_status = "Exit Confirmed" - - # exit interview date updated on submit - interview.submit() - self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), interview.date) - - # exit interview reset on cancel - interview.reload() - interview.cancel() - self.assertEqual(frappe.db.get_value("Employee", employee, "held_on"), None) - - def test_send_exit_questionnaire(self): - create_custom_doctype() - create_webform() - template = create_notification_template() - - webform = frappe.db.get_all("Web Form", limit=1) - frappe.db.set_value( - "HR Settings", - "HR Settings", - { - "exit_questionnaire_web_form": webform[0].name, - "exit_questionnaire_notification_template": template, - }, - ) - - employee = make_employee("employeeexit3@example.com") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) - - interview = create_exit_interview(employee) - send_exit_questionnaire([interview]) - - email_queue = frappe.db.get_all("Email Queue", ["name", "message"], limit=1) - self.assertTrue("Subject: Exit Questionnaire Notification" in email_queue[0].message) - - def tearDown(self): - frappe.db.rollback() - - -def create_exit_interview(employee, save=True): - interviewer = create_user("test_exit_interviewer@example.com") - - doc = frappe.get_doc( - { - "doctype": "Exit Interview", - "employee": employee, - "company": "_Test Company", - "status": "Pending", - "date": getdate(), - "interviewers": [{"interviewer": interviewer.name}], - "interview_summary": "Test", - } - ) - - if save: - return doc.insert() - return doc - - -def create_notification_template(): - template = frappe.db.exists("Email Template", _("Exit Questionnaire Notification")) - if not template: - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html") - ) - - template = frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Exit Questionnaire Notification"), - "response": response, - "subject": _("Exit Questionnaire Notification"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - template = template.name - - return template diff --git a/erpnext/hr/doctype/expected_skill_set/__init__.py b/erpnext/hr/doctype/expected_skill_set/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json b/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json deleted file mode 100644 index 899f5bd0ff..0000000000 --- a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "actions": [], - "creation": "2021-04-12 13:05:06.741330", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "skill", - "description" - ], - "fields": [ - { - "fieldname": "skill", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Skill", - "options": "Skill", - "reqd": 1 - }, - { - "fetch_from": "skill.description", - "fieldname": "description", - "fieldtype": "Small Text", - "in_list_view": 1, - "label": "Description" - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-04-12 14:26:33.062549", - "modified_by": "Administrator", - "module": "HR", - "name": "Expected Skill Set", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py b/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py deleted file mode 100644 index 0062ba91a1..0000000000 --- a/erpnext/hr/doctype/expected_skill_set/expected_skill_set.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class ExpectedSkillSet(Document): - pass diff --git a/erpnext/hr/doctype/expense_claim/README.md b/erpnext/hr/doctype/expense_claim/README.md deleted file mode 100644 index 489029ce39..0000000000 --- a/erpnext/hr/doctype/expense_claim/README.md +++ /dev/null @@ -1 +0,0 @@ -Amount claimed by Employee for expense made by the Employee on organization's behalf. \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim/__init__.py b/erpnext/hr/doctype/expense_claim/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js deleted file mode 100644 index af80b63845..0000000000 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ /dev/null @@ -1,467 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.provide("erpnext.hr"); -frappe.provide("erpnext.accounts.dimensions"); - -frappe.ui.form.on('Expense Claim', { - onload: function(frm) { - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); - }, - company: function(frm) { - erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); - var expenses = frm.doc.expenses; - for (var i = 0; i < expenses.length; i++) { - var expense = expenses[i]; - if (!expense.expense_type) { - continue; - } - frappe.call({ - method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center", - args: { - "expense_claim_type": expense.expense_type, - "company": frm.doc.company - }, - callback: function(r) { - if (r.message) { - expense.default_account = r.message.account; - expense.cost_center = r.message.cost_center; - } - } - }); - } - }, -}); - -frappe.ui.form.on('Expense Claim Detail', { - expense_type: function(frm, cdt, cdn) { - var d = locals[cdt][cdn]; - if (!frm.doc.company) { - d.expense_type = ""; - frappe.msgprint(__("Please set the Company")); - this.frm.refresh_fields(); - return; - } - - if(!d.expense_type) { - return; - } - return frappe.call({ - method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim_account_and_cost_center", - args: { - "expense_claim_type": d.expense_type, - "company": frm.doc.company - }, - callback: function(r) { - if (r.message) { - d.default_account = r.message.account; - d.cost_center = r.message.cost_center; - } - } - }); - } -}); - -cur_frm.add_fetch('employee', 'company', 'company'); -cur_frm.add_fetch('employee','employee_name','employee_name'); -cur_frm.add_fetch('expense_type','description','description'); - -cur_frm.cscript.onload = function(doc) { - if (doc.__islocal) { - cur_frm.set_value("posting_date", frappe.datetime.get_today()); - cur_frm.cscript.clear_sanctioned(doc); - } -}; - -cur_frm.cscript.clear_sanctioned = function(doc) { - var val = doc.expenses || []; - for(var i = 0; i 0 && frappe.model.can_read(entry_doctype)) { - cur_frm.add_custom_button(__('Bank Entries'), function() { - frappe.route_options = { - party_type: "Employee", - party: doc.employee, - company: doc.company - }; - frappe.set_route("List", entry_doctype); - }, __("View")); - } - /* eslint-enable */ - } - } -}; - -cur_frm.cscript.set_help = function(doc) { - cur_frm.set_intro(""); - if(doc.__islocal && !in_list(frappe.user_roles, "HR User")) { - cur_frm.set_intro(__("Fill the form and save it")); - } -}; - -cur_frm.cscript.validate = function(doc) { - cur_frm.cscript.calculate_total(doc); -}; - -cur_frm.cscript.calculate_total = function(doc){ - doc.total_claimed_amount = 0; - doc.total_sanctioned_amount = 0; - $.each((doc.expenses || []), function(i, d) { - doc.total_claimed_amount += d.amount; - doc.total_sanctioned_amount += d.sanctioned_amount; - }); -}; - -cur_frm.cscript.calculate_total_amount = function(doc,cdt,cdn){ - cur_frm.cscript.calculate_total(doc,cdt,cdn); -}; - -cur_frm.fields_dict['cost_center'].get_query = function(doc) { - return { - filters: { - "company": doc.company - } - } -}; - -erpnext.expense_claim = { - set_title: function(frm) { - if (!frm.doc.task) { - frm.set_value("title", frm.doc.employee_name); - } - else { - frm.set_value("title", frm.doc.employee_name + " for "+ frm.doc.task); - } - } -}; - -frappe.ui.form.on("Expense Claim", { - setup: function(frm) { - frm.add_fetch("company", "cost_center", "cost_center"); - frm.add_fetch("company", "default_expense_claim_payable_account", "payable_account"); - - frm.set_query("employee_advance", "advances", function() { - return { - filters: [ - ['docstatus', '=', 1], - ['employee', '=', frm.doc.employee], - ['paid_amount', '>', 0], - ['status', 'not in', ['Claimed', 'Returned', 'Partly Claimed and Returned']] - ] - }; - }); - - frm.set_query("expense_approver", function() { - return { - query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", - filters: { - employee: frm.doc.employee, - doctype: frm.doc.doctype - } - }; - }); - - frm.set_query("account_head", "taxes", function() { - return { - filters: [ - ['company', '=', frm.doc.company], - ['account_type', 'in', ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation"]] - ] - }; - }); - - frm.set_query("payable_account", function() { - return { - filters: { - "report_type": "Balance Sheet", - "account_type": "Payable", - "company": frm.doc.company, - "is_group": 0 - } - }; - }); - - frm.set_query("task", function() { - return { - filters: { - 'project': frm.doc.project - } - }; - }); - - frm.set_query("employee", function() { - return { - query: "erpnext.controllers.queries.employee_query" - }; - }); - }, - - onload: function(frm) { - if (frm.doc.docstatus == 0) { - return frappe.call({ - method: "erpnext.hr.doctype.leave_application.leave_application.get_mandatory_approval", - args: { - doctype: frm.doc.doctype, - }, - callback: function(r) { - if (!r.exc && r.message) { - frm.toggle_reqd("expense_approver", true); - } - } - }); - } - }, - - refresh: function(frm) { - frm.trigger("toggle_fields"); - - if(frm.doc.docstatus > 0 && frm.doc.approval_status !== "Rejected") { - frm.add_custom_button(__('Accounting Ledger'), function() { - frappe.route_options = { - voucher_no: frm.doc.name, - company: frm.doc.company, - from_date: frm.doc.posting_date, - to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), - group_by: '', - show_cancelled_entries: frm.doc.docstatus === 2 - }; - frappe.set_route("query-report", "General Ledger"); - }, __("View")); - } - - if (frm.doc.docstatus===1 && !cint(frm.doc.is_paid) && cint(frm.doc.grand_total) > 0 - && (cint(frm.doc.total_amount_reimbursed) < cint(frm.doc.total_sanctioned_amount)) - && frappe.model.can_create("Payment Entry")) { - frm.add_custom_button(__('Payment'), - function() { frm.events.make_payment_entry(frm); }, __('Create')); - } - }, - - calculate_grand_total: function(frm) { - var grand_total = flt(frm.doc.total_sanctioned_amount) + flt(frm.doc.total_taxes_and_charges) - flt(frm.doc.total_advance_amount); - frm.set_value("grand_total", grand_total); - frm.refresh_fields(); - }, - - grand_total: function(frm) { - frm.trigger("update_employee_advance_claimed_amount"); - }, - - update_employee_advance_claimed_amount: function(frm) { - let amount_to_be_allocated = frm.doc.grand_total; - $.each(frm.doc.advances || [], function(i, advance){ - if (amount_to_be_allocated >= advance.unclaimed_amount){ - advance.allocated_amount = frm.doc.advances[i].unclaimed_amount; - amount_to_be_allocated -= advance.allocated_amount; - } else { - advance.allocated_amount = amount_to_be_allocated; - amount_to_be_allocated = 0; - } - frm.refresh_field("advances"); - }); - }, - - make_payment_entry: function(frm) { - var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry"; - if(frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) { - method = "erpnext.hr.doctype.expense_claim.expense_claim.make_bank_entry"; - } - return frappe.call({ - method: method, - args: { - "dt": frm.doc.doctype, - "dn": frm.doc.name - }, - callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }, - - is_paid: function(frm) { - frm.trigger("toggle_fields"); - }, - - toggle_fields: function(frm) { - frm.toggle_reqd("mode_of_payment", frm.doc.is_paid); - }, - - employee_name: function(frm) { - erpnext.expense_claim.set_title(frm); - }, - - task: function(frm) { - erpnext.expense_claim.set_title(frm); - }, - - employee: function(frm) { - frm.events.get_advances(frm); - }, - - cost_center: function(frm) { - frm.events.set_child_cost_center(frm); - }, - - validate: function(frm) { - frm.events.set_child_cost_center(frm); - }, - - set_child_cost_center: function(frm){ - (frm.doc.expenses || []).forEach(function(d) { - if (!d.cost_center){ - d.cost_center = frm.doc.cost_center; - } - }); - }, - get_taxes: function(frm) { - if(frm.doc.taxes) { - frappe.call({ - method: "calculate_taxes", - doc: frm.doc, - callback: () => { - refresh_field("taxes"); - frm.trigger("update_employee_advance_claimed_amount"); - } - }); - } - }, - - get_advances: function(frm) { - frappe.model.clear_table(frm.doc, "advances"); - if (frm.doc.employee) { - return frappe.call({ - method: "erpnext.hr.doctype.expense_claim.expense_claim.get_advances", - args: { - employee: frm.doc.employee - }, - callback: function(r, rt) { - - if(r.message) { - $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Expense Claim Advance", "advances"); - row.employee_advance = d.name; - row.posting_date = d.posting_date; - row.advance_account = d.advance_account; - row.advance_paid = d.paid_amount; - row.unclaimed_amount = flt(d.paid_amount) - flt(d.claimed_amount); - row.allocated_amount = 0; - }); - refresh_field("advances"); - } - } - }); - } - } -}); - -frappe.ui.form.on("Expense Claim Detail", { - amount: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - frappe.model.set_value(cdt, cdn, 'sanctioned_amount', child.amount); - }, - - sanctioned_amount: function(frm, cdt, cdn) { - cur_frm.cscript.calculate_total(frm.doc, cdt, cdn); - frm.trigger("get_taxes"); - frm.trigger("calculate_grand_total"); - }, - - cost_center: function(frm, cdt, cdn) { - erpnext.utils.copy_value_in_all_rows(frm.doc, cdt, cdn, "expenses", "cost_center"); - } -}); - -frappe.ui.form.on("Expense Claim Advance", { - employee_advance: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(!frm.doc.employee){ - frappe.msgprint(__('Select an employee to get the employee advance.')); - frm.doc.advances = []; - refresh_field("advances"); - } - else { - return frappe.call({ - method: "erpnext.hr.doctype.expense_claim.expense_claim.get_advances", - args: { - employee: frm.doc.employee, - advance_id: child.employee_advance - }, - callback: function(r, rt) { - if(r.message) { - child.employee_advance = r.message[0].name; - child.posting_date = r.message[0].posting_date; - child.advance_account = r.message[0].advance_account; - child.advance_paid = r.message[0].paid_amount; - child.unclaimed_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount); - child.allocated_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount); - frm.trigger('calculate_grand_total'); - refresh_field("advances"); - } - } - }); - } - } -}); - -frappe.ui.form.on("Expense Taxes and Charges", { - account_head: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(child.account_head && !child.description) { - // set description from account head - child.description = child.account_head.split(' - ').slice(0, -1).join(' - '); - refresh_field("taxes"); - } - }, - - calculate_total_tax: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - child.total = flt(frm.doc.total_sanctioned_amount) + flt(child.tax_amount); - frm.trigger("calculate_tax_amount", cdt, cdn); - }, - - calculate_tax_amount: function(frm) { - frm.doc.total_taxes_and_charges = 0; - (frm.doc.taxes || []).forEach(function(d) { - frm.doc.total_taxes_and_charges += d.tax_amount; - }); - frm.trigger("calculate_grand_total"); - }, - - rate: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(!child.amount) { - child.tax_amount = flt(frm.doc.total_sanctioned_amount) * (flt(child.rate)/100); - } - frm.trigger("calculate_total_tax", cdt, cdn); - }, - - tax_amount: function(frm, cdt, cdn) { - frm.trigger("calculate_total_tax", cdt, cdn); - } -}); diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json deleted file mode 100644 index 45b78bfb54..0000000000 --- a/erpnext/hr/doctype/expense_claim/expense_claim.json +++ /dev/null @@ -1,450 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-01-10 16:34:14", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "naming_series", - "employee", - "employee_name", - "department", - "column_break_5", - "expense_approver", - "approval_status", - "delivery_trip", - "is_paid", - "expense_details", - "expenses", - "sb1", - "taxes", - "transactions_section", - "total_sanctioned_amount", - "total_taxes_and_charges", - "total_advance_amount", - "column_break_17", - "grand_total", - "total_claimed_amount", - "total_amount_reimbursed", - "section_break_16", - "posting_date", - "vehicle_log", - "task", - "cb1", - "remark", - "title", - "email_id", - "accounting_details", - "company", - "mode_of_payment", - "clearance_date", - "column_break_24", - "payable_account", - "accounting_dimensions_section", - "project", - "dimension_col_break", - "cost_center", - "more_details", - "status", - "amended_from", - "advance_payments", - "advances" - ], - "fields": [ - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "HR-EXP-.YYYY.-", - "print_hide": 1, - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_standard_filter": 1, - "label": "From Employee", - "oldfieldname": "employee", - "oldfieldtype": "Link", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_global_search": 1, - "label": "Employee Name", - "oldfieldname": "employee_name", - "oldfieldtype": "Data", - "read_only": 1, - "width": "150px" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "expense_approver", - "fieldtype": "Link", - "label": "Expense Approver", - "options": "User" - }, - { - "default": "Draft", - "fieldname": "approval_status", - "fieldtype": "Select", - "label": "Approval Status", - "no_copy": 1, - "options": "Draft\nApproved\nRejected", - "search_index": 1 - }, - { - "fieldname": "total_claimed_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Claimed Amount", - "no_copy": 1, - "oldfieldname": "total_claimed_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "read_only": 1, - "width": "160px" - }, - { - "fieldname": "total_sanctioned_amount", - "fieldtype": "Currency", - "label": "Total Sanctioned Amount", - "no_copy": 1, - "oldfieldname": "total_sanctioned_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "read_only": 1, - "width": "160px" - }, - { - "default": "0", - "depends_on": "eval:(doc.docstatus==0 || doc.is_paid)", - "fieldname": "is_paid", - "fieldtype": "Check", - "label": "Is Paid" - }, - { - "fieldname": "expense_details", - "fieldtype": "Section Break", - "oldfieldtype": "Section Break" - }, - { - "fieldname": "expenses", - "fieldtype": "Table", - "label": "Expenses", - "oldfieldname": "expense_voucher_details", - "oldfieldtype": "Table", - "options": "Expense Claim Detail", - "reqd": 1 - }, - { - "fieldname": "sb1", - "fieldtype": "Section Break", - "options": "Simple" - }, - { - "default": "Today", - "fieldname": "posting_date", - "fieldtype": "Date", - "in_standard_filter": 1, - "label": "Posting Date", - "oldfieldname": "posting_date", - "oldfieldtype": "Date", - "reqd": 1 - }, - { - "fieldname": "vehicle_log", - "fieldtype": "Link", - "label": "Vehicle Log", - "options": "Vehicle Log", - "read_only": 1 - }, - { - "fieldname": "project", - "fieldtype": "Link", - "label": "Project", - "options": "Project" - }, - { - "fieldname": "task", - "fieldtype": "Link", - "label": "Task", - "options": "Task", - "remember_last_selected_value": 1 - }, - { - "fieldname": "cb1", - "fieldtype": "Column Break" - }, - { - "fieldname": "total_amount_reimbursed", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Amount Reimbursed", - "no_copy": 1, - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "remark", - "fieldtype": "Small Text", - "label": "Remark", - "no_copy": 1, - "oldfieldname": "remark", - "oldfieldtype": "Small Text" - }, - { - "allow_on_submit": 1, - "default": "{employee_name}", - "fieldname": "title", - "fieldtype": "Data", - "hidden": 1, - "label": "Title", - "no_copy": 1 - }, - { - "fieldname": "email_id", - "fieldtype": "Data", - "hidden": 1, - "label": "Employees Email Id", - "oldfieldname": "email_id", - "oldfieldtype": "Data", - "print_hide": 1 - }, - { - "fieldname": "accounting_details", - "fieldtype": "Section Break", - "label": "Accounting Details" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Company", - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "depends_on": "is_paid", - "fieldname": "mode_of_payment", - "fieldtype": "Link", - "label": "Mode of Payment", - "options": "Mode of Payment" - }, - { - "fieldname": "clearance_date", - "fieldtype": "Date", - "label": "Clearance Date" - }, - { - "fieldname": "column_break_24", - "fieldtype": "Column Break" - }, - { - "fieldname": "payable_account", - "fieldtype": "Link", - "label": "Payable Account", - "options": "Account", - "reqd": 1 - }, - { - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "options": "Cost Center" - }, - { - "collapsible": 1, - "fieldname": "more_details", - "fieldtype": "Section Break", - "label": "More Details" - }, - { - "default": "Draft", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "no_copy": 1, - "options": "Draft\nPaid\nUnpaid\nRejected\nSubmitted\nCancelled", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Expense Claim", - "print_hide": 1, - "read_only": 1, - "report_hide": 1, - "width": "160px" - }, - { - "fieldname": "advance_payments", - "fieldtype": "Section Break", - "label": "Advance Payments" - }, - { - "fieldname": "advances", - "fieldtype": "Table", - "label": "Advances", - "options": "Expense Claim Advance" - }, - { - "fieldname": "total_advance_amount", - "fieldtype": "Currency", - "label": "Total Advance Amount", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "accounting_dimensions_section", - "fieldtype": "Section Break", - "label": "Accounting Dimensions" - }, - { - "fieldname": "dimension_col_break", - "fieldtype": "Column Break" - }, - { - "fieldname": "taxes", - "fieldtype": "Table", - "label": "Expense Taxes and Charges", - "options": "Expense Taxes and Charges" - }, - { - "fieldname": "section_break_16", - "fieldtype": "Section Break" - }, - { - "fieldname": "transactions_section", - "fieldtype": "Section Break" - }, - { - "fieldname": "grand_total", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Grand Total", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, - { - "fieldname": "total_taxes_and_charges", - "fieldtype": "Currency", - "label": "Total Taxes and Charges", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "depends_on": "eval: doc.delivery_trip", - "fieldname": "delivery_trip", - "fieldtype": "Link", - "label": "Delivery Trip", - "options": "Delivery Trip" - } - ], - "icon": "fa fa-money", - "idx": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-11-22 16:26:57.787838", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Claim", - "name_case": "Title Case", - "naming_rule": "By \"Naming Series\" field", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Expense Approver", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee,employee_name", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "timeline_field": "employee", - "title_field": "title" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py deleted file mode 100644 index 89d86c1bc7..0000000000 --- a/erpnext/hr/doctype/expense_claim/expense_claim.py +++ /dev/null @@ -1,464 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.utils import cstr, flt, get_link_to_form - -import erpnext -from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account -from erpnext.accounts.general_ledger import make_gl_entries -from erpnext.controllers.accounts_controller import AccountsController -from erpnext.hr.utils import set_employee_name, share_doc_with_approver, validate_active_employee - - -class InvalidExpenseApproverError(frappe.ValidationError): - pass - - -class ExpenseApproverIdentityError(frappe.ValidationError): - pass - - -class ExpenseClaim(AccountsController): - def onload(self): - self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value( - "Accounts Settings", "make_payment_via_journal_entry" - ) - - def validate(self): - validate_active_employee(self.employee) - set_employee_name(self) - self.validate_sanctioned_amount() - self.calculate_total_amount() - self.validate_advances() - self.set_expense_account(validate=True) - self.set_payable_account() - self.set_cost_center() - self.calculate_taxes() - self.set_status() - if self.task and not self.project: - self.project = frappe.db.get_value("Task", self.task, "project") - - def set_status(self, update=False): - status = {"0": "Draft", "1": "Submitted", "2": "Cancelled"}[cstr(self.docstatus or 0)] - - precision = self.precision("grand_total") - - if ( - # set as paid - self.is_paid - or ( - flt(self.total_sanctioned_amount > 0) - and ( - # grand total is reimbursed - ( - self.docstatus == 1 - and flt(self.grand_total, precision) == flt(self.total_amount_reimbursed, precision) - ) - # grand total (to be paid) is 0 since linked advances already cover the claimed amount - or (flt(self.grand_total, precision) == 0) - ) - ) - ) and self.approval_status == "Approved": - status = "Paid" - elif ( - flt(self.total_sanctioned_amount) > 0 - and self.docstatus == 1 - and self.approval_status == "Approved" - ): - status = "Unpaid" - elif self.docstatus == 1 and self.approval_status == "Rejected": - status = "Rejected" - - if update: - self.db_set("status", status) - else: - self.status = status - - def on_update(self): - share_doc_with_approver(self, self.expense_approver) - - def set_payable_account(self): - if not self.payable_account and not self.is_paid: - self.payable_account = frappe.get_cached_value( - "Company", self.company, "default_expense_claim_payable_account" - ) - - def set_cost_center(self): - if not self.cost_center: - self.cost_center = frappe.get_cached_value("Company", self.company, "cost_center") - - def on_submit(self): - if self.approval_status == "Draft": - frappe.throw(_("""Approval Status must be 'Approved' or 'Rejected'""")) - - self.update_task_and_project() - self.make_gl_entries() - - if self.is_paid: - update_reimbursed_amount(self, self.grand_total) - - self.set_status(update=True) - self.update_claimed_amount_in_employee_advance() - - def on_cancel(self): - self.update_task_and_project() - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") - if self.payable_account: - self.make_gl_entries(cancel=True) - - if self.is_paid: - update_reimbursed_amount(self, -1 * self.grand_total) - - self.update_claimed_amount_in_employee_advance() - - def update_claimed_amount_in_employee_advance(self): - for d in self.get("advances"): - frappe.get_doc("Employee Advance", d.employee_advance).update_claimed_amount() - - def update_task_and_project(self): - if self.task: - self.update_task() - elif self.project: - frappe.get_doc("Project", self.project).update_project() - - def make_gl_entries(self, cancel=False): - if flt(self.total_sanctioned_amount) > 0: - gl_entries = self.get_gl_entries() - make_gl_entries(gl_entries, cancel) - - def get_gl_entries(self): - gl_entry = [] - self.validate_account_details() - - # payable entry - if self.grand_total: - gl_entry.append( - self.get_gl_dict( - { - "account": self.payable_account, - "credit": self.grand_total, - "credit_in_account_currency": self.grand_total, - "against": ",".join([d.default_account for d in self.expenses]), - "party_type": "Employee", - "party": self.employee, - "against_voucher_type": self.doctype, - "against_voucher": self.name, - "cost_center": self.cost_center, - }, - item=self, - ) - ) - - # expense entries - for data in self.expenses: - gl_entry.append( - self.get_gl_dict( - { - "account": data.default_account, - "debit": data.sanctioned_amount, - "debit_in_account_currency": data.sanctioned_amount, - "against": self.employee, - "cost_center": data.cost_center or self.cost_center, - }, - item=data, - ) - ) - - for data in self.advances: - gl_entry.append( - self.get_gl_dict( - { - "account": data.advance_account, - "credit": data.allocated_amount, - "credit_in_account_currency": data.allocated_amount, - "against": ",".join([d.default_account for d in self.expenses]), - "party_type": "Employee", - "party": self.employee, - "against_voucher_type": "Employee Advance", - "against_voucher": data.employee_advance, - } - ) - ) - - self.add_tax_gl_entries(gl_entry) - - if self.is_paid and self.grand_total: - # payment entry - payment_account = get_bank_cash_account(self.mode_of_payment, self.company).get("account") - gl_entry.append( - self.get_gl_dict( - { - "account": payment_account, - "credit": self.grand_total, - "credit_in_account_currency": self.grand_total, - "against": self.employee, - }, - item=self, - ) - ) - - gl_entry.append( - self.get_gl_dict( - { - "account": self.payable_account, - "party_type": "Employee", - "party": self.employee, - "against": payment_account, - "debit": self.grand_total, - "debit_in_account_currency": self.grand_total, - "against_voucher": self.name, - "against_voucher_type": self.doctype, - }, - item=self, - ) - ) - - return gl_entry - - def add_tax_gl_entries(self, gl_entries): - # tax table gl entries - for tax in self.get("taxes"): - gl_entries.append( - self.get_gl_dict( - { - "account": tax.account_head, - "debit": tax.tax_amount, - "debit_in_account_currency": tax.tax_amount, - "against": self.employee, - "cost_center": self.cost_center, - "against_voucher_type": self.doctype, - "against_voucher": self.name, - }, - item=tax, - ) - ) - - def validate_account_details(self): - for data in self.expenses: - if not data.cost_center: - frappe.throw( - _("Row {0}: {1} is required in the expenses table to book an expense claim.").format( - data.idx, frappe.bold("Cost Center") - ) - ) - - if self.is_paid: - if not self.mode_of_payment: - frappe.throw(_("Mode of payment is required to make a payment").format(self.employee)) - - def calculate_total_amount(self): - self.total_claimed_amount = 0 - self.total_sanctioned_amount = 0 - for d in self.get("expenses"): - if self.approval_status == "Rejected": - d.sanctioned_amount = 0.0 - - self.total_claimed_amount += flt(d.amount) - self.total_sanctioned_amount += flt(d.sanctioned_amount) - - @frappe.whitelist() - def calculate_taxes(self): - self.total_taxes_and_charges = 0 - for tax in self.taxes: - if tax.rate: - tax.tax_amount = flt(self.total_sanctioned_amount) * flt(tax.rate / 100) - - tax.total = flt(tax.tax_amount) + flt(self.total_sanctioned_amount) - self.total_taxes_and_charges += flt(tax.tax_amount) - - self.grand_total = ( - flt(self.total_sanctioned_amount) - + flt(self.total_taxes_and_charges) - - flt(self.total_advance_amount) - ) - - def update_task(self): - task = frappe.get_doc("Task", self.task) - task.update_total_expense_claim() - task.save() - - def validate_advances(self): - self.total_advance_amount = 0 - for d in self.get("advances"): - ref_doc = frappe.db.get_value( - "Employee Advance", - d.employee_advance, - ["posting_date", "paid_amount", "claimed_amount", "advance_account"], - as_dict=1, - ) - d.posting_date = ref_doc.posting_date - d.advance_account = ref_doc.advance_account - d.advance_paid = ref_doc.paid_amount - d.unclaimed_amount = flt(ref_doc.paid_amount) - flt(ref_doc.claimed_amount) - - if d.allocated_amount and flt(d.allocated_amount) > flt(d.unclaimed_amount): - frappe.throw( - _("Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2}").format( - d.idx, d.allocated_amount, d.unclaimed_amount - ) - ) - - self.total_advance_amount += flt(d.allocated_amount) - - if self.total_advance_amount: - precision = self.precision("total_advance_amount") - if flt(self.total_advance_amount, precision) > flt(self.total_claimed_amount, precision): - frappe.throw(_("Total advance amount cannot be greater than total claimed amount")) - - if self.total_sanctioned_amount and flt(self.total_advance_amount, precision) > flt( - self.total_sanctioned_amount, precision - ): - frappe.throw(_("Total advance amount cannot be greater than total sanctioned amount")) - - def validate_sanctioned_amount(self): - for d in self.get("expenses"): - if flt(d.sanctioned_amount) > flt(d.amount): - frappe.throw( - _("Sanctioned Amount cannot be greater than Claim Amount in Row {0}.").format(d.idx) - ) - - def set_expense_account(self, validate=False): - for expense in self.expenses: - if not expense.default_account or not validate: - expense.default_account = get_expense_claim_account(expense.expense_type, self.company)[ - "account" - ] - - -def update_reimbursed_amount(doc, amount): - - doc.total_amount_reimbursed += amount - frappe.db.set_value( - "Expense Claim", doc.name, "total_amount_reimbursed", doc.total_amount_reimbursed - ) - - doc.set_status() - frappe.db.set_value("Expense Claim", doc.name, "status", doc.status) - - -@frappe.whitelist() -def make_bank_entry(dt, dn): - from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account - - expense_claim = frappe.get_doc(dt, dn) - default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Bank") - if not default_bank_cash_account: - default_bank_cash_account = get_default_bank_cash_account(expense_claim.company, "Cash") - - payable_amount = ( - flt(expense_claim.total_sanctioned_amount) - - flt(expense_claim.total_amount_reimbursed) - - flt(expense_claim.total_advance_amount) - ) - - je = frappe.new_doc("Journal Entry") - je.voucher_type = "Bank Entry" - je.company = expense_claim.company - je.remark = "Payment against Expense Claim: " + dn - - je.append( - "accounts", - { - "account": expense_claim.payable_account, - "debit_in_account_currency": payable_amount, - "reference_type": "Expense Claim", - "party_type": "Employee", - "party": expense_claim.employee, - "cost_center": erpnext.get_default_cost_center(expense_claim.company), - "reference_name": expense_claim.name, - }, - ) - - je.append( - "accounts", - { - "account": default_bank_cash_account.account, - "credit_in_account_currency": payable_amount, - "reference_type": "Expense Claim", - "reference_name": expense_claim.name, - "balance": default_bank_cash_account.balance, - "account_currency": default_bank_cash_account.account_currency, - "cost_center": erpnext.get_default_cost_center(expense_claim.company), - "account_type": default_bank_cash_account.account_type, - }, - ) - - return je.as_dict() - - -@frappe.whitelist() -def get_expense_claim_account_and_cost_center(expense_claim_type, company): - data = get_expense_claim_account(expense_claim_type, company) - cost_center = erpnext.get_default_cost_center(company) - - return {"account": data.get("account"), "cost_center": cost_center} - - -@frappe.whitelist() -def get_expense_claim_account(expense_claim_type, company): - account = frappe.db.get_value( - "Expense Claim Account", {"parent": expense_claim_type, "company": company}, "default_account" - ) - if not account: - frappe.throw( - _("Set the default account for the {0} {1}").format( - frappe.bold("Expense Claim Type"), get_link_to_form("Expense Claim Type", expense_claim_type) - ) - ) - - return {"account": account} - - -@frappe.whitelist() -def get_advances(employee, advance_id=None): - advance = frappe.qb.DocType("Employee Advance") - - query = frappe.qb.from_(advance).select( - advance.name, - advance.posting_date, - advance.paid_amount, - advance.claimed_amount, - advance.advance_account, - ) - - if not advance_id: - query = query.where( - (advance.docstatus == 1) - & (advance.employee == employee) - & (advance.paid_amount > 0) - & (advance.status.notin(["Claimed", "Returned", "Partly Claimed and Returned"])) - ) - else: - query = query.where(advance.name == advance_id) - - return query.run(as_dict=True) - - -@frappe.whitelist() -def get_expense_claim( - employee_name, company, employee_advance_name, posting_date, paid_amount, claimed_amount -): - default_payable_account = frappe.get_cached_value("Company", company, "default_payable_account") - default_cost_center = frappe.get_cached_value("Company", company, "cost_center") - - expense_claim = frappe.new_doc("Expense Claim") - expense_claim.company = company - expense_claim.employee = employee_name - expense_claim.payable_account = default_payable_account - expense_claim.cost_center = default_cost_center - expense_claim.is_paid = 1 if flt(paid_amount) else 0 - expense_claim.append( - "advances", - { - "employee_advance": employee_advance_name, - "posting_date": posting_date, - "advance_paid": flt(paid_amount), - "unclaimed_amount": flt(paid_amount) - flt(claimed_amount), - "allocated_amount": flt(paid_amount) - flt(claimed_amount), - }, - ) - - return expense_claim diff --git a/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py b/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py deleted file mode 100644 index 8b1acc619e..0000000000 --- a/erpnext/hr/doctype/expense_claim/expense_claim_dashboard.py +++ /dev/null @@ -1,12 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "reference_name", - "internal_links": {"Employee Advance": ["advances", "employee_advance"]}, - "transactions": [ - {"label": _("Payment"), "items": ["Payment Entry", "Journal Entry"]}, - {"label": _("Reference"), "items": ["Employee Advance"]}, - ], - } diff --git a/erpnext/hr/doctype/expense_claim/expense_claim_list.js b/erpnext/hr/doctype/expense_claim/expense_claim_list.js deleted file mode 100644 index 9bafc18562..0000000000 --- a/erpnext/hr/doctype/expense_claim/expense_claim_list.js +++ /dev/null @@ -1,12 +0,0 @@ -frappe.listview_settings['Expense Claim'] = { - add_fields: ["total_claimed_amount", "docstatus", "company"], - get_indicator: function(doc) { - if(doc.status == "Paid") { - return [__("Paid"), "green", "status,=,Paid"]; - }else if(doc.status == "Unpaid") { - return [__("Unpaid"), "orange", "status,=,Unpaid"]; - } else if(doc.status == "Rejected") { - return [__("Rejected"), "grey", "status,=,Rejected"]; - } - } -}; diff --git a/erpnext/hr/doctype/expense_claim/test_expense_claim.py b/erpnext/hr/doctype/expense_claim/test_expense_claim.py deleted file mode 100644 index 9b3d53a210..0000000000 --- a/erpnext/hr/doctype/expense_claim/test_expense_claim.py +++ /dev/null @@ -1,372 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import flt, nowdate, random_string - -from erpnext.accounts.doctype.account.test_account import create_account -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.expense_claim.expense_claim import make_bank_entry - -test_dependencies = ["Employee"] -company_name = "_Test Company 3" - - -class TestExpenseClaim(unittest.TestCase): - def tearDown(self): - frappe.db.rollback() - - def test_total_expense_claim_for_project(self): - frappe.db.sql("""delete from `tabTask`""") - frappe.db.sql("""delete from `tabProject`""") - frappe.db.sql("update `tabExpense Claim` set project = '', task = ''") - - project = frappe.get_doc({"project_name": "_Test Project 1", "doctype": "Project"}) - project.save() - - task = frappe.get_doc( - dict(doctype="Task", subject="_Test Project Task 1", status="Open", project=project.name) - ).insert() - - task_name = task.name - payable_account = get_payable_account(company_name) - - make_expense_claim( - payable_account, 300, 200, company_name, "Travel Expenses - _TC3", project.name, task_name - ) - - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200) - - expense_claim2 = make_expense_claim( - payable_account, 600, 500, company_name, "Travel Expenses - _TC3", project.name, task_name - ) - - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 700) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 700) - - expense_claim2.cancel() - - self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200) - self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200) - - def test_expense_claim_status(self): - payable_account = get_payable_account(company_name) - expense_claim = make_expense_claim( - payable_account, 300, 200, company_name, "Travel Expenses - _TC3" - ) - - je_dict = make_bank_entry("Expense Claim", expense_claim.name) - je = frappe.get_doc(je_dict) - je.posting_date = nowdate() - je.cheque_no = random_string(5) - je.cheque_date = nowdate() - je.submit() - - expense_claim = frappe.get_doc("Expense Claim", expense_claim.name) - self.assertEqual(expense_claim.status, "Paid") - - je.cancel() - expense_claim = frappe.get_doc("Expense Claim", expense_claim.name) - self.assertEqual(expense_claim.status, "Unpaid") - - # expense claim without any sanctioned amount should not have status as Paid - claim = make_expense_claim(payable_account, 1000, 0, "_Test Company", "Travel Expenses - _TC") - self.assertEqual(claim.total_sanctioned_amount, 0) - self.assertEqual(claim.status, "Submitted") - - # no gl entries created - gl_entry = frappe.get_all( - "GL Entry", {"voucher_type": "Expense Claim", "voucher_no": claim.name} - ) - self.assertEqual(len(gl_entry), 0) - - def test_expense_claim_against_fully_paid_advances(self): - from erpnext.hr.doctype.employee_advance.test_employee_advance import ( - get_advances_for_claim, - make_employee_advance, - make_payment_entry, - ) - - frappe.db.delete("Employee Advance") - - payable_account = get_payable_account("_Test Company") - claim = make_expense_claim( - payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - - advance = make_employee_advance(claim.employee) - pe = make_payment_entry(advance) - pe.submit() - - # claim for already paid out advances - claim = get_advances_for_claim(claim, advance.name) - claim.save() - claim.submit() - - self.assertEqual(claim.grand_total, 0) - self.assertEqual(claim.status, "Paid") - - def test_expense_claim_partially_paid_via_advance(self): - from erpnext.hr.doctype.employee_advance.test_employee_advance import ( - get_advances_for_claim, - make_employee_advance, - ) - from erpnext.hr.doctype.employee_advance.test_employee_advance import ( - make_payment_entry as make_advance_payment, - ) - - frappe.db.delete("Employee Advance") - - payable_account = get_payable_account("_Test Company") - claim = make_expense_claim( - payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - - # link advance for partial amount - advance = make_employee_advance(claim.employee, {"advance_amount": 500}) - pe = make_advance_payment(advance) - pe.submit() - - claim = get_advances_for_claim(claim, advance.name) - claim.save() - claim.submit() - - self.assertEqual(claim.grand_total, 500) - self.assertEqual(claim.status, "Unpaid") - - # reimburse remaning amount - make_payment_entry(claim, payable_account, 500) - claim.reload() - - self.assertEqual(claim.total_amount_reimbursed, 500) - self.assertEqual(claim.status, "Paid") - - def test_expense_claim_gl_entry(self): - payable_account = get_payable_account(company_name) - taxes = generate_taxes() - expense_claim = make_expense_claim( - payable_account, - 300, - 200, - company_name, - "Travel Expenses - _TC3", - do_not_submit=True, - taxes=taxes, - ) - expense_claim.submit() - - gl_entries = frappe.db.sql( - """select account, debit, credit - from `tabGL Entry` where voucher_type='Expense Claim' and voucher_no=%s - order by account asc""", - expense_claim.name, - as_dict=1, - ) - - self.assertTrue(gl_entries) - - expected_values = dict( - (d[0], d) - for d in [ - ["Output Tax CGST - _TC3", 18.0, 0.0], - [payable_account, 0.0, 218.0], - ["Travel Expenses - _TC3", 200.0, 0.0], - ] - ) - - for gle in gl_entries: - self.assertEqual(expected_values[gle.account][0], gle.account) - self.assertEqual(expected_values[gle.account][1], gle.debit) - self.assertEqual(expected_values[gle.account][2], gle.credit) - - def test_rejected_expense_claim(self): - payable_account = get_payable_account(company_name) - expense_claim = frappe.get_doc( - { - "doctype": "Expense Claim", - "employee": "_T-Employee-00001", - "payable_account": payable_account, - "approval_status": "Rejected", - "expenses": [ - { - "expense_type": "Travel", - "default_account": "Travel Expenses - _TC3", - "amount": 300, - "sanctioned_amount": 200, - } - ], - } - ) - expense_claim.submit() - - self.assertEqual(expense_claim.status, "Rejected") - self.assertEqual(expense_claim.total_sanctioned_amount, 0.0) - - gl_entry = frappe.get_all( - "GL Entry", {"voucher_type": "Expense Claim", "voucher_no": expense_claim.name} - ) - self.assertEqual(len(gl_entry), 0) - - def test_expense_approver_perms(self): - user = "test_approver_perm_emp@example.com" - make_employee(user, "_Test Company") - - # check doc shared - payable_account = get_payable_account("_Test Company") - expense_claim = make_expense_claim( - payable_account, 300, 200, "_Test Company", "Travel Expenses - _TC", do_not_submit=True - ) - expense_claim.expense_approver = user - expense_claim.save() - self.assertTrue(expense_claim.name in frappe.share.get_shared("Expense Claim", user)) - - # check shared doc revoked - expense_claim.reload() - expense_claim.expense_approver = "test@example.com" - expense_claim.save() - self.assertTrue(expense_claim.name not in frappe.share.get_shared("Expense Claim", user)) - - expense_claim.reload() - expense_claim.expense_approver = user - expense_claim.save() - - frappe.set_user(user) - expense_claim.reload() - expense_claim.status = "Approved" - expense_claim.submit() - frappe.set_user("Administrator") - - def test_multiple_payment_entries_against_expense(self): - # Creating expense claim - payable_account = get_payable_account("_Test Company") - expense_claim = make_expense_claim( - payable_account, 5500, 5500, "_Test Company", "Travel Expenses - _TC" - ) - expense_claim.save() - expense_claim.submit() - - # Payment entry 1: paying 500 - make_payment_entry(expense_claim, payable_account, 500) - outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts( - expense_claim - ) - self.assertEqual(outstanding_amount, 5000) - self.assertEqual(total_amount_reimbursed, 500) - - # Payment entry 1: paying 2000 - make_payment_entry(expense_claim, payable_account, 2000) - outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts( - expense_claim - ) - self.assertEqual(outstanding_amount, 3000) - self.assertEqual(total_amount_reimbursed, 2500) - - # Payment entry 1: paying 3000 - make_payment_entry(expense_claim, payable_account, 3000) - outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts( - expense_claim - ) - self.assertEqual(outstanding_amount, 0) - self.assertEqual(total_amount_reimbursed, 5500) - - -def get_payable_account(company): - return frappe.get_cached_value("Company", company, "default_payable_account") - - -def generate_taxes(): - parent_account = frappe.db.get_value( - "Account", {"company": company_name, "is_group": 1, "account_type": "Tax"}, "name" - ) - account = create_account( - company=company_name, - account_name="Output Tax CGST", - account_type="Tax", - parent_account=parent_account, - ) - return { - "taxes": [ - {"account_head": account, "rate": 9, "description": "CGST", "tax_amount": 10, "total": 210} - ] - } - - -def make_expense_claim( - payable_account, - amount, - sanctioned_amount, - company, - account, - project=None, - task_name=None, - do_not_submit=False, - taxes=None, -): - employee = frappe.db.get_value("Employee", {"status": "Active"}) - if not employee: - employee = make_employee("test_employee@expense_claim.com", company=company) - - currency, cost_center = frappe.db.get_value( - "Company", company, ["default_currency", "cost_center"] - ) - expense_claim = { - "doctype": "Expense Claim", - "employee": employee, - "payable_account": payable_account, - "approval_status": "Approved", - "company": company, - "currency": currency, - "expenses": [ - { - "expense_type": "Travel", - "default_account": account, - "currency": currency, - "amount": amount, - "sanctioned_amount": sanctioned_amount, - "cost_center": cost_center, - } - ], - } - if taxes: - expense_claim.update(taxes) - - expense_claim = frappe.get_doc(expense_claim) - - if project: - expense_claim.project = project - if task_name: - expense_claim.task = task_name - - if do_not_submit: - return expense_claim - expense_claim.submit() - return expense_claim - - -def get_outstanding_and_total_reimbursed_amounts(expense_claim): - outstanding_amount = flt( - frappe.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount") - ) - flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")) - total_amount_reimbursed = flt( - frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed") - ) - - return outstanding_amount, total_amount_reimbursed - - -def make_payment_entry(expense_claim, payable_account, amt): - from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry - - pe = get_payment_entry( - "Expense Claim", expense_claim.name, bank_account="_Test Bank USD - _TC", bank_amount=amt - ) - pe.reference_no = "1" - pe.reference_date = nowdate() - pe.source_exchange_rate = 1 - pe.paid_to = payable_account - pe.references[0].allocated_amount = amt - pe.insert() - pe.submit() diff --git a/erpnext/hr/doctype/expense_claim_account/__init__.py b/erpnext/hr/doctype/expense_claim_account/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json deleted file mode 100644 index c7d71d31c1..0000000000 --- a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-07-18 12:24:16.507860", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "default_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Default Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-18 12:39:29.709848", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Claim Account", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py deleted file mode 100644 index 0d46a22608..0000000000 --- a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class ExpenseClaimAccount(Document): - pass diff --git a/erpnext/hr/doctype/expense_claim_advance/__init__.py b/erpnext/hr/doctype/expense_claim_advance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json b/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json deleted file mode 100644 index aa479c8308..0000000000 --- a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "actions": [], - "creation": "2017-10-09 16:53:26.410762", - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee_advance", - "posting_date", - "advance_paid", - "column_break_4", - "unclaimed_amount", - "allocated_amount", - "advance_account" - ], - "fields": [ - { - "columns": 2, - "fieldname": "employee_advance", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee Advance", - "no_copy": 1, - "oldfieldname": "journal_voucher", - "oldfieldtype": "Link", - "options": "Employee Advance", - "print_width": "250px", - "reqd": 1, - "width": "250px" - }, - { - "columns": 2, - "fieldname": "posting_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Posting Date", - "read_only": 1 - }, - { - "columns": 2, - "fieldname": "advance_paid", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Advance Paid", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "columns": 2, - "fieldname": "unclaimed_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Unclaimed Amount", - "no_copy": 1, - "oldfieldname": "advance_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "print_width": "120px", - "read_only": 1, - "reqd": 1, - "width": "120px" - }, - { - "columns": 2, - "fieldname": "allocated_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Allocated Amount", - "no_copy": 1, - "oldfieldname": "allocated_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "print_width": "120px", - "width": "120px" - }, - { - "fieldname": "advance_account", - "fieldtype": "Link", - "hidden": 1, - "label": "Advance Account", - "options": "Account" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - } - ], - "istable": 1, - "links": [], - "modified": "2021-11-22 16:33:58.515819", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Claim Advance", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py b/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py deleted file mode 100644 index 68b2963f2b..0000000000 --- a/erpnext/hr/doctype/expense_claim_advance/expense_claim_advance.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class ExpenseClaimAdvance(Document): - pass diff --git a/erpnext/hr/doctype/expense_claim_detail/README.md b/erpnext/hr/doctype/expense_claim_detail/README.md deleted file mode 100644 index 4a747e2ea5..0000000000 --- a/erpnext/hr/doctype/expense_claim_detail/README.md +++ /dev/null @@ -1 +0,0 @@ -Detail of expense in parent Expense Claim. \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_detail/__init__.py b/erpnext/hr/doctype/expense_claim_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json b/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json deleted file mode 100644 index 6edbcb5c39..0000000000 --- a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "actions": [], - "creation": "2013-02-22 01:27:46", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "expense_date", - "column_break_2", - "expense_type", - "default_account", - "section_break_4", - "description", - "section_break_6", - "amount", - "column_break_8", - "sanctioned_amount", - "accounting_dimensions_section", - "cost_center", - "dimension_col_break" - ], - "fields": [ - { - "fieldname": "expense_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Expense Date", - "oldfieldname": "expense_date", - "oldfieldtype": "Date", - "print_width": "150px", - "width": "150px" - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fieldname": "expense_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Expense Claim Type", - "oldfieldname": "expense_type", - "oldfieldtype": "Link", - "options": "Expense Claim Type", - "print_width": "150px", - "reqd": 1, - "width": "150px" - }, - { - "depends_on": "expense_type", - "fieldname": "default_account", - "fieldtype": "Link", - "hidden": 1, - "label": "Default Account", - "options": "Account", - "read_only": 1 - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "fieldname": "description", - "fieldtype": "Text Editor", - "in_list_view": 1, - "label": "Description", - "oldfieldname": "description", - "oldfieldtype": "Small Text", - "print_width": "300px", - "width": "300px" - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break" - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "oldfieldname": "claim_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "print_width": "150px", - "reqd": 1, - "width": "150px" - }, - { - "fieldname": "column_break_8", - "fieldtype": "Column Break" - }, - { - "fieldname": "sanctioned_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Sanctioned Amount", - "oldfieldname": "sanctioned_amount", - "oldfieldtype": "Currency", - "options": "Company:company:default_currency", - "print_width": "150px", - "width": "150px" - }, - { - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "options": "Cost Center" - }, - { - "fieldname": "accounting_dimensions_section", - "fieldtype": "Section Break", - "label": "Accounting Dimensions" - }, - { - "fieldname": "dimension_col_break", - "fieldtype": "Column Break" - } - ], - "idx": 1, - "istable": 1, - "links": [], - "modified": "2021-11-26 14:23:45.539922", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Claim Detail", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py b/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py deleted file mode 100644 index f58f1287cb..0000000000 --- a/erpnext/hr/doctype/expense_claim_detail/expense_claim_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from frappe.model.document import Document - - -class ExpenseClaimDetail(Document): - pass diff --git a/erpnext/hr/doctype/expense_claim_type/README.md b/erpnext/hr/doctype/expense_claim_type/README.md deleted file mode 100644 index 13a654eab2..0000000000 --- a/erpnext/hr/doctype/expense_claim_type/README.md +++ /dev/null @@ -1 +0,0 @@ -Type of expense for Expense Claim. \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_type/__init__.py b/erpnext/hr/doctype/expense_claim_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js deleted file mode 100644 index d007e1a6c2..0000000000 --- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.ui.form.on("Expense Claim Type", { - refresh: function(frm) { - frm.fields_dict["accounts"].grid.get_field("default_account").get_query = function(doc, cdt, cdn) { - var d = locals[cdt][cdn]; - return { - filters: { - "is_group": 0, - "root_type": frm.doc.deferred_expense_account ? "Asset" : "Expense", - 'company': d.company - } - } - } - } -}) diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json deleted file mode 100644 index 02ab4cb6ac..0000000000 --- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:expense_type", - "creation": "2012-03-27 14:35:55", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "deferred_expense_account", - "expense_type", - "accounts", - "description" - ], - "fields": [ - { - "fieldname": "expense_type", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Expense Claim Type", - "oldfieldname": "expense_type", - "oldfieldtype": "Data", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Description", - "oldfieldname": "description", - "oldfieldtype": "Small Text", - "width": "300px" - }, - { - "fieldname": "accounts", - "fieldtype": "Table", - "label": "Accounts", - "options": "Expense Claim Account" - }, - { - "default": "0", - "fieldname": "deferred_expense_account", - "fieldtype": "Check", - "label": "Deferred Expense Account" - } - ], - "icon": "fa fa-flag", - "idx": 1, - "links": [], - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Claim Type", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "read": 1, - "role": "Employee" - } - ], - "sort_field": "modified", - "sort_order": "ASC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py deleted file mode 100644 index 6d29f7d8e7..0000000000 --- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class ExpenseClaimType(Document): - def validate(self): - self.validate_accounts() - self.validate_repeating_companies() - - def validate_repeating_companies(self): - """Error when Same Company is entered multiple times in accounts""" - accounts_list = [] - for entry in self.accounts: - accounts_list.append(entry.company) - - if len(accounts_list) != len(set(accounts_list)): - frappe.throw(_("Same Company is entered more than once")) - - def validate_accounts(self): - for entry in self.accounts: - """Error when Company of Ledger account doesn't match with Company Selected""" - if frappe.db.get_value("Account", entry.default_account, "company") != entry.company: - frappe.throw( - _("Account {0} does not match with Company {1}").format(entry.default_account, entry.company) - ) diff --git a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py b/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py deleted file mode 100644 index 62348e2825..0000000000 --- a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Expense Claim Type') - - -class TestExpenseClaimType(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/__init__.py b/erpnext/hr/doctype/expense_taxes_and_charges/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json deleted file mode 100644 index 2f7b8fcf67..0000000000 --- a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "actions": [], - "autoname": "hash", - "creation": "2019-06-03 11:42:33.123976", - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "account_head", - "rate", - "col_break1", - "description", - "section_break_6", - "tax_amount", - "column_break_8", - "total", - "accounting_dimensions_section", - "cost_center", - "dimension_col_break" - ], - "fields": [ - { - "fieldname": "col_break1", - "fieldtype": "Column Break" - }, - { - "columns": 2, - "fieldname": "account_head", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Account Head", - "oldfieldname": "account_head", - "oldfieldtype": "Link", - "options": "Account", - "reqd": 1 - }, - { - "default": ":Company", - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "oldfieldname": "cost_center", - "oldfieldtype": "Link", - "options": "Cost Center" - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Description", - "oldfieldname": "description", - "oldfieldtype": "Small Text", - "print_width": "300px", - "reqd": 1, - "width": "300px" - }, - { - "columns": 2, - "fieldname": "rate", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Rate", - "oldfieldname": "rate", - "oldfieldtype": "Currency" - }, - { - "columns": 2, - "fieldname": "tax_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "options": "currency" - }, - { - "columns": 2, - "fieldname": "total", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break" - }, - { - "fieldname": "column_break_8", - "fieldtype": "Column Break" - }, - { - "fieldname": "accounting_dimensions_section", - "fieldtype": "Section Break", - "label": "Accounting Dimensions" - }, - { - "fieldname": "dimension_col_break", - "fieldtype": "Column Break" - } - ], - "istable": 1, - "links": [], - "modified": "2021-10-26 20:27:36.027728", - "modified_by": "Administrator", - "module": "HR", - "name": "Expense Taxes and Charges", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1 -} diff --git a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py b/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py deleted file mode 100644 index a28ef57b3f..0000000000 --- a/erpnext/hr/doctype/expense_taxes_and_charges/expense_taxes_and_charges.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class ExpenseTaxesandCharges(Document): - pass diff --git a/erpnext/hr/doctype/full_and_final_asset/__init__.py b/erpnext/hr/doctype/full_and_final_asset/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js deleted file mode 100644 index 1965b46651..0000000000 --- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Full and Final Asset', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json deleted file mode 100644 index 3ad8335049..0000000000 --- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "actions": [], - "creation": "2021-06-28 13:36:58.658985", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "reference", - "asset_name", - "date", - "status", - "description" - ], - "fields": [ - { - "fieldname": "reference", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Reference", - "options": "Asset Movement", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "options": "Owned\nReturned", - "reqd": 1 - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Description" - }, - { - "fieldname": "asset_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Asset Name", - "read_only": 1 - }, - { - "fieldname": "date", - "fieldtype": "Datetime", - "in_list_view": 1, - "label": "Date", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-07-15 15:17:31.309834", - "modified_by": "Administrator", - "module": "HR", - "name": "Full and Final Asset", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py b/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py deleted file mode 100644 index 661af7da88..0000000000 --- a/erpnext/hr/doctype/full_and_final_asset/full_and_final_asset.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class FullandFinalAsset(Document): - pass diff --git a/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py b/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py deleted file mode 100644 index 9afe0f2c16..0000000000 --- a/erpnext/hr/doctype/full_and_final_asset/test_full_and_final_asset.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestFullandFinalAsset(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/__init__.py b/erpnext/hr/doctype/full_and_final_outstanding_statement/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json b/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json deleted file mode 100644 index be242e2c44..0000000000 --- a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "actions": [], - "creation": "2021-06-28 13:32:02.167317", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "component", - "reference_document_type", - "reference_document", - "account", - "paid_via_salary_slip", - "column_break_4", - "amount", - "status", - "remark" - ], - "fields": [ - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "columns": 2, - "default": "Unsettled", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "options": "Settled\nUnsettled" - }, - { - "fieldname": "remark", - "fieldtype": "Small Text", - "label": "Remark" - }, - { - "columns": 2, - "depends_on": "reference_document_type", - "fieldname": "reference_document", - "fieldtype": "Dynamic Link", - "in_list_view": 1, - "label": "Reference Document", - "mandatory_depends_on": "reference_document_type", - "options": "reference_document_type", - "search_index": 1 - }, - { - "columns": 2, - "fieldname": "component", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Component", - "reqd": 1 - }, - { - "fieldname": "account", - "fieldtype": "Link", - "label": "Account", - "options": "Account" - }, - { - "columns": 2, - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount" - }, - { - "columns": 2, - "fieldname": "reference_document_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Reference Document Type", - "options": "DocType" - }, - { - "default": "0", - "fieldname": "paid_via_salary_slip", - "fieldtype": "Check", - "label": "Paid via Salary Slip" - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-07-20 16:59:34.447934", - "modified_by": "Administrator", - "module": "HR", - "name": "Full and Final Outstanding Statement", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py b/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py deleted file mode 100644 index 4b239abec3..0000000000 --- a/erpnext/hr/doctype/full_and_final_outstanding_statement/full_and_final_outstanding_statement.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class FullandFinalOutstandingStatement(Document): - pass diff --git a/erpnext/hr/doctype/full_and_final_statement/__init__.py b/erpnext/hr/doctype/full_and_final_statement/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js deleted file mode 100644 index 074d85b709..0000000000 --- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.js +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Full and Final Statement', { - refresh: function(frm) { - frm.events.set_queries(frm, "payables"); - frm.events.set_queries(frm, "receivables"); - - if (frm.doc.docstatus == 1 && frm.doc.status == "Unpaid") { - frm.add_custom_button(__("Create Journal Entry"), function () { - frm.events.create_journal_entry(frm); - }); - } - }, - - set_queries: function(frm, type) { - frm.set_query("reference_document_type", type, function () { - let modules = ["HR", "Payroll", "Loan Management"]; - return { - filters: { - istable: 0, - issingle: 0, - module: ["In", modules] - } - }; - }); - - let filters = {}; - - frm.set_query('reference_document', type, function(doc, cdt, cdn) { - let fnf_doc = frappe.get_doc(cdt, cdn); - - frappe.model.with_doctype(fnf_doc.reference_document_type, function() { - if (frappe.model.is_tree(fnf_doc.reference_document_type)) { - filters['is_group'] = 0; - } - - if (frappe.meta.has_field(fnf_doc.reference_document_type, 'company')) { - filters['company'] = frm.doc.company; - } - - if (frappe.meta.has_field(fnf_doc.reference_document_type, 'employee')) { - filters['employee'] = frm.doc.employee; - } - }); - - return { - filters: filters - }; - }); - }, - - employee: function(frm) { - frm.events.get_outstanding_statements(frm); - }, - - get_outstanding_statements: function(frm) { - if (frm.doc.employee) { - frappe.call({ - method: "get_outstanding_statements", - doc: frm.doc, - callback: function() { - frm.refresh(); - } - }); - } - }, - - create_journal_entry: function(frm) { - frappe.call({ - method: "create_journal_entry", - doc: frm.doc, - callback: function(r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - } -}); - -frappe.ui.form.on("Full and Final Outstanding Statement", { - reference_document: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if (child.reference_document_type && child.reference_document) { - frappe.call({ - method: "erpnext.hr.doctype.full_and_final_statement.full_and_final_statement.get_account_and_amount", - args: { - ref_doctype: child.reference_document_type, - ref_document: child.reference_document - }, - callback: function(r) { - if (r.message) { - frappe.model.set_value(cdt, cdn, "account", r.message[0]); - frappe.model.set_value(cdt, cdn, "amount", r.message[1]); - } - } - }); - } - }, - - amount: function(frm) { - var total_payable_amount = 0; - var total_receivable_amount = 0; - - frm.doc.payables.forEach(element => { - total_payable_amount = total_payable_amount + element.amount; - }); - - frm.doc.receivables.forEach(element => { - total_receivable_amount = total_receivable_amount + element.amount; - }); - frm.set_value("total_payable_amount", flt(total_payable_amount)); - frm.set_value("total_receivable_amount", flt(total_receivable_amount)); - } -}); diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json deleted file mode 100644 index ebcf36dfd9..0000000000 --- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "actions": [], - "autoname": "HR-FNF-.YYYY.-.#####", - "creation": "2021-06-28 13:17:36.050459", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "transaction_date", - "column_break_12", - "company", - "status", - "amended_from", - "employee_details_section", - "date_of_joining", - "relieving_date", - "column_break_4", - "designation", - "department", - "section_break_8", - "payables", - "section_break_10", - "receivables", - "totals_section", - "total_payable_amount", - "column_break_21", - "total_receivable_amount", - "section_break_15", - "assets_allocated" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "default": "Unpaid", - "fieldname": "status", - "fieldtype": "Select", - "label": "Status", - "options": "Paid\nUnpaid", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Full and Final Statement", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "section_break_8", - "fieldtype": "Section Break", - "label": "Payables" - }, - { - "fieldname": "section_break_10", - "fieldtype": "Section Break", - "label": "Receivables" - }, - { - "fieldname": "assets_allocated", - "fieldtype": "Table", - "options": "Full and Final Asset" - }, - { - "fetch_from": "employee.relieving_date", - "fieldname": "relieving_date", - "fieldtype": "Date", - "label": "Relieving Date ", - "read_only": 1, - "reqd": 1 - }, - { - "fetch_from": "employee.date_of_joining", - "fieldname": "date_of_joining", - "fieldtype": "Date", - "label": "Date of Joining", - "read_only": 1 - }, - { - "fieldname": "section_break_15", - "fieldtype": "Section Break", - "label": "Assets Allocated" - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Company", - "options": "Company", - "read_only": 1 - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fieldname": "payables", - "fieldtype": "Table", - "options": "Full and Final Outstanding Statement" - }, - { - "fieldname": "receivables", - "fieldtype": "Table", - "options": "Full and Final Outstanding Statement" - }, - { - "fieldname": "employee_details_section", - "fieldtype": "Section Break", - "label": "Employee Details" - }, - { - "fieldname": "transaction_date", - "fieldtype": "Date", - "in_standard_filter": 1, - "label": "Transaction Date", - "reqd": 1 - }, - { - "fieldname": "totals_section", - "fieldtype": "Section Break", - "label": "Totals" - }, - { - "fieldname": "total_payable_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Payable Amount", - "read_only": 1 - }, - { - "fieldname": "column_break_21", - "fieldtype": "Column Break" - }, - { - "fieldname": "total_receivable_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Receivable Amount", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-08-30 21:11:09.892560", - "modified_by": "Administrator", - "module": "HR", - "name": "Full and Final Statement", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py deleted file mode 100644 index 8137a0de14..0000000000 --- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement.py +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, get_link_to_form, today - - -class FullandFinalStatement(Document): - def validate(self): - self.get_outstanding_statements() - if self.docstatus == 1: - self.validate_settlement("payables") - self.validate_settlement("receivables") - self.validate_asset() - - def validate_settlement(self, component_type): - for data in self.get(component_type, []): - if data.status == "Unsettled": - frappe.throw(_("Settle all Payables and Receivables before submission")) - - def validate_asset(self): - for data in self.assets_allocated: - if data.status == "Owned": - frappe.throw(_("All allocated assets should be returned before submission")) - - @frappe.whitelist() - def get_outstanding_statements(self): - if self.relieving_date: - if not len(self.get("payables", [])): - components = self.get_payable_component() - self.create_component_row(components, "payables") - if not len(self.get("receivables", [])): - components = self.get_receivable_component() - self.create_component_row(components, "receivables") - - if not len(self.get("assets_allocated", [])): - for data in self.get_assets_movement(): - self.append("assets_allocated", data) - else: - frappe.throw( - _("Set Relieving Date for Employee: {0}").format(get_link_to_form("Employee", self.employee)) - ) - - def create_component_row(self, components, component_type): - for component in components: - self.append( - component_type, - { - "status": "Unsettled", - "reference_document_type": component if component != "Bonus" else "Additional Salary", - "component": component, - }, - ) - - def get_payable_component(self): - return [ - "Salary Slip", - "Gratuity", - "Expense Claim", - "Bonus", - "Leave Encashment", - ] - - def get_receivable_component(self): - return [ - "Loan", - "Employee Advance", - ] - - def get_assets_movement(self): - asset_movements = frappe.get_all( - "Asset Movement Item", - filters={"docstatus": 1}, - fields=["asset", "from_employee", "to_employee", "parent", "asset_name"], - or_filters={"from_employee": self.employee, "to_employee": self.employee}, - ) - - data = [] - inward_movements = [] - outward_movements = [] - for movement in asset_movements: - if movement.to_employee and movement.to_employee == self.employee: - inward_movements.append(movement) - - if movement.from_employee and movement.from_employee == self.employee: - outward_movements.append(movement) - - for movement in inward_movements: - outwards_count = [movement.asset for movement in outward_movements].count(movement.asset) - inwards_counts = [movement.asset for movement in inward_movements].count(movement.asset) - - if inwards_counts > outwards_count: - data.append( - { - "reference": movement.parent, - "asset_name": movement.asset_name, - "date": frappe.db.get_value("Asset Movement", movement.parent, "transaction_date"), - "status": "Owned", - } - ) - return data - - @frappe.whitelist() - def create_journal_entry(self): - precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency") - jv = frappe.new_doc("Journal Entry") - jv.company = self.company - jv.voucher_type = "Bank Entry" - jv.posting_date = today() - - difference = self.total_payable_amount - self.total_receivable_amount - - for data in self.payables: - if data.amount > 0 and not data.paid_via_salary_slip: - account_dict = { - "account": data.account, - "debit_in_account_currency": flt(data.amount, precision), - } - if data.reference_document_type == "Expense Claim": - account_dict["party_type"] = "Employee" - account_dict["party"] = self.employee - - jv.append("accounts", account_dict) - - for data in self.receivables: - if data.amount > 0: - account_dict = { - "account": data.account, - "credit_in_account_currency": flt(data.amount, precision), - } - if data.reference_document_type == "Employee Advance": - account_dict["party_type"] = "Employee" - account_dict["party"] = self.employee - - jv.append("accounts", account_dict) - - jv.append( - "accounts", - { - "credit_in_account_currency": difference if difference > 0 else 0, - "debit_in_account_currency": -(difference) if difference < 0 else 0, - "reference_type": self.doctype, - "reference_name": self.name, - }, - ) - return jv - - -@frappe.whitelist() -def get_account_and_amount(ref_doctype, ref_document): - if not ref_doctype or not ref_document: - return None - - if ref_doctype == "Salary Slip": - salary_details = frappe.db.get_value( - "Salary Slip", ref_document, ["payroll_entry", "net_pay"], as_dict=1 - ) - amount = salary_details.net_pay - payable_account = ( - frappe.db.get_value("Payroll Entry", salary_details.payroll_entry, "payroll_payable_account") - if salary_details.payroll_entry - else None - ) - return [payable_account, amount] - - if ref_doctype == "Gratuity": - payable_account, amount = frappe.db.get_value( - "Gratuity", ref_document, ["payable_account", "amount"] - ) - return [payable_account, amount] - - if ref_doctype == "Expense Claim": - details = frappe.db.get_value( - "Expense Claim", - ref_document, - ["payable_account", "grand_total", "total_amount_reimbursed", "total_advance_amount"], - as_dict=True, - ) - payable_account = details.payable_account - amount = details.grand_total - (details.total_amount_reimbursed + details.total_advance_amount) - return [payable_account, amount] - - if ref_doctype == "Loan": - details = frappe.db.get_value( - "Loan", ref_document, ["payment_account", "total_payment", "total_amount_paid"], as_dict=1 - ) - payment_account = details.payment_account - amount = details.total_payment - details.total_amount_paid - return [payment_account, amount] - - if ref_doctype == "Employee Advance": - details = frappe.db.get_value( - "Employee Advance", - ref_document, - ["advance_account", "paid_amount", "claimed_amount", "return_amount"], - as_dict=1, - ) - payment_account = details.advance_account - amount = details.paid_amount - (details.claimed_amount + details.return_amount) - return [payment_account, amount] diff --git a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js b/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js deleted file mode 100644 index 4aedec7c89..0000000000 --- a/erpnext/hr/doctype/full_and_final_statement/full_and_final_statement_list.js +++ /dev/null @@ -1,11 +0,0 @@ -frappe.listview_settings["Full and Final Statement"] = { - get_indicator: function(doc) { - var colors = { - "Draft": "red", - "Unpaid": "orange", - "Paid": "green", - "Cancelled": "red" - }; - return [__(doc.status), colors[doc.status], "status,=," + doc.status]; - } -}; diff --git a/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py b/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py deleted file mode 100644 index 8c6723f60e..0000000000 --- a/erpnext/hr/doctype/full_and_final_statement/test_full_and_final_statement.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, today - -from erpnext.assets.doctype.asset.test_asset import create_asset_data -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt - - -class TestFullandFinalStatement(unittest.TestCase): - def setUp(self): - create_asset_data() - - def tearDown(self): - frappe.db.sql("Delete from `tabFull and Final Statement`") - frappe.db.sql("Delete from `tabAsset`") - frappe.db.sql("Delete from `tabAsset Movement`") - - def test_check_bootstraped_data_asset_movement_and_jv_creation(self): - employee = make_employee("test_fnf@example.com", company="_Test Company") - movement = create_asset_movement(employee) - frappe.db.set_value("Employee", employee, "relieving_date", add_days(today(), 30)) - fnf = create_full_and_final_statement(employee) - - payables_bootstraped_component = [ - "Salary Slip", - "Gratuity", - "Expense Claim", - "Bonus", - "Leave Encashment", - ] - - receivable_bootstraped_component = ["Loan", "Employee Advance"] - - # checking payable s and receivables bootstraped value - self.assertEqual([payable.component for payable in fnf.payables], payables_bootstraped_component) - self.assertEqual( - [receivable.component for receivable in fnf.receivables], receivable_bootstraped_component - ) - - # checking allocated asset - self.assertIn(movement, [asset.reference for asset in fnf.assets_allocated]) - - -def create_full_and_final_statement(employee): - fnf = frappe.new_doc("Full and Final Statement") - fnf.employee = employee - fnf.transaction_date = today() - fnf.save() - return fnf - - -def create_asset_movement(employee): - asset_name = create_asset() - movement = frappe.new_doc("Asset Movement") - movement.company = "_Test Company" - movement.purpose = "Issue" - movement.transaction_date = today() - - movement.append("assets", {"asset": asset_name, "to_employee": employee}) - - movement.save() - movement.submit() - return movement.name - - -def create_asset(): - pr = make_purchase_receipt( - item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location" - ) - - asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") - asset = frappe.get_doc("Asset", asset_name) - asset.calculate_depreciation = 0 - asset.available_for_use_date = today() - asset.submit() - return asset_name diff --git a/erpnext/hr/doctype/grievance_type/__init__.py b/erpnext/hr/doctype/grievance_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.js b/erpnext/hr/doctype/grievance_type/grievance_type.js deleted file mode 100644 index 425f2fd5b5..0000000000 --- a/erpnext/hr/doctype/grievance_type/grievance_type.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Grievance Type', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.json b/erpnext/hr/doctype/grievance_type/grievance_type.json deleted file mode 100644 index 1dce00a0e2..0000000000 --- a/erpnext/hr/doctype/grievance_type/grievance_type.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "actions": [], - "autoname": "Prompt", - "creation": "2021-05-11 12:41:50.256071", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "section_break_5", - "description" - ], - "fields": [ - { - "fieldname": "section_break_5", - "fieldtype": "Section Break" - }, - { - "fieldname": "description", - "fieldtype": "Text", - "label": "Description" - } - ], - "index_web_pages_for_search": 1, - "links": [], - "modified": "2021-06-21 12:54:37.764712", - "modified_by": "Administrator", - "module": "HR", - "name": "Grievance Type", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/grievance_type/test_grievance_type.py b/erpnext/hr/doctype/grievance_type/test_grievance_type.py deleted file mode 100644 index 481f4e58a7..0000000000 --- a/erpnext/hr/doctype/grievance_type/test_grievance_type.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestGrievanceType(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/holiday/__init__.py b/erpnext/hr/doctype/holiday/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/holiday_list/__init__.py b/erpnext/hr/doctype/holiday_list/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/hr_settings/__init__.py b/erpnext/hr/doctype/hr_settings/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.js b/erpnext/hr/doctype/hr_settings/hr_settings.js deleted file mode 100644 index 6e26a1fa71..0000000000 --- a/erpnext/hr/doctype/hr_settings/hr_settings.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('HR Settings', { -}); - -frappe.tour['HR Settings'] = [ - { - fieldname: 'emp_created_by', - title: 'Employee Naming By', - description: __('Employee can be named by Employee ID if you assign one, or via Naming Series. Select your preference here.'), - }, - { - fieldname: 'standard_working_hours', - title: 'Standard Working Hours', - description: __('Enter the Standard Working Hours for a normal work day. These hours will be used in calculations of reports such as Employee Hours Utilization and Project Profitability analysis.'), - }, - { - fieldname: 'leave_and_expense_claim_settings', - title: 'Leave and Expense Clain Settings', - description: __('Review various other settings related to Employee Leaves and Expense Claim') - } -]; diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.json b/erpnext/hr/doctype/hr_settings/hr_settings.json deleted file mode 100644 index f9a3e05fc3..0000000000 --- a/erpnext/hr/doctype/hr_settings/hr_settings.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "actions": [], - "creation": "2013-08-02 13:45:23", - "doctype": "DocType", - "document_type": "Other", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee_settings", - "emp_created_by", - "standard_working_hours", - "column_break_9", - "retirement_age", - "reminders_section", - "send_birthday_reminders", - "column_break_11", - "send_work_anniversary_reminders", - "column_break_18", - "send_holiday_reminders", - "frequency", - "leave_and_expense_claim_settings", - "send_leave_notification", - "leave_approval_notification_template", - "leave_status_notification_template", - "leave_approver_mandatory_in_leave_application", - "restrict_backdated_leave_application", - "role_allowed_to_create_backdated_leave_application", - "column_break_29", - "expense_approver_mandatory_in_expense_claim", - "show_leaves_of_all_department_members_in_calendar", - "auto_leave_encashment", - "hiring_settings_section", - "check_vacancies", - "send_interview_reminder", - "interview_reminder_template", - "remind_before", - "column_break_4", - "send_interview_feedback_reminder", - "feedback_reminder_notification_template", - "employee_exit_section", - "exit_questionnaire_web_form", - "column_break_34", - "exit_questionnaire_notification_template" - ], - "fields": [ - { - "fieldname": "employee_settings", - "fieldtype": "Section Break", - "label": "Employee Settings" - }, - { - "fieldname": "retirement_age", - "fieldtype": "Data", - "label": "Retirement Age (In Years)" - }, - { - "default": "Naming Series", - "description": "Employee records are created using the selected option", - "fieldname": "emp_created_by", - "fieldtype": "Select", - "label": "Employee Naming By", - "options": "Naming Series\nEmployee Number\nFull Name" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "default": "1", - "fieldname": "expense_approver_mandatory_in_expense_claim", - "fieldtype": "Check", - "label": "Expense Approver Mandatory In Expense Claim" - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "default": "1", - "fieldname": "leave_approver_mandatory_in_leave_application", - "fieldtype": "Check", - "label": "Leave Approver Mandatory In Leave Application" - }, - { - "default": "0", - "fieldname": "show_leaves_of_all_department_members_in_calendar", - "fieldtype": "Check", - "label": "Show Leaves Of All Department Members In Calendar" - }, - { - "default": "0", - "fieldname": "auto_leave_encashment", - "fieldtype": "Check", - "label": "Auto Leave Encashment" - }, - { - "depends_on": "eval:doc.restrict_backdated_leave_application == 1", - "fieldname": "role_allowed_to_create_backdated_leave_application", - "fieldtype": "Link", - "label": "Role Allowed to Create Backdated Leave Application", - "mandatory_depends_on": "eval:doc.restrict_backdated_leave_application == 1", - "options": "Role" - }, - { - "default": "1", - "fieldname": "send_leave_notification", - "fieldtype": "Check", - "label": "Send Leave Notification" - }, - { - "depends_on": "eval: doc.send_leave_notification == 1", - "fieldname": "leave_approval_notification_template", - "fieldtype": "Link", - "label": "Leave Approval Notification Template", - "mandatory_depends_on": "eval: doc.send_leave_notification == 1", - "options": "Email Template" - }, - { - "depends_on": "eval: doc.send_leave_notification == 1", - "fieldname": "leave_status_notification_template", - "fieldtype": "Link", - "label": "Leave Status Notification Template", - "mandatory_depends_on": "eval: doc.send_leave_notification == 1", - "options": "Email Template" - }, - { - "fieldname": "standard_working_hours", - "fieldtype": "Int", - "label": "Standard Working Hours" - }, - { - "collapsible": 1, - "fieldname": "leave_and_expense_claim_settings", - "fieldtype": "Section Break", - "label": "Leave and Expense Claim Settings" - }, - { - "default": "00:15:00", - "depends_on": "send_interview_reminder", - "fieldname": "remind_before", - "fieldtype": "Time", - "label": "Remind Before" - }, - { - "collapsible": 1, - "fieldname": "reminders_section", - "fieldtype": "Section Break", - "label": "Reminders" - }, - { - "default": "1", - "fieldname": "send_holiday_reminders", - "fieldtype": "Check", - "label": "Holidays" - }, - { - "default": "1", - "fieldname": "send_work_anniversary_reminders", - "fieldtype": "Check", - "label": "Work Anniversaries " - }, - { - "default": "Weekly", - "depends_on": "eval:doc.send_holiday_reminders", - "fieldname": "frequency", - "fieldtype": "Select", - "label": "Set the frequency for holiday reminders", - "mandatory_depends_on": "send_holiday_reminders", - "options": "Weekly\nMonthly" - }, - { - "default": "1", - "fieldname": "send_birthday_reminders", - "fieldtype": "Check", - "label": "Birthdays" - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "send_interview_reminder", - "fieldtype": "Check", - "label": "Send Interview Reminder" - }, - { - "default": "0", - "fieldname": "send_interview_feedback_reminder", - "fieldtype": "Check", - "label": "Send Interview Feedback Reminder" - }, - { - "fieldname": "column_break_29", - "fieldtype": "Column Break" - }, - { - "depends_on": "send_interview_feedback_reminder", - "fieldname": "feedback_reminder_notification_template", - "fieldtype": "Link", - "label": "Feedback Reminder Notification Template", - "mandatory_depends_on": "send_interview_feedback_reminder", - "options": "Email Template" - }, - { - "depends_on": "send_interview_reminder", - "fieldname": "interview_reminder_template", - "fieldtype": "Link", - "label": "Interview Reminder Notification Template", - "mandatory_depends_on": "send_interview_reminder", - "options": "Email Template" - }, - { - "default": "0", - "fieldname": "restrict_backdated_leave_application", - "fieldtype": "Check", - "label": "Restrict Backdated Leave Application" - }, - { - "fieldname": "hiring_settings_section", - "fieldtype": "Section Break", - "label": "Hiring Settings" - }, - { - "default": "0", - "fieldname": "check_vacancies", - "fieldtype": "Check", - "label": "Check Vacancies On Job Offer Creation" - }, - { - "fieldname": "employee_exit_section", - "fieldtype": "Section Break", - "label": "Employee Exit Settings" - }, - { - "fieldname": "exit_questionnaire_web_form", - "fieldtype": "Link", - "label": "Exit Questionnaire Web Form", - "options": "Web Form" - }, - { - "fieldname": "exit_questionnaire_notification_template", - "fieldtype": "Link", - "label": "Exit Questionnaire Notification Template", - "options": "Email Template" - }, - { - "fieldname": "column_break_34", - "fieldtype": "Column Break" - } - ], - "icon": "fa fa-cog", - "idx": 1, - "issingle": 1, - "links": [], - "modified": "2021-12-05 14:48:10.884253", - "modified_by": "Administrator", - "module": "HR", - "name": "HR Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.py b/erpnext/hr/doctype/hr_settings/hr_settings.py deleted file mode 100644 index 72a49e285a..0000000000 --- a/erpnext/hr/doctype/hr_settings/hr_settings.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - -import frappe -from frappe.model.document import Document -from frappe.utils import format_date - -# Wether to proceed with frequency change -PROCEED_WITH_FREQUENCY_CHANGE = False - - -class HRSettings(Document): - def validate(self): - self.set_naming_series() - - # Based on proceed flag - global PROCEED_WITH_FREQUENCY_CHANGE - if not PROCEED_WITH_FREQUENCY_CHANGE: - self.validate_frequency_change() - PROCEED_WITH_FREQUENCY_CHANGE = False - - def set_naming_series(self): - from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series - - set_by_naming_series( - "Employee", - "employee_number", - self.get("emp_created_by") == "Naming Series", - hide_name_field=True, - ) - - def validate_frequency_change(self): - weekly_job, monthly_job = None, None - - try: - weekly_job = frappe.get_doc( - "Scheduled Job Type", "employee_reminders.send_reminders_in_advance_weekly" - ) - - monthly_job = frappe.get_doc( - "Scheduled Job Type", "employee_reminders.send_reminders_in_advance_monthly" - ) - except frappe.DoesNotExistError: - return - - next_weekly_trigger = weekly_job.get_next_execution() - next_monthly_trigger = monthly_job.get_next_execution() - - if self.freq_changed_from_monthly_to_weekly(): - if next_monthly_trigger < next_weekly_trigger: - self.show_freq_change_warning(next_monthly_trigger, next_weekly_trigger) - - elif self.freq_changed_from_weekly_to_monthly(): - if next_monthly_trigger > next_weekly_trigger: - self.show_freq_change_warning(next_weekly_trigger, next_monthly_trigger) - - def freq_changed_from_weekly_to_monthly(self): - return self.has_value_changed("frequency") and self.frequency == "Monthly" - - def freq_changed_from_monthly_to_weekly(self): - return self.has_value_changed("frequency") and self.frequency == "Weekly" - - def show_freq_change_warning(self, from_date, to_date): - from_date = frappe.bold(format_date(from_date)) - to_date = frappe.bold(format_date(to_date)) - frappe.msgprint( - msg=frappe._( - "Employees will miss holiday reminders from {} until {}.
Do you want to proceed with this change?" - ).format(from_date, to_date), - title="Confirm change in Frequency", - primary_action={ - "label": frappe._("Yes, Proceed"), - "client_action": "erpnext.proceed_save_with_reminders_frequency_change", - }, - raise_exception=frappe.ValidationError, - ) - - -@frappe.whitelist() -def set_proceed_with_frequency_change(): - """Enables proceed with frequency change""" - global PROCEED_WITH_FREQUENCY_CHANGE - PROCEED_WITH_FREQUENCY_CHANGE = True diff --git a/erpnext/hr/doctype/hr_settings/test_hr_settings.py b/erpnext/hr/doctype/hr_settings/test_hr_settings.py deleted file mode 100644 index 7e13213ff3..0000000000 --- a/erpnext/hr/doctype/hr_settings/test_hr_settings.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestHRSettings(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/identification_document_type/__init__.py b/erpnext/hr/doctype/identification_document_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.js b/erpnext/hr/doctype/identification_document_type/identification_document_type.js deleted file mode 100644 index 351cf9d9ff..0000000000 --- a/erpnext/hr/doctype/identification_document_type/identification_document_type.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Identification Document Type', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.json b/erpnext/hr/doctype/identification_document_type/identification_document_type.json deleted file mode 100644 index 33cbde7409..0000000000 --- a/erpnext/hr/doctype/identification_document_type/identification_document_type.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "field:identification_document_type", - "beta": 0, - "creation": "2018-05-15 07:13:28.620570", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "identification_document_type", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Identification Document Type", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-05-16 04:34:00.448680", - "modified_by": "Administrator", - "module": "HR", - "name": "Identification Document Type", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/identification_document_type/identification_document_type.py b/erpnext/hr/doctype/identification_document_type/identification_document_type.py deleted file mode 100644 index 3bfcfaadcc..0000000000 --- a/erpnext/hr/doctype/identification_document_type/identification_document_type.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class IdentificationDocumentType(Document): - pass diff --git a/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py deleted file mode 100644 index 3e8f7ab0d6..0000000000 --- a/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestIdentificationDocumentType(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/interest/__init__.py b/erpnext/hr/doctype/interest/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interest/interest.js b/erpnext/hr/doctype/interest/interest.js deleted file mode 100644 index 70e1b6aaaa..0000000000 --- a/erpnext/hr/doctype/interest/interest.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Interest', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/interest/interest.json b/erpnext/hr/doctype/interest/interest.json deleted file mode 100644 index d6d2342ab6..0000000000 --- a/erpnext/hr/doctype/interest/interest.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "field:interest", - "beta": 0, - "creation": "2016-07-25 07:12:33.600702", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "interest", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Interest", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-08-01 05:47:29.479141", - "modified_by": "Administrator", - "module": "HR", - "name": "Interest", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Academics User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 0 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interest/interest.py b/erpnext/hr/doctype/interest/interest.py deleted file mode 100644 index 3563f7f3a0..0000000000 --- a/erpnext/hr/doctype/interest/interest.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class Interest(Document): - pass diff --git a/erpnext/hr/doctype/interest/test_interest.py b/erpnext/hr/doctype/interest/test_interest.py deleted file mode 100644 index eacb57f758..0000000000 --- a/erpnext/hr/doctype/interest/test_interest.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Interest') - - -class TestInterest(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/interview/__init__.py b/erpnext/hr/doctype/interview/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interview/interview.js b/erpnext/hr/doctype/interview/interview.js deleted file mode 100644 index 6341e3a62b..0000000000 --- a/erpnext/hr/doctype/interview/interview.js +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Interview', { - onload: function (frm) { - frm.events.set_job_applicant_query(frm); - - frm.set_query('interviewer', 'interview_details', function () { - return { - query: 'erpnext.hr.doctype.interview.interview.get_interviewer_list' - }; - }); - }, - - refresh: function (frm) { - if (frm.doc.docstatus != 2 && !frm.doc.__islocal) { - if (frm.doc.status === 'Pending') { - frm.add_custom_button(__('Reschedule Interview'), function() { - frm.events.show_reschedule_dialog(frm); - frm.refresh(); - }); - } - - let allowed_interviewers = []; - frm.doc.interview_details.forEach(values => { - allowed_interviewers.push(values.interviewer); - }); - - if ((allowed_interviewers.includes(frappe.session.user))) { - frappe.db.get_value('Interview Feedback', {'interviewer': frappe.session.user, 'interview': frm.doc.name, 'docstatus': 1}, 'name', (r) => { - if (Object.keys(r).length === 0) { - frm.add_custom_button(__('Submit Feedback'), function () { - frappe.call({ - method: 'erpnext.hr.doctype.interview.interview.get_expected_skill_set', - args: { - interview_round: frm.doc.interview_round - }, - callback: function (r) { - frm.events.show_feedback_dialog(frm, r.message); - frm.refresh(); - } - }); - }).addClass('btn-primary'); - } - }); - } - } - }, - - show_reschedule_dialog: function (frm) { - let d = new frappe.ui.Dialog({ - title: 'Reschedule Interview', - fields: [ - { - label: 'Schedule On', - fieldname: 'scheduled_on', - fieldtype: 'Date', - reqd: 1 - }, - { - label: 'From Time', - fieldname: 'from_time', - fieldtype: 'Time', - reqd: 1 - }, - { - label: 'To Time', - fieldname: 'to_time', - fieldtype: 'Time', - reqd: 1 - } - ], - primary_action_label: 'Reschedule', - primary_action(values) { - frm.call({ - method: 'reschedule_interview', - doc: frm.doc, - args: { - scheduled_on: values.scheduled_on, - from_time: values.from_time, - to_time: values.to_time - } - }).then(() => { - frm.refresh(); - d.hide(); - }); - } - }); - d.show(); - }, - - show_feedback_dialog: function (frm, data) { - let fields = frm.events.get_fields_for_feedback(); - - let d = new frappe.ui.Dialog({ - title: __('Submit Feedback'), - fields: [ - { - fieldname: 'skill_set', - fieldtype: 'Table', - label: __('Skill Assessment'), - cannot_add_rows: false, - in_editable_grid: true, - reqd: 1, - fields: fields, - data: data - }, - { - fieldname: 'result', - fieldtype: 'Select', - options: ['', 'Cleared', 'Rejected'], - label: __('Result') - }, - { - fieldname: 'feedback', - fieldtype: 'Small Text', - label: __('Feedback') - } - ], - size: 'large', - minimizable: true, - primary_action: function(values) { - frappe.call({ - method: 'erpnext.hr.doctype.interview.interview.create_interview_feedback', - args: { - data: values, - interview_name: frm.doc.name, - interviewer: frappe.session.user, - job_applicant: frm.doc.job_applicant - } - }).then(() => { - frm.refresh(); - }); - d.hide(); - } - }); - d.show(); - }, - - get_fields_for_feedback: function () { - return [{ - fieldtype: 'Link', - fieldname: 'skill', - options: 'Skill', - in_list_view: 1, - label: __('Skill') - }, { - fieldtype: 'Rating', - fieldname: 'rating', - label: __('Rating'), - in_list_view: 1, - reqd: 1, - }]; - }, - - set_job_applicant_query: function (frm) { - frm.set_query('job_applicant', function () { - let job_applicant_filters = { - status: ['!=', 'Rejected'] - }; - if (frm.doc.designation) { - job_applicant_filters.designation = frm.doc.designation; - } - return { - filters: job_applicant_filters - }; - }); - }, - - interview_round: async function (frm) { - frm.events.reset_values(frm); - frm.set_value('job_applicant', ''); - - let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; - frm.set_value('designation', round_data.designation); - frm.events.set_job_applicant_query(frm); - - if (frm.doc.interview_round) { - frm.events.set_interview_details(frm); - } else { - frm.set_value('interview_details', []); - } - }, - - set_interview_details: function (frm) { - frappe.call({ - method: 'erpnext.hr.doctype.interview.interview.get_interviewers', - args: { - interview_round: frm.doc.interview_round - }, - callback: function (data) { - let interview_details = data.message; - frm.set_value('interview_details', []); - if (data.message.length) { - frm.set_value('interview_details', interview_details); - } - } - }); - }, - - job_applicant: function (frm) { - if (!frm.doc.interview_round) { - frm.doc.job_applicant = ''; - frm.refresh(); - frappe.throw(__('Select Interview Round First')); - } - - if (frm.doc.job_applicant) { - frm.events.set_designation_and_job_opening(frm); - } else { - frm.events.reset_values(frm); - } - }, - - set_designation_and_job_opening: async function (frm) { - let round_data = (await frappe.db.get_value('Interview Round', frm.doc.interview_round, 'designation')).message; - frm.set_value('designation', round_data.designation); - frm.events.set_job_applicant_query(frm); - - let job_applicant_data = (await frappe.db.get_value( - 'Job Applicant', frm.doc.job_applicant, ['designation', 'job_title', 'resume_link'], - )).message; - - if (!round_data.designation) { - frm.set_value('designation', job_applicant_data.designation); - } - - frm.set_value('job_opening', job_applicant_data.job_title); - frm.set_value('resume_link', job_applicant_data.resume_link); - }, - - reset_values: function (frm) { - frm.set_value('designation', ''); - frm.set_value('job_opening', ''); - frm.set_value('resume_link', ''); - } -}); diff --git a/erpnext/hr/doctype/interview/interview.json b/erpnext/hr/doctype/interview/interview.json deleted file mode 100644 index 0d393e7556..0000000000 --- a/erpnext/hr/doctype/interview/interview.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "actions": [], - "autoname": "HR-INT-.YYYY.-.####", - "creation": "2021-04-12 15:03:11.524090", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "interview_details_section", - "interview_round", - "job_applicant", - "job_opening", - "designation", - "resume_link", - "column_break_4", - "status", - "scheduled_on", - "from_time", - "to_time", - "interview_feedback_section", - "interview_details", - "ratings_section", - "expected_average_rating", - "column_break_12", - "average_rating", - "section_break_13", - "interview_summary", - "reminded", - "amended_from" - ], - "fields": [ - { - "fieldname": "job_applicant", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Job Applicant", - "options": "Job Applicant", - "reqd": 1 - }, - { - "fieldname": "job_opening", - "fieldtype": "Link", - "label": "Job Opening", - "options": "Job Opening", - "read_only": 1 - }, - { - "fieldname": "interview_round", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Interview Round", - "options": "Interview Round", - "reqd": 1 - }, - { - "default": "Pending", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Status", - "options": "Pending\nUnder Review\nCleared\nRejected", - "reqd": 1 - }, - { - "fieldname": "ratings_section", - "fieldtype": "Section Break", - "label": "Ratings" - }, - { - "allow_on_submit": 1, - "fieldname": "average_rating", - "fieldtype": "Rating", - "in_list_view": 1, - "label": "Obtained Average Rating", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "interview_summary", - "fieldtype": "Text" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "resume_link", - "fieldtype": "Data", - "label": "Resume link" - }, - { - "fieldname": "interview_details_section", - "fieldtype": "Section Break", - "label": "Details" - }, - { - "fetch_from": "interview_round.expected_average_rating", - "fieldname": "expected_average_rating", - "fieldtype": "Rating", - "label": "Expected Average Rating", - "read_only": 1 - }, - { - "collapsible": 1, - "fieldname": "section_break_13", - "fieldtype": "Section Break", - "label": "Interview Summary" - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fetch_from": "interview_round.designation", - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Interview", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "scheduled_on", - "fieldtype": "Date", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Scheduled On", - "reqd": 1, - "set_only_once": 1 - }, - { - "default": "0", - "fieldname": "reminded", - "fieldtype": "Check", - "hidden": 1, - "label": "Reminded" - }, - { - "allow_on_submit": 1, - "fieldname": "interview_details", - "fieldtype": "Table", - "options": "Interview Detail" - }, - { - "fieldname": "interview_feedback_section", - "fieldtype": "Section Break", - "label": "Feedback" - }, - { - "fieldname": "from_time", - "fieldtype": "Time", - "in_list_view": 1, - "label": "From Time", - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "to_time", - "fieldtype": "Time", - "in_list_view": 1, - "label": "To Time", - "reqd": 1, - "set_only_once": 1 - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [ - { - "link_doctype": "Interview Feedback", - "link_fieldname": "interview" - } - ], - "modified": "2021-09-30 13:30:05.421035", - "modified_by": "Administrator", - "module": "HR", - "name": "Interview", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Interviewer", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "job_applicant", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interview/interview.py b/erpnext/hr/doctype/interview/interview.py deleted file mode 100644 index a6e9af2679..0000000000 --- a/erpnext/hr/doctype/interview/interview.py +++ /dev/null @@ -1,355 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import datetime - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cstr, flt, get_datetime, get_link_to_form - - -class DuplicateInterviewRoundError(frappe.ValidationError): - pass - - -class Interview(Document): - def validate(self): - self.validate_duplicate_interview() - self.validate_designation() - self.validate_overlap() - self.set_average_rating() - - def on_submit(self): - if self.status not in ["Cleared", "Rejected"]: - frappe.throw( - _("Only Interviews with Cleared or Rejected status can be submitted."), title=_("Not Allowed") - ) - - def validate_duplicate_interview(self): - duplicate_interview = frappe.db.exists( - "Interview", - {"job_applicant": self.job_applicant, "interview_round": self.interview_round, "docstatus": 1}, - ) - - if duplicate_interview: - frappe.throw( - _( - "Job Applicants are not allowed to appear twice for the same Interview round. Interview {0} already scheduled for Job Applicant {1}" - ).format( - frappe.bold(get_link_to_form("Interview", duplicate_interview)), - frappe.bold(self.job_applicant), - ) - ) - - def validate_designation(self): - applicant_designation = frappe.db.get_value("Job Applicant", self.job_applicant, "designation") - if self.designation: - if self.designation != applicant_designation: - frappe.throw( - _( - "Interview Round {0} is only for Designation {1}. Job Applicant has applied for the role {2}" - ).format( - self.interview_round, frappe.bold(self.designation), applicant_designation - ), - exc=DuplicateInterviewRoundError, - ) - else: - self.designation = applicant_designation - - def validate_overlap(self): - interviewers = [entry.interviewer for entry in self.interview_details] or [""] - - overlaps = frappe.db.sql( - """ - SELECT interview.name - FROM `tabInterview` as interview - INNER JOIN `tabInterview Detail` as detail - WHERE - interview.scheduled_on = %s and interview.name != %s and interview.docstatus != 2 - and (interview.job_applicant = %s or detail.interviewer IN %s) and - ((from_time < %s and to_time > %s) or - (from_time > %s and to_time < %s) or - (from_time = %s)) - """, - ( - self.scheduled_on, - self.name, - self.job_applicant, - interviewers, - self.from_time, - self.to_time, - self.from_time, - self.to_time, - self.from_time, - ), - ) - - if overlaps: - overlapping_details = _("Interview overlaps with {0}").format( - get_link_to_form("Interview", overlaps[0][0]) - ) - frappe.throw(overlapping_details, title=_("Overlap")) - - def set_average_rating(self): - total_rating = 0 - for entry in self.interview_details: - if entry.average_rating: - total_rating += entry.average_rating - - self.average_rating = flt( - total_rating / len(self.interview_details) if len(self.interview_details) else 0 - ) - - @frappe.whitelist() - def reschedule_interview(self, scheduled_on, from_time, to_time): - original_date = self.scheduled_on - from_time = self.from_time - to_time = self.to_time - - self.db_set({"scheduled_on": scheduled_on, "from_time": from_time, "to_time": to_time}) - self.notify_update() - - recipients = get_recipients(self.name) - - try: - frappe.sendmail( - recipients=recipients, - subject=_("Interview: {0} Rescheduled").format(self.name), - message=_("Your Interview session is rescheduled from {0} {1} - {2} to {3} {4} - {5}").format( - original_date, from_time, to_time, self.scheduled_on, self.from_time, self.to_time - ), - reference_doctype=self.doctype, - reference_name=self.name, - ) - except Exception: - frappe.msgprint( - _("Failed to send the Interview Reschedule notification. Please configure your email account.") - ) - - frappe.msgprint(_("Interview Rescheduled successfully"), indicator="green") - - -def get_recipients(name, for_feedback=0): - interview = frappe.get_doc("Interview", name) - - if for_feedback: - recipients = [d.interviewer for d in interview.interview_details if not d.interview_feedback] - else: - recipients = [d.interviewer for d in interview.interview_details] - recipients.append(frappe.db.get_value("Job Applicant", interview.job_applicant, "email_id")) - - return recipients - - -@frappe.whitelist() -def get_interviewers(interview_round): - return frappe.get_all( - "Interviewer", filters={"parent": interview_round}, fields=["user as interviewer"] - ) - - -def send_interview_reminder(): - reminder_settings = frappe.db.get_value( - "HR Settings", - "HR Settings", - ["send_interview_reminder", "interview_reminder_template"], - as_dict=True, - ) - - if not reminder_settings.send_interview_reminder: - return - - remind_before = cstr(frappe.db.get_single_value("HR Settings", "remind_before")) or "01:00:00" - remind_before = datetime.datetime.strptime(remind_before, "%H:%M:%S") - reminder_date_time = datetime.datetime.now() + datetime.timedelta( - hours=remind_before.hour, minutes=remind_before.minute, seconds=remind_before.second - ) - - interviews = frappe.get_all( - "Interview", - filters={ - "scheduled_on": ["between", (datetime.datetime.now(), reminder_date_time)], - "status": "Pending", - "reminded": 0, - "docstatus": ["!=", 2], - }, - ) - - interview_template = frappe.get_doc( - "Email Template", reminder_settings.interview_reminder_template - ) - - for d in interviews: - doc = frappe.get_doc("Interview", d.name) - context = doc.as_dict() - message = frappe.render_template(interview_template.response, context) - recipients = get_recipients(doc.name) - - frappe.sendmail( - recipients=recipients, - subject=interview_template.subject, - message=message, - reference_doctype=doc.doctype, - reference_name=doc.name, - ) - - doc.db_set("reminded", 1) - - -def send_daily_feedback_reminder(): - reminder_settings = frappe.db.get_value( - "HR Settings", - "HR Settings", - ["send_interview_feedback_reminder", "feedback_reminder_notification_template"], - as_dict=True, - ) - - if not reminder_settings.send_interview_feedback_reminder: - return - - interview_feedback_template = frappe.get_doc( - "Email Template", reminder_settings.feedback_reminder_notification_template - ) - interviews = frappe.get_all( - "Interview", filters={"status": ["in", ["Under Review", "Pending"]], "docstatus": ["!=", 2]} - ) - - for entry in interviews: - recipients = get_recipients(entry.name, for_feedback=1) - - doc = frappe.get_doc("Interview", entry.name) - context = doc.as_dict() - - message = frappe.render_template(interview_feedback_template.response, context) - - if len(recipients): - frappe.sendmail( - recipients=recipients, - subject=interview_feedback_template.subject, - message=message, - reference_doctype="Interview", - reference_name=entry.name, - ) - - -@frappe.whitelist() -def get_expected_skill_set(interview_round): - return frappe.get_all("Expected Skill Set", filters={"parent": interview_round}, fields=["skill"]) - - -@frappe.whitelist() -def create_interview_feedback(data, interview_name, interviewer, job_applicant): - import json - - if isinstance(data, str): - data = frappe._dict(json.loads(data)) - - if frappe.session.user != interviewer: - frappe.throw(_("Only Interviewer Are allowed to submit Interview Feedback")) - - interview_feedback = frappe.new_doc("Interview Feedback") - interview_feedback.interview = interview_name - interview_feedback.interviewer = interviewer - interview_feedback.job_applicant = job_applicant - - for d in data.skill_set: - d = frappe._dict(d) - interview_feedback.append("skill_assessment", {"skill": d.skill, "rating": d.rating}) - - interview_feedback.feedback = data.feedback - interview_feedback.result = data.result - - interview_feedback.save() - interview_feedback.submit() - - frappe.msgprint( - _("Interview Feedback {0} submitted successfully").format( - get_link_to_form("Interview Feedback", interview_feedback.name) - ) - ) - - -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs -def get_interviewer_list(doctype, txt, searchfield, start, page_len, filters): - filters = [ - ["Has Role", "parent", "like", "%{}%".format(txt)], - ["Has Role", "role", "=", "interviewer"], - ["Has Role", "parenttype", "=", "User"], - ] - - if filters and isinstance(filters, list): - filters.extend(filters) - - return frappe.get_all( - "Has Role", - limit_start=start, - limit_page_length=page_len, - filters=filters, - fields=["parent"], - as_list=1, - ) - - -@frappe.whitelist() -def get_events(start, end, filters=None): - """Returns events for Gantt / Calendar view rendering. - - :param start: Start date-time. - :param end: End date-time. - :param filters: Filters (JSON). - """ - from frappe.desk.calendar import get_event_conditions - - events = [] - - event_color = { - "Pending": "#fff4f0", - "Under Review": "#d3e8fc", - "Cleared": "#eaf5ed", - "Rejected": "#fce7e7", - } - - conditions = get_event_conditions("Interview", filters) - - interviews = frappe.db.sql( - """ - SELECT DISTINCT - `tabInterview`.name, `tabInterview`.job_applicant, `tabInterview`.interview_round, - `tabInterview`.scheduled_on, `tabInterview`.status, `tabInterview`.from_time as from_time, - `tabInterview`.to_time as to_time - from - `tabInterview` - where - (`tabInterview`.scheduled_on between %(start)s and %(end)s) - and docstatus != 2 - {conditions} - """.format( - conditions=conditions - ), - {"start": start, "end": end}, - as_dict=True, - update={"allDay": 0}, - ) - - for d in interviews: - subject_data = [] - for field in ["name", "job_applicant", "interview_round"]: - if not d.get(field): - continue - subject_data.append(d.get(field)) - - color = event_color.get(d.status) - interview_data = { - "from": get_datetime("%s %s" % (d.scheduled_on, d.from_time or "00:00:00")), - "to": get_datetime("%s %s" % (d.scheduled_on, d.to_time or "00:00:00")), - "name": d.name, - "subject": "\n".join(subject_data), - "color": color if color else "#89bcde", - } - - events.append(interview_data) - - return events diff --git a/erpnext/hr/doctype/interview/interview_calendar.js b/erpnext/hr/doctype/interview/interview_calendar.js deleted file mode 100644 index b46b72ecb2..0000000000 --- a/erpnext/hr/doctype/interview/interview_calendar.js +++ /dev/null @@ -1,14 +0,0 @@ - -frappe.views.calendar['Interview'] = { - field_map: { - 'start': 'from', - 'end': 'to', - 'id': 'name', - 'title': 'subject', - 'allDay': 'allDay', - 'color': 'color' - }, - order_by: 'scheduled_on', - gantt: true, - get_events_method: 'erpnext.hr.doctype.interview.interview.get_events' -}; diff --git a/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html b/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html deleted file mode 100644 index 8d39fb54ef..0000000000 --- a/erpnext/hr/doctype/interview/interview_feedback_reminder_template.html +++ /dev/null @@ -1,5 +0,0 @@ -

Interview Feedback Reminder

- -

- Interview Feedback for Interview {{ name }} is not submitted yet. Please submit your feedback. Thank you, good day! -

diff --git a/erpnext/hr/doctype/interview/interview_list.js b/erpnext/hr/doctype/interview/interview_list.js deleted file mode 100644 index b1f072f0d4..0000000000 --- a/erpnext/hr/doctype/interview/interview_list.js +++ /dev/null @@ -1,12 +0,0 @@ -frappe.listview_settings['Interview'] = { - has_indicator_for_draft: 1, - get_indicator: function(doc) { - let status_color = { - 'Pending': 'orange', - 'Under Review': 'blue', - 'Cleared': 'green', - 'Rejected': 'red', - }; - return [__(doc.status), status_color[doc.status], 'status,=,'+doc.status]; - } -}; diff --git a/erpnext/hr/doctype/interview/interview_reminder_notification_template.html b/erpnext/hr/doctype/interview/interview_reminder_notification_template.html deleted file mode 100644 index 76de46e28d..0000000000 --- a/erpnext/hr/doctype/interview/interview_reminder_notification_template.html +++ /dev/null @@ -1,5 +0,0 @@ -

Interview Reminder

- -

- Interview: {{name}} is scheduled on {{scheduled_on}} from {{from_time}} to {{to_time}} -

diff --git a/erpnext/hr/doctype/interview/test_interview.py b/erpnext/hr/doctype/interview/test_interview.py deleted file mode 100644 index ae8493ab3e..0000000000 --- a/erpnext/hr/doctype/interview/test_interview.py +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import datetime -import os -import unittest - -import frappe -from frappe import _ -from frappe.core.doctype.user_permission.test_user_permission import create_user -from frappe.utils import add_days, getdate, nowtime - -from erpnext.hr.doctype.designation.test_designation import create_designation -from erpnext.hr.doctype.interview.interview import DuplicateInterviewRoundError -from erpnext.hr.doctype.job_applicant.job_applicant import get_interview_details -from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant - - -class TestInterview(unittest.TestCase): - def test_validations_for_designation(self): - job_applicant = create_job_applicant() - interview = create_interview_and_dependencies( - job_applicant.name, designation="_Test_Sales_manager", save=0 - ) - self.assertRaises(DuplicateInterviewRoundError, interview.save) - - def test_notification_on_rescheduling(self): - job_applicant = create_job_applicant() - interview = create_interview_and_dependencies( - job_applicant.name, scheduled_on=add_days(getdate(), -4) - ) - - previous_scheduled_date = interview.scheduled_on - frappe.db.sql("DELETE FROM `tabEmail Queue`") - - interview.reschedule_interview( - add_days(getdate(previous_scheduled_date), 2), from_time=nowtime(), to_time=nowtime() - ) - interview.reload() - - self.assertEqual(interview.scheduled_on, add_days(getdate(previous_scheduled_date), 2)) - - notification = frappe.get_all( - "Email Queue", filters={"message": ("like", "%Your Interview session is rescheduled from%")} - ) - self.assertIsNotNone(notification) - - def test_notification_for_scheduling(self): - from erpnext.hr.doctype.interview.interview import send_interview_reminder - - setup_reminder_settings() - - job_applicant = create_job_applicant() - scheduled_on = datetime.datetime.now() + datetime.timedelta(minutes=10) - - interview = create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) - - frappe.db.sql("DELETE FROM `tabEmail Queue`") - send_interview_reminder() - - interview.reload() - - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue("Subject: Interview Reminder" in email_queue[0].message) - - def test_notification_for_feedback_submission(self): - from erpnext.hr.doctype.interview.interview import send_daily_feedback_reminder - - setup_reminder_settings() - - job_applicant = create_job_applicant() - scheduled_on = add_days(getdate(), -4) - create_interview_and_dependencies(job_applicant.name, scheduled_on=scheduled_on) - - frappe.db.sql("DELETE FROM `tabEmail Queue`") - send_daily_feedback_reminder() - - email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True) - self.assertTrue("Subject: Interview Feedback Reminder" in email_queue[0].message) - - def test_get_interview_details_for_applicant_dashboard(self): - job_applicant = create_job_applicant() - interview = create_interview_and_dependencies(job_applicant.name) - - details = get_interview_details(job_applicant.name) - self.assertEqual(details.get("stars"), 5) - self.assertEqual( - details.get("interviews").get(interview.name), - { - "name": interview.name, - "interview_round": interview.interview_round, - "expected_average_rating": interview.expected_average_rating * 5, - "average_rating": interview.average_rating * 5, - "status": "Pending", - }, - ) - - def tearDown(self): - frappe.db.rollback() - - -def create_interview_and_dependencies( - job_applicant, scheduled_on=None, from_time=None, to_time=None, designation=None, save=1 -): - if designation: - designation = create_designation(designation_name="_Test_Sales_manager").name - - interviewer_1 = create_user("test_interviewer1@example.com", "Interviewer") - interviewer_2 = create_user("test_interviewer2@example.com", "Interviewer") - - interview_round = create_interview_round( - "Technical Round", ["Python", "JS"], designation=designation, save=True - ) - - interview = frappe.new_doc("Interview") - interview.interview_round = interview_round.name - interview.job_applicant = job_applicant - interview.scheduled_on = scheduled_on or getdate() - interview.from_time = from_time or nowtime() - interview.to_time = to_time or nowtime() - - interview.append("interview_details", {"interviewer": interviewer_1.name}) - interview.append("interview_details", {"interviewer": interviewer_2.name}) - - if save: - interview.save() - - return interview - - -def create_interview_round(name, skill_set, interviewers=[], designation=None, save=True): - create_skill_set(skill_set) - interview_round = frappe.new_doc("Interview Round") - interview_round.round_name = name - interview_round.interview_type = create_interview_type() - # average rating = 4 - interview_round.expected_average_rating = 0.8 - if designation: - interview_round.designation = designation - - for skill in skill_set: - interview_round.append("expected_skill_set", {"skill": skill}) - - for interviewer in interviewers: - interview_round.append("interviewer", {"user": interviewer}) - - if save: - interview_round.save() - - return interview_round - - -def create_skill_set(skill_set): - for skill in skill_set: - if not frappe.db.exists("Skill", skill): - doc = frappe.new_doc("Skill") - doc.skill_name = skill - doc.save() - - -def create_interview_type(name="test_interview_type"): - if frappe.db.exists("Interview Type", name): - return frappe.get_doc("Interview Type", name).name - else: - doc = frappe.new_doc("Interview Type") - doc.name = name - doc.description = "_Test_Description" - doc.save() - - return doc.name - - -def setup_reminder_settings(): - if not frappe.db.exists("Email Template", _("Interview Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "interview/interview_reminder_notification_template.html") - ) - - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Interview Reminder"), - "response": response, - "subject": _("Interview Reminder"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - - if not frappe.db.exists("Email Template", _("Interview Feedback Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "interview/interview_feedback_reminder_template.html") - ) - - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Interview Feedback Reminder"), - "response": response, - "subject": _("Interview Feedback Reminder"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - - hr_settings = frappe.get_doc("HR Settings") - hr_settings.interview_reminder_template = _("Interview Reminder") - hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder") - hr_settings.save() diff --git a/erpnext/hr/doctype/interview_detail/__init__.py b/erpnext/hr/doctype/interview_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.js b/erpnext/hr/doctype/interview_detail/interview_detail.js deleted file mode 100644 index 88518ca4cc..0000000000 --- a/erpnext/hr/doctype/interview_detail/interview_detail.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Interview Detail', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.json b/erpnext/hr/doctype/interview_detail/interview_detail.json deleted file mode 100644 index b5b49c0993..0000000000 --- a/erpnext/hr/doctype/interview_detail/interview_detail.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "actions": [], - "creation": "2021-04-12 16:24:10.382863", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "interviewer", - "interview_feedback", - "average_rating", - "result", - "column_break_4", - "comments" - ], - "fields": [ - { - "fieldname": "interviewer", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Interviewer", - "options": "User" - }, - { - "allow_on_submit": 1, - "fieldname": "interview_feedback", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Interview Feedback", - "options": "Interview Feedback", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "average_rating", - "fieldtype": "Rating", - "in_list_view": 1, - "label": "Average Rating", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "allow_on_submit": 1, - "fetch_from": "interview_feedback.feedback", - "fieldname": "comments", - "fieldtype": "Text", - "label": "Comments", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "result", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Result", - "options": "\nCleared\nRejected", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-09-29 13:13:25.865063", - "modified_by": "Administrator", - "module": "HR", - "name": "Interview Detail", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interview_detail/interview_detail.py b/erpnext/hr/doctype/interview_detail/interview_detail.py deleted file mode 100644 index d44e29a9c1..0000000000 --- a/erpnext/hr/doctype/interview_detail/interview_detail.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class InterviewDetail(Document): - pass diff --git a/erpnext/hr/doctype/interview_detail/test_interview_detail.py b/erpnext/hr/doctype/interview_detail/test_interview_detail.py deleted file mode 100644 index 68a1f72485..0000000000 --- a/erpnext/hr/doctype/interview_detail/test_interview_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestInterviewDetail(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/interview_feedback/__init__.py b/erpnext/hr/doctype/interview_feedback/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.js b/erpnext/hr/doctype/interview_feedback/interview_feedback.js deleted file mode 100644 index dec559fcea..0000000000 --- a/erpnext/hr/doctype/interview_feedback/interview_feedback.js +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Interview Feedback', { - onload: function(frm) { - frm.ignore_doctypes_on_cancel_all = ['Interview']; - - frm.set_query('interview', function() { - return { - filters: { - docstatus: ['!=', 2] - } - }; - }); - }, - - interview_round: function(frm) { - frappe.call({ - method: 'erpnext.hr.doctype.interview.interview.get_expected_skill_set', - args: { - interview_round: frm.doc.interview_round - }, - callback: function(r) { - frm.set_value('skill_assessment', r.message); - } - }); - }, - - interview: function(frm) { - frappe.call({ - method: 'erpnext.hr.doctype.interview_feedback.interview_feedback.get_applicable_interviewers', - args: { - interview: frm.doc.interview || '' - }, - callback: function(r) { - frm.set_query('interviewer', function() { - return { - filters: { - name: ['in', r.message] - } - }; - }); - } - }); - - }, - - interviewer: function(frm) { - if (!frm.doc.interview) { - frappe.throw(__('Select Interview first')); - frm.set_value('interviewer', ''); - } - } -}); diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.json b/erpnext/hr/doctype/interview_feedback/interview_feedback.json deleted file mode 100644 index 6a2f7e8696..0000000000 --- a/erpnext/hr/doctype/interview_feedback/interview_feedback.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "actions": [], - "autoname": "HR-INT-FEED-.####", - "creation": "2021-04-12 17:03:13.833285", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "details_section", - "interview", - "interview_round", - "job_applicant", - "column_break_3", - "interviewer", - "result", - "section_break_4", - "skill_assessment", - "average_rating", - "section_break_7", - "feedback", - "amended_from" - ], - "fields": [ - { - "allow_in_quick_entry": 1, - "fieldname": "interview", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Interview", - "options": "Interview", - "reqd": 1 - }, - { - "allow_in_quick_entry": 1, - "fetch_from": "interview.interview_round", - "fieldname": "interview_round", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Interview Round", - "options": "Interview Round", - "read_only": 1, - "reqd": 1 - }, - { - "allow_in_quick_entry": 1, - "fieldname": "interviewer", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Interviewer", - "options": "User", - "reqd": 1 - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "label": "Skill Assessment" - }, - { - "allow_in_quick_entry": 1, - "fieldname": "skill_assessment", - "fieldtype": "Table", - "options": "Skill Assessment", - "reqd": 1 - }, - { - "allow_in_quick_entry": 1, - "fieldname": "average_rating", - "fieldtype": "Rating", - "in_list_view": 1, - "label": "Average Rating", - "read_only": 1 - }, - { - "fieldname": "section_break_7", - "fieldtype": "Section Break", - "label": "Feedback" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Interview Feedback", - "print_hide": 1, - "read_only": 1 - }, - { - "allow_in_quick_entry": 1, - "fieldname": "feedback", - "fieldtype": "Text" - }, - { - "fieldname": "result", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Result", - "options": "\nCleared\nRejected", - "reqd": 1 - }, - { - "fieldname": "details_section", - "fieldtype": "Section Break", - "label": "Details" - }, - { - "fetch_from": "interview.job_applicant", - "fieldname": "job_applicant", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Job Applicant", - "options": "Job Applicant", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-09-30 13:30:49.955352", - "modified_by": "Administrator", - "module": "HR", - "name": "Interview Feedback", - "owner": "Administrator", - "permissions": [ - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Interviewer", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "interviewer", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interview_feedback/interview_feedback.py b/erpnext/hr/doctype/interview_feedback/interview_feedback.py deleted file mode 100644 index 5bb498fa54..0000000000 --- a/erpnext/hr/doctype/interview_feedback/interview_feedback.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, get_link_to_form, getdate - - -class InterviewFeedback(Document): - def validate(self): - self.validate_interviewer() - self.validate_interview_date() - self.validate_duplicate() - self.calculate_average_rating() - - def on_submit(self): - self.update_interview_details() - - def on_cancel(self): - self.update_interview_details() - - def validate_interviewer(self): - applicable_interviewers = get_applicable_interviewers(self.interview) - if self.interviewer not in applicable_interviewers: - frappe.throw( - _("{0} is not allowed to submit Interview Feedback for the Interview: {1}").format( - frappe.bold(self.interviewer), frappe.bold(self.interview) - ) - ) - - def validate_interview_date(self): - scheduled_date = frappe.db.get_value("Interview", self.interview, "scheduled_on") - - if getdate() < getdate(scheduled_date) and self.docstatus == 1: - frappe.throw( - _("{0} submission before {1} is not allowed").format( - frappe.bold("Interview Feedback"), frappe.bold("Interview Scheduled Date") - ) - ) - - def validate_duplicate(self): - duplicate_feedback = frappe.db.exists( - "Interview Feedback", - {"interviewer": self.interviewer, "interview": self.interview, "docstatus": 1}, - ) - - if duplicate_feedback: - frappe.throw( - _( - "Feedback already submitted for the Interview {0}. Please cancel the previous Interview Feedback {1} to continue." - ).format( - self.interview, get_link_to_form("Interview Feedback", duplicate_feedback) - ) - ) - - def calculate_average_rating(self): - total_rating = 0 - for d in self.skill_assessment: - if d.rating: - total_rating += d.rating - - self.average_rating = flt( - total_rating / len(self.skill_assessment) if len(self.skill_assessment) else 0 - ) - - def update_interview_details(self): - doc = frappe.get_doc("Interview", self.interview) - - if self.docstatus == 2: - for entry in doc.interview_details: - if entry.interview_feedback == self.name: - entry.average_rating = entry.interview_feedback = entry.comments = entry.result = None - break - else: - for entry in doc.interview_details: - if entry.interviewer == self.interviewer: - entry.average_rating = self.average_rating - entry.interview_feedback = self.name - entry.comments = self.feedback - entry.result = self.result - - doc.save() - doc.notify_update() - - -@frappe.whitelist() -def get_applicable_interviewers(interview): - data = frappe.get_all("Interview Detail", filters={"parent": interview}, fields=["interviewer"]) - return [d.interviewer for d in data] diff --git a/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py b/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py deleted file mode 100644 index 63d4775195..0000000000 --- a/erpnext/hr/doctype/interview_feedback/test_interview_feedback.py +++ /dev/null @@ -1,113 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, flt, getdate - -from erpnext.hr.doctype.interview.test_interview import ( - create_interview_and_dependencies, - create_skill_set, -) -from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant - - -class TestInterviewFeedback(unittest.TestCase): - def test_validation_for_skill_set(self): - frappe.set_user("Administrator") - job_applicant = create_job_applicant() - interview = create_interview_and_dependencies( - job_applicant.name, scheduled_on=add_days(getdate(), -1) - ) - skill_ratings = get_skills_rating(interview.interview_round) - - interviewer = interview.interview_details[0].interviewer - create_skill_set(["Leadership"]) - - interview_feedback = create_interview_feedback(interview.name, interviewer, skill_ratings) - interview_feedback.append("skill_assessment", {"skill": "Leadership", "rating": 0.8}) - frappe.set_user(interviewer) - - self.assertRaises(frappe.ValidationError, interview_feedback.save) - - frappe.set_user("Administrator") - - def test_average_ratings_on_feedback_submission_and_cancellation(self): - job_applicant = create_job_applicant() - interview = create_interview_and_dependencies( - job_applicant.name, scheduled_on=add_days(getdate(), -1) - ) - skill_ratings = get_skills_rating(interview.interview_round) - - # For First Interviewer Feedback - interviewer = interview.interview_details[0].interviewer - frappe.set_user(interviewer) - - # calculating Average - feedback_1 = create_interview_feedback(interview.name, interviewer, skill_ratings) - - total_rating = 0 - for d in feedback_1.skill_assessment: - if d.rating: - total_rating += d.rating - - avg_rating = flt( - total_rating / len(feedback_1.skill_assessment) if len(feedback_1.skill_assessment) else 0 - ) - - self.assertEqual(flt(avg_rating, 2), flt(feedback_1.average_rating, 2)) - - avg_on_interview_detail = frappe.db.get_value( - "Interview Detail", - { - "parent": feedback_1.interview, - "interviewer": feedback_1.interviewer, - "interview_feedback": feedback_1.name, - }, - "average_rating", - ) - - # 1. average should be reflected in Interview Detail. - self.assertEqual(flt(avg_on_interview_detail, 2), flt(feedback_1.average_rating, 2)) - - """For Second Interviewer Feedback""" - interviewer = interview.interview_details[1].interviewer - frappe.set_user(interviewer) - - feedback_2 = create_interview_feedback(interview.name, interviewer, skill_ratings) - interview.reload() - - feedback_2.cancel() - interview.reload() - - frappe.set_user("Administrator") - - def tearDown(self): - frappe.db.rollback() - - -def create_interview_feedback(interview, interviewer, skills_ratings): - interview_feedback = frappe.new_doc("Interview Feedback") - interview_feedback.interview = interview - interview_feedback.interviewer = interviewer - interview_feedback.result = "Cleared" - - for rating in skills_ratings: - interview_feedback.append("skill_assessment", rating) - - interview_feedback.save() - interview_feedback.submit() - - return interview_feedback - - -def get_skills_rating(interview_round): - import random - - skills = frappe.get_all( - "Expected Skill Set", filters={"parent": interview_round}, fields=["skill"] - ) - for d in skills: - d["rating"] = random.random() - return skills diff --git a/erpnext/hr/doctype/interview_round/__init__.py b/erpnext/hr/doctype/interview_round/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interview_round/interview_round.js b/erpnext/hr/doctype/interview_round/interview_round.js deleted file mode 100644 index 6a608b03d2..0000000000 --- a/erpnext/hr/doctype/interview_round/interview_round.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on("Interview Round", { - refresh: function(frm) { - if (!frm.doc.__islocal) { - frm.add_custom_button(__("Create Interview"), function() { - frm.events.create_interview(frm); - }); - } - }, - create_interview: function(frm) { - frappe.call({ - method: "erpnext.hr.doctype.interview_round.interview_round.create_interview", - args: { - doc: frm.doc - }, - callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - } -}); diff --git a/erpnext/hr/doctype/interview_round/interview_round.json b/erpnext/hr/doctype/interview_round/interview_round.json deleted file mode 100644 index 9c95185e9c..0000000000 --- a/erpnext/hr/doctype/interview_round/interview_round.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "autoname": "field:round_name", - "creation": "2021-04-12 12:57:19.902866", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "round_name", - "interview_type", - "interviewers", - "column_break_3", - "designation", - "expected_average_rating", - "expected_skills_section", - "expected_skill_set" - ], - "fields": [ - { - "fieldname": "round_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Round Name", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation" - }, - { - "fieldname": "expected_skills_section", - "fieldtype": "Section Break", - "label": "Expected Skillset" - }, - { - "fieldname": "expected_skill_set", - "fieldtype": "Table", - "options": "Expected Skill Set", - "reqd": 1 - }, - { - "fieldname": "expected_average_rating", - "fieldtype": "Rating", - "label": "Expected Average Rating", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "interview_type", - "fieldtype": "Link", - "label": "Interview Type", - "options": "Interview Type", - "reqd": 1 - }, - { - "fieldname": "interviewers", - "fieldtype": "Table MultiSelect", - "label": "Interviewers", - "options": "Interviewer" - } - ], - "index_web_pages_for_search": 1, - "links": [], - "modified": "2021-09-30 13:01:25.666660", - "modified_by": "Administrator", - "module": "HR", - "name": "Interview Round", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Interviewer", - "select": 1, - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interview_round/interview_round.py b/erpnext/hr/doctype/interview_round/interview_round.py deleted file mode 100644 index 83dbf0ea98..0000000000 --- a/erpnext/hr/doctype/interview_round/interview_round.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json - -import frappe -from frappe.model.document import Document - - -class InterviewRound(Document): - pass - - -@frappe.whitelist() -def create_interview(doc): - if isinstance(doc, str): - doc = json.loads(doc) - doc = frappe.get_doc(doc) - - interview = frappe.new_doc("Interview") - interview.interview_round = doc.name - interview.designation = doc.designation - - if doc.interviewers: - interview.interview_details = [] - for data in doc.interviewers: - interview.append("interview_details", {"interviewer": data.user}) - return interview diff --git a/erpnext/hr/doctype/interview_round/test_interview_round.py b/erpnext/hr/doctype/interview_round/test_interview_round.py deleted file mode 100644 index 9568165374..0000000000 --- a/erpnext/hr/doctype/interview_round/test_interview_round.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -# import frappe - - -class TestInterviewRound(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/interview_type/__init__.py b/erpnext/hr/doctype/interview_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interview_type/interview_type.js b/erpnext/hr/doctype/interview_type/interview_type.js deleted file mode 100644 index af77b527d4..0000000000 --- a/erpnext/hr/doctype/interview_type/interview_type.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Interview Type', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/interview_type/interview_type.json b/erpnext/hr/doctype/interview_type/interview_type.json deleted file mode 100644 index 14636a18cb..0000000000 --- a/erpnext/hr/doctype/interview_type/interview_type.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "autoname": "Prompt", - "creation": "2021-04-12 14:44:40.664034", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "description" - ], - "fields": [ - { - "fieldname": "description", - "fieldtype": "Text", - "in_list_view": 1, - "label": "Description" - } - ], - "index_web_pages_for_search": 1, - "links": [ - { - "link_doctype": "Interview Round", - "link_fieldname": "interview_type" - } - ], - "modified": "2021-09-30 13:00:16.471518", - "modified_by": "Administrator", - "module": "HR", - "name": "Interview Type", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interview_type/interview_type.py b/erpnext/hr/doctype/interview_type/interview_type.py deleted file mode 100644 index f5ebda427b..0000000000 --- a/erpnext/hr/doctype/interview_type/interview_type.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class InterviewType(Document): - pass diff --git a/erpnext/hr/doctype/interview_type/test_interview_type.py b/erpnext/hr/doctype/interview_type/test_interview_type.py deleted file mode 100644 index 96fdfcad68..0000000000 --- a/erpnext/hr/doctype/interview_type/test_interview_type.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestInterviewType(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/interviewer/__init__.py b/erpnext/hr/doctype/interviewer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/interviewer/interviewer.json b/erpnext/hr/doctype/interviewer/interviewer.json deleted file mode 100644 index a37b8b0e4e..0000000000 --- a/erpnext/hr/doctype/interviewer/interviewer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "actions": [], - "creation": "2021-04-12 17:38:19.354734", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "user" - ], - "fields": [ - { - "fieldname": "user", - "fieldtype": "Link", - "in_list_view": 1, - "label": "User", - "options": "User" - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-04-13 13:41:35.817568", - "modified_by": "Administrator", - "module": "HR", - "name": "Interviewer", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/interviewer/interviewer.py b/erpnext/hr/doctype/interviewer/interviewer.py deleted file mode 100644 index 2dc4a14325..0000000000 --- a/erpnext/hr/doctype/interviewer/interviewer.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class Interviewer(Document): - pass diff --git a/erpnext/hr/doctype/job_applicant/README.md b/erpnext/hr/doctype/job_applicant/README.md deleted file mode 100644 index 8eb2edbda0..0000000000 --- a/erpnext/hr/doctype/job_applicant/README.md +++ /dev/null @@ -1 +0,0 @@ -Applicant for Job. \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant/__init__.py b/erpnext/hr/doctype/job_applicant/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.js b/erpnext/hr/doctype/job_applicant/job_applicant.js deleted file mode 100644 index c1e8257168..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant.js +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -// For license information, please see license.txt - -// for communication -cur_frm.email_field = "email_id"; - -frappe.ui.form.on("Job Applicant", { - refresh: function(frm) { - frm.set_query("job_title", function() { - return { - filters: { - 'status': 'Open' - } - }; - }); - frm.events.create_custom_buttons(frm); - frm.events.make_dashboard(frm); - }, - - create_custom_buttons: function(frm) { - if (!frm.doc.__islocal && frm.doc.status !== "Rejected" && frm.doc.status !== "Accepted") { - frm.add_custom_button(__("Interview"), function() { - frm.events.create_dialog(frm); - }, __("Create")); - } - - if (!frm.doc.__islocal) { - if (frm.doc.__onload && frm.doc.__onload.job_offer) { - $('[data-doctype="Employee Onboarding"]').find("button").show(); - $('[data-doctype="Job Offer"]').find("button").hide(); - frm.add_custom_button(__("Job Offer"), function() { - frappe.set_route("Form", "Job Offer", frm.doc.__onload.job_offer); - }, __("View")); - } else { - $('[data-doctype="Employee Onboarding"]').find("button").hide(); - $('[data-doctype="Job Offer"]').find("button").show(); - frm.add_custom_button(__("Job Offer"), function() { - frappe.route_options = { - "job_applicant": frm.doc.name, - "applicant_name": frm.doc.applicant_name, - "designation": frm.doc.job_opening || frm.doc.designation, - }; - frappe.new_doc("Job Offer"); - }, __("Create")); - } - } - }, - - make_dashboard: function(frm) { - frappe.call({ - method: "erpnext.hr.doctype.job_applicant.job_applicant.get_interview_details", - args: { - job_applicant: frm.doc.name - }, - callback: function(r) { - if (r.message) { - $("div").remove(".form-dashboard-section.custom"); - frm.dashboard.add_section( - frappe.render_template("job_applicant_dashboard", { - data: r.message.interviews, - number_of_stars: r.message.stars - }), - __("Interview Summary") - ); - } - } - }); - }, - - create_dialog: function(frm) { - let d = new frappe.ui.Dialog({ - title: 'Enter Interview Round', - fields: [ - { - label: 'Interview Round', - fieldname: 'interview_round', - fieldtype: 'Link', - options: 'Interview Round' - }, - ], - primary_action_label: 'Create Interview', - primary_action(values) { - frm.events.create_interview(frm, values); - d.hide(); - } - }); - d.show(); - }, - - create_interview: function (frm, values) { - frappe.call({ - method: "erpnext.hr.doctype.job_applicant.job_applicant.create_interview", - args: { - doc: frm.doc, - interview_round: values.interview_round - }, - callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - } -}); diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json deleted file mode 100644 index 66b609cf99..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "autoname": "HR-APP-.YYYY.-.#####", - "creation": "2013-01-29 19:25:37", - "description": "Applicant for a Job", - "doctype": "DocType", - "document_type": "Document", - "email_append_to": 1, - "engine": "InnoDB", - "field_order": [ - "details_section", - "applicant_name", - "email_id", - "phone_number", - "country", - "column_break_3", - "job_title", - "designation", - "status", - "source_and_rating_section", - "source", - "source_name", - "employee_referral", - "column_break_13", - "applicant_rating", - "section_break_6", - "notes", - "cover_letter", - "resume_attachment", - "resume_link", - "section_break_16", - "currency", - "column_break_18", - "lower_range", - "upper_range" - ], - "fields": [ - { - "bold": 1, - "fieldname": "applicant_name", - "fieldtype": "Data", - "in_global_search": 1, - "label": "Applicant Name", - "reqd": 1 - }, - { - "bold": 1, - "fieldname": "email_id", - "fieldtype": "Data", - "label": "Email Address", - "options": "Email", - "reqd": 1 - }, - { - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Status", - "options": "Open\nReplied\nRejected\nHold\nAccepted", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "job_title", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Job Opening", - "options": "Job Opening" - }, - { - "fieldname": "source", - "fieldtype": "Link", - "label": "Source", - "options": "Job Applicant Source" - }, - { - "depends_on": "eval: doc.source==\"Employee Referral\" ", - "fieldname": "source_name", - "fieldtype": "Link", - "label": "Source Name", - "options": "Employee" - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break", - "label": "Resume" - }, - { - "fieldname": "cover_letter", - "fieldtype": "Text", - "label": "Cover Letter" - }, - { - "fieldname": "resume_attachment", - "fieldtype": "Attach", - "label": "Resume Attachment" - }, - { - "fieldname": "notes", - "fieldtype": "Data", - "label": "Notes", - "read_only": 1 - }, - { - "fieldname": "phone_number", - "fieldtype": "Data", - "label": "Phone Number", - "options": "Phone" - }, - { - "fieldname": "country", - "fieldtype": "Link", - "label": "Country", - "options": "Country" - }, - { - "fieldname": "resume_link", - "fieldtype": "Data", - "label": "Resume Link" - }, - { - "fieldname": "applicant_rating", - "fieldtype": "Rating", - "in_list_view": 1, - "label": "Applicant Rating" - }, - { - "fieldname": "section_break_16", - "fieldtype": "Section Break", - "label": "Salary Expectation" - }, - { - "fieldname": "lower_range", - "fieldtype": "Currency", - "label": "Lower Range", - "options": "currency", - "precision": "0" - }, - { - "fieldname": "upper_range", - "fieldtype": "Currency", - "label": "Upper Range", - "options": "currency", - "precision": "0" - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency" - }, - { - "fieldname": "employee_referral", - "fieldtype": "Link", - "label": "Employee Referral", - "options": "Employee Referral", - "read_only": 1 - }, - { - "fieldname": "details_section", - "fieldtype": "Section Break", - "label": "Details" - }, - { - "fieldname": "source_and_rating_section", - "fieldtype": "Section Break", - "label": "Source and Rating" - }, - { - "fieldname": "column_break_13", - "fieldtype": "Column Break" - }, - { - "fetch_from": "job_opening.designation", - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation" - } - ], - "icon": "fa fa-user", - "idx": 1, - "index_web_pages_for_search": 1, - "links": [], - "modified": "2022-01-12 16:28:53.196881", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Applicant", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "search_fields": "applicant_name, email_id, job_title, phone_number", - "sender_field": "email_id", - "sort_field": "modified", - "sort_order": "ASC", - "states": [], - "subject_field": "notes", - "title_field": "applicant_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py deleted file mode 100644 index 5b0a4cafbf..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant.py +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.naming import append_number_if_name_exists -from frappe.utils import validate_email_address - -from erpnext.hr.doctype.interview.interview import get_interviewers - - -class DuplicationError(frappe.ValidationError): - pass - - -class JobApplicant(Document): - def onload(self): - job_offer = frappe.get_all("Job Offer", filters={"job_applicant": self.name}) - if job_offer: - self.get("__onload").job_offer = job_offer[0].name - - def autoname(self): - self.name = self.email_id - - # applicant can apply more than once for a different job title or reapply - if frappe.db.exists("Job Applicant", self.name): - self.name = append_number_if_name_exists("Job Applicant", self.name) - - def validate(self): - if self.email_id: - validate_email_address(self.email_id, True) - - if self.employee_referral: - self.set_status_for_employee_referral() - - if not self.applicant_name and self.email_id: - guess = self.email_id.split("@")[0] - self.applicant_name = " ".join([p.capitalize() for p in guess.split(".")]) - - def set_status_for_employee_referral(self): - emp_ref = frappe.get_doc("Employee Referral", self.employee_referral) - if self.status in ["Open", "Replied", "Hold"]: - emp_ref.db_set("status", "In Process") - elif self.status in ["Accepted", "Rejected"]: - emp_ref.db_set("status", self.status) - - -@frappe.whitelist() -def create_interview(doc, interview_round): - import json - - if isinstance(doc, str): - doc = json.loads(doc) - doc = frappe.get_doc(doc) - - round_designation = frappe.db.get_value("Interview Round", interview_round, "designation") - - if round_designation and doc.designation and round_designation != doc.designation: - frappe.throw( - _("Interview Round {0} is only applicable for the Designation {1}").format( - interview_round, round_designation - ) - ) - - interview = frappe.new_doc("Interview") - interview.interview_round = interview_round - interview.job_applicant = doc.name - interview.designation = doc.designation - interview.resume_link = doc.resume_link - interview.job_opening = doc.job_title - interviewer_detail = get_interviewers(interview_round) - - for d in interviewer_detail: - interview.append("interview_details", {"interviewer": d.interviewer}) - return interview - - -@frappe.whitelist() -def get_interview_details(job_applicant): - interview_details = frappe.db.get_all( - "Interview", - filters={"job_applicant": job_applicant, "docstatus": ["!=", 2]}, - fields=["name", "interview_round", "expected_average_rating", "average_rating", "status"], - ) - interview_detail_map = {} - meta = frappe.get_meta("Interview") - number_of_stars = meta.get_options("expected_average_rating") or 5 - - for detail in interview_details: - detail.expected_average_rating = ( - detail.expected_average_rating * number_of_stars if detail.expected_average_rating else 0 - ) - detail.average_rating = detail.average_rating * number_of_stars if detail.average_rating else 0 - - interview_detail_map[detail.name] = detail - - return {"interviews": interview_detail_map, "stars": number_of_stars} diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html b/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html deleted file mode 100644 index 734b2fe5e8..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.html +++ /dev/null @@ -1,53 +0,0 @@ - -{% if not jQuery.isEmptyObject(data) %} - - - - - - - - - - - - - {% for(const [key, value] of Object.entries(data)) { %} - - - - - {% let right_class = ''; %} - {% let left_class = ''; %} - - {% $.each([value["expected_average_rating"], value["average_rating"]], (_, val) => { %} - - {% }); %} - - {% } %} - -
{{ __("Interview") }}{{ __("Interview Round") }}{{ __("Status") }}{{ __("Expected Rating") }}{{ __("Rating") }}
{%= key %} {%= value["interview_round"] %} {%= value["status"] %} -
- {% for (let i = 1; i <= number_of_stars; i++) { %} - {% if (i <= val) { %} - {% right_class = 'star-click'; %} - {% } else { %} - {% right_class = ''; %} - {% } %} - - {% if ((i <= val) || ((i - 0.5) == val)) { %} - {% left_class = 'star-click'; %} - {% } else { %} - {% left_class = ''; %} - {% } %} - - - - - - {% } %} -
-
-{% else %} -

No Interview has been scheduled.

-{% endif %} diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py b/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py deleted file mode 100644 index 14b944ac61..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -def get_data(): - return { - "fieldname": "job_applicant", - "transactions": [ - {"items": ["Employee", "Employee Onboarding"]}, - {"items": ["Job Offer", "Appointment Letter"]}, - {"items": ["Interview"]}, - ], - } diff --git a/erpnext/hr/doctype/job_applicant/job_applicant_list.js b/erpnext/hr/doctype/job_applicant/job_applicant_list.js deleted file mode 100644 index 2ad0d591d8..0000000000 --- a/erpnext/hr/doctype/job_applicant/job_applicant_list.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt - -frappe.listview_settings['Job Applicant'] = { - add_fields: ["status"], - get_indicator: function (doc) { - if (doc.status == "Accepted") { - return [__(doc.status), "green", "status,=," + doc.status]; - } else if (["Open", "Replied"].includes(doc.status)) { - return [__(doc.status), "orange", "status,=," + doc.status]; - } else if (["Hold", "Rejected"].includes(doc.status)) { - return [__(doc.status), "red", "status,=," + doc.status]; - } - } -}; diff --git a/erpnext/hr/doctype/job_applicant/test_job_applicant.py b/erpnext/hr/doctype/job_applicant/test_job_applicant.py deleted file mode 100644 index 99d1161978..0000000000 --- a/erpnext/hr/doctype/job_applicant/test_job_applicant.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -import frappe - -from erpnext.hr.doctype.designation.test_designation import create_designation - - -class TestJobApplicant(unittest.TestCase): - def test_job_applicant_naming(self): - applicant = frappe.get_doc( - { - "doctype": "Job Applicant", - "status": "Open", - "applicant_name": "_Test Applicant", - "email_id": "job_applicant_naming@example.com", - } - ).insert() - self.assertEqual(applicant.name, "job_applicant_naming@example.com") - - applicant = frappe.get_doc( - { - "doctype": "Job Applicant", - "status": "Open", - "applicant_name": "_Test Applicant", - "email_id": "job_applicant_naming@example.com", - } - ).insert() - self.assertEqual(applicant.name, "job_applicant_naming@example.com-1") - - def tearDown(self): - frappe.db.rollback() - - -def create_job_applicant(**args): - args = frappe._dict(args) - - filters = { - "applicant_name": args.applicant_name or "_Test Applicant", - "email_id": args.email_id or "test_applicant@example.com", - } - - if frappe.db.exists("Job Applicant", filters): - return frappe.get_doc("Job Applicant", filters) - - job_applicant = frappe.get_doc( - { - "doctype": "Job Applicant", - "status": args.status or "Open", - "designation": create_designation().name, - } - ) - - job_applicant.update(filters) - job_applicant.save() - - return job_applicant diff --git a/erpnext/hr/doctype/job_applicant_source/__init__.py b/erpnext/hr/doctype/job_applicant_source/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js deleted file mode 100644 index 8725f2312b..0000000000 --- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Job Applicant Source', { - refresh: function() { - - } -}); diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json deleted file mode 100644 index c3bb1eb9f7..0000000000 --- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:source_name", - "beta": 0, - "creation": "2018-06-16 12:28:26.432651", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "source_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Source Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "details", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-06-16 14:53:52.918474", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Applicant Source", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py b/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py deleted file mode 100644 index 1f208c14c6..0000000000 --- a/erpnext/hr/doctype/job_applicant_source/job_applicant_source.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class JobApplicantSource(Document): - pass diff --git a/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py b/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py deleted file mode 100644 index cee5daf783..0000000000 --- a/erpnext/hr/doctype/job_applicant_source/test_job_applicant_source.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestJobApplicantSource(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/job_offer/__init__.py b/erpnext/hr/doctype/job_offer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/job_offer/job_offer.js b/erpnext/hr/doctype/job_offer/job_offer.js deleted file mode 100755 index 558f4954d3..0000000000 --- a/erpnext/hr/doctype/job_offer/job_offer.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.provide("erpnext.job_offer"); - -frappe.ui.form.on("Job Offer", { - onload: function (frm) { - frm.set_query("select_terms", function() { - return { filters: { hr: 1 } }; - }); - }, - - setup: function (frm) { - frm.email_field = "applicant_email"; - }, - - select_terms: function (frm) { - erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) { - if (!r.exc) { - frm.set_value("terms", r.message); - } - }); - }, - - refresh: function (frm) { - if ((!frm.doc.__islocal) && (frm.doc.status == 'Accepted') - && (frm.doc.docstatus === 1) && (!frm.doc.__onload || !frm.doc.__onload.employee)) { - frm.add_custom_button(__('Create Employee'), - function () { - erpnext.job_offer.make_employee(frm); - } - ); - } - - if(frm.doc.__onload && frm.doc.__onload.employee) { - frm.add_custom_button(__('Show Employee'), - function () { - frappe.set_route("Form", "Employee", frm.doc.__onload.employee); - } - ); - } - } - -}); - -erpnext.job_offer.make_employee = function (frm) { - frappe.model.open_mapped_doc({ - method: "erpnext.hr.doctype.job_offer.job_offer.make_employee", - frm: frm - }); -}; diff --git a/erpnext/hr/doctype/job_offer/job_offer.json b/erpnext/hr/doctype/job_offer/job_offer.json deleted file mode 100644 index c0b7f69e1b..0000000000 --- a/erpnext/hr/doctype/job_offer/job_offer.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "HR-OFF-.YYYY.-.#####", - "creation": "2015-03-04 14:20:17.662207", - "doctype": "DocType", - "document_type": "Document", - "engine": "InnoDB", - "field_order": [ - "job_applicant", - "applicant_name", - "applicant_email", - "column_break_3", - "status", - "offer_date", - "designation", - "company", - "section_break_4", - "offer_terms", - "section_break_14", - "select_terms", - "terms", - "printing_details", - "letter_head", - "column_break_16", - "select_print_heading", - "amended_from" - ], - "fields": [ - { - "fieldname": "job_applicant", - "fieldtype": "Link", - "label": "Job Applicant", - "options": "Job Applicant", - "print_hide": 1, - "reqd": 1 - }, - { - "fetch_from": "job_applicant.applicant_name", - "fieldname": "applicant_name", - "fieldtype": "Data", - "in_global_search": 1, - "in_list_view": 1, - "label": "Applicant Name", - "read_only": 1, - "reqd": 1 - }, - { - "fetch_from": "job_applicant.email_id", - "fieldname": "applicant_email", - "fieldtype": "Data", - "in_global_search": 1, - "label": "Applicant Email Address", - "options": "Email", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "allow_on_submit": 1, - "fieldname": "status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Status", - "no_copy": 1, - "options": "Awaiting Response\nAccepted\nRejected", - "print_hide": 1 - }, - { - "fieldname": "offer_date", - "fieldtype": "Date", - "label": "Offer Date", - "reqd": 1 - }, - { - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Designation", - "options": "Designation", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "print_hide": 1, - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "fieldname": "offer_terms", - "fieldtype": "Table", - "label": "Job Offer Terms", - "options": "Job Offer Term" - }, - { - "fieldname": "section_break_14", - "fieldtype": "Section Break" - }, - { - "fieldname": "select_terms", - "fieldtype": "Link", - "label": "Select Terms and Conditions", - "options": "Terms and Conditions", - "print_hide": 1 - }, - { - "fieldname": "terms", - "fieldtype": "Text Editor", - "label": "Terms and Conditions" - }, - { - "collapsible": 1, - "fieldname": "printing_details", - "fieldtype": "Section Break", - "label": "Printing Details" - }, - { - "allow_on_submit": 1, - "fetch_from": "company.default_letter_head", - "fieldname": "letter_head", - "fieldtype": "Link", - "label": "Letter Head", - "options": "Letter Head", - "print_hide": 1 - }, - { - "fieldname": "column_break_16", - "fieldtype": "Column Break", - "print_hide": 1, - "width": "50%" - }, - { - "allow_on_submit": 1, - "fieldname": "select_print_heading", - "fieldtype": "Link", - "label": "Print Heading", - "options": "Print Heading", - "print_hide": 1, - "report_hide": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Job Offer", - "print_hide": 1, - "read_only": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2020-06-25 00:56:24.756395", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Offer", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "applicant_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/job_offer/job_offer.py b/erpnext/hr/doctype/job_offer/job_offer.py deleted file mode 100644 index b46930a117..0000000000 --- a/erpnext/hr/doctype/job_offer/job_offer.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import cint -from frappe.utils.data import get_link_to_form - - -class JobOffer(Document): - def onload(self): - employee = frappe.db.get_value("Employee", {"job_applicant": self.job_applicant}, "name") or "" - self.set_onload("employee", employee) - - def validate(self): - self.validate_vacancies() - job_offer = frappe.db.exists( - "Job Offer", {"job_applicant": self.job_applicant, "docstatus": ["!=", 2]} - ) - if job_offer and job_offer != self.name: - frappe.throw( - _("Job Offer: {0} is already for Job Applicant: {1}").format( - frappe.bold(job_offer), frappe.bold(self.job_applicant) - ) - ) - - def validate_vacancies(self): - staffing_plan = get_staffing_plan_detail(self.designation, self.company, self.offer_date) - check_vacancies = frappe.get_single("HR Settings").check_vacancies - if staffing_plan and check_vacancies: - job_offers = self.get_job_offer(staffing_plan.from_date, staffing_plan.to_date) - if not staffing_plan.get("vacancies") or cint(staffing_plan.vacancies) - len(job_offers) <= 0: - error_variable = "for " + frappe.bold(self.designation) - if staffing_plan.get("parent"): - error_variable = frappe.bold(get_link_to_form("Staffing Plan", staffing_plan.parent)) - - frappe.throw(_("There are no vacancies under staffing plan {0}").format(error_variable)) - - def on_change(self): - update_job_applicant(self.status, self.job_applicant) - - def get_job_offer(self, from_date, to_date): - """Returns job offer created during a time period""" - return frappe.get_all( - "Job Offer", - filters={ - "offer_date": ["between", (from_date, to_date)], - "designation": self.designation, - "company": self.company, - "docstatus": 1, - }, - fields=["name"], - ) - - -def update_job_applicant(status, job_applicant): - if status in ("Accepted", "Rejected"): - frappe.set_value("Job Applicant", job_applicant, "status", status) - - -def get_staffing_plan_detail(designation, company, offer_date): - detail = frappe.db.sql( - """ - SELECT DISTINCT spd.parent, - sp.from_date as from_date, - sp.to_date as to_date, - sp.name, - sum(spd.vacancies) as vacancies, - spd.designation - FROM `tabStaffing Plan Detail` spd, `tabStaffing Plan` sp - WHERE - sp.docstatus=1 - AND spd.designation=%s - AND sp.company=%s - AND spd.parent = sp.name - AND %s between sp.from_date and sp.to_date - """, - (designation, company, offer_date), - as_dict=1, - ) - - return frappe._dict(detail[0]) if (detail and detail[0].parent) else None - - -@frappe.whitelist() -def make_employee(source_name, target_doc=None): - def set_missing_values(source, target): - target.personal_email, target.first_name = frappe.db.get_value( - "Job Applicant", source.job_applicant, ["email_id", "applicant_name"] - ) - - doc = get_mapped_doc( - "Job Offer", - source_name, - { - "Job Offer": { - "doctype": "Employee", - "field_map": {"applicant_name": "employee_name", "offer_date": "scheduled_confirmation_date"}, - } - }, - target_doc, - set_missing_values, - ) - return doc diff --git a/erpnext/hr/doctype/job_offer/job_offer_list.js b/erpnext/hr/doctype/job_offer/job_offer_list.js deleted file mode 100644 index 4fa5be7cc8..0000000000 --- a/erpnext/hr/doctype/job_offer/job_offer_list.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt - -frappe.listview_settings['Job Offer'] = { - add_fields: ["company", "designation", "job_applicant", "status"], - get_indicator: function (doc) { - if (doc.status == "Accepted") { - return [__(doc.status), "green", "status,=," + doc.status]; - } else if (doc.status == "Awaiting Response") { - return [__(doc.status), "orange", "status,=," + doc.status]; - } else if (doc.status == "Rejected") { - return [__(doc.status), "red", "status,=," + doc.status]; - } - } -}; diff --git a/erpnext/hr/doctype/job_offer/test_job_offer.py b/erpnext/hr/doctype/job_offer/test_job_offer.py deleted file mode 100644 index 7d8ef115d1..0000000000 --- a/erpnext/hr/doctype/job_offer/test_job_offer.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, nowdate - -from erpnext.hr.doctype.designation.test_designation import create_designation -from erpnext.hr.doctype.job_applicant.test_job_applicant import create_job_applicant -from erpnext.hr.doctype.staffing_plan.test_staffing_plan import make_company - -# test_records = frappe.get_test_records('Job Offer') - - -class TestJobOffer(unittest.TestCase): - def test_job_offer_creation_against_vacancies(self): - frappe.db.set_value("HR Settings", None, "check_vacancies", 1) - job_applicant = create_job_applicant(email_id="test_job_offer@example.com") - job_offer = create_job_offer(job_applicant=job_applicant.name, designation="UX Designer") - - create_staffing_plan( - name="Test No Vacancies", - staffing_details=[ - {"designation": "UX Designer", "vacancies": 0, "estimated_cost_per_position": 5000} - ], - ) - self.assertRaises(frappe.ValidationError, job_offer.submit) - - # test creation of job offer when vacancies are not present - frappe.db.set_value("HR Settings", None, "check_vacancies", 0) - job_offer.submit() - self.assertTrue(frappe.db.exists("Job Offer", job_offer.name)) - - def test_job_applicant_update(self): - frappe.db.set_value("HR Settings", None, "check_vacancies", 0) - create_staffing_plan() - job_applicant = create_job_applicant(email_id="test_job_applicants@example.com") - job_offer = create_job_offer(job_applicant=job_applicant.name) - job_offer.submit() - job_applicant.reload() - self.assertEqual(job_applicant.status, "Accepted") - - # status update after rejection - job_offer.status = "Rejected" - job_offer.submit() - job_applicant.reload() - self.assertEquals(job_applicant.status, "Rejected") - frappe.db.set_value("HR Settings", None, "check_vacancies", 1) - - def tearDown(self): - frappe.db.sql("DELETE FROM `tabJob Offer` WHERE 1") - - -def create_job_offer(**args): - args = frappe._dict(args) - if not args.job_applicant: - job_applicant = create_job_applicant() - - if not frappe.db.exists("Designation", args.designation): - designation = create_designation(designation_name=args.designation) - - job_offer = frappe.get_doc( - { - "doctype": "Job Offer", - "job_applicant": args.job_applicant or job_applicant.name, - "offer_date": args.offer_date or nowdate(), - "designation": args.designation or "Researcher", - "status": args.status or "Accepted", - } - ) - return job_offer - - -def create_staffing_plan(**args): - args = frappe._dict(args) - make_company() - frappe.db.set_value("Company", "_Test Company", "is_group", 1) - if frappe.db.exists("Staffing Plan", args.name or "Test"): - return - staffing_plan = frappe.get_doc( - { - "doctype": "Staffing Plan", - "name": args.name or "Test", - "from_date": args.from_date or nowdate(), - "to_date": args.to_date or add_days(nowdate(), 10), - "staffing_details": args.staffing_details - or [{"designation": "Researcher", "vacancies": 1, "estimated_cost_per_position": 50000}], - } - ) - staffing_plan.insert() - staffing_plan.submit() - return staffing_plan diff --git a/erpnext/hr/doctype/job_offer_term/__init__.py b/erpnext/hr/doctype/job_offer_term/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/job_offer_term/job_offer_term.json b/erpnext/hr/doctype/job_offer_term/job_offer_term.json deleted file mode 100644 index dcd723e033..0000000000 --- a/erpnext/hr/doctype/job_offer_term/job_offer_term.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2015-03-05 12:53:45.342292", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "offer_term", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Offer Term", - "length": 0, - "no_copy": 0, - "options": "Offer Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "value", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Value / Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-02-15 03:30:56.020668", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Offer Term", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/job_offer_term/job_offer_term.py b/erpnext/hr/doctype/job_offer_term/job_offer_term.py deleted file mode 100644 index d2eae467e4..0000000000 --- a/erpnext/hr/doctype/job_offer_term/job_offer_term.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class JobOfferTerm(Document): - pass diff --git a/erpnext/hr/doctype/job_opening/README.md b/erpnext/hr/doctype/job_opening/README.md deleted file mode 100644 index 5a19f33c8e..0000000000 --- a/erpnext/hr/doctype/job_opening/README.md +++ /dev/null @@ -1 +0,0 @@ -Open position for Job. \ No newline at end of file diff --git a/erpnext/hr/doctype/job_opening/__init__.py b/erpnext/hr/doctype/job_opening/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/job_opening/job_opening.js b/erpnext/hr/doctype/job_opening/job_opening.js deleted file mode 100644 index 04aab7e0da..0000000000 --- a/erpnext/hr/doctype/job_opening/job_opening.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Job Opening', { - onload: function(frm) { - frm.set_query("department", function() { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - }, - designation: function(frm) { - if(frm.doc.designation && frm.doc.company){ - frappe.call({ - "method": "erpnext.hr.doctype.staffing_plan.staffing_plan.get_active_staffing_plan_details", - args: { - company: frm.doc.company, - designation: frm.doc.designation, - date: frappe.datetime.now_date() // ToDo - Date in Job Opening? - }, - callback: function (data) { - if(data.message){ - frm.set_value('staffing_plan', data.message[0].name); - frm.set_value('planned_vacancies', data.message[0].vacancies); - } else { - frm.set_value('staffing_plan', ""); - frm.set_value('planned_vacancies', 0); - frappe.show_alert({ - indicator: 'orange', - message: __('No Staffing Plans found for this Designation') - }); - } - } - }); - } - else{ - frm.set_value('staffing_plan', ""); - frm.set_value('planned_vacancies', 0); - } - }, - company: function(frm) { - frm.set_value('designation', ""); - } -}); diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json deleted file mode 100644 index b8f6df6f7a..0000000000 --- a/erpnext/hr/doctype/job_opening/job_opening.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "actions": [], - "autoname": "field:route", - "creation": "2013-01-15 16:13:36", - "description": "Description of a Job Opening", - "doctype": "DocType", - "document_type": "Document", - "engine": "InnoDB", - "field_order": [ - "job_title", - "company", - "status", - "column_break_5", - "designation", - "department", - "staffing_plan", - "planned_vacancies", - "section_break_6", - "publish", - "route", - "column_break_12", - "job_application_route", - "section_break_14", - "description", - "section_break_16", - "currency", - "lower_range", - "upper_range", - "column_break_20", - "publish_salary_range" - ], - "fields": [ - { - "fieldname": "job_title", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Job Title", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Status", - "options": "Open\nClosed" - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation", - "reqd": 1 - }, - { - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department" - }, - { - "fieldname": "staffing_plan", - "fieldtype": "Link", - "label": "Staffing Plan", - "options": "Staffing Plan", - "read_only": 1 - }, - { - "depends_on": "staffing_plan", - "fieldname": "planned_vacancies", - "fieldtype": "Int", - "label": "Planned number of Positions", - "read_only": 1 - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "publish", - "fieldtype": "Check", - "label": "Publish on website" - }, - { - "depends_on": "publish", - "fieldname": "route", - "fieldtype": "Data", - "label": "Route", - "unique": 1 - }, - { - "description": "Job profile, qualifications required etc.", - "fieldname": "description", - "fieldtype": "Text Editor", - "in_list_view": 1, - "label": "Description" - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fieldname": "section_break_14", - "fieldtype": "Section Break" - }, - { - "collapsible": 1, - "fieldname": "section_break_16", - "fieldtype": "Section Break" - }, - { - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency" - }, - { - "fieldname": "lower_range", - "fieldtype": "Currency", - "label": "Lower Range", - "options": "currency", - "precision": "0" - }, - { - "fieldname": "upper_range", - "fieldtype": "Currency", - "label": "Upper Range", - "options": "currency", - "precision": "0" - }, - { - "fieldname": "column_break_20", - "fieldtype": "Column Break" - }, - { - "depends_on": "publish", - "description": "Route to the custom Job Application Webform", - "fieldname": "job_application_route", - "fieldtype": "Data", - "label": "Job Application Route" - }, - { - "default": "0", - "fieldname": "publish_salary_range", - "fieldtype": "Check", - "label": "Publish Salary Range" - } - ], - "icon": "fa fa-bookmark", - "idx": 1, - "links": [], - "modified": "2020-09-18 11:23:29.488923", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Opening", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "read": 1, - "role": "Guest" - } - ], - "sort_field": "modified", - "sort_order": "ASC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/job_opening/job_opening.py b/erpnext/hr/doctype/job_opening/job_opening.py deleted file mode 100644 index c71407d71d..0000000000 --- a/erpnext/hr/doctype/job_opening/job_opening.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.website.website_generator import WebsiteGenerator - -from erpnext.hr.doctype.staffing_plan.staffing_plan import ( - get_active_staffing_plan_details, - get_designation_counts, -) - - -class JobOpening(WebsiteGenerator): - website = frappe._dict( - template="templates/generators/job_opening.html", - condition_field="publish", - page_title_field="job_title", - ) - - def validate(self): - if not self.route: - self.route = frappe.scrub(self.job_title).replace("_", "-") - self.validate_current_vacancies() - - def validate_current_vacancies(self): - if not self.staffing_plan: - staffing_plan = get_active_staffing_plan_details(self.company, self.designation) - if staffing_plan: - self.staffing_plan = staffing_plan[0].name - self.planned_vacancies = staffing_plan[0].vacancies - elif not self.planned_vacancies: - planned_vacancies = frappe.db.sql( - """ - select vacancies from `tabStaffing Plan Detail` - where parent=%s and designation=%s""", - (self.staffing_plan, self.designation), - ) - self.planned_vacancies = planned_vacancies[0][0] if planned_vacancies else None - - if self.staffing_plan and self.planned_vacancies: - staffing_plan_company = frappe.db.get_value("Staffing Plan", self.staffing_plan, "company") - lft, rgt = frappe.get_cached_value("Company", staffing_plan_company, ["lft", "rgt"]) - - designation_counts = get_designation_counts(self.designation, self.company) - current_count = designation_counts["employee_count"] + designation_counts["job_openings"] - - if self.planned_vacancies <= current_count: - frappe.throw( - _( - "Job Openings for designation {0} already open or hiring completed as per Staffing Plan {1}" - ).format(self.designation, self.staffing_plan) - ) - - def get_context(self, context): - context.parents = [{"route": "jobs", "title": _("All Jobs")}] - - -def get_list_context(context): - context.title = _("Jobs") - context.introduction = _("Current Job Openings") - context.get_list = get_job_openings - - -def get_job_openings( - doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None -): - fields = [ - "name", - "status", - "job_title", - "description", - "publish_salary_range", - "lower_range", - "upper_range", - "currency", - "job_application_route", - ] - - filters = filters or {} - filters.update({"status": "Open"}) - - if txt: - filters.update( - {"job_title": ["like", "%{0}%".format(txt)], "description": ["like", "%{0}%".format(txt)]} - ) - - return frappe.get_all( - doctype, filters, fields, start=limit_start, page_length=limit_page_length, order_by=order_by - ) diff --git a/erpnext/hr/doctype/job_opening/job_opening_dashboard.py b/erpnext/hr/doctype/job_opening/job_opening_dashboard.py deleted file mode 100644 index a30932870d..0000000000 --- a/erpnext/hr/doctype/job_opening/job_opening_dashboard.py +++ /dev/null @@ -1,5 +0,0 @@ -def get_data(): - return { - "fieldname": "job_title", - "transactions": [{"items": ["Job Applicant"]}], - } diff --git a/erpnext/hr/doctype/job_opening/templates/job_opening_row.html b/erpnext/hr/doctype/job_opening/templates/job_opening_row.html deleted file mode 100644 index 69bf49bef7..0000000000 --- a/erpnext/hr/doctype/job_opening/templates/job_opening_row.html +++ /dev/null @@ -1,18 +0,0 @@ -
-

{{ doc.job_title }}

-

{{ doc.description }}

- {%- if doc.publish_salary_range -%} -

{{_("Salary range per month")}}: {{ frappe.format_value(frappe.utils.flt(doc.lower_range), currency=doc.currency) }} - {{ frappe.format_value(frappe.utils.flt(doc.upper_range), currency=doc.currency) }}

- {% endif %} -
- {%- if doc.job_application_route -%} - - {{ _("Apply Now") }} - {% else %} - - {{ _("Apply Now") }} - {% endif %} -
-
diff --git a/erpnext/hr/doctype/job_opening/test_job_opening.py b/erpnext/hr/doctype/job_opening/test_job_opening.py deleted file mode 100644 index a72a6eb338..0000000000 --- a/erpnext/hr/doctype/job_opening/test_job_opening.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Job Opening') - - -class TestJobOpening(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/leave_allocation/README.md b/erpnext/hr/doctype/leave_allocation/README.md deleted file mode 100644 index 870f9a501a..0000000000 --- a/erpnext/hr/doctype/leave_allocation/README.md +++ /dev/null @@ -1 +0,0 @@ -Leave Allocated to an Employee at the beginning of the period. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_allocation/__init__.py b/erpnext/hr/doctype/leave_allocation/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.js b/erpnext/hr/doctype/leave_allocation/leave_allocation.js deleted file mode 100755 index aef4412251..0000000000 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation.js +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); - -frappe.ui.form.on("Leave Allocation", { - onload: function(frm) { - // Ignore cancellation of doctype on cancel all. - frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; - - if (!frm.doc.from_date) frm.set_value("from_date", frappe.datetime.get_today()); - - frm.set_query("employee", function() { - return { - query: "erpnext.controllers.queries.employee_query" - }; - }); - frm.set_query("leave_type", function() { - return { - filters: { - is_lwp: 0 - } - }; - }); - }, - - refresh: function(frm) { - if (frm.doc.docstatus === 1 && frm.doc.expired) { - var valid_expiry = moment(frappe.datetime.get_today()).isBetween(frm.doc.from_date, frm.doc.to_date); - if (valid_expiry) { - // expire current allocation - frm.add_custom_button(__('Expire Allocation'), function() { - frm.trigger("expire_allocation"); - }); - } - } - - // make new leaves allocated field read only if allocation is created via leave policy assignment - // and leave type is earned leave, since these leaves would be allocated via the scheduler - if (frm.doc.leave_policy_assignment) { - frappe.db.get_value("Leave Type", frm.doc.leave_type, "is_earned_leave", (r) => { - if (r && cint(r.is_earned_leave)) - frm.set_df_property("new_leaves_allocated", "read_only", 1); - }); - } - }, - - expire_allocation: function(frm) { - frappe.call({ - method: 'erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.expire_allocation', - args: { - 'allocation': frm.doc, - 'expiry_date': frappe.datetime.get_today() - }, - freeze: true, - callback: function(r) { - if (!r.exc) { - frappe.msgprint(__("Allocation Expired!")); - } - frm.refresh(); - } - }); - }, - - employee: function(frm) { - frm.trigger("calculate_total_leaves_allocated"); - }, - - leave_type: function(frm) { - frm.trigger("leave_policy"); - frm.trigger("calculate_total_leaves_allocated"); - }, - - carry_forward: function(frm) { - frm.trigger("calculate_total_leaves_allocated"); - }, - - unused_leaves: function(frm) { - frm.set_value("total_leaves_allocated", - flt(frm.doc.unused_leaves) + flt(frm.doc.new_leaves_allocated)); - }, - - new_leaves_allocated: function(frm) { - frm.set_value("total_leaves_allocated", - flt(frm.doc.unused_leaves) + flt(frm.doc.new_leaves_allocated)); - }, - - leave_policy: function(frm) { - if (frm.doc.leave_policy && frm.doc.leave_type) { - frappe.db.get_value("Leave Policy Detail", { - 'parent': frm.doc.leave_policy, - 'leave_type': frm.doc.leave_type - }, 'annual_allocation', (r) => { - if (r && !r.exc) frm.set_value("new_leaves_allocated", flt(r.annual_allocation)); - }, "Leave Policy"); - } - }, - calculate_total_leaves_allocated: function(frm) { - if (cint(frm.doc.carry_forward) == 1 && frm.doc.leave_type && frm.doc.employee) { - return frappe.call({ - method: "set_total_leaves_allocated", - doc: frm.doc, - callback: function() { - frm.refresh_fields(); - } - }); - } else if (cint(frm.doc.carry_forward) == 0) { - frm.set_value("unused_leaves", 0); - frm.set_value("total_leaves_allocated", flt(frm.doc.new_leaves_allocated)); - } - } -}); - -frappe.tour["Leave Allocation"] = [ - { - fieldname: "employee", - title: "Employee", - description: __("Select the Employee for which you want to allocate leaves.") - }, - { - fieldname: "leave_type", - title: "Leave Type", - description: __("Select the Leave Type like Sick leave, Privilege Leave, Casual Leave, etc.") - }, - { - fieldname: "from_date", - title: "From Date", - description: __("Select the date from which this Leave Allocation will be valid.") - }, - { - fieldname: "to_date", - title: "To Date", - description: __("Select the date after which this Leave Allocation will expire.") - }, - { - fieldname: "new_leaves_allocated", - title: "New Leaves Allocated", - description: __("Enter the number of leaves you want to allocate for the period.") - } -]; diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.json b/erpnext/hr/doctype/leave_allocation/leave_allocation.json deleted file mode 100644 index 9d1db9b17f..0000000000 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-02-20 19:10:38", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "naming_series", - "employee", - "employee_name", - "department", - "company", - "column_break1", - "leave_type", - "from_date", - "to_date", - "section_break_6", - "new_leaves_allocated", - "carry_forward", - "unused_leaves", - "total_leaves_allocated", - "total_leaves_encashed", - "column_break_10", - "compensatory_request", - "leave_period", - "leave_policy", - "leave_policy_assignment", - "carry_forwarded_leaves_count", - "expired", - "amended_from", - "notes", - "description" - ], - "fields": [ - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "HR-LAL-.YYYY.-", - "print_hide": 1, - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "oldfieldname": "employee", - "oldfieldtype": "Link", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_global_search": 1, - "in_list_view": 1, - "label": "Employee Name", - "read_only": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "leave_type", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Leave Type", - "oldfieldname": "leave_type", - "oldfieldtype": "Link", - "options": "Leave Type", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", - "reqd": 1 - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break", - "label": "Allocation" - }, - { - "allow_on_submit": 1, - "bold": 1, - "fieldname": "new_leaves_allocated", - "fieldtype": "Float", - "label": "New Leaves Allocated" - }, - { - "default": "0", - "fieldname": "carry_forward", - "fieldtype": "Check", - "label": "Add unused leaves from previous allocations" - }, - { - "depends_on": "carry_forward", - "fieldname": "unused_leaves", - "fieldtype": "Float", - "label": "Unused leaves", - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "total_leaves_allocated", - "fieldtype": "Float", - "label": "Total Leaves Allocated", - "read_only": 1, - "reqd": 1 - }, - { - "depends_on": "eval:doc.total_leaves_encashed>0", - "fieldname": "total_leaves_encashed", - "fieldtype": "Float", - "label": "Total Leaves Encashed", - "read_only": 1 - }, - { - "fieldname": "column_break_10", - "fieldtype": "Column Break" - }, - { - "fieldname": "compensatory_request", - "fieldtype": "Link", - "label": "Compensatory Leave Request", - "options": "Compensatory Leave Request", - "read_only": 1 - }, - { - "fieldname": "leave_period", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Leave Period", - "options": "Leave Period", - "read_only": 1 - }, - { - "fetch_from": "leave_policy_assignment.leave_policy", - "fieldname": "leave_policy", - "fieldtype": "Link", - "hidden": 1, - "in_standard_filter": 1, - "label": "Leave Policy", - "options": "Leave Policy", - "read_only": 1 - }, - { - "default": "0", - "fieldname": "expired", - "fieldtype": "Check", - "hidden": 1, - "in_standard_filter": 1, - "label": "Expired", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Leave Allocation", - "print_hide": 1, - "read_only": 1 - }, - { - "collapsible": 1, - "fieldname": "notes", - "fieldtype": "Section Break", - "label": "Notes" - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Description", - "oldfieldname": "reason", - "oldfieldtype": "Small Text", - "width": "300px" - }, - { - "depends_on": "carry_forwarded_leaves_count", - "fieldname": "carry_forwarded_leaves_count", - "fieldtype": "Float", - "label": "Carry Forwarded Leaves", - "read_only": 1 - }, - { - "fieldname": "leave_policy_assignment", - "fieldtype": "Link", - "label": "Leave Policy Assignment", - "options": "Leave Policy Assignment", - "read_only": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "reqd": 1 - } - ], - "icon": "fa fa-ok", - "idx": 1, - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2022-04-07 09:50:33.145825", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Allocation", - "naming_rule": "By \"Naming Series\" field", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee,employee_name,leave_type,total_leaves_allocated", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "timeline_field": "employee", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py deleted file mode 100755 index 27479a5e81..0000000000 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py +++ /dev/null @@ -1,359 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, date_diff, flt, formatdate, getdate - -from erpnext.hr.doctype.leave_application.leave_application import get_approved_leaves_for_period -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import ( - create_leave_ledger_entry, - expire_allocation, -) -from erpnext.hr.utils import get_leave_period, set_employee_name - - -class OverlapError(frappe.ValidationError): - pass - - -class BackDatedAllocationError(frappe.ValidationError): - pass - - -class OverAllocationError(frappe.ValidationError): - pass - - -class LessAllocationError(frappe.ValidationError): - pass - - -class ValueMultiplierError(frappe.ValidationError): - pass - - -class LeaveAllocation(Document): - def validate(self): - self.validate_period() - self.validate_allocation_overlap() - self.validate_lwp() - set_employee_name(self) - self.set_total_leaves_allocated() - self.validate_leave_days_and_dates() - - def validate_leave_days_and_dates(self): - # all validations that should run on save as well as on update after submit - self.validate_back_dated_allocation() - self.validate_total_leaves_allocated() - self.validate_leave_allocation_days() - - def validate_leave_allocation_days(self): - company = frappe.db.get_value("Employee", self.employee, "company") - leave_period = get_leave_period(self.from_date, self.to_date, company) - max_leaves_allowed = flt( - frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") - ) - if max_leaves_allowed > 0: - leave_allocated = 0 - if leave_period: - leave_allocated = get_leave_allocation_for_period( - self.employee, - self.leave_type, - leave_period[0].from_date, - leave_period[0].to_date, - exclude_allocation=self.name, - ) - leave_allocated += flt(self.new_leaves_allocated) - if leave_allocated > max_leaves_allowed: - frappe.throw( - _( - "Total allocated leaves are more than maximum allocation allowed for {0} leave type for employee {1} in the period" - ).format(self.leave_type, self.employee), - OverAllocationError, - ) - - def on_submit(self): - self.create_leave_ledger_entry() - - # expire all unused leaves in the ledger on creation of carry forward allocation - allocation = get_previous_allocation(self.from_date, self.leave_type, self.employee) - if self.carry_forward and allocation: - expire_allocation(allocation) - - def on_cancel(self): - self.create_leave_ledger_entry(submit=False) - if self.leave_policy_assignment: - self.update_leave_policy_assignments_when_no_allocations_left() - if self.carry_forward: - self.set_carry_forwarded_leaves_in_previous_allocation(on_cancel=True) - - def on_update_after_submit(self): - if self.has_value_changed("new_leaves_allocated"): - self.validate_against_leave_applications() - - # recalculate total leaves allocated - self.total_leaves_allocated = flt(self.unused_leaves) + flt(self.new_leaves_allocated) - # run required validations again since total leaves are being updated - self.validate_leave_days_and_dates() - - leaves_to_be_added = self.new_leaves_allocated - self.get_existing_leave_count() - args = { - "leaves": leaves_to_be_added, - "from_date": self.from_date, - "to_date": self.to_date, - "is_carry_forward": 0, - } - create_leave_ledger_entry(self, args, True) - self.db_update() - - def get_existing_leave_count(self): - ledger_entries = frappe.get_all( - "Leave Ledger Entry", - filters={ - "transaction_type": "Leave Allocation", - "transaction_name": self.name, - "employee": self.employee, - "company": self.company, - "leave_type": self.leave_type, - }, - pluck="leaves", - ) - total_existing_leaves = 0 - for entry in ledger_entries: - total_existing_leaves += entry - - return total_existing_leaves - - def validate_against_leave_applications(self): - leaves_taken = get_approved_leaves_for_period( - self.employee, self.leave_type, self.from_date, self.to_date - ) - if flt(leaves_taken) > flt(self.total_leaves_allocated): - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): - frappe.msgprint( - _( - "Note: Total allocated leaves {0} shouldn't be less than already approved leaves {1} for the period" - ).format(self.total_leaves_allocated, leaves_taken) - ) - else: - frappe.throw( - _( - "Total allocated leaves {0} cannot be less than already approved leaves {1} for the period" - ).format(self.total_leaves_allocated, leaves_taken), - LessAllocationError, - ) - - def update_leave_policy_assignments_when_no_allocations_left(self): - allocations = frappe.db.get_list( - "Leave Allocation", - filters={"docstatus": 1, "leave_policy_assignment": self.leave_policy_assignment}, - ) - if len(allocations) == 0: - frappe.db.set_value( - "Leave Policy Assignment", self.leave_policy_assignment, "leaves_allocated", 0 - ) - - def validate_period(self): - if date_diff(self.to_date, self.from_date) <= 0: - frappe.throw(_("To date cannot be before from date")) - - def validate_lwp(self): - if frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"): - frappe.throw( - _("Leave Type {0} cannot be allocated since it is leave without pay").format(self.leave_type) - ) - - def validate_allocation_overlap(self): - leave_allocation = frappe.db.sql( - """ - SELECT - name - FROM `tabLeave Allocation` - WHERE - employee=%s AND leave_type=%s - AND name <> %s AND docstatus=1 - AND to_date >= %s AND from_date <= %s""", - (self.employee, self.leave_type, self.name, self.from_date, self.to_date), - ) - - if leave_allocation: - frappe.msgprint( - _("{0} already allocated for Employee {1} for period {2} to {3}").format( - self.leave_type, self.employee, formatdate(self.from_date), formatdate(self.to_date) - ) - ) - - frappe.throw( - _("Reference") - + ': {0}'.format(leave_allocation[0][0]), - OverlapError, - ) - - def validate_back_dated_allocation(self): - future_allocation = frappe.db.sql( - """select name, from_date from `tabLeave Allocation` - where employee=%s and leave_type=%s and docstatus=1 and from_date > %s - and carry_forward=1""", - (self.employee, self.leave_type, self.to_date), - as_dict=1, - ) - - if future_allocation: - frappe.throw( - _( - "Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}" - ).format(formatdate(future_allocation[0].from_date), future_allocation[0].name), - BackDatedAllocationError, - ) - - @frappe.whitelist() - def set_total_leaves_allocated(self): - self.unused_leaves = get_carry_forwarded_leaves( - self.employee, self.leave_type, self.from_date, self.carry_forward - ) - - self.total_leaves_allocated = flt(self.unused_leaves) + flt(self.new_leaves_allocated) - - self.limit_carry_forward_based_on_max_allowed_leaves() - - if self.carry_forward: - self.set_carry_forwarded_leaves_in_previous_allocation() - - if ( - not self.total_leaves_allocated - and not frappe.db.get_value("Leave Type", self.leave_type, "is_earned_leave") - and not frappe.db.get_value("Leave Type", self.leave_type, "is_compensatory") - ): - frappe.throw( - _("Total leaves allocated is mandatory for Leave Type {0}").format(self.leave_type) - ) - - def limit_carry_forward_based_on_max_allowed_leaves(self): - max_leaves_allowed = frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed") - if max_leaves_allowed and self.total_leaves_allocated > flt(max_leaves_allowed): - self.total_leaves_allocated = flt(max_leaves_allowed) - self.unused_leaves = max_leaves_allowed - flt(self.new_leaves_allocated) - - def set_carry_forwarded_leaves_in_previous_allocation(self, on_cancel=False): - """Set carry forwarded leaves in previous allocation""" - previous_allocation = get_previous_allocation(self.from_date, self.leave_type, self.employee) - if on_cancel: - self.unused_leaves = 0.0 - if previous_allocation: - frappe.db.set_value( - "Leave Allocation", - previous_allocation.name, - "carry_forwarded_leaves_count", - self.unused_leaves, - ) - - def validate_total_leaves_allocated(self): - # Adding a day to include To Date in the difference - date_difference = date_diff(self.to_date, self.from_date) + 1 - if date_difference < self.total_leaves_allocated: - frappe.throw(_("Total allocated leaves are more than days in the period"), OverAllocationError) - - def create_leave_ledger_entry(self, submit=True): - if self.unused_leaves: - expiry_days = frappe.db.get_value( - "Leave Type", self.leave_type, "expire_carry_forwarded_leaves_after_days" - ) - end_date = add_days(self.from_date, expiry_days - 1) if expiry_days else self.to_date - args = dict( - leaves=self.unused_leaves, - from_date=self.from_date, - to_date=min(getdate(end_date), getdate(self.to_date)), - is_carry_forward=1, - ) - create_leave_ledger_entry(self, args, submit) - - args = dict( - leaves=self.new_leaves_allocated, - from_date=self.from_date, - to_date=self.to_date, - is_carry_forward=0, - ) - create_leave_ledger_entry(self, args, submit) - - -def get_previous_allocation(from_date, leave_type, employee): - """Returns document properties of previous allocation""" - return frappe.db.get_value( - "Leave Allocation", - filters={ - "to_date": ("<", from_date), - "leave_type": leave_type, - "employee": employee, - "docstatus": 1, - }, - order_by="to_date DESC", - fieldname=["name", "from_date", "to_date", "employee", "leave_type"], - as_dict=1, - ) - - -def get_leave_allocation_for_period( - employee, leave_type, from_date, to_date, exclude_allocation=None -): - from frappe.query_builder.functions import Sum - - Allocation = frappe.qb.DocType("Leave Allocation") - return ( - frappe.qb.from_(Allocation) - .select(Sum(Allocation.total_leaves_allocated).as_("total_allocated_leaves")) - .where( - (Allocation.employee == employee) - & (Allocation.leave_type == leave_type) - & (Allocation.docstatus == 1) - & (Allocation.name != exclude_allocation) - & ( - (Allocation.from_date.between(from_date, to_date)) - | (Allocation.to_date.between(from_date, to_date)) - | ((Allocation.from_date < from_date) & (Allocation.to_date > to_date)) - ) - ) - ).run()[0][0] or 0.0 - - -@frappe.whitelist() -def get_carry_forwarded_leaves(employee, leave_type, date, carry_forward=None): - """Returns carry forwarded leaves for the given employee""" - unused_leaves = 0.0 - previous_allocation = get_previous_allocation(date, leave_type, employee) - if carry_forward and previous_allocation: - validate_carry_forward(leave_type) - unused_leaves = get_unused_leaves( - employee, leave_type, previous_allocation.from_date, previous_allocation.to_date - ) - if unused_leaves: - max_carry_forwarded_leaves = frappe.db.get_value( - "Leave Type", leave_type, "maximum_carry_forwarded_leaves" - ) - if max_carry_forwarded_leaves and unused_leaves > flt(max_carry_forwarded_leaves): - unused_leaves = flt(max_carry_forwarded_leaves) - - return unused_leaves - - -def get_unused_leaves(employee, leave_type, from_date, to_date): - """Returns unused leaves between the given period while skipping leave allocation expiry""" - leaves = frappe.get_all( - "Leave Ledger Entry", - filters={ - "employee": employee, - "leave_type": leave_type, - "from_date": (">=", from_date), - "to_date": ("<=", to_date), - }, - or_filters={"is_expired": 0, "is_carry_forward": 1}, - fields=["sum(leaves) as leaves"], - ) - return flt(leaves[0]["leaves"]) - - -def validate_carry_forward(leave_type): - if not frappe.db.get_value("Leave Type", leave_type, "is_carry_forward"): - frappe.throw(_("Leave Type {0} cannot be carry-forwarded").format(leave_type)) diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py b/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py deleted file mode 100644 index 96e81db617..0000000000 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation_dashboard.py +++ /dev/null @@ -1,6 +0,0 @@ -def get_data(): - return { - "fieldname": "leave_allocation", - "transactions": [{"items": ["Compensatory Leave Request"]}, {"items": ["Leave Encashment"]}], - "reports": [{"items": ["Employee Leave Balance"]}], - } diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js b/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js deleted file mode 100644 index 3ab176f809..0000000000 --- a/erpnext/hr/doctype/leave_allocation/leave_allocation_list.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -// render -frappe.listview_settings['Leave Allocation'] = { - get_indicator: function(doc) { - if(doc.status==="Expired") { - return [__("Expired"), "gray", "expired, =, 1"]; - } - }, -}; diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py deleted file mode 100644 index a1d39d4423..0000000000 --- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py +++ /dev/null @@ -1,411 +0,0 @@ -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, add_months, getdate, nowdate - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.leave_allocation.leave_allocation import ( - BackDatedAllocationError, - OverAllocationError, -) -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation -from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type - - -class TestLeaveAllocation(FrappeTestCase): - def setUp(self): - frappe.db.delete("Leave Period") - frappe.db.delete("Leave Allocation") - frappe.db.delete("Leave Ledger Entry") - - emp_id = make_employee("test_emp_leave_allocation@salary.com", company="_Test Company") - self.employee = frappe.get_doc("Employee", emp_id) - - def test_overlapping_allocation(self): - leaves = [ - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": self.employee.name, - "employee_name": self.employee.employee_name, - "leave_type": "_Test Leave Type", - "from_date": getdate("2015-10-01"), - "to_date": getdate("2015-10-31"), - "new_leaves_allocated": 5, - "docstatus": 1, - }, - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": self.employee.name, - "employee_name": self.employee.employee_name, - "leave_type": "_Test Leave Type", - "from_date": getdate("2015-09-01"), - "to_date": getdate("2015-11-30"), - "new_leaves_allocated": 5, - }, - ] - - frappe.get_doc(leaves[0]).save() - self.assertRaises(frappe.ValidationError, frappe.get_doc(leaves[1]).save) - - def test_invalid_period(self): - doc = frappe.get_doc( - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": self.employee.name, - "employee_name": self.employee.employee_name, - "leave_type": "_Test Leave Type", - "from_date": getdate("2015-09-30"), - "to_date": getdate("2015-09-1"), - "new_leaves_allocated": 5, - } - ) - - # invalid period - self.assertRaises(frappe.ValidationError, doc.save) - - def test_validation_for_over_allocation(self): - doc = frappe.get_doc( - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": self.employee.name, - "employee_name": self.employee.employee_name, - "leave_type": "_Test Leave Type", - "from_date": getdate("2015-09-1"), - "to_date": getdate("2015-09-30"), - "new_leaves_allocated": 35, - } - ) - - # allocated leave more than period - self.assertRaises(OverAllocationError, doc.save) - - def test_validation_for_over_allocation_post_submission(self): - allocation = frappe.get_doc( - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": self.employee.name, - "employee_name": self.employee.employee_name, - "leave_type": "_Test Leave Type", - "from_date": getdate("2015-09-1"), - "to_date": getdate("2015-09-30"), - "new_leaves_allocated": 15, - } - ).submit() - allocation.reload() - # allocated leaves more than period after submission - allocation.new_leaves_allocated = 35 - self.assertRaises(OverAllocationError, allocation.save) - - def test_validation_for_over_allocation_based_on_leave_setup(self): - frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period") - leave_period = frappe.get_doc( - dict( - name="Test Allocation Period", - doctype="Leave Period", - from_date=add_months(nowdate(), -6), - to_date=add_months(nowdate(), 6), - company="_Test Company", - is_active=1, - ) - ).insert() - - leave_type = create_leave_type(leave_type_name="_Test Allocation Validation", is_carry_forward=1) - leave_type.max_leaves_allowed = 25 - leave_type.save() - - # 15 leaves allocated in this period - allocation = create_leave_allocation( - leave_type=leave_type.name, - employee=self.employee.name, - employee_name=self.employee.employee_name, - from_date=leave_period.from_date, - to_date=nowdate(), - ) - allocation.submit() - - # trying to allocate additional 15 leaves - allocation = create_leave_allocation( - leave_type=leave_type.name, - employee=self.employee.name, - employee_name=self.employee.employee_name, - from_date=add_days(nowdate(), 1), - to_date=leave_period.to_date, - ) - self.assertRaises(OverAllocationError, allocation.save) - - def test_validation_for_over_allocation_based_on_leave_setup_post_submission(self): - frappe.delete_doc_if_exists("Leave Period", "Test Allocation Period") - leave_period = frappe.get_doc( - dict( - name="Test Allocation Period", - doctype="Leave Period", - from_date=add_months(nowdate(), -6), - to_date=add_months(nowdate(), 6), - company="_Test Company", - is_active=1, - ) - ).insert() - - leave_type = create_leave_type(leave_type_name="_Test Allocation Validation", is_carry_forward=1) - leave_type.max_leaves_allowed = 30 - leave_type.save() - - # 15 leaves allocated - allocation = create_leave_allocation( - leave_type=leave_type.name, - employee=self.employee.name, - employee_name=self.employee.employee_name, - from_date=leave_period.from_date, - to_date=nowdate(), - ) - allocation.submit() - allocation.reload() - - # allocate additional 15 leaves - allocation = create_leave_allocation( - leave_type=leave_type.name, - employee=self.employee.name, - employee_name=self.employee.employee_name, - from_date=add_days(nowdate(), 1), - to_date=leave_period.to_date, - ) - allocation.submit() - allocation.reload() - - # trying to allocate 25 leaves in 2nd alloc within leave period - # total leaves = 40 which is more than `max_leaves_allowed` setting i.e. 30 - allocation.new_leaves_allocated = 25 - self.assertRaises(OverAllocationError, allocation.save) - - def test_validate_back_dated_allocation_update(self): - leave_type = create_leave_type(leave_type_name="_Test_CF_leave", is_carry_forward=1) - leave_type.save() - - # initial leave allocation = 15 - leave_allocation = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave", - from_date=add_months(nowdate(), -12), - to_date=add_months(nowdate(), -1), - carry_forward=0, - ) - leave_allocation.submit() - - # new_leaves = 15, carry_forwarded = 10 - leave_allocation_1 = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave", - carry_forward=1, - ) - leave_allocation_1.submit() - - # try updating initial leave allocation - leave_allocation.reload() - leave_allocation.new_leaves_allocated = 20 - self.assertRaises(BackDatedAllocationError, leave_allocation.save) - - def test_carry_forward_calculation(self): - leave_type = create_leave_type(leave_type_name="_Test_CF_leave", is_carry_forward=1) - leave_type.maximum_carry_forwarded_leaves = 10 - leave_type.max_leaves_allowed = 30 - leave_type.save() - - # initial leave allocation = 15 - leave_allocation = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave", - from_date=add_months(nowdate(), -12), - to_date=add_months(nowdate(), -1), - carry_forward=0, - ) - leave_allocation.submit() - - # carry forwarded leaves considering maximum_carry_forwarded_leaves - # new_leaves = 15, carry_forwarded = 10 - leave_allocation_1 = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave", - carry_forward=1, - ) - leave_allocation_1.submit() - leave_allocation_1.reload() - - self.assertEqual(leave_allocation_1.unused_leaves, 10) - self.assertEqual(leave_allocation_1.total_leaves_allocated, 25) - - leave_allocation_1.cancel() - - # carry forwarded leaves considering max_leave_allowed - # max_leave_allowed = 30, new_leaves = 25, carry_forwarded = 5 - leave_allocation_2 = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave", - carry_forward=1, - new_leaves_allocated=25, - ) - leave_allocation_2.submit() - - self.assertEqual(leave_allocation_2.unused_leaves, 5) - - def test_carry_forward_leaves_expiry(self): - leave_type = create_leave_type( - leave_type_name="_Test_CF_leave_expiry", - is_carry_forward=1, - expire_carry_forwarded_leaves_after_days=90, - ) - leave_type.save() - - # initial leave allocation - leave_allocation = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave_expiry", - from_date=add_months(nowdate(), -24), - to_date=add_months(nowdate(), -12), - carry_forward=0, - ) - leave_allocation.submit() - - leave_allocation = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave_expiry", - from_date=add_days(nowdate(), -90), - to_date=add_days(nowdate(), 100), - carry_forward=1, - ) - leave_allocation.submit() - - # expires all the carry forwarded leaves after 90 days - process_expired_allocation() - - # leave allocation with carry forward of only new leaves allocated - leave_allocation_1 = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="_Test_CF_leave_expiry", - carry_forward=1, - from_date=add_months(nowdate(), 6), - to_date=add_months(nowdate(), 12), - ) - leave_allocation_1.submit() - - self.assertEqual(leave_allocation_1.unused_leaves, leave_allocation.new_leaves_allocated) - - def test_creation_of_leave_ledger_entry_on_submit(self): - leave_allocation = create_leave_allocation( - employee=self.employee.name, employee_name=self.employee.employee_name - ) - leave_allocation.submit() - - leave_ledger_entry = frappe.get_all( - "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_allocation.name) - ) - - self.assertEqual(len(leave_ledger_entry), 1) - self.assertEqual(leave_ledger_entry[0].employee, leave_allocation.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, leave_allocation.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, leave_allocation.new_leaves_allocated) - - # check if leave ledger entry is deleted on cancellation - leave_allocation.cancel() - self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_allocation.name}) - ) - - def test_leave_addition_after_submit(self): - leave_allocation = create_leave_allocation( - employee=self.employee.name, employee_name=self.employee.employee_name - ) - leave_allocation.submit() - leave_allocation.reload() - self.assertTrue(leave_allocation.total_leaves_allocated, 15) - - leave_allocation.new_leaves_allocated = 40 - leave_allocation.submit() - leave_allocation.reload() - self.assertTrue(leave_allocation.total_leaves_allocated, 40) - - def test_leave_subtraction_after_submit(self): - leave_allocation = create_leave_allocation( - employee=self.employee.name, employee_name=self.employee.employee_name - ) - leave_allocation.submit() - leave_allocation.reload() - self.assertTrue(leave_allocation.total_leaves_allocated, 15) - - leave_allocation.new_leaves_allocated = 10 - leave_allocation.submit() - leave_allocation.reload() - self.assertTrue(leave_allocation.total_leaves_allocated, 10) - - def test_validation_against_leave_application_after_submit(self): - from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - make_holiday_list() - frappe.db.set_value( - "Company", self.employee.company, "default_holiday_list", "Salary Slip Test Holiday List" - ) - - leave_allocation = create_leave_allocation( - employee=self.employee.name, employee_name=self.employee.employee_name - ) - leave_allocation.submit() - self.assertTrue(leave_allocation.total_leaves_allocated, 15) - - leave_application = frappe.get_doc( - { - "doctype": "Leave Application", - "employee": self.employee.name, - "leave_type": "_Test Leave Type", - "from_date": add_months(nowdate(), 2), - "to_date": add_months(add_days(nowdate(), 10), 2), - "company": self.employee.company, - "docstatus": 1, - "status": "Approved", - "leave_approver": "test@example.com", - } - ) - leave_application.submit() - leave_application.reload() - - # allocate less leaves than the ones which are already approved - leave_allocation.new_leaves_allocated = leave_application.total_leave_days - 1 - leave_allocation.total_leaves_allocated = leave_application.total_leave_days - 1 - self.assertRaises(frappe.ValidationError, leave_allocation.submit) - - -def create_leave_allocation(**args): - args = frappe._dict(args) - - emp_id = make_employee("test_emp_leave_allocation@salary.com") - employee = frappe.get_doc("Employee", emp_id) - - return frappe.get_doc( - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": args.employee or employee.name, - "employee_name": args.employee_name or employee.employee_name, - "leave_type": args.leave_type or "_Test Leave Type", - "from_date": args.from_date or nowdate(), - "new_leaves_allocated": args.new_leaves_allocated or 15, - "carry_forward": args.carry_forward or 0, - "to_date": args.to_date or add_months(nowdate(), 12), - } - ) - - -test_dependencies = ["Employee", "Leave Type"] diff --git a/erpnext/hr/doctype/leave_allocation/test_records.json b/erpnext/hr/doctype/leave_allocation/test_records.json deleted file mode 100644 index 23acbb026e..0000000000 --- a/erpnext/hr/doctype/leave_allocation/test_records.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "docstatus": 1, - "doctype": "Leave Allocation", - "employee": "_T-Employee-00001", - "from_date": "2013-01-01", - "to_date": "2013-12-31", - "leave_type": "_Test Leave Type", - "new_leaves_allocated": 15 - }, - { - "docstatus": 1, - "doctype": "Leave Allocation", - "employee": "_T-Employee-00002", - "from_date": "2013-01-01", - "to_date": "2013-12-31", - "leave_type": "_Test Leave Type", - "new_leaves_allocated": 15 - } -] \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/README.md b/erpnext/hr/doctype/leave_application/README.md deleted file mode 100644 index e78e37a1c2..0000000000 --- a/erpnext/hr/doctype/leave_application/README.md +++ /dev/null @@ -1 +0,0 @@ -Application for Leave by an Employee. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/__init__.py b/erpnext/hr/doctype/leave_application/__init__.py deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js deleted file mode 100755 index 85997a4087..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application.js +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); -cur_frm.add_fetch('employee', 'company', 'company'); - -frappe.ui.form.on("Leave Application", { - setup: function(frm) { - frm.set_query("leave_approver", function() { - return { - query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", - filters: { - employee: frm.doc.employee, - doctype: frm.doc.doctype - } - }; - }); - - frm.set_query("employee", erpnext.queries.employee); - }, - onload: function(frm) { - // Ignore cancellation of doctype on cancel all. - frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; - - if (!frm.doc.posting_date) { - frm.set_value("posting_date", frappe.datetime.get_today()); - } - if (frm.doc.docstatus == 0) { - return frappe.call({ - method: "erpnext.hr.doctype.leave_application.leave_application.get_mandatory_approval", - args: { - doctype: frm.doc.doctype, - }, - callback: function(r) { - if (!r.exc && r.message) { - frm.toggle_reqd("leave_approver", true); - } - } - }); - } - }, - - validate: function(frm) { - if (frm.doc.from_date == frm.doc.to_date && frm.doc.half_day == 1) { - frm.doc.half_day_date = frm.doc.from_date; - } else if (frm.doc.half_day == 0) { - frm.doc.half_day_date = ""; - } - frm.toggle_reqd("half_day_date", frm.doc.half_day == 1); - }, - - make_dashboard: function(frm) { - var leave_details; - let lwps; - if (frm.doc.employee && frm.doc.from_date) { - frappe.call({ - method: "erpnext.hr.doctype.leave_application.leave_application.get_leave_details", - async: false, - args: { - employee: frm.doc.employee, - date: frm.doc.from_date || frm.doc.posting_date - }, - callback: function(r) { - if (!r.exc && r.message['leave_allocation']) { - leave_details = r.message['leave_allocation']; - } - if (!r.exc && r.message['leave_approver']) { - frm.set_value('leave_approver', r.message['leave_approver']); - } - lwps = r.message["lwps"]; - } - }); - $("div").remove(".form-dashboard-section.custom"); - frm.dashboard.add_section( - frappe.render_template('leave_application_dashboard', { - data: leave_details - }), - __("Allocated Leaves") - ); - frm.dashboard.show(); - let allowed_leave_types = Object.keys(leave_details); - - // lwps should be allowed, lwps don't have any allocation - allowed_leave_types = allowed_leave_types.concat(lwps); - - frm.set_query('leave_type', function() { - return { - filters: [ - ['leave_type_name', 'in', allowed_leave_types] - ] - }; - }); - } - }, - - refresh: function(frm) { - if (frm.is_new()) { - frm.trigger("calculate_total_days"); - } - cur_frm.set_intro(""); - if (frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) { - frm.set_intro(__("Fill the form and save it")); - } - - if (!frm.doc.employee && frappe.defaults.get_user_permissions()) { - const perm = frappe.defaults.get_user_permissions(); - if (perm && perm['Employee']) { - frm.set_value('employee', perm['Employee'].map(perm_doc => perm_doc.doc)[0]); - } - } - }, - - employee: function(frm) { - frm.trigger("make_dashboard"); - frm.trigger("get_leave_balance"); - frm.trigger("set_leave_approver"); - }, - - leave_approver: function(frm) { - if (frm.doc.leave_approver) { - frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver)); - } - }, - - leave_type: function(frm) { - frm.trigger("get_leave_balance"); - }, - - half_day: function(frm) { - if (frm.doc.half_day) { - if (frm.doc.from_date == frm.doc.to_date) { - frm.set_value("half_day_date", frm.doc.from_date); - } else { - frm.trigger("half_day_datepicker"); - } - } else { - frm.set_value("half_day_date", ""); - } - frm.trigger("calculate_total_days"); - }, - - from_date: function(frm) { - frm.trigger("make_dashboard"); - frm.trigger("half_day_datepicker"); - frm.trigger("calculate_total_days"); - }, - - to_date: function(frm) { - frm.trigger("make_dashboard"); - frm.trigger("half_day_datepicker"); - frm.trigger("calculate_total_days"); - }, - - half_day_date(frm) { - frm.trigger("calculate_total_days"); - }, - - half_day_datepicker: function(frm) { - frm.set_value('half_day_date', ''); - var half_day_datepicker = frm.fields_dict.half_day_date.datepicker; - half_day_datepicker.update({ - minDate: frappe.datetime.str_to_obj(frm.doc.from_date), - maxDate: frappe.datetime.str_to_obj(frm.doc.to_date) - }); - }, - - get_leave_balance: function(frm) { - if (frm.doc.docstatus === 0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date && frm.doc.to_date) { - return frappe.call({ - method: "erpnext.hr.doctype.leave_application.leave_application.get_leave_balance_on", - args: { - employee: frm.doc.employee, - date: frm.doc.from_date, - to_date: frm.doc.to_date, - leave_type: frm.doc.leave_type, - consider_all_leaves_in_the_allocation_period: true - }, - callback: function (r) { - if (!r.exc && r.message) { - frm.set_value('leave_balance', r.message); - } else { - frm.set_value('leave_balance', "0"); - } - } - }); - } - }, - - calculate_total_days: function(frm) { - if (frm.doc.from_date && frm.doc.to_date && frm.doc.employee && frm.doc.leave_type) { - - var from_date = Date.parse(frm.doc.from_date); - var to_date = Date.parse(frm.doc.to_date); - - if (to_date < from_date) { - frappe.msgprint(__("To Date cannot be less than From Date")); - frm.set_value('to_date', ''); - return; - } - // server call is done to include holidays in leave days calculations - return frappe.call({ - method: 'erpnext.hr.doctype.leave_application.leave_application.get_number_of_leave_days', - args: { - "employee": frm.doc.employee, - "leave_type": frm.doc.leave_type, - "from_date": frm.doc.from_date, - "to_date": frm.doc.to_date, - "half_day": frm.doc.half_day, - "half_day_date": frm.doc.half_day_date, - }, - callback: function(r) { - if (r && r.message) { - frm.set_value('total_leave_days', r.message); - frm.trigger("get_leave_balance"); - } - } - }); - } - }, - - set_leave_approver: function(frm) { - if (frm.doc.employee) { - // server call is done to include holidays in leave days calculations - return frappe.call({ - method: 'erpnext.hr.doctype.leave_application.leave_application.get_leave_approver', - args: { - "employee": frm.doc.employee, - }, - callback: function(r) { - if (r && r.message) { - frm.set_value('leave_approver', r.message); - } - } - }); - } - } -}); - -frappe.tour["Leave Application"] = [ - { - fieldname: "employee", - title: "Employee", - description: __("Select the Employee.") - }, - { - fieldname: "leave_type", - title: "Leave Type", - description: __("Select type of leave the employee wants to apply for, like Sick Leave, Privilege Leave, Casual Leave, etc.") - }, - { - fieldname: "from_date", - title: "From Date", - description: __("Select the start date for your Leave Application.") - }, - { - fieldname: "to_date", - title: "To Date", - description: __("Select the end date for your Leave Application.") - }, - { - fieldname: "half_day", - title: "Half Day", - description: __("To apply for a Half Day check 'Half Day' and select the Half Day Date") - }, - { - fieldname: "leave_approver", - title: "Leave Approver", - description: __("Select your Leave Approver i.e. the person who approves or rejects your leaves.") - } -]; diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json deleted file mode 100644 index 7f50ace766..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2013-02-20 11:18:11", - "description": "Apply / Approve Leaves", - "doctype": "DocType", - "document_type": "Document", - "engine": "InnoDB", - "field_order": [ - "naming_series", - "employee", - "employee_name", - "column_break_4", - "leave_type", - "department", - "leave_balance", - "section_break_5", - "from_date", - "to_date", - "half_day", - "half_day_date", - "total_leave_days", - "column_break1", - "description", - "section_break_7", - "leave_approver", - "leave_approver_name", - "column_break_18", - "status", - "salary_slip", - "sb10", - "posting_date", - "follow_via_email", - "color", - "column_break_17", - "company", - "letter_head", - "amended_from" - ], - "fields": [ - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "HR-LAP-.YYYY.-", - "print_hide": 1, - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "employee_name", - "fieldtype": "Data", - "in_global_search": 1, - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "leave_type", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "in_standard_filter": 1, - "label": "Leave Type", - "options": "Leave Type", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "leave_balance", - "fieldtype": "Float", - "label": "Leave Balance Before Application", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break" - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "From Date", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", - "reqd": 1, - "search_index": 1 - }, - { - "default": "0", - "fieldname": "half_day", - "fieldtype": "Check", - "label": "Half Day" - }, - { - "depends_on": "eval:doc.half_day && (doc.from_date != doc.to_date)", - "fieldname": "half_day_date", - "fieldtype": "Date", - "label": "Half Day Date" - }, - { - "fieldname": "total_leave_days", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Total Leave Days", - "no_copy": 1, - "precision": "1", - "read_only": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "print_width": "50%", - "width": "50%" - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Reason" - }, - { - "fieldname": "section_break_7", - "fieldtype": "Section Break" - }, - { - "fieldname": "leave_approver", - "fieldtype": "Link", - "label": "Leave Approver", - "options": "User" - }, - { - "fieldname": "leave_approver_name", - "fieldtype": "Data", - "label": "Leave Approver Name", - "read_only": 1 - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "default": "Open", - "fieldname": "status", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Status", - "no_copy": 1, - "options": "Open\nApproved\nRejected\nCancelled", - "permlevel": 1, - "reqd": 1 - }, - { - "fieldname": "sb10", - "fieldtype": "Section Break" - }, - { - "default": "Today", - "fieldname": "posting_date", - "fieldtype": "Date", - "label": "Posting Date", - "no_copy": 1, - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "allow_on_submit": 1, - "default": "1", - "fieldname": "follow_via_email", - "fieldtype": "Check", - "label": "Follow via Email", - "print_hide": 1 - }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, - { - "fieldname": "salary_slip", - "fieldtype": "Link", - "label": "Salary Slip", - "options": "Salary Slip", - "print_hide": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "letter_head", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Letter Head", - "options": "Letter Head", - "print_hide": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "color", - "fieldtype": "Color", - "label": "Color", - "print_hide": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "options": "Leave Application", - "print_hide": 1, - "read_only": 1 - } - ], - "icon": "fa fa-calendar", - "idx": 1, - "is_submittable": 1, - "links": [], - "max_attachments": 3, - "modified": "2020-05-18 13:00:41.577327", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Application", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "permlevel": 1, - "read": 1, - "role": "All" - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 1, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Leave Approver", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "permlevel": 1, - "read": 1, - "report": 1, - "role": "HR User", - "write": 1 - }, - { - "permlevel": 1, - "read": 1, - "report": 1, - "role": "Leave Approver", - "write": 1 - } - ], - "search_fields": "employee,employee_name,leave_type,from_date,to_date,total_leave_days", - "sort_field": "modified", - "sort_order": "DESC", - "timeline_field": "employee", - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py deleted file mode 100755 index cd6b168667..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ /dev/null @@ -1,1252 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -from typing import Dict, Optional, Tuple - -import frappe -from frappe import _ -from frappe.query_builder.functions import Max, Min, Sum -from frappe.utils import ( - add_days, - cint, - cstr, - date_diff, - flt, - formatdate, - get_fullname, - get_link_to_form, - getdate, - nowdate, -) - -from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry -from erpnext.hr.utils import ( - get_holiday_dates_for_employee, - get_leave_period, - set_employee_name, - share_doc_with_approver, - validate_active_employee, -) - - -class LeaveDayBlockedError(frappe.ValidationError): - pass - - -class OverlapError(frappe.ValidationError): - pass - - -class AttendanceAlreadyMarkedError(frappe.ValidationError): - pass - - -class NotAnOptionalHoliday(frappe.ValidationError): - pass - - -class InsufficientLeaveBalanceError(frappe.ValidationError): - pass - - -class LeaveAcrossAllocationsError(frappe.ValidationError): - pass - - -from frappe.model.document import Document - - -class LeaveApplication(Document): - def get_feed(self): - return _("{0}: From {0} of type {1}").format(self.employee_name, self.leave_type) - - def validate(self): - validate_active_employee(self.employee) - set_employee_name(self) - self.validate_dates() - self.validate_balance_leaves() - self.validate_leave_overlap() - self.validate_max_days() - self.show_block_day_warning() - self.validate_block_days() - self.validate_salary_processed_days() - self.validate_attendance() - self.set_half_day_date() - if frappe.db.get_value("Leave Type", self.leave_type, "is_optional_leave"): - self.validate_optional_leave() - self.validate_applicable_after() - - def on_update(self): - if self.status == "Open" and self.docstatus < 1: - # notify leave approver about creation - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): - self.notify_leave_approver() - - share_doc_with_approver(self, self.leave_approver) - - def on_submit(self): - if self.status == "Open": - frappe.throw( - _("Only Leave Applications with status 'Approved' and 'Rejected' can be submitted") - ) - - self.validate_back_dated_application() - self.update_attendance() - - # notify leave applier about approval - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): - self.notify_employee() - - self.create_leave_ledger_entry() - self.reload() - - def before_cancel(self): - self.status = "Cancelled" - - def on_cancel(self): - self.create_leave_ledger_entry(submit=False) - # notify leave applier about cancellation - if frappe.db.get_single_value("HR Settings", "send_leave_notification"): - self.notify_employee() - self.cancel_attendance() - - def validate_applicable_after(self): - if self.leave_type: - leave_type = frappe.get_doc("Leave Type", self.leave_type) - if leave_type.applicable_after > 0: - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") - leave_days = get_approved_leaves_for_period( - self.employee, False, date_of_joining, self.from_date - ) - number_of_days = date_diff(getdate(self.from_date), date_of_joining) - if number_of_days >= 0: - holidays = 0 - if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"): - holidays = get_holidays(self.employee, date_of_joining, self.from_date) - number_of_days = number_of_days - leave_days - holidays - if number_of_days < leave_type.applicable_after: - frappe.throw( - _("{0} applicable after {1} working days").format( - self.leave_type, leave_type.applicable_after - ) - ) - - def validate_dates(self): - if frappe.db.get_single_value("HR Settings", "restrict_backdated_leave_application"): - if self.from_date and getdate(self.from_date) < getdate(): - allowed_role = frappe.db.get_single_value( - "HR Settings", "role_allowed_to_create_backdated_leave_application" - ) - user = frappe.get_doc("User", frappe.session.user) - user_roles = [d.role for d in user.roles] - if not allowed_role: - frappe.throw( - _("Backdated Leave Application is restricted. Please set the {} in {}").format( - frappe.bold("Role Allowed to Create Backdated Leave Application"), - get_link_to_form("HR Settings", "HR Settings"), - ) - ) - - if allowed_role and allowed_role not in user_roles: - frappe.throw( - _("Only users with the {0} role can create backdated leave applications").format( - allowed_role - ) - ) - - if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)): - frappe.throw(_("To date cannot be before from date")) - - if ( - self.half_day - and self.half_day_date - and ( - getdate(self.half_day_date) < getdate(self.from_date) - or getdate(self.half_day_date) > getdate(self.to_date) - ) - ): - - frappe.throw(_("Half Day Date should be between From Date and To Date")) - - if not is_lwp(self.leave_type): - self.validate_dates_across_allocation() - self.validate_back_dated_application() - - def validate_dates_across_allocation(self): - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): - return - - alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates() - - if not (alloc_on_from_date or alloc_on_to_date): - frappe.throw(_("Application period cannot be outside leave allocation period")) - elif self.is_separate_ledger_entry_required(alloc_on_from_date, alloc_on_to_date): - frappe.throw( - _("Application period cannot be across two allocation records"), - exc=LeaveAcrossAllocationsError, - ) - - def get_allocation_based_on_application_dates(self) -> Tuple[Dict, Dict]: - """Returns allocation name, from and to dates for application dates""" - - def _get_leave_allocation_record(date): - LeaveAllocation = frappe.qb.DocType("Leave Allocation") - allocation = ( - frappe.qb.from_(LeaveAllocation) - .select(LeaveAllocation.name, LeaveAllocation.from_date, LeaveAllocation.to_date) - .where( - (LeaveAllocation.employee == self.employee) - & (LeaveAllocation.leave_type == self.leave_type) - & (LeaveAllocation.docstatus == 1) - & ((date >= LeaveAllocation.from_date) & (date <= LeaveAllocation.to_date)) - ) - ).run(as_dict=True) - - return allocation and allocation[0] - - allocation_based_on_from_date = _get_leave_allocation_record(self.from_date) - allocation_based_on_to_date = _get_leave_allocation_record(self.to_date) - - return allocation_based_on_from_date, allocation_based_on_to_date - - def validate_back_dated_application(self): - future_allocation = frappe.db.sql( - """select name, from_date from `tabLeave Allocation` - where employee=%s and leave_type=%s and docstatus=1 and from_date > %s - and carry_forward=1""", - (self.employee, self.leave_type, self.to_date), - as_dict=1, - ) - - if future_allocation: - frappe.throw( - _( - "Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}" - ).format(formatdate(future_allocation[0].from_date), future_allocation[0].name) - ) - - def update_attendance(self): - if self.status != "Approved": - return - - holiday_dates = [] - if not frappe.db.get_value("Leave Type", self.leave_type, "include_holiday"): - holiday_dates = get_holiday_dates_for_employee(self.employee, self.from_date, self.to_date) - - for dt in daterange(getdate(self.from_date), getdate(self.to_date)): - date = dt.strftime("%Y-%m-%d") - attendance_name = frappe.db.exists( - "Attendance", dict(employee=self.employee, attendance_date=date, docstatus=("!=", 2)) - ) - - # don't mark attendance for holidays - # if leave type does not include holidays within leaves as leaves - if date in holiday_dates: - if attendance_name: - # cancel and delete existing attendance for holidays - attendance = frappe.get_doc("Attendance", attendance_name) - attendance.flags.ignore_permissions = True - if attendance.docstatus == 1: - attendance.cancel() - frappe.delete_doc("Attendance", attendance_name, force=1) - continue - - self.create_or_update_attendance(attendance_name, date) - - def create_or_update_attendance(self, attendance_name, date): - status = ( - "Half Day" - if self.half_day_date and getdate(date) == getdate(self.half_day_date) - else "On Leave" - ) - - if attendance_name: - # update existing attendance, change absent to on leave - doc = frappe.get_doc("Attendance", attendance_name) - if doc.status != status: - doc.db_set({"status": status, "leave_type": self.leave_type, "leave_application": self.name}) - else: - # make new attendance and submit it - doc = frappe.new_doc("Attendance") - doc.employee = self.employee - doc.employee_name = self.employee_name - doc.attendance_date = date - doc.company = self.company - doc.leave_type = self.leave_type - doc.leave_application = self.name - doc.status = status - doc.flags.ignore_validate = True - doc.insert(ignore_permissions=True) - doc.submit() - - def cancel_attendance(self): - if self.docstatus == 2: - attendance = frappe.db.sql( - """select name from `tabAttendance` where employee = %s\ - and (attendance_date between %s and %s) and docstatus < 2 and status in ('On Leave', 'Half Day')""", - (self.employee, self.from_date, self.to_date), - as_dict=1, - ) - for name in attendance: - frappe.db.set_value("Attendance", name, "docstatus", 2) - - def validate_salary_processed_days(self): - if not frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"): - return - - last_processed_pay_slip = frappe.db.sql( - """ - select start_date, end_date from `tabSalary Slip` - where docstatus = 1 and employee = %s - and ((%s between start_date and end_date) or (%s between start_date and end_date)) - order by modified desc limit 1 - """, - (self.employee, self.to_date, self.from_date), - ) - - if last_processed_pay_slip: - frappe.throw( - _( - "Salary already processed for period between {0} and {1}, Leave application period cannot be between this date range." - ).format( - formatdate(last_processed_pay_slip[0][0]), formatdate(last_processed_pay_slip[0][1]) - ) - ) - - def show_block_day_warning(self): - block_dates = get_applicable_block_dates( - self.from_date, self.to_date, self.employee, self.company, all_lists=True - ) - - if block_dates: - frappe.msgprint(_("Warning: Leave application contains following block dates") + ":") - for d in block_dates: - frappe.msgprint(formatdate(d.block_date) + ": " + d.reason) - - def validate_block_days(self): - block_dates = get_applicable_block_dates( - self.from_date, self.to_date, self.employee, self.company - ) - - if block_dates and self.status == "Approved": - frappe.throw(_("You are not authorized to approve leaves on Block Dates"), LeaveDayBlockedError) - - def validate_balance_leaves(self): - if self.from_date and self.to_date: - self.total_leave_days = get_number_of_leave_days( - self.employee, self.leave_type, self.from_date, self.to_date, self.half_day, self.half_day_date - ) - - if self.total_leave_days <= 0: - frappe.throw( - _( - "The day(s) on which you are applying for leave are holidays. You need not apply for leave." - ) - ) - - if not is_lwp(self.leave_type): - leave_balance = get_leave_balance_on( - self.employee, - self.leave_type, - self.from_date, - self.to_date, - consider_all_leaves_in_the_allocation_period=True, - for_consumption=True, - ) - self.leave_balance = leave_balance.get("leave_balance") - leave_balance_for_consumption = leave_balance.get("leave_balance_for_consumption") - - if self.status != "Rejected" and ( - leave_balance_for_consumption < self.total_leave_days or not leave_balance_for_consumption - ): - self.show_insufficient_balance_message(leave_balance_for_consumption) - - def show_insufficient_balance_message(self, leave_balance_for_consumption: float) -> None: - alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates() - - if frappe.db.get_value("Leave Type", self.leave_type, "allow_negative"): - if leave_balance_for_consumption != self.leave_balance: - msg = _("Warning: Insufficient leave balance for Leave Type {0} in this allocation.").format( - frappe.bold(self.leave_type) - ) - msg += "

" - msg += _( - "Actual balances aren't available because the leave application spans over different leave allocations. You can still apply for leaves which would be compensated during the next allocation." - ) - else: - msg = _("Warning: Insufficient leave balance for Leave Type {0}.").format( - frappe.bold(self.leave_type) - ) - - frappe.msgprint(msg, title=_("Warning"), indicator="orange") - else: - frappe.throw( - _("Insufficient leave balance for Leave Type {0}").format(frappe.bold(self.leave_type)), - exc=InsufficientLeaveBalanceError, - title=_("Insufficient Balance"), - ) - - def validate_leave_overlap(self): - if not self.name: - # hack! if name is null, it could cause problems with != - self.name = "New Leave Application" - - for d in frappe.db.sql( - """ - select - name, leave_type, posting_date, from_date, to_date, total_leave_days, half_day_date - from `tabLeave Application` - where employee = %(employee)s and docstatus < 2 and status in ("Open", "Approved") - and to_date >= %(from_date)s and from_date <= %(to_date)s - and name != %(name)s""", - { - "employee": self.employee, - "from_date": self.from_date, - "to_date": self.to_date, - "name": self.name, - }, - as_dict=1, - ): - - if ( - cint(self.half_day) == 1 - and getdate(self.half_day_date) == getdate(d.half_day_date) - and ( - flt(self.total_leave_days) == 0.5 - or getdate(self.from_date) == getdate(d.to_date) - or getdate(self.to_date) == getdate(d.from_date) - ) - ): - - total_leaves_on_half_day = self.get_total_leaves_on_half_day() - if total_leaves_on_half_day >= 1: - self.throw_overlap_error(d) - else: - self.throw_overlap_error(d) - - def throw_overlap_error(self, d): - form_link = get_link_to_form("Leave Application", d.name) - msg = _("Employee {0} has already applied for {1} between {2} and {3} : {4}").format( - self.employee, d["leave_type"], formatdate(d["from_date"]), formatdate(d["to_date"]), form_link - ) - frappe.throw(msg, OverlapError) - - def get_total_leaves_on_half_day(self): - leave_count_on_half_day_date = frappe.db.sql( - """select count(name) from `tabLeave Application` - where employee = %(employee)s - and docstatus < 2 - and status in ("Open", "Approved") - and half_day = 1 - and half_day_date = %(half_day_date)s - and name != %(name)s""", - {"employee": self.employee, "half_day_date": self.half_day_date, "name": self.name}, - )[0][0] - - return leave_count_on_half_day_date * 0.5 - - def validate_max_days(self): - max_days = frappe.db.get_value("Leave Type", self.leave_type, "max_continuous_days_allowed") - if max_days and self.total_leave_days > cint(max_days): - frappe.throw(_("Leave of type {0} cannot be longer than {1}").format(self.leave_type, max_days)) - - def validate_attendance(self): - attendance = frappe.db.sql( - """select name from `tabAttendance` where employee = %s and (attendance_date between %s and %s) - and status = "Present" and docstatus = 1""", - (self.employee, self.from_date, self.to_date), - ) - if attendance: - frappe.throw( - _("Attendance for employee {0} is already marked for this day").format(self.employee), - AttendanceAlreadyMarkedError, - ) - - def validate_optional_leave(self): - leave_period = get_leave_period(self.from_date, self.to_date, self.company) - if not leave_period: - frappe.throw(_("Cannot find active Leave Period")) - optional_holiday_list = frappe.db.get_value( - "Leave Period", leave_period[0]["name"], "optional_holiday_list" - ) - if not optional_holiday_list: - frappe.throw( - _("Optional Holiday List not set for leave period {0}").format(leave_period[0]["name"]) - ) - day = getdate(self.from_date) - while day <= getdate(self.to_date): - if not frappe.db.exists( - {"doctype": "Holiday", "parent": optional_holiday_list, "holiday_date": day} - ): - frappe.throw( - _("{0} is not in Optional Holiday List").format(formatdate(day)), NotAnOptionalHoliday - ) - day = add_days(day, 1) - - def set_half_day_date(self): - if self.from_date == self.to_date and self.half_day == 1: - self.half_day_date = self.from_date - - if self.half_day == 0: - self.half_day_date = None - - def notify_employee(self): - employee = frappe.get_doc("Employee", self.employee) - if not employee.user_id: - return - - parent_doc = frappe.get_doc("Leave Application", self.name) - args = parent_doc.as_dict() - - template = frappe.db.get_single_value("HR Settings", "leave_status_notification_template") - if not template: - frappe.msgprint(_("Please set default template for Leave Status Notification in HR Settings.")) - return - email_template = frappe.get_doc("Email Template", template) - message = frappe.render_template(email_template.response, args) - - self.notify( - { - # for post in messages - "message": message, - "message_to": employee.user_id, - # for email - "subject": email_template.subject, - "notify": "employee", - } - ) - - def notify_leave_approver(self): - if self.leave_approver: - parent_doc = frappe.get_doc("Leave Application", self.name) - args = parent_doc.as_dict() - - template = frappe.db.get_single_value("HR Settings", "leave_approval_notification_template") - if not template: - frappe.msgprint( - _("Please set default template for Leave Approval Notification in HR Settings.") - ) - return - email_template = frappe.get_doc("Email Template", template) - message = frappe.render_template(email_template.response, args) - - self.notify( - { - # for post in messages - "message": message, - "message_to": self.leave_approver, - # for email - "subject": email_template.subject, - } - ) - - def notify(self, args): - args = frappe._dict(args) - # args -> message, message_to, subject - if cint(self.follow_via_email): - contact = args.message_to - if not isinstance(contact, list): - if not args.notify == "employee": - contact = frappe.get_doc("User", contact).email or contact - - sender = dict() - sender["email"] = frappe.get_doc("User", frappe.session.user).email - sender["full_name"] = get_fullname(sender["email"]) - - try: - frappe.sendmail( - recipients=contact, - sender=sender["email"], - subject=args.subject, - message=args.message, - ) - frappe.msgprint(_("Email sent to {0}").format(contact)) - except frappe.OutgoingEmailError: - pass - - def create_leave_ledger_entry(self, submit=True): - if self.status != "Approved" and submit: - return - - expiry_date = get_allocation_expiry_for_cf_leaves( - self.employee, self.leave_type, self.to_date, self.from_date - ) - lwp = frappe.db.get_value("Leave Type", self.leave_type, "is_lwp") - - if expiry_date: - self.create_ledger_entry_for_intermediate_allocation_expiry(expiry_date, submit, lwp) - else: - alloc_on_from_date, alloc_on_to_date = self.get_allocation_based_on_application_dates() - if self.is_separate_ledger_entry_required(alloc_on_from_date, alloc_on_to_date): - # required only if negative balance is allowed for leave type - # else will be stopped in validation itself - self.create_separate_ledger_entries(alloc_on_from_date, alloc_on_to_date, submit, lwp) - else: - raise_exception = False if frappe.flags.in_patch else True - args = dict( - leaves=self.total_leave_days * -1, - from_date=self.from_date, - to_date=self.to_date, - is_lwp=lwp, - holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception) - or "", - ) - create_leave_ledger_entry(self, args, submit) - - def is_separate_ledger_entry_required( - self, alloc_on_from_date: Optional[Dict] = None, alloc_on_to_date: Optional[Dict] = None - ) -> bool: - """Checks if application dates fall in separate allocations""" - if ( - (alloc_on_from_date and not alloc_on_to_date) - or (not alloc_on_from_date and alloc_on_to_date) - or ( - alloc_on_from_date and alloc_on_to_date and alloc_on_from_date.name != alloc_on_to_date.name - ) - ): - return True - return False - - def create_separate_ledger_entries(self, alloc_on_from_date, alloc_on_to_date, submit, lwp): - """Creates separate ledger entries for application period falling into separate allocations""" - # for creating separate ledger entries existing allocation periods should be consecutive - if ( - submit - and alloc_on_from_date - and alloc_on_to_date - and add_days(alloc_on_from_date.to_date, 1) != alloc_on_to_date.from_date - ): - frappe.throw( - _( - "Leave Application period cannot be across two non-consecutive leave allocations {0} and {1}." - ).format( - get_link_to_form("Leave Allocation", alloc_on_from_date.name), - get_link_to_form("Leave Allocation", alloc_on_to_date), - ) - ) - - raise_exception = False if frappe.flags.in_patch else True - - if alloc_on_from_date: - first_alloc_end = alloc_on_from_date.to_date - second_alloc_start = add_days(alloc_on_from_date.to_date, 1) - else: - first_alloc_end = add_days(alloc_on_to_date.from_date, -1) - second_alloc_start = alloc_on_to_date.from_date - - leaves_in_first_alloc = get_number_of_leave_days( - self.employee, - self.leave_type, - self.from_date, - first_alloc_end, - self.half_day, - self.half_day_date, - ) - leaves_in_second_alloc = get_number_of_leave_days( - self.employee, - self.leave_type, - second_alloc_start, - self.to_date, - self.half_day, - self.half_day_date, - ) - - args = dict( - is_lwp=lwp, - holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception) - or "", - ) - - if leaves_in_first_alloc: - args.update( - dict(from_date=self.from_date, to_date=first_alloc_end, leaves=leaves_in_first_alloc * -1) - ) - create_leave_ledger_entry(self, args, submit) - - if leaves_in_second_alloc: - args.update( - dict(from_date=second_alloc_start, to_date=self.to_date, leaves=leaves_in_second_alloc * -1) - ) - create_leave_ledger_entry(self, args, submit) - - def create_ledger_entry_for_intermediate_allocation_expiry(self, expiry_date, submit, lwp): - """Splits leave application into two ledger entries to consider expiry of allocation""" - raise_exception = False if frappe.flags.in_patch else True - - leaves = get_number_of_leave_days( - self.employee, self.leave_type, self.from_date, expiry_date, self.half_day, self.half_day_date - ) - - if leaves: - args = dict( - from_date=self.from_date, - to_date=expiry_date, - leaves=leaves * -1, - is_lwp=lwp, - holiday_list=get_holiday_list_for_employee(self.employee, raise_exception=raise_exception) - or "", - ) - create_leave_ledger_entry(self, args, submit) - - if getdate(expiry_date) != getdate(self.to_date): - start_date = add_days(expiry_date, 1) - leaves = get_number_of_leave_days( - self.employee, self.leave_type, start_date, self.to_date, self.half_day, self.half_day_date - ) - - if leaves: - args.update(dict(from_date=start_date, to_date=self.to_date, leaves=leaves * -1)) - create_leave_ledger_entry(self, args, submit) - - -def get_allocation_expiry_for_cf_leaves( - employee: str, leave_type: str, to_date: str, from_date: str -) -> str: - """Returns expiry of carry forward allocation in leave ledger entry""" - expiry = frappe.get_all( - "Leave Ledger Entry", - filters={ - "employee": employee, - "leave_type": leave_type, - "is_carry_forward": 1, - "transaction_type": "Leave Allocation", - "to_date": ["between", (from_date, to_date)], - "docstatus": 1, - }, - fields=["to_date"], - ) - return expiry[0]["to_date"] if expiry else "" - - -@frappe.whitelist() -def get_number_of_leave_days( - employee: str, - leave_type: str, - from_date: str, - to_date: str, - half_day: Optional[int] = None, - half_day_date: Optional[str] = None, - holiday_list: Optional[str] = None, -) -> float: - """Returns number of leave days between 2 dates after considering half day and holidays - (Based on the include_holiday setting in Leave Type)""" - number_of_days = 0 - if cint(half_day) == 1: - if getdate(from_date) == getdate(to_date): - number_of_days = 0.5 - elif half_day_date and getdate(from_date) <= getdate(half_day_date) <= getdate(to_date): - number_of_days = date_diff(to_date, from_date) + 0.5 - else: - number_of_days = date_diff(to_date, from_date) + 1 - else: - number_of_days = date_diff(to_date, from_date) + 1 - - if not frappe.db.get_value("Leave Type", leave_type, "include_holiday"): - number_of_days = flt(number_of_days) - flt( - get_holidays(employee, from_date, to_date, holiday_list=holiday_list) - ) - return number_of_days - - -@frappe.whitelist() -def get_leave_details(employee, date): - allocation_records = get_leave_allocation_records(employee, date) - leave_allocation = {} - for d in allocation_records: - allocation = allocation_records.get(d, frappe._dict()) - - total_allocated_leaves = ( - frappe.db.get_value( - "Leave Allocation", - { - "from_date": ("<=", date), - "to_date": (">=", date), - "employee": employee, - "leave_type": allocation.leave_type, - "docstatus": 1, - }, - "SUM(total_leaves_allocated)", - ) - or 0 - ) - - remaining_leaves = get_leave_balance_on( - employee, d, date, to_date=allocation.to_date, consider_all_leaves_in_the_allocation_period=True - ) - - end_date = allocation.to_date - leaves_taken = get_leaves_for_period(employee, d, allocation.from_date, end_date) * -1 - leaves_pending = get_leaves_pending_approval_for_period( - employee, d, allocation.from_date, end_date - ) - - leave_allocation[d] = { - "total_leaves": total_allocated_leaves, - "expired_leaves": total_allocated_leaves - (remaining_leaves + leaves_taken), - "leaves_taken": leaves_taken, - "leaves_pending_approval": leaves_pending, - "remaining_leaves": remaining_leaves, - } - - # is used in set query - lwp = frappe.get_list("Leave Type", filters={"is_lwp": 1}, pluck="name") - - return { - "leave_allocation": leave_allocation, - "leave_approver": get_leave_approver(employee), - "lwps": lwp, - } - - -@frappe.whitelist() -def get_leave_balance_on( - employee: str, - leave_type: str, - date: str, - to_date: str = None, - consider_all_leaves_in_the_allocation_period: bool = False, - for_consumption: bool = False, -): - """ - Returns leave balance till date - :param employee: employee name - :param leave_type: leave type - :param date: date to check balance on - :param to_date: future date to check for allocation expiry - :param consider_all_leaves_in_the_allocation_period: consider all leaves taken till the allocation end date - :param for_consumption: flag to check if leave balance is required for consumption or display - eg: employee has leave balance = 10 but allocation is expiring in 1 day so employee can only consume 1 leave - in this case leave_balance = 10 but leave_balance_for_consumption = 1 - if True, returns a dict eg: {'leave_balance': 10, 'leave_balance_for_consumption': 1} - else, returns leave_balance (in this case 10) - """ - - if not to_date: - to_date = nowdate() - - allocation_records = get_leave_allocation_records(employee, date, leave_type) - allocation = allocation_records.get(leave_type, frappe._dict()) - - end_date = allocation.to_date if consider_all_leaves_in_the_allocation_period else date - cf_expiry = get_allocation_expiry_for_cf_leaves(employee, leave_type, to_date, date) - - leaves_taken = get_leaves_for_period(employee, leave_type, allocation.from_date, end_date) - - remaining_leaves = get_remaining_leaves(allocation, leaves_taken, date, cf_expiry) - - if for_consumption: - return remaining_leaves - else: - return remaining_leaves.get("leave_balance") - - -def get_leave_allocation_records(employee, date, leave_type=None): - """Returns the total allocated leaves and carry forwarded leaves based on ledger entries""" - Ledger = frappe.qb.DocType("Leave Ledger Entry") - - cf_leave_case = ( - frappe.qb.terms.Case().when(Ledger.is_carry_forward == "1", Ledger.leaves).else_(0) - ) - sum_cf_leaves = Sum(cf_leave_case).as_("cf_leaves") - - new_leaves_case = ( - frappe.qb.terms.Case().when(Ledger.is_carry_forward == "0", Ledger.leaves).else_(0) - ) - sum_new_leaves = Sum(new_leaves_case).as_("new_leaves") - - query = ( - frappe.qb.from_(Ledger) - .select( - sum_cf_leaves, - sum_new_leaves, - Min(Ledger.from_date).as_("from_date"), - Max(Ledger.to_date).as_("to_date"), - Ledger.leave_type, - ) - .where( - (Ledger.from_date <= date) - & (Ledger.to_date >= date) - & (Ledger.docstatus == 1) - & (Ledger.transaction_type == "Leave Allocation") - & (Ledger.employee == employee) - & (Ledger.is_expired == 0) - & (Ledger.is_lwp == 0) - ) - ) - - if leave_type: - query = query.where((Ledger.leave_type == leave_type)) - query = query.groupby(Ledger.employee, Ledger.leave_type) - - allocation_details = query.run(as_dict=True) - - allocated_leaves = frappe._dict() - for d in allocation_details: - allocated_leaves.setdefault( - d.leave_type, - frappe._dict( - { - "from_date": d.from_date, - "to_date": d.to_date, - "total_leaves_allocated": flt(d.cf_leaves) + flt(d.new_leaves), - "unused_leaves": d.cf_leaves, - "new_leaves_allocated": d.new_leaves, - "leave_type": d.leave_type, - } - ), - ) - return allocated_leaves - - -def get_leaves_pending_approval_for_period( - employee: str, leave_type: str, from_date: str, to_date: str -) -> float: - """Returns leaves that are pending for approval""" - leaves = frappe.get_all( - "Leave Application", - filters={"employee": employee, "leave_type": leave_type, "status": "Open"}, - or_filters={ - "from_date": ["between", (from_date, to_date)], - "to_date": ["between", (from_date, to_date)], - }, - fields=["SUM(total_leave_days) as leaves"], - )[0] - return leaves["leaves"] if leaves["leaves"] else 0.0 - - -def get_remaining_leaves( - allocation: Dict, leaves_taken: float, date: str, cf_expiry: str -) -> Dict[str, float]: - """Returns a dict of leave_balance and leave_balance_for_consumption - leave_balance returns the available leave balance - leave_balance_for_consumption returns the minimum leaves remaining after comparing with remaining days for allocation expiry - """ - - def _get_remaining_leaves(remaining_leaves, end_date): - """Returns minimum leaves remaining after comparing with remaining days for allocation expiry""" - if remaining_leaves > 0: - remaining_days = date_diff(end_date, date) + 1 - remaining_leaves = min(remaining_days, remaining_leaves) - - return remaining_leaves - - leave_balance = leave_balance_for_consumption = flt(allocation.total_leaves_allocated) + flt( - leaves_taken - ) - - # balance for carry forwarded leaves - if cf_expiry and allocation.unused_leaves: - cf_leaves = flt(allocation.unused_leaves) + flt(leaves_taken) - remaining_cf_leaves = _get_remaining_leaves(cf_leaves, cf_expiry) - - leave_balance = flt(allocation.new_leaves_allocated) + flt(cf_leaves) - leave_balance_for_consumption = flt(allocation.new_leaves_allocated) + flt(remaining_cf_leaves) - - remaining_leaves = _get_remaining_leaves(leave_balance_for_consumption, allocation.to_date) - return frappe._dict(leave_balance=leave_balance, leave_balance_for_consumption=remaining_leaves) - - -def get_leaves_for_period( - employee: str, leave_type: str, from_date: str, to_date: str, skip_expired_leaves: bool = True -) -> float: - leave_entries = get_leave_entries(employee, leave_type, from_date, to_date) - leave_days = 0 - - for leave_entry in leave_entries: - inclusive_period = leave_entry.from_date >= getdate( - from_date - ) and leave_entry.to_date <= getdate(to_date) - - if inclusive_period and leave_entry.transaction_type == "Leave Encashment": - leave_days += leave_entry.leaves - - elif ( - inclusive_period - and leave_entry.transaction_type == "Leave Allocation" - and leave_entry.is_expired - and not skip_expired_leaves - ): - leave_days += leave_entry.leaves - - elif leave_entry.transaction_type == "Leave Application": - if leave_entry.from_date < getdate(from_date): - leave_entry.from_date = from_date - if leave_entry.to_date > getdate(to_date): - leave_entry.to_date = to_date - - half_day = 0 - half_day_date = None - # fetch half day date for leaves with half days - if leave_entry.leaves % 1: - half_day = 1 - half_day_date = frappe.db.get_value( - "Leave Application", {"name": leave_entry.transaction_name}, ["half_day_date"] - ) - - leave_days += ( - get_number_of_leave_days( - employee, - leave_type, - leave_entry.from_date, - leave_entry.to_date, - half_day, - half_day_date, - holiday_list=leave_entry.holiday_list, - ) - * -1 - ) - - return leave_days - - -def get_leave_entries(employee, leave_type, from_date, to_date): - """Returns leave entries between from_date and to_date.""" - return frappe.db.sql( - """ - SELECT - employee, leave_type, from_date, to_date, leaves, transaction_name, transaction_type, holiday_list, - is_carry_forward, is_expired - FROM `tabLeave Ledger Entry` - WHERE employee=%(employee)s AND leave_type=%(leave_type)s - AND docstatus=1 - AND (leaves<0 - OR is_expired=1) - AND (from_date between %(from_date)s AND %(to_date)s - OR to_date between %(from_date)s AND %(to_date)s - OR (from_date < %(from_date)s AND to_date > %(to_date)s)) - """, - {"from_date": from_date, "to_date": to_date, "employee": employee, "leave_type": leave_type}, - as_dict=1, - ) - - -@frappe.whitelist() -def get_holidays(employee, from_date, to_date, holiday_list=None): - """get holidays between two dates for the given employee""" - if not holiday_list: - holiday_list = get_holiday_list_for_employee(employee) - - holidays = frappe.db.sql( - """select count(distinct holiday_date) from `tabHoliday` h1, `tabHoliday List` h2 - where h1.parent = h2.name and h1.holiday_date between %s and %s - and h2.name = %s""", - (from_date, to_date, holiday_list), - )[0][0] - - return holidays - - -def is_lwp(leave_type): - lwp = frappe.db.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type) - return lwp and cint(lwp[0][0]) or 0 - - -@frappe.whitelist() -def get_events(start, end, filters=None): - from frappe.desk.reportview import get_filters_cond - - events = [] - - employee = frappe.db.get_value( - "Employee", filters={"user_id": frappe.session.user}, fieldname=["name", "company"], as_dict=True - ) - - if employee: - employee, company = employee.name, employee.company - else: - employee = "" - company = frappe.db.get_value("Global Defaults", None, "default_company") - - conditions = get_filters_cond("Leave Application", filters, []) - # show department leaves for employee - if "Employee" in frappe.get_roles(): - add_department_leaves(events, start, end, employee, company) - - add_leaves(events, start, end, conditions) - add_block_dates(events, start, end, employee, company) - add_holidays(events, start, end, employee, company) - - return events - - -def add_department_leaves(events, start, end, employee, company): - department = frappe.db.get_value("Employee", employee, "department") - - if not department: - return - - # department leaves - department_employees = frappe.db.sql_list( - """select name from tabEmployee where department=%s - and company=%s""", - (department, company), - ) - - filter_conditions = ' and employee in ("%s")' % '", "'.join(department_employees) - add_leaves(events, start, end, filter_conditions=filter_conditions) - - -def add_leaves(events, start, end, filter_conditions=None): - from frappe.desk.reportview import build_match_conditions - - conditions = [] - - if not cint( - frappe.db.get_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar") - ): - match_conditions = build_match_conditions("Leave Application") - - if match_conditions: - conditions.append(match_conditions) - - query = """SELECT - docstatus, - name, - employee, - employee_name, - leave_type, - from_date, - to_date, - half_day, - status, - color - FROM `tabLeave Application` - WHERE - from_date <= %(end)s AND to_date >= %(start)s <= to_date - AND docstatus < 2 - AND status != 'Rejected' - """ - - if conditions: - query += " AND " + " AND ".join(conditions) - - if filter_conditions: - query += filter_conditions - - for d in frappe.db.sql(query, {"start": start, "end": end}, as_dict=True): - e = { - "name": d.name, - "doctype": "Leave Application", - "from_date": d.from_date, - "to_date": d.to_date, - "docstatus": d.docstatus, - "color": d.color, - "all_day": int(not d.half_day), - "title": cstr(d.employee_name) - + f" ({cstr(d.leave_type)})" - + (" " + _("(Half Day)") if d.half_day else ""), - } - if e not in events: - events.append(e) - - -def add_block_dates(events, start, end, employee, company): - # block days - from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates - - cnt = 0 - block_dates = get_applicable_block_dates(start, end, employee, company, all_lists=True) - - for block_date in block_dates: - events.append( - { - "doctype": "Leave Block List Date", - "from_date": block_date.block_date, - "to_date": block_date.block_date, - "title": _("Leave Blocked") + ": " + block_date.reason, - "name": "_" + str(cnt), - } - ) - cnt += 1 - - -def add_holidays(events, start, end, employee, company): - applicable_holiday_list = get_holiday_list_for_employee(employee, company) - if not applicable_holiday_list: - return - - for holiday in frappe.db.sql( - """select name, holiday_date, description - from `tabHoliday` where parent=%s and holiday_date between %s and %s""", - (applicable_holiday_list, start, end), - as_dict=True, - ): - events.append( - { - "doctype": "Holiday", - "from_date": holiday.holiday_date, - "to_date": holiday.holiday_date, - "title": _("Holiday") + ": " + cstr(holiday.description), - "name": holiday.name, - } - ) - - -@frappe.whitelist() -def get_mandatory_approval(doctype): - mandatory = "" - if doctype == "Leave Application": - mandatory = frappe.db.get_single_value( - "HR Settings", "leave_approver_mandatory_in_leave_application" - ) - else: - mandatory = frappe.db.get_single_value( - "HR Settings", "expense_approver_mandatory_in_expense_claim" - ) - - return mandatory - - -def get_approved_leaves_for_period(employee, leave_type, from_date, to_date): - query = """ - select employee, leave_type, from_date, to_date, total_leave_days - from `tabLeave Application` - where employee=%(employee)s - and docstatus=1 - and (from_date between %(from_date)s and %(to_date)s - or to_date between %(from_date)s and %(to_date)s - or (from_date < %(from_date)s and to_date > %(to_date)s)) - """ - if leave_type: - query += "and leave_type=%(leave_type)s" - - leave_applications = frappe.db.sql( - query, - {"from_date": from_date, "to_date": to_date, "employee": employee, "leave_type": leave_type}, - as_dict=1, - ) - - leave_days = 0 - for leave_app in leave_applications: - if leave_app.from_date >= getdate(from_date) and leave_app.to_date <= getdate(to_date): - leave_days += leave_app.total_leave_days - else: - if leave_app.from_date < getdate(from_date): - leave_app.from_date = from_date - if leave_app.to_date > getdate(to_date): - leave_app.to_date = to_date - - leave_days += get_number_of_leave_days( - employee, leave_type, leave_app.from_date, leave_app.to_date - ) - - return leave_days - - -@frappe.whitelist() -def get_leave_approver(employee): - leave_approver, department = frappe.db.get_value( - "Employee", employee, ["leave_approver", "department"] - ) - - if not leave_approver and department: - leave_approver = frappe.db.get_value( - "Department Approver", - {"parent": department, "parentfield": "leave_approvers", "idx": 1}, - "approver", - ) - - return leave_approver diff --git a/erpnext/hr/doctype/leave_application/leave_application_calendar.js b/erpnext/hr/doctype/leave_application/leave_application_calendar.js deleted file mode 100644 index 0ba0285552..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application_calendar.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.views.calendar["Leave Application"] = { - field_map: { - "start": "from_date", - "end": "to_date", - "id": "name", - "title": "title", - "docstatus": 1, - "color": "color", - "allDay": "all_day" - }, - options: { - header: { - left: 'prev,next today', - center: 'title', - right: 'month' - } - }, - get_events_method: "erpnext.hr.doctype.leave_application.leave_application.get_events" -} diff --git a/erpnext/hr/doctype/leave_application/leave_application_dashboard.html b/erpnext/hr/doctype/leave_application/leave_application_dashboard.html deleted file mode 100644 index e755322efd..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application_dashboard.html +++ /dev/null @@ -1,29 +0,0 @@ - -{% if not jQuery.isEmptyObject(data) %} - - - - - - - - - - - - - {% for(const [key, value] of Object.entries(data)) { %} - - - - - - - - - {% } %} - -
{{ __("Leave Type") }}{{ __("Total Allocated Leave(s)") }}{{ __("Expired Leave(s)") }}{{ __("Used Leave(s)") }}{{ __("Leave(s) Pending Approval") }}{{ __("Available Leave(s)") }}
{%= key %} {%= value["total_leaves"] %} {%= value["expired_leaves"] %} {%= value["leaves_taken"] %} {%= value["leaves_pending_approval"] %} {%= value["remaining_leaves"] %}
-{% else %} -

No Leave has been allocated.

-{% endif %} diff --git a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py b/erpnext/hr/doctype/leave_application/leave_application_dashboard.py deleted file mode 100644 index ee5cbe99f3..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "leave_application", - "transactions": [{"items": ["Attendance"]}], - "reports": [{"label": _("Reports"), "items": ["Employee Leave Balance"]}], - } diff --git a/erpnext/hr/doctype/leave_application/leave_application_email_template.html b/erpnext/hr/doctype/leave_application/leave_application_email_template.html deleted file mode 100644 index dae9084f79..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application_email_template.html +++ /dev/null @@ -1,30 +0,0 @@ -

Leave Application Notification

-

Details:

- - - - - - - - - - - - - - - - - - - - - - -
Employee{{employee_name}}
Leave Type{{leave_type}}
From Date{{from_date}}
To Date{{to_date}}
Status{{status}}
- - {% set doc_link = frappe.utils.get_url_to_form('Leave Application', name) %} - -

- {{ _('Open Now') }} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/leave_application_list.js b/erpnext/hr/doctype/leave_application/leave_application_list.js deleted file mode 100644 index a3c03b1bec..0000000000 --- a/erpnext/hr/doctype/leave_application/leave_application_list.js +++ /dev/null @@ -1,13 +0,0 @@ -frappe.listview_settings['Leave Application'] = { - add_fields: ["leave_type", "employee", "employee_name", "total_leave_days", "from_date", "to_date"], - has_indicator_for_draft: 1, - get_indicator: function (doc) { - if (doc.status === "Approved") { - return [__("Approved"), "green", "status,=,Approved"]; - } else if (doc.status === "Rejected") { - return [__("Rejected"), "red", "status,=,Rejected"]; - } else { - return [__("Open"), "red", "status,=,Open"]; - } - } -}; diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py deleted file mode 100644 index 4c39e15c93..0000000000 --- a/erpnext/hr/doctype/leave_application/test_leave_application.py +++ /dev/null @@ -1,1102 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import unittest - -import frappe -from frappe.permissions import clear_user_permissions_for_doctype -from frappe.utils import ( - add_days, - add_months, - get_first_day, - get_last_day, - get_year_ending, - get_year_start, - getdate, - nowdate, -) - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation -from erpnext.hr.doctype.leave_application.leave_application import ( - InsufficientLeaveBalanceError, - LeaveAcrossAllocationsError, - LeaveDayBlockedError, - NotAnOptionalHoliday, - OverlapError, - get_leave_allocation_records, - get_leave_balance_on, - get_leave_details, -) -from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import ( - create_assignment_for_multiple_employees, -) -from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_holiday_list, - make_leave_application, -) - -test_dependencies = ["Leave Type", "Leave Allocation", "Leave Block List", "Employee"] - -_test_records = [ - { - "company": "_Test Company", - "doctype": "Leave Application", - "employee": "_T-Employee-00001", - "from_date": "2013-05-01", - "description": "_Test Reason", - "leave_type": "_Test Leave Type", - "posting_date": "2013-01-02", - "to_date": "2013-05-05", - }, - { - "company": "_Test Company", - "doctype": "Leave Application", - "employee": "_T-Employee-00002", - "from_date": "2013-05-01", - "description": "_Test Reason", - "leave_type": "_Test Leave Type", - "posting_date": "2013-01-02", - "to_date": "2013-05-05", - }, - { - "company": "_Test Company", - "doctype": "Leave Application", - "employee": "_T-Employee-00001", - "from_date": "2013-01-15", - "description": "_Test Reason", - "leave_type": "_Test Leave Type LWP", - "posting_date": "2013-01-02", - "to_date": "2013-01-15", - }, -] - - -class TestLeaveApplication(unittest.TestCase): - def setUp(self): - for dt in ["Leave Application", "Leave Allocation", "Salary Slip", "Leave Ledger Entry"]: - frappe.db.delete(dt) - - frappe.set_user("Administrator") - set_leave_approver() - - frappe.db.delete("Attendance", {"employee": "_T-Employee-00001"}) - frappe.db.set_value("Employee", "_T-Employee-00001", "holiday_list", "") - - from_date = get_year_start(getdate()) - to_date = get_year_ending(getdate()) - self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - - if not frappe.db.exists("Leave Type", "_Test Leave Type"): - frappe.get_doc( - dict(leave_type_name="_Test Leave Type", doctype="Leave Type", include_holiday=True) - ).insert() - - def tearDown(self): - frappe.db.rollback() - frappe.set_user("Administrator") - - def _clear_roles(self): - frappe.db.sql( - """delete from `tabHas Role` where parent in - ("test@example.com", "test1@example.com", "test2@example.com")""" - ) - - def _clear_applications(self): - frappe.db.sql("""delete from `tabLeave Application`""") - - def get_application(self, doc): - application = frappe.copy_doc(doc) - application.from_date = "2013-01-01" - application.to_date = "2013-01-05" - return application - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_validate_application_across_allocations(self): - # Test validation for application dates when negative balance is disabled - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( - dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False) - ).insert() - - employee = get_employee() - date = getdate() - first_sunday = get_first_sunday(self.holiday_list, for_date=get_year_start(date)) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - from_date=add_days(first_sunday, 1), - to_date=add_days(first_sunday, 4), - company="_Test Company", - status="Approved", - leave_approver="test@example.com", - ) - ) - # Application period cannot be outside leave allocation period - self.assertRaises(frappe.ValidationError, leave_application.insert) - - make_allocation_record( - leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date) - ) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - from_date=add_days(first_sunday, -10), - to_date=add_days(first_sunday, 1), - company="_Test Company", - status="Approved", - leave_approver="test@example.com", - ) - ) - - # Application period cannot be across two allocation records - self.assertRaises(LeaveAcrossAllocationsError, leave_application.insert) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_insufficient_leave_balance_validation(self): - # CASE 1: Validation when allow negative is disabled - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( - dict(leave_type_name="Test Leave Validation", doctype="Leave Type", allow_negative=False) - ).insert() - - employee = get_employee() - date = getdate() - first_sunday = get_first_sunday(self.holiday_list, for_date=get_year_start(date)) - - # allocate 2 leaves, apply for more - make_allocation_record( - leave_type=leave_type.name, - from_date=get_year_start(date), - to_date=get_year_ending(date), - leaves=2, - ) - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - from_date=add_days(first_sunday, 1), - to_date=add_days(first_sunday, 3), - company="_Test Company", - status="Approved", - leave_approver="test@example.com", - ) - ) - self.assertRaises(InsufficientLeaveBalanceError, leave_application.insert) - - # CASE 2: Allows creating application with a warning message when allow negative is enabled - frappe.db.set_value("Leave Type", "Test Leave Validation", "allow_negative", True) - make_leave_application( - employee.name, add_days(first_sunday, 1), add_days(first_sunday, 3), leave_type.name - ) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_separate_leave_ledger_entry_for_boundary_applications(self): - # When application falls in 2 different allocations and Allow Negative is enabled - # creates separate leave ledger entries - frappe.delete_doc_if_exists("Leave Type", "Test Leave Validation", force=1) - leave_type = frappe.get_doc( - dict( - leave_type_name="Test Leave Validation", - doctype="Leave Type", - allow_negative=True, - include_holiday=True, - ) - ).insert() - - employee = get_employee() - date = getdate() - year_start = getdate(get_year_start(date)) - year_end = getdate(get_year_ending(date)) - - make_allocation_record(leave_type=leave_type.name, from_date=year_start, to_date=year_end) - # application across allocations - - # CASE 1: from date has no allocation, to date has an allocation / both dates have allocation - start_date = add_days(year_start, -10) - application = make_leave_application( - employee.name, - start_date, - add_days(year_start, 3), - leave_type.name, - half_day=1, - half_day_date=start_date, - ) - - # 2 separate leave ledger entries - ledgers = frappe.db.get_all( - "Leave Ledger Entry", - {"transaction_type": "Leave Application", "transaction_name": application.name}, - ["leaves", "from_date", "to_date"], - order_by="from_date", - ) - self.assertEqual(len(ledgers), 2) - - self.assertEqual(ledgers[0].from_date, application.from_date) - self.assertEqual(ledgers[0].to_date, add_days(year_start, -1)) - - self.assertEqual(ledgers[1].from_date, year_start) - self.assertEqual(ledgers[1].to_date, application.to_date) - - # CASE 2: from date has an allocation, to date has no allocation - application = make_leave_application( - employee.name, add_days(year_end, -3), add_days(year_end, 5), leave_type.name - ) - - # 2 separate leave ledger entries - ledgers = frappe.db.get_all( - "Leave Ledger Entry", - {"transaction_type": "Leave Application", "transaction_name": application.name}, - ["leaves", "from_date", "to_date"], - order_by="from_date", - ) - self.assertEqual(len(ledgers), 2) - - self.assertEqual(ledgers[0].from_date, application.from_date) - self.assertEqual(ledgers[0].to_date, year_end) - - self.assertEqual(ledgers[1].from_date, add_days(year_end, 1)) - self.assertEqual(ledgers[1].to_date, application.to_date) - - def test_overwrite_attendance(self): - """check attendance is automatically created on leave approval""" - make_allocation_record() - application = self.get_application(_test_records[0]) - application.status = "Approved" - application.from_date = "2018-01-01" - application.to_date = "2018-01-03" - application.insert() - application.submit() - - attendance = frappe.get_all( - "Attendance", - ["name", "status", "attendance_date"], - dict(attendance_date=("between", ["2018-01-01", "2018-01-03"]), docstatus=("!=", 2)), - ) - - # attendance created for all 3 days - self.assertEqual(len(attendance), 3) - - # all on leave - self.assertTrue(all([d.status == "On Leave" for d in attendance])) - - # dates - dates = [d.attendance_date for d in attendance] - for d in ("2018-01-01", "2018-01-02", "2018-01-03"): - self.assertTrue(getdate(d) in dates) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_attendance_for_include_holidays(self): - # Case 1: leave type with 'Include holidays within leaves as leaves' enabled - frappe.delete_doc_if_exists("Leave Type", "Test Include Holidays", force=1) - leave_type = frappe.get_doc( - dict(leave_type_name="Test Include Holidays", doctype="Leave Type", include_holiday=True) - ).insert() - - date = getdate() - make_allocation_record( - leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date) - ) - - employee = get_employee() - first_sunday = get_first_sunday(self.holiday_list) - - leave_application = make_leave_application( - employee.name, first_sunday, add_days(first_sunday, 3), leave_type.name - ) - leave_application.reload() - self.assertEqual(leave_application.total_leave_days, 4) - self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 4) - - leave_application.cancel() - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_attendance_update_for_exclude_holidays(self): - # Case 2: leave type with 'Include holidays within leaves as leaves' disabled - frappe.delete_doc_if_exists("Leave Type", "Test Do Not Include Holidays", force=1) - leave_type = frappe.get_doc( - dict( - leave_type_name="Test Do Not Include Holidays", doctype="Leave Type", include_holiday=False - ) - ).insert() - - date = getdate() - make_allocation_record( - leave_type=leave_type.name, from_date=get_year_start(date), to_date=get_year_ending(date) - ) - - employee = get_employee() - first_sunday = get_first_sunday(self.holiday_list) - - # already marked attendance on a holiday should be deleted in this case - config = {"doctype": "Attendance", "employee": employee.name, "status": "Present"} - attendance_on_holiday = frappe.get_doc(config) - attendance_on_holiday.attendance_date = first_sunday - attendance_on_holiday.flags.ignore_validate = True - attendance_on_holiday.save() - - # already marked attendance on a non-holiday should be updated - attendance = frappe.get_doc(config) - attendance.attendance_date = add_days(first_sunday, 3) - attendance.flags.ignore_validate = True - attendance.save() - - leave_application = make_leave_application( - employee.name, first_sunday, add_days(first_sunday, 3), leave_type.name, employee.company - ) - leave_application.reload() - - # holiday should be excluded while marking attendance - self.assertEqual(leave_application.total_leave_days, 3) - self.assertEqual(frappe.db.count("Attendance", {"leave_application": leave_application.name}), 3) - - # attendance on holiday deleted - self.assertFalse(frappe.db.exists("Attendance", attendance_on_holiday.name)) - - # attendance on non-holiday updated - self.assertEqual(frappe.db.get_value("Attendance", attendance.name, "status"), "On Leave") - - def test_block_list(self): - self._clear_roles() - - from frappe.utils.user import add_role - - add_role("test@example.com", "HR User") - clear_user_permissions_for_doctype("Employee") - - frappe.db.set_value( - "Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List" - ) - - make_allocation_record() - - application = self.get_application(_test_records[0]) - application.insert() - application.reload() - application.status = "Approved" - self.assertRaises(LeaveDayBlockedError, application.submit) - - frappe.set_user("test@example.com") - - # clear other applications - frappe.db.sql("delete from `tabLeave Application`") - - application = self.get_application(_test_records[0]) - self.assertTrue(application.insert()) - - def test_overlap(self): - self._clear_roles() - self._clear_applications() - - from frappe.utils.user import add_role - - add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") - - make_allocation_record() - - application = self.get_application(_test_records[0]) - application.insert() - - application = self.get_application(_test_records[0]) - self.assertRaises(OverlapError, application.insert) - - def test_overlap_with_half_day_1(self): - self._clear_roles() - self._clear_applications() - - from frappe.utils.user import add_role - - add_role("test@example.com", "Employee") - frappe.set_user("test@example.com") - - make_allocation_record() - - # leave from 1-5, half day on 3rd - application = self.get_application(_test_records[0]) - application.half_day = 1 - application.half_day_date = "2013-01-03" - application.insert() - - # Apply again for a half day leave on 3rd - application = self.get_application(_test_records[0]) - application.from_date = "2013-01-03" - application.to_date = "2013-01-03" - application.half_day = 1 - application.half_day_date = "2013-01-03" - application.insert() - - # Apply again for a half day leave on 3rd - application = self.get_application(_test_records[0]) - application.from_date = "2013-01-03" - application.to_date = "2013-01-03" - application.half_day = 1 - application.half_day_date = "2013-01-03" - - self.assertRaises(OverlapError, application.insert) - - def test_overlap_with_half_day_2(self): - self._clear_roles() - self._clear_applications() - - from frappe.utils.user import add_role - - add_role("test@example.com", "Employee") - - frappe.set_user("test@example.com") - - make_allocation_record() - - # leave from 1-5, no half day - application = self.get_application(_test_records[0]) - application.insert() - - # Apply again for a half day leave on 1st - application = self.get_application(_test_records[0]) - application.half_day = 1 - application.half_day_date = application.from_date - - self.assertRaises(OverlapError, application.insert) - - def test_overlap_with_half_day_3(self): - self._clear_roles() - self._clear_applications() - - from frappe.utils.user import add_role - - add_role("test@example.com", "Employee") - - frappe.set_user("test@example.com") - - make_allocation_record() - - # leave from 1-5, half day on 5th - application = self.get_application(_test_records[0]) - application.half_day = 1 - application.half_day_date = "2013-01-05" - application.insert() - - # Apply leave from 4-7, half day on 5th - application = self.get_application(_test_records[0]) - application.from_date = "2013-01-04" - application.to_date = "2013-01-07" - application.half_day = 1 - application.half_day_date = "2013-01-05" - - self.assertRaises(OverlapError, application.insert) - - # Apply leave from 5-7, half day on 5th - application = self.get_application(_test_records[0]) - application.from_date = "2013-01-05" - application.to_date = "2013-01-07" - application.half_day = 1 - application.half_day_date = "2013-01-05" - application.insert() - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_optional_leave(self): - leave_period = get_leave_period() - today = nowdate() - holiday_list = "Test Holiday List for Optional Holiday" - employee = get_employee() - - first_sunday = get_first_sunday(self.holiday_list) - optional_leave_date = add_days(first_sunday, 1) - - if not frappe.db.exists("Holiday List", holiday_list): - frappe.get_doc( - dict( - doctype="Holiday List", - holiday_list_name=holiday_list, - from_date=add_months(today, -6), - to_date=add_months(today, 6), - holidays=[dict(holiday_date=optional_leave_date, description="Test")], - ) - ).insert() - - frappe.db.set_value("Leave Period", leave_period.name, "optional_holiday_list", holiday_list) - leave_type = "Test Optional Type" - if not frappe.db.exists("Leave Type", leave_type): - frappe.get_doc( - dict(leave_type_name=leave_type, doctype="Leave Type", is_optional_leave=1) - ).insert() - - allocate_leaves(employee, leave_period, leave_type, 10) - - date = add_days(first_sunday, 2) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - company="_Test Company", - description="_Test Reason", - leave_type=leave_type, - from_date=date, - to_date=date, - ) - ) - - # can only apply on optional holidays - self.assertRaises(NotAnOptionalHoliday, leave_application.insert) - - leave_application.from_date = optional_leave_date - leave_application.to_date = optional_leave_date - leave_application.status = "Approved" - leave_application.insert() - leave_application.submit() - - # check leave balance is reduced - self.assertEqual(get_leave_balance_on(employee.name, leave_type, optional_leave_date), 9) - - def test_leaves_allowed(self): - employee = get_employee() - leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( - dict(leave_type_name="Test Leave Type", doctype="Leave Type", max_leaves_allowed=5) - ).insert() - - date = add_days(nowdate(), -7) - - allocate_leaves(employee, leave_period, leave_type.name, 5) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - description="_Test Reason", - from_date=date, - to_date=add_days(date, 2), - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - leave_application.submit() - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - description="_Test Reason", - from_date=add_days(date, 4), - to_date=add_days(date, 8), - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - self.assertRaises(frappe.ValidationError, leave_application.insert) - - def test_applicable_after(self): - employee = get_employee() - leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( - dict(leave_type_name="Test Leave Type", doctype="Leave Type", applicable_after=15) - ).insert() - date = add_days(nowdate(), -7) - frappe.db.set_value("Employee", employee.name, "date_of_joining", date) - allocate_leaves(employee, leave_period, leave_type.name, 10) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - description="_Test Reason", - from_date=date, - to_date=add_days(date, 4), - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - - self.assertRaises(frappe.ValidationError, leave_application.insert) - - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type 1", force=1) - leave_type_1 = frappe.get_doc( - dict(leave_type_name="Test Leave Type 1", doctype="Leave Type") - ).insert() - - allocate_leaves(employee, leave_period, leave_type_1.name, 10) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type_1.name, - description="_Test Reason", - from_date=date, - to_date=add_days(date, 4), - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - - self.assertTrue(leave_application.insert()) - frappe.db.set_value("Employee", employee.name, "date_of_joining", "2010-01-01") - - def test_max_continuous_leaves(self): - employee = get_employee() - leave_period = get_leave_period() - frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1) - leave_type = frappe.get_doc( - dict( - leave_type_name="Test Leave Type", - doctype="Leave Type", - max_leaves_allowed=15, - max_continuous_days_allowed=3, - ) - ).insert() - - date = add_days(nowdate(), -7) - - allocate_leaves(employee, leave_period, leave_type.name, 10) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - description="_Test Reason", - from_date=date, - to_date=add_days(date, 4), - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - - self.assertRaises(frappe.ValidationError, leave_application.insert) - - def test_leave_balance_near_allocaton_expiry(self): - employee = get_employee() - leave_type = create_leave_type( - leave_type_name="_Test_CF_leave_expiry", - is_carry_forward=1, - expire_carry_forwarded_leaves_after_days=90, - ) - leave_type.insert() - - create_carry_forwarded_allocation(employee, leave_type) - details = get_leave_balance_on( - employee.name, leave_type.name, nowdate(), add_days(nowdate(), 8), for_consumption=True - ) - - self.assertEqual(details.leave_balance_for_consumption, 21) - self.assertEqual(details.leave_balance, 30) - - def test_earned_leaves_creation(self): - - frappe.db.sql("""delete from `tabLeave Period`""") - frappe.db.sql("""delete from `tabLeave Policy Assignment`""") - frappe.db.sql("""delete from `tabLeave Allocation`""") - frappe.db.sql("""delete from `tabLeave Ledger Entry`""") - - leave_period = get_leave_period() - employee = get_employee() - leave_type = "Test Earned Leave Type" - frappe.delete_doc_if_exists("Leave Type", "Test Earned Leave Type", force=1) - frappe.get_doc( - dict( - leave_type_name=leave_type, - doctype="Leave Type", - is_earned_leave=1, - earned_leave_frequency="Monthly", - rounding=0.5, - max_leaves_allowed=6, - ) - ).insert() - - leave_policy = frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [{"leave_type": leave_type, "annual_allocation": 6}], - } - ).insert() - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - - leave_policy_assignments = create_assignment_for_multiple_employees( - [employee.name], frappe._dict(data) - ) - - from erpnext.hr.utils import allocate_earned_leaves - - i = 0 - while i < 14: - allocate_earned_leaves(ignore_duplicates=True) - i += 1 - self.assertEqual(get_leave_balance_on(employee.name, leave_type, nowdate()), 6) - - # validate earned leaves creation without maximum leaves - frappe.db.set_value("Leave Type", leave_type, "max_leaves_allowed", 0) - i = 0 - while i < 6: - allocate_earned_leaves(ignore_duplicates=True) - i += 1 - self.assertEqual(get_leave_balance_on(employee.name, leave_type, nowdate()), 9) - - # test to not consider current leave in leave balance while submitting - def test_current_leave_on_submit(self): - employee = get_employee() - - leave_type = "Sick Leave" - if not frappe.db.exists("Leave Type", leave_type): - frappe.get_doc(dict(leave_type_name=leave_type, doctype="Leave Type")).insert() - - allocation = frappe.get_doc( - dict( - doctype="Leave Allocation", - employee=employee.name, - leave_type=leave_type, - from_date="2018-10-01", - to_date="2018-10-10", - new_leaves_allocated=1, - ) - ) - allocation.insert(ignore_permissions=True) - allocation.submit() - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type, - description="_Test Reason", - from_date="2018-10-02", - to_date="2018-10-02", - company="_Test Company", - status="Approved", - leave_approver="test@example.com", - ) - ) - self.assertTrue(leave_application.insert()) - leave_application.submit() - self.assertEqual(leave_application.docstatus, 1) - - def test_creation_of_leave_ledger_entry_on_submit(self): - employee = get_employee() - - leave_type = create_leave_type(leave_type_name="Test Leave Type 1") - leave_type.save() - - leave_allocation = create_leave_allocation( - employee=employee.name, employee_name=employee.employee_name, leave_type=leave_type.name - ) - leave_allocation.submit() - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - from_date=add_days(nowdate(), 1), - to_date=add_days(nowdate(), 4), - description="_Test Reason", - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - leave_application.submit() - leave_ledger_entry = frappe.get_all( - "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_application.name) - ) - - self.assertEqual(leave_ledger_entry[0].employee, leave_application.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, leave_application.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, leave_application.total_leave_days * -1) - - # check if leave ledger entry is deleted on cancellation - leave_application.cancel() - self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_application.name}) - ) - - def test_ledger_entry_creation_on_intermediate_allocation_expiry(self): - employee = get_employee() - leave_type = create_leave_type( - leave_type_name="_Test_CF_leave_expiry", - is_carry_forward=1, - expire_carry_forwarded_leaves_after_days=90, - include_holiday=True, - ) - leave_type.submit() - - create_carry_forwarded_allocation(employee, leave_type) - - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee.name, - leave_type=leave_type.name, - from_date=add_days(nowdate(), -3), - to_date=add_days(nowdate(), 7), - half_day=1, - half_day_date=add_days(nowdate(), -3), - description="_Test Reason", - company="_Test Company", - docstatus=1, - status="Approved", - ) - ) - leave_application.submit() - - leave_ledger_entry = frappe.get_all( - "Leave Ledger Entry", "*", filters=dict(transaction_name=leave_application.name) - ) - - self.assertEqual(len(leave_ledger_entry), 2) - self.assertEqual(leave_ledger_entry[0].employee, leave_application.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, leave_application.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, -8.5) - self.assertEqual(leave_ledger_entry[1].leaves, -2) - - def test_leave_application_creation_after_expiry(self): - # test leave balance for carry forwarded allocation - employee = get_employee() - leave_type = create_leave_type( - leave_type_name="_Test_CF_leave_expiry", - is_carry_forward=1, - expire_carry_forwarded_leaves_after_days=90, - ) - leave_type.submit() - - create_carry_forwarded_allocation(employee, leave_type) - - self.assertEqual( - get_leave_balance_on( - employee.name, leave_type.name, add_days(nowdate(), -85), add_days(nowdate(), -84) - ), - 0, - ) - - def test_leave_approver_perms(self): - employee = get_employee() - user = "test_approver_perm_emp@example.com" - make_employee(user, "_Test Company") - - # set approver for employee - employee.reload() - employee.leave_approver = user - employee.save() - self.assertTrue("Leave Approver" in frappe.get_roles(user)) - - make_allocation_record(employee.name) - - application = self.get_application(_test_records[0]) - application.from_date = "2018-01-01" - application.to_date = "2018-01-03" - application.leave_approver = user - application.insert() - self.assertTrue(application.name in frappe.share.get_shared("Leave Application", user)) - - # check shared doc revoked - application.reload() - application.leave_approver = "test@example.com" - application.save() - self.assertTrue(application.name not in frappe.share.get_shared("Leave Application", user)) - - application.reload() - application.leave_approver = user - application.save() - - frappe.set_user(user) - application.reload() - application.status = "Approved" - application.submit() - - # unset leave approver - frappe.set_user("Administrator") - employee.reload() - employee.leave_approver = "" - employee.save() - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_get_leave_details_for_dashboard(self): - employee = get_employee() - date = getdate() - year_start = getdate(get_year_start(date)) - year_end = getdate(get_year_ending(date)) - - # ALLOCATION = 30 - allocation = make_allocation_record( - employee=employee.name, from_date=year_start, to_date=year_end - ) - - # USED LEAVES = 4 - first_sunday = get_first_sunday(self.holiday_list) - leave_application = make_leave_application( - employee.name, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type" - ) - leave_application.reload() - - # LEAVES PENDING APPROVAL = 1 - leave_application = make_leave_application( - employee.name, - add_days(first_sunday, 5), - add_days(first_sunday, 5), - "_Test Leave Type", - submit=False, - ) - leave_application.status = "Open" - leave_application.save() - - details = get_leave_details(employee.name, allocation.from_date) - leave_allocation = details["leave_allocation"]["_Test Leave Type"] - self.assertEqual(leave_allocation["total_leaves"], 30) - self.assertEqual(leave_allocation["leaves_taken"], 4) - self.assertEqual(leave_allocation["expired_leaves"], 0) - self.assertEqual(leave_allocation["leaves_pending_approval"], 1) - self.assertEqual(leave_allocation["remaining_leaves"], 26) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_get_leave_allocation_records(self): - employee = get_employee() - leave_type = create_leave_type( - leave_type_name="_Test_CF_leave_expiry", - is_carry_forward=1, - expire_carry_forwarded_leaves_after_days=90, - ) - leave_type.insert() - - leave_alloc = create_carry_forwarded_allocation(employee, leave_type) - details = get_leave_allocation_records(employee.name, getdate(), leave_type.name) - expected_data = { - "from_date": getdate(leave_alloc.from_date), - "to_date": getdate(leave_alloc.to_date), - "total_leaves_allocated": 30.0, - "unused_leaves": 15.0, - "new_leaves_allocated": 15.0, - "leave_type": leave_type.name, - } - self.assertEqual(details.get(leave_type.name), expected_data) - - -def create_carry_forwarded_allocation(employee, leave_type): - # initial leave allocation - leave_allocation = create_leave_allocation( - leave_type="_Test_CF_leave_expiry", - employee=employee.name, - employee_name=employee.employee_name, - from_date=add_months(nowdate(), -24), - to_date=add_months(nowdate(), -12), - carry_forward=0, - ) - leave_allocation.submit() - - leave_allocation = create_leave_allocation( - leave_type="_Test_CF_leave_expiry", - employee=employee.name, - employee_name=employee.employee_name, - from_date=add_days(nowdate(), -84), - to_date=add_days(nowdate(), 100), - carry_forward=1, - ) - leave_allocation.submit() - - return leave_allocation - - -def make_allocation_record( - employee=None, leave_type=None, from_date=None, to_date=None, carry_forward=False, leaves=None -): - allocation = frappe.get_doc( - { - "doctype": "Leave Allocation", - "employee": employee or "_T-Employee-00001", - "leave_type": leave_type or "_Test Leave Type", - "from_date": from_date or "2013-01-01", - "to_date": to_date or "2019-12-31", - "new_leaves_allocated": leaves or 30, - "carry_forward": carry_forward, - } - ) - - allocation.insert(ignore_permissions=True) - allocation.submit() - - return allocation - - -def get_employee(): - return frappe.get_doc("Employee", "_T-Employee-00001") - - -def set_leave_approver(): - employee = get_employee() - dept_doc = frappe.get_doc("Department", employee.department) - dept_doc.append("leave_approvers", {"approver": "test@example.com"}) - dept_doc.save(ignore_permissions=True) - - -def get_leave_period(): - leave_period_name = frappe.db.get_value("Leave Period", {"company": "_Test Company"}) - if leave_period_name: - return frappe.get_doc("Leave Period", leave_period_name) - else: - return frappe.get_doc( - dict( - name="Test Leave Period", - doctype="Leave Period", - from_date=add_months(nowdate(), -6), - to_date=add_months(nowdate(), 6), - company="_Test Company", - is_active=1, - ) - ).insert() - - -def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, eligible_leaves=0): - allocate_leave = frappe.get_doc( - { - "doctype": "Leave Allocation", - "__islocal": 1, - "employee": employee.name, - "employee_name": employee.employee_name, - "leave_type": leave_type, - "from_date": leave_period.from_date, - "to_date": leave_period.to_date, - "new_leaves_allocated": new_leaves_allocated, - "docstatus": 1, - } - ).insert() - - allocate_leave.submit() - - -def get_first_sunday(holiday_list, for_date=None): - date = for_date or getdate() - month_start_date = get_first_day(date) - month_end_date = get_last_day(date) - first_sunday = frappe.db.sql( - """ - select holiday_date from `tabHoliday` - where parent = %s - and holiday_date between %s and %s - order by holiday_date - """, - (holiday_list, month_start_date, month_end_date), - )[0][0] - - return first_sunday diff --git a/erpnext/hr/doctype/leave_application/test_records.json b/erpnext/hr/doctype/leave_application/test_records.json deleted file mode 100644 index fe51488c70..0000000000 --- a/erpnext/hr/doctype/leave_application/test_records.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/erpnext/hr/doctype/leave_block_list/README.md b/erpnext/hr/doctype/leave_block_list/README.md deleted file mode 100644 index b23396c4a3..0000000000 --- a/erpnext/hr/doctype/leave_block_list/README.md +++ /dev/null @@ -1 +0,0 @@ -List of days on which leaves can only be approved by special users. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list/__init__.py b/erpnext/hr/doctype/leave_block_list/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.js b/erpnext/hr/doctype/leave_block_list/leave_block_list.js deleted file mode 100644 index 7ccf59d2f6..0000000000 --- a/erpnext/hr/doctype/leave_block_list/leave_block_list.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Block List', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.json b/erpnext/hr/doctype/leave_block_list/leave_block_list.json deleted file mode 100644 index fdb975ba85..0000000000 --- a/erpnext/hr/doctype/leave_block_list/leave_block_list.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "field:leave_block_list_name", - "beta": 0, - "creation": "2013-02-18 17:43:12", - "custom": 0, - "description": "Block Holidays on important days.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "leave_block_list_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Leave Block List Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 1, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "If not checked, the list will have to be added to each Department where it has to be applied.", - "fieldname": "applies_to_all_departments", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Applies to Company", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Stop users from making Leave Applications on following days.", - "fieldname": "block_days", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Block Days", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "leave_block_list_dates", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Leave Block List Dates", - "length": 0, - "no_copy": 0, - "options": "Leave Block List Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Allow the following users to approve Leave Applications for block days.", - "fieldname": "allow_list", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Allow Users", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "leave_block_list_allowed", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Leave Block List Allowed", - "length": 0, - "no_copy": 0, - "options": "Leave Block List Allow", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-calendar", - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-11-03 16:01:42.171113", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Block List", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "is_custom": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "sort_order": "ASC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.py b/erpnext/hr/doctype/leave_block_list/leave_block_list.py deleted file mode 100644 index a57ba84e38..0000000000 --- a/erpnext/hr/doctype/leave_block_list/leave_block_list.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class LeaveBlockList(Document): - def validate(self): - dates = [] - for d in self.get("leave_block_list_dates"): - - # date is not repeated - if d.block_date in dates: - frappe.msgprint(_("Date is repeated") + ":" + d.block_date, raise_exception=1) - dates.append(d.block_date) - - -@frappe.whitelist() -def get_applicable_block_dates(from_date, to_date, employee=None, company=None, all_lists=False): - block_dates = [] - for block_list in get_applicable_block_lists(employee, company, all_lists): - block_dates.extend( - frappe.db.sql( - """select block_date, reason - from `tabLeave Block List Date` where parent=%s - and block_date between %s and %s""", - (block_list, from_date, to_date), - as_dict=1, - ) - ) - - return block_dates - - -def get_applicable_block_lists(employee=None, company=None, all_lists=False): - block_lists = [] - - if not employee: - employee = frappe.db.get_value("Employee", {"user_id": frappe.session.user}) - if not employee: - return [] - - if not company: - company = frappe.db.get_value("Employee", employee, "company") - - def add_block_list(block_list): - if block_list: - if all_lists or not is_user_in_allow_list(block_list): - block_lists.append(block_list) - - # per department - department = frappe.db.get_value("Employee", employee, "department") - if department: - block_list = frappe.db.get_value("Department", department, "leave_block_list") - add_block_list(block_list) - - # global - for block_list in frappe.db.sql_list( - """select name from `tabLeave Block List` - where applies_to_all_departments=1 and company=%s""", - company, - ): - add_block_list(block_list) - - return list(set(block_lists)) - - -def is_user_in_allow_list(block_list): - return frappe.session.user in frappe.db.sql_list( - """select allow_user - from `tabLeave Block List Allow` where parent=%s""", - block_list, - ) diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py b/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py deleted file mode 100644 index afeb5ded39..0000000000 --- a/erpnext/hr/doctype/leave_block_list/leave_block_list_dashboard.py +++ /dev/null @@ -1,2 +0,0 @@ -def get_data(): - return {"fieldname": "leave_block_list", "transactions": [{"items": ["Department"]}]} diff --git a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py deleted file mode 100644 index be85a35414..0000000000 --- a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import unittest - -import frappe -from frappe.utils import getdate - -from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates - - -class TestLeaveBlockList(unittest.TestCase): - def tearDown(self): - frappe.set_user("Administrator") - - def test_get_applicable_block_dates(self): - frappe.set_user("test@example.com") - frappe.db.set_value( - "Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List" - ) - self.assertTrue( - getdate("2013-01-02") - in [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")] - ) - - def test_get_applicable_block_dates_for_allowed_user(self): - frappe.set_user("test1@example.com") - frappe.db.set_value( - "Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List" - ) - self.assertEqual( - [], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")] - ) - - def test_get_applicable_block_dates_all_lists(self): - frappe.set_user("test1@example.com") - frappe.db.set_value( - "Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List" - ) - self.assertTrue( - getdate("2013-01-02") - in [ - d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03", all_lists=True) - ] - ) - - -test_dependencies = ["Employee"] - -test_records = frappe.get_test_records("Leave Block List") diff --git a/erpnext/hr/doctype/leave_block_list/test_records.json b/erpnext/hr/doctype/leave_block_list/test_records.json deleted file mode 100644 index 04565116d1..0000000000 --- a/erpnext/hr/doctype/leave_block_list/test_records.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "company": "_Test Company", - "doctype": "Leave Block List", - "leave_block_list_allowed": [ - { - "allow_user": "test1@example.com", - "doctype": "Leave Block List Allow", - "parent": "_Test Leave Block List", - "parentfield": "leave_block_list_allowed", - "parenttype": "Leave Block List" - } - ], - "leave_block_list_dates": [ - { - "block_date": "2013-01-02", - "doctype": "Leave Block List Date", - "parent": "_Test Leave Block List", - "parentfield": "leave_block_list_dates", - "parenttype": "Leave Block List", - "reason": "First work day" - } - ], - "leave_block_list_name": "_Test Leave Block List", - "year": "_Test Fiscal Year 2013" - } -] \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list_allow/README.md b/erpnext/hr/doctype/leave_block_list_allow/README.md deleted file mode 100644 index a735039a1a..0000000000 --- a/erpnext/hr/doctype/leave_block_list_allow/README.md +++ /dev/null @@ -1 +0,0 @@ -User allowed to approve leave on blocked date. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list_allow/__init__.py b/erpnext/hr/doctype/leave_block_list_allow/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json deleted file mode 100644 index fe10c7823c..0000000000 --- a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:47", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "allow_user", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Allow User", - "length": 0, - "no_copy": 0, - "options": "User", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "200px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "200px" - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:28:02.032277", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Block List Allow", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py deleted file mode 100644 index 50dc125650..0000000000 --- a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class LeaveBlockListAllow(Document): - pass diff --git a/erpnext/hr/doctype/leave_block_list_date/README.md b/erpnext/hr/doctype/leave_block_list_date/README.md deleted file mode 100644 index 658f35985d..0000000000 --- a/erpnext/hr/doctype/leave_block_list_date/README.md +++ /dev/null @@ -1 +0,0 @@ -Date blocked on parent Leave Block List. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list_date/__init__.py b/erpnext/hr/doctype/leave_block_list_date/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json deleted file mode 100644 index dbb903969f..0000000000 --- a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-02-22 01:27:47", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 1, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "block_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Block Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "200px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "200px" - }, - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "reason", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Reason", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "print_width": "200px", - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0, - "width": "200px" - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 1, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2016-07-11 03:28:02.099296", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Block List Date", - "owner": "Administrator", - "permissions": [], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py deleted file mode 100644 index 36550ccd89..0000000000 --- a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class LeaveBlockListDate(Document): - pass diff --git a/erpnext/hr/doctype/leave_control_panel/README.md b/erpnext/hr/doctype/leave_control_panel/README.md deleted file mode 100644 index f7d3357570..0000000000 --- a/erpnext/hr/doctype/leave_control_panel/README.md +++ /dev/null @@ -1 +0,0 @@ -Tool to allocate leaves in bulk. \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_control_panel/__init__.py b/erpnext/hr/doctype/leave_control_panel/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js deleted file mode 100644 index 4a450807cc..0000000000 --- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.ui.form.on("Leave Control Panel", { - onload: function(frm) { - if (!frm.doc.from_date) { - frm.set_value('from_date', frappe.datetime.get_today()); - } - }, - refresh: function(frm) { - frm.disable_save(); - }, - company: function(frm) { - if(frm.doc.company) { - frm.set_query("department", function() { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - } - } -}); diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json deleted file mode 100644 index d9c592aa64..0000000000 --- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "actions": [], - "allow_copy": 1, - "creation": "2013-01-10 16:34:15", - "doctype": "DocType", - "engine": "InnoDB", - "field_order": [ - "select_employees_section", - "company", - "employment_type", - "branch", - "department", - "column_break1", - "designation", - "employee_grade", - "employee", - "allocate_leaves_section", - "from_date", - "to_date", - "carry_forward", - "no_of_days", - "allocate", - "column_break_16", - "leave_policy", - "leave_type" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "employment_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employment Type (optional)", - "options": "Employment Type" - }, - { - "fieldname": "branch", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Branch (optional)", - "options": "Branch" - }, - { - "fieldname": "department", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Department (optional)", - "options": "Department" - }, - { - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Designation (optional)", - "options": "Designation" - }, - { - "fieldname": "employee_grade", - "fieldtype": "Link", - "label": "Employee Grade (optional)", - "options": "Employee Grade" - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee (optional)", - "options": "Employee" - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", - "reqd": 1 - }, - { - "fieldname": "leave_policy", - "fieldtype": "Link", - "label": "Leave Policy", - "options": "Leave Policy" - }, - { - "fieldname": "leave_type", - "fieldtype": "Link", - "label": "Leave Type", - "options": "Leave Type" - }, - { - "default": "0", - "description": "Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year", - "fieldname": "carry_forward", - "fieldtype": "Check", - "label": "Carry Forward" - }, - { - "fieldname": "no_of_days", - "fieldtype": "Float", - "label": "New Leaves Allocated (In Days)", - "reqd": 1 - }, - { - "fieldname": "allocate", - "fieldtype": "Button", - "label": "Allocate", - "options": "allocate_leave" - }, - { - "fieldname": "select_employees_section", - "fieldtype": "Section Break", - "label": "Select Employees" - }, - { - "fieldname": "allocate_leaves_section", - "fieldtype": "Section Break", - "label": "Allocate Leaves" - }, - { - "fieldname": "column_break_16", - "fieldtype": "Column Break" - } - ], - "hide_toolbar": 1, - "icon": "fa fa-cog", - "idx": 1, - "issingle": 1, - "links": [], - "modified": "2019-12-12 18:51:41.573349", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Control Panel", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "read": 1, - "role": "HR User", - "write": 1 - } - ], - "read_only": 1, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py deleted file mode 100644 index c57f8ae72b..0000000000 --- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _, msgprint -from frappe.model.document import Document -from frappe.utils import cint, comma_and, cstr, flt - - -class LeaveControlPanel(Document): - def get_employees(self): - conditions, values = [], [] - for field in ["company", "employment_type", "branch", "designation", "department"]: - if self.get(field): - conditions.append("{0}=%s".format(field)) - values.append(self.get(field)) - - condition_str = " and " + " and ".join(conditions) if len(conditions) else "" - - e = frappe.db.sql( - "select name from tabEmployee where status='Active' {condition}".format( - condition=condition_str - ), - tuple(values), - ) - - return e - - def validate_values(self): - for f in ["from_date", "to_date", "leave_type", "no_of_days"]: - if not self.get(f): - frappe.throw(_("{0} is required").format(self.meta.get_label(f))) - self.validate_from_to_dates("from_date", "to_date") - - @frappe.whitelist() - def allocate_leave(self): - self.validate_values() - leave_allocated_for = [] - employees = self.get_employees() - if not employees: - frappe.throw(_("No employee found")) - - for d in self.get_employees(): - try: - la = frappe.new_doc("Leave Allocation") - la.set("__islocal", 1) - la.employee = cstr(d[0]) - la.employee_name = frappe.db.get_value("Employee", cstr(d[0]), "employee_name") - la.leave_type = self.leave_type - la.from_date = self.from_date - la.to_date = self.to_date - la.carry_forward = cint(self.carry_forward) - la.new_leaves_allocated = flt(self.no_of_days) - la.docstatus = 1 - la.save() - leave_allocated_for.append(d[0]) - except Exception: - pass - if leave_allocated_for: - msgprint(_("Leaves Allocated Successfully for {0}").format(comma_and(leave_allocated_for))) diff --git a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py deleted file mode 100644 index d5a9bc0486..0000000000 --- a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestLeaveControlPanel(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/leave_encashment/__init__.py b/erpnext/hr/doctype/leave_encashment/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.js b/erpnext/hr/doctype/leave_encashment/leave_encashment.js deleted file mode 100644 index 81936a4a38..0000000000 --- a/erpnext/hr/doctype/leave_encashment/leave_encashment.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Encashment', { - onload: function(frm) { - // Ignore cancellation of doctype on cancel all. - frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; - }, - setup: function(frm) { - frm.set_query("leave_type", function() { - return { - filters: { - allow_encashment: 1 - } - } - }) - }, - refresh: function(frm) { - cur_frm.set_intro(""); - if(frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) { - frm.set_intro(__("Fill the form and save it")); - } - }, - employee: function(frm) { - if (frm.doc.employee) { - frappe.run_serially([ - () => frm.trigger('get_employee_currency'), - () => frm.trigger('get_leave_details_for_encashment') - ]); - } - }, - leave_type: function(frm) { - frm.trigger("get_leave_details_for_encashment"); - }, - encashment_date: function(frm) { - frm.trigger("get_leave_details_for_encashment"); - }, - get_leave_details_for_encashment: function(frm) { - if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type) { - return frappe.call({ - method: "get_leave_details_for_encashment", - doc: frm.doc, - callback: function(r) { - frm.refresh_fields(); - } - }); - } - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - }, -}); diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.json b/erpnext/hr/doctype/leave_encashment/leave_encashment.json deleted file mode 100644 index cc4e53eb90..0000000000 --- a/erpnext/hr/doctype/leave_encashment/leave_encashment.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-ENC-.YYYY.-.#####", - "creation": "2018-04-13 15:31:51.197046", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "leave_period", - "employee", - "employee_name", - "department", - "company", - "column_break_4", - "leave_type", - "leave_allocation", - "leave_balance", - "encashable_days", - "amended_from", - "payroll", - "encashment_date", - "additional_salary", - "column_break_14", - "currency", - "encashment_amount" - ], - "fields": [ - { - "fieldname": "leave_period", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Leave Period", - "options": "Leave Period", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "leave_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Leave Type", - "options": "Leave Type", - "reqd": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "leave_allocation", - "fieldtype": "Link", - "label": "Leave Allocation", - "no_copy": 1, - "options": "Leave Allocation", - "read_only": 1 - }, - { - "fieldname": "leave_balance", - "fieldtype": "Float", - "label": "Leave Balance", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "encashable_days", - "fieldtype": "Float", - "label": "Encashable days", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Leave Encashment", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "payroll", - "fieldtype": "Section Break", - "label": "Payroll" - }, - { - "fieldname": "encashment_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Encashment Amount", - "no_copy": 1, - "options": "currency", - "read_only": 1 - }, - { - "default": "Today", - "fieldname": "encashment_date", - "fieldtype": "Date", - "label": "Encashment Date" - }, - { - "fieldname": "additional_salary", - "fieldtype": "Link", - "label": "Additional Salary", - "no_copy": 1, - "options": "Additional Salary", - "read_only": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "column_break_14", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-18 19:16:52.414356", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Encashment", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - } - ], - "search_fields": "employee,employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_encashment/leave_encashment.py b/erpnext/hr/doctype/leave_encashment/leave_encashment.py deleted file mode 100644 index 0f655e3e0f..0000000000 --- a/erpnext/hr/doctype/leave_encashment/leave_encashment.py +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate, nowdate - -from erpnext.hr.doctype.leave_allocation.leave_allocation import get_unused_leaves -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import create_leave_ledger_entry -from erpnext.hr.utils import set_employee_name, validate_active_employee -from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import ( - get_assigned_salary_structure, -) - - -class LeaveEncashment(Document): - def validate(self): - set_employee_name(self) - validate_active_employee(self.employee) - self.get_leave_details_for_encashment() - self.validate_salary_structure() - - if not self.encashment_date: - self.encashment_date = getdate(nowdate()) - - def validate_salary_structure(self): - if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}): - frappe.throw( - _("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format( - self.employee - ) - ) - - def before_submit(self): - if self.encashment_amount <= 0: - frappe.throw(_("You can only submit Leave Encashment for a valid encashment amount")) - - def on_submit(self): - if not self.leave_allocation: - self.leave_allocation = self.get_leave_allocation().get("name") - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.company = frappe.get_value("Employee", self.employee, "company") - additional_salary.employee = self.employee - additional_salary.currency = self.currency - earning_component = frappe.get_value("Leave Type", self.leave_type, "earning_component") - if not earning_component: - frappe.throw(_("Please set Earning Component for Leave type: {0}.").format(self.leave_type)) - additional_salary.salary_component = earning_component - additional_salary.payroll_date = self.encashment_date - additional_salary.amount = self.encashment_amount - additional_salary.ref_doctype = self.doctype - additional_salary.ref_docname = self.name - additional_salary.submit() - - # Set encashed leaves in Allocation - frappe.db.set_value( - "Leave Allocation", - self.leave_allocation, - "total_leaves_encashed", - frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") - + self.encashable_days, - ) - - self.create_leave_ledger_entry() - - def on_cancel(self): - if self.additional_salary: - frappe.get_doc("Additional Salary", self.additional_salary).cancel() - self.db_set("additional_salary", "") - - if self.leave_allocation: - frappe.db.set_value( - "Leave Allocation", - self.leave_allocation, - "total_leaves_encashed", - frappe.db.get_value("Leave Allocation", self.leave_allocation, "total_leaves_encashed") - - self.encashable_days, - ) - self.create_leave_ledger_entry(submit=False) - - @frappe.whitelist() - def get_leave_details_for_encashment(self): - salary_structure = get_assigned_salary_structure( - self.employee, self.encashment_date or getdate(nowdate()) - ) - if not salary_structure: - frappe.throw( - _("No Salary Structure assigned for Employee {0} on given date {1}").format( - self.employee, self.encashment_date - ) - ) - - if not frappe.db.get_value("Leave Type", self.leave_type, "allow_encashment"): - frappe.throw(_("Leave Type {0} is not encashable").format(self.leave_type)) - - allocation = self.get_leave_allocation() - - if not allocation: - frappe.throw( - _("No Leaves Allocated to Employee: {0} for Leave Type: {1}").format( - self.employee, self.leave_type - ) - ) - - self.leave_balance = ( - allocation.total_leaves_allocated - - allocation.carry_forwarded_leaves_count - - get_unused_leaves(self.employee, self.leave_type, allocation.from_date, self.encashment_date) - ) - - encashable_days = self.leave_balance - frappe.db.get_value( - "Leave Type", self.leave_type, "encashment_threshold_days" - ) - self.encashable_days = encashable_days if encashable_days > 0 else 0 - - per_day_encashment = frappe.db.get_value( - "Salary Structure", salary_structure, "leave_encashment_amount_per_day" - ) - self.encashment_amount = ( - self.encashable_days * per_day_encashment if per_day_encashment > 0 else 0 - ) - - self.leave_allocation = allocation.name - return True - - def get_leave_allocation(self): - leave_allocation = frappe.db.sql( - """select name, to_date, total_leaves_allocated, carry_forwarded_leaves_count from `tabLeave Allocation` where '{0}' - between from_date and to_date and docstatus=1 and leave_type='{1}' - and employee= '{2}'""".format( - self.encashment_date or getdate(nowdate()), self.leave_type, self.employee - ), - as_dict=1, - ) # nosec - - return leave_allocation[0] if leave_allocation else None - - def create_leave_ledger_entry(self, submit=True): - args = frappe._dict( - leaves=self.encashable_days * -1, - from_date=self.encashment_date, - to_date=self.encashment_date, - is_carry_forward=0, - ) - create_leave_ledger_entry(self, args, submit) - - # create reverse entry for expired leaves - leave_allocation = self.get_leave_allocation() - if not leave_allocation: - return - - to_date = leave_allocation.get("to_date") - if to_date < getdate(nowdate()): - args = frappe._dict( - leaves=self.encashable_days, from_date=to_date, to_date=to_date, is_carry_forward=0 - ) - create_leave_ledger_entry(self, args, submit) - - -def create_leave_encashment(leave_allocation): - """Creates leave encashment for the given allocations""" - for allocation in leave_allocation: - if not get_assigned_salary_structure(allocation.employee, allocation.to_date): - continue - leave_encashment = frappe.get_doc( - dict( - doctype="Leave Encashment", - leave_period=allocation.leave_period, - employee=allocation.employee, - leave_type=allocation.leave_type, - encashment_date=allocation.to_date, - ) - ) - leave_encashment.insert(ignore_permissions=True) diff --git a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py deleted file mode 100644 index 83eb969feb..0000000000 --- a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py +++ /dev/null @@ -1,124 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_months, today - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.leave_period.test_leave_period import create_leave_period -from erpnext.hr.doctype.leave_policy.test_leave_policy import create_leave_policy -from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import ( - create_assignment_for_multiple_employees, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - -test_dependencies = ["Leave Type"] - - -class TestLeaveEncashment(unittest.TestCase): - def setUp(self): - frappe.db.sql("""delete from `tabLeave Period`""") - frappe.db.sql("""delete from `tabLeave Policy Assignment`""") - frappe.db.sql("""delete from `tabLeave Allocation`""") - frappe.db.sql("""delete from `tabLeave Ledger Entry`""") - frappe.db.sql("""delete from `tabAdditional Salary`""") - - # create the leave policy - leave_policy = create_leave_policy( - leave_type="_Test Leave Type Encashment", annual_allocation=10 - ) - leave_policy.submit() - - # create employee, salary structure and assignment - self.employee = make_employee("test_employee_encashment@example.com") - - self.leave_period = create_leave_period(add_months(today(), -3), add_months(today(), 3)) - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": self.leave_period.name, - } - - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee], frappe._dict(data) - ) - - salary_structure = make_salary_structure( - "Salary Structure for Encashment", - "Monthly", - self.employee, - other_details={"leave_encashment_amount_per_day": 50}, - ) - - def tearDown(self): - for dt in [ - "Leave Period", - "Leave Allocation", - "Leave Ledger Entry", - "Additional Salary", - "Leave Encashment", - "Salary Structure", - "Leave Policy", - ]: - frappe.db.sql("delete from `tab%s`" % dt) - - def test_leave_balance_value_and_amount(self): - frappe.db.sql("""delete from `tabLeave Encashment`""") - leave_encashment = frappe.get_doc( - dict( - doctype="Leave Encashment", - employee=self.employee, - leave_type="_Test Leave Type Encashment", - leave_period=self.leave_period.name, - payroll_date=today(), - currency="INR", - ) - ).insert() - - self.assertEqual(leave_encashment.leave_balance, 10) - self.assertEqual(leave_encashment.encashable_days, 5) - self.assertEqual(leave_encashment.encashment_amount, 250) - - leave_encashment.submit() - - # assert links - add_sal = frappe.get_all("Additional Salary", filters={"ref_docname": leave_encashment.name})[0] - self.assertTrue(add_sal) - - def test_creation_of_leave_ledger_entry_on_submit(self): - frappe.db.sql("""delete from `tabLeave Encashment`""") - leave_encashment = frappe.get_doc( - dict( - doctype="Leave Encashment", - employee=self.employee, - leave_type="_Test Leave Type Encashment", - leave_period=self.leave_period.name, - payroll_date=today(), - currency="INR", - ) - ).insert() - - leave_encashment.submit() - - leave_ledger_entry = frappe.get_all( - "Leave Ledger Entry", fields="*", filters=dict(transaction_name=leave_encashment.name) - ) - - self.assertEqual(len(leave_ledger_entry), 1) - self.assertEqual(leave_ledger_entry[0].employee, leave_encashment.employee) - self.assertEqual(leave_ledger_entry[0].leave_type, leave_encashment.leave_type) - self.assertEqual(leave_ledger_entry[0].leaves, leave_encashment.encashable_days * -1) - - # check if leave ledger entry is deleted on cancellation - - frappe.db.sql( - "Delete from `tabAdditional Salary` WHERE ref_docname = %s", (leave_encashment.name) - ) - - leave_encashment.cancel() - self.assertFalse( - frappe.db.exists("Leave Ledger Entry", {"transaction_name": leave_encashment.name}) - ) diff --git a/erpnext/hr/doctype/leave_ledger_entry/__init__.py b/erpnext/hr/doctype/leave_ledger_entry/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js deleted file mode 100644 index c68d518f67..0000000000 --- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Ledger Entry', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json deleted file mode 100644 index d74760a5cf..0000000000 --- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "actions": [], - "creation": "2019-05-09 15:47:39.760406", - "doctype": "DocType", - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "leave_type", - "transaction_type", - "transaction_name", - "company", - "leaves", - "column_break_7", - "from_date", - "to_date", - "holiday_list", - "is_carry_forward", - "is_expired", - "is_lwp", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name" - }, - { - "fieldname": "leave_type", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Leave Type", - "options": "Leave Type" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Leave Ledger Entry", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "transaction_type", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Transaction Type", - "options": "DocType" - }, - { - "fieldname": "transaction_name", - "fieldtype": "Dynamic Link", - "label": "Transaction Name", - "options": "transaction_type" - }, - { - "fieldname": "leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Leaves" - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date" - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date" - }, - { - "default": "0", - "fieldname": "is_carry_forward", - "fieldtype": "Check", - "label": "Is Carry Forward" - }, - { - "default": "0", - "fieldname": "is_expired", - "fieldtype": "Check", - "label": "Is Expired" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "is_lwp", - "fieldtype": "Check", - "label": "Is Leave Without Pay" - }, - { - "fieldname": "holiday_list", - "fieldtype": "Link", - "label": "Holiday List", - "options": "Holiday List" - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "reqd": 1 - } - ], - "in_create": 1, - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2021-01-04 18:47:45.146652", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Ledger Entry", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "All", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "ASC", - "title_field": "employee" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py deleted file mode 100644 index fed9f770df..0000000000 --- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry.py +++ /dev/null @@ -1,227 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import DATE_FORMAT, flt, getdate, today - - -class LeaveLedgerEntry(Document): - def validate(self): - if getdate(self.from_date) > getdate(self.to_date): - frappe.throw(_("To date needs to be before from date")) - - def on_cancel(self): - # allow cancellation of expiry leaves - if self.is_expired: - frappe.db.set_value("Leave Allocation", self.transaction_name, "expired", 0) - else: - frappe.throw(_("Only expired allocation can be cancelled")) - - -def validate_leave_allocation_against_leave_application(ledger): - """Checks that leave allocation has no leave application against it""" - leave_application_records = frappe.db.sql_list( - """ - SELECT transaction_name - FROM `tabLeave Ledger Entry` - WHERE - employee=%s - AND leave_type=%s - AND transaction_type='Leave Application' - AND from_date>=%s - AND to_date<=%s - """, - (ledger.employee, ledger.leave_type, ledger.from_date, ledger.to_date), - ) - - if leave_application_records: - frappe.throw( - _("Leave allocation {0} is linked with the Leave Application {1}").format( - ledger.transaction_name, ", ".join(leave_application_records) - ) - ) - - -def create_leave_ledger_entry(ref_doc, args, submit=True): - ledger = frappe._dict( - doctype="Leave Ledger Entry", - employee=ref_doc.employee, - employee_name=ref_doc.employee_name, - leave_type=ref_doc.leave_type, - transaction_type=ref_doc.doctype, - transaction_name=ref_doc.name, - is_carry_forward=0, - is_expired=0, - is_lwp=0, - ) - ledger.update(args) - - if submit: - doc = frappe.get_doc(ledger) - doc.flags.ignore_permissions = 1 - doc.submit() - else: - delete_ledger_entry(ledger) - - -def delete_ledger_entry(ledger): - """Delete ledger entry on cancel of leave application/allocation/encashment""" - if ledger.transaction_type == "Leave Allocation": - validate_leave_allocation_against_leave_application(ledger) - - expired_entry = get_previous_expiry_ledger_entry(ledger) - frappe.db.sql( - """DELETE - FROM `tabLeave Ledger Entry` - WHERE - `transaction_name`=%s - OR `name`=%s""", - (ledger.transaction_name, expired_entry), - ) - - -def get_previous_expiry_ledger_entry(ledger): - """Returns the expiry ledger entry having same creation date as the ledger entry to be cancelled""" - creation_date = frappe.db.get_value( - "Leave Ledger Entry", - filters={ - "transaction_name": ledger.transaction_name, - "is_expired": 0, - "transaction_type": "Leave Allocation", - }, - fieldname=["creation"], - ) - - creation_date = creation_date.strftime(DATE_FORMAT) if creation_date else "" - - return frappe.db.get_value( - "Leave Ledger Entry", - filters={ - "creation": ("like", creation_date + "%"), - "employee": ledger.employee, - "leave_type": ledger.leave_type, - "is_expired": 1, - "docstatus": 1, - "is_carry_forward": 0, - }, - fieldname=["name"], - ) - - -def process_expired_allocation(): - """Check if a carry forwarded allocation has expired and create a expiry ledger entry - Case 1: carry forwarded expiry period is set for the leave type, - create a separate leave expiry entry against each entry of carry forwarded and non carry forwarded leaves - Case 2: leave type has no specific expiry period for carry forwarded leaves - and there is no carry forwarded leave allocation, create a single expiry against the remaining leaves. - """ - - # fetch leave type records that has carry forwarded leaves expiry - leave_type_records = frappe.db.get_values( - "Leave Type", filters={"expire_carry_forwarded_leaves_after_days": (">", 0)}, fieldname=["name"] - ) - - leave_type = [record[0] for record in leave_type_records] or [""] - - # fetch non expired leave ledger entry of transaction_type allocation - expire_allocation = frappe.db.sql( - """ - SELECT - leaves, to_date, employee, leave_type, - is_carry_forward, transaction_name as name, transaction_type - FROM `tabLeave Ledger Entry` l - WHERE (NOT EXISTS - (SELECT name - FROM `tabLeave Ledger Entry` - WHERE - transaction_name = l.transaction_name - AND transaction_type = 'Leave Allocation' - AND name<>l.name - AND docstatus = 1 - AND ( - is_carry_forward=l.is_carry_forward - OR (is_carry_forward = 0 AND leave_type not in %s) - ))) - AND transaction_type = 'Leave Allocation' - AND to_date < %s""", - (leave_type, today()), - as_dict=1, - ) - - if expire_allocation: - create_expiry_ledger_entry(expire_allocation) - - -def create_expiry_ledger_entry(allocations): - """Create ledger entry for expired allocation""" - for allocation in allocations: - if allocation.is_carry_forward: - expire_carried_forward_allocation(allocation) - else: - expire_allocation(allocation) - - -def get_remaining_leaves(allocation): - """Returns remaining leaves from the given allocation""" - return frappe.db.get_value( - "Leave Ledger Entry", - filters={ - "employee": allocation.employee, - "leave_type": allocation.leave_type, - "to_date": ("<=", allocation.to_date), - "docstatus": 1, - }, - fieldname=["SUM(leaves)"], - ) - - -@frappe.whitelist() -def expire_allocation(allocation, expiry_date=None): - """expires non-carry forwarded allocation""" - leaves = get_remaining_leaves(allocation) - expiry_date = expiry_date if expiry_date else allocation.to_date - - # allows expired leaves entry to be created/reverted - if leaves: - args = dict( - leaves=flt(leaves) * -1, - transaction_name=allocation.name, - transaction_type="Leave Allocation", - from_date=expiry_date, - to_date=expiry_date, - is_carry_forward=0, - is_expired=1, - ) - create_leave_ledger_entry(allocation, args) - - frappe.db.set_value("Leave Allocation", allocation.name, "expired", 1) - - -def expire_carried_forward_allocation(allocation): - """Expires remaining leaves in the on carried forward allocation""" - from erpnext.hr.doctype.leave_application.leave_application import get_leaves_for_period - - leaves_taken = get_leaves_for_period( - allocation.employee, - allocation.leave_type, - allocation.from_date, - allocation.to_date, - skip_expired_leaves=False, - ) - leaves = flt(allocation.leaves) + flt(leaves_taken) - - # allow expired leaves entry to be created - if leaves > 0: - args = frappe._dict( - transaction_name=allocation.name, - transaction_type="Leave Allocation", - leaves=allocation.leaves * -1, - is_carry_forward=allocation.is_carry_forward, - is_expired=1, - from_date=allocation.to_date, - to_date=allocation.to_date, - ) - create_leave_ledger_entry(allocation, args) diff --git a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js b/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js deleted file mode 100644 index 889325bf2b..0000000000 --- a/erpnext/hr/doctype/leave_ledger_entry/leave_ledger_entry_list.js +++ /dev/null @@ -1,13 +0,0 @@ -frappe.listview_settings['Leave Ledger Entry'] = { - onload: function(listview) { - if(listview.page.fields_dict.transaction_type) { - listview.page.fields_dict.transaction_type.get_query = function() { - return { - "filters": { - "name": ["in", ["Leave Allocation", "Leave Application", "Leave Encashment"]], - } - }; - }; - } - } -}; diff --git a/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py b/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py deleted file mode 100644 index 3121109183..0000000000 --- a/erpnext/hr/doctype/leave_ledger_entry/test_leave_ledger_entry.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestLeaveLedgerEntry(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/leave_period/__init__.py b/erpnext/hr/doctype/leave_period/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_period/leave_period.js b/erpnext/hr/doctype/leave_period/leave_period.js deleted file mode 100644 index 0e88bc1671..0000000000 --- a/erpnext/hr/doctype/leave_period/leave_period.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Period', { - from_date: (frm)=>{ - if (frm.doc.from_date && !frm.doc.to_date) { - var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12); - frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1)); - } - }, - onload: (frm) => { - frm.set_query("department", function() { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - }, -}); diff --git a/erpnext/hr/doctype/leave_period/leave_period.json b/erpnext/hr/doctype/leave_period/leave_period.json deleted file mode 100644 index 84ce1147e9..0000000000 --- a/erpnext/hr/doctype/leave_period/leave_period.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-LPR-.YYYY.-.#####", - "creation": "2018-04-13 15:20:52.864288", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "from_date", - "to_date", - "is_active", - "column_break_3", - "company", - "optional_holiday_list" - ], - "fields": [ - { - "fieldname": "from_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "To Date", - "reqd": 1 - }, - { - "default": "0", - "fieldname": "is_active", - "fieldtype": "Check", - "label": "Is Active" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "optional_holiday_list", - "fieldtype": "Link", - "label": "Holiday List for Optional Leave", - "options": "Holiday List" - } - ], - "links": [], - "modified": "2022-01-13 13:28:12.951025", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Period", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "search_fields": "from_date, to_date, company", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_period/leave_period.py b/erpnext/hr/doctype/leave_period/leave_period.py deleted file mode 100644 index 6e62bb5876..0000000000 --- a/erpnext/hr/doctype/leave_period/leave_period.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate - -from erpnext.hr.utils import validate_overlap - - -class LeavePeriod(Document): - def validate(self): - self.validate_dates() - validate_overlap(self, self.from_date, self.to_date, self.company) - - def validate_dates(self): - if getdate(self.from_date) >= getdate(self.to_date): - frappe.throw(_("To date can not be equal or less than from date")) diff --git a/erpnext/hr/doctype/leave_period/leave_period_dashboard.py b/erpnext/hr/doctype/leave_period/leave_period_dashboard.py deleted file mode 100644 index 854f988f35..0000000000 --- a/erpnext/hr/doctype/leave_period/leave_period_dashboard.py +++ /dev/null @@ -1,8 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "leave_period", - "transactions": [{"label": _("Transactions"), "items": ["Leave Allocation"]}], - } diff --git a/erpnext/hr/doctype/leave_period/test_leave_period.py b/erpnext/hr/doctype/leave_period/test_leave_period.py deleted file mode 100644 index 09235741b6..0000000000 --- a/erpnext/hr/doctype/leave_period/test_leave_period.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - -import erpnext - -test_dependencies = ["Employee", "Leave Type", "Leave Policy"] - - -class TestLeavePeriod(unittest.TestCase): - pass - - -def create_leave_period(from_date, to_date, company=None): - leave_period = frappe.db.get_value( - "Leave Period", - dict( - company=company or erpnext.get_default_company(), - from_date=from_date, - to_date=to_date, - is_active=1, - ), - "name", - ) - if leave_period: - return frappe.get_doc("Leave Period", leave_period) - - leave_period = frappe.get_doc( - { - "doctype": "Leave Period", - "company": company or erpnext.get_default_company(), - "from_date": from_date, - "to_date": to_date, - "is_active": 1, - } - ).insert() - return leave_period diff --git a/erpnext/hr/doctype/leave_policy/__init__.py b/erpnext/hr/doctype/leave_policy/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.js b/erpnext/hr/doctype/leave_policy/leave_policy.js deleted file mode 100644 index fdf8e0cdbb..0000000000 --- a/erpnext/hr/doctype/leave_policy/leave_policy.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Policy', { -}); - -frappe.ui.form.on('Leave Policy Detail',{ - leave_type: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(child.leave_type){ - frappe.call({ - method: "frappe.client.get_value", - args: { - doctype: "Leave Type", - fieldname: "max_leaves_allowed", - filters: { name: child.leave_type } - }, - callback: function(r) { - if (r.message) { - child.annual_allocation = r.message.max_leaves_allowed; - refresh_field("leave_policy_details"); - } - } - }); - } - else{ - child.annual_allocation = ""; - refresh_field("leave_policy_details"); - } - } -}); diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.json b/erpnext/hr/doctype/leave_policy/leave_policy.json deleted file mode 100644 index 6ac8f20ea2..0000000000 --- a/erpnext/hr/doctype/leave_policy/leave_policy.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "actions": [], - "autoname": "HR-LPOL-.YYYY.-.#####", - "creation": "2018-04-13 16:06:19.507624", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "title", - "leave_allocations_section", - "leave_policy_details", - "amended_from" - ], - "fields": [ - { - "allow_in_quick_entry": 1, - "fieldname": "leave_allocations_section", - "fieldtype": "Section Break", - "label": "Leave Allocations" - }, - { - "fieldname": "leave_policy_details", - "fieldtype": "Table", - "label": "Leave Policy Details", - "options": "Leave Policy Detail", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Leave Policy", - "print_hide": 1, - "read_only": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "title", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Title", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 13:07:40.556500", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Policy", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "title", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "title", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_policy/leave_policy.py b/erpnext/hr/doctype/leave_policy/leave_policy.py deleted file mode 100644 index 33c949354c..0000000000 --- a/erpnext/hr/doctype/leave_policy/leave_policy.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class LeavePolicy(Document): - def validate(self): - if self.leave_policy_details: - for lp_detail in self.leave_policy_details: - max_leaves_allowed = frappe.db.get_value( - "Leave Type", lp_detail.leave_type, "max_leaves_allowed" - ) - if max_leaves_allowed > 0 and lp_detail.annual_allocation > max_leaves_allowed: - frappe.throw( - _("Maximum leave allowed in the leave type {0} is {1}").format( - lp_detail.leave_type, max_leaves_allowed - ) - ) diff --git a/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py b/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py deleted file mode 100644 index 57ea93ee46..0000000000 --- a/erpnext/hr/doctype/leave_policy/leave_policy_dashboard.py +++ /dev/null @@ -1,10 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "leave_policy", - "transactions": [ - {"label": _("Leaves"), "items": ["Leave Policy Assignment", "Leave Allocation"]}, - ], - } diff --git a/erpnext/hr/doctype/leave_policy/test_leave_policy.py b/erpnext/hr/doctype/leave_policy/test_leave_policy.py deleted file mode 100644 index 33d5508705..0000000000 --- a/erpnext/hr/doctype/leave_policy/test_leave_policy.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - - -class TestLeavePolicy(unittest.TestCase): - def test_max_leave_allowed(self): - random_leave_type = frappe.get_all("Leave Type", fields=["name", "max_leaves_allowed"]) - if random_leave_type: - random_leave_type = random_leave_type[0] - leave_type = frappe.get_doc("Leave Type", random_leave_type.name) - leave_type.max_leaves_allowed = 2 - leave_type.save() - - leave_policy = create_leave_policy( - leave_type=leave_type.name, annual_allocation=leave_type.max_leaves_allowed + 1 - ) - - self.assertRaises(frappe.ValidationError, leave_policy.insert) - - -def create_leave_policy(**args): - """Returns an object of leave policy""" - args = frappe._dict(args) - return frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [ - { - "leave_type": args.leave_type or "_Test Leave Type", - "annual_allocation": args.annual_allocation or 10, - } - ], - } - ) diff --git a/erpnext/hr/doctype/leave_policy_assignment/__init__.py b/erpnext/hr/doctype/leave_policy_assignment/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js deleted file mode 100644 index 0aaf4cf616..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Policy Assignment', { - onload: function(frm) { - frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"]; - - frm.set_query('leave_policy', function() { - return { - filters: { - "docstatus": 1 - } - }; - }); - frm.set_query('leave_period', function() { - return { - filters: { - "is_active": 1, - "company": frm.doc.company - } - }; - }); - }, - - assignment_based_on: function(frm) { - if (frm.doc.assignment_based_on) { - frm.events.set_effective_date(frm); - } else { - frm.set_value("effective_from", ''); - frm.set_value("effective_to", ''); - } - }, - - leave_period: function(frm) { - if (frm.doc.leave_period) { - frm.events.set_effective_date(frm); - } - }, - - set_effective_date: function(frm) { - if (frm.doc.assignment_based_on == "Leave Period" && frm.doc.leave_period) { - frappe.model.with_doc("Leave Period", frm.doc.leave_period, function () { - let from_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "from_date"); - let to_date = frappe.model.get_value("Leave Period", frm.doc.leave_period, "to_date"); - frm.set_value("effective_from", from_date); - frm.set_value("effective_to", to_date); - - }); - } else if (frm.doc.assignment_based_on == "Joining Date" && frm.doc.employee) { - frappe.model.with_doc("Employee", frm.doc.employee, function () { - let from_date = frappe.model.get_value("Employee", frm.doc.employee, "date_of_joining"); - frm.set_value("effective_from", from_date); - frm.set_value("effective_to", frappe.datetime.add_months(frm.doc.effective_from, 12)); - }); - } - frm.refresh(); - } - -}); diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json deleted file mode 100644 index 27f0540b24..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "actions": [], - "autoname": "HR-LPOL-ASSGN-.#####", - "creation": "2020-08-19 13:02:43.343666", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "company", - "leave_policy", - "carry_forward", - "column_break_5", - "assignment_based_on", - "leave_period", - "effective_from", - "effective_to", - "leaves_allocated", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee name", - "read_only": 1 - }, - { - "fieldname": "leave_policy", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Leave Policy", - "options": "Leave Policy", - "reqd": 1 - }, - { - "fieldname": "assignment_based_on", - "fieldtype": "Select", - "label": "Assignment based on", - "options": "\nLeave Period\nJoining Date" - }, - { - "depends_on": "eval:doc.assignment_based_on == \"Leave Period\"", - "fieldname": "leave_period", - "fieldtype": "Link", - "label": "Leave Period", - "mandatory_depends_on": "eval:doc.assignment_based_on == \"Leave Period\"", - "options": "Leave Period" - }, - { - "fieldname": "effective_from", - "fieldtype": "Date", - "label": "Effective From", - "read_only_depends_on": "eval:doc.assignment_based_on", - "reqd": 1 - }, - { - "fieldname": "effective_to", - "fieldtype": "Date", - "label": "Effective To", - "read_only_depends_on": "eval:doc.assignment_based_on == \"Leave Period\"", - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Company", - "options": "Company", - "read_only": 1 - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Leave Policy Assignment", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fieldname": "carry_forward", - "fieldtype": "Check", - "label": "Add unused leaves from previous allocations" - }, - { - "default": "0", - "fieldname": "leaves_allocated", - "fieldtype": "Check", - "hidden": 1, - "label": "Leaves Allocated", - "no_copy": 1, - "print_hide": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-13 13:37:11.218882", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Policy Assignment", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py deleted file mode 100644 index 2ed86f301c..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment.py +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json -from math import ceil - -import frappe -from frappe import _, bold -from frappe.model.document import Document -from frappe.utils import date_diff, flt, formatdate, get_last_day, get_link_to_form, getdate - - -class LeavePolicyAssignment(Document): - def validate(self): - self.set_dates() - self.validate_policy_assignment_overlap() - self.warn_about_carry_forwarding() - - def on_submit(self): - self.grant_leave_alloc_for_employee() - - def set_dates(self): - if self.assignment_based_on == "Leave Period": - self.effective_from, self.effective_to = frappe.db.get_value( - "Leave Period", self.leave_period, ["from_date", "to_date"] - ) - elif self.assignment_based_on == "Joining Date": - self.effective_from = frappe.db.get_value("Employee", self.employee, "date_of_joining") - - def validate_policy_assignment_overlap(self): - leave_policy_assignments = frappe.get_all( - "Leave Policy Assignment", - filters={ - "employee": self.employee, - "name": ("!=", self.name), - "docstatus": 1, - "effective_to": (">=", self.effective_from), - "effective_from": ("<=", self.effective_to), - }, - ) - - if len(leave_policy_assignments): - frappe.throw( - _("Leave Policy: {0} already assigned for Employee {1} for period {2} to {3}").format( - bold(self.leave_policy), - bold(self.employee), - bold(formatdate(self.effective_from)), - bold(formatdate(self.effective_to)), - ) - ) - - def warn_about_carry_forwarding(self): - if not self.carry_forward: - return - - leave_types = get_leave_type_details() - leave_policy = frappe.get_doc("Leave Policy", self.leave_policy) - - for policy in leave_policy.leave_policy_details: - leave_type = leave_types.get(policy.leave_type) - if not leave_type.is_carry_forward: - msg = _( - "Leaves for the Leave Type {0} won't be carry-forwarded since carry-forwarding is disabled." - ).format(frappe.bold(get_link_to_form("Leave Type", leave_type.name))) - frappe.msgprint(msg, indicator="orange", alert=True) - - @frappe.whitelist() - def grant_leave_alloc_for_employee(self): - if self.leaves_allocated: - frappe.throw(_("Leave already have been assigned for this Leave Policy Assignment")) - else: - leave_allocations = {} - leave_type_details = get_leave_type_details() - - leave_policy = frappe.get_doc("Leave Policy", self.leave_policy) - date_of_joining = frappe.db.get_value("Employee", self.employee, "date_of_joining") - - for leave_policy_detail in leave_policy.leave_policy_details: - if not leave_type_details.get(leave_policy_detail.leave_type).is_lwp: - leave_allocation, new_leaves_allocated = self.create_leave_allocation( - leave_policy_detail.leave_type, - leave_policy_detail.annual_allocation, - leave_type_details, - date_of_joining, - ) - leave_allocations[leave_policy_detail.leave_type] = { - "name": leave_allocation, - "leaves": new_leaves_allocated, - } - self.db_set("leaves_allocated", 1) - return leave_allocations - - def create_leave_allocation( - self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining - ): - # Creates leave allocation for the given employee in the provided leave period - carry_forward = self.carry_forward - if self.carry_forward and not leave_type_details.get(leave_type).is_carry_forward: - carry_forward = 0 - - new_leaves_allocated = self.get_new_leaves( - leave_type, new_leaves_allocated, leave_type_details, date_of_joining - ) - - allocation = frappe.get_doc( - dict( - doctype="Leave Allocation", - employee=self.employee, - leave_type=leave_type, - from_date=self.effective_from, - to_date=self.effective_to, - new_leaves_allocated=new_leaves_allocated, - leave_period=self.leave_period if self.assignment_based_on == "Leave Policy" else "", - leave_policy_assignment=self.name, - leave_policy=self.leave_policy, - carry_forward=carry_forward, - ) - ) - allocation.save(ignore_permissions=True) - allocation.submit() - return allocation.name, new_leaves_allocated - - def get_new_leaves(self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining): - from frappe.model.meta import get_field_precision - - precision = get_field_precision( - frappe.get_meta("Leave Allocation").get_field("new_leaves_allocated") - ) - - # Earned Leaves and Compensatory Leaves are allocated by scheduler, initially allocate 0 - if leave_type_details.get(leave_type).is_compensatory == 1: - new_leaves_allocated = 0 - - elif leave_type_details.get(leave_type).is_earned_leave == 1: - if not self.assignment_based_on: - new_leaves_allocated = 0 - else: - # get leaves for past months if assignment is based on Leave Period / Joining Date - new_leaves_allocated = self.get_leaves_for_passed_months( - leave_type, new_leaves_allocated, leave_type_details, date_of_joining - ) - - # Calculate leaves at pro-rata basis for employees joining after the beginning of the given leave period - elif getdate(date_of_joining) > getdate(self.effective_from): - remaining_period = (date_diff(self.effective_to, date_of_joining) + 1) / ( - date_diff(self.effective_to, self.effective_from) + 1 - ) - new_leaves_allocated = ceil(new_leaves_allocated * remaining_period) - - return flt(new_leaves_allocated, precision) - - def get_leaves_for_passed_months( - self, leave_type, new_leaves_allocated, leave_type_details, date_of_joining - ): - from erpnext.hr.utils import get_monthly_earned_leave - - current_date = frappe.flags.current_date or getdate() - if current_date > getdate(self.effective_to): - current_date = getdate(self.effective_to) - - from_date = getdate(self.effective_from) - if getdate(date_of_joining) > from_date: - from_date = getdate(date_of_joining) - - months_passed = 0 - based_on_doj = leave_type_details.get(leave_type).based_on_date_of_joining - - if current_date.year == from_date.year and current_date.month >= from_date.month: - months_passed = current_date.month - from_date.month - months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj) - - elif current_date.year > from_date.year: - months_passed = (12 - from_date.month) + current_date.month - months_passed = add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj) - - if months_passed > 0: - monthly_earned_leave = get_monthly_earned_leave( - new_leaves_allocated, - leave_type_details.get(leave_type).earned_leave_frequency, - leave_type_details.get(leave_type).rounding, - ) - new_leaves_allocated = monthly_earned_leave * months_passed - else: - new_leaves_allocated = 0 - - return new_leaves_allocated - - -def add_current_month_if_applicable(months_passed, date_of_joining, based_on_doj): - date = getdate(frappe.flags.current_date) or getdate() - - if based_on_doj: - # if leave type allocation is based on DOJ, and the date of assignment creation is same as DOJ, - # then the month should be considered - if date.day == date_of_joining.day: - months_passed += 1 - else: - last_day_of_month = get_last_day(date) - # if its the last day of the month, then that month should be considered - if last_day_of_month == date: - months_passed += 1 - - return months_passed - - -@frappe.whitelist() -def create_assignment_for_multiple_employees(employees, data): - - if isinstance(employees, str): - employees = json.loads(employees) - - if isinstance(data, str): - data = frappe._dict(json.loads(data)) - - docs_name = [] - for employee in employees: - assignment = frappe.new_doc("Leave Policy Assignment") - assignment.employee = employee - assignment.assignment_based_on = data.assignment_based_on or None - assignment.leave_policy = data.leave_policy - assignment.effective_from = getdate(data.effective_from) or None - assignment.effective_to = getdate(data.effective_to) or None - assignment.leave_period = data.leave_period or None - assignment.carry_forward = data.carry_forward - assignment.save() - try: - assignment.submit() - except frappe.exceptions.ValidationError: - continue - - frappe.db.commit() - - docs_name.append(assignment.name) - - return docs_name - - -def get_leave_type_details(): - leave_type_details = frappe._dict() - leave_types = frappe.get_all( - "Leave Type", - fields=[ - "name", - "is_lwp", - "is_earned_leave", - "is_compensatory", - "based_on_date_of_joining", - "is_carry_forward", - "expire_carry_forwarded_leaves_after_days", - "earned_leave_frequency", - "rounding", - ], - ) - for d in leave_types: - leave_type_details.setdefault(d.name, d) - return leave_type_details diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py deleted file mode 100644 index 13b39c7ee6..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_dashboard.py +++ /dev/null @@ -1,10 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "leave_policy_assignment", - "transactions": [ - {"label": _("Leaves"), "items": ["Leave Allocation"]}, - ], - } diff --git a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js b/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js deleted file mode 100644 index 6b75817cba..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/leave_policy_assignment_list.js +++ /dev/null @@ -1,117 +0,0 @@ -frappe.listview_settings['Leave Policy Assignment'] = { - onload: function (list_view) { - let me = this; - list_view.page.add_inner_button(__("Bulk Leave Policy Assignment"), function () { - me.dialog = new frappe.ui.form.MultiSelectDialog({ - doctype: "Employee", - target: cur_list, - setters: { - employee_name: '', - company: '', - department: '', - }, - data_fields: [{ - fieldname: 'leave_policy', - fieldtype: 'Link', - options: 'Leave Policy', - label: __('Leave Policy'), - reqd: 1 - }, - { - fieldname: 'assignment_based_on', - fieldtype: 'Select', - options: ["", "Leave Period"], - label: __('Assignment Based On'), - onchange: () => { - if (cur_dialog.fields_dict.assignment_based_on.value === "Leave Period") { - cur_dialog.set_df_property("effective_from", "read_only", 1); - cur_dialog.set_df_property("leave_period", "reqd", 1); - cur_dialog.set_df_property("effective_to", "read_only", 1); - } else { - cur_dialog.set_df_property("effective_from", "read_only", 0); - cur_dialog.set_df_property("leave_period", "reqd", 0); - cur_dialog.set_df_property("effective_to", "read_only", 0); - cur_dialog.set_value("effective_from", ""); - cur_dialog.set_value("effective_to", ""); - } - } - }, - { - fieldname: "leave_period", - fieldtype: 'Link', - options: "Leave Period", - label: __('Leave Period'), - depends_on: doc => { - return doc.assignment_based_on == 'Leave Period'; - }, - onchange: () => { - if (cur_dialog.fields_dict.leave_period.value) { - me.set_effective_date(); - } - }, - get_query() { - let filters = {"is_active": 1}; - if (cur_dialog.fields_dict.company.value) - filters["company"] = cur_dialog.fields_dict.company.value; - - return { - filters: filters - }; - }, - }, - { - fieldtype: "Column Break" - }, - { - fieldname: 'effective_from', - fieldtype: 'Date', - label: __('Effective From'), - reqd: 1 - }, - { - fieldname: 'effective_to', - fieldtype: 'Date', - label: __('Effective To'), - reqd: 1 - }, - { - fieldname: 'carry_forward', - fieldtype: 'Check', - label: __('Add unused leaves from previous allocations') - } - ], - get_query() { - return { - filters: { - status: ['=', 'Active'] - } - }; - }, - add_filters_group: 1, - primary_action_label: "Assign", - action(employees, data) { - frappe.call({ - method: 'erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment.create_assignment_for_multiple_employees', - async: false, - args: { - employees: employees, - data: data - } - }); - cur_dialog.hide(); - } - }); - }); - }, - - set_effective_date: function () { - if (cur_dialog.fields_dict.assignment_based_on.value === "Leave Period" && cur_dialog.fields_dict.leave_period.value) { - frappe.model.with_doc("Leave Period", cur_dialog.fields_dict.leave_period.value, function () { - let from_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "from_date"); - let to_date = frappe.model.get_value("Leave Period", cur_dialog.fields_dict.leave_period.value, "to_date"); - cur_dialog.set_value("effective_from", from_date); - cur_dialog.set_value("effective_to", to_date); - }); - } - } -}; diff --git a/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py b/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py deleted file mode 100644 index 9780828557..0000000000 --- a/erpnext/hr/doctype/leave_policy_assignment/test_leave_policy_assignment.py +++ /dev/null @@ -1,443 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, add_months, get_first_day, get_last_day, getdate - -from erpnext.hr.doctype.leave_application.test_leave_application import ( - get_employee, - get_leave_period, -) -from erpnext.hr.doctype.leave_policy.test_leave_policy import create_leave_policy -from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import ( - create_assignment_for_multiple_employees, -) - -test_dependencies = ["Employee"] - - -class TestLeavePolicyAssignment(unittest.TestCase): - def setUp(self): - for doctype in [ - "Leave Period", - "Leave Application", - "Leave Allocation", - "Leave Policy Assignment", - "Leave Ledger Entry", - ]: - frappe.db.delete(doctype) - - employee = get_employee() - self.original_doj = employee.date_of_joining - self.employee = employee - - def test_grant_leaves(self): - leave_period = get_leave_period() - # allocation = 10 - leave_policy = create_leave_policy() - leave_policy.submit() - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), - 1, - ) - - leave_allocation = frappe.get_list( - "Leave Allocation", - filters={ - "employee": self.employee.name, - "leave_policy": leave_policy.name, - "leave_policy_assignment": leave_policy_assignments[0], - "docstatus": 1, - }, - )[0] - leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation) - - self.assertEqual(leave_alloc_doc.new_leaves_allocated, 10) - self.assertEqual(leave_alloc_doc.leave_type, "_Test Leave Type") - self.assertEqual(getdate(leave_alloc_doc.from_date), getdate(leave_period.from_date)) - self.assertEqual(getdate(leave_alloc_doc.to_date), getdate(leave_period.to_date)) - self.assertEqual(leave_alloc_doc.leave_policy, leave_policy.name) - self.assertEqual(leave_alloc_doc.leave_policy_assignment, leave_policy_assignments[0]) - - def test_allow_to_grant_all_leave_after_cancellation_of_every_leave_allocation(self): - leave_period = get_leave_period() - # create the leave policy with leave type "_Test Leave Type", allocation = 10 - leave_policy = create_leave_policy() - leave_policy.submit() - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - # every leave is allocated no more leave can be granted now - self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), - 1, - ) - leave_allocation = frappe.get_list( - "Leave Allocation", - filters={ - "employee": self.employee.name, - "leave_policy": leave_policy.name, - "leave_policy_assignment": leave_policy_assignments[0], - "docstatus": 1, - }, - )[0] - - leave_alloc_doc = frappe.get_doc("Leave Allocation", leave_allocation) - leave_alloc_doc.cancel() - leave_alloc_doc.delete() - self.assertEqual( - frappe.db.get_value("Leave Policy Assignment", leave_policy_assignments[0], "leaves_allocated"), - 0, - ) - - def test_earned_leave_allocation(self): - leave_period = create_leave_period("Test Earned Leave Period") - leave_type = create_earned_leave_type("Test Earned Leave") - - leave_policy = frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 6}], - } - ).submit() - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - - # second last day of the month - # leaves allocated should be 0 since it is an earned leave and allocation happens via scheduler based on set frequency - frappe.flags.current_date = add_days(get_last_day(getdate()), -1) - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 0) - - def test_earned_leave_alloc_for_passed_months_based_on_leave_period(self): - leave_period, leave_policy = setup_leave_period_and_policy( - get_first_day(add_months(getdate(), -1)) - ) - - # Case 1: assignment created one month after the leave period, should allocate 1 leave - frappe.flags.current_date = get_first_day(getdate()) - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 1) - - def test_earned_leave_alloc_for_passed_months_on_month_end_based_on_leave_period(self): - leave_period, leave_policy = setup_leave_period_and_policy( - get_first_day(add_months(getdate(), -2)) - ) - # Case 2: assignment created on the last day of the leave period's latter month - # should allocate 1 leave for current month even though the month has not ended - # since the daily job might have already executed - frappe.flags.current_date = get_last_day(getdate()) - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - # if the daily job is not completed yet, there is another check present - # to ensure leave is not already allocated to avoid duplication - from erpnext.hr.utils import allocate_earned_leaves - - allocate_earned_leaves() - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - def test_earned_leave_alloc_for_passed_months_with_cf_leaves_based_on_leave_period(self): - from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation - - leave_period, leave_policy = setup_leave_period_and_policy( - get_first_day(add_months(getdate(), -2)) - ) - # initial leave allocation = 5 - leave_allocation = create_leave_allocation( - employee=self.employee.name, - employee_name=self.employee.employee_name, - leave_type="Test Earned Leave", - from_date=add_months(getdate(), -12), - to_date=add_months(getdate(), -3), - new_leaves_allocated=5, - carry_forward=0, - ) - leave_allocation.submit() - - # Case 3: assignment created on the last day of the leave period's latter month with carry forwarding - frappe.flags.current_date = get_last_day(add_months(getdate(), -1)) - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - "carry_forward": 1, - } - # carry forwarded leaves = 5, 3 leaves allocated for passed months - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - details = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - ["total_leaves_allocated", "new_leaves_allocated", "unused_leaves", "name"], - as_dict=True, - ) - self.assertEqual(details.new_leaves_allocated, 2) - self.assertEqual(details.unused_leaves, 5) - self.assertEqual(details.total_leaves_allocated, 7) - - # if the daily job is not completed yet, there is another check present - # to ensure leave is not already allocated to avoid duplication - from erpnext.hr.utils import is_earned_leave_already_allocated - - frappe.flags.current_date = get_last_day(getdate()) - - allocation = frappe.get_doc("Leave Allocation", details.name) - # 1 leave is still pending to be allocated, irrespective of carry forwarded leaves - self.assertFalse( - is_earned_leave_already_allocated( - allocation, leave_policy.leave_policy_details[0].annual_allocation - ) - ) - - def test_earned_leave_alloc_for_passed_months_based_on_joining_date(self): - # tests leave alloc for earned leaves for assignment based on joining date in policy assignment - leave_type = create_earned_leave_type("Test Earned Leave") - leave_policy = frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}], - } - ).submit() - - # joining date set to 2 months back - self.employee.date_of_joining = get_first_day(add_months(getdate(), -2)) - self.employee.save() - - # assignment created on the last day of the current month - frappe.flags.current_date = get_last_day(getdate()) - data = {"assignment_based_on": "Joining Date", "leave_policy": leave_policy.name} - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - effective_from = frappe.db.get_value( - "Leave Policy Assignment", leave_policy_assignments[0], "effective_from" - ) - self.assertEqual(effective_from, self.employee.date_of_joining) - self.assertEqual(leaves_allocated, 3) - - # to ensure leave is not already allocated to avoid duplication - from erpnext.hr.utils import allocate_earned_leaves - - frappe.flags.current_date = get_last_day(getdate()) - allocate_earned_leaves() - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - def test_grant_leaves_on_doj_for_earned_leaves_based_on_leave_period(self): - # tests leave alloc based on leave period for earned leaves with "based on doj" configuration in leave type - leave_period, leave_policy = setup_leave_period_and_policy( - get_first_day(add_months(getdate(), -2)), based_on_doj=True - ) - - # joining date set to 2 months back - self.employee.date_of_joining = get_first_day(add_months(getdate(), -2)) - self.employee.save() - - # assignment created on the same day of the current month, should allocate leaves including the current month - frappe.flags.current_date = get_first_day(getdate()) - - data = { - "assignment_based_on": "Leave Period", - "leave_policy": leave_policy.name, - "leave_period": leave_period.name, - } - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - # if the daily job is not completed yet, there is another check present - # to ensure leave is not already allocated to avoid duplication - from erpnext.hr.utils import allocate_earned_leaves - - frappe.flags.current_date = get_first_day(getdate()) - allocate_earned_leaves() - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - def test_grant_leaves_on_doj_for_earned_leaves_based_on_joining_date(self): - # tests leave alloc based on joining date for earned leaves with "based on doj" configuration in leave type - leave_type = create_earned_leave_type("Test Earned Leave", based_on_doj=True) - leave_policy = frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}], - } - ).submit() - - # joining date set to 2 months back - # leave should be allocated for current month too since this day is same as the joining day - self.employee.date_of_joining = get_first_day(add_months(getdate(), -2)) - self.employee.save() - - # assignment created on the first day of the current month - frappe.flags.current_date = get_first_day(getdate()) - data = {"assignment_based_on": "Joining Date", "leave_policy": leave_policy.name} - leave_policy_assignments = create_assignment_for_multiple_employees( - [self.employee.name], frappe._dict(data) - ) - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - effective_from = frappe.db.get_value( - "Leave Policy Assignment", leave_policy_assignments[0], "effective_from" - ) - self.assertEqual(effective_from, self.employee.date_of_joining) - self.assertEqual(leaves_allocated, 3) - - # to ensure leave is not already allocated to avoid duplication - from erpnext.hr.utils import allocate_earned_leaves - - frappe.flags.current_date = get_first_day(getdate()) - allocate_earned_leaves() - - leaves_allocated = frappe.db.get_value( - "Leave Allocation", - {"leave_policy_assignment": leave_policy_assignments[0]}, - "total_leaves_allocated", - ) - self.assertEqual(leaves_allocated, 3) - - def tearDown(self): - frappe.db.rollback() - frappe.db.set_value("Employee", self.employee.name, "date_of_joining", self.original_doj) - frappe.flags.current_date = None - - -def create_earned_leave_type(leave_type, based_on_doj=False): - frappe.delete_doc_if_exists("Leave Type", leave_type, force=1) - - return frappe.get_doc( - dict( - leave_type_name=leave_type, - doctype="Leave Type", - is_earned_leave=1, - earned_leave_frequency="Monthly", - rounding=0.5, - is_carry_forward=1, - based_on_date_of_joining=based_on_doj, - ) - ).insert() - - -def create_leave_period(name, start_date=None): - frappe.delete_doc_if_exists("Leave Period", name, force=1) - if not start_date: - start_date = get_first_day(getdate()) - - return frappe.get_doc( - dict( - name=name, - doctype="Leave Period", - from_date=start_date, - to_date=add_months(start_date, 12), - company="_Test Company", - is_active=1, - ) - ).insert() - - -def setup_leave_period_and_policy(start_date, based_on_doj=False): - leave_type = create_earned_leave_type("Test Earned Leave", based_on_doj) - leave_period = create_leave_period("Test Earned Leave Period", start_date=start_date) - leave_policy = frappe.get_doc( - { - "doctype": "Leave Policy", - "title": "Test Leave Policy", - "leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 12}], - } - ).insert() - - return leave_period, leave_policy diff --git a/erpnext/hr/doctype/leave_policy_detail/__init__.py b/erpnext/hr/doctype/leave_policy_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js deleted file mode 100644 index ee21f8d3ae..0000000000 --- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Leave Policy Detail', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json deleted file mode 100644 index 572b2f7953..0000000000 --- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2018-04-13 16:01:20.928853", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 3, - "fieldname": "leave_type", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Leave Type", - "length": 0, - "no_copy": 0, - "options": "Leave Type", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 2, - "fieldname": "annual_allocation", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Annual Allocation", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-04-14 13:00:34.511109", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Policy Detail", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py b/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py deleted file mode 100644 index 8916d3d65a..0000000000 --- a/erpnext/hr/doctype/leave_policy_detail/leave_policy_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class LeavePolicyDetail(Document): - pass diff --git a/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py b/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py deleted file mode 100644 index aacf64fd69..0000000000 --- a/erpnext/hr/doctype/leave_policy_detail/test_leave_policy_detail.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestLeavePolicyDetail(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/leave_type/README.md b/erpnext/hr/doctype/leave_type/README.md deleted file mode 100644 index 695e9ddafc..0000000000 --- a/erpnext/hr/doctype/leave_type/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Type of Leave. - -e.g. - -- Casual Leave -- Sick Leave \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_type/__init__.py b/erpnext/hr/doctype/leave_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/leave_type/leave_type.js b/erpnext/hr/doctype/leave_type/leave_type.js deleted file mode 100644 index b930dedaca..0000000000 --- a/erpnext/hr/doctype/leave_type/leave_type.js +++ /dev/null @@ -1,38 +0,0 @@ -frappe.ui.form.on("Leave Type", { - refresh: function(frm) { - } -}); - - -frappe.tour["Leave Type"] = [ - { - fieldname: "max_leaves_allowed", - title: "Maximum Leave Allocation Allowed", - description: __("This field allows you to set the maximum number of leaves that can be allocated annually for this Leave Type while creating the Leave Policy") - }, - { - fieldname: "max_continuous_days_allowed", - title: "Maximum Consecutive Leaves Allowed", - description: __("This field allows you to set the maximum number of consecutive leaves an Employee can apply for.") - }, - { - fieldname: "is_optional_leave", - title: "Is Optional Leave", - description: __("Optional Leaves are holidays that Employees can choose to avail from a list of holidays published by the company.") - }, - { - fieldname: "is_compensatory", - title: "Is Compensatory Leave", - description: __("Leaves you can avail against a holiday you worked on. You can claim Compensatory Off Leave using Compensatory Leave request. Click") + " here " + __('to know more') - }, - { - fieldname: "allow_encashment", - title: "Allow Encashment", - description: __("From here, you can enable encashment for the balance leaves.") - }, - { - fieldname: "is_earned_leave", - title: "Is Earned Leaves", - description: __("Earned Leaves are leaves earned by an Employee after working with the company for a certain amount of time. Enabling this will allocate leaves on pro-rata basis by automatically updating Leave Allocation for leaves of this type at intervals set by 'Earned Leave Frequency.") - } -]; \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_type/leave_type.json b/erpnext/hr/doctype/leave_type/leave_type.json deleted file mode 100644 index 06ca4cdedb..0000000000 --- a/erpnext/hr/doctype/leave_type/leave_type.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:leave_type_name", - "creation": "2013-02-21 09:55:58", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "leave_type_name", - "max_leaves_allowed", - "applicable_after", - "max_continuous_days_allowed", - "column_break_3", - "is_carry_forward", - "is_lwp", - "is_ppl", - "fraction_of_daily_salary_per_leave", - "is_optional_leave", - "allow_negative", - "include_holiday", - "is_compensatory", - "carry_forward_section", - "maximum_carry_forwarded_leaves", - "expire_carry_forwarded_leaves_after_days", - "encashment", - "allow_encashment", - "encashment_threshold_days", - "column_break_17", - "earning_component", - "earned_leave", - "is_earned_leave", - "earned_leave_frequency", - "column_break_22", - "based_on_date_of_joining", - "rounding" - ], - "fields": [ - { - "fieldname": "leave_type_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Leave Type Name", - "oldfieldname": "leave_type_name", - "oldfieldtype": "Data", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "max_leaves_allowed", - "fieldtype": "Int", - "label": "Maximum Leave Allocation Allowed" - }, - { - "fieldname": "applicable_after", - "fieldtype": "Int", - "label": "Applicable After (Working Days)" - }, - { - "fieldname": "max_continuous_days_allowed", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Maximum Consecutive Leaves Allowed", - "oldfieldname": "max_days_allowed", - "oldfieldtype": "Data" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "is_carry_forward", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Is Carry Forward", - "oldfieldname": "is_carry_forward", - "oldfieldtype": "Check" - }, - { - "default": "0", - "depends_on": "eval:doc.is_ppl == 0", - "fieldname": "is_lwp", - "fieldtype": "Check", - "label": "Is Leave Without Pay" - }, - { - "default": "0", - "description": "These leaves are holidays permitted by the company however, availing it is optional for an Employee.", - "fieldname": "is_optional_leave", - "fieldtype": "Check", - "label": "Is Optional Leave" - }, - { - "default": "0", - "fieldname": "allow_negative", - "fieldtype": "Check", - "label": "Allow Negative Balance" - }, - { - "default": "0", - "fieldname": "include_holiday", - "fieldtype": "Check", - "label": "Include holidays within leaves as leaves" - }, - { - "default": "0", - "fieldname": "is_compensatory", - "fieldtype": "Check", - "label": "Is Compensatory" - }, - { - "collapsible": 1, - "depends_on": "eval: doc.is_carry_forward == 1", - "fieldname": "carry_forward_section", - "fieldtype": "Section Break", - "label": "Carry Forward" - }, - { - "description": "Calculated in days", - "fieldname": "expire_carry_forwarded_leaves_after_days", - "fieldtype": "Int", - "label": "Expire Carry Forwarded Leaves (Days)" - }, - { - "collapsible": 1, - "fieldname": "encashment", - "fieldtype": "Section Break", - "label": "Encashment" - }, - { - "default": "0", - "fieldname": "allow_encashment", - "fieldtype": "Check", - "label": "Allow Encashment" - }, - { - "depends_on": "allow_encashment", - "fieldname": "encashment_threshold_days", - "fieldtype": "Int", - "label": "Encashment Threshold Days" - }, - { - "depends_on": "allow_encashment", - "fieldname": "earning_component", - "fieldtype": "Link", - "label": "Earning Component", - "options": "Salary Component" - }, - { - "collapsible": 1, - "fieldname": "earned_leave", - "fieldtype": "Section Break", - "label": "Earned Leave" - }, - { - "default": "0", - "fieldname": "is_earned_leave", - "fieldtype": "Check", - "label": "Is Earned Leave" - }, - { - "depends_on": "is_earned_leave", - "fieldname": "earned_leave_frequency", - "fieldtype": "Select", - "label": "Earned Leave Frequency", - "options": "Monthly\nQuarterly\nHalf-Yearly\nYearly" - }, - { - "default": "0.5", - "depends_on": "is_earned_leave", - "fieldname": "rounding", - "fieldtype": "Select", - "label": "Rounding", - "options": "\n0.25\n0.5\n1.0" - }, - { - "depends_on": "is_carry_forward", - "fieldname": "maximum_carry_forwarded_leaves", - "fieldtype": "Float", - "label": "Maximum Carry Forwarded Leaves" - }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_22", - "fieldtype": "Column Break" - }, - { - "default": "0", - "depends_on": "eval:doc.is_earned_leave", - "description": "If checked, leave will be granted on the day of joining every month.", - "fieldname": "based_on_date_of_joining", - "fieldtype": "Check", - "label": "Based On Date Of Joining" - }, - { - "default": "0", - "depends_on": "eval:doc.is_lwp == 0", - "fieldname": "is_ppl", - "fieldtype": "Check", - "label": "Is Partially Paid Leave" - }, - { - "depends_on": "eval:doc.is_ppl == 1", - "description": "For a day of leave taken, if you still pay (say) 50% of the daily salary, then enter 0.50 in this field.", - "fieldname": "fraction_of_daily_salary_per_leave", - "fieldtype": "Float", - "label": "Fraction of Daily Salary per Leave", - "mandatory_depends_on": "eval:doc.is_ppl == 1" - } - ], - "icon": "fa fa-flag", - "idx": 1, - "links": [], - "modified": "2021-10-02 11:59:40.503359", - "modified_by": "Administrator", - "module": "HR", - "name": "Leave Type", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "read": 1, - "role": "Employee" - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_type/leave_type.py b/erpnext/hr/doctype/leave_type/leave_type.py deleted file mode 100644 index 82b9bd6575..0000000000 --- a/erpnext/hr/doctype/leave_type/leave_type.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import today - - -class LeaveType(Document): - def validate(self): - if self.is_lwp: - leave_allocation = frappe.get_all( - "Leave Allocation", - filters={"leave_type": self.name, "from_date": ("<=", today()), "to_date": (">=", today())}, - fields=["name"], - ) - leave_allocation = [l["name"] for l in leave_allocation] - if leave_allocation: - frappe.throw( - _( - "Leave application is linked with leave allocations {0}. Leave application cannot be set as leave without pay" - ).format(", ".join(leave_allocation)) - ) # nosec - - if self.is_lwp and self.is_ppl: - frappe.throw(_("Leave Type can be either without pay or partial pay")) - - if self.is_ppl and ( - self.fraction_of_daily_salary_per_leave < 0 or self.fraction_of_daily_salary_per_leave > 1 - ): - frappe.throw(_("The fraction of Daily Salary per Leave should be between 0 and 1")) diff --git a/erpnext/hr/doctype/leave_type/leave_type_dashboard.py b/erpnext/hr/doctype/leave_type/leave_type_dashboard.py deleted file mode 100644 index 269a1ecc69..0000000000 --- a/erpnext/hr/doctype/leave_type/leave_type_dashboard.py +++ /dev/null @@ -1,10 +0,0 @@ -def get_data(): - return { - "fieldname": "leave_type", - "transactions": [ - { - "items": ["Leave Allocation", "Leave Application"], - }, - {"items": ["Attendance", "Leave Encashment"]}, - ], - } diff --git a/erpnext/hr/doctype/leave_type/test_leave_type.py b/erpnext/hr/doctype/leave_type/test_leave_type.py deleted file mode 100644 index 69f9e12520..0000000000 --- a/erpnext/hr/doctype/leave_type/test_leave_type.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe - -test_records = frappe.get_test_records("Leave Type") - - -def create_leave_type(**args): - args = frappe._dict(args) - if frappe.db.exists("Leave Type", args.leave_type_name): - return frappe.get_doc("Leave Type", args.leave_type_name) - leave_type = frappe.get_doc( - { - "doctype": "Leave Type", - "leave_type_name": args.leave_type_name or "_Test Leave Type", - "include_holiday": args.include_holidays or 1, - "allow_encashment": args.allow_encashment or 0, - "is_earned_leave": args.is_earned_leave or 0, - "is_lwp": args.is_lwp or 0, - "is_ppl": args.is_ppl or 0, - "is_carry_forward": args.is_carry_forward or 0, - "expire_carry_forwarded_leaves_after_days": args.expire_carry_forwarded_leaves_after_days or 0, - "encashment_threshold_days": args.encashment_threshold_days or 5, - "earning_component": "Leave Encashment", - } - ) - - if leave_type.is_ppl: - leave_type.fraction_of_daily_salary_per_leave = args.fraction_of_daily_salary_per_leave or 0.5 - - return leave_type diff --git a/erpnext/hr/doctype/leave_type/test_records.json b/erpnext/hr/doctype/leave_type/test_records.json deleted file mode 100644 index f1f7d8fd14..0000000000 --- a/erpnext/hr/doctype/leave_type/test_records.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "doctype": "Leave Type", - "leave_type_name": "_Test Leave Type", - "include_holiday": 1 - }, - { - "doctype": "Leave Type", - "is_lwp": 1, - "leave_type_name": "_Test Leave Type LWP", - "include_holiday": 1 - }, - { - "doctype": "Leave Type", - "leave_type_name": "_Test Leave Type Encashment", - "include_holiday": 1, - "allow_encashment": 1, - "encashment_threshold_days": 5, - "earning_component": "Leave Encashment" - }, - { - "doctype": "Leave Type", - "leave_type_name": "_Test Leave Type Earned", - "include_holiday": 1, - "is_earned_leave": 1 - } -] \ No newline at end of file diff --git a/erpnext/hr/doctype/offer_term/__init__.py b/erpnext/hr/doctype/offer_term/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/offer_term/offer_term.js b/erpnext/hr/doctype/offer_term/offer_term.js deleted file mode 100644 index 3be6e7b5f9..0000000000 --- a/erpnext/hr/doctype/offer_term/offer_term.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Offer Term', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/offer_term/offer_term.json b/erpnext/hr/doctype/offer_term/offer_term.json deleted file mode 100644 index 3b7bd4250d..0000000000 --- a/erpnext/hr/doctype/offer_term/offer_term.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "allow_copy": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "field:offer_term", - "beta": 0, - "creation": "2015-03-05 13:00:30.900471", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "fields": [ - { - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "fieldname": "offer_term", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Offer Term", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2016-07-25 05:24:25.724664", - "modified_by": "Administrator", - "module": "HR", - "name": "Offer Term", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "HR User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/offer_term/offer_term.py b/erpnext/hr/doctype/offer_term/offer_term.py deleted file mode 100644 index cee6c4518b..0000000000 --- a/erpnext/hr/doctype/offer_term/offer_term.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class OfferTerm(Document): - pass diff --git a/erpnext/hr/doctype/offer_term/test_offer_term.py b/erpnext/hr/doctype/offer_term/test_offer_term.py deleted file mode 100644 index 2bea7b2597..0000000000 --- a/erpnext/hr/doctype/offer_term/test_offer_term.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Offer Term') - - -class TestOfferTerm(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/purpose_of_travel/__init__.py b/erpnext/hr/doctype/purpose_of_travel/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js deleted file mode 100644 index a9424d6175..0000000000 --- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Purpose of Travel', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json deleted file mode 100644 index 68d2d6b570..0000000000 --- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "field:purpose_of_travel", - "beta": 0, - "creation": "2018-05-15 07:00:30.933908", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "purpose_of_travel", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Purpose of Travel", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-05-15 07:05:26.219209", - "modified_by": "Administrator", - "module": "HR", - "name": "Purpose of Travel", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py deleted file mode 100644 index c9d6e713fe..0000000000 --- a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class PurposeofTravel(Document): - pass diff --git a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py deleted file mode 100644 index 354663b78b..0000000000 --- a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestPurposeofTravel(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/shift_assignment/__init__.py b/erpnext/hr/doctype/shift_assignment/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.js b/erpnext/hr/doctype/shift_assignment/shift_assignment.js deleted file mode 100644 index 74708b1aaa..0000000000 --- a/erpnext/hr/doctype/shift_assignment/shift_assignment.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Shift Assignment', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.json b/erpnext/hr/doctype/shift_assignment/shift_assignment.json deleted file mode 100644 index ce2a10f229..0000000000 --- a/erpnext/hr/doctype/shift_assignment/shift_assignment.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "HR-SHA-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:25:04.562730", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "shift_type", - "status", - "column_break_3", - "company", - "start_date", - "end_date", - "shift_request", - "department", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "shift_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Shift Type", - "options": "Shift Type", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "shift_request", - "fieldtype": "Link", - "label": "Shift Request", - "options": "Shift Request", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Shift Assignment", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "start_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Start Date", - "reqd": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "end_date", - "fieldtype": "Date", - "label": "End Date", - "show_days": 1, - "show_seconds": 1 - }, - { - "allow_on_submit": 1, - "default": "Active", - "fieldname": "status", - "fieldtype": "Select", - "label": "Status", - "options": "Active\nInactive", - "show_days": 1, - "show_seconds": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2020-06-15 14:27:54.310773", - "modified_by": "Administrator", - "module": "HR", - "name": "Shift Assignment", - "owner": "Administrator", - "permissions": [ - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.py b/erpnext/hr/doctype/shift_assignment/shift_assignment.py deleted file mode 100644 index 51298deddb..0000000000 --- a/erpnext/hr/doctype/shift_assignment/shift_assignment.py +++ /dev/null @@ -1,517 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from datetime import datetime, timedelta -from typing import Dict, List - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import cstr, get_datetime, get_link_to_form, get_time, getdate, now_datetime - -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday -from erpnext.hr.utils import validate_active_employee - - -class OverlappingShiftError(frappe.ValidationError): - pass - - -class ShiftAssignment(Document): - def validate(self): - validate_active_employee(self.employee) - self.validate_overlapping_shifts() - - if self.end_date: - self.validate_from_to_dates("start_date", "end_date") - - def validate_overlapping_shifts(self): - overlapping_dates = self.get_overlapping_dates() - if len(overlapping_dates): - # if dates are overlapping, check if timings are overlapping, else allow - overlapping_timings = has_overlapping_timings(self.shift_type, overlapping_dates[0].shift_type) - if overlapping_timings: - self.throw_overlap_error(overlapping_dates[0]) - - def get_overlapping_dates(self): - if not self.name: - self.name = "New Shift Assignment" - - shift = frappe.qb.DocType("Shift Assignment") - query = ( - frappe.qb.from_(shift) - .select(shift.name, shift.shift_type, shift.docstatus, shift.status) - .where( - (shift.employee == self.employee) - & (shift.docstatus == 1) - & (shift.name != self.name) - & (shift.status == "Active") - ) - ) - - if self.end_date: - query = query.where( - Criterion.any( - [ - Criterion.any( - [ - shift.end_date.isnull(), - ((self.start_date >= shift.start_date) & (self.start_date <= shift.end_date)), - ] - ), - Criterion.any( - [ - ((self.end_date >= shift.start_date) & (self.end_date <= shift.end_date)), - shift.start_date.between(self.start_date, self.end_date), - ] - ), - ] - ) - ) - else: - query = query.where( - shift.end_date.isnull() - | ((self.start_date >= shift.start_date) & (self.start_date <= shift.end_date)) - ) - - return query.run(as_dict=True) - - def throw_overlap_error(self, shift_details): - shift_details = frappe._dict(shift_details) - if shift_details.docstatus == 1 and shift_details.status == "Active": - msg = _( - "Employee {0} already has an active Shift {1}: {2} that overlaps within this period." - ).format( - frappe.bold(self.employee), - frappe.bold(shift_details.shift_type), - get_link_to_form("Shift Assignment", shift_details.name), - ) - frappe.throw(msg, title=_("Overlapping Shifts"), exc=OverlappingShiftError) - - -def has_overlapping_timings(shift_1: str, shift_2: str) -> bool: - """ - Accepts two shift types and checks whether their timings are overlapping - """ - curr_shift = frappe.db.get_value("Shift Type", shift_1, ["start_time", "end_time"], as_dict=True) - overlapping_shift = frappe.db.get_value( - "Shift Type", shift_2, ["start_time", "end_time"], as_dict=True - ) - - if ( - ( - curr_shift.start_time > overlapping_shift.start_time - and curr_shift.start_time < overlapping_shift.end_time - ) - or ( - curr_shift.end_time > overlapping_shift.start_time - and curr_shift.end_time < overlapping_shift.end_time - ) - or ( - curr_shift.start_time <= overlapping_shift.start_time - and curr_shift.end_time >= overlapping_shift.end_time - ) - ): - return True - return False - - -@frappe.whitelist() -def get_events(start, end, filters=None): - from frappe.desk.calendar import get_event_conditions - - employee = frappe.db.get_value( - "Employee", {"user_id": frappe.session.user}, ["name", "company"], as_dict=True - ) - if employee: - employee, company = employee.name, employee.company - else: - employee = "" - company = frappe.db.get_value("Global Defaults", None, "default_company") - - conditions = get_event_conditions("Shift Assignment", filters) - events = add_assignments(start, end, conditions=conditions) - return events - - -def add_assignments(start, end, conditions=None): - events = [] - - query = """select name, start_date, end_date, employee_name, - employee, docstatus, shift_type - from `tabShift Assignment` where - ( - start_date >= %(start_date)s - or end_date <= %(end_date)s - or (%(start_date)s between start_date and end_date and %(end_date)s between start_date and end_date) - ) - and docstatus = 1""" - if conditions: - query += conditions - - records = frappe.db.sql(query, {"start_date": start, "end_date": end}, as_dict=True) - shift_timing_map = get_shift_type_timing([d.shift_type for d in records]) - - for d in records: - daily_event_start = d.start_date - daily_event_end = d.end_date if d.end_date else getdate() - delta = timedelta(days=1) - while daily_event_start <= daily_event_end: - start_timing = ( - frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["start_time"] - ) - end_timing = ( - frappe.utils.get_datetime(daily_event_start) + shift_timing_map[d.shift_type]["end_time"] - ) - daily_event_start += delta - e = { - "name": d.name, - "doctype": "Shift Assignment", - "start_date": start_timing, - "end_date": end_timing, - "title": cstr(d.employee_name) + ": " + cstr(d.shift_type), - "docstatus": d.docstatus, - "allDay": 0, - } - if e not in events: - events.append(e) - - return events - - -def get_shift_type_timing(shift_types): - shift_timing_map = {} - data = frappe.get_all( - "Shift Type", filters={"name": ("IN", shift_types)}, fields=["name", "start_time", "end_time"] - ) - - for d in data: - shift_timing_map[d.name] = d - - return shift_timing_map - - -def get_shift_for_time(shifts: List[Dict], for_timestamp: datetime) -> Dict: - """Returns shift with details for given timestamp""" - valid_shifts = [] - - for entry in shifts: - shift_details = get_shift_details(entry.shift_type, for_timestamp=for_timestamp) - - if ( - get_datetime(shift_details.actual_start) - <= get_datetime(for_timestamp) - <= get_datetime(shift_details.actual_end) - ): - valid_shifts.append(shift_details) - - valid_shifts.sort(key=lambda x: x["actual_start"]) - - if len(valid_shifts) > 1: - for i in range(len(valid_shifts) - 1): - # comparing 2 consecutive shifts and adjusting start and end times - # if they are overlapping within grace period - curr_shift = valid_shifts[i] - next_shift = valid_shifts[i + 1] - - if curr_shift and next_shift: - next_shift.actual_start = ( - curr_shift.end_datetime - if next_shift.actual_start < curr_shift.end_datetime - else next_shift.actual_start - ) - curr_shift.actual_end = ( - next_shift.actual_start - if curr_shift.actual_end > next_shift.actual_start - else curr_shift.actual_end - ) - - valid_shifts[i] = curr_shift - valid_shifts[i + 1] = next_shift - - return get_exact_shift(valid_shifts, for_timestamp) or {} - - return (valid_shifts and valid_shifts[0]) or {} - - -def get_shifts_for_date(employee: str, for_timestamp: datetime) -> List[Dict[str, str]]: - """Returns list of shifts with details for given date""" - assignment = frappe.qb.DocType("Shift Assignment") - - return ( - frappe.qb.from_(assignment) - .select(assignment.name, assignment.shift_type) - .where( - (assignment.employee == employee) - & (assignment.docstatus == 1) - & (assignment.status == "Active") - & (assignment.start_date <= getdate(for_timestamp.date())) - & ( - Criterion.any( - [ - assignment.end_date.isnull(), - (assignment.end_date.isnotnull() & (getdate(for_timestamp.date()) <= assignment.end_date)), - ] - ) - ) - ) - ).run(as_dict=True) - - -def get_shift_for_timestamp(employee: str, for_timestamp: datetime) -> Dict: - shifts = get_shifts_for_date(employee, for_timestamp) - if shifts: - return get_shift_for_time(shifts, for_timestamp) - return {} - - -def get_employee_shift( - employee: str, - for_timestamp: datetime = None, - consider_default_shift: bool = False, - next_shift_direction: str = None, -) -> Dict: - """Returns a Shift Type for the given employee on the given date. (excluding the holidays) - - :param employee: Employee for which shift is required. - :param for_timestamp: DateTime on which shift is required - :param consider_default_shift: If set to true, default shift is taken when no shift assignment is found. - :param next_shift_direction: One of: None, 'forward', 'reverse'. Direction to look for next shift if shift not found on given date. - """ - if for_timestamp is None: - for_timestamp = now_datetime() - - shift_details = get_shift_for_timestamp(employee, for_timestamp) - - # if shift assignment is not found, consider default shift - default_shift = frappe.db.get_value("Employee", employee, "default_shift") - if not shift_details and consider_default_shift: - shift_details = get_shift_details(default_shift, for_timestamp) - - # if its a holiday, reset - if shift_details and is_holiday_date(employee, shift_details): - shift_details = None - - # if no shift is found, find next or prev shift assignment based on direction - if not shift_details and next_shift_direction: - shift_details = get_prev_or_next_shift( - employee, for_timestamp, consider_default_shift, default_shift, next_shift_direction - ) - - return shift_details or {} - - -def get_prev_or_next_shift( - employee: str, - for_timestamp: datetime, - consider_default_shift: bool, - default_shift: str, - next_shift_direction: str, -) -> Dict: - """Returns a dict of shift details for the next or prev shift based on the next_shift_direction""" - MAX_DAYS = 366 - shift_details = {} - - if consider_default_shift and default_shift: - direction = -1 if next_shift_direction == "reverse" else 1 - for i in range(MAX_DAYS): - date = for_timestamp + timedelta(days=direction * (i + 1)) - shift_details = get_employee_shift(employee, date, consider_default_shift, None) - if shift_details: - break - else: - direction = "<" if next_shift_direction == "reverse" else ">" - sort_order = "desc" if next_shift_direction == "reverse" else "asc" - dates = frappe.db.get_all( - "Shift Assignment", - ["start_date", "end_date"], - { - "employee": employee, - "start_date": (direction, for_timestamp.date()), - "docstatus": 1, - "status": "Active", - }, - as_list=True, - limit=MAX_DAYS, - order_by="start_date " + sort_order, - ) - - if dates: - for date in dates: - if date[1] and date[1] < for_timestamp.date(): - continue - shift_details = get_employee_shift( - employee, datetime.combine(date[0], for_timestamp.time()), consider_default_shift, None - ) - if shift_details: - break - - return shift_details or {} - - -def is_holiday_date(employee: str, shift_details: Dict) -> bool: - holiday_list_name = frappe.db.get_value( - "Shift Type", shift_details.shift_type.name, "holiday_list" - ) - - if not holiday_list_name: - holiday_list_name = get_holiday_list_for_employee(employee, False) - - return holiday_list_name and is_holiday(holiday_list_name, shift_details.start_datetime.date()) - - -def get_employee_shift_timings( - employee: str, for_timestamp: datetime = None, consider_default_shift: bool = False -) -> List[Dict]: - """Returns previous shift, current/upcoming shift, next_shift for the given timestamp and employee""" - if for_timestamp is None: - for_timestamp = now_datetime() - - # write and verify a test case for midnight shift. - prev_shift = curr_shift = next_shift = None - curr_shift = get_employee_shift(employee, for_timestamp, consider_default_shift, "forward") - if curr_shift: - next_shift = get_employee_shift( - employee, curr_shift.start_datetime + timedelta(days=1), consider_default_shift, "forward" - ) - prev_shift = get_employee_shift( - employee, for_timestamp + timedelta(days=-1), consider_default_shift, "reverse" - ) - - if curr_shift: - # adjust actual start and end times if they are overlapping with grace period (before start and after end) - if prev_shift: - curr_shift.actual_start = ( - prev_shift.end_datetime - if curr_shift.actual_start < prev_shift.end_datetime - else curr_shift.actual_start - ) - prev_shift.actual_end = ( - curr_shift.actual_start - if prev_shift.actual_end > curr_shift.actual_start - else prev_shift.actual_end - ) - if next_shift: - next_shift.actual_start = ( - curr_shift.end_datetime - if next_shift.actual_start < curr_shift.end_datetime - else next_shift.actual_start - ) - curr_shift.actual_end = ( - next_shift.actual_start - if curr_shift.actual_end > next_shift.actual_start - else curr_shift.actual_end - ) - - return prev_shift, curr_shift, next_shift - - -def get_actual_start_end_datetime_of_shift( - employee: str, for_timestamp: datetime, consider_default_shift: bool = False -) -> Dict: - """Returns a Dict containing shift details with actual_start and actual_end datetime values - Here 'actual' means taking into account the "begin_check_in_before_shift_start_time" and "allow_check_out_after_shift_end_time". - Empty Dict is returned if the timestamp is outside any actual shift timings. - - :param employee (str): Employee name - :param for_timestamp (datetime, optional): Datetime value of checkin, if not provided considers current datetime - :param consider_default_shift (bool, optional): Flag (defaults to False) to specify whether to consider - default shift in employee master if no shift assignment is found - """ - shift_timings_as_per_timestamp = get_employee_shift_timings( - employee, for_timestamp, consider_default_shift - ) - return get_exact_shift(shift_timings_as_per_timestamp, for_timestamp) - - -def get_exact_shift(shifts: List, for_timestamp: datetime) -> Dict: - """Returns the shift details (dict) for the exact shift in which the 'for_timestamp' value falls among multiple shifts""" - shift_details = dict() - timestamp_list = [] - - for shift in shifts: - if shift: - timestamp_list.extend([shift.actual_start, shift.actual_end]) - else: - timestamp_list.extend([None, None]) - - timestamp_index = None - for index, timestamp in enumerate(timestamp_list): - if not timestamp: - continue - - if for_timestamp < timestamp: - timestamp_index = index - elif for_timestamp == timestamp: - # on timestamp boundary - if index % 2 == 1: - timestamp_index = index - else: - timestamp_index = index + 1 - - if timestamp_index: - break - - if timestamp_index and timestamp_index % 2 == 1: - shift_details = shifts[int((timestamp_index - 1) / 2)] - - return shift_details - - -def get_shift_details(shift_type_name: str, for_timestamp: datetime = None) -> Dict: - """Returns a Dict containing shift details with the following data: - 'shift_type' - Object of DocType Shift Type, - 'start_datetime' - datetime of shift start on given timestamp, - 'end_datetime' - datetime of shift end on given timestamp, - 'actual_start' - datetime of shift start after adding 'begin_check_in_before_shift_start_time', - 'actual_end' - datetime of shift end after adding 'allow_check_out_after_shift_end_time' (None is returned if this is zero) - - :param shift_type_name (str): shift type name for which shift_details are required. - :param for_timestamp (datetime, optional): Datetime value of checkin, if not provided considers current datetime - """ - if not shift_type_name: - return {} - - if for_timestamp is None: - for_timestamp = now_datetime() - - shift_type = frappe.get_doc("Shift Type", shift_type_name) - shift_actual_start = shift_type.start_time - timedelta( - minutes=shift_type.begin_check_in_before_shift_start_time - ) - - if shift_type.start_time > shift_type.end_time: - # shift spans accross 2 different days - if get_time(for_timestamp.time()) >= get_time(shift_actual_start): - # if for_timestamp is greater than start time, it's within the first day - start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time - for_timestamp = for_timestamp + timedelta(days=1) - end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time - - elif get_time(for_timestamp.time()) < get_time(shift_actual_start): - # if for_timestamp is less than start time, it's within the second day - end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time - for_timestamp = for_timestamp + timedelta(days=-1) - start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time - else: - # start and end timings fall on the same day - start_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.start_time - end_datetime = datetime.combine(for_timestamp, datetime.min.time()) + shift_type.end_time - - actual_start = start_datetime - timedelta( - minutes=shift_type.begin_check_in_before_shift_start_time - ) - actual_end = end_datetime + timedelta(minutes=shift_type.allow_check_out_after_shift_end_time) - - return frappe._dict( - { - "shift_type": shift_type, - "start_datetime": start_datetime, - "end_datetime": end_datetime, - "actual_start": actual_start, - "actual_end": actual_end, - } - ) diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js b/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js deleted file mode 100644 index 5d2360f10f..0000000000 --- a/erpnext/hr/doctype/shift_assignment/shift_assignment_calendar.js +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.views.calendar["Shift Assignment"] = { - field_map: { - "start": "start_date", - "end": "end_date", - "id": "name", - "docstatus": 1, - "allDay": "allDay", - }, - get_events_method: "erpnext.hr.doctype.shift_assignment.shift_assignment.get_events" -} diff --git a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py deleted file mode 100644 index de82a2432b..0000000000 --- a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py +++ /dev/null @@ -1,171 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate, nowdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.shift_assignment.shift_assignment import OverlappingShiftError, get_events -from erpnext.hr.doctype.shift_type.test_shift_type import make_shift_assignment, setup_shift_type - -test_dependencies = ["Shift Type"] - - -class TestShiftAssignment(FrappeTestCase): - def setUp(self): - frappe.db.delete("Shift Assignment") - frappe.db.delete("Shift Type") - - def test_make_shift_assignment(self): - setup_shift_type(shift_type="Day Shift") - shift_assignment = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "start_date": nowdate(), - } - ).insert() - shift_assignment.submit() - - self.assertEqual(shift_assignment.docstatus, 1) - - def test_overlapping_for_ongoing_shift(self): - # shift should be Ongoing if Only start_date is present and status = Active - setup_shift_type(shift_type="Day Shift") - shift_assignment_1 = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "start_date": nowdate(), - "status": "Active", - } - ).insert() - shift_assignment_1.submit() - - self.assertEqual(shift_assignment_1.docstatus, 1) - - shift_assignment = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "start_date": add_days(nowdate(), 2), - } - ) - - self.assertRaises(OverlappingShiftError, shift_assignment.save) - - def test_overlapping_for_fixed_period_shift(self): - # shift should is for Fixed period if Only start_date and end_date both are present and status = Active - setup_shift_type(shift_type="Day Shift") - shift_assignment_1 = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "start_date": nowdate(), - "end_date": add_days(nowdate(), 30), - "status": "Active", - } - ).insert() - shift_assignment_1.submit() - - # it should not allowed within period of any shift. - shift_assignment_3 = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "start_date": add_days(nowdate(), 10), - "end_date": add_days(nowdate(), 35), - "status": "Active", - } - ) - - self.assertRaises(OverlappingShiftError, shift_assignment_3.save) - - def test_overlapping_for_a_fixed_period_shift_and_ongoing_shift(self): - employee = make_employee("test_shift_assignment@example.com", company="_Test Company") - - # shift setup for 8-12 - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = getdate() - # shift with end date - make_shift_assignment(shift_type.name, employee, date, add_days(date, 30)) - - # shift setup for 11-15 - shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00") - date = getdate() - - # shift assignment without end date - shift2 = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "start_date": date, - } - ) - self.assertRaises(OverlappingShiftError, shift2.insert) - - def test_overlap_validation_for_shifts_on_same_day_with_overlapping_timeslots(self): - employee = make_employee("test_shift_assignment@example.com", company="_Test Company") - - # shift setup for 8-12 - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - # shift setup for 11-15 - shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00") - date = getdate() - - shift2 = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "start_date": date, - } - ) - self.assertRaises(OverlappingShiftError, shift2.insert) - - def test_multiple_shift_assignments_for_same_day(self): - employee = make_employee("test_shift_assignment@example.com", company="_Test Company") - - # shift setup for 8-12 - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - # shift setup for 13-15 - shift_type = setup_shift_type(shift_type="Shift 2", start_time="13:00:00", end_time="15:00:00") - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - def test_shift_assignment_calendar(self): - employee1 = make_employee("test_shift_assignment1@example.com", company="_Test Company") - employee2 = make_employee("test_shift_assignment2@example.com", company="_Test Company") - - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = getdate() - shift1 = make_shift_assignment(shift_type.name, employee1, date) - make_shift_assignment(shift_type.name, employee2, date) - - events = get_events( - start=date, end=date, filters=[["Shift Assignment", "employee", "=", employee1, False]] - ) - self.assertEqual(len(events), 1) - self.assertEqual(events[0]["name"], shift1.name) diff --git a/erpnext/hr/doctype/shift_request/__init__.py b/erpnext/hr/doctype/shift_request/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/shift_request/shift_request.js b/erpnext/hr/doctype/shift_request/shift_request.js deleted file mode 100644 index b17a6f3845..0000000000 --- a/erpnext/hr/doctype/shift_request/shift_request.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Shift Request', { - setup: function(frm) { - frm.set_query("approver", function() { - return { - query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", - filters: { - employee: frm.doc.employee, - doctype: frm.doc.doctype - } - }; - }); - frm.set_query("employee", erpnext.queries.employee); - }, -}); diff --git a/erpnext/hr/doctype/shift_request/shift_request.json b/erpnext/hr/doctype/shift_request/shift_request.json deleted file mode 100644 index 64cbdfff7d..0000000000 --- a/erpnext/hr/doctype/shift_request/shift_request.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "HR-SHR-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:32:27.974273", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "shift_type", - "employee", - "employee_name", - "department", - "status", - "column_break_4", - "company", - "approver", - "from_date", - "to_date", - "amended_from" - ], - "fields": [ - { - "fieldname": "shift_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Shift Type", - "options": "Shift Type", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Shift Request", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "Draft", - "fieldname": "status", - "fieldtype": "Select", - "label": "Status", - "options": "Draft\nApproved\nRejected", - "reqd": 1 - }, - { - "fetch_from": "employee.shift_request_approver", - "fetch_if_empty": 1, - "fieldname": "approver", - "fieldtype": "Link", - "label": "Approver", - "options": "User", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2020-08-10 17:59:31.550558", - "modified_by": "Administrator", - "module": "HR", - "name": "Shift Request", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/shift_request/shift_request.py b/erpnext/hr/doctype/shift_request/shift_request.py deleted file mode 100644 index 2bee2404aa..0000000000 --- a/erpnext/hr/doctype/shift_request/shift_request.py +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.query_builder import Criterion -from frappe.utils import get_link_to_form, getdate - -from erpnext.hr.doctype.shift_assignment.shift_assignment import has_overlapping_timings -from erpnext.hr.utils import share_doc_with_approver, validate_active_employee - - -class OverlappingShiftRequestError(frappe.ValidationError): - pass - - -class ShiftRequest(Document): - def validate(self): - validate_active_employee(self.employee) - self.validate_dates() - self.validate_overlapping_shift_requests() - self.validate_approver() - self.validate_default_shift() - - def on_update(self): - share_doc_with_approver(self, self.approver) - - def on_submit(self): - if self.status not in ["Approved", "Rejected"]: - frappe.throw(_("Only Shift Request with status 'Approved' and 'Rejected' can be submitted")) - if self.status == "Approved": - assignment_doc = frappe.new_doc("Shift Assignment") - assignment_doc.company = self.company - assignment_doc.shift_type = self.shift_type - assignment_doc.employee = self.employee - assignment_doc.start_date = self.from_date - if self.to_date: - assignment_doc.end_date = self.to_date - assignment_doc.shift_request = self.name - assignment_doc.flags.ignore_permissions = 1 - assignment_doc.insert() - assignment_doc.submit() - - frappe.msgprint( - _("Shift Assignment: {0} created for Employee: {1}").format( - frappe.bold(assignment_doc.name), frappe.bold(self.employee) - ) - ) - - def on_cancel(self): - shift_assignment_list = frappe.get_list( - "Shift Assignment", {"employee": self.employee, "shift_request": self.name} - ) - if shift_assignment_list: - for shift in shift_assignment_list: - shift_assignment_doc = frappe.get_doc("Shift Assignment", shift["name"]) - shift_assignment_doc.cancel() - - def validate_default_shift(self): - default_shift = frappe.get_value("Employee", self.employee, "default_shift") - if self.shift_type == default_shift: - frappe.throw( - _("You can not request for your Default Shift: {0}").format(frappe.bold(self.shift_type)) - ) - - def validate_approver(self): - department = frappe.get_value("Employee", self.employee, "department") - shift_approver = frappe.get_value("Employee", self.employee, "shift_request_approver") - approvers = frappe.db.sql( - """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", - (department), - ) - approvers = [approver[0] for approver in approvers] - approvers.append(shift_approver) - if self.approver not in approvers: - frappe.throw(_("Only Approvers can Approve this Request.")) - - def validate_dates(self): - if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)): - frappe.throw(_("To date cannot be before from date")) - - def validate_overlapping_shift_requests(self): - overlapping_dates = self.get_overlapping_dates() - if len(overlapping_dates): - # if dates are overlapping, check if timings are overlapping, else allow - overlapping_timings = has_overlapping_timings(self.shift_type, overlapping_dates[0].shift_type) - if overlapping_timings: - self.throw_overlap_error(overlapping_dates[0]) - - def get_overlapping_dates(self): - if not self.name: - self.name = "New Shift Request" - - shift = frappe.qb.DocType("Shift Request") - query = ( - frappe.qb.from_(shift) - .select(shift.name, shift.shift_type) - .where((shift.employee == self.employee) & (shift.docstatus < 2) & (shift.name != self.name)) - ) - - if self.to_date: - query = query.where( - Criterion.any( - [ - Criterion.any( - [ - shift.to_date.isnull(), - ((self.from_date >= shift.from_date) & (self.from_date <= shift.to_date)), - ] - ), - Criterion.any( - [ - ((self.to_date >= shift.from_date) & (self.to_date <= shift.to_date)), - shift.from_date.between(self.from_date, self.to_date), - ] - ), - ] - ) - ) - else: - query = query.where( - shift.to_date.isnull() - | ((self.from_date >= shift.from_date) & (self.from_date <= shift.to_date)) - ) - - return query.run(as_dict=True) - - def throw_overlap_error(self, shift_details): - shift_details = frappe._dict(shift_details) - msg = _( - "Employee {0} has already applied for Shift {1}: {2} that overlaps within this period" - ).format( - frappe.bold(self.employee), - frappe.bold(shift_details.shift_type), - get_link_to_form("Shift Request", shift_details.name), - ) - - frappe.throw(msg, title=_("Overlapping Shift Requests"), exc=OverlappingShiftRequestError) diff --git a/erpnext/hr/doctype/shift_request/shift_request_dashboard.py b/erpnext/hr/doctype/shift_request/shift_request_dashboard.py deleted file mode 100644 index 2859b8f771..0000000000 --- a/erpnext/hr/doctype/shift_request/shift_request_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "shift_request", - "transactions": [ - {"items": ["Shift Assignment"]}, - ], - } diff --git a/erpnext/hr/doctype/shift_request/test_shift_request.py b/erpnext/hr/doctype/shift_request/test_shift_request.py deleted file mode 100644 index c47418cfa8..0000000000 --- a/erpnext/hr/doctype/shift_request/test_shift_request.py +++ /dev/null @@ -1,258 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, nowdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.shift_request.shift_request import OverlappingShiftRequestError -from erpnext.hr.doctype.shift_type.test_shift_type import setup_shift_type - -test_dependencies = ["Shift Type"] - - -class TestShiftRequest(FrappeTestCase): - def setUp(self): - for doctype in ["Shift Request", "Shift Assignment", "Shift Type"]: - frappe.db.delete(doctype) - - def test_make_shift_request(self): - "Test creation/updation of Shift Assignment from Shift Request." - setup_shift_type(shift_type="Day Shift") - department = frappe.get_value("Employee", "_T-Employee-00001", "department") - set_shift_approver(department) - approver = frappe.db.sql( - """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", - (department), - )[0][0] - - shift_request = make_shift_request(approver) - - # Only one shift assignment is created against a shift request - shift_assignment = frappe.db.get_value( - "Shift Assignment", - filters={"shift_request": shift_request.name}, - fieldname=["employee", "docstatus"], - as_dict=True, - ) - self.assertEqual(shift_request.employee, shift_assignment.employee) - self.assertEqual(shift_assignment.docstatus, 1) - - shift_request.cancel() - - shift_assignment_docstatus = frappe.db.get_value( - "Shift Assignment", filters={"shift_request": shift_request.name}, fieldname="docstatus" - ) - self.assertEqual(shift_assignment_docstatus, 2) - - def test_shift_request_approver_perms(self): - setup_shift_type(shift_type="Day Shift") - employee = frappe.get_doc("Employee", "_T-Employee-00001") - user = "test_approver_perm_emp@example.com" - make_employee(user, "_Test Company") - - # set approver for employee - employee.reload() - employee.shift_request_approver = user - employee.save() - - shift_request = make_shift_request(user, do_not_submit=True) - self.assertTrue(shift_request.name in frappe.share.get_shared("Shift Request", user)) - - # check shared doc revoked - shift_request.reload() - department = frappe.get_value("Employee", "_T-Employee-00001", "department") - set_shift_approver(department) - department_approver = frappe.db.sql( - """select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", - (department), - )[0][0] - shift_request.approver = department_approver - shift_request.save() - self.assertTrue(shift_request.name not in frappe.share.get_shared("Shift Request", user)) - - shift_request.reload() - shift_request.approver = user - shift_request.save() - - frappe.set_user(user) - shift_request.reload() - shift_request.status = "Approved" - shift_request.submit() - - # unset approver - frappe.set_user("Administrator") - employee.reload() - employee.shift_request_approver = "" - employee.save() - - def test_overlap_for_request_without_to_date(self): - # shift should be Ongoing if Only from_date is present - user = "test_shift_request@example.com" - employee = make_employee(user, company="_Test Company", shift_request_approver=user) - setup_shift_type(shift_type="Day Shift") - - shift_request = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": employee, - "from_date": nowdate(), - "approver": user, - "status": "Approved", - } - ).submit() - - shift_request = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": employee, - "from_date": add_days(nowdate(), 2), - "approver": user, - "status": "Approved", - } - ) - - self.assertRaises(OverlappingShiftRequestError, shift_request.save) - - def test_overlap_for_request_with_from_and_to_dates(self): - user = "test_shift_request@example.com" - employee = make_employee(user, company="_Test Company", shift_request_approver=user) - setup_shift_type(shift_type="Day Shift") - - shift_request = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": employee, - "from_date": nowdate(), - "to_date": add_days(nowdate(), 30), - "approver": user, - "status": "Approved", - } - ).submit() - - shift_request = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": employee, - "from_date": add_days(nowdate(), 10), - "to_date": add_days(nowdate(), 35), - "approver": user, - "status": "Approved", - } - ) - - self.assertRaises(OverlappingShiftRequestError, shift_request.save) - - def test_overlapping_for_a_fixed_period_shift_and_ongoing_shift(self): - user = "test_shift_request@example.com" - employee = make_employee(user, company="_Test Company", shift_request_approver=user) - - # shift setup for 8-12 - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = nowdate() - - # shift with end date - frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "from_date": date, - "to_date": add_days(date, 30), - "approver": user, - "status": "Approved", - } - ).submit() - - # shift setup for 11-15 - shift_type = setup_shift_type(shift_type="Shift 2", start_time="11:00:00", end_time="15:00:00") - shift2 = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "from_date": date, - "approver": user, - "status": "Approved", - } - ) - - self.assertRaises(OverlappingShiftRequestError, shift2.insert) - - def test_allow_non_overlapping_shift_requests_for_same_day(self): - user = "test_shift_request@example.com" - employee = make_employee(user, company="_Test Company", shift_request_approver=user) - - # shift setup for 8-12 - shift_type = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="12:00:00") - date = nowdate() - - # shift with end date - frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "from_date": date, - "to_date": add_days(date, 30), - "approver": user, - "status": "Approved", - } - ).submit() - - # shift setup for 13-15 - shift_type = setup_shift_type(shift_type="Shift 2", start_time="13:00:00", end_time="15:00:00") - frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": shift_type.name, - "company": "_Test Company", - "employee": employee, - "from_date": date, - "approver": user, - "status": "Approved", - } - ).submit() - - -def set_shift_approver(department): - department_doc = frappe.get_doc("Department", department) - department_doc.append("shift_request_approver", {"approver": "test1@example.com"}) - department_doc.save() - department_doc.reload() - - -def make_shift_request(approver, do_not_submit=0): - shift_request = frappe.get_doc( - { - "doctype": "Shift Request", - "shift_type": "Day Shift", - "company": "_Test Company", - "employee": "_T-Employee-00001", - "employee_name": "_Test Employee", - "from_date": nowdate(), - "to_date": add_days(nowdate(), 10), - "approver": approver, - "status": "Approved", - } - ).insert() - - if do_not_submit: - return shift_request - - shift_request.submit() - return shift_request diff --git a/erpnext/hr/doctype/shift_type/__init__.py b/erpnext/hr/doctype/shift_type/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/shift_type/shift_type.js b/erpnext/hr/doctype/shift_type/shift_type.js deleted file mode 100644 index 7138e3bcf3..0000000000 --- a/erpnext/hr/doctype/shift_type/shift_type.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Shift Type', { - refresh: function(frm) { - frm.add_custom_button( - __('Mark Attendance'), - () => { - if (!frm.doc.enable_auto_attendance) { - frm.scroll_to_field('enable_auto_attendance'); - frappe.throw(__('Please Enable Auto Attendance and complete the setup first.')); - } - - if (!frm.doc.process_attendance_after) { - frm.scroll_to_field('process_attendance_after'); - frappe.throw(__('Please set {0}.', [__('Process Attendance After').bold()])); - } - - if (!frm.doc.last_sync_of_checkin) { - frm.scroll_to_field('last_sync_of_checkin'); - frappe.throw(__('Please set {0}.', [__('Last Sync of Checkin').bold()])); - } - - frm.call({ - doc: frm.doc, - method: 'process_auto_attendance', - freeze: true, - callback: () => { - frappe.msgprint(__('Attendance has been marked as per employee check-ins')); - } - }); - } - ); - } -}); diff --git a/erpnext/hr/doctype/shift_type/shift_type.json b/erpnext/hr/doctype/shift_type/shift_type.json deleted file mode 100644 index 61f3d2c279..0000000000 --- a/erpnext/hr/doctype/shift_type/shift_type.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "autoname": "prompt", - "creation": "2018-04-13 16:22:52.954783", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "start_time", - "end_time", - "column_break_3", - "holiday_list", - "enable_auto_attendance", - "auto_attendance_settings_section", - "determine_check_in_and_check_out", - "working_hours_calculation_based_on", - "begin_check_in_before_shift_start_time", - "allow_check_out_after_shift_end_time", - "column_break_10", - "working_hours_threshold_for_half_day", - "working_hours_threshold_for_absent", - "process_attendance_after", - "last_sync_of_checkin", - "grace_period_settings_auto_attendance_section", - "enable_entry_grace_period", - "late_entry_grace_period", - "column_break_18", - "enable_exit_grace_period", - "early_exit_grace_period" - ], - "fields": [ - { - "fieldname": "start_time", - "fieldtype": "Time", - "in_list_view": 1, - "label": "Start Time", - "reqd": 1 - }, - { - "fieldname": "end_time", - "fieldtype": "Time", - "in_list_view": 1, - "label": "End Time", - "reqd": 1 - }, - { - "fieldname": "holiday_list", - "fieldtype": "Link", - "label": "Holiday List", - "options": "Holiday List" - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_10", - "fieldtype": "Column Break" - }, - { - "fieldname": "determine_check_in_and_check_out", - "fieldtype": "Select", - "label": "Determine Check-in and Check-out", - "options": "Alternating entries as IN and OUT during the same shift\nStrictly based on Log Type in Employee Checkin" - }, - { - "fieldname": "working_hours_calculation_based_on", - "fieldtype": "Select", - "label": "Working Hours Calculation Based On", - "options": "First Check-in and Last Check-out\nEvery Valid Check-in and Check-out" - }, - { - "description": "Working hours below which Half Day is marked. (Zero to disable)", - "fieldname": "working_hours_threshold_for_half_day", - "fieldtype": "Float", - "label": "Working Hours Threshold for Half Day", - "precision": "1" - }, - { - "description": "Working hours below which Absent is marked. (Zero to disable)", - "fieldname": "working_hours_threshold_for_absent", - "fieldtype": "Float", - "label": "Working Hours Threshold for Absent", - "precision": "1" - }, - { - "default": "60", - "description": "The time before the shift start time during which Employee Check-in is considered for attendance.", - "fieldname": "begin_check_in_before_shift_start_time", - "fieldtype": "Int", - "label": "Begin check-in before shift start time (in minutes)" - }, - { - "default": "0", - "fieldname": "enable_entry_grace_period", - "fieldtype": "Check", - "label": "Enable Entry Grace Period" - }, - { - "depends_on": "enable_entry_grace_period", - "description": "The time after the shift start time when check-in is considered as late (in minutes).", - "fieldname": "late_entry_grace_period", - "fieldtype": "Int", - "label": "Late Entry Grace Period" - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "enable_exit_grace_period", - "fieldtype": "Check", - "label": "Enable Exit Grace Period" - }, - { - "depends_on": "eval:doc.enable_exit_grace_period", - "description": "The time before the shift end time when check-out is considered as early (in minutes).", - "fieldname": "early_exit_grace_period", - "fieldtype": "Int", - "label": "Early Exit Grace Period" - }, - { - "default": "60", - "description": "Time after the end of shift during which check-out is considered for attendance.", - "fieldname": "allow_check_out_after_shift_end_time", - "fieldtype": "Int", - "label": "Allow check-out after shift end time (in minutes)" - }, - { - "depends_on": "enable_auto_attendance", - "fieldname": "auto_attendance_settings_section", - "fieldtype": "Section Break", - "label": "Auto Attendance Settings" - }, - { - "depends_on": "enable_auto_attendance", - "fieldname": "grace_period_settings_auto_attendance_section", - "fieldtype": "Section Break", - "label": "Grace Period Settings For Auto Attendance" - }, - { - "default": "0", - "description": "Mark attendance based on 'Employee Checkin' for Employees assigned to this shift.", - "fieldname": "enable_auto_attendance", - "fieldtype": "Check", - "label": "Enable Auto Attendance" - }, - { - "description": "Attendance will be marked automatically only after this date.", - "fieldname": "process_attendance_after", - "fieldtype": "Date", - "label": "Process Attendance After" - }, - { - "description": "Last Known Successful Sync of Employee Checkin. Reset this only if you are sure that all Logs are synced from all the locations. Please don't modify this if you are unsure.", - "fieldname": "last_sync_of_checkin", - "fieldtype": "Datetime", - "label": "Last Sync of Checkin" - } - ], - "modified": "2019-07-30 01:05:24.660666", - "modified_by": "Administrator", - "module": "HR", - "name": "Shift Type", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/shift_type/shift_type.py b/erpnext/hr/doctype/shift_type/shift_type.py deleted file mode 100644 index a61bb9ee5f..0000000000 --- a/erpnext/hr/doctype/shift_type/shift_type.py +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import itertools -from datetime import datetime, timedelta - -import frappe -from frappe.model.document import Document -from frappe.utils import cint, get_datetime, get_time, getdate - -from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import daterange -from erpnext.hr.doctype.attendance.attendance import mark_attendance -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.hr.doctype.employee_checkin.employee_checkin import ( - calculate_working_hours, - mark_attendance_and_link_log, -) -from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday -from erpnext.hr.doctype.shift_assignment.shift_assignment import ( - get_employee_shift, - get_shift_details, -) - - -class ShiftType(Document): - @frappe.whitelist() - def process_auto_attendance(self): - if ( - not cint(self.enable_auto_attendance) - or not self.process_attendance_after - or not self.last_sync_of_checkin - ): - return - - filters = { - "skip_auto_attendance": 0, - "attendance": ("is", "not set"), - "time": (">=", self.process_attendance_after), - "shift_actual_end": ("<", self.last_sync_of_checkin), - "shift": self.name, - } - logs = frappe.db.get_list( - "Employee Checkin", fields="*", filters=filters, order_by="employee,time" - ) - - for key, group in itertools.groupby( - logs, key=lambda x: (x["employee"], x["shift_actual_start"]) - ): - single_shift_logs = list(group) - ( - attendance_status, - working_hours, - late_entry, - early_exit, - in_time, - out_time, - ) = self.get_attendance(single_shift_logs) - - mark_attendance_and_link_log( - single_shift_logs, - attendance_status, - key[1].date(), - working_hours, - late_entry, - early_exit, - in_time, - out_time, - self.name, - ) - - for employee in self.get_assigned_employee(self.process_attendance_after, True): - self.mark_absent_for_dates_with_no_attendance(employee) - - def get_attendance(self, logs): - """Return attendance_status, working_hours, late_entry, early_exit, in_time, out_time - for a set of logs belonging to a single shift. - Assumptions: - 1. These logs belongs to a single shift, single employee and it's not in a holiday date. - 2. Logs are in chronological order - """ - late_entry = early_exit = False - total_working_hours, in_time, out_time = calculate_working_hours( - logs, self.determine_check_in_and_check_out, self.working_hours_calculation_based_on - ) - if ( - cint(self.enable_entry_grace_period) - and in_time - and in_time > logs[0].shift_start + timedelta(minutes=cint(self.late_entry_grace_period)) - ): - late_entry = True - - if ( - cint(self.enable_exit_grace_period) - and out_time - and out_time < logs[0].shift_end - timedelta(minutes=cint(self.early_exit_grace_period)) - ): - early_exit = True - - if ( - self.working_hours_threshold_for_half_day - and total_working_hours < self.working_hours_threshold_for_half_day - ): - return "Half Day", total_working_hours, late_entry, early_exit, in_time, out_time - if ( - self.working_hours_threshold_for_absent - and total_working_hours < self.working_hours_threshold_for_absent - ): - return "Absent", total_working_hours, late_entry, early_exit, in_time, out_time - return "Present", total_working_hours, late_entry, early_exit, in_time, out_time - - def mark_absent_for_dates_with_no_attendance(self, employee): - """Marks Absents for the given employee on working days in this shift which have no attendance marked. - The Absent is marked starting from 'process_attendance_after' or employee creation date. - """ - start_date, end_date = self.get_start_and_end_dates(employee) - - # no shift assignment found, no need to process absent attendance records - if start_date is None: - return - - holiday_list_name = self.holiday_list - if not holiday_list_name: - holiday_list_name = get_holiday_list_for_employee(employee, False) - - start_time = get_time(self.start_time) - - for date in daterange(getdate(start_date), getdate(end_date)): - if is_holiday(holiday_list_name, date): - # skip marking absent on a holiday - continue - - timestamp = datetime.combine(date, start_time) - shift_details = get_employee_shift(employee, timestamp, True) - - if shift_details and shift_details.shift_type.name == self.name: - attendance = mark_attendance(employee, date, "Absent", self.name) - if attendance: - frappe.get_doc( - { - "doctype": "Comment", - "comment_type": "Comment", - "reference_doctype": "Attendance", - "reference_name": attendance, - "content": frappe._("Employee was marked Absent due to missing Employee Checkins."), - } - ).insert(ignore_permissions=True) - - def get_start_and_end_dates(self, employee): - """Returns start and end dates for checking attendance and marking absent - return: start date = max of `process_attendance_after` and DOJ - return: end date = min of shift before `last_sync_of_checkin` and Relieving Date - """ - date_of_joining, relieving_date, employee_creation = frappe.db.get_value( - "Employee", employee, ["date_of_joining", "relieving_date", "creation"] - ) - - if not date_of_joining: - date_of_joining = employee_creation.date() - - start_date = max(getdate(self.process_attendance_after), date_of_joining) - end_date = None - - shift_details = get_shift_details(self.name, get_datetime(self.last_sync_of_checkin)) - last_shift_time = ( - shift_details.actual_start if shift_details else get_datetime(self.last_sync_of_checkin) - ) - - # check if shift is found for 1 day before the last sync of checkin - # absentees are auto-marked 1 day after the shift to wait for any manual attendance records - prev_shift = get_employee_shift(employee, last_shift_time - timedelta(days=1), True, "reverse") - if prev_shift: - end_date = ( - min(prev_shift.start_datetime.date(), relieving_date) - if relieving_date - else prev_shift.start_datetime.date() - ) - else: - # no shift found - return None, None - return start_date, end_date - - def get_assigned_employee(self, from_date=None, consider_default_shift=False): - filters = {"shift_type": self.name, "docstatus": "1"} - if from_date: - filters["start_date"] = (">", from_date) - - assigned_employees = frappe.get_all("Shift Assignment", filters=filters, pluck="employee") - - if consider_default_shift: - filters = {"default_shift": self.name, "status": ["!=", "Inactive"]} - default_shift_employees = frappe.get_all("Employee", filters=filters, pluck="name") - - return list(set(assigned_employees + default_shift_employees)) - return assigned_employees - - -def process_auto_attendance_for_all_shifts(): - shift_list = frappe.get_all("Shift Type", "name", {"enable_auto_attendance": "1"}, as_list=True) - for shift in shift_list: - doc = frappe.get_doc("Shift Type", shift[0]) - doc.process_auto_attendance() diff --git a/erpnext/hr/doctype/shift_type/shift_type_dashboard.py b/erpnext/hr/doctype/shift_type/shift_type_dashboard.py deleted file mode 100644 index 920d8fd547..0000000000 --- a/erpnext/hr/doctype/shift_type/shift_type_dashboard.py +++ /dev/null @@ -1,8 +0,0 @@ -def get_data(): - return { - "fieldname": "shift", - "non_standard_fieldnames": {"Shift Request": "shift_type", "Shift Assignment": "shift_type"}, - "transactions": [ - {"items": ["Attendance", "Employee Checkin", "Shift Request", "Shift Assignment"]} - ], - } diff --git a/erpnext/hr/doctype/shift_type/test_records.json b/erpnext/hr/doctype/shift_type/test_records.json deleted file mode 100644 index 9040b915a1..0000000000 --- a/erpnext/hr/doctype/shift_type/test_records.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "doctype": "Shift Type", - "name": "Day Shift", - "start_time": "9:00:00", - "end_time": "18:00:00" - } -] diff --git a/erpnext/hr/doctype/shift_type/test_shift_type.py b/erpnext/hr/doctype/shift_type/test_shift_type.py deleted file mode 100644 index 0d75292a1e..0000000000 --- a/erpnext/hr/doctype/shift_type/test_shift_type.py +++ /dev/null @@ -1,382 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest -from datetime import datetime, timedelta - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, get_time, get_year_ending, get_year_start, getdate, now_datetime - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_application.test_leave_application import get_first_sunday -from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - -class TestShiftType(FrappeTestCase): - def setUp(self): - frappe.db.delete("Shift Type") - frappe.db.delete("Shift Assignment") - frappe.db.delete("Employee Checkin") - frappe.db.delete("Attendance") - - from_date = get_year_start(getdate()) - to_date = get_year_ending(getdate()) - self.holiday_list = make_holiday_list(from_date=from_date, to_date=to_date) - - def test_mark_attendance(self): - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - shift_type = setup_shift_type() - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("12:00:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"shift": shift_type.name}, ["status", "name"], as_dict=True - ) - self.assertEqual(attendance.status, "Present") - - def test_entry_and_exit_grace(self): - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - # doesn't mark late entry until 60 mins after shift start i.e. till 9 - # doesn't mark late entry until 60 mins before shift end i.e. 11 - shift_type = setup_shift_type( - enable_entry_grace_period=1, - enable_exit_grace_period=1, - late_entry_grace_period=60, - early_exit_grace_period=60, - ) - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("09:30:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("10:30:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", - {"shift": shift_type.name}, - ["status", "name", "late_entry", "early_exit"], - as_dict=True, - ) - self.assertEqual(attendance.status, "Present") - self.assertEqual(attendance.late_entry, 1) - self.assertEqual(attendance.early_exit, 1) - - def test_working_hours_threshold_for_half_day(self): - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type(shift_type="Half Day Test", working_hours_threshold_for_half_day=2) - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("09:30:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True - ) - self.assertEqual(attendance.status, "Half Day") - self.assertEqual(attendance.working_hours, 1.5) - - def test_working_hours_threshold_for_absent(self): - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type(shift_type="Absent Test", working_hours_threshold_for_absent=2) - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("09:30:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True - ) - self.assertEqual(attendance.status, "Absent") - self.assertEqual(attendance.working_hours, 1.5) - - def test_working_hours_threshold_for_absent_and_half_day_1(self): - # considers half day over absent - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type( - shift_type="Half Day + Absent Test", - working_hours_threshold_for_half_day=1, - working_hours_threshold_for_absent=2, - ) - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("08:45:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"shift": shift_type.name}, ["status", "working_hours"], as_dict=True - ) - self.assertEqual(attendance.status, "Half Day") - self.assertEqual(attendance.working_hours, 0.75) - - def test_working_hours_threshold_for_absent_and_half_day_2(self): - # considers absent over half day - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type( - shift_type="Half Day + Absent Test", - working_hours_threshold_for_half_day=1, - working_hours_threshold_for_absent=2, - ) - date = getdate() - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("09:30:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value("Attendance", {"shift": shift_type.name}, "status") - self.assertEqual(attendance, "Absent") - - def test_mark_absent_for_dates_with_no_attendance(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type(shift_type="Test Absent with no Attendance") - - # absentees are auto-marked one day after to wait for any manual attendance records - date = add_days(getdate(), -1) - make_shift_assignment(shift_type.name, employee, date) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"attendance_date": date, "employee": employee}, "status" - ) - self.assertEqual(attendance, "Absent") - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_skip_marking_absent_on_a_holiday(self): - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_type = setup_shift_type(shift_type="Test Absent with no Attendance") - shift_type.holiday_list = None - shift_type.save() - - # should not mark any attendance if no shift assignment is created - shift_type.process_auto_attendance() - attendance = frappe.db.get_value("Attendance", {"employee": employee}, "status") - self.assertIsNone(attendance) - - first_sunday = get_first_sunday(self.holiday_list, for_date=getdate()) - make_shift_assignment(shift_type.name, employee, first_sunday) - - shift_type.process_auto_attendance() - - attendance = frappe.db.get_value( - "Attendance", {"attendance_date": first_sunday, "employee": employee}, "status" - ) - self.assertIsNone(attendance) - - def test_get_start_and_end_dates(self): - date = getdate() - - doj = add_days(date, -30) - relieving_date = add_days(date, -5) - employee = make_employee( - "test_employee_dates@example.com", - company="_Test Company", - date_of_joining=doj, - relieving_date=relieving_date, - ) - shift_type = setup_shift_type( - shift_type="Test Absent with no Attendance", process_attendance_after=add_days(doj, 2) - ) - - make_shift_assignment(shift_type.name, employee, add_days(date, -25)) - - shift_type.process_auto_attendance() - - # should not mark absent before shift assignment/process attendance after date - attendance = frappe.db.get_value( - "Attendance", {"attendance_date": doj, "employee": employee}, "name" - ) - self.assertIsNone(attendance) - - # mark absent on Relieving Date - attendance = frappe.db.get_value( - "Attendance", {"attendance_date": relieving_date, "employee": employee}, "status" - ) - self.assertEquals(attendance, "Absent") - - # should not mark absent after Relieving Date - attendance = frappe.db.get_value( - "Attendance", {"attendance_date": add_days(relieving_date, 1), "employee": employee}, "name" - ) - self.assertIsNone(attendance) - - def test_skip_auto_attendance_for_duplicate_record(self): - # Skip auto attendance in case of duplicate attendance record - from erpnext.hr.doctype.attendance.attendance import mark_attendance - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - - shift_type = setup_shift_type() - date = getdate() - - # mark attendance - mark_attendance(employee, date, "Present") - make_shift_assignment(shift_type.name, employee, date) - - timestamp = datetime.combine(date, get_time("08:00:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_type.name) - - timestamp = datetime.combine(date, get_time("12:00:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_type.name) - - # auto attendance should skip marking - shift_type.process_auto_attendance() - - log_in.reload() - log_out.reload() - self.assertEqual(log_in.skip_auto_attendance, 1) - self.assertEqual(log_out.skip_auto_attendance, 1) - - def test_skip_auto_attendance_for_overlapping_shift(self): - # Skip auto attendance in case of overlapping shift attendance record - # this case won't occur in case of shift assignment, since it will not allow overlapping shifts to be assigned - # can happen if manual attendance records are created - from erpnext.hr.doctype.attendance.attendance import mark_attendance - from erpnext.hr.doctype.employee_checkin.test_employee_checkin import make_checkin - - employee = make_employee("test_employee_checkin@example.com", company="_Test Company") - shift_1 = setup_shift_type(shift_type="Shift 1", start_time="08:00:00", end_time="10:00:00") - shift_2 = setup_shift_type(shift_type="Shift 2", start_time="09:30:00", end_time="11:00:00") - - date = getdate() - - # mark attendance - mark_attendance(employee, date, "Present", shift=shift_1.name) - make_shift_assignment(shift_2.name, employee, date) - - timestamp = datetime.combine(date, get_time("09:30:00")) - log_in = make_checkin(employee, timestamp) - self.assertEqual(log_in.shift, shift_2.name) - - timestamp = datetime.combine(date, get_time("11:00:00")) - log_out = make_checkin(employee, timestamp) - self.assertEqual(log_out.shift, shift_2.name) - - # auto attendance should be skipped for shift 2 - # since it is already marked for overlapping shift 1 - shift_2.process_auto_attendance() - - log_in.reload() - log_out.reload() - self.assertEqual(log_in.skip_auto_attendance, 1) - self.assertEqual(log_out.skip_auto_attendance, 1) - - -def setup_shift_type(**args): - args = frappe._dict(args) - date = getdate() - - shift_type = frappe.get_doc( - { - "doctype": "Shift Type", - "__newname": args.shift_type or "_Test Shift", - "start_time": "08:00:00", - "end_time": "12:00:00", - "enable_auto_attendance": 1, - "determine_check_in_and_check_out": "Alternating entries as IN and OUT during the same shift", - "working_hours_calculation_based_on": "First Check-in and Last Check-out", - "begin_check_in_before_shift_start_time": 60, - "allow_check_out_after_shift_end_time": 60, - "process_attendance_after": add_days(date, -2), - "last_sync_of_checkin": now_datetime() + timedelta(days=1), - } - ) - - holiday_list = "Employee Checkin Test Holiday List" - if not frappe.db.exists("Holiday List", "Employee Checkin Test Holiday List"): - holiday_list = frappe.get_doc( - { - "doctype": "Holiday List", - "holiday_list_name": "Employee Checkin Test Holiday List", - "from_date": get_year_start(date), - "to_date": get_year_ending(date), - } - ).insert() - holiday_list = holiday_list.name - - shift_type.holiday_list = holiday_list - shift_type.update(args) - shift_type.save() - - return shift_type - - -def make_shift_assignment(shift_type, employee, start_date, end_date=None): - shift_assignment = frappe.get_doc( - { - "doctype": "Shift Assignment", - "shift_type": shift_type, - "company": "_Test Company", - "employee": employee, - "start_date": start_date, - "end_date": end_date, - } - ).insert() - shift_assignment.submit() - - return shift_assignment diff --git a/erpnext/hr/doctype/skill/__init__.py b/erpnext/hr/doctype/skill/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/skill/skill.js b/erpnext/hr/doctype/skill/skill.js deleted file mode 100644 index a939ff0dab..0000000000 --- a/erpnext/hr/doctype/skill/skill.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Skill', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/hr/doctype/skill/skill.json b/erpnext/hr/doctype/skill/skill.json deleted file mode 100644 index 4c8a8c92c1..0000000000 --- a/erpnext/hr/doctype/skill/skill.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 1, - "autoname": "field:skill_name", - "beta": 0, - "creation": "2019-04-16 09:54:39.486915", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 0, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 1, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_if_empty": 0, - "fieldname": "skill_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Skill Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 1 - }, - { - "allow_in_quick_entry": 1, - "fieldname": "description", - "fieldtype": "Text", - "label": "Description" - } - ], - "has_web_view": 0, - "hide_toolbar": 0, - "idx": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2021-02-26 10:55:00.536328", - "modified_by": "Administrator", - "module": "HR", - "name": "Skill", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1, - "track_seen": 0, - "track_views": 0 -} diff --git a/erpnext/hr/doctype/skill_assessment/__init__.py b/erpnext/hr/doctype/skill_assessment/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/skill_assessment/skill_assessment.json b/erpnext/hr/doctype/skill_assessment/skill_assessment.json deleted file mode 100644 index 8b935c4073..0000000000 --- a/erpnext/hr/doctype/skill_assessment/skill_assessment.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "actions": [], - "creation": "2021-04-12 17:07:39.656289", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "skill", - "rating" - ], - "fields": [ - { - "fieldname": "skill", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Skill", - "options": "Skill", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "rating", - "fieldtype": "Rating", - "in_list_view": 1, - "label": "Rating", - "reqd": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-04-12 17:18:14.032298", - "modified_by": "Administrator", - "module": "HR", - "name": "Skill Assessment", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/skill_assessment/skill_assessment.py b/erpnext/hr/doctype/skill_assessment/skill_assessment.py deleted file mode 100644 index 13775be6bd..0000000000 --- a/erpnext/hr/doctype/skill_assessment/skill_assessment.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class SkillAssessment(Document): - pass diff --git a/erpnext/hr/doctype/staffing_plan/__init__.py b/erpnext/hr/doctype/staffing_plan/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.js b/erpnext/hr/doctype/staffing_plan/staffing_plan.js deleted file mode 100644 index 228391ba00..0000000000 --- a/erpnext/hr/doctype/staffing_plan/staffing_plan.js +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Staffing Plan', { - setup: function(frm) { - frm.set_query("designation", "staffing_details", function() { - let designations = []; - (frm.doc.staffing_details || []).forEach(function(staff_detail) { - if(staff_detail.designation){ - designations.push(staff_detail.designation) - } - }) - // Filter out designations already selected in Staffing Plan Detail - return { - filters: [ - ['Designation', 'name', 'not in', designations], - ] - } - }); - - frm.set_query("department", function() { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - }, -}); - -frappe.ui.form.on('Staffing Plan Detail', { - designation: function(frm, cdt, cdn) { - let child = locals[cdt][cdn]; - if(frm.doc.company && child.designation) { - set_number_of_positions(frm, cdt, cdn); - } - }, - - vacancies: function(frm, cdt, cdn) { - let child = locals[cdt][cdn]; - if(child.vacancies < child.current_openings) { - frappe.throw(__("Vacancies cannot be lower than the current openings")); - } - set_number_of_positions(frm, cdt, cdn); - }, - - current_count: function(frm, cdt, cdn) { - set_number_of_positions(frm, cdt, cdn); - }, - - estimated_cost_per_position: function(frm, cdt, cdn) { - set_total_estimated_cost(frm, cdt, cdn); - } -}); - -var set_number_of_positions = function(frm, cdt, cdn) { - let child = locals[cdt][cdn]; - if (!child.designation) frappe.throw(__("Please enter the designation")); - frappe.call({ - "method": "erpnext.hr.doctype.staffing_plan.staffing_plan.get_designation_counts", - args: { - designation: child.designation, - company: frm.doc.company - }, - callback: function (data) { - if(data.message){ - frappe.model.set_value(cdt, cdn, 'current_count', data.message.employee_count); - frappe.model.set_value(cdt, cdn, 'current_openings', data.message.job_openings); - let total_positions = cint(data.message.employee_count) + cint(child.vacancies); - if (cint(child.number_of_positions) < total_positions){ - frappe.model.set_value(cdt, cdn, 'number_of_positions', total_positions); - } - } - else{ // No employees for this designation - frappe.model.set_value(cdt, cdn, 'current_count', 0); - frappe.model.set_value(cdt, cdn, 'current_openings', 0); - } - } - }); - refresh_field("staffing_details"); - set_total_estimated_cost(frm, cdt, cdn); -} - -// Note: Estimated Cost is calculated on number of Vacancies -var set_total_estimated_cost = function(frm, cdt, cdn) { - let child = locals[cdt][cdn] - if(child.vacancies > 0 && child.estimated_cost_per_position) { - frappe.model.set_value(cdt, cdn, 'total_estimated_cost', child.vacancies * child.estimated_cost_per_position); - } - else { - frappe.model.set_value(cdt, cdn, 'total_estimated_cost', 0); - } - set_total_estimated_budget(frm); -}; - -var set_total_estimated_budget = function(frm) { - let estimated_budget = 0.0 - if(frm.doc.staffing_details) { - (frm.doc.staffing_details || []).forEach(function(staff_detail) { - if(staff_detail.total_estimated_cost){ - estimated_budget += staff_detail.total_estimated_cost - } - }) - frm.set_value('total_estimated_budget', estimated_budget); - } -}; diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.json b/erpnext/hr/doctype/staffing_plan/staffing_plan.json deleted file mode 100644 index 9576bc306a..0000000000 --- a/erpnext/hr/doctype/staffing_plan/staffing_plan.json +++ /dev/null @@ -1,403 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "prompt", - "beta": 0, - "creation": "2018-04-13 18:07:21.582747", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "from_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "From Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "to_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "To Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "staffing_plan_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Staffing Plan Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "staffing_details", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Staffing Plan Detail", - "length": 0, - "no_copy": 0, - "options": "Staffing Plan Detail", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_8", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0.00", - "fieldname": "total_estimated_budget", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Total Estimated Budget", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Staffing Plan", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 1, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2018-05-28 18:30:27.041395", - "modified_by": "Administrator", - "module": "HR", - "name": "Staffing Plan", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "set_user_permissions": 0, - "share": 1, - "submit": 1, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.py b/erpnext/hr/doctype/staffing_plan/staffing_plan.py deleted file mode 100644 index ce7e50f7f4..0000000000 --- a/erpnext/hr/doctype/staffing_plan/staffing_plan.py +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cint, flt, getdate, nowdate -from frappe.utils.nestedset import get_descendants_of - - -class SubsidiaryCompanyError(frappe.ValidationError): - pass - - -class ParentCompanyError(frappe.ValidationError): - pass - - -class StaffingPlan(Document): - def validate(self): - self.validate_period() - self.validate_details() - self.set_total_estimated_budget() - - def validate_period(self): - # Validate Dates - if self.from_date and self.to_date and self.from_date > self.to_date: - frappe.throw(_("From Date cannot be greater than To Date")) - - def validate_details(self): - for detail in self.get("staffing_details"): - self.validate_overlap(detail) - self.validate_with_subsidiary_plans(detail) - self.validate_with_parent_plan(detail) - - def set_total_estimated_budget(self): - self.total_estimated_budget = 0 - - for detail in self.get("staffing_details"): - # Set readonly fields - self.set_number_of_positions(detail) - designation_counts = get_designation_counts(detail.designation, self.company) - detail.current_count = designation_counts["employee_count"] - detail.current_openings = designation_counts["job_openings"] - - detail.total_estimated_cost = 0 - if detail.number_of_positions > 0: - if detail.vacancies and detail.estimated_cost_per_position: - detail.total_estimated_cost = cint(detail.vacancies) * flt(detail.estimated_cost_per_position) - - self.total_estimated_budget += detail.total_estimated_cost - - def set_number_of_positions(self, detail): - detail.number_of_positions = cint(detail.vacancies) + cint(detail.current_count) - - def validate_overlap(self, staffing_plan_detail): - # Validate if any submitted Staffing Plan exist for any Designations in this plan - # and spd.vacancies>0 ? - overlap = frappe.db.sql( - """select spd.parent - from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name - where spd.designation=%s and sp.docstatus=1 - and sp.to_date >= %s and sp.from_date <= %s and sp.company = %s - """, - (staffing_plan_detail.designation, self.from_date, self.to_date, self.company), - ) - if overlap and overlap[0][0]: - frappe.throw( - _("Staffing Plan {0} already exist for designation {1}").format( - overlap[0][0], staffing_plan_detail.designation - ) - ) - - def validate_with_parent_plan(self, staffing_plan_detail): - if not frappe.get_cached_value("Company", self.company, "parent_company"): - return # No parent, nothing to validate - - # Get staffing plan applicable for the company (Parent Company) - parent_plan_details = get_active_staffing_plan_details( - self.company, staffing_plan_detail.designation, self.from_date, self.to_date - ) - if not parent_plan_details: - return # no staffing plan for any parent Company in hierarchy - - # Fetch parent company which owns the staffing plan. NOTE: Parent could be higher up in the hierarchy - parent_company = frappe.db.get_value("Staffing Plan", parent_plan_details[0].name, "company") - # Parent plan available, validate with parent, siblings as well as children of staffing plan Company - if cint(staffing_plan_detail.vacancies) > cint(parent_plan_details[0].vacancies) or flt( - staffing_plan_detail.total_estimated_cost - ) > flt(parent_plan_details[0].total_estimated_cost): - frappe.throw( - _( - "You can only plan for upto {0} vacancies and budget {1} for {2} as per staffing plan {3} for parent company {4}." - ).format( - cint(parent_plan_details[0].vacancies), - parent_plan_details[0].total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), - parent_plan_details[0].name, - parent_company, - ), - ParentCompanyError, - ) - - # Get vacanices already planned for all companies down the hierarchy of Parent Company - lft, rgt = frappe.get_cached_value("Company", parent_company, ["lft", "rgt"]) - all_sibling_details = frappe.db.sql( - """select sum(spd.vacancies) as vacancies, - sum(spd.total_estimated_cost) as total_estimated_cost - from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name - where spd.designation=%s and sp.docstatus=1 - and sp.to_date >= %s and sp.from_date <=%s - and sp.company in (select name from tabCompany where lft > %s and rgt < %s) - """, - (staffing_plan_detail.designation, self.from_date, self.to_date, lft, rgt), - as_dict=1, - )[0] - - if ( - cint(parent_plan_details[0].vacancies) - < (cint(staffing_plan_detail.vacancies) + cint(all_sibling_details.vacancies)) - ) or ( - flt(parent_plan_details[0].total_estimated_cost) - < ( - flt(staffing_plan_detail.total_estimated_cost) + flt(all_sibling_details.total_estimated_cost) - ) - ): - frappe.throw( - _( - "{0} vacancies and {1} budget for {2} already planned for subsidiary companies of {3}. You can only plan for upto {4} vacancies and and budget {5} as per staffing plan {6} for parent company {3}." - ).format( - cint(all_sibling_details.vacancies), - all_sibling_details.total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), - parent_company, - cint(parent_plan_details[0].vacancies), - parent_plan_details[0].total_estimated_cost, - parent_plan_details[0].name, - ) - ) - - def validate_with_subsidiary_plans(self, staffing_plan_detail): - # Valdate this plan with all child company plan - children_details = frappe.db.sql( - """select sum(spd.vacancies) as vacancies, - sum(spd.total_estimated_cost) as total_estimated_cost - from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name - where spd.designation=%s and sp.docstatus=1 - and sp.to_date >= %s and sp.from_date <=%s - and sp.company in (select name from tabCompany where parent_company = %s) - """, - (staffing_plan_detail.designation, self.from_date, self.to_date, self.company), - as_dict=1, - )[0] - - if ( - children_details - and cint(staffing_plan_detail.vacancies) < cint(children_details.vacancies) - or flt(staffing_plan_detail.total_estimated_cost) < flt(children_details.total_estimated_cost) - ): - frappe.throw( - _( - "Subsidiary companies have already planned for {1} vacancies at a budget of {2}. Staffing Plan for {0} should allocate more vacancies and budget for {3} than planned for its subsidiary companies" - ).format( - self.company, - cint(children_details.vacancies), - children_details.total_estimated_cost, - frappe.bold(staffing_plan_detail.designation), - ), - SubsidiaryCompanyError, - ) - - -@frappe.whitelist() -def get_designation_counts(designation, company): - if not designation: - return False - - employee_counts = {} - company_set = get_descendants_of("Company", company) - company_set.append(company) - - employee_counts["employee_count"] = frappe.db.get_value( - "Employee", - filters={"designation": designation, "status": "Active", "company": ("in", company_set)}, - fieldname=["count(name)"], - ) - - employee_counts["job_openings"] = frappe.db.get_value( - "Job Opening", - filters={"designation": designation, "status": "Open", "company": ("in", company_set)}, - fieldname=["count(name)"], - ) - - return employee_counts - - -@frappe.whitelist() -def get_active_staffing_plan_details(company, designation, from_date=None, to_date=None): - if from_date is None: - from_date = getdate(nowdate()) - if to_date is None: - to_date = getdate(nowdate()) - if not company or not designation: - frappe.throw(_("Please select Company and Designation")) - - staffing_plan = frappe.db.sql( - """ - select sp.name, spd.vacancies, spd.total_estimated_cost - from `tabStaffing Plan Detail` spd join `tabStaffing Plan` sp on spd.parent=sp.name - where company=%s and spd.designation=%s and sp.docstatus=1 - and to_date >= %s and from_date <= %s """, - (company, designation, from_date, to_date), - as_dict=1, - ) - - if not staffing_plan: - parent_company = frappe.get_cached_value("Company", company, "parent_company") - if parent_company: - staffing_plan = get_active_staffing_plan_details( - parent_company, designation, from_date, to_date - ) - - # Only a single staffing plan can be active for a designation on given date - return staffing_plan if staffing_plan else None diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py b/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py deleted file mode 100644 index 0f555d9db2..0000000000 --- a/erpnext/hr/doctype/staffing_plan/staffing_plan_dashboard.py +++ /dev/null @@ -1,5 +0,0 @@ -def get_data(): - return { - "fieldname": "staffing_plan", - "transactions": [{"items": ["Job Opening"]}], - } diff --git a/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py b/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py deleted file mode 100644 index a3adbbd56a..0000000000 --- a/erpnext/hr/doctype/staffing_plan/test_staffing_plan.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, nowdate - -from erpnext.hr.doctype.staffing_plan.staffing_plan import ( - ParentCompanyError, - SubsidiaryCompanyError, -) - -test_dependencies = ["Designation"] - - -class TestStaffingPlan(unittest.TestCase): - def test_staffing_plan(self): - _set_up() - frappe.db.set_value("Company", "_Test Company 3", "is_group", 1) - if frappe.db.exists("Staffing Plan", "Test"): - return - staffing_plan = frappe.new_doc("Staffing Plan") - staffing_plan.company = "_Test Company 10" - staffing_plan.name = "Test" - staffing_plan.from_date = nowdate() - staffing_plan.to_date = add_days(nowdate(), 10) - staffing_plan.append( - "staffing_details", - {"designation": "Designer", "vacancies": 6, "estimated_cost_per_position": 50000}, - ) - staffing_plan.insert() - staffing_plan.submit() - self.assertEqual(staffing_plan.total_estimated_budget, 300000.00) - - def test_staffing_plan_subsidiary_company(self): - self.test_staffing_plan() - if frappe.db.exists("Staffing Plan", "Test 1"): - return - staffing_plan = frappe.new_doc("Staffing Plan") - staffing_plan.company = "_Test Company 3" - staffing_plan.name = "Test 1" - staffing_plan.from_date = nowdate() - staffing_plan.to_date = add_days(nowdate(), 10) - staffing_plan.append( - "staffing_details", - {"designation": "Designer", "vacancies": 3, "estimated_cost_per_position": 45000}, - ) - self.assertRaises(SubsidiaryCompanyError, staffing_plan.insert) - - def test_staffing_plan_parent_company(self): - _set_up() - if frappe.db.exists("Staffing Plan", "Test"): - return - staffing_plan = frappe.new_doc("Staffing Plan") - staffing_plan.company = "_Test Company 3" - staffing_plan.name = "Test" - staffing_plan.from_date = nowdate() - staffing_plan.to_date = add_days(nowdate(), 10) - staffing_plan.append( - "staffing_details", - {"designation": "Designer", "vacancies": 7, "estimated_cost_per_position": 50000}, - ) - staffing_plan.insert() - staffing_plan.submit() - self.assertEqual(staffing_plan.total_estimated_budget, 350000.00) - if frappe.db.exists("Staffing Plan", "Test 1"): - return - staffing_plan = frappe.new_doc("Staffing Plan") - staffing_plan.company = "_Test Company 10" - staffing_plan.name = "Test 1" - staffing_plan.from_date = nowdate() - staffing_plan.to_date = add_days(nowdate(), 10) - staffing_plan.append( - "staffing_details", - {"designation": "Designer", "vacancies": 7, "estimated_cost_per_position": 60000}, - ) - staffing_plan.insert() - self.assertRaises(ParentCompanyError, staffing_plan.submit) - - -def _set_up(): - for doctype in ["Staffing Plan", "Staffing Plan Detail"]: - frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype)) - make_company() - - -def make_company(): - if frappe.db.exists("Company", "_Test Company 10"): - return - - company = frappe.new_doc("Company") - company.company_name = "_Test Company 10" - company.abbr = "_TC10" - company.parent_company = "_Test Company 3" - company.default_currency = "INR" - company.country = "Pakistan" - company.insert() diff --git a/erpnext/hr/doctype/staffing_plan_detail/__init__.py b/erpnext/hr/doctype/staffing_plan_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json b/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json deleted file mode 100644 index 77164c4e67..0000000000 --- a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "creation": "2018-04-13 18:04:20.978931", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "designation", - "vacancies", - "estimated_cost_per_position", - "total_estimated_cost", - "column_break_5", - "current_count", - "current_openings", - "number_of_positions" - ], - "fields": [ - { - "fieldname": "designation", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Designation", - "options": "Designation", - "reqd": 1 - }, - { - "fieldname": "number_of_positions", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Number Of Positions", - "read_only": 1 - }, - { - "fieldname": "estimated_cost_per_position", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Estimated Cost Per Position" - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "current_count", - "fieldtype": "Int", - "label": "Current Count", - "read_only": 1 - }, - { - "fieldname": "current_openings", - "fieldtype": "Int", - "label": "Current Openings", - "read_only": 1 - }, - { - "fieldname": "vacancies", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Vacancies" - }, - { - "fieldname": "total_estimated_cost", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Estimated Cost", - "read_only": 1 - } - ], - "istable": 1, - "modified": "2019-06-24 18:40:37.140178", - "modified_by": "Administrator", - "module": "HR", - "name": "Staffing Plan Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py b/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py deleted file mode 100644 index 6749690934..0000000000 --- a/erpnext/hr/doctype/staffing_plan_detail/staffing_plan_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class StaffingPlanDetail(Document): - pass diff --git a/erpnext/hr/doctype/training_event/__init__.py b/erpnext/hr/doctype/training_event/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_event/test_training_event.py b/erpnext/hr/doctype/training_event/test_training_event.py deleted file mode 100644 index ec7eb74da9..0000000000 --- a/erpnext/hr/doctype/training_event/test_training_event.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, today - -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee - - -class TestTrainingEvent(unittest.TestCase): - def setUp(self): - create_training_program("Basic Training") - employee = make_employee("robert_loan@trainig.com") - employee2 = make_employee("suzie.tan@trainig.com") - self.attendees = [{"employee": employee}, {"employee": employee2}] - - def test_training_event_status_update(self): - training_event = create_training_event(self.attendees) - training_event.submit() - - training_event.event_status = "Completed" - training_event.save() - training_event.reload() - - for entry in training_event.employees: - self.assertEqual(entry.status, "Completed") - - training_event.event_status = "Scheduled" - training_event.save() - training_event.reload() - - for entry in training_event.employees: - self.assertEqual(entry.status, "Open") - - def tearDown(self): - frappe.db.rollback() - - -def create_training_program(training_program): - if not frappe.db.get_value("Training Program", training_program): - frappe.get_doc( - { - "doctype": "Training Program", - "training_program": training_program, - "description": training_program, - } - ).insert() - - -def create_training_event(attendees): - return frappe.get_doc( - { - "doctype": "Training Event", - "event_name": "Basic Training Event", - "training_program": "Basic Training", - "location": "Union Square", - "start_time": add_days(today(), 5), - "end_time": add_days(today(), 6), - "introduction": "Welcome to the Basic Training Event", - "employees": attendees, - } - ).insert() diff --git a/erpnext/hr/doctype/training_event/training_event.js b/erpnext/hr/doctype/training_event/training_event.js deleted file mode 100644 index 642e6a1fd7..0000000000 --- a/erpnext/hr/doctype/training_event/training_event.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Training Event', { - onload_post_render: function (frm) { - frm.get_field("employees").grid.set_multiple_add("employee"); - }, - refresh: function (frm) { - if (!frm.doc.__islocal) { - frm.add_custom_button(__("Training Result"), function () { - frappe.route_options = { - training_event: frm.doc.name - }; - frappe.set_route("List", "Training Result"); - }); - frm.add_custom_button(__("Training Feedback"), function () { - frappe.route_options = { - training_event: frm.doc.name - }; - frappe.set_route("List", "Training Feedback"); - }); - } - frm.events.set_employee_query(frm); - }, - - set_employee_query: function(frm) { - let emp = []; - for (let d in frm.doc.employees) { - if (frm.doc.employees[d].employee) { - emp.push(frm.doc.employees[d].employee); - } - } - frm.set_query("employee", "employees", function () { - return { - filters: { - name: ["NOT IN", emp], - status: "Active" - } - }; - }); - } -}); - -frappe.ui.form.on("Training Event Employee", { - employee: function(frm) { - frm.events.set_employee_query(frm); - } -}); diff --git a/erpnext/hr/doctype/training_event/training_event.json b/erpnext/hr/doctype/training_event/training_event.json deleted file mode 100644 index 42e02ca3bf..0000000000 --- a/erpnext/hr/doctype/training_event/training_event.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:event_name", - "creation": "2016-08-08 04:53:58.355206", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "event_name", - "training_program", - "event_status", - "has_certificate", - "column_break_2", - "type", - "level", - "company", - "section_break_4", - "trainer_name", - "trainer_email", - "column_break_7", - "supplier", - "contact_number", - "section_break_9", - "course", - "location", - "column_break_12", - "start_time", - "end_time", - "section_break_15", - "introduction", - "section_break_18", - "employees", - "amended_from", - "employee_emails" - ], - "fields": [ - { - "fieldname": "event_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Event Name", - "no_copy": 1, - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "training_program", - "fieldtype": "Link", - "label": "Training Program", - "options": "Training Program" - }, - { - "allow_on_submit": 1, - "fieldname": "event_status", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Event Status", - "options": "Scheduled\nCompleted\nCancelled", - "reqd": 1 - }, - { - "default": "0", - "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Conference' || doc.type == 'Exam'", - "fieldname": "has_certificate", - "fieldtype": "Check", - "label": "Has Certificate" - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fieldname": "type", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Type", - "options": "Seminar\nTheory\nWorkshop\nConference\nExam\nInternet\nSelf-Study", - "reqd": 1 - }, - { - "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Exam'", - "fieldname": "level", - "fieldtype": "Select", - "label": "Level", - "options": "\nBeginner\nIntermediate\nAdvance" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "fieldname": "trainer_name", - "fieldtype": "Data", - "label": "Trainer Name" - }, - { - "fieldname": "trainer_email", - "fieldtype": "Data", - "label": "Trainer Email" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "fieldname": "supplier", - "fieldtype": "Link", - "label": "Supplier", - "options": "Supplier" - }, - { - "fieldname": "contact_number", - "fieldtype": "Data", - "label": "Contact Number" - }, - { - "fieldname": "section_break_9", - "fieldtype": "Section Break" - }, - { - "fieldname": "course", - "fieldtype": "Data", - "in_standard_filter": 1, - "label": "Course" - }, - { - "fieldname": "location", - "fieldtype": "Data", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Location", - "reqd": 1 - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fieldname": "start_time", - "fieldtype": "Datetime", - "label": "Start Time", - "reqd": 1 - }, - { - "fieldname": "end_time", - "fieldtype": "Datetime", - "label": "End Time", - "reqd": 1 - }, - { - "fieldname": "section_break_15", - "fieldtype": "Section Break" - }, - { - "fieldname": "introduction", - "fieldtype": "Text Editor", - "label": "Introduction", - "reqd": 1 - }, - { - "fieldname": "section_break_18", - "fieldtype": "Section Break", - "label": "Attendees" - }, - { - "allow_on_submit": 1, - "fieldname": "employees", - "fieldtype": "Table", - "label": "Employees", - "options": "Training Event Employee" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Training Event", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "employee_emails", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Employee Emails", - "options": "Email" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-04-28 13:29:35.139497", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Event", - "naming_rule": "By fieldname", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "event_name", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "event_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_event/training_event.py b/erpnext/hr/doctype/training_event/training_event.py deleted file mode 100644 index 59972bb2f3..0000000000 --- a/erpnext/hr/doctype/training_event/training_event.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import time_diff_in_seconds - -from erpnext.hr.doctype.employee.employee import get_employee_emails - - -class TrainingEvent(Document): - def validate(self): - self.set_employee_emails() - self.validate_period() - - def on_update_after_submit(self): - self.set_status_for_attendees() - - def set_employee_emails(self): - self.employee_emails = ", ".join(get_employee_emails([d.employee for d in self.employees])) - - def validate_period(self): - if time_diff_in_seconds(self.end_time, self.start_time) <= 0: - frappe.throw(_("End time cannot be before start time")) - - def set_status_for_attendees(self): - if self.event_status == "Completed": - for employee in self.employees: - if employee.attendance == "Present" and employee.status != "Feedback Submitted": - employee.status = "Completed" - - elif self.event_status == "Scheduled": - for employee in self.employees: - employee.status = "Open" - - self.db_update_all() diff --git a/erpnext/hr/doctype/training_event/training_event_calendar.js b/erpnext/hr/doctype/training_event/training_event_calendar.js deleted file mode 100644 index cb168c01d5..0000000000 --- a/erpnext/hr/doctype/training_event/training_event_calendar.js +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.views.calendar["Training Event"] = { - field_map: { - "start": "start_time", - "end": "end_time", - "id": "name", - "title": "event_name", - "allDay": "allDay" - }, - gantt: true, - get_events_method: "frappe.desk.calendar.get_events", -} diff --git a/erpnext/hr/doctype/training_event/training_event_dashboard.py b/erpnext/hr/doctype/training_event/training_event_dashboard.py deleted file mode 100644 index ca13938e58..0000000000 --- a/erpnext/hr/doctype/training_event/training_event_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "training_event", - "transactions": [ - {"items": ["Training Result", "Training Feedback"]}, - ], - } diff --git a/erpnext/hr/doctype/training_event_employee/__init__.py b/erpnext/hr/doctype/training_event_employee/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_event_employee/training_event_employee.json b/erpnext/hr/doctype/training_event_employee/training_event_employee.json deleted file mode 100644 index bcb7d5e5bc..0000000000 --- a/erpnext/hr/doctype/training_event_employee/training_event_employee.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "actions": [], - "creation": "2016-08-08 05:33:39.965305", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "column_break_3", - "status", - "attendance", - "is_mandatory" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "no_copy": 1, - "options": "Employee" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "label": "Employee Name" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "allow_on_submit": 1, - "default": "Open", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "no_copy": 1, - "options": "Open\nInvited\nCompleted\nFeedback Submitted" - }, - { - "fieldname": "attendance", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Attendance", - "options": "Present\nAbsent" - }, - { - "columns": 2, - "default": "1", - "fieldname": "is_mandatory", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Is Mandatory" - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-07-02 17:20:27.630176", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Event Employee", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_event_employee/training_event_employee.py b/erpnext/hr/doctype/training_event_employee/training_event_employee.py deleted file mode 100644 index 5dce6e17c0..0000000000 --- a/erpnext/hr/doctype/training_event_employee/training_event_employee.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class TrainingEventEmployee(Document): - pass diff --git a/erpnext/hr/doctype/training_feedback/__init__.py b/erpnext/hr/doctype/training_feedback/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_feedback/test_training_feedback.py b/erpnext/hr/doctype/training_feedback/test_training_feedback.py deleted file mode 100644 index c787b7038f..0000000000 --- a/erpnext/hr/doctype/training_feedback/test_training_feedback.py +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - -from erpnext.hr.doctype.training_event.test_training_event import ( - create_training_event, - create_training_program, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_employee - - -class TestTrainingFeedback(unittest.TestCase): - def setUp(self): - create_training_program("Basic Training") - self.employee = make_employee("robert_loan@trainig.com") - self.employee2 = make_employee("suzie.tan@trainig.com") - self.attendees = [{"employee": self.employee}] - - def test_employee_validations_for_feedback(self): - training_event = create_training_event(self.attendees) - training_event.submit() - - training_event.event_status = "Completed" - training_event.save() - training_event.reload() - - # should not allow creating feedback since employee2 was not part of the event - feedback = create_training_feedback(training_event.name, self.employee2) - self.assertRaises(frappe.ValidationError, feedback.save) - - # cannot record feedback for absent employee - employee = frappe.db.get_value( - "Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "name" - ) - - frappe.db.set_value("Training Event Employee", employee, "attendance", "Absent") - feedback = create_training_feedback(training_event.name, self.employee) - self.assertRaises(frappe.ValidationError, feedback.save) - - def test_training_feedback_status(self): - training_event = create_training_event(self.attendees) - training_event.submit() - - training_event.event_status = "Completed" - training_event.save() - training_event.reload() - - feedback = create_training_feedback(training_event.name, self.employee) - feedback.submit() - - status = frappe.db.get_value( - "Training Event Employee", {"parent": training_event.name, "employee": self.employee}, "status" - ) - - self.assertEqual(status, "Feedback Submitted") - - def tearDown(self): - frappe.db.rollback() - - -def create_training_feedback(event, employee): - return frappe.get_doc( - { - "doctype": "Training Feedback", - "training_event": event, - "employee": employee, - "feedback": "Test", - } - ) diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.js b/erpnext/hr/doctype/training_feedback/training_feedback.js deleted file mode 100644 index 5e875c1b43..0000000000 --- a/erpnext/hr/doctype/training_feedback/training_feedback.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Training Feedback', { - onload: function(frm) { - frm.add_fetch("training_event", "course", "course"); - frm.add_fetch("training_event", "event_name", "event_name"); - frm.add_fetch("training_event", "trainer_name", "trainer_name"); - } -}); diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.json b/erpnext/hr/doctype/training_feedback/training_feedback.json deleted file mode 100644 index e968911776..0000000000 --- a/erpnext/hr/doctype/training_feedback/training_feedback.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "actions": [], - "autoname": "HR-TRF-.YYYY.-.#####", - "creation": "2022-01-27 13:14:35.935580", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "course", - "column_break_3", - "training_event", - "event_name", - "trainer_name", - "section_break_6", - "feedback", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "in_global_search": 1, - "label": "Employee Name" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "training_event.course", - "fieldname": "course", - "fieldtype": "Data", - "label": "Course", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "training_event", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Training Event", - "options": "Training Event", - "reqd": 1 - }, - { - "fetch_from": "training_event.event_name", - "fieldname": "event_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Event Name", - "read_only": 1 - }, - { - "fetch_from": "training_event.trainer_name", - "fieldname": "trainer_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Trainer Name", - "read_only": 1 - }, - { - "fieldname": "section_break_6", - "fieldtype": "Section Break" - }, - { - "fieldname": "feedback", - "fieldtype": "Text", - "label": "Feedback", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Training Feedback", - "print_hide": 1, - "read_only": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-04-28 13:32:29.261421", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Feedback", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee_name, training_event, event_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.py b/erpnext/hr/doctype/training_feedback/training_feedback.py deleted file mode 100644 index d5de28ed2d..0000000000 --- a/erpnext/hr/doctype/training_feedback/training_feedback.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class TrainingFeedback(Document): - def validate(self): - training_event = frappe.get_doc("Training Event", self.training_event) - if training_event.docstatus != 1: - frappe.throw(_("{0} must be submitted").format(_("Training Event"))) - - emp_event_details = frappe.db.get_value( - "Training Event Employee", - {"parent": self.training_event, "employee": self.employee}, - ["name", "attendance"], - as_dict=True, - ) - - if not emp_event_details: - frappe.throw( - _("Employee {0} not found in Training Event Participants.").format( - frappe.bold(self.employee_name) - ) - ) - - if emp_event_details.attendance == "Absent": - frappe.throw(_("Feedback cannot be recorded for an absent Employee.")) - - def on_submit(self): - employee = frappe.db.get_value( - "Training Event Employee", {"parent": self.training_event, "employee": self.employee} - ) - - if employee: - frappe.db.set_value("Training Event Employee", employee, "status", "Feedback Submitted") - - def on_cancel(self): - employee = frappe.db.get_value( - "Training Event Employee", {"parent": self.training_event, "employee": self.employee} - ) - - if employee: - frappe.db.set_value("Training Event Employee", employee, "status", "Completed") diff --git a/erpnext/hr/doctype/training_program/__init__.py b/erpnext/hr/doctype/training_program/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_program/test_training_program.py b/erpnext/hr/doctype/training_program/test_training_program.py deleted file mode 100644 index 5000705ab2..0000000000 --- a/erpnext/hr/doctype/training_program/test_training_program.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestTrainingProgram(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/training_program/training_program.js b/erpnext/hr/doctype/training_program/training_program.js deleted file mode 100644 index a4ccf54063..0000000000 --- a/erpnext/hr/doctype/training_program/training_program.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Training Program', { -}); diff --git a/erpnext/hr/doctype/training_program/training_program.json b/erpnext/hr/doctype/training_program/training_program.json deleted file mode 100644 index 522d5e9e4f..0000000000 --- a/erpnext/hr/doctype/training_program/training_program.json +++ /dev/null @@ -1,454 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 1, - "autoname": "field:training_program", - "beta": 0, - "creation": "2017-10-11 04:43:17.230065", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "training_program", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Training Program", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 1, - "bold": 1, - "collapsible": 0, - "columns": 0, - "default": "Scheduled", - "fieldname": "status", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Status", - "length": 0, - "no_copy": 0, - "options": "Scheduled\nCompleted\nCancelled", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "options": "Company", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "trainer_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Trainer Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "trainer_email", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Trainer Email", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_8", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "supplier", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Supplier", - "length": 0, - "no_copy": 0, - "options": "Supplier", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "contact_number", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Contact Number", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_11", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "description", - "fieldtype": "Text Editor", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Training Program", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2017-11-27 08:12:03.649247", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Program", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "training_program", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_program/training_program.py b/erpnext/hr/doctype/training_program/training_program.py deleted file mode 100644 index 96b2fd7002..0000000000 --- a/erpnext/hr/doctype/training_program/training_program.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class TrainingProgram(Document): - pass diff --git a/erpnext/hr/doctype/training_program/training_program_dashboard.py b/erpnext/hr/doctype/training_program/training_program_dashboard.py deleted file mode 100644 index 1735db18e1..0000000000 --- a/erpnext/hr/doctype/training_program/training_program_dashboard.py +++ /dev/null @@ -1,10 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "training_program", - "transactions": [ - {"label": _("Training Events"), "items": ["Training Event"]}, - ], - } diff --git a/erpnext/hr/doctype/training_result/__init__.py b/erpnext/hr/doctype/training_result/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_result/test_training_result.py b/erpnext/hr/doctype/training_result/test_training_result.py deleted file mode 100644 index 136543cbe1..0000000000 --- a/erpnext/hr/doctype/training_result/test_training_result.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -# test_records = frappe.get_test_records('Training Result') - - -class TestTrainingResult(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/training_result/training_result.js b/erpnext/hr/doctype/training_result/training_result.js deleted file mode 100644 index 718b383e72..0000000000 --- a/erpnext/hr/doctype/training_result/training_result.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Training Result', { - onload: function(frm) { - frm.trigger("training_event"); - }, - - training_event: function(frm) { - frm.trigger("training_event"); - }, - - training_event: function(frm) { - if (frm.doc.training_event && !frm.doc.docstatus && !frm.doc.employees) { - frappe.call({ - method: "erpnext.hr.doctype.training_result.training_result.get_employees", - args: { - "training_event": frm.doc.training_event - }, - callback: function(r) { - frm.set_value("employees" ,""); - if (r.message) { - $.each(r.message, function(i, d) { - var row = frappe.model.add_child(frm.doc, "Training Result Employee", "employees"); - row.employee = d.employee; - row.employee_name = d.employee_name; - }); - } - refresh_field("employees"); - } - }); - } - } -}); diff --git a/erpnext/hr/doctype/training_result/training_result.json b/erpnext/hr/doctype/training_result/training_result.json deleted file mode 100644 index f28669e3c2..0000000000 --- a/erpnext/hr/doctype/training_result/training_result.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "actions": [], - "allow_rename": 1, - "autoname": "HR-TRR-.YYYY.-.#####", - "creation": "2016-11-04 02:13:48.407576", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "training_event", - "section_break_3", - "employees", - "amended_from", - "employee_emails" - ], - "fields": [ - { - "fieldname": "training_event", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Training Event", - "options": "Training Event", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "section_break_3", - "fieldtype": "Section Break" - }, - { - "fieldname": "employees", - "fieldtype": "Table", - "label": "Employees", - "options": "Training Result Employee" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Training Result", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "employee_emails", - "fieldtype": "Small Text", - "hidden": 1, - "label": "Employee Emails", - "options": "Email" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-18 19:31:44.900034", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Result", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "training_event", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "training_event" -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_result/training_result.py b/erpnext/hr/doctype/training_result/training_result.py deleted file mode 100644 index 48a5b2c2e9..0000000000 --- a/erpnext/hr/doctype/training_result/training_result.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - -from erpnext.hr.doctype.employee.employee import get_employee_emails - - -class TrainingResult(Document): - def validate(self): - training_event = frappe.get_doc("Training Event", self.training_event) - if training_event.docstatus != 1: - frappe.throw(_("{0} must be submitted").format(_("Training Event"))) - - self.employee_emails = ", ".join(get_employee_emails([d.employee for d in self.employees])) - - def on_submit(self): - training_event = frappe.get_doc("Training Event", self.training_event) - training_event.status = "Completed" - for e in self.employees: - for e1 in training_event.employees: - if e1.employee == e.employee: - e1.status = "Completed" - break - - training_event.save() - - -@frappe.whitelist() -def get_employees(training_event): - return frappe.get_doc("Training Event", training_event).employees diff --git a/erpnext/hr/doctype/training_result_employee/__init__.py b/erpnext/hr/doctype/training_result_employee/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/training_result_employee/training_result_employee.json b/erpnext/hr/doctype/training_result_employee/training_result_employee.json deleted file mode 100644 index c4747545d0..0000000000 --- a/erpnext/hr/doctype/training_result_employee/training_result_employee.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2016-11-04 02:39:12.825569", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Employee Name", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Department", - "length": 0, - "no_copy": 0, - "options": "Department", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "hours", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Hours", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grade", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Grade", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_7", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "comments", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Comments", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2019-01-30 11:28:14.337778", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Result Employee", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0, - "track_views": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/training_result_employee/training_result_employee.py b/erpnext/hr/doctype/training_result_employee/training_result_employee.py deleted file mode 100644 index e048ff5341..0000000000 --- a/erpnext/hr/doctype/training_result_employee/training_result_employee.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class TrainingResultEmployee(Document): - pass diff --git a/erpnext/hr/doctype/travel_itinerary/__init__.py b/erpnext/hr/doctype/travel_itinerary/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json deleted file mode 100644 index f887027b28..0000000000 --- a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json +++ /dev/null @@ -1,512 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2018-05-15 07:40:59.181192", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "travel_from", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Travel From", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "travel_to", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Travel To", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "mode_of_travel", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Mode of Travel", - "length": 0, - "no_copy": 0, - "options": "\nFlight\nTrain\nTaxi\nRented Car", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "meal_preference", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Meal Preference", - "length": 0, - "no_copy": 0, - "options": "\nVegetarian\nNon-Vegetarian\nGluten Free\nNon Diary", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "travel_advance_required", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Travel Advance Required", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "travel_advance_required", - "fieldname": "advance_amount", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Advance Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_6", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "departure_date", - "fieldtype": "Datetime", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Departure Datetime", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "arrival_date", - "fieldtype": "Datetime", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Arrival Datetime", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "lodging_required", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Lodging Required", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "lodging_required", - "fieldname": "preferred_area_for_lodging", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Preferred Area for Lodging", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "lodging_required", - "fieldname": "check_in_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Check-in Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "lodging_required", - "fieldname": "check_out_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Check-out Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_14", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "other_details", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Other Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-05-15 09:55:20.138108", - "modified_by": "Administrator", - "module": "HR", - "name": "Travel Itinerary", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py deleted file mode 100644 index 529909b0e0..0000000000 --- a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class TravelItinerary(Document): - pass diff --git a/erpnext/hr/doctype/travel_request/__init__.py b/erpnext/hr/doctype/travel_request/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/travel_request/test_travel_request.py b/erpnext/hr/doctype/travel_request/test_travel_request.py deleted file mode 100644 index e29a1ca648..0000000000 --- a/erpnext/hr/doctype/travel_request/test_travel_request.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestTravelRequest(unittest.TestCase): - pass diff --git a/erpnext/hr/doctype/travel_request/travel_request.js b/erpnext/hr/doctype/travel_request/travel_request.js deleted file mode 100644 index 9dd48eb38e..0000000000 --- a/erpnext/hr/doctype/travel_request/travel_request.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Travel Request', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/hr/doctype/travel_request/travel_request.json b/erpnext/hr/doctype/travel_request/travel_request.json deleted file mode 100644 index 7908e1a8ea..0000000000 --- a/erpnext/hr/doctype/travel_request/travel_request.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "actions": [], - "autoname": "HR-TRQ-.YYYY.-.#####", - "creation": "2018-05-15 06:32:33.950356", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "travel_type", - "travel_funding", - "travel_proof", - "column_break_2", - "purpose_of_travel", - "details_of_sponsor", - "employee_details", - "employee", - "employee_name", - "cell_number", - "prefered_email", - "column_break_7", - "date_of_birth", - "personal_id_type", - "personal_id_number", - "passport_number", - "section_break_4", - "description", - "travel_itinerary", - "itinerary", - "costing_details", - "costings", - "accounting_dimensions_section", - "cost_center", - "dimension_col_break", - "event_details", - "name_of_organizer", - "address_of_organizer", - "other_details", - "amended_from" - ], - "fields": [ - { - "fieldname": "travel_type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Travel Type", - "options": "\nDomestic\nInternational", - "reqd": 1 - }, - { - "fieldname": "travel_funding", - "fieldtype": "Select", - "label": "Travel Funding", - "options": "\nRequire Full Funding\nFully Sponsored\nPartially Sponsored, Require Partial Funding" - }, - { - "fieldname": "travel_proof", - "fieldtype": "Attach", - "label": "Copy of Invitation/Announcement" - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fieldname": "purpose_of_travel", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Purpose of Travel", - "options": "Purpose of Travel", - "reqd": 1 - }, - { - "fieldname": "details_of_sponsor", - "fieldtype": "Data", - "label": "Details of Sponsor (Name, Location)" - }, - { - "collapsible": 1, - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "label": "Description" - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Any other details" - }, - { - "collapsible": 1, - "fieldname": "employee_details", - "fieldtype": "Section Break", - "label": "Employee Details" - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.cell_number", - "fieldname": "cell_number", - "fieldtype": "Data", - "label": "Contact Number" - }, - { - "fetch_from": "employee.prefered_email", - "fieldname": "prefered_email", - "fieldtype": "Data", - "label": "Contact Email" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.date_of_birth", - "fieldname": "date_of_birth", - "fieldtype": "Date", - "label": "Date of Birth", - "read_only": 1 - }, - { - "fieldname": "personal_id_type", - "fieldtype": "Link", - "label": "Identification Document Type", - "options": "Identification Document Type" - }, - { - "fieldname": "personal_id_number", - "fieldtype": "Data", - "label": "Identification Document Number" - }, - { - "fetch_from": "employee.passport_number", - "fieldname": "passport_number", - "fieldtype": "Data", - "label": "Passport Number" - }, - { - "fieldname": "travel_itinerary", - "fieldtype": "Section Break", - "label": "Travel Itinerary" - }, - { - "fieldname": "itinerary", - "fieldtype": "Table", - "options": "Travel Itinerary" - }, - { - "fieldname": "costing_details", - "fieldtype": "Section Break", - "label": "Costing Details" - }, - { - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "options": "Cost Center" - }, - { - "fieldname": "costings", - "fieldtype": "Table", - "label": "Costing", - "options": "Travel Request Costing" - }, - { - "collapsible": 1, - "fieldname": "event_details", - "fieldtype": "Section Break", - "label": "Event Details" - }, - { - "fieldname": "name_of_organizer", - "fieldtype": "Data", - "label": "Name of Organizer" - }, - { - "fieldname": "address_of_organizer", - "fieldtype": "Data", - "label": "Address of Organizer" - }, - { - "fieldname": "other_details", - "fieldtype": "Text", - "label": "Other Details" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Travel Request", - "print_hide": 1, - "read_only": 1 - }, - { - "collapsible": 1, - "fieldname": "accounting_dimensions_section", - "fieldtype": "Section Break", - "label": "Accounting Dimensions" - }, - { - "fieldname": "dimension_col_break", - "fieldtype": "Column Break" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-18 19:19:33.678664", - "modified_by": "Administrator", - "module": "HR", - "name": "Travel Request", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/travel_request/travel_request.py b/erpnext/hr/doctype/travel_request/travel_request.py deleted file mode 100644 index 02379c5334..0000000000 --- a/erpnext/hr/doctype/travel_request/travel_request.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - -from erpnext.hr.utils import validate_active_employee - - -class TravelRequest(Document): - def validate(self): - validate_active_employee(self.employee) diff --git a/erpnext/hr/doctype/travel_request_costing/__init__.py b/erpnext/hr/doctype/travel_request_costing/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json deleted file mode 100644 index b64b1a9343..0000000000 --- a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2018-05-15 10:28:37.429581", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "expense_type", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Expense Type", - "length": 0, - "no_copy": 0, - "options": "Expense Claim Type", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_2", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "sponsored_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Sponsored Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "funded_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Funded Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "total_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Total Amount", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "comments", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Comments", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2018-05-15 10:42:07.960530", - "modified_by": "Administrator", - "module": "HR", - "name": "Travel Request Costing", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py deleted file mode 100644 index 0d1a592c80..0000000000 --- a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class TravelRequestCosting(Document): - pass diff --git a/erpnext/hr/doctype/upload_attendance/README.md b/erpnext/hr/doctype/upload_attendance/README.md deleted file mode 100644 index d0b3721016..0000000000 --- a/erpnext/hr/doctype/upload_attendance/README.md +++ /dev/null @@ -1 +0,0 @@ -Tool to upload attendance via csv file. \ No newline at end of file diff --git a/erpnext/hr/doctype/upload_attendance/__init__.py b/erpnext/hr/doctype/upload_attendance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py b/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py deleted file mode 100644 index 537c20633b..0000000000 --- a/erpnext/hr/doctype/upload_attendance/test_upload_attendance.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import getdate - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.upload_attendance.upload_attendance import get_data - -test_dependencies = ["Holiday List"] - - -class TestUploadAttendance(unittest.TestCase): - @classmethod - def setUpClass(cls): - frappe.db.set_value( - "Company", erpnext.get_default_company(), "default_holiday_list", "_Test Holiday List" - ) - - def test_date_range(self): - employee = make_employee("test_employee@company.com") - employee_doc = frappe.get_doc("Employee", employee) - date_of_joining = "2018-01-02" - relieving_date = "2018-01-03" - from_date = "2018-01-01" - to_date = "2018-01-04" - employee_doc.date_of_joining = date_of_joining - employee_doc.relieving_date = relieving_date - employee_doc.save() - args = {"from_date": from_date, "to_date": to_date} - data = get_data(args) - filtered_data = [] - for row in data: - if row[1] == employee: - filtered_data.append(row) - for row in filtered_data: - self.assertTrue( - getdate(row[3]) >= getdate(date_of_joining) and getdate(row[3]) <= getdate(relieving_date) - ) diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js deleted file mode 100644 index bbafc82076..0000000000 --- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - - - -frappe.provide("erpnext.hr"); - -erpnext.hr.AttendanceControlPanel = class AttendanceControlPanel extends frappe.ui.form.Controller { - onload() { - this.frm.set_value("att_fr_date", frappe.datetime.get_today()); - this.frm.set_value("att_to_date", frappe.datetime.get_today()); - } - - refresh() { - this.frm.disable_save(); - this.show_upload(); - this.setup_import_progress(); - } - - get_template() { - if(!this.frm.doc.att_fr_date || !this.frm.doc.att_to_date) { - frappe.msgprint(__("Attendance From Date and Attendance To Date is mandatory")); - return; - } - window.location.href = repl(frappe.request.url + - '?cmd=%(cmd)s&from_date=%(from_date)s&to_date=%(to_date)s', { - cmd: "erpnext.hr.doctype.upload_attendance.upload_attendance.get_template", - from_date: this.frm.doc.att_fr_date, - to_date: this.frm.doc.att_to_date, - }); - } - - show_upload() { - var $wrapper = $(cur_frm.fields_dict.upload_html.wrapper).empty(); - new frappe.ui.FileUploader({ - wrapper: $wrapper, - method: 'erpnext.hr.doctype.upload_attendance.upload_attendance.upload' - }); - } - - setup_import_progress() { - var $log_wrapper = $(this.frm.fields_dict.import_log.wrapper).empty(); - - frappe.realtime.on('import_attendance', (data) => { - if (data.progress) { - this.frm.dashboard.show_progress('Import Attendance', data.progress / data.total * 100, - __('Importing {0} of {1}', [data.progress, data.total])); - if (data.progress === data.total) { - this.frm.dashboard.hide_progress('Import Attendance'); - } - } else if (data.error) { - this.frm.dashboard.hide(); - let messages = [`${__('Error in some rows')}`].concat(data.messages - .filter(message => message.includes('Error')) - .map(message => `${message}`)) - .join(''); - $log_wrapper.append('' + messages); - } else if (data.messages) { - this.frm.dashboard.hide(); - let messages = [``].concat(data.messages - .map(message => ``)) - .join(''); - $log_wrapper.append('
${__('Import Successful')}
${message}
' + messages); - } - }); - } -} - -cur_frm.cscript = new erpnext.hr.AttendanceControlPanel({frm: cur_frm}); diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.json b/erpnext/hr/doctype/upload_attendance/upload_attendance.json deleted file mode 100644 index a1451fde1d..0000000000 --- a/erpnext/hr/doctype/upload_attendance/upload_attendance.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "allow_copy": 1, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-01-25 11:34:53", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 0, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "download_template", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Download Template", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "att_fr_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Attendance From Date", - "length": 0, - "no_copy": 0, - "oldfieldname": "attenadnce_date", - "oldfieldtype": "Date", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "att_to_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Attendance To Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "get_template", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Get Template", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Button", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "upload_attendance_data", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Import Attendance", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "upload_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Upload HTML", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "import_log", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Import Log", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 1, - "icon": "fa fa-upload-alt", - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 1, - "modified": "2020-09-18 17:26:09.703215", - "modified_by": "Administrator", - "module": "HR", - "name": "Upload Attendance", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "HR User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 1 - }, - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "HR Manager", - "set_user_permissions": 0, - "share": 0, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.py b/erpnext/hr/doctype/upload_attendance/upload_attendance.py deleted file mode 100644 index a66a48124d..0000000000 --- a/erpnext/hr/doctype/upload_attendance/upload_attendance.py +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, cstr, date_diff, getdate -from frappe.utils.csvutils import UnicodeWriter - -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee -from erpnext.hr.utils import get_holiday_dates_for_employee - - -class UploadAttendance(Document): - pass - - -@frappe.whitelist() -def get_template(): - if not frappe.has_permission("Attendance", "create"): - raise frappe.PermissionError - - args = frappe.local.form_dict - - if getdate(args.from_date) > getdate(args.to_date): - frappe.throw(_("To Date should be greater than From Date")) - - w = UnicodeWriter() - w = add_header(w) - - try: - w = add_data(w, args) - except Exception as e: - frappe.clear_messages() - frappe.respond_as_web_page("Holiday List Missing", html=e) - return - - # write out response as a type csv - frappe.response["result"] = cstr(w.getvalue()) - frappe.response["type"] = "csv" - frappe.response["doctype"] = "Attendance" - - -def add_header(w): - status = ", ".join( - (frappe.get_meta("Attendance").get_field("status").options or "").strip().split("\n") - ) - w.writerow(["Notes:"]) - w.writerow(["Please do not change the template headings"]) - w.writerow(["Status should be one of these values: " + status]) - w.writerow(["If you are overwriting existing attendance records, 'ID' column mandatory"]) - w.writerow( - ["ID", "Employee", "Employee Name", "Date", "Status", "Leave Type", "Company", "Naming Series"] - ) - return w - - -def add_data(w, args): - data = get_data(args) - writedata(w, data) - return w - - -def get_data(args): - dates = get_dates(args) - employees = get_active_employees() - holidays = get_holidays_for_employees( - [employee.name for employee in employees], args["from_date"], args["to_date"] - ) - existing_attendance_records = get_existing_attendance_records(args) - data = [] - for date in dates: - for employee in employees: - if getdate(date) < getdate(employee.date_of_joining): - continue - if employee.relieving_date: - if getdate(date) > getdate(employee.relieving_date): - continue - existing_attendance = {} - if ( - existing_attendance_records - and tuple([getdate(date), employee.name]) in existing_attendance_records - and getdate(employee.date_of_joining) <= getdate(date) - and getdate(employee.relieving_date) >= getdate(date) - ): - existing_attendance = existing_attendance_records[tuple([getdate(date), employee.name])] - - employee_holiday_list = get_holiday_list_for_employee(employee.name) - - row = [ - existing_attendance and existing_attendance.name or "", - employee.name, - employee.employee_name, - date, - existing_attendance and existing_attendance.status or "", - existing_attendance and existing_attendance.leave_type or "", - employee.company, - existing_attendance and existing_attendance.naming_series or get_naming_series(), - ] - if date in holidays[employee_holiday_list]: - row[4] = "Holiday" - data.append(row) - - return data - - -def get_holidays_for_employees(employees, from_date, to_date): - holidays = {} - for employee in employees: - holiday_list = get_holiday_list_for_employee(employee) - holiday = get_holiday_dates_for_employee(employee, getdate(from_date), getdate(to_date)) - if holiday_list not in holidays: - holidays[holiday_list] = holiday - - return holidays - - -def writedata(w, data): - for row in data: - w.writerow(row) - - -def get_dates(args): - """get list of dates in between from date and to date""" - no_of_days = date_diff(add_days(args["to_date"], 1), args["from_date"]) - dates = [add_days(args["from_date"], i) for i in range(0, no_of_days)] - return dates - - -def get_active_employees(): - employees = frappe.db.get_all( - "Employee", - fields=["name", "employee_name", "date_of_joining", "company", "relieving_date"], - filters={"docstatus": ["<", 2], "status": "Active"}, - ) - return employees - - -def get_existing_attendance_records(args): - attendance = frappe.db.sql( - """select name, attendance_date, employee, status, leave_type, naming_series - from `tabAttendance` where attendance_date between %s and %s and docstatus < 2""", - (args["from_date"], args["to_date"]), - as_dict=1, - ) - - existing_attendance = {} - for att in attendance: - existing_attendance[tuple([att.attendance_date, att.employee])] = att - - return existing_attendance - - -def get_naming_series(): - series = frappe.get_meta("Attendance").get_field("naming_series").options.strip().split("\n") - if not series: - frappe.throw(_("Please setup numbering series for Attendance via Setup > Numbering Series")) - return series[0] - - -@frappe.whitelist() -def upload(): - if not frappe.has_permission("Attendance", "create"): - raise frappe.PermissionError - - from frappe.utils.csvutils import read_csv_content - - rows = read_csv_content(frappe.local.uploaded_file) - if not rows: - frappe.throw(_("Please select a csv file")) - frappe.enqueue(import_attendances, rows=rows, now=True if len(rows) < 200 else False) - - -def import_attendances(rows): - def remove_holidays(rows): - rows = [row for row in rows if row[4] != "Holiday"] - return rows - - from frappe.modules import scrub - - rows = list(filter(lambda x: x and any(x), rows)) - columns = [scrub(f) for f in rows[4]] - columns[0] = "name" - columns[3] = "attendance_date" - rows = rows[5:] - ret = [] - error = False - - rows = remove_holidays(rows) - - from frappe.utils.csvutils import check_record, import_doc - - for i, row in enumerate(rows): - if not row: - continue - row_idx = i + 5 - d = frappe._dict(zip(columns, row)) - - d["doctype"] = "Attendance" - if d.name: - d["docstatus"] = frappe.db.get_value("Attendance", d.name, "docstatus") - - try: - check_record(d) - ret.append(import_doc(d, "Attendance", 1, row_idx, submit=True)) - frappe.publish_realtime("import_attendance", dict(progress=i, total=len(rows))) - except AttributeError: - pass - except Exception as e: - error = True - ret.append("Error for row (#%d) %s : %s" % (row_idx, len(row) > 1 and row[1] or "", cstr(e))) - frappe.errprint(frappe.get_traceback()) - - if error: - frappe.db.rollback() - else: - frappe.db.commit() - - frappe.publish_realtime("import_attendance", dict(messages=ret, error=error)) diff --git a/erpnext/hr/doctype/vehicle/__init__.py b/erpnext/hr/doctype/vehicle/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/vehicle/vehicle.json b/erpnext/hr/doctype/vehicle/vehicle.json deleted file mode 100644 index 6f395b34be..0000000000 --- a/erpnext/hr/doctype/vehicle/vehicle.json +++ /dev/null @@ -1,875 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "field:license_plate", - "beta": 0, - "creation": "2016-09-03 03:33:27.680331", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "license_plate", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "License Plate", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 1 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "make", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Make", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "model", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Model", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "vehicle_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "last_odometer", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Odometer Value (Last)", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 1, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "acquisition_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Acquisition Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "location", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Location", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_8", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "chassis_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Chassis No", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "vehicle_value", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Vehicle Value", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 1, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 1, - "label": "Employee", - "length": 0, - "no_copy": 0, - "options": "Employee", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "insurance_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Insurance Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "insurance_company", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Insurance Company", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "policy_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Policy No", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_15", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "start_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Start Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "end_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "End Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "additional_details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Additional Details", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fuel_type", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Fuel Type", - "length": 0, - "no_copy": 0, - "options": "Petrol\nDiesel\nNatural Gas\nElectric", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "uom", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Fuel UOM", - "length": 0, - "no_copy": 0, - "options": "UOM", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "carbon_check_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Last Carbon Check", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_21", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "color", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Color", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "wheels", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Wheels", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "doors", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Doors", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Vehicle", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2017-11-29 14:48:30.813359", - "modified_by": "Administrator", - "module": "HR", - "name": "Vehicle", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Fleet Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "search_fields": "license_plate,location,model", - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/vehicle_log/__init__.py b/erpnext/hr/doctype/vehicle_log/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py deleted file mode 100644 index bb29670d39..0000000000 --- a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import cstr, flt, nowdate, random_string - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.vehicle_log.vehicle_log import make_expense_claim - - -class TestVehicleLog(unittest.TestCase): - def setUp(self): - employee_id = frappe.db.sql( - """select name from `tabEmployee` where name='testdriver@example.com'""" - ) - self.employee_id = employee_id[0][0] if employee_id else None - - if not self.employee_id: - self.employee_id = make_employee("testdriver@example.com", company="_Test Company") - - self.license_plate = get_vehicle(self.employee_id) - - def tearDown(self): - frappe.delete_doc("Vehicle", self.license_plate, force=1) - frappe.delete_doc("Employee", self.employee_id, force=1) - - def test_make_vehicle_log_and_syncing_of_odometer_value(self): - vehicle_log = make_vehicle_log(self.license_plate, self.employee_id) - - # checking value of vehicle odometer value on submit. - vehicle = frappe.get_doc("Vehicle", self.license_plate) - self.assertEqual(vehicle.last_odometer, vehicle_log.odometer) - - # checking value vehicle odometer on vehicle log cancellation. - last_odometer = vehicle_log.last_odometer - current_odometer = vehicle_log.odometer - distance_travelled = current_odometer - last_odometer - - vehicle_log.cancel() - vehicle.reload() - - self.assertEqual(vehicle.last_odometer, current_odometer - distance_travelled) - - vehicle_log.delete() - - def test_vehicle_log_fuel_expense(self): - vehicle_log = make_vehicle_log(self.license_plate, self.employee_id) - - expense_claim = make_expense_claim(vehicle_log.name) - fuel_expense = expense_claim.expenses[0].amount - self.assertEqual(fuel_expense, 50 * 500) - - vehicle_log.cancel() - frappe.delete_doc("Expense Claim", expense_claim.name) - frappe.delete_doc("Vehicle Log", vehicle_log.name) - - def test_vehicle_log_with_service_expenses(self): - vehicle_log = make_vehicle_log(self.license_plate, self.employee_id, with_services=True) - - expense_claim = make_expense_claim(vehicle_log.name) - expenses = expense_claim.expenses[0].amount - self.assertEqual(expenses, 27000) - - vehicle_log.cancel() - frappe.delete_doc("Expense Claim", expense_claim.name) - frappe.delete_doc("Vehicle Log", vehicle_log.name) - - -def get_vehicle(employee_id): - license_plate = random_string(10).upper() - vehicle = frappe.get_doc( - { - "doctype": "Vehicle", - "license_plate": cstr(license_plate), - "make": "Maruti", - "model": "PCM", - "employee": employee_id, - "last_odometer": 5000, - "acquisition_date": nowdate(), - "location": "Mumbai", - "chassis_no": "1234ABCD", - "uom": "Litre", - "vehicle_value": flt(500000), - } - ) - try: - vehicle.insert(ignore_if_duplicate=True) - except frappe.DuplicateEntryError: - pass - return license_plate - - -def make_vehicle_log(license_plate, employee_id, with_services=False): - vehicle_log = frappe.get_doc( - { - "doctype": "Vehicle Log", - "license_plate": cstr(license_plate), - "employee": employee_id, - "date": nowdate(), - "odometer": 5010, - "fuel_qty": flt(50), - "price": flt(500), - } - ) - - if with_services: - vehicle_log.append( - "service_detail", - { - "service_item": "Oil Change", - "type": "Inspection", - "frequency": "Mileage", - "expense_amount": flt(500), - }, - ) - vehicle_log.append( - "service_detail", - { - "service_item": "Wheels", - "type": "Change", - "frequency": "Half Yearly", - "expense_amount": flt(1500), - }, - ) - - vehicle_log.save() - vehicle_log.submit() - - return vehicle_log diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js deleted file mode 100644 index 14fe9a02da..0000000000 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on("Vehicle Log", { - refresh: function(frm) { - if(frm.doc.docstatus == 1) { - frm.add_custom_button(__('Expense Claim'), function() { - frm.events.expense_claim(frm); - }, __('Create')); - frm.page.set_inner_btn_group_as_primary(__('Create')); - } - }, - - expense_claim: function(frm){ - frappe.call({ - method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim", - args:{ - docname: frm.doc.name - }, - callback: function(r){ - var doc = frappe.model.sync(r.message); - frappe.set_route('Form', 'Expense Claim', r.message.name); - } - }); - } -}); diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.json b/erpnext/hr/doctype/vehicle_log/vehicle_log.json deleted file mode 100644 index 4ea904542d..0000000000 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "actions": [], - "autoname": "naming_series:", - "creation": "2016-09-03 14:14:51.788550", - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "vehicle_section", - "naming_series", - "license_plate", - "employee", - "column_break_7", - "model", - "make", - "odometer_reading", - "date", - "odometer", - "column_break_12", - "last_odometer", - "refuelling_details", - "fuel_qty", - "price", - "column_break_15", - "supplier", - "invoice", - "service_details", - "service_detail", - "amended_from" - ], - "fields": [ - { - "fieldname": "vehicle_section", - "fieldtype": "Section Break", - "options": "fa fa-user" - }, - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "no_copy": 1, - "options": "HR-VLOG-.YYYY.-", - "print_hide": 1, - "reqd": 1, - "set_only_once": 1 - }, - { - "fieldname": "license_plate", - "fieldtype": "Link", - "in_global_search": 1, - "in_list_view": 1, - "label": "License Plate", - "options": "Vehicle", - "reqd": 1 - }, - { - "fetch_from": "license_plate.employee", - "fetch_if_empty": 1, - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "fetch_from": "license_plate.model", - "fieldname": "model", - "fieldtype": "Read Only", - "label": "Model" - }, - { - "fetch_from": "license_plate.make", - "fieldname": "make", - "fieldtype": "Read Only", - "label": "Make" - }, - { - "fieldname": "odometer_reading", - "fieldtype": "Section Break", - "label": "Odometer Reading" - }, - { - "fieldname": "date", - "fieldtype": "Date", - "label": "Date", - "reqd": 1 - }, - { - "fieldname": "odometer", - "fieldtype": "Int", - "label": "Current Odometer value ", - "reqd": 1 - }, - { - "collapsible": 1, - "fieldname": "refuelling_details", - "fieldtype": "Section Break", - "label": "Refuelling Details" - }, - { - "fieldname": "fuel_qty", - "fieldtype": "Float", - "label": "Fuel Qty" - }, - { - "fieldname": "price", - "fieldtype": "Currency", - "label": "Fuel Price" - }, - { - "fieldname": "column_break_15", - "fieldtype": "Column Break" - }, - { - "fieldname": "supplier", - "fieldtype": "Link", - "label": "Supplier", - "options": "Supplier" - }, - { - "fieldname": "invoice", - "fieldtype": "Data", - "label": "Invoice Ref" - }, - { - "collapsible": 1, - "fieldname": "service_details", - "fieldtype": "Section Break", - "label": "Service Details" - }, - { - "fieldname": "service_detail", - "fieldtype": "Table", - "options": "Vehicle Service" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Vehicle Log", - "print_hide": 1, - "read_only": 1 - }, - { - "fetch_from": "license_plate.last_odometer", - "fieldname": "last_odometer", - "fieldtype": "Int", - "label": "Last Odometer Value ", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2021-05-17 00:10:21.188352", - "modified_by": "Administrator", - "module": "HR", - "name": "Vehicle Log", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Fleet Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.py b/erpnext/hr/doctype/vehicle_log/vehicle_log.py deleted file mode 100644 index 2c1d9a4efe..0000000000 --- a/erpnext/hr/doctype/vehicle_log/vehicle_log.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt - - -class VehicleLog(Document): - def validate(self): - if flt(self.odometer) < flt(self.last_odometer): - frappe.throw( - _("Current Odometer Value should be greater than Last Odometer Value {0}").format( - self.last_odometer - ) - ) - - def on_submit(self): - frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", self.odometer) - - def on_cancel(self): - distance_travelled = self.odometer - self.last_odometer - if distance_travelled > 0: - updated_odometer_value = ( - int(frappe.db.get_value("Vehicle", self.license_plate, "last_odometer")) - distance_travelled - ) - frappe.db.set_value("Vehicle", self.license_plate, "last_odometer", updated_odometer_value) - - -@frappe.whitelist() -def make_expense_claim(docname): - expense_claim = frappe.db.exists("Expense Claim", {"vehicle_log": docname}) - if expense_claim: - frappe.throw(_("Expense Claim {0} already exists for the Vehicle Log").format(expense_claim)) - - vehicle_log = frappe.get_doc("Vehicle Log", docname) - service_expense = sum([flt(d.expense_amount) for d in vehicle_log.service_detail]) - - claim_amount = service_expense + (flt(vehicle_log.price) * flt(vehicle_log.fuel_qty) or 1) - if not claim_amount: - frappe.throw(_("No additional expenses has been added")) - - exp_claim = frappe.new_doc("Expense Claim") - exp_claim.employee = vehicle_log.employee - exp_claim.vehicle_log = vehicle_log.name - exp_claim.remark = _("Expense Claim for Vehicle Log {0}").format(vehicle_log.name) - exp_claim.append( - "expenses", - {"expense_date": vehicle_log.date, "description": _("Vehicle Expenses"), "amount": claim_amount}, - ) - return exp_claim.as_dict() diff --git a/erpnext/hr/doctype/vehicle_service/__init__.py b/erpnext/hr/doctype/vehicle_service/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.json b/erpnext/hr/doctype/vehicle_service/vehicle_service.json deleted file mode 100644 index e0bce2b6ee..0000000000 --- a/erpnext/hr/doctype/vehicle_service/vehicle_service.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "creation": "2016-09-03 19:20:14.561962", - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "service_item", - "type", - "frequency", - "expense_amount" - ], - "fields": [ - { - "fieldname": "service_item", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Service Item", - "options": "\nBrake Oil\nBrake Pad\nClutch Plate\nEngine Oil\nOil Change\nWheels", - "reqd": 1 - }, - { - "fieldname": "type", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Type", - "options": "\nInspection\nService\nChange", - "reqd": 1 - }, - { - "fieldname": "frequency", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Frequency", - "options": "\nMileage\nMonthly\nQuarterly\nHalf Yearly\nYearly", - "reqd": 1 - }, - { - "fieldname": "expense_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Expense", - "reqd": 1 - } - ], - "istable": 1, - "modified": "2020-03-18 16:49:46.645004", - "modified_by": "Administrator", - "module": "HR", - "name": "Vehicle Service", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.py b/erpnext/hr/doctype/vehicle_service/vehicle_service.py deleted file mode 100644 index fdd4e39dd8..0000000000 --- a/erpnext/hr/doctype/vehicle_service/vehicle_service.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class VehicleService(Document): - pass diff --git a/erpnext/hr/employee_property_update.js b/erpnext/hr/employee_property_update.js deleted file mode 100644 index 86130bf793..0000000000 --- a/erpnext/hr/employee_property_update.js +++ /dev/null @@ -1,174 +0,0 @@ -frappe.ui.form.on(cur_frm.doctype, { - setup: function(frm) { - frm.set_query("employee", function() { - return { - filters: { - "status": "Active" - } - }; - }); - }, - - onload: function(frm) { - if (frm.doc.__islocal) - frm.trigger("clear_property_table"); - }, - - employee: function(frm) { - frm.trigger("clear_property_table"); - }, - - clear_property_table: function(frm) { - let table = (frm.doctype == "Employee Promotion") ? "promotion_details" : "transfer_details"; - frm.clear_table(table); - frm.refresh_field(table); - - frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide(); - }, - - refresh: function(frm) { - let table; - if (frm.doctype == "Employee Promotion") { - table = "promotion_details"; - } else if (frm.doctype == "Employee Transfer") { - table = "transfer_details"; - } - - if (!table) - return; - - frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide(); - frm.events.setup_employee_property_button(frm, table); - }, - - setup_employee_property_button: function(frm, table) { - frm.fields_dict[table].grid.add_custom_button(__("Add Employee Property"), () => { - if (!frm.doc.employee) { - frappe.msgprint(__("Please select Employee first.")); - return; - } - - const allowed_fields = []; - const exclude_fields = ["naming_series", "employee", "first_name", "middle_name", "last_name", "marital_status", "ctc", - "employee_name", "status", "image", "gender", "date_of_birth", "date_of_joining", "lft", "rgt", "old_parent"]; - - const exclude_field_types = ["HTML", "Section Break", "Column Break", "Button", "Read Only", "Tab Break", "Table"]; - - frappe.model.with_doctype("Employee", () => { - const field_label_map = {}; - frappe.get_meta("Employee").fields.forEach(d => { - field_label_map[d.fieldname] = __(d.label) + ` (${d.fieldname})`; - if (!in_list(exclude_field_types, d.fieldtype) && !in_list(exclude_fields, d.fieldname)) { - allowed_fields.push({ - label: field_label_map[d.fieldname], - value: d.fieldname, - }); - } - }); - - show_dialog(frm, table, allowed_fields); - }); - }); - } -}); - -var show_dialog = function(frm, table, field_labels) { - var d = new frappe.ui.Dialog({ - title: "Update Property", - fields: [ - {fieldname: "property", label: __("Select Property"), fieldtype: "Autocomplete", options: field_labels}, - {fieldname: "current", fieldtype: "Data", label: __("Current"), read_only: true}, - {fieldname: "new_value", fieldtype: "Data", label: __("New")} - ], - primary_action_label: __("Add to Details"), - primary_action: () => { - d.get_primary_btn().attr("disabled", true); - if (d.data) { - d.data.new = d.get_values().new_value; - add_to_details(frm, d, table); - } - } - }); - - d.fields_dict["property"].df.onchange = () => { - let property = d.get_values().property; - d.data.fieldname = property; - if(!property){return;} - frappe.call({ - method: 'erpnext.hr.utils.get_employee_field_property', - args: {employee: frm.doc.employee, fieldname: property}, - callback: function(r) { - if (r.message) { - d.data.current = r.message.value; - d.data.property = r.message.label; - - d.set_value('current', r.message.value); - render_dynamic_field(d, r.message.datatype, r.message.options, property); - d.get_primary_btn().attr('disabled', false); - } - } - }); - }; - d.get_primary_btn().attr('disabled', true); - d.data = {}; - d.show(); -}; - -var render_dynamic_field = function(d, fieldtype, options, fieldname) { - d.data.new = null; - var dynamic_field = frappe.ui.form.make_control({ - df: { - "fieldtype": fieldtype, - "fieldname": fieldname, - "options": options || '', - "label": __("New") - }, - parent: d.fields_dict.new_value.wrapper, - only_input: false - }); - dynamic_field.make_input(); - d.replace_field("new_value", dynamic_field.df); -}; - -var add_to_details = function(frm, d, table) { - let data = d.data; - if (data.fieldname) { - if (validate_duplicate(frm, table, data.fieldname)) { - frappe.show_alert({message: __("Property already added"), indicator: "orange"}); - return false; - } - if (data.current == data.new) { - frappe.show_alert({message: __("Nothing to change"), indicator: "orange"}); - d.get_primary_btn().attr("disabled", false); - return false; - } - frm.add_child(table, { - fieldname: data.fieldname, - property: data.property, - current: data.current, - new: data.new - }); - frm.refresh_field(table); - - frm.fields_dict[table].grid.wrapper.find(".grid-add-row").hide(); - - d.fields_dict.new_value.$wrapper.html(""); - d.set_value("property", ""); - d.set_value("current", ""); - frappe.show_alert({message: __("Added to details"), indicator: "green"}); - d.data = {}; - } else { - frappe.show_alert({message: __("Value missing"), indicator: "red"}); - } -}; - -var validate_duplicate = function(frm, table, fieldname){ - let duplicate = false; - $.each(frm.doc[table], function(i, detail) { - if(detail.fieldname === fieldname){ - duplicate = true; - return; - } - }); - return duplicate; -}; diff --git a/erpnext/hr/hr_dashboard/human_resource/human_resource.json b/erpnext/hr/hr_dashboard/human_resource/human_resource.json deleted file mode 100644 index f74d9a3c57..0000000000 --- a/erpnext/hr/hr_dashboard/human_resource/human_resource.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "cards": [ - { - "card": "Total Employees" - }, - { - "card": "New Joinees (Last year)" - }, - { - "card": "Employees Left (Last year)" - }, - { - "card": "Total Applicants (Last month)" - } - ], - "charts": [ - { - "chart": "Attendance Count", - "width": "Full" - }, - { - "chart": "Gender Diversity Ratio", - "width": "Half" - }, - { - "chart": "Job Application Status", - "width": "Half" - }, - { - "chart": "Designation Wise Employee Count", - "width": "Half" - }, - { - "chart": "Department Wise Employee Count", - "width": "Half" - }, - { - "chart": "Designation Wise Openings", - "width": "Half" - }, - { - "chart": "Department Wise Openings", - "width": "Half" - } - ], - "creation": "2020-07-22 11:56:33.015888", - "dashboard_name": "Human Resource", - "docstatus": 0, - "doctype": "Dashboard", - "idx": 0, - "is_default": 0, - "is_standard": 1, - "modified": "2020-07-22 14:42:12.789249", - "modified_by": "Administrator", - "module": "HR", - "name": "Human Resource", - "owner": "Administrator" -} \ No newline at end of file diff --git a/erpnext/hr/module_onboarding/human_resource/human_resource.json b/erpnext/hr/module_onboarding/human_resource/human_resource.json deleted file mode 100644 index cd11bd1102..0000000000 --- a/erpnext/hr/module_onboarding/human_resource/human_resource.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "allow_roles": [ - { - "role": "HR Manager" - }, - { - "role": "HR User" - } - ], - "creation": "2020-05-14 11:51:45.050242", - "docstatus": 0, - "doctype": "Module Onboarding", - "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources", - "idx": 0, - "is_complete": 0, - "modified": "2021-05-19 05:32:01.794628", - "modified_by": "Administrator", - "module": "HR", - "name": "Human Resource", - "owner": "Administrator", - "steps": [ - { - "step": "HR Settings" - }, - { - "step": "Create Holiday list" - }, - { - "step": "Create Employee" - }, - { - "step": "Data import" - }, - { - "step": "Create Leave Type" - }, - { - "step": "Create Leave Allocation" - }, - { - "step": "Create Leave Application" - } - ], - "subtitle": "Employee, Leaves, and more.", - "success_message": "The Human Resource Module is all set up!", - "title": "Let's Set Up the Human Resource Module. " -} \ No newline at end of file diff --git a/erpnext/hr/notification/__init__.py b/erpnext/hr/notification/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/notification/exit_interview_scheduled/__init__.py b/erpnext/hr/notification/exit_interview_scheduled/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json deleted file mode 100644 index 8323ef0694..0000000000 --- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "attach_print": 0, - "channel": "Email", - "condition": "doc.date and doc.email and doc.docstatus != 2 and doc.status == 'Scheduled'", - "creation": "2021-12-05 22:11:47.263933", - "date_changed": "date", - "days_in_advance": 1, - "docstatus": 0, - "doctype": "Notification", - "document_type": "Exit Interview", - "enabled": 1, - "event": "Days Before", - "idx": 0, - "is_standard": 1, - "message": "
\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t{{_(\"Exit Interview Scheduled:\")}} {{ doc.name }}\n\t\t\t
\n\t\t
\n\n\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n
\n\t\t\t
\n\t\t\t\t
    \n\t\t\t\t\t
  • {{_(\"Employee\")}}: {{ doc.employee }} - {{ doc.employee_name }}
  • \n\t\t\t\t\t
  • {{_(\"Date\")}}: {{ doc.date }}
  • \n\t\t\t\t\t
  • {{_(\"Interviewers\")}}:
  • \n\t\t\t\t\t{% for entry in doc.interviewers %}\n\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t
    • {{ entry.user }}
    • \n\t\t\t\t\t\t
    \n\t\t\t\t\t{% endfor %}\n\t\t\t\t\t
  • {{ _(\"Interview Document\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n\t\t\t\t
\n\t\t\t
\n\t\t
\n", - "modified": "2021-12-05 22:26:57.096159", - "modified_by": "Administrator", - "module": "HR", - "name": "Exit Interview Scheduled", - "owner": "Administrator", - "recipients": [ - { - "receiver_by_document_field": "email" - } - ], - "send_system_notification": 0, - "send_to_all_assignees": 1, - "subject": "Exit Interview Scheduled: {{ doc.name }}" -} \ No newline at end of file diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md deleted file mode 100644 index 6d6db4014b..0000000000 --- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.md +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - -
-
-

{{_("Exit Interview Scheduled:")}} {{ doc.name }}

-
-
- - - - - - - - - -
-
-
    -
  • {{_("Employee")}}: {{ doc.employee }} - {{ doc.employee_name }}
  • -
  • {{_("Date")}}: {{ frappe.utils.formatdate(doc.date) }}
  • -
  • {{_("Interviewers")}}:
  • - {% for entry in doc.interviewers %} -
      -
    • {{ entry.user }}
    • -
    - {% endfor %} -
  • {{ _("Interview Document") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • -
-
-
diff --git a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py b/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py deleted file mode 100644 index 5f697c9613..0000000000 --- a/erpnext/hr/notification/exit_interview_scheduled/exit_interview_scheduled.py +++ /dev/null @@ -1,6 +0,0 @@ -# import frappe - - -def get_context(context): - # do your magic here - pass diff --git a/erpnext/hr/notification/training_feedback/__init__.py b/erpnext/hr/notification/training_feedback/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/notification/training_feedback/training_feedback.html b/erpnext/hr/notification/training_feedback/training_feedback.html deleted file mode 100644 index b49662a6eb..0000000000 --- a/erpnext/hr/notification/training_feedback/training_feedback.html +++ /dev/null @@ -1,6 +0,0 @@ -

{{ _("Hello") }},

- -

You attended training {{ frappe.utils.get_link_to_form( - "Training Event", doc.training_event) }}

- -

{{ _("Please share your feedback to the training by clicking on 'Training Feedback' and then 'New'") }}

diff --git a/erpnext/hr/notification/training_feedback/training_feedback.json b/erpnext/hr/notification/training_feedback/training_feedback.json deleted file mode 100644 index 92b68a98a9..0000000000 --- a/erpnext/hr/notification/training_feedback/training_feedback.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "attach_print": 0, - "channel": "Email", - "creation": "2017-08-11 03:17:11.769210", - "days_in_advance": 0, - "docstatus": 0, - "doctype": "Notification", - "document_type": "Training Result", - "enabled": 1, - "event": "Submit", - "idx": 0, - "is_standard": 1, - "message": "

{{_(\"Training Event\")}}

\n

{{ message }}

\n\n

{{_(\"Details\")}}

\n{{_(\"Event Name\")}}: {{ name }}\n
{{_(\"Event Location\")}}: {{ location }}\n
{{_(\"Start Time\")}}: {{ start_time }}\n
{{_(\"End Time\")}}: {{ end_time }}\n
{{_(\"Attendance\")}}: {{ attendance }}\n", - "modified": "2017-08-11 04:26:58.194793", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Feedback", - "owner": "Administrator", - "recipients": [ - { - "email_by_document_field": "employee_emails" - } - ], - "subject": "Please Share your Feedback For {{ doc.training_event }}" -} \ No newline at end of file diff --git a/erpnext/hr/notification/training_feedback/training_feedback.md b/erpnext/hr/notification/training_feedback/training_feedback.md deleted file mode 100644 index bcadf7df59..0000000000 --- a/erpnext/hr/notification/training_feedback/training_feedback.md +++ /dev/null @@ -1,9 +0,0 @@ -

{{_("Training Event")}}

-

{{ message }}

- -

{{_("Details")}}

-{{_("Event Name")}}: {{ name }} -
{{_("Event Location")}}: {{ location }} -
{{_("Start Time")}}: {{ start_time }} -
{{_("End Time")}}: {{ end_time }} -
{{_("Attendance")}}: {{ attendance }} diff --git a/erpnext/hr/notification/training_feedback/training_feedback.py b/erpnext/hr/notification/training_feedback/training_feedback.py deleted file mode 100644 index 02e3e93333..0000000000 --- a/erpnext/hr/notification/training_feedback/training_feedback.py +++ /dev/null @@ -1,3 +0,0 @@ -def get_context(context): - # do your magic here - pass diff --git a/erpnext/hr/notification/training_scheduled/__init__.py b/erpnext/hr/notification/training_scheduled/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.html b/erpnext/hr/notification/training_scheduled/training_scheduled.html deleted file mode 100644 index 50f6d07a47..0000000000 --- a/erpnext/hr/notification/training_scheduled/training_scheduled.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - -
-
- {{_("Training Event:")}} {{ doc.event_name }} -
-
- - - - - - - - - -
-
- {{ doc.introduction }} -
    -
  • {{_("Event Location")}}: {{ doc.location }}
  • - {% set start = frappe.utils.get_datetime(doc.start_time) %} - {% set end = frappe.utils.get_datetime(doc.end_time) %} - {% if start.date() == end.date() %} -
  • {{_("Date")}}: {{ start.strftime("%A, %d %b %Y") }}
  • -
  • - {{_("Timing")}}: {{ start.strftime("%I:%M %p") + ' to ' + end.strftime("%I:%M %p") }} -
  • - {% else %} -
  • {{_("Start Time")}}: {{ start.strftime("%A, %d %b %Y at %I:%M %p") }} -
  • -
  • {{_("End Time")}}: {{ end.strftime("%A, %d %b %Y at %I:%M %p") }} -
  • - {% endif %} -
  • {{ _('Event Link') }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • -
-
-
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.json b/erpnext/hr/notification/training_scheduled/training_scheduled.json deleted file mode 100644 index f3650038fd..0000000000 --- a/erpnext/hr/notification/training_scheduled/training_scheduled.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "attach_print": 0, - "channel": "Email", - "condition": "", - "creation": "2017-08-11 03:13:40.519614", - "days_in_advance": 0, - "docstatus": 0, - "doctype": "Notification", - "document_type": "Training Event", - "enabled": 1, - "event": "Submit", - "idx": 0, - "is_standard": 1, - "message": "\n \n \n \n \n \n \n \n
\n
\n {{_(\"Training Event:\")}} {{ doc.event_name }}\n
\n
\n\n\n \n \n \n \n \n \n \n
\n
\n {{ doc.introduction }}\n
    \n
  • {{_(\"Event Location\")}}: {{ doc.location }}
  • \n {% set start = frappe.utils.get_datetime(doc.start_time) %}\n {% set end = frappe.utils.get_datetime(doc.end_time) %}\n {% if start.date() == end.date() %}\n
  • {{_(\"Date\")}}: {{ start.strftime(\"%A, %d %b %Y\") }}
  • \n
  • \n {{_(\"Timing\")}}: {{ start.strftime(\"%I:%M %p\") + ' to ' + end.strftime(\"%I:%M %p\") }}\n
  • \n {% else %}\n
  • \n {{_(\"Start Time\")}}: {{ start.strftime(\"%A, %d %b %Y at %I:%M %p\") }}\n
  • \n
  • {{_(\"End Time\")}}: {{ end.strftime(\"%A, %d %b %Y at %I:%M %p\") }}
  • \n {% endif %}\n
  • {{ _(\"Event Link\") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • \n {% if doc.is_mandatory %}\n
  • {{ _(\"Note: This Training Event is mandatory\") }}
  • \n {% endif %}\n
\n
\n
", - "modified": "2021-06-16 14:08:12.933367", - "modified_by": "Administrator", - "module": "HR", - "name": "Training Scheduled", - "owner": "Administrator", - "recipients": [ - { - "receiver_by_document_field": "employee_emails" - } - ], - "send_system_notification": 0, - "send_to_all_assignees": 0, - "subject": "Training Scheduled: {{ doc.name }}" -} \ No newline at end of file diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.md b/erpnext/hr/notification/training_scheduled/training_scheduled.md deleted file mode 100644 index b9ba846be5..0000000000 --- a/erpnext/hr/notification/training_scheduled/training_scheduled.md +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - -
-
- {{_("Training Event:")}} {{ doc.event_name }} -
-
- - - - - - - - - -
-
- {{ doc.introduction }} -
    -
  • {{_("Event Location")}}: {{ doc.location }}
  • - {% set start = frappe.utils.get_datetime(doc.start_time) %} - {% set end = frappe.utils.get_datetime(doc.end_time) %} - {% if start.date() == end.date() %} -
  • {{_("Date")}}: {{ start.strftime("%A, %d %b %Y") }}
  • -
  • - {{_("Timing")}}: {{ start.strftime("%I:%M %p") + ' to ' + end.strftime("%I:%M %p") }} -
  • - {% else %} -
  • - {{_("Start Time")}}: {{ start.strftime("%A, %d %b %Y at %I:%M %p") }} -
  • -
  • {{_("End Time")}}: {{ end.strftime("%A, %d %b %Y at %I:%M %p") }}
  • - {% endif %} -
  • {{ _("Event Link") }}: {{ frappe.utils.get_link_to_form(doc.doctype, doc.name) }}
  • - {% if doc.is_mandatory %} -
  • {{ _("Note: This Training Event is mandatory") }}
  • - {% endif %} -
-
-
diff --git a/erpnext/hr/notification/training_scheduled/training_scheduled.py b/erpnext/hr/notification/training_scheduled/training_scheduled.py deleted file mode 100644 index 02e3e93333..0000000000 --- a/erpnext/hr/notification/training_scheduled/training_scheduled.py +++ /dev/null @@ -1,3 +0,0 @@ -def get_context(context): - # do your magic here - pass diff --git a/erpnext/hr/number_card/employees_left_(last_year)/employees_left_(last_year).json b/erpnext/hr/number_card/employees_left_(last_year)/employees_left_(last_year).json deleted file mode 100644 index 6a91912eff..0000000000 --- a/erpnext/hr/number_card/employees_left_(last_year)/employees_left_(last_year).json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:32.947790", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"relieving_date\",\"Timespan\",\"last year\",false]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Employees Left (Last year)", - "modified": "2020-07-23 12:03:26.747447", - "modified_by": "Administrator", - "module": "HR", - "name": "Employees Left (Last year)", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/hr/number_card/new_joinees_(last_year)/new_joinees_(last_year).json b/erpnext/hr/number_card/new_joinees_(last_year)/new_joinees_(last_year).json deleted file mode 100644 index 8f5ad9ce31..0000000000 --- a/erpnext/hr/number_card/new_joinees_(last_year)/new_joinees_(last_year).json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:32.914057", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"date_of_joining\",\"Timespan\",\"last year\",false],[\"Employee\",\"status\",\"=\",\"Active\",false]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "New Joinees (Last year)", - "modified": "2020-07-22 14:32:09.352301", - "modified_by": "Administrator", - "module": "HR", - "name": "New Joinees (Last year)", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/hr/number_card/total_applicants_(last_month)/total_applicants_(last_month).json b/erpnext/hr/number_card/total_applicants_(last_month)/total_applicants_(last_month).json deleted file mode 100644 index 1af42cabf6..0000000000 --- a/erpnext/hr/number_card/total_applicants_(last_month)/total_applicants_(last_month).json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:32.977716", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Job Applicant", - "dynamic_filters_json": "", - "filters_json": "[[\"Job Applicant\",\"creation\",\"Timespan\",\"last month\"]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Applicants (Last month)", - "modified": "2020-07-22 14:32:27.656855", - "modified_by": "Administrator", - "module": "HR", - "name": "Total Applicants (Last month)", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/hr/number_card/total_employees/total_employees.json b/erpnext/hr/number_card/total_employees/total_employees.json deleted file mode 100644 index 932e255c9c..0000000000 --- a/erpnext/hr/number_card/total_employees/total_employees.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:32.874849", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Employee", - "dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Employees", - "modified": "2020-07-22 14:31:59.118650", - "modified_by": "Administrator", - "module": "HR", - "name": "Total Employees", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_department/create_department.json b/erpnext/hr/onboarding_step/create_department/create_department.json deleted file mode 100644 index 66a54cfc26..0000000000 --- a/erpnext/hr/onboarding_step/create_department/create_department.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-05-14 11:44:34.682115", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-05-14 12:22:26.448420", - "modified_by": "Administrator", - "name": "Create Department", - "owner": "Administrator", - "reference_document": "Department", - "show_full_form": 0, - "title": "Create Department", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_designation/create_designation.json b/erpnext/hr/onboarding_step/create_designation/create_designation.json deleted file mode 100644 index c4e9cc7798..0000000000 --- a/erpnext/hr/onboarding_step/create_designation/create_designation.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-05-14 11:45:07.514193", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-05-14 12:22:41.500795", - "modified_by": "Administrator", - "name": "Create Designation", - "owner": "Administrator", - "reference_document": "Designation", - "show_full_form": 0, - "title": "Create Designation", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_employee/create_employee.json b/erpnext/hr/onboarding_step/create_employee/create_employee.json deleted file mode 100644 index 47828186bf..0000000000 --- a/erpnext/hr/onboarding_step/create_employee/create_employee.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Show Tour", - "creation": "2020-05-14 11:43:25.561152", - "description": "

Employee

\n\nAn individual who works and is recognized for his rights and duties in your company is your Employee. You can manage the Employee master. It captures the demographic, personal and professional details, joining and leave details, etc.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 04:50:02.240321", - "modified_by": "Administrator", - "name": "Create Employee", - "owner": "Administrator", - "reference_document": "Employee", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Create Employee", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json b/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json deleted file mode 100644 index a08e85fff0..0000000000 --- a/erpnext/hr/onboarding_step/create_holiday_list/create_holiday_list.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Show Tour", - "creation": "2020-05-28 11:47:34.700174", - "description": "

Holiday List.

\n\nHoliday List is a list which contains the dates of holidays. Most organizations have a standard Holiday List for their employees. However, some of them may have different holiday lists based on different Locations or Departments. In ERPNext, you can configure multiple Holiday Lists.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 04:19:52.305199", - "modified_by": "Administrator", - "name": "Create Holiday list", - "owner": "Administrator", - "reference_document": "Holiday List", - "show_form_tour": 0, - "show_full_form": 1, - "title": "Create Holiday List", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json b/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json deleted file mode 100644 index 0b0ce3fc8b..0000000000 --- a/erpnext/hr/onboarding_step/create_leave_allocation/create_leave_allocation.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Show Tour", - "creation": "2020-05-14 11:48:56.123718", - "description": "

Leave Allocation

\n\nLeave Allocation enables you to allocate a specific number of leaves of a particular type to an Employee so that, an employee will be able to create a Leave Application only if Leaves are allocated. ", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 04:22:34.220238", - "modified_by": "Administrator", - "name": "Create Leave Allocation", - "owner": "Administrator", - "reference_document": "Leave Allocation", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Create Leave Allocation", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json b/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json deleted file mode 100644 index af63aa59ed..0000000000 --- a/erpnext/hr/onboarding_step/create_leave_application/create_leave_application.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Show Tour", - "creation": "2020-05-14 11:49:45.400764", - "description": "

Leave Application

\n\nLeave Application is a formal document created by an Employee to apply for Leaves for a particular time period based on there leave allocation and leave type according to there need.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 04:39:09.893474", - "modified_by": "Administrator", - "name": "Create Leave Application", - "owner": "Administrator", - "reference_document": "Leave Application", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Create Leave Application", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json b/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json deleted file mode 100644 index 397f5cde49..0000000000 --- a/erpnext/hr/onboarding_step/create_leave_type/create_leave_type.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Show Tour", - "creation": "2020-05-27 11:17:31.119312", - "description": "

Leave Type

\n\nLeave type is defined based on many factors and features like encashment, earned leaves, partially paid, without pay and, a lot more. To check other options and to define your leave type click on Show Tour.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 04:32:48.135406", - "modified_by": "Administrator", - "name": "Create Leave Type", - "owner": "Administrator", - "reference_document": "Leave Type", - "show_form_tour": 0, - "show_full_form": 1, - "title": "Create Leave Type", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/data_import/data_import.json b/erpnext/hr/onboarding_step/data_import/data_import.json deleted file mode 100644 index ac343c6775..0000000000 --- a/erpnext/hr/onboarding_step/data_import/data_import.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Watch Video", - "action_label": "", - "creation": "2021-05-19 05:29:16.809610", - "description": "

Data Import

\n\nData import is the tool to migrate your existing data like Employee, Customer, Supplier, and a lot more to our ERPNext system.\nGo through the video for a detailed explanation of this tool.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2021-05-19 05:29:16.809610", - "modified_by": "Administrator", - "name": "Data import", - "owner": "Administrator", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Data Import", - "validate_action": 1, - "video_url": "https://www.youtube.com/watch?v=DQyqeurPI64" -} \ No newline at end of file diff --git a/erpnext/hr/onboarding_step/hr_settings/hr_settings.json b/erpnext/hr/onboarding_step/hr_settings/hr_settings.json deleted file mode 100644 index 355664fbc5..0000000000 --- a/erpnext/hr/onboarding_step/hr_settings/hr_settings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Show Form Tour", - "action_label": "Explore", - "creation": "2020-05-28 13:13:52.427711", - "description": "

HR Settings

\n\nHr Settings consists of major settings related to Employee Lifecycle, Leave Management, etc. Click on Explore, to explore Hr Settings.", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_single": 1, - "is_skipped": 0, - "modified": "2021-05-18 07:02:05.747548", - "modified_by": "Administrator", - "name": "HR Settings", - "owner": "Administrator", - "reference_document": "HR Settings", - "show_form_tour": 0, - "show_full_form": 0, - "title": "HR Settings", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/hr/page/__init__.py b/erpnext/hr/page/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/page/organizational_chart/__init__.py b/erpnext/hr/page/organizational_chart/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.js b/erpnext/hr/page/organizational_chart/organizational_chart.js deleted file mode 100644 index b0e41e0090..0000000000 --- a/erpnext/hr/page/organizational_chart/organizational_chart.js +++ /dev/null @@ -1,23 +0,0 @@ -frappe.pages['organizational-chart'].on_page_load = function(wrapper) { - frappe.ui.make_app_page({ - parent: wrapper, - title: __('Organizational Chart'), - single_column: true - }); - - $(wrapper).bind('show', () => { - frappe.require('hierarchy-chart.bundle.js', () => { - let organizational_chart = undefined; - let method = 'erpnext.hr.page.organizational_chart.organizational_chart.get_children'; - - if (frappe.is_mobile()) { - organizational_chart = new erpnext.HierarchyChartMobile('Employee', wrapper, method); - } else { - organizational_chart = new erpnext.HierarchyChart('Employee', wrapper, method); - } - - frappe.breadcrumbs.add('HR'); - organizational_chart.show(); - }); - }); -}; diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.json b/erpnext/hr/page/organizational_chart/organizational_chart.json deleted file mode 100644 index d802781320..0000000000 --- a/erpnext/hr/page/organizational_chart/organizational_chart.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "content": null, - "creation": "2021-05-25 10:53:10.107241", - "docstatus": 0, - "doctype": "Page", - "idx": 0, - "modified": "2021-05-25 10:53:18.201931", - "modified_by": "Administrator", - "module": "HR", - "name": "organizational-chart", - "owner": "Administrator", - "page_name": "Organizational Chart", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ], - "script": null, - "standard": "Yes", - "style": null, - "system_page": 0, - "title": "Organizational Chart" -} \ No newline at end of file diff --git a/erpnext/hr/page/organizational_chart/organizational_chart.py b/erpnext/hr/page/organizational_chart/organizational_chart.py deleted file mode 100644 index 3674912dc0..0000000000 --- a/erpnext/hr/page/organizational_chart/organizational_chart.py +++ /dev/null @@ -1,45 +0,0 @@ -import frappe - - -@frappe.whitelist() -def get_children(parent=None, company=None, exclude_node=None): - filters = [["status", "!=", "Left"]] - if company and company != "All Companies": - filters.append(["company", "=", company]) - - if parent and company and parent != company: - filters.append(["reports_to", "=", parent]) - else: - filters.append(["reports_to", "=", ""]) - - if exclude_node: - filters.append(["name", "!=", exclude_node]) - - employees = frappe.get_list( - "Employee", - fields=["employee_name as name", "name as id", "reports_to", "image", "designation as title"], - filters=filters, - order_by="name", - ) - - for employee in employees: - is_expandable = frappe.db.count("Employee", filters={"reports_to": employee.get("id")}) - employee.connections = get_connections(employee.id) - employee.expandable = 1 if is_expandable else 0 - - return employees - - -def get_connections(employee): - num_connections = 0 - - nodes_to_expand = frappe.get_list("Employee", filters=[["reports_to", "=", employee]]) - num_connections += len(nodes_to_expand) - - while nodes_to_expand: - parent = nodes_to_expand.pop(0) - descendants = frappe.get_list("Employee", filters=[["reports_to", "=", parent.name]]) - num_connections += len(descendants) - nodes_to_expand.extend(descendants) - - return num_connections diff --git a/erpnext/hr/page/team_updates/__init__.py b/erpnext/hr/page/team_updates/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/page/team_updates/team_update_row.html b/erpnext/hr/page/team_updates/team_update_row.html deleted file mode 100644 index 4f367541b4..0000000000 --- a/erpnext/hr/page/team_updates/team_update_row.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
- {%= date_sep || "" %}
-
-
-
- {{ avatar }} -
-
- {{ content }} -
-
-
-
diff --git a/erpnext/hr/page/team_updates/team_updates.css b/erpnext/hr/page/team_updates/team_updates.css deleted file mode 100644 index d37e7826b1..0000000000 --- a/erpnext/hr/page/team_updates/team_updates.css +++ /dev/null @@ -1,57 +0,0 @@ -.date-indicator { - background:none; - font-size:12px; - vertical-align:middle; - font-weight:bold; - color:#6c7680; -} -.date-indicator::after { - margin:0 -4px 0 12px; - content:''; - display:inline-block; - height:8px; - width:8px; - border-radius:8px; - background: #d1d8dd; -} - -.date-indicator.blue { - color: #5e64ff; -} - -.date-indicator.blue::after { - background: #5e64ff; -} - -.activity-row { -} - -.activity-message { - border-left: 1px solid #d1d8dd; -} - -.activity-message .row { - padding: 15px; - margin-right: 0px; - border-bottom: 1px solid #d1d8dd; -} - -.activity-row:last-child .activity-message .row { - border-bottom: none; -} - -.activity-row .content { - padding-left: 0px; - padding-right: 30px; -} - -.activity-date { - padding: 15px; - padding-right: 0px; - z-index: 1; -} - -.for-more { - border-top: 1px solid #d1d8dd; - padding: 10px; -} diff --git a/erpnext/hr/page/team_updates/team_updates.js b/erpnext/hr/page/team_updates/team_updates.js deleted file mode 100644 index 358329748e..0000000000 --- a/erpnext/hr/page/team_updates/team_updates.js +++ /dev/null @@ -1,80 +0,0 @@ -frappe.pages['team-updates'].on_page_load = function(wrapper) { - var page = frappe.ui.make_app_page({ - parent: wrapper, - title: __('Team Updates'), - single_column: true - }); - - frappe.team_updates.make(page); - frappe.team_updates.run(); - - if(frappe.model.can_read('Daily Work Summary Group')) { - page.add_menu_item(__('Daily Work Summary Group'), function() { - frappe.set_route('Form', 'Daily Work Summary Group'); - }); - } -} - -frappe.team_updates = { - start: 0, - make: function(page) { - var me = frappe.team_updates; - me.page = page; - me.body = $('
').appendTo(me.page.main); - me.more = $('
').appendTo(me.page.main) - .find('.btn-more').on('click', function() { - me.start += 40; - me.run(); - }); - }, - run: function() { - var me = frappe.team_updates; - frappe.call({ - method: 'erpnext.hr.page.team_updates.team_updates.get_data', - args: { - start: me.start - }, - callback: function(r) { - if (r.message && r.message.length > 0) { - r.message.forEach(function(d) { - me.add_row(d); - }); - } else { - frappe.show_alert({message: __('No more updates'), indicator: 'gray'}); - me.more.parent().addClass('hidden'); - } - } - }); - }, - add_row: function(data) { - var me = frappe.team_updates; - - data.by = frappe.user.full_name(data.sender); - data.avatar = frappe.avatar(data.sender); - data.when = comment_when(data.creation); - - var date = frappe.datetime.str_to_obj(data.creation); - var last = me.last_feed_date; - - if((last && frappe.datetime.obj_to_str(last) != frappe.datetime.obj_to_str(date)) || (!last)) { - var diff = frappe.datetime.get_day_diff(frappe.datetime.get_today(), frappe.datetime.obj_to_str(date)); - var pdate; - if(diff < 1) { - pdate = 'Today'; - } else if(diff < 2) { - pdate = 'Yesterday'; - } else { - pdate = frappe.datetime.global_date_format(date); - } - data.date_sep = pdate; - data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator"; - } else { - data.date_sep = null; - data.date_class = ""; - } - me.last_feed_date = date; - - $(frappe.render_template('team_update_row', data)).appendTo(me.body); - } -} diff --git a/erpnext/hr/page/team_updates/team_updates.json b/erpnext/hr/page/team_updates/team_updates.json deleted file mode 100644 index 167c67fb4e..0000000000 --- a/erpnext/hr/page/team_updates/team_updates.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "content": null, - "creation": "2017-01-31 11:02:31.614045", - "docstatus": 0, - "doctype": "Page", - "idx": 0, - "modified": "2017-01-31 11:25:01.983200", - "modified_by": "Administrator", - "module": "HR", - "name": "team-updates", - "owner": "Administrator", - "page_name": "team-updates", - "roles": [ - { - "role": "Employee" - }, - { - "role": "System Manager" - } - ], - "script": null, - "standard": "Yes", - "style": null, - "title": "Team Updates" -} \ No newline at end of file diff --git a/erpnext/hr/page/team_updates/team_updates.py b/erpnext/hr/page/team_updates/team_updates.py deleted file mode 100644 index c1fcb73585..0000000000 --- a/erpnext/hr/page/team_updates/team_updates.py +++ /dev/null @@ -1,24 +0,0 @@ -import frappe -from email_reply_parser import EmailReplyParser - - -@frappe.whitelist() -def get_data(start=0): - # frappe.only_for('Employee', 'System Manager') - data = frappe.get_all( - "Communication", - fields=("content", "text_content", "sender", "creation"), - filters=dict(reference_doctype="Daily Work Summary"), - order_by="creation desc", - limit=40, - start=start, - ) - - for d in data: - d.sender_name = ( - frappe.db.get_value("Employee", {"user_id": d.sender}, "employee_name") or d.sender - ) - if d.text_content: - d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content)) - - return data diff --git a/erpnext/hr/print_format/__init__.py b/erpnext/hr/print_format/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/print_format/job_offer/__init__.py b/erpnext/hr/print_format/job_offer/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/print_format/job_offer/job_offer.json b/erpnext/hr/print_format/job_offer/job_offer.json deleted file mode 100644 index 0a922306b4..0000000000 --- a/erpnext/hr/print_format/job_offer/job_offer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "align_labels_right": 0, - "creation": "2015-03-05 14:34:26.751210", - "custom_format": 1, - "disabled": 0, - "doc_type": "Job Offer", - "docstatus": 0, - "doctype": "Print Format", - "html": "{% set terms_exist = doc.terms and (doc.terms|striptags).strip() or \"\" %}\n\n{% if letter_head and not no_letterhead -%}\n
{{ letter_head }}
\n
\n{%- endif %}\n\n
\n

\n\n\nDate: {{ doc.offer_date }}\n

\n\nDear {{ doc.applicant_name }}, \n\n

\n\nWe are pleased to appoint you in the services of {{ doc.company }} on the terms and conditions detailed in this letter.\n\n

\n\nYour designation shall be {{ doc.designation }}.\n\n

\n\n\n\n{%- if doc.offer_terms -%}\n {%- for row in doc.offer_terms -%}\n {{ row.offer_term }}: {{ row.value }}\n\n
\n {%- endfor -%}\n{%- endif -%}\n\n
\n\n\n\n\nPlease read the detailed terms as below. If you have any queries, feel free to get in touch with us.\nWe look forward to your long and fruitful career association with our organisation.\nIf you decide to join us, 'Welcome to {{ doc.company }} !'\n\n

\n\n

\n\nYours truly,\n\n



\n\nAuthorized Signatory\n\n
\n\n{{ doc.company }}\n\n\n\n

\n
\n\n\n{% if terms_exist %}\n
{{ doc.terms }}
\n{% endif %}", - "idx": 0, - "line_breaks": 0, - "modified": "2018-02-15 03:03:55.844085", - "modified_by": "Administrator", - "module": "HR", - "name": "Job Offer", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_type": "Jinja", - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/hr/print_format/standard_appointment_letter/__init__.py b/erpnext/hr/print_format/standard_appointment_letter/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html b/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html deleted file mode 100644 index 87daafcaae..0000000000 --- a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.html +++ /dev/null @@ -1,38 +0,0 @@ -{%- from "templates/print_formats/standard_macros.html" import add_header -%} - -

Appointment Letter

-
-
- {{ doc.applicant_name }}, -
-
- Date: {{ doc.appointment_date }} -
-
-
- {{ doc.introduction }} -
-
-
    - {% for content in doc.terms %} -
  • - - {{ content.title }}: {{ content.description }} - -
  • - {% endfor %} -
-
-
-Your sincerely,
-For {{ doc.company }} -
- -
- {{ doc.closing_notes }} -
- -
- ________________
- {{ doc.applicant_name }} -
diff --git a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json b/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json deleted file mode 100644 index 1813e711f5..0000000000 --- a/erpnext/hr/print_format/standard_appointment_letter/standard_appointment_letter.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "align_labels_right": 0, - "creation": "2019-12-26 15:22:44.200332", - "custom_format": 0, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Appointment Letter", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "idx": 0, - "line_breaks": 0, - "modified": "2020-01-21 17:24:16.705082", - "modified_by": "Administrator", - "module": "HR", - "name": "Standard Appointment Letter", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/hr/report/__init__.py b/erpnext/hr/report/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/daily_work_summary_replies/__init__.py b/erpnext/hr/report/daily_work_summary_replies/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js deleted file mode 100644 index 0980c6957b..0000000000 --- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -/* eslint-disable */ -frappe.query_reports["Daily Work Summary Replies"] = { - "filters": [ - { - "fieldname":"group", - "label": __("Group"), - "fieldtype": "Link", - "options": "Daily Work Summary Group", - "reqd": 1 - }, - { - "fieldname": "range", - "label": __("Date Range"), - "fieldtype": "DateRange", - "reqd": 1 - } - ] -} diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json deleted file mode 100644 index 04c88506d7..0000000000 --- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2018-06-04 10:30:25.673452", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2018-06-04 10:44:04.694509", - "modified_by": "Administrator", - "module": "HR", - "name": "Daily Work Summary Replies", - "owner": "Administrator", - "ref_doctype": "Daily Work Summary", - "report_name": "Daily Work Summary Replies", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "HR User" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py b/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py deleted file mode 100644 index d93688a492..0000000000 --- a/erpnext/hr/report/daily_work_summary_replies/daily_work_summary_replies.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - -from erpnext.hr.doctype.daily_work_summary.daily_work_summary import get_user_emails_from_group - - -def execute(filters=None): - if not filters.group: - return [], [] - columns, data = get_columns(), get_data(filters) - return columns, data - - -def get_columns(filters=None): - columns = [ - {"label": _("User"), "fieldname": "user", "fieldtype": "Data", "width": 300}, - { - "label": _("Replies"), - "fieldname": "count", - "fieldtype": "data", - "width": 100, - "align": "right", - }, - { - "label": _("Total"), - "fieldname": "total", - "fieldtype": "data", - "width": 100, - "align": "right", - }, - ] - return columns - - -def get_data(filters): - daily_summary_emails = frappe.get_all( - "Daily Work Summary", fields=["name"], filters=[["creation", "Between", filters.range]] - ) - daily_summary_emails = [d.get("name") for d in daily_summary_emails] - replies = frappe.get_all( - "Communication", - fields=["content", "text_content", "sender"], - filters=[ - ["reference_doctype", "=", "Daily Work Summary"], - ["reference_name", "in", daily_summary_emails], - ["communication_type", "=", "Communication"], - ["sent_or_received", "=", "Received"], - ], - order_by="creation asc", - ) - data = [] - total = len(daily_summary_emails) - for user in get_user_emails_from_group(filters.group): - user_name = frappe.get_value("User", user, "full_name") - count = len([d for d in replies if d.sender == user]) - data.append([user_name, count, total]) - return data diff --git a/erpnext/hr/report/employee_advance_summary/__init__.py b/erpnext/hr/report/employee_advance_summary/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js deleted file mode 100644 index 8de4af5d4f..0000000000 --- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Employee Advance Summary"] = { - "filters": [ - { - "fieldname":"employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee", - "width": "80" - }, - { - "fieldname":"from_date", - "label": __("From Date"), - "fieldtype": "Date", - "default": frappe.defaults.get_user_default("year_start_date"), - "width": "80" - }, - { - "fieldname":"to_date", - "label": __("To Date"), - "fieldtype": "Date", - "default": frappe.datetime.get_today() - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company" - }, - { - "fieldname":"status", - "label": __("Status"), - "fieldtype": "Select", - "options": "\nDraft\nPaid\nUnpaid\nClaimed\nCancelled" - } - ] -}; diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json deleted file mode 100644 index 60afd59d6b..0000000000 --- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2018-02-21 07:12:37.299923", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2018-02-22 13:33:41.532005", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Advance Summary", - "owner": "Administrator", - "ref_doctype": "Employee Advance", - "report_name": "Employee Advance Summary", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "Expense Approver" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py b/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py deleted file mode 100644 index 29532f7680..0000000000 --- a/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _, msgprint - - -def execute(filters=None): - if not filters: - filters = {} - - advances_list = get_advances(filters) - columns = get_columns() - - if not advances_list: - msgprint(_("No record found")) - return columns, advances_list - - data = [] - for advance in advances_list: - row = [ - advance.name, - advance.employee, - advance.company, - advance.posting_date, - advance.advance_amount, - advance.paid_amount, - advance.claimed_amount, - advance.status, - ] - data.append(row) - - return columns, data - - -def get_columns(): - return [ - { - "label": _("Title"), - "fieldname": "title", - "fieldtype": "Link", - "options": "Employee Advance", - "width": 120, - }, - { - "label": _("Employee"), - "fieldname": "employee", - "fieldtype": "Link", - "options": "Employee", - "width": 120, - }, - { - "label": _("Company"), - "fieldname": "company", - "fieldtype": "Link", - "options": "Company", - "width": 120, - }, - {"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 120}, - { - "label": _("Advance Amount"), - "fieldname": "advance_amount", - "fieldtype": "Currency", - "width": 120, - }, - {"label": _("Paid Amount"), "fieldname": "paid_amount", "fieldtype": "Currency", "width": 120}, - { - "label": _("Claimed Amount"), - "fieldname": "claimed_amount", - "fieldtype": "Currency", - "width": 120, - }, - {"label": _("Status"), "fieldname": "status", "fieldtype": "Data", "width": 120}, - ] - - -def get_conditions(filters): - conditions = "" - - if filters.get("employee"): - conditions += "and employee = %(employee)s" - if filters.get("company"): - conditions += " and company = %(company)s" - if filters.get("status"): - conditions += " and status = %(status)s" - if filters.get("from_date"): - conditions += " and posting_date>=%(from_date)s" - if filters.get("to_date"): - conditions += " and posting_date<=%(to_date)s" - - return conditions - - -def get_advances(filters): - conditions = get_conditions(filters) - return frappe.db.sql( - """select name, employee, paid_amount, status, advance_amount, claimed_amount, company, - posting_date, purpose - from `tabEmployee Advance` - where docstatus<2 %s order by posting_date, name desc""" - % conditions, - filters, - as_dict=1, - ) diff --git a/erpnext/hr/report/employee_analytics/__init__.py b/erpnext/hr/report/employee_analytics/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.js b/erpnext/hr/report/employee_analytics/employee_analytics.js deleted file mode 100644 index 8620a65a90..0000000000 --- a/erpnext/hr/report/employee_analytics/employee_analytics.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Employee Analytics"] = { - "filters": [ - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "reqd": 1 - }, - { - "fieldname":"parameter", - "label": __("Parameter"), - "fieldtype": "Select", - "options": ["Branch","Grade","Department","Designation", "Employment Type"], - "reqd": 1 - } - ] -}; diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.json b/erpnext/hr/report/employee_analytics/employee_analytics.json deleted file mode 100644 index 5a7ab9a251..0000000000 --- a/erpnext/hr/report/employee_analytics/employee_analytics.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-05-12 13:52:50.631086", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-05-12 13:52:50.631086", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Analytics", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Employee", - "report_name": "Employee Analytics", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_analytics/employee_analytics.py b/erpnext/hr/report/employee_analytics/employee_analytics.py deleted file mode 100644 index 12be156ab9..0000000000 --- a/erpnext/hr/report/employee_analytics/employee_analytics.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - - -def execute(filters=None): - if not filters: - filters = {} - - if not filters["company"]: - frappe.throw(_("{0} is mandatory").format(_("Company"))) - - columns = get_columns() - employees = get_employees(filters) - parameters_result = get_parameters(filters) - parameters = [] - if parameters_result: - for department in parameters_result: - parameters.append(department) - - chart = get_chart_data(parameters, employees, filters) - return columns, employees, None, chart - - -def get_columns(): - return [ - _("Employee") + ":Link/Employee:120", - _("Name") + ":Data:200", - _("Date of Birth") + ":Date:100", - _("Branch") + ":Link/Branch:120", - _("Department") + ":Link/Department:120", - _("Designation") + ":Link/Designation:120", - _("Gender") + "::100", - _("Company") + ":Link/Company:120", - ] - - -def get_conditions(filters): - conditions = " and " + filters.get("parameter").lower().replace(" ", "_") + " IS NOT NULL " - - if filters.get("company"): - conditions += " and company = '%s'" % filters["company"].replace("'", "\\'") - return conditions - - -def get_employees(filters): - conditions = get_conditions(filters) - return frappe.db.sql( - """select name, employee_name, date_of_birth, - branch, department, designation, - gender, company from `tabEmployee` where status = 'Active' %s""" - % conditions, - as_list=1, - ) - - -def get_parameters(filters): - if filters.get("parameter") == "Grade": - parameter = "Employee Grade" - else: - parameter = filters.get("parameter") - - return frappe.db.sql("""select name from `tab""" + parameter + """` """, as_list=1) - - -def get_chart_data(parameters, employees, filters): - if not parameters: - parameters = [] - datasets = [] - parameter_field_name = filters.get("parameter").lower().replace(" ", "_") - label = [] - for parameter in parameters: - if parameter: - total_employee = frappe.db.sql( - """select count(*) from - `tabEmployee` where """ - + parameter_field_name - + """ = %s and company = %s""", - (parameter[0], filters.get("company")), - as_list=1, - ) - if total_employee[0][0]: - label.append(parameter) - datasets.append(total_employee[0][0]) - - values = [value for value in datasets if value != 0] - - total_employee = frappe.db.count("Employee", {"status": "Active"}) - others = total_employee - sum(values) - - label.append(["Not Set"]) - values.append(others) - - chart = {"data": {"labels": label, "datasets": [{"name": "Employees", "values": values}]}} - chart["type"] = "donut" - return chart diff --git a/erpnext/hr/report/employee_birthday/__init__.py b/erpnext/hr/report/employee_birthday/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.js b/erpnext/hr/report/employee_birthday/employee_birthday.js deleted file mode 100644 index bbe4a8d179..0000000000 --- a/erpnext/hr/report/employee_birthday/employee_birthday.js +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.query_reports["Employee Birthday"] = { - "filters": [ - { - "fieldname":"month", - "label": __("Month"), - "fieldtype": "Select", - "options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec", - "default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", - "Dec"][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()], - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company") - } - ] -} diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.json b/erpnext/hr/report/employee_birthday/employee_birthday.json deleted file mode 100644 index 7946a6a55d..0000000000 --- a/erpnext/hr/report/employee_birthday/employee_birthday.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2013-05-06 17:56:03", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-02-24 20:18:13.011024", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Birthday", - "owner": "Administrator", - "ref_doctype": "Employee", - "report_name": "Employee Birthday", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_birthday/employee_birthday.py b/erpnext/hr/report/employee_birthday/employee_birthday.py deleted file mode 100644 index a6a13d8a4d..0000000000 --- a/erpnext/hr/report/employee_birthday/employee_birthday.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ - - -def execute(filters=None): - if not filters: - filters = {} - - columns = get_columns() - data = get_employees(filters) - - return columns, data - - -def get_columns(): - return [ - _("Employee") + ":Link/Employee:120", - _("Name") + ":Data:200", - _("Date of Birth") + ":Date:100", - _("Branch") + ":Link/Branch:120", - _("Department") + ":Link/Department:120", - _("Designation") + ":Link/Designation:120", - _("Gender") + "::60", - _("Company") + ":Link/Company:120", - ] - - -def get_employees(filters): - conditions = get_conditions(filters) - return frappe.db.sql( - """select name, employee_name, date_of_birth, - branch, department, designation, - gender, company from tabEmployee where status = 'Active' %s""" - % conditions, - as_list=1, - ) - - -def get_conditions(filters): - conditions = "" - if filters.get("month"): - month = [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ].index(filters["month"]) + 1 - conditions += " and month(date_of_birth) = '%s'" % month - - if filters.get("company"): - conditions += " and company = '%s'" % filters["company"].replace("'", "\\'") - - return conditions diff --git a/erpnext/hr/report/employee_exits/__init__.py b/erpnext/hr/report/employee_exits/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_exits/employee_exits.js b/erpnext/hr/report/employee_exits/employee_exits.js deleted file mode 100644 index ac677d87e7..0000000000 --- a/erpnext/hr/report/employee_exits/employee_exits.js +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Employee Exits"] = { - filters: [ - { - "fieldname": "from_date", - "label": __("From Date"), - "fieldtype": "Date", - "default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12) - }, - { - "fieldname": "to_date", - "label": __("To Date"), - "fieldtype": "Date", - "default": frappe.datetime.nowdate() - }, - { - "fieldname": "company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company" - }, - { - "fieldname": "department", - "label": __("Department"), - "fieldtype": "Link", - "options": "Department" - }, - { - "fieldname": "designation", - "label": __("Designation"), - "fieldtype": "Link", - "options": "Designation" - }, - { - "fieldname": "employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee" - }, - { - "fieldname": "reports_to", - "label": __("Reports To"), - "fieldtype": "Link", - "options": "Employee" - }, - { - "fieldname": "interview_status", - "label": __("Interview Status"), - "fieldtype": "Select", - "options": ["", "Pending", "Scheduled", "Completed"] - }, - { - "fieldname": "final_decision", - "label": __("Final Decision"), - "fieldtype": "Select", - "options": ["", "Employee Retained", "Exit Confirmed"] - }, - { - "fieldname": "exit_interview_pending", - "label": __("Exit Interview Pending"), - "fieldtype": "Check" - }, - { - "fieldname": "questionnaire_pending", - "label": __("Exit Questionnaire Pending"), - "fieldtype": "Check" - }, - { - "fieldname": "fnf_pending", - "label": __("FnF Pending"), - "fieldtype": "Check" - } - ] -}; diff --git a/erpnext/hr/report/employee_exits/employee_exits.json b/erpnext/hr/report/employee_exits/employee_exits.json deleted file mode 100644 index 4fe9a853c0..0000000000 --- a/erpnext/hr/report/employee_exits/employee_exits.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "add_total_row": 0, - "columns": [], - "creation": "2021-12-05 19:47:18.332319", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "filters": [], - "idx": 0, - "is_standard": "Yes", - "letter_head": "Test", - "modified": "2021-12-05 19:47:18.332319", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Exits", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Exit Interview", - "report_name": "Employee Exits", - "report_type": "Script Report", - "roles": [ - { - "role": "System Manager" - }, - { - "role": "HR Manager" - }, - { - "role": "HR User" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_exits/employee_exits.py b/erpnext/hr/report/employee_exits/employee_exits.py deleted file mode 100644 index 9cd9ff0a6b..0000000000 --- a/erpnext/hr/report/employee_exits/employee_exits.py +++ /dev/null @@ -1,235 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# License: MIT. See LICENSE - -import frappe -from frappe import _ -from frappe.query_builder import Order -from frappe.utils import getdate - - -def execute(filters=None): - columns = get_columns() - data = get_data(filters) - chart = get_chart_data(data) - report_summary = get_report_summary(data) - - return columns, data, None, chart, report_summary - - -def get_columns(): - return [ - { - "label": _("Employee"), - "fieldname": "employee", - "fieldtype": "Link", - "options": "Employee", - "width": 150, - }, - {"label": _("Employee Name"), "fieldname": "employee_name", "fieldtype": "Data", "width": 150}, - { - "label": _("Date of Joining"), - "fieldname": "date_of_joining", - "fieldtype": "Date", - "width": 120, - }, - {"label": _("Relieving Date"), "fieldname": "relieving_date", "fieldtype": "Date", "width": 120}, - { - "label": _("Exit Interview"), - "fieldname": "exit_interview", - "fieldtype": "Link", - "options": "Exit Interview", - "width": 150, - }, - { - "label": _("Interview Status"), - "fieldname": "interview_status", - "fieldtype": "Data", - "width": 130, - }, - { - "label": _("Final Decision"), - "fieldname": "employee_status", - "fieldtype": "Data", - "width": 150, - }, - { - "label": _("Full and Final Statement"), - "fieldname": "full_and_final_statement", - "fieldtype": "Link", - "options": "Full and Final Statement", - "width": 180, - }, - { - "label": _("Department"), - "fieldname": "department", - "fieldtype": "Link", - "options": "Department", - "width": 120, - }, - { - "label": _("Designation"), - "fieldname": "designation", - "fieldtype": "Link", - "options": "Designation", - "width": 120, - }, - { - "label": _("Reports To"), - "fieldname": "reports_to", - "fieldtype": "Link", - "options": "Employee", - "width": 120, - }, - ] - - -def get_data(filters): - employee = frappe.qb.DocType("Employee") - interview = frappe.qb.DocType("Exit Interview") - fnf = frappe.qb.DocType("Full and Final Statement") - - query = ( - frappe.qb.from_(employee) - .left_join(interview) - .on(interview.employee == employee.name) - .left_join(fnf) - .on(fnf.employee == employee.name) - .select( - employee.name.as_("employee"), - employee.employee_name.as_("employee_name"), - employee.date_of_joining.as_("date_of_joining"), - employee.relieving_date.as_("relieving_date"), - employee.department.as_("department"), - employee.designation.as_("designation"), - employee.reports_to.as_("reports_to"), - interview.name.as_("exit_interview"), - interview.status.as_("interview_status"), - interview.employee_status.as_("employee_status"), - interview.reference_document_name.as_("questionnaire"), - fnf.name.as_("full_and_final_statement"), - ) - .distinct() - .where( - ((employee.relieving_date.isnotnull()) | (employee.relieving_date != "")) - & ((interview.name.isnull()) | ((interview.name.isnotnull()) & (interview.docstatus != 2))) - & ((fnf.name.isnull()) | ((fnf.name.isnotnull()) & (fnf.docstatus != 2))) - ) - .orderby(employee.relieving_date, order=Order.asc) - ) - - query = get_conditions(filters, query, employee, interview, fnf) - result = query.run(as_dict=True) - - return result - - -def get_conditions(filters, query, employee, interview, fnf): - if filters.get("from_date") and filters.get("to_date"): - query = query.where( - employee.relieving_date[getdate(filters.get("from_date")) : getdate(filters.get("to_date"))] - ) - - elif filters.get("from_date"): - query = query.where(employee.relieving_date >= filters.get("from_date")) - - elif filters.get("to_date"): - query = query.where(employee.relieving_date <= filters.get("to_date")) - - if filters.get("company"): - query = query.where(employee.company == filters.get("company")) - - if filters.get("department"): - query = query.where(employee.department == filters.get("department")) - - if filters.get("designation"): - query = query.where(employee.designation == filters.get("designation")) - - if filters.get("employee"): - query = query.where(employee.name == filters.get("employee")) - - if filters.get("reports_to"): - query = query.where(employee.reports_to == filters.get("reports_to")) - - if filters.get("interview_status"): - query = query.where(interview.status == filters.get("interview_status")) - - if filters.get("final_decision"): - query = query.where(interview.employee_status == filters.get("final_decision")) - - if filters.get("exit_interview_pending"): - query = query.where((interview.name == "") | (interview.name.isnull())) - - if filters.get("questionnaire_pending"): - query = query.where( - (interview.reference_document_name == "") | (interview.reference_document_name.isnull()) - ) - - if filters.get("fnf_pending"): - query = query.where((fnf.name == "") | (fnf.name.isnull())) - - return query - - -def get_chart_data(data): - if not data: - return None - - retained = 0 - exit_confirmed = 0 - pending = 0 - - for entry in data: - if entry.employee_status == "Employee Retained": - retained += 1 - elif entry.employee_status == "Exit Confirmed": - exit_confirmed += 1 - else: - pending += 1 - - chart = { - "data": { - "labels": [_("Retained"), _("Exit Confirmed"), _("Decision Pending")], - "datasets": [{"name": _("Employee Status"), "values": [retained, exit_confirmed, pending]}], - }, - "type": "donut", - "colors": ["green", "red", "blue"], - } - - return chart - - -def get_report_summary(data): - if not data: - return None - - total_resignations = len(data) - interviews_pending = len([entry.name for entry in data if not entry.exit_interview]) - fnf_pending = len([entry.name for entry in data if not entry.full_and_final_statement]) - questionnaires_pending = len([entry.name for entry in data if not entry.questionnaire]) - - return [ - { - "value": total_resignations, - "label": _("Total Resignations"), - "indicator": "Red" if total_resignations > 0 else "Green", - "datatype": "Int", - }, - { - "value": interviews_pending, - "label": _("Pending Interviews"), - "indicator": "Blue" if interviews_pending > 0 else "Green", - "datatype": "Int", - }, - { - "value": fnf_pending, - "label": _("Pending FnF"), - "indicator": "Blue" if fnf_pending > 0 else "Green", - "datatype": "Int", - }, - { - "value": questionnaires_pending, - "label": _("Pending Questionnaires"), - "indicator": "Blue" if questionnaires_pending > 0 else "Green", - "datatype": "Int", - }, - ] diff --git a/erpnext/hr/report/employee_exits/test_employee_exits.py b/erpnext/hr/report/employee_exits/test_employee_exits.py deleted file mode 100644 index a9a30de554..0000000000 --- a/erpnext/hr/report/employee_exits/test_employee_exits.py +++ /dev/null @@ -1,245 +0,0 @@ -import unittest - -import frappe -from frappe.utils import add_days, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.exit_interview.test_exit_interview import create_exit_interview -from erpnext.hr.doctype.full_and_final_statement.test_full_and_final_statement import ( - create_full_and_final_statement, -) -from erpnext.hr.report.employee_exits.employee_exits import execute - - -class TestEmployeeExits(unittest.TestCase): - @classmethod - def setUpClass(cls): - create_company() - frappe.db.sql("delete from `tabEmployee` where company='Test Company'") - frappe.db.sql("delete from `tabFull and Final Statement` where company='Test Company'") - frappe.db.sql("delete from `tabExit Interview` where company='Test Company'") - - cls.create_records() - - @classmethod - def tearDownClass(cls): - frappe.db.rollback() - - @classmethod - def create_records(cls): - cls.emp1 = make_employee( - "employeeexit1@example.com", - company="Test Company", - date_of_joining=getdate("01-10-2021"), - relieving_date=add_days(getdate(), 14), - designation="Accountant", - ) - cls.emp2 = make_employee( - "employeeexit2@example.com", - company="Test Company", - date_of_joining=getdate("01-12-2021"), - relieving_date=add_days(getdate(), 15), - designation="Accountant", - ) - - cls.emp3 = make_employee( - "employeeexit3@example.com", - company="Test Company", - date_of_joining=getdate("02-12-2021"), - relieving_date=add_days(getdate(), 29), - designation="Engineer", - ) - cls.emp4 = make_employee( - "employeeexit4@example.com", - company="Test Company", - date_of_joining=getdate("01-12-2021"), - relieving_date=add_days(getdate(), 30), - designation="Engineer", - ) - - # exit interview for 3 employees only - cls.interview1 = create_exit_interview(cls.emp1) - cls.interview2 = create_exit_interview(cls.emp2) - cls.interview3 = create_exit_interview(cls.emp3) - - # create fnf for some records - cls.fnf1 = create_full_and_final_statement(cls.emp1) - cls.fnf2 = create_full_and_final_statement(cls.emp2) - - # link questionnaire for a few records - # setting employee doctype as reference instead of creating a questionnaire - # since this is just for a test - frappe.db.set_value( - "Exit Interview", - cls.interview1.name, - {"ref_doctype": "Employee", "reference_document_name": cls.emp1}, - ) - - frappe.db.set_value( - "Exit Interview", - cls.interview2.name, - {"ref_doctype": "Employee", "reference_document_name": cls.emp2}, - ) - - frappe.db.set_value( - "Exit Interview", - cls.interview3.name, - {"ref_doctype": "Employee", "reference_document_name": cls.emp3}, - ) - - def test_employee_exits_summary(self): - filters = { - "company": "Test Company", - "from_date": getdate(), - "to_date": add_days(getdate(), 15), - "designation": "Accountant", - } - - report = execute(filters) - - employee1 = frappe.get_doc("Employee", self.emp1) - employee2 = frappe.get_doc("Employee", self.emp2) - expected_data = [ - { - "employee": employee1.name, - "employee_name": employee1.employee_name, - "date_of_joining": employee1.date_of_joining, - "relieving_date": employee1.relieving_date, - "department": employee1.department, - "designation": employee1.designation, - "reports_to": None, - "exit_interview": self.interview1.name, - "interview_status": self.interview1.status, - "employee_status": "", - "questionnaire": employee1.name, - "full_and_final_statement": self.fnf1.name, - }, - { - "employee": employee2.name, - "employee_name": employee2.employee_name, - "date_of_joining": employee2.date_of_joining, - "relieving_date": employee2.relieving_date, - "department": employee2.department, - "designation": employee2.designation, - "reports_to": None, - "exit_interview": self.interview2.name, - "interview_status": self.interview2.status, - "employee_status": "", - "questionnaire": employee2.name, - "full_and_final_statement": self.fnf2.name, - }, - ] - - self.assertEqual(expected_data, report[1]) # rows - - def test_pending_exit_interviews_summary(self): - filters = { - "company": "Test Company", - "from_date": getdate(), - "to_date": add_days(getdate(), 30), - "exit_interview_pending": 1, - } - - report = execute(filters) - - employee4 = frappe.get_doc("Employee", self.emp4) - expected_data = [ - { - "employee": employee4.name, - "employee_name": employee4.employee_name, - "date_of_joining": employee4.date_of_joining, - "relieving_date": employee4.relieving_date, - "department": employee4.department, - "designation": employee4.designation, - "reports_to": None, - "exit_interview": None, - "interview_status": None, - "employee_status": None, - "questionnaire": None, - "full_and_final_statement": None, - } - ] - - self.assertEqual(expected_data, report[1]) # rows - - def test_pending_exit_questionnaire_summary(self): - filters = { - "company": "Test Company", - "from_date": getdate(), - "to_date": add_days(getdate(), 30), - "questionnaire_pending": 1, - } - - report = execute(filters) - - employee4 = frappe.get_doc("Employee", self.emp4) - expected_data = [ - { - "employee": employee4.name, - "employee_name": employee4.employee_name, - "date_of_joining": employee4.date_of_joining, - "relieving_date": employee4.relieving_date, - "department": employee4.department, - "designation": employee4.designation, - "reports_to": None, - "exit_interview": None, - "interview_status": None, - "employee_status": None, - "questionnaire": None, - "full_and_final_statement": None, - } - ] - - self.assertEqual(expected_data, report[1]) # rows - - def test_pending_fnf_summary(self): - filters = {"company": "Test Company", "fnf_pending": 1} - - report = execute(filters) - - employee3 = frappe.get_doc("Employee", self.emp3) - employee4 = frappe.get_doc("Employee", self.emp4) - expected_data = [ - { - "employee": employee3.name, - "employee_name": employee3.employee_name, - "date_of_joining": employee3.date_of_joining, - "relieving_date": employee3.relieving_date, - "department": employee3.department, - "designation": employee3.designation, - "reports_to": None, - "exit_interview": self.interview3.name, - "interview_status": self.interview3.status, - "employee_status": "", - "questionnaire": employee3.name, - "full_and_final_statement": None, - }, - { - "employee": employee4.name, - "employee_name": employee4.employee_name, - "date_of_joining": employee4.date_of_joining, - "relieving_date": employee4.relieving_date, - "department": employee4.department, - "designation": employee4.designation, - "reports_to": None, - "exit_interview": None, - "interview_status": None, - "employee_status": None, - "questionnaire": None, - "full_and_final_statement": None, - }, - ] - - self.assertEqual(expected_data, report[1]) # rows - - -def create_company(): - if not frappe.db.exists("Company", "Test Company"): - frappe.get_doc( - { - "doctype": "Company", - "company_name": "Test Company", - "default_currency": "INR", - "country": "India", - } - ).insert() diff --git a/erpnext/hr/report/employee_information/__init__.py b/erpnext/hr/report/employee_information/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_information/employee_information.json b/erpnext/hr/report/employee_information/employee_information.json deleted file mode 100644 index ee68af3b63..0000000000 --- a/erpnext/hr/report/employee_information/employee_information.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2013-05-06 18:43:53", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "json": "{\"add_total_row\": 0, \"sort_by\": \"Employee.bank_ac_no\", \"sort_order\": \"desc\", \"sort_by_next\": \"\", \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Employee\"], [\"employee_number\", \"Employee\"], [\"date_of_joining\", \"Employee\"], [\"branch\", \"Employee\"], [\"department\", \"Employee\"], [\"designation\", \"Employee\"], [\"gender\", \"Employee\"], [\"status\", \"Employee\"], [\"company\", \"Employee\"], [\"employment_type\", \"Employee\"], [\"reports_to\", \"Employee\"], [\"company_email\", \"Employee\"]]}", - "modified": "2017-02-24 20:01:38.681441", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Information", - "owner": "Administrator", - "ref_doctype": "Employee", - "report_name": "Employee Information", - "report_type": "Report Builder", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_leave_balance/__init__.py b/erpnext/hr/report/employee_leave_balance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js deleted file mode 100644 index 8bb3457190..0000000000 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.query_reports["Employee Leave Balance"] = { - "filters": [ - { - "fieldname":"from_date", - "label": __("From Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.defaults.get_default("year_start_date") - }, - { - "fieldname":"to_date", - "label": __("To Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.defaults.get_default("year_end_date") - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "reqd": 1, - "default": frappe.defaults.get_user_default("Company") - }, - { - "fieldname":"department", - "label": __("Department"), - "fieldtype": "Link", - "options": "Department", - }, - { - "fieldname":"employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee", - } - ], - - onload: () => { - frappe.call({ - type: "GET", - method: "erpnext.hr.utils.get_leave_period", - args: { - "from_date": frappe.defaults.get_default("year_start_date"), - "to_date": frappe.defaults.get_default("year_end_date"), - "company": frappe.defaults.get_user_default("Company") - }, - freeze: true, - callback: (data) => { - frappe.query_report.set_filter_value("from_date", data.message[0].from_date); - frappe.query_report.set_filter_value("to_date", data.message[0].to_date); - } - }); - } -} diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json deleted file mode 100644 index 8b47f7e842..0000000000 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2013-02-22 15:29:34", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-02-24 20:18:04.317397", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Leave Balance", - "owner": "Administrator", - "ref_doctype": "Employee", - "report_name": "Employee Leave Balance", - "report_type": "Script Report", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py deleted file mode 100644 index ca352f197d..0000000000 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +++ /dev/null @@ -1,305 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from itertools import groupby -from typing import Dict, List, Optional, Tuple - -import frappe -from frappe import _ -from frappe.utils import add_days, getdate - -from erpnext.hr.doctype.leave_allocation.leave_allocation import get_previous_allocation -from erpnext.hr.doctype.leave_application.leave_application import ( - get_leave_balance_on, - get_leaves_for_period, -) - -Filters = frappe._dict - - -def execute(filters: Optional[Filters] = None) -> Tuple: - if filters.to_date <= filters.from_date: - frappe.throw(_('"From Date" can not be greater than or equal to "To Date"')) - - columns = get_columns() - data = get_data(filters) - charts = get_chart_data(data) - return columns, data, None, charts - - -def get_columns() -> List[Dict]: - return [ - { - "label": _("Leave Type"), - "fieldtype": "Link", - "fieldname": "leave_type", - "width": 200, - "options": "Leave Type", - }, - { - "label": _("Employee"), - "fieldtype": "Link", - "fieldname": "employee", - "width": 100, - "options": "Employee", - }, - { - "label": _("Employee Name"), - "fieldtype": "Dynamic Link", - "fieldname": "employee_name", - "width": 100, - "options": "employee", - }, - { - "label": _("Opening Balance"), - "fieldtype": "float", - "fieldname": "opening_balance", - "width": 150, - }, - { - "label": _("New Leave(s) Allocated"), - "fieldtype": "float", - "fieldname": "leaves_allocated", - "width": 200, - }, - { - "label": _("Leave(s) Taken"), - "fieldtype": "float", - "fieldname": "leaves_taken", - "width": 150, - }, - { - "label": _("Leave(s) Expired"), - "fieldtype": "float", - "fieldname": "leaves_expired", - "width": 150, - }, - { - "label": _("Closing Balance"), - "fieldtype": "float", - "fieldname": "closing_balance", - "width": 150, - }, - ] - - -def get_data(filters: Filters) -> List: - leave_types = frappe.db.get_list("Leave Type", pluck="name", order_by="name") - conditions = get_conditions(filters) - - user = frappe.session.user - department_approver_map = get_department_leave_approver_map(filters.get("department")) - - active_employees = frappe.get_list( - "Employee", - filters=conditions, - fields=["name", "employee_name", "department", "user_id", "leave_approver"], - ) - - data = [] - - for leave_type in leave_types: - if len(active_employees) > 1: - data.append({"leave_type": leave_type}) - else: - row = frappe._dict({"leave_type": leave_type}) - - for employee in active_employees: - - leave_approvers = department_approver_map.get(employee.department_name, []).append( - employee.leave_approver - ) - - if ( - (leave_approvers and len(leave_approvers) and user in leave_approvers) - or (user in ["Administrator", employee.user_id]) - or ("HR Manager" in frappe.get_roles(user)) - ): - if len(active_employees) > 1: - row = frappe._dict() - row.employee = employee.name - row.employee_name = employee.employee_name - - leaves_taken = ( - get_leaves_for_period(employee.name, leave_type, filters.from_date, filters.to_date) * -1 - ) - - new_allocation, expired_leaves, carry_forwarded_leaves = get_allocated_and_expired_leaves( - filters.from_date, filters.to_date, employee.name, leave_type - ) - opening = get_opening_balance(employee.name, leave_type, filters, carry_forwarded_leaves) - - row.leaves_allocated = new_allocation - row.leaves_expired = expired_leaves - row.opening_balance = opening - row.leaves_taken = leaves_taken - - # not be shown on the basis of days left it create in user mind for carry_forward leave - row.closing_balance = new_allocation + opening - (row.leaves_expired + leaves_taken) - row.indent = 1 - data.append(row) - - return data - - -def get_opening_balance( - employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float -) -> float: - # allocation boundary condition - # opening balance is the closing leave balance 1 day before the filter start date - opening_balance_date = add_days(filters.from_date, -1) - allocation = get_previous_allocation(filters.from_date, leave_type, employee) - - if ( - allocation - and allocation.get("to_date") - and opening_balance_date - and getdate(allocation.get("to_date")) == getdate(opening_balance_date) - ): - # if opening balance date is same as the previous allocation's expiry - # then opening balance should only consider carry forwarded leaves - opening_balance = carry_forwarded_leaves - else: - # else directly get leave balance on the previous day - opening_balance = get_leave_balance_on(employee, leave_type, opening_balance_date) - - return opening_balance - - -def get_conditions(filters: Filters) -> Dict: - conditions = { - "status": "Active", - } - if filters.get("employee"): - conditions["name"] = filters.get("employee") - - if filters.get("company"): - conditions["company"] = filters.get("company") - - if filters.get("department"): - conditions["department"] = filters.get("department") - - return conditions - - -def get_department_leave_approver_map(department: Optional[str] = None): - # get current department and all its child - department_list = frappe.get_list( - "Department", - filters={"disabled": 0}, - or_filters={"name": department, "parent_department": department}, - pluck="name", - ) - # retrieve approvers list from current department and from its subsequent child departments - approver_list = frappe.get_all( - "Department Approver", - filters={"parentfield": "leave_approvers", "parent": ("in", department_list)}, - fields=["parent", "approver"], - as_list=True, - ) - - approvers = {} - - for k, v in approver_list: - approvers.setdefault(k, []).append(v) - - return approvers - - -def get_allocated_and_expired_leaves( - from_date: str, to_date: str, employee: str, leave_type: str -) -> Tuple[float, float, float]: - new_allocation = 0 - expired_leaves = 0 - carry_forwarded_leaves = 0 - - records = get_leave_ledger_entries(from_date, to_date, employee, leave_type) - - for record in records: - # new allocation records with `is_expired=1` are created when leave expires - # these new records should not be considered, else it leads to negative leave balance - if record.is_expired: - continue - - if record.to_date < getdate(to_date): - # leave allocations ending before to_date, reduce leaves taken within that period - # since they are already used, they won't expire - expired_leaves += record.leaves - expired_leaves += get_leaves_for_period(employee, leave_type, record.from_date, record.to_date) - - if record.from_date >= getdate(from_date): - if record.is_carry_forward: - carry_forwarded_leaves += record.leaves - else: - new_allocation += record.leaves - - return new_allocation, expired_leaves, carry_forwarded_leaves - - -def get_leave_ledger_entries( - from_date: str, to_date: str, employee: str, leave_type: str -) -> List[Dict]: - ledger = frappe.qb.DocType("Leave Ledger Entry") - records = ( - frappe.qb.from_(ledger) - .select( - ledger.employee, - ledger.leave_type, - ledger.from_date, - ledger.to_date, - ledger.leaves, - ledger.transaction_name, - ledger.transaction_type, - ledger.is_carry_forward, - ledger.is_expired, - ) - .where( - (ledger.docstatus == 1) - & (ledger.transaction_type == "Leave Allocation") - & (ledger.employee == employee) - & (ledger.leave_type == leave_type) - & ( - (ledger.from_date[from_date:to_date]) - | (ledger.to_date[from_date:to_date]) - | ((ledger.from_date < from_date) & (ledger.to_date > to_date)) - ) - ) - ).run(as_dict=True) - - return records - - -def get_chart_data(data: List) -> Dict: - labels = [] - datasets = [] - employee_data = data - - if data and data[0].get("employee_name"): - get_dataset_for_chart(employee_data, datasets, labels) - - chart = { - "data": {"labels": labels, "datasets": datasets}, - "type": "bar", - "colors": ["#456789", "#EE8888", "#7E77BF"], - } - - return chart - - -def get_dataset_for_chart(employee_data: List, datasets: List, labels: List) -> List: - leaves = [] - employee_data = sorted(employee_data, key=lambda k: k["employee_name"]) - - for key, group in groupby(employee_data, lambda x: x["employee_name"]): - for grp in group: - if grp.closing_balance: - leaves.append( - frappe._dict({"leave_type": grp.leave_type, "closing_balance": grp.closing_balance}) - ) - - if leaves: - labels.append(key) - - for leave in leaves: - datasets.append({"name": leave.leave_type, "values": [leave.closing_balance]}) diff --git a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py deleted file mode 100644 index dc0f4d2c94..0000000000 --- a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import unittest - -import frappe -from frappe.utils import add_days, add_months, flt, get_year_ending, get_year_start, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_application.test_leave_application import ( - get_first_sunday, - make_allocation_record, -) -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation -from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type -from erpnext.hr.report.employee_leave_balance.employee_leave_balance import execute -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_holiday_list, - make_leave_application, -) - -test_records = frappe.get_test_records("Leave Type") - - -class TestEmployeeLeaveBalance(unittest.TestCase): - def setUp(self): - for dt in [ - "Leave Application", - "Leave Allocation", - "Salary Slip", - "Leave Ledger Entry", - "Leave Type", - ]: - frappe.db.delete(dt) - - frappe.set_user("Administrator") - - self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company") - - self.date = getdate() - self.year_start = getdate(get_year_start(self.date)) - self.mid_year = add_months(self.year_start, 6) - self.year_end = getdate(get_year_ending(self.date)) - - self.holiday_list = make_holiday_list( - "_Test Emp Balance Holiday List", self.year_start, self.year_end - ) - - def tearDown(self): - frappe.db.rollback() - - @set_holiday_list("_Test Emp Balance Holiday List", "_Test Company") - def test_employee_leave_balance(self): - frappe.get_doc(test_records[0]).insert() - - # 5 leaves - allocation1 = make_allocation_record( - employee=self.employee_id, - from_date=add_days(self.year_start, -11), - to_date=add_days(self.year_start, -1), - leaves=5, - ) - # 30 leaves - allocation2 = make_allocation_record( - employee=self.employee_id, from_date=self.year_start, to_date=self.year_end - ) - # expires 5 leaves - process_expired_allocation() - - # 4 days leave - first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start) - leave_application = make_leave_application( - self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type" - ) - leave_application.reload() - - filters = frappe._dict( - { - "from_date": allocation1.from_date, - "to_date": allocation2.to_date, - "employee": self.employee_id, - } - ) - - report = execute(filters) - - expected_data = [ - { - "leave_type": "_Test Leave Type", - "employee": self.employee_id, - "employee_name": "test_emp_leave_balance@example.com", - "leaves_allocated": flt(allocation1.new_leaves_allocated + allocation2.new_leaves_allocated), - "leaves_expired": flt(allocation1.new_leaves_allocated), - "opening_balance": flt(0), - "leaves_taken": flt(leave_application.total_leave_days), - "closing_balance": flt(allocation2.new_leaves_allocated - leave_application.total_leave_days), - "indent": 1, - } - ] - - self.assertEqual(report[1], expected_data) - - @set_holiday_list("_Test Emp Balance Holiday List", "_Test Company") - def test_opening_balance_on_alloc_boundary_dates(self): - frappe.get_doc(test_records[0]).insert() - - # 30 leaves allocated - allocation1 = make_allocation_record( - employee=self.employee_id, from_date=self.year_start, to_date=self.year_end - ) - # 4 days leave application in the first allocation - first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start) - leave_application = make_leave_application( - self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type" - ) - leave_application.reload() - - # Case 1: opening balance for first alloc boundary - filters = frappe._dict( - {"from_date": self.year_start, "to_date": self.year_end, "employee": self.employee_id} - ) - report = execute(filters) - self.assertEqual(report[1][0].opening_balance, 0) - - # Case 2: opening balance after leave application date - filters = frappe._dict( - { - "from_date": add_days(leave_application.to_date, 1), - "to_date": self.year_end, - "employee": self.employee_id, - } - ) - report = execute(filters) - self.assertEqual( - report[1][0].opening_balance, - (allocation1.new_leaves_allocated - leave_application.total_leave_days), - ) - - # Case 3: leave balance shows actual balance and not consumption balance as per remaining days near alloc end date - # eg: 3 days left for alloc to end, leave balance should still be 26 and not 3 - filters = frappe._dict( - { - "from_date": add_days(self.year_end, -3), - "to_date": self.year_end, - "employee": self.employee_id, - } - ) - report = execute(filters) - self.assertEqual( - report[1][0].opening_balance, - (allocation1.new_leaves_allocated - leave_application.total_leave_days), - ) - - @set_holiday_list("_Test Emp Balance Holiday List", "_Test Company") - def test_opening_balance_considers_carry_forwarded_leaves(self): - leave_type = create_leave_type(leave_type_name="_Test_CF_leave_expiry", is_carry_forward=1) - leave_type.insert() - - # 30 leaves allocated for first half of the year - allocation1 = make_allocation_record( - employee=self.employee_id, - from_date=self.year_start, - to_date=self.mid_year, - leave_type=leave_type.name, - ) - # 4 days leave application in the first allocation - first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start) - leave_application = make_leave_application( - self.employee_id, first_sunday, add_days(first_sunday, 3), leave_type.name - ) - leave_application.reload() - # 30 leaves allocated for second half of the year + carry forward leaves (26) from the previous allocation - allocation2 = make_allocation_record( - employee=self.employee_id, - from_date=add_days(self.mid_year, 1), - to_date=self.year_end, - carry_forward=True, - leave_type=leave_type.name, - ) - - # Case 1: carry forwarded leaves considered in opening balance for second alloc - filters = frappe._dict( - { - "from_date": add_days(self.mid_year, 1), - "to_date": self.year_end, - "employee": self.employee_id, - } - ) - report = execute(filters) - # available leaves from old alloc - opening_balance = allocation1.new_leaves_allocated - leave_application.total_leave_days - self.assertEqual(report[1][0].opening_balance, opening_balance) - - # Case 2: opening balance one day after alloc boundary = carry forwarded leaves + new leaves alloc - filters = frappe._dict( - { - "from_date": add_days(self.mid_year, 2), - "to_date": self.year_end, - "employee": self.employee_id, - } - ) - report = execute(filters) - # available leaves from old alloc - opening_balance = allocation2.new_leaves_allocated + ( - allocation1.new_leaves_allocated - leave_application.total_leave_days - ) - self.assertEqual(report[1][0].opening_balance, opening_balance) diff --git a/erpnext/hr/report/employee_leave_balance_summary/__init__.py b/erpnext/hr/report/employee_leave_balance_summary/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js deleted file mode 100644 index cb05d1138f..0000000000 --- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports['Employee Leave Balance Summary'] = { - filters: [ - { - fieldname:'date', - label: __('Date'), - fieldtype: 'Date', - reqd: 1, - default: frappe.datetime.now_date() - }, - { - fieldname:'company', - label: __('Company'), - fieldtype: 'Link', - options: 'Company', - reqd: 1, - default: frappe.defaults.get_user_default('Company') - }, - { - fieldname:'employee', - label: __('Employee'), - fieldtype: 'Link', - options: 'Employee', - }, - { - fieldname:'department', - label: __('Department'), - fieldtype: 'Link', - options: 'Department', - } - ] -}; diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json deleted file mode 100644 index 1c22ecef1a..0000000000 --- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2019-09-05 11:18:06.209397", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2019-09-06 11:18:06.209397", - "modified_by": "Administrator", - "module": "HR", - "name": "Employee Leave Balance Summary", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Employee", - "report_name": "Employee Leave Balance Summary", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "HR Manager" - }, - { - "role": "HR User" - }, - { - "role": "Leave Approver" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py deleted file mode 100644 index 2a16dc41d6..0000000000 --- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ - -from erpnext.hr.doctype.leave_application.leave_application import get_leave_details -from erpnext.hr.report.employee_leave_balance.employee_leave_balance import ( - get_department_leave_approver_map, -) - - -def execute(filters=None): - leave_types = frappe.db.sql_list("select name from `tabLeave Type` order by name asc") - - columns = get_columns(leave_types) - data = get_data(filters, leave_types) - - return columns, data - - -def get_columns(leave_types): - columns = [ - _("Employee") + ":Link.Employee:150", - _("Employee Name") + "::200", - _("Department") + "::150", - ] - - for leave_type in leave_types: - columns.append(_(leave_type) + ":Float:160") - - return columns - - -def get_conditions(filters): - conditions = { - "status": "Active", - "company": filters.company, - } - if filters.get("department"): - conditions.update({"department": filters.get("department")}) - if filters.get("employee"): - conditions.update({"employee": filters.get("employee")}) - - return conditions - - -def get_data(filters, leave_types): - user = frappe.session.user - conditions = get_conditions(filters) - - active_employees = frappe.get_list( - "Employee", - filters=conditions, - fields=["name", "employee_name", "department", "user_id", "leave_approver"], - ) - - department_approver_map = get_department_leave_approver_map(filters.get("department")) - - data = [] - for employee in active_employees: - leave_approvers = department_approver_map.get(employee.department_name, []) - if employee.leave_approver: - leave_approvers.append(employee.leave_approver) - - if ( - (len(leave_approvers) and user in leave_approvers) - or (user in ["Administrator", employee.user_id]) - or ("HR Manager" in frappe.get_roles(user)) - ): - row = [employee.name, employee.employee_name, employee.department] - available_leave = get_leave_details(employee.name, filters.date) - for leave_type in leave_types: - remaining = 0 - if leave_type in available_leave["leave_allocation"]: - # opening balance - remaining = available_leave["leave_allocation"][leave_type]["remaining_leaves"] - - row += [remaining] - - data.append(row) - - return data diff --git a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py deleted file mode 100644 index 34b665fa9f..0000000000 --- a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import unittest - -import frappe -from frappe.utils import add_days, flt, get_year_ending, get_year_start, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_application.test_leave_application import ( - get_first_sunday, - make_allocation_record, -) -from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import process_expired_allocation -from erpnext.hr.report.employee_leave_balance_summary.employee_leave_balance_summary import execute -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_holiday_list, - make_leave_application, -) - -test_records = frappe.get_test_records("Leave Type") - - -class TestEmployeeLeaveBalance(unittest.TestCase): - def setUp(self): - for dt in [ - "Leave Application", - "Leave Allocation", - "Salary Slip", - "Leave Ledger Entry", - "Leave Type", - ]: - frappe.db.delete(dt) - - frappe.set_user("Administrator") - - self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company") - self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company") - - self.date = getdate() - self.year_start = getdate(get_year_start(self.date)) - self.year_end = getdate(get_year_ending(self.date)) - - self.holiday_list = make_holiday_list( - "_Test Emp Balance Holiday List", self.year_start, self.year_end - ) - - def tearDown(self): - frappe.db.rollback() - - @set_holiday_list("_Test Emp Balance Holiday List", "_Test Company") - def test_employee_leave_balance_summary(self): - frappe.get_doc(test_records[0]).insert() - - # 5 leaves - allocation1 = make_allocation_record( - employee=self.employee_id, - from_date=add_days(self.year_start, -11), - to_date=add_days(self.year_start, -1), - leaves=5, - ) - # 30 leaves - allocation2 = make_allocation_record( - employee=self.employee_id, from_date=self.year_start, to_date=self.year_end - ) - - # 2 days leave within the first allocation - leave_application1 = make_leave_application( - self.employee_id, - add_days(self.year_start, -11), - add_days(self.year_start, -10), - "_Test Leave Type", - ) - leave_application1.reload() - - # expires 3 leaves - process_expired_allocation() - - # 4 days leave within the second allocation - first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start) - leave_application2 = make_leave_application( - self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type" - ) - leave_application2.reload() - - filters = frappe._dict( - { - "date": add_days(leave_application2.to_date, 1), - "company": "_Test Company", - "employee": self.employee_id, - } - ) - - report = execute(filters) - - expected_data = [ - [ - self.employee_id, - "test_emp_leave_balance@example.com", - frappe.db.get_value("Employee", self.employee_id, "department"), - flt( - allocation1.new_leaves_allocated # allocated = 5 - + allocation2.new_leaves_allocated # allocated = 30 - - leave_application1.total_leave_days # leaves taken in the 1st alloc = 2 - - ( - allocation1.new_leaves_allocated - leave_application1.total_leave_days - ) # leaves expired from 1st alloc = 3 - - leave_application2.total_leave_days # leaves taken in the 2nd alloc = 4 - ), - ] - ] - - self.assertEqual(report[1], expected_data) - - @set_holiday_list("_Test Emp Balance Holiday List", "_Test Company") - def test_get_leave_balance_near_alloc_expiry(self): - frappe.get_doc(test_records[0]).insert() - - # 30 leaves allocated - allocation = make_allocation_record( - employee=self.employee_id, from_date=self.year_start, to_date=self.year_end - ) - # 4 days leave application in the first allocation - first_sunday = get_first_sunday(self.holiday_list, for_date=self.year_start) - leave_application = make_leave_application( - self.employee_id, add_days(first_sunday, 1), add_days(first_sunday, 4), "_Test Leave Type" - ) - leave_application.reload() - - # Leave balance should show actual balance, and not "consumption balance as per remaining days", near alloc end date - # eg: 3 days left for alloc to end, leave balance should still be 26 and not 3 - filters = frappe._dict( - {"date": add_days(self.year_end, -3), "company": "_Test Company", "employee": self.employee_id} - ) - report = execute(filters) - - expected_data = [ - [ - self.employee_id, - "test_emp_leave_balance@example.com", - frappe.db.get_value("Employee", self.employee_id, "department"), - flt(allocation.new_leaves_allocated - leave_application.total_leave_days), - ] - ] - - self.assertEqual(report[1], expected_data) diff --git a/erpnext/hr/report/employees_working_on_a_holiday/__init__.py b/erpnext/hr/report/employees_working_on_a_holiday/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js deleted file mode 100644 index 97108e8575..0000000000 --- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.query_reports["Employees working on a holiday"] = { - "filters": [ - { - "fieldname":"from_date", - "label": __("From Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.year_start() - }, - { - "fieldname":"to_date", - "label": __("To Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.year_end() - }, - { - "fieldname":"holiday_list", - "label": __("Holiday List"), - "fieldtype": "Link", - "options": "Holiday List" - } - ] -} diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json deleted file mode 100644 index 6c9f7ff7e6..0000000000 --- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2016-07-14 12:03:56.967739", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2017-02-24 20:05:17.833885", - "modified_by": "Administrator", - "module": "HR", - "name": "Employees working on a holiday", - "owner": "Administrator", - "ref_doctype": "Attendance", - "report_name": "Employees working on a holiday", - "report_type": "Script Report", - "roles": [ - { - "role": "System Manager" - }, - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py deleted file mode 100644 index f13fabf06e..0000000000 --- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - - -def execute(filters=None): - if not filters: - filters = {} - - columns = get_columns() - data = get_employees(filters) - return columns, data - - -def get_columns(): - return [ - _("Employee") + ":Link/Employee:120", - _("Name") + ":Data:200", - _("Date") + ":Date:100", - _("Status") + ":Data:70", - _("Holiday") + ":Data:200", - ] - - -def get_employees(filters): - holiday_filter = [ - ["holiday_date", ">=", filters.from_date], - ["holiday_date", "<=", filters.to_date], - ] - if filters.holiday_list: - holiday_filter.append(["parent", "=", filters.holiday_list]) - - holidays = frappe.get_all( - "Holiday", fields=["holiday_date", "description"], filters=holiday_filter - ) - - holiday_names = {} - holidays_list = [] - - for holiday in holidays: - holidays_list.append(holiday.holiday_date) - holiday_names[holiday.holiday_date] = holiday.description - - if holidays_list: - cond = " attendance_date in %(holidays_list)s" - - if filters.holiday_list: - cond += ( - """ and (employee in (select employee from tabEmployee where holiday_list = %(holidays)s))""" - ) - - employee_list = frappe.db.sql( - """select - employee, employee_name, attendance_date, status - from tabAttendance - where %s""" - % cond.format(", ".join(["%s"] * len(holidays_list))), - {"holidays_list": holidays_list, "holidays": filters.holiday_list}, - as_list=True, - ) - - for employee_data in employee_list: - employee_data.append(holiday_names[employee_data[2]]) - - return employee_list - else: - return [] diff --git a/erpnext/hr/report/monthly_attendance_sheet/__init__.py b/erpnext/hr/report/monthly_attendance_sheet/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js deleted file mode 100644 index 6f4bbd54fb..0000000000 --- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - - -frappe.query_reports["Monthly Attendance Sheet"] = { - "filters": [ - { - "fieldname": "month", - "label": __("Month"), - "fieldtype": "Select", - "reqd": 1 , - "options": [ - { "value": 1, "label": __("Jan") }, - { "value": 2, "label": __("Feb") }, - { "value": 3, "label": __("Mar") }, - { "value": 4, "label": __("Apr") }, - { "value": 5, "label": __("May") }, - { "value": 6, "label": __("June") }, - { "value": 7, "label": __("July") }, - { "value": 8, "label": __("Aug") }, - { "value": 9, "label": __("Sep") }, - { "value": 10, "label": __("Oct") }, - { "value": 11, "label": __("Nov") }, - { "value": 12, "label": __("Dec") }, - ], - "default": frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1 - }, - { - "fieldname":"year", - "label": __("Year"), - "fieldtype": "Select", - "reqd": 1 - }, - { - "fieldname":"employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee", - get_query: () => { - var company = frappe.query_report.get_filter_value('company'); - return { - filters: { - 'company': company - } - }; - } - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "reqd": 1 - }, - { - "fieldname":"group_by", - "label": __("Group By"), - "fieldtype": "Select", - "options": ["","Branch","Grade","Department","Designation"] - }, - { - "fieldname":"summarized_view", - "label": __("Summarized View"), - "fieldtype": "Check", - "Default": 0, - } - ], - onload: function() { - return frappe.call({ - method: "erpnext.hr.report.monthly_attendance_sheet.monthly_attendance_sheet.get_attendance_years", - callback: function(r) { - var year_filter = frappe.query_report.get_filter('year'); - year_filter.df.options = r.message; - year_filter.df.default = r.message.split("\n")[0]; - year_filter.refresh(); - year_filter.set_input(year_filter.df.default); - } - }); - }, - formatter: function(value, row, column, data, default_formatter) { - value = default_formatter(value, row, column, data); - const summarized_view = frappe.query_report.get_filter_value('summarized_view'); - const group_by = frappe.query_report.get_filter_value('group_by'); - - if (!summarized_view) { - if ((group_by && column.colIndex > 3) || (!group_by && column.colIndex > 2)) { - if (value == 'P' || value == 'WFH') - value = "" + value + ""; - else if (value == 'A') - value = "" + value + ""; - else if (value == 'HD') - value = "" + value + ""; - else if (value == 'L') - value = "" + value + ""; - } - } - - return value; - } -} diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json deleted file mode 100644 index 4daab813fe..0000000000 --- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2013-05-13 14:04:03", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 3, - "is_standard": "Yes", - "modified": "2017-02-24 20:16:50.550242", - "modified_by": "Administrator", - "module": "HR", - "name": "Monthly Attendance Sheet", - "owner": "Administrator", - "ref_doctype": "Attendance", - "report_name": "Monthly Attendance Sheet", - "report_type": "Script Report", - "roles": [ - { - "role": "System Manager" - }, - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py deleted file mode 100644 index efd2d382d5..0000000000 --- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +++ /dev/null @@ -1,620 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -from calendar import monthrange -from itertools import groupby -from typing import Dict, List, Optional, Tuple - -import frappe -from frappe import _ -from frappe.query_builder.functions import Count, Extract, Sum -from frappe.utils import cint, cstr, getdate - -Filters = frappe._dict - -status_map = { - "Present": "P", - "Absent": "A", - "Half Day": "HD", - "Work From Home": "WFH", - "On Leave": "L", - "Holiday": "H", - "Weekly Off": "WO", -} - -day_abbr = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] - - -def execute(filters: Optional[Filters] = None) -> Tuple: - filters = frappe._dict(filters or {}) - - if not (filters.month and filters.year): - frappe.throw(_("Please select month and year.")) - - attendance_map = get_attendance_map(filters) - if not attendance_map: - frappe.msgprint(_("No attendance records found."), alert=True, indicator="orange") - return [], [], None, None - - columns = get_columns(filters) - data = get_data(filters, attendance_map) - - if not data: - frappe.msgprint( - _("No attendance records found for this criteria."), alert=True, indicator="orange" - ) - return columns, [], None, None - - message = get_message() if not filters.summarized_view else "" - chart = get_chart_data(attendance_map, filters) - - return columns, data, message, chart - - -def get_message() -> str: - message = "" - colors = ["green", "red", "orange", "green", "#318AD8", "", ""] - - count = 0 - for status, abbr in status_map.items(): - message += f""" - - {status} - {abbr} - - """ - count += 1 - - return message - - -def get_columns(filters: Filters) -> List[Dict]: - columns = [] - - if filters.group_by: - columns.append( - { - "label": _(filters.group_by), - "fieldname": frappe.scrub(filters.group_by), - "fieldtype": "Link", - "options": "Branch", - "width": 120, - } - ) - - columns.extend( - [ - { - "label": _("Employee"), - "fieldname": "employee", - "fieldtype": "Link", - "options": "Employee", - "width": 135, - }, - {"label": _("Employee Name"), "fieldname": "employee_name", "fieldtype": "Data", "width": 120}, - ] - ) - - if filters.summarized_view: - columns.extend( - [ - { - "label": _("Total Present"), - "fieldname": "total_present", - "fieldtype": "Float", - "width": 110, - }, - {"label": _("Total Leaves"), "fieldname": "total_leaves", "fieldtype": "Float", "width": 110}, - {"label": _("Total Absent"), "fieldname": "total_absent", "fieldtype": "Float", "width": 110}, - { - "label": _("Total Holidays"), - "fieldname": "total_holidays", - "fieldtype": "Float", - "width": 120, - }, - { - "label": _("Unmarked Days"), - "fieldname": "unmarked_days", - "fieldtype": "Float", - "width": 130, - }, - ] - ) - columns.extend(get_columns_for_leave_types()) - columns.extend( - [ - { - "label": _("Total Late Entries"), - "fieldname": "total_late_entries", - "fieldtype": "Float", - "width": 140, - }, - { - "label": _("Total Early Exits"), - "fieldname": "total_early_exits", - "fieldtype": "Float", - "width": 140, - }, - ] - ) - else: - columns.append({"label": _("Shift"), "fieldname": "shift", "fieldtype": "Data", "width": 120}) - columns.extend(get_columns_for_days(filters)) - - return columns - - -def get_columns_for_leave_types() -> List[Dict]: - leave_types = frappe.db.get_all("Leave Type", pluck="name") - types = [] - for entry in leave_types: - types.append( - {"label": entry, "fieldname": frappe.scrub(entry), "fieldtype": "Float", "width": 120} - ) - - return types - - -def get_columns_for_days(filters: Filters) -> List[Dict]: - total_days = get_total_days_in_month(filters) - days = [] - - for day in range(1, total_days + 1): - # forms the dates from selected year and month from filters - date = "{}-{}-{}".format(cstr(filters.year), cstr(filters.month), cstr(day)) - # gets abbr from weekday number - weekday = day_abbr[getdate(date).weekday()] - # sets days as 1 Mon, 2 Tue, 3 Wed - label = "{} {}".format(cstr(day), weekday) - days.append({"label": label, "fieldtype": "Data", "fieldname": day, "width": 65}) - - return days - - -def get_total_days_in_month(filters: Filters) -> int: - return monthrange(cint(filters.year), cint(filters.month))[1] - - -def get_data(filters: Filters, attendance_map: Dict) -> List[Dict]: - employee_details, group_by_param_values = get_employee_related_details( - filters.group_by, filters.company - ) - holiday_map = get_holiday_map(filters) - data = [] - - if filters.group_by: - group_by_column = frappe.scrub(filters.group_by) - - for value in group_by_param_values: - if not value: - continue - - records = get_rows(employee_details[value], filters, holiday_map, attendance_map) - - if records: - data.append({group_by_column: frappe.bold(value)}) - data.extend(records) - else: - data = get_rows(employee_details, filters, holiday_map, attendance_map) - - return data - - -def get_attendance_map(filters: Filters) -> Dict: - """Returns a dictionary of employee wise attendance map as per shifts for all the days of the month like - { - 'employee1': { - 'Morning Shift': {1: 'Present', 2: 'Absent', ...} - 'Evening Shift': {1: 'Absent', 2: 'Present', ...} - }, - 'employee2': { - 'Afternoon Shift': {1: 'Present', 2: 'Absent', ...} - 'Night Shift': {1: 'Absent', 2: 'Absent', ...} - } - } - """ - Attendance = frappe.qb.DocType("Attendance") - query = ( - frappe.qb.from_(Attendance) - .select( - Attendance.employee, - Extract("day", Attendance.attendance_date).as_("day_of_month"), - Attendance.status, - Attendance.shift, - ) - .where( - (Attendance.docstatus == 1) - & (Attendance.company == filters.company) - & (Extract("month", Attendance.attendance_date) == filters.month) - & (Extract("year", Attendance.attendance_date) == filters.year) - ) - ) - if filters.employee: - query = query.where(Attendance.employee == filters.employee) - query = query.orderby(Attendance.employee, Attendance.attendance_date) - - attendance_list = query.run(as_dict=1) - attendance_map = {} - - for d in attendance_list: - attendance_map.setdefault(d.employee, frappe._dict()).setdefault(d.shift, frappe._dict()) - attendance_map[d.employee][d.shift][d.day_of_month] = d.status - - return attendance_map - - -def get_employee_related_details(group_by: str, company: str) -> Tuple[Dict, List]: - """Returns - 1. nested dict for employee details - 2. list of values for the group by filter - """ - Employee = frappe.qb.DocType("Employee") - query = ( - frappe.qb.from_(Employee) - .select( - Employee.name, - Employee.employee_name, - Employee.designation, - Employee.grade, - Employee.department, - Employee.branch, - Employee.company, - Employee.holiday_list, - ) - .where(Employee.company == company) - ) - - if group_by: - group_by = group_by.lower() - query = query.orderby(group_by) - - employee_details = query.run(as_dict=True) - - group_by_param_values = [] - emp_map = {} - - if group_by: - for parameter, employees in groupby(employee_details, key=lambda d: d[group_by]): - group_by_param_values.append(parameter) - emp_map.setdefault(parameter, frappe._dict()) - - for emp in employees: - emp_map[parameter][emp.name] = emp - else: - for emp in employee_details: - emp_map[emp.name] = emp - - return emp_map, group_by_param_values - - -def get_holiday_map(filters: Filters) -> Dict[str, List[Dict]]: - """ - Returns a dict of holidays falling in the filter month and year - with list name as key and list of holidays as values like - { - 'Holiday List 1': [ - {'day_of_month': '0' , 'weekly_off': 1}, - {'day_of_month': '1', 'weekly_off': 0} - ], - 'Holiday List 2': [ - {'day_of_month': '0' , 'weekly_off': 1}, - {'day_of_month': '1', 'weekly_off': 0} - ] - } - """ - # add default holiday list too - holiday_lists = frappe.db.get_all("Holiday List", pluck="name") - default_holiday_list = frappe.get_cached_value("Company", filters.company, "default_holiday_list") - holiday_lists.append(default_holiday_list) - - holiday_map = frappe._dict() - Holiday = frappe.qb.DocType("Holiday") - - for d in holiday_lists: - if not d: - continue - - holidays = ( - frappe.qb.from_(Holiday) - .select(Extract("day", Holiday.holiday_date).as_("day_of_month"), Holiday.weekly_off) - .where( - (Holiday.parent == d) - & (Extract("month", Holiday.holiday_date) == filters.month) - & (Extract("year", Holiday.holiday_date) == filters.year) - ) - ).run(as_dict=True) - - holiday_map.setdefault(d, holidays) - - return holiday_map - - -def get_rows( - employee_details: Dict, filters: Filters, holiday_map: Dict, attendance_map: Dict -) -> List[Dict]: - records = [] - default_holiday_list = frappe.get_cached_value("Company", filters.company, "default_holiday_list") - - for employee, details in employee_details.items(): - emp_holiday_list = details.holiday_list or default_holiday_list - holidays = holiday_map.get(emp_holiday_list) - - if filters.summarized_view: - attendance = get_attendance_status_for_summarized_view(employee, filters, holidays) - if not attendance: - continue - - leave_summary = get_leave_summary(employee, filters) - entry_exits_summary = get_entry_exits_summary(employee, filters) - - row = {"employee": employee, "employee_name": details.employee_name} - set_defaults_for_summarized_view(filters, row) - row.update(attendance) - row.update(leave_summary) - row.update(entry_exits_summary) - - records.append(row) - else: - employee_attendance = attendance_map.get(employee) - if not employee_attendance: - continue - - attendance_for_employee = get_attendance_status_for_detailed_view( - employee, filters, employee_attendance, holidays - ) - # set employee details in the first row - attendance_for_employee[0].update( - {"employee": employee, "employee_name": details.employee_name} - ) - - records.extend(attendance_for_employee) - - return records - - -def set_defaults_for_summarized_view(filters, row): - for entry in get_columns(filters): - if entry.get("fieldtype") == "Float": - row[entry.get("fieldname")] = 0.0 - - -def get_attendance_status_for_summarized_view( - employee: str, filters: Filters, holidays: List -) -> Dict: - """Returns dict of attendance status for employee like - {'total_present': 1.5, 'total_leaves': 0.5, 'total_absent': 13.5, 'total_holidays': 8, 'unmarked_days': 5} - """ - summary, attendance_days = get_attendance_summary_and_days(employee, filters) - if not any(summary.values()): - return {} - - total_days = get_total_days_in_month(filters) - total_holidays = total_unmarked_days = 0 - - for day in range(1, total_days + 1): - if day in attendance_days: - continue - - status = get_holiday_status(day, holidays) - if status in ["Weekly Off", "Holiday"]: - total_holidays += 1 - elif not status: - total_unmarked_days += 1 - - return { - "total_present": summary.total_present + summary.total_half_days, - "total_leaves": summary.total_leaves + summary.total_half_days, - "total_absent": summary.total_absent + summary.total_half_days, - "total_holidays": total_holidays, - "unmarked_days": total_unmarked_days, - } - - -def get_attendance_summary_and_days(employee: str, filters: Filters) -> Tuple[Dict, List]: - Attendance = frappe.qb.DocType("Attendance") - - present_case = ( - frappe.qb.terms.Case() - .when(((Attendance.status == "Present") | (Attendance.status == "Work From Home")), 1) - .else_(0) - ) - sum_present = Sum(present_case).as_("total_present") - - absent_case = frappe.qb.terms.Case().when(Attendance.status == "Absent", 1).else_(0) - sum_absent = Sum(absent_case).as_("total_absent") - - leave_case = frappe.qb.terms.Case().when(Attendance.status == "On Leave", 1).else_(0) - sum_leave = Sum(leave_case).as_("total_leaves") - - half_day_case = frappe.qb.terms.Case().when(Attendance.status == "Half Day", 0.5).else_(0) - sum_half_day = Sum(half_day_case).as_("total_half_days") - - summary = ( - frappe.qb.from_(Attendance) - .select( - sum_present, - sum_absent, - sum_leave, - sum_half_day, - ) - .where( - (Attendance.docstatus == 1) - & (Attendance.employee == employee) - & (Attendance.company == filters.company) - & (Extract("month", Attendance.attendance_date) == filters.month) - & (Extract("year", Attendance.attendance_date) == filters.year) - ) - ).run(as_dict=True) - - days = ( - frappe.qb.from_(Attendance) - .select(Extract("day", Attendance.attendance_date).as_("day_of_month")) - .distinct() - .where( - (Attendance.docstatus == 1) - & (Attendance.employee == employee) - & (Attendance.company == filters.company) - & (Extract("month", Attendance.attendance_date) == filters.month) - & (Extract("year", Attendance.attendance_date) == filters.year) - ) - ).run(pluck=True) - - return summary[0], days - - -def get_attendance_status_for_detailed_view( - employee: str, filters: Filters, employee_attendance: Dict, holidays: List -) -> List[Dict]: - """Returns list of shift-wise attendance status for employee - [ - {'shift': 'Morning Shift', 1: 'A', 2: 'P', 3: 'A'....}, - {'shift': 'Evening Shift', 1: 'P', 2: 'A', 3: 'P'....} - ] - """ - total_days = get_total_days_in_month(filters) - attendance_values = [] - - for shift, status_dict in employee_attendance.items(): - row = {"shift": shift} - - for day in range(1, total_days + 1): - status = status_dict.get(day) - if status is None and holidays: - status = get_holiday_status(day, holidays) - - abbr = status_map.get(status, "") - row[day] = abbr - - attendance_values.append(row) - - return attendance_values - - -def get_holiday_status(day: int, holidays: List) -> str: - status = None - for holiday in holidays: - if day == holiday.get("day_of_month"): - if holiday.get("weekly_off"): - status = "Weekly Off" - else: - status = "Holiday" - break - return status - - -def get_leave_summary(employee: str, filters: Filters) -> Dict[str, float]: - """Returns a dict of leave type and corresponding leaves taken by employee like: - {'leave_without_pay': 1.0, 'sick_leave': 2.0} - """ - Attendance = frappe.qb.DocType("Attendance") - day_case = frappe.qb.terms.Case().when(Attendance.status == "Half Day", 0.5).else_(1) - sum_leave_days = Sum(day_case).as_("leave_days") - - leave_details = ( - frappe.qb.from_(Attendance) - .select(Attendance.leave_type, sum_leave_days) - .where( - (Attendance.employee == employee) - & (Attendance.docstatus == 1) - & (Attendance.company == filters.company) - & ((Attendance.leave_type.isnotnull()) | (Attendance.leave_type != "")) - & (Extract("month", Attendance.attendance_date) == filters.month) - & (Extract("year", Attendance.attendance_date) == filters.year) - ) - .groupby(Attendance.leave_type) - ).run(as_dict=True) - - leaves = {} - for d in leave_details: - leave_type = frappe.scrub(d.leave_type) - leaves[leave_type] = d.leave_days - - return leaves - - -def get_entry_exits_summary(employee: str, filters: Filters) -> Dict[str, float]: - """Returns total late entries and total early exits for employee like: - {'total_late_entries': 5, 'total_early_exits': 2} - """ - Attendance = frappe.qb.DocType("Attendance") - - late_entry_case = frappe.qb.terms.Case().when(Attendance.late_entry == "1", "1") - count_late_entries = Count(late_entry_case).as_("total_late_entries") - - early_exit_case = frappe.qb.terms.Case().when(Attendance.early_exit == "1", "1") - count_early_exits = Count(early_exit_case).as_("total_early_exits") - - entry_exits = ( - frappe.qb.from_(Attendance) - .select(count_late_entries, count_early_exits) - .where( - (Attendance.docstatus == 1) - & (Attendance.employee == employee) - & (Attendance.company == filters.company) - & (Extract("month", Attendance.attendance_date) == filters.month) - & (Extract("year", Attendance.attendance_date) == filters.year) - ) - ).run(as_dict=True) - - return entry_exits[0] - - -@frappe.whitelist() -def get_attendance_years() -> str: - """Returns all the years for which attendance records exist""" - Attendance = frappe.qb.DocType("Attendance") - year_list = ( - frappe.qb.from_(Attendance) - .select(Extract("year", Attendance.attendance_date).as_("year")) - .distinct() - ).run(as_dict=True) - - if year_list: - year_list.sort(key=lambda d: d.year, reverse=True) - else: - year_list = [getdate().year] - - return "\n".join(cstr(entry.year) for entry in year_list) - - -def get_chart_data(attendance_map: Dict, filters: Filters) -> Dict: - days = get_columns_for_days(filters) - labels = [] - absent = [] - present = [] - leave = [] - - for day in days: - labels.append(day["label"]) - total_absent_on_day = total_leaves_on_day = total_present_on_day = 0 - - for employee, attendance_dict in attendance_map.items(): - for shift, attendance in attendance_dict.items(): - attendance_on_day = attendance.get(day["fieldname"]) - - if attendance_on_day == "Absent": - total_absent_on_day += 1 - elif attendance_on_day in ["Present", "Work From Home"]: - total_present_on_day += 1 - elif attendance_on_day == "Half Day": - total_present_on_day += 0.5 - total_leaves_on_day += 0.5 - elif attendance_on_day == "On Leave": - total_leaves_on_day += 1 - - absent.append(total_absent_on_day) - present.append(total_present_on_day) - leave.append(total_leaves_on_day) - - return { - "data": { - "labels": labels, - "datasets": [ - {"name": "Absent", "values": absent}, - {"name": "Present", "values": present}, - {"name": "Leave", "values": leave}, - ], - }, - "type": "line", - "colors": ["red", "green", "blue"], - } diff --git a/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py deleted file mode 100644 index cde7dd3fff..0000000000 --- a/erpnext/hr/report/monthly_attendance_sheet/test_monthly_attendance_sheet.py +++ /dev/null @@ -1,249 +0,0 @@ -import frappe -from dateutil.relativedelta import relativedelta -from frappe.tests.utils import FrappeTestCase -from frappe.utils import get_year_ending, get_year_start, getdate, now_datetime - -from erpnext.hr.doctype.attendance.attendance import mark_attendance -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list -from erpnext.hr.doctype.leave_application.test_leave_application import make_allocation_record -from erpnext.hr.report.monthly_attendance_sheet.monthly_attendance_sheet import execute -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_holiday_list, - make_leave_application, -) - -test_dependencies = ["Shift Type"] - - -class TestMonthlyAttendanceSheet(FrappeTestCase): - def setUp(self): - self.employee = make_employee("test_employee@example.com", company="_Test Company") - frappe.db.delete("Attendance") - - date = getdate() - from_date = get_year_start(date) - to_date = get_year_ending(date) - make_holiday_list(from_date=from_date, to_date=to_date) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_monthly_attendance_sheet_report(self): - now = now_datetime() - previous_month = now.month - 1 - previous_month_first = now.replace(day=1).replace(month=previous_month).date() - - company = frappe.db.get_value("Employee", self.employee, "company") - - # mark different attendance status on first 3 days of previous month - mark_attendance(self.employee, previous_month_first, "Absent") - mark_attendance(self.employee, previous_month_first + relativedelta(days=1), "Present") - mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave") - - filters = frappe._dict( - { - "month": previous_month, - "year": now.year, - "company": company, - } - ) - report = execute(filters=filters) - - record = report[1][0] - datasets = report[3]["data"]["datasets"] - absent = datasets[0]["values"] - present = datasets[1]["values"] - leaves = datasets[2]["values"] - - # ensure correct attendance is reflected on the report - self.assertEqual(self.employee, record.get("employee")) - self.assertEqual(absent[0], 1) - self.assertEqual(present[1], 1) - self.assertEqual(leaves[2], 1) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_monthly_attendance_sheet_with_detailed_view(self): - now = now_datetime() - previous_month = now.month - 1 - previous_month_first = now.replace(day=1).replace(month=previous_month).date() - - company = frappe.db.get_value("Employee", self.employee, "company") - - # attendance with shift - mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift") - mark_attendance( - self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift" - ) - - # attendance without shift - mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave") - mark_attendance(self.employee, previous_month_first + relativedelta(days=3), "Present") - - filters = frappe._dict( - { - "month": previous_month, - "year": now.year, - "company": company, - } - ) - report = execute(filters=filters) - - day_shift_row = report[1][0] - row_without_shift = report[1][1] - - self.assertEqual(day_shift_row["shift"], "Day Shift") - self.assertEqual(day_shift_row[1], "A") # absent on the 1st day of the month - self.assertEqual(day_shift_row[2], "P") # present on the 2nd day - - self.assertEqual(row_without_shift["shift"], None) - self.assertEqual(row_without_shift[3], "L") # on leave on the 3rd day - self.assertEqual(row_without_shift[4], "P") # present on the 4th day - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_monthly_attendance_sheet_with_summarized_view(self): - now = now_datetime() - previous_month = now.month - 1 - previous_month_first = now.replace(day=1).replace(month=previous_month).date() - - company = frappe.db.get_value("Employee", self.employee, "company") - - # attendance with shift - mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift") - mark_attendance( - self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift" - ) - mark_attendance( - self.employee, previous_month_first + relativedelta(days=2), "Half Day" - ) # half day - - mark_attendance( - self.employee, previous_month_first + relativedelta(days=3), "Present" - ) # attendance without shift - mark_attendance( - self.employee, previous_month_first + relativedelta(days=4), "Present", late_entry=1 - ) # late entry - mark_attendance( - self.employee, previous_month_first + relativedelta(days=5), "Present", early_exit=1 - ) # early exit - - leave_application = get_leave_application(self.employee) - - filters = frappe._dict( - {"month": previous_month, "year": now.year, "company": company, "summarized_view": 1} - ) - report = execute(filters=filters) - - row = report[1][0] - self.assertEqual(row["employee"], self.employee) - - # 4 present + half day absent 0.5 - self.assertEqual(row["total_present"], 4.5) - # 1 present + half day absent 0.5 - self.assertEqual(row["total_absent"], 1.5) - # leave days + half day leave 0.5 - self.assertEqual(row["total_leaves"], leave_application.total_leave_days + 0.5) - - self.assertEqual(row["_test_leave_type"], leave_application.total_leave_days) - self.assertEqual(row["total_late_entries"], 1) - self.assertEqual(row["total_early_exits"], 1) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_attendance_with_group_by_filter(self): - now = now_datetime() - previous_month = now.month - 1 - previous_month_first = now.replace(day=1).replace(month=previous_month).date() - - company = frappe.db.get_value("Employee", self.employee, "company") - - # attendance with shift - mark_attendance(self.employee, previous_month_first, "Absent", "Day Shift") - mark_attendance( - self.employee, previous_month_first + relativedelta(days=1), "Present", "Day Shift" - ) - - # attendance without shift - mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave") - mark_attendance(self.employee, previous_month_first + relativedelta(days=3), "Present") - - filters = frappe._dict( - {"month": previous_month, "year": now.year, "company": company, "group_by": "Department"} - ) - report = execute(filters=filters) - - department = frappe.db.get_value("Employee", self.employee, "department") - department_row = report[1][0] - self.assertIn(department, department_row["department"]) - - day_shift_row = report[1][1] - row_without_shift = report[1][2] - - self.assertEqual(day_shift_row["shift"], "Day Shift") - self.assertEqual(day_shift_row[1], "A") # absent on the 1st day of the month - self.assertEqual(day_shift_row[2], "P") # present on the 2nd day - - self.assertEqual(row_without_shift["shift"], None) - self.assertEqual(row_without_shift[3], "L") # on leave on the 3rd day - self.assertEqual(row_without_shift[4], "P") # present on the 4th day - - def test_attendance_with_employee_filter(self): - now = now_datetime() - previous_month = now.month - 1 - previous_month_first = now.replace(day=1).replace(month=previous_month).date() - - company = frappe.db.get_value("Employee", self.employee, "company") - - # mark different attendance status on first 3 days of previous month - mark_attendance(self.employee, previous_month_first, "Absent") - mark_attendance(self.employee, previous_month_first + relativedelta(days=1), "Present") - mark_attendance(self.employee, previous_month_first + relativedelta(days=2), "On Leave") - - filters = frappe._dict( - {"month": previous_month, "year": now.year, "company": company, "employee": self.employee} - ) - report = execute(filters=filters) - - record = report[1][0] - datasets = report[3]["data"]["datasets"] - absent = datasets[0]["values"] - present = datasets[1]["values"] - leaves = datasets[2]["values"] - - # ensure correct attendance is reflected on the report - self.assertEqual(self.employee, record.get("employee")) - self.assertEqual(absent[0], 1) - self.assertEqual(present[1], 1) - self.assertEqual(leaves[2], 1) - - @set_holiday_list("Salary Slip Test Holiday List", "_Test Company") - def test_validations(self): - # validation error for filters without month and year - self.assertRaises(frappe.ValidationError, execute_report_with_invalid_filters) - - # execute report without attendance record - now = now_datetime() - previous_month = now.month - 1 - - company = frappe.db.get_value("Employee", self.employee, "company") - filters = frappe._dict( - {"month": previous_month, "year": now.year, "company": company, "group_by": "Department"} - ) - report = execute(filters=filters) - self.assertEqual(report, ([], [], None, None)) - - -def get_leave_application(employee): - now = now_datetime() - previous_month = now.month - 1 - - date = getdate() - year_start = getdate(get_year_start(date)) - year_end = getdate(get_year_ending(date)) - make_allocation_record(employee=employee, from_date=year_start, to_date=year_end) - - from_date = now.replace(day=7).replace(month=previous_month).date() - to_date = now.replace(day=8).replace(month=previous_month).date() - return make_leave_application(employee, from_date, to_date, "_Test Leave Type") - - -def execute_report_with_invalid_filters(): - filters = frappe._dict({"company": "_Test Company", "group_by": "Department"}) - execute(filters=filters) diff --git a/erpnext/hr/report/recruitment_analytics/__init__.py b/erpnext/hr/report/recruitment_analytics/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js deleted file mode 100644 index 51dc7ff85b..0000000000 --- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.js +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Recruitment Analytics"] = { - "filters": [ - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "reqd": 1 - }, - { - "fieldname":"on_date", - "label": __("On Date"), - "fieldtype": "Date", - "default": frappe.datetime.now_date(), - "reqd": 1, - }, - ] -}; diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json deleted file mode 100644 index 30a8e17eb8..0000000000 --- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-05-14 16:28:45.743869", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-05-14 16:28:45.743869", - "modified_by": "Administrator", - "module": "HR", - "name": "Recruitment Analytics", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Staffing Plan", - "report_name": "Recruitment Analytics", - "report_type": "Script Report", - "roles": [ - { - "role": "HR Manager" - }, - { - "role": "HR User" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py b/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py deleted file mode 100644 index b6caf400dd..0000000000 --- a/erpnext/hr/report/recruitment_analytics/recruitment_analytics.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - - -def execute(filters=None): - - if not filters: - filters = {} - filters = frappe._dict(filters) - - columns = get_columns() - - data = get_data(filters) - - return columns, data - - -def get_columns(): - return [ - { - "label": _("Staffing Plan"), - "fieldtype": "Link", - "fieldname": "staffing_plan", - "options": "Staffing Plan", - "width": 150, - }, - { - "label": _("Job Opening"), - "fieldtype": "Link", - "fieldname": "job_opening", - "options": "Job Opening", - "width": 105, - }, - { - "label": _("Job Applicant"), - "fieldtype": "Link", - "fieldname": "job_applicant", - "options": "Job Applicant", - "width": 150, - }, - {"label": _("Applicant name"), "fieldtype": "data", "fieldname": "applicant_name", "width": 130}, - { - "label": _("Application Status"), - "fieldtype": "Data", - "fieldname": "application_status", - "width": 150, - }, - { - "label": _("Job Offer"), - "fieldtype": "Link", - "fieldname": "job_offer", - "options": "job Offer", - "width": 150, - }, - {"label": _("Designation"), "fieldtype": "Data", "fieldname": "designation", "width": 100}, - {"label": _("Offer Date"), "fieldtype": "date", "fieldname": "offer_date", "width": 100}, - { - "label": _("Job Offer status"), - "fieldtype": "Data", - "fieldname": "job_offer_status", - "width": 150, - }, - ] - - -def get_data(filters): - data = [] - staffing_plan_details = get_staffing_plan(filters) - staffing_plan_list = list(set([details["name"] for details in staffing_plan_details])) - sp_jo_map, jo_list = get_job_opening(staffing_plan_list) - jo_ja_map, ja_list = get_job_applicant(jo_list) - ja_joff_map = get_job_offer(ja_list) - - for sp in sp_jo_map.keys(): - parent_row = get_parent_row(sp_jo_map, sp, jo_ja_map, ja_joff_map) - data += parent_row - - return data - - -def get_parent_row(sp_jo_map, sp, jo_ja_map, ja_joff_map): - data = [] - if sp in sp_jo_map.keys(): - for jo in sp_jo_map[sp]: - row = { - "staffing_plan": sp, - "job_opening": jo["name"], - } - data.append(row) - child_row = get_child_row(jo["name"], jo_ja_map, ja_joff_map) - data += child_row - return data - - -def get_child_row(jo, jo_ja_map, ja_joff_map): - data = [] - if jo in jo_ja_map.keys(): - for ja in jo_ja_map[jo]: - row = { - "indent": 1, - "job_applicant": ja.name, - "applicant_name": ja.applicant_name, - "application_status": ja.status, - } - if ja.name in ja_joff_map.keys(): - jo_detail = ja_joff_map[ja.name][0] - row["job_offer"] = jo_detail.name - row["job_offer_status"] = jo_detail.status - row["offer_date"] = jo_detail.offer_date.strftime("%d-%m-%Y") - row["designation"] = jo_detail.designation - - data.append(row) - return data - - -def get_staffing_plan(filters): - - staffing_plan = frappe.db.sql( - """ - select - sp.name, sp.department, spd.designation, spd.vacancies, spd.current_count, spd.parent, sp.to_date - from - `tabStaffing Plan Detail` spd , `tabStaffing Plan` sp - where - spd.parent = sp.name - And - sp.to_date > '{0}' - """.format( - filters.on_date - ), - as_dict=1, - ) - - return staffing_plan - - -def get_job_opening(sp_list): - - job_openings = frappe.get_all( - "Job Opening", filters=[["staffing_plan", "IN", sp_list]], fields=["name", "staffing_plan"] - ) - - sp_jo_map = {} - jo_list = [] - - for openings in job_openings: - if openings.staffing_plan not in sp_jo_map.keys(): - sp_jo_map[openings.staffing_plan] = [openings] - else: - sp_jo_map[openings.staffing_plan].append(openings) - - jo_list.append(openings.name) - - return sp_jo_map, jo_list - - -def get_job_applicant(jo_list): - - jo_ja_map = {} - ja_list = [] - - applicants = frappe.get_all( - "Job Applicant", - filters=[["job_title", "IN", jo_list]], - fields=["name", "job_title", "applicant_name", "status"], - ) - - for applicant in applicants: - if applicant.job_title not in jo_ja_map.keys(): - jo_ja_map[applicant.job_title] = [applicant] - else: - jo_ja_map[applicant.job_title].append(applicant) - - ja_list.append(applicant.name) - - return jo_ja_map, ja_list - - -def get_job_offer(ja_list): - ja_joff_map = {} - - offers = frappe.get_all( - "Job Offer", - filters=[["job_applicant", "IN", ja_list]], - fields=["name", "job_applicant", "status", "offer_date", "designation"], - ) - - for offer in offers: - if offer.job_applicant not in ja_joff_map.keys(): - ja_joff_map[offer.job_applicant] = [offer] - else: - ja_joff_map[offer.job_applicant].append(offer) - - return ja_joff_map diff --git a/erpnext/hr/report/vehicle_expenses/__init__.py b/erpnext/hr/report/vehicle_expenses/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py deleted file mode 100644 index da6dace72b..0000000000 --- a/erpnext/hr/report/vehicle_expenses/test_vehicle_expenses.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import unittest - -import frappe -from frappe.utils import getdate - -from erpnext.accounts.utils import get_fiscal_year -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.vehicle_log.test_vehicle_log import get_vehicle, make_vehicle_log -from erpnext.hr.doctype.vehicle_log.vehicle_log import make_expense_claim -from erpnext.hr.report.vehicle_expenses.vehicle_expenses import execute - - -class TestVehicleExpenses(unittest.TestCase): - @classmethod - def setUpClass(self): - frappe.db.sql("delete from `tabVehicle Log`") - - employee_id = frappe.db.sql( - '''select name from `tabEmployee` where name="testdriver@example.com"''' - ) - self.employee_id = employee_id[0][0] if employee_id else None - if not self.employee_id: - self.employee_id = make_employee("testdriver@example.com", company="_Test Company") - - self.license_plate = get_vehicle(self.employee_id) - - def test_vehicle_expenses_based_on_fiscal_year(self): - vehicle_log = make_vehicle_log(self.license_plate, self.employee_id, with_services=True) - expense_claim = make_expense_claim(vehicle_log.name) - - # Based on Fiscal Year - filters = {"filter_based_on": "Fiscal Year", "fiscal_year": get_fiscal_year(getdate())[0]} - - report = execute(filters) - - expected_data = [ - { - "vehicle": self.license_plate, - "make": "Maruti", - "model": "PCM", - "location": "Mumbai", - "log_name": vehicle_log.name, - "odometer": 5010, - "date": getdate(), - "fuel_qty": 50.0, - "fuel_price": 500.0, - "fuel_expense": 25000.0, - "service_expense": 2000.0, - "employee": self.employee_id, - } - ] - - self.assertEqual(report[1], expected_data) - - # Based on Date Range - fiscal_year = get_fiscal_year(getdate(), as_dict=True) - filters = { - "filter_based_on": "Date Range", - "from_date": fiscal_year.year_start_date, - "to_date": fiscal_year.year_end_date, - } - - report = execute(filters) - self.assertEqual(report[1], expected_data) - - # clean up - vehicle_log.cancel() - frappe.delete_doc("Expense Claim", expense_claim.name) - frappe.delete_doc("Vehicle Log", vehicle_log.name) - - def tearDown(self): - frappe.delete_doc("Vehicle", self.license_plate, force=1) - frappe.delete_doc("Employee", self.employee_id, force=1) diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js deleted file mode 100644 index 2d0aa0f36d..0000000000 --- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.js +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -frappe.query_reports["Vehicle Expenses"] = { - "filters": [ - { - "fieldname": "filter_based_on", - "label": __("Filter Based On"), - "fieldtype": "Select", - "options": ["Fiscal Year", "Date Range"], - "default": ["Fiscal Year"], - "reqd": 1 - }, - { - "fieldname": "fiscal_year", - "label": __("Fiscal Year"), - "fieldtype": "Link", - "options": "Fiscal Year", - "default": frappe.defaults.get_user_default("fiscal_year"), - "depends_on": "eval: doc.filter_based_on == 'Fiscal Year'", - "reqd": 1 - }, - { - "fieldname": "from_date", - "label": __("From Date"), - "fieldtype": "Date", - "reqd": 1, - "depends_on": "eval: doc.filter_based_on == 'Date Range'", - "default": frappe.datetime.add_months(frappe.datetime.nowdate(), -12) - }, - { - "fieldname": "to_date", - "label": __("To Date"), - "fieldtype": "Date", - "reqd": 1, - "depends_on": "eval: doc.filter_based_on == 'Date Range'", - "default": frappe.datetime.nowdate() - }, - { - "fieldname": "vehicle", - "label": __("Vehicle"), - "fieldtype": "Link", - "options": "Vehicle" - }, - { - "fieldname": "employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee" - } - ] -}; diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json deleted file mode 100644 index 1a3e5a93bb..0000000000 --- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "add_total_row": 1, - "columns": [], - "creation": "2016-09-09 03:33:40.605734", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "filters": [], - "idx": 2, - "is_standard": "Yes", - "modified": "2021-05-16 22:48:22.767535", - "modified_by": "Administrator", - "module": "HR", - "name": "Vehicle Expenses", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Vehicle", - "report_name": "Vehicle Expenses", - "report_type": "Script Report", - "roles": [ - { - "role": "Fleet Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py b/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py deleted file mode 100644 index fc5510ddad..0000000000 --- a/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.utils import flt - -from erpnext.accounts.report.financial_statements import get_period_list - - -def execute(filters=None): - filters = frappe._dict(filters or {}) - - columns = get_columns() - data = get_vehicle_log_data(filters) - chart = get_chart_data(data, filters) - - return columns, data, None, chart - - -def get_columns(): - return [ - { - "fieldname": "vehicle", - "fieldtype": "Link", - "label": _("Vehicle"), - "options": "Vehicle", - "width": 150, - }, - {"fieldname": "make", "fieldtype": "Data", "label": _("Make"), "width": 100}, - {"fieldname": "model", "fieldtype": "Data", "label": _("Model"), "width": 80}, - {"fieldname": "location", "fieldtype": "Data", "label": _("Location"), "width": 100}, - { - "fieldname": "log_name", - "fieldtype": "Link", - "label": _("Vehicle Log"), - "options": "Vehicle Log", - "width": 100, - }, - {"fieldname": "odometer", "fieldtype": "Int", "label": _("Odometer Value"), "width": 120}, - {"fieldname": "date", "fieldtype": "Date", "label": _("Date"), "width": 100}, - {"fieldname": "fuel_qty", "fieldtype": "Float", "label": _("Fuel Qty"), "width": 80}, - {"fieldname": "fuel_price", "fieldtype": "Float", "label": _("Fuel Price"), "width": 100}, - {"fieldname": "fuel_expense", "fieldtype": "Currency", "label": _("Fuel Expense"), "width": 150}, - { - "fieldname": "service_expense", - "fieldtype": "Currency", - "label": _("Service Expense"), - "width": 150, - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "label": _("Employee"), - "options": "Employee", - "width": 150, - }, - ] - - -def get_vehicle_log_data(filters): - start_date, end_date = get_period_dates(filters) - conditions, values = get_conditions(filters) - - data = frappe.db.sql( - """ - SELECT - vhcl.license_plate as vehicle, vhcl.make, vhcl.model, - vhcl.location, log.name as log_name, log.odometer, - log.date, log.employee, log.fuel_qty, - log.price as fuel_price, - log.fuel_qty * log.price as fuel_expense - FROM - `tabVehicle` vhcl,`tabVehicle Log` log - WHERE - vhcl.license_plate = log.license_plate - and log.docstatus = 1 - and date between %(start_date)s and %(end_date)s - {0} - ORDER BY date""".format( - conditions - ), - values, - as_dict=1, - ) - - for row in data: - row["service_expense"] = get_service_expense(row.log_name) - - return data - - -def get_conditions(filters): - conditions = "" - - start_date, end_date = get_period_dates(filters) - values = {"start_date": start_date, "end_date": end_date} - - if filters.employee: - conditions += " and log.employee = %(employee)s" - values["employee"] = filters.employee - - if filters.vehicle: - conditions += " and vhcl.license_plate = %(vehicle)s" - values["vehicle"] = filters.vehicle - - return conditions, values - - -def get_period_dates(filters): - if filters.filter_based_on == "Fiscal Year" and filters.fiscal_year: - fy = frappe.db.get_value( - "Fiscal Year", filters.fiscal_year, ["year_start_date", "year_end_date"], as_dict=True - ) - return fy.year_start_date, fy.year_end_date - else: - return filters.from_date, filters.to_date - - -def get_service_expense(logname): - expense_amount = frappe.db.sql( - """ - SELECT sum(expense_amount) - FROM - `tabVehicle Log` log, `tabVehicle Service` service - WHERE - service.parent=log.name and log.name=%s - """, - logname, - ) - - return flt(expense_amount[0][0]) if expense_amount else 0.0 - - -def get_chart_data(data, filters): - period_list = get_period_list( - filters.fiscal_year, - filters.fiscal_year, - filters.from_date, - filters.to_date, - filters.filter_based_on, - "Monthly", - ) - - fuel_data, service_data = [], [] - - for period in period_list: - total_fuel_exp = 0 - total_service_exp = 0 - - for row in data: - if row.date <= period.to_date and row.date >= period.from_date: - total_fuel_exp += flt(row.fuel_expense) - total_service_exp += flt(row.service_expense) - - fuel_data.append([period.key, total_fuel_exp]) - service_data.append([period.key, total_service_exp]) - - labels = [period.label for period in period_list] - fuel_exp_data = [row[1] for row in fuel_data] - service_exp_data = [row[1] for row in service_data] - - datasets = [] - if fuel_exp_data: - datasets.append({"name": _("Fuel Expenses"), "values": fuel_exp_data}) - - if service_exp_data: - datasets.append({"name": _("Service Expenses"), "values": service_exp_data}) - - chart = { - "data": {"labels": labels, "datasets": datasets}, - "type": "line", - "fieldtype": "Currency", - } - - return chart diff --git a/erpnext/hr/utils.py b/erpnext/hr/utils.py deleted file mode 100644 index 4e30b0ff6e..0000000000 --- a/erpnext/hr/utils.py +++ /dev/null @@ -1,605 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe -from frappe import _ -from frappe.utils import ( - add_days, - cstr, - flt, - format_datetime, - formatdate, - get_datetime, - get_link_to_form, - getdate, - nowdate, - today, -) - -import erpnext -from erpnext.hr.doctype.employee.employee import ( - InactiveEmployeeStatusError, - get_holiday_list_for_employee, -) - - -class DuplicateDeclarationError(frappe.ValidationError): - pass - - -def set_employee_name(doc): - if doc.employee and not doc.employee_name: - doc.employee_name = frappe.db.get_value("Employee", doc.employee, "employee_name") - - -def update_employee_work_history(employee, details, date=None, cancel=False): - if not employee.internal_work_history and not cancel: - employee.append( - "internal_work_history", - { - "branch": employee.branch, - "designation": employee.designation, - "department": employee.department, - "from_date": employee.date_of_joining, - }, - ) - - internal_work_history = {} - for item in details: - field = frappe.get_meta("Employee").get_field(item.fieldname) - if not field: - continue - fieldtype = field.fieldtype - new_data = item.new if not cancel else item.current - if fieldtype == "Date" and new_data: - new_data = getdate(new_data) - elif fieldtype == "Datetime" and new_data: - new_data = get_datetime(new_data) - setattr(employee, item.fieldname, new_data) - if item.fieldname in ["department", "designation", "branch"]: - internal_work_history[item.fieldname] = item.new - - if internal_work_history and not cancel: - internal_work_history["from_date"] = date - employee.append("internal_work_history", internal_work_history) - - if cancel: - delete_employee_work_history(details, employee, date) - - return employee - - -def delete_employee_work_history(details, employee, date): - filters = {} - for d in details: - for history in employee.internal_work_history: - if d.property == "Department" and history.department == d.new: - department = d.new - filters["department"] = department - if d.property == "Designation" and history.designation == d.new: - designation = d.new - filters["designation"] = designation - if d.property == "Branch" and history.branch == d.new: - branch = d.new - filters["branch"] = branch - if date and date == history.from_date: - filters["from_date"] = date - if filters: - frappe.db.delete("Employee Internal Work History", filters) - - -@frappe.whitelist() -def get_employee_field_property(employee, fieldname): - if employee and fieldname: - field = frappe.get_meta("Employee").get_field(fieldname) - value = frappe.db.get_value("Employee", employee, fieldname) - options = field.options - if field.fieldtype == "Date": - value = formatdate(value) - elif field.fieldtype == "Datetime": - value = format_datetime(value) - return {"value": value, "datatype": field.fieldtype, "label": field.label, "options": options} - else: - return False - - -def validate_dates(doc, from_date, to_date): - date_of_joining, relieving_date = frappe.db.get_value( - "Employee", doc.employee, ["date_of_joining", "relieving_date"] - ) - if getdate(from_date) > getdate(to_date): - frappe.throw(_("To date can not be less than from date")) - elif getdate(from_date) > getdate(nowdate()): - frappe.throw(_("Future dates not allowed")) - elif date_of_joining and getdate(from_date) < getdate(date_of_joining): - frappe.throw(_("From date can not be less than employee's joining date")) - elif relieving_date and getdate(to_date) > getdate(relieving_date): - frappe.throw(_("To date can not greater than employee's relieving date")) - - -def validate_overlap(doc, from_date, to_date, company=None): - query = """ - select name - from `tab{0}` - where name != %(name)s - """ - query += get_doc_condition(doc.doctype) - - if not doc.name: - # hack! if name is null, it could cause problems with != - doc.name = "New " + doc.doctype - - overlap_doc = frappe.db.sql( - query.format(doc.doctype), - { - "employee": doc.get("employee"), - "from_date": from_date, - "to_date": to_date, - "name": doc.name, - "company": company, - }, - as_dict=1, - ) - - if overlap_doc: - if doc.get("employee"): - exists_for = doc.employee - if company: - exists_for = company - throw_overlap_error(doc, exists_for, overlap_doc[0].name, from_date, to_date) - - -def get_doc_condition(doctype): - if doctype == "Compensatory Leave Request": - return "and employee = %(employee)s and docstatus < 2 \ - and (work_from_date between %(from_date)s and %(to_date)s \ - or work_end_date between %(from_date)s and %(to_date)s \ - or (work_from_date < %(from_date)s and work_end_date > %(to_date)s))" - elif doctype == "Leave Period": - return "and company = %(company)s and (from_date between %(from_date)s and %(to_date)s \ - or to_date between %(from_date)s and %(to_date)s \ - or (from_date < %(from_date)s and to_date > %(to_date)s))" - - -def throw_overlap_error(doc, exists_for, overlap_doc, from_date, to_date): - msg = ( - _("A {0} exists between {1} and {2} (").format( - doc.doctype, formatdate(from_date), formatdate(to_date) - ) - + """ {1}""".format(doc.doctype, overlap_doc) - + _(") for {0}").format(exists_for) - ) - frappe.throw(msg) - - -def validate_duplicate_exemption_for_payroll_period(doctype, docname, payroll_period, employee): - existing_record = frappe.db.exists( - doctype, - { - "payroll_period": payroll_period, - "employee": employee, - "docstatus": ["<", 2], - "name": ["!=", docname], - }, - ) - if existing_record: - frappe.throw( - _("{0} already exists for employee {1} and period {2}").format( - doctype, employee, payroll_period - ), - DuplicateDeclarationError, - ) - - -def validate_tax_declaration(declarations): - subcategories = [] - for d in declarations: - if d.exemption_sub_category in subcategories: - frappe.throw(_("More than one selection for {0} not allowed").format(d.exemption_sub_category)) - subcategories.append(d.exemption_sub_category) - - -def get_total_exemption_amount(declarations): - exemptions = frappe._dict() - for d in declarations: - exemptions.setdefault(d.exemption_category, frappe._dict()) - category_max_amount = exemptions.get(d.exemption_category).max_amount - if not category_max_amount: - category_max_amount = frappe.db.get_value( - "Employee Tax Exemption Category", d.exemption_category, "max_amount" - ) - exemptions.get(d.exemption_category).max_amount = category_max_amount - sub_category_exemption_amount = ( - d.max_amount if (d.max_amount and flt(d.amount) > flt(d.max_amount)) else d.amount - ) - - exemptions.get(d.exemption_category).setdefault("total_exemption_amount", 0.0) - exemptions.get(d.exemption_category).total_exemption_amount += flt(sub_category_exemption_amount) - - if ( - category_max_amount - and exemptions.get(d.exemption_category).total_exemption_amount > category_max_amount - ): - exemptions.get(d.exemption_category).total_exemption_amount = category_max_amount - - total_exemption_amount = sum([flt(d.total_exemption_amount) for d in exemptions.values()]) - return total_exemption_amount - - -@frappe.whitelist() -def get_leave_period(from_date, to_date, company): - leave_period = frappe.db.sql( - """ - select name, from_date, to_date - from `tabLeave Period` - where company=%(company)s and is_active=1 - and (from_date between %(from_date)s and %(to_date)s - or to_date between %(from_date)s and %(to_date)s - or (from_date < %(from_date)s and to_date > %(to_date)s)) - """, - {"from_date": from_date, "to_date": to_date, "company": company}, - as_dict=1, - ) - - if leave_period: - return leave_period - - -def generate_leave_encashment(): - """Generates a draft leave encashment on allocation expiry""" - from erpnext.hr.doctype.leave_encashment.leave_encashment import create_leave_encashment - - if frappe.db.get_single_value("HR Settings", "auto_leave_encashment"): - leave_type = frappe.get_all("Leave Type", filters={"allow_encashment": 1}, fields=["name"]) - leave_type = [l["name"] for l in leave_type] - - leave_allocation = frappe.get_all( - "Leave Allocation", - filters={"to_date": add_days(today(), -1), "leave_type": ("in", leave_type)}, - fields=[ - "employee", - "leave_period", - "leave_type", - "to_date", - "total_leaves_allocated", - "new_leaves_allocated", - ], - ) - - create_leave_encashment(leave_allocation=leave_allocation) - - -def allocate_earned_leaves(ignore_duplicates=False): - """Allocate earned leaves to Employees""" - e_leave_types = get_earned_leaves() - today = getdate() - - for e_leave_type in e_leave_types: - - leave_allocations = get_leave_allocations(today, e_leave_type.name) - - for allocation in leave_allocations: - - if not allocation.leave_policy_assignment and not allocation.leave_policy: - continue - - leave_policy = ( - allocation.leave_policy - if allocation.leave_policy - else frappe.db.get_value( - "Leave Policy Assignment", allocation.leave_policy_assignment, ["leave_policy"] - ) - ) - - annual_allocation = frappe.db.get_value( - "Leave Policy Detail", - filters={"parent": leave_policy, "leave_type": e_leave_type.name}, - fieldname=["annual_allocation"], - ) - - from_date = allocation.from_date - - if e_leave_type.based_on_date_of_joining: - from_date = frappe.db.get_value("Employee", allocation.employee, "date_of_joining") - - if check_effective_date( - from_date, today, e_leave_type.earned_leave_frequency, e_leave_type.based_on_date_of_joining - ): - update_previous_leave_allocation( - allocation, annual_allocation, e_leave_type, ignore_duplicates - ) - - -def update_previous_leave_allocation( - allocation, annual_allocation, e_leave_type, ignore_duplicates=False -): - earned_leaves = get_monthly_earned_leave( - annual_allocation, e_leave_type.earned_leave_frequency, e_leave_type.rounding - ) - - allocation = frappe.get_doc("Leave Allocation", allocation.name) - new_allocation = flt(allocation.total_leaves_allocated) + flt(earned_leaves) - - if new_allocation > e_leave_type.max_leaves_allowed and e_leave_type.max_leaves_allowed > 0: - new_allocation = e_leave_type.max_leaves_allowed - - if new_allocation != allocation.total_leaves_allocated: - today_date = today() - - if ignore_duplicates or not is_earned_leave_already_allocated(allocation, annual_allocation): - allocation.db_set("total_leaves_allocated", new_allocation, update_modified=False) - create_additional_leave_ledger_entry(allocation, earned_leaves, today_date) - - if e_leave_type.based_on_date_of_joining: - text = _("allocated {0} leave(s) via scheduler on {1} based on the date of joining").format( - frappe.bold(earned_leaves), frappe.bold(formatdate(today_date)) - ) - else: - text = _("allocated {0} leave(s) via scheduler on {1}").format( - frappe.bold(earned_leaves), frappe.bold(formatdate(today_date)) - ) - - allocation.add_comment(comment_type="Info", text=text) - - -def get_monthly_earned_leave(annual_leaves, frequency, rounding): - earned_leaves = 0.0 - divide_by_frequency = {"Yearly": 1, "Half-Yearly": 6, "Quarterly": 4, "Monthly": 12} - if annual_leaves: - earned_leaves = flt(annual_leaves) / divide_by_frequency[frequency] - if rounding: - if rounding == "0.25": - earned_leaves = round(earned_leaves * 4) / 4 - elif rounding == "0.5": - earned_leaves = round(earned_leaves * 2) / 2 - else: - earned_leaves = round(earned_leaves) - - return earned_leaves - - -def is_earned_leave_already_allocated(allocation, annual_allocation): - from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import ( - get_leave_type_details, - ) - - leave_type_details = get_leave_type_details() - date_of_joining = frappe.db.get_value("Employee", allocation.employee, "date_of_joining") - - assignment = frappe.get_doc("Leave Policy Assignment", allocation.leave_policy_assignment) - leaves_for_passed_months = assignment.get_leaves_for_passed_months( - allocation.leave_type, annual_allocation, leave_type_details, date_of_joining - ) - - # exclude carry-forwarded leaves while checking for leave allocation for passed months - num_allocations = allocation.total_leaves_allocated - if allocation.unused_leaves: - num_allocations -= allocation.unused_leaves - - if num_allocations >= leaves_for_passed_months: - return True - return False - - -def get_leave_allocations(date, leave_type): - return frappe.db.sql( - """select name, employee, from_date, to_date, leave_policy_assignment, leave_policy - from `tabLeave Allocation` - where - %s between from_date and to_date and docstatus=1 - and leave_type=%s""", - (date, leave_type), - as_dict=1, - ) - - -def get_earned_leaves(): - return frappe.get_all( - "Leave Type", - fields=[ - "name", - "max_leaves_allowed", - "earned_leave_frequency", - "rounding", - "based_on_date_of_joining", - ], - filters={"is_earned_leave": 1}, - ) - - -def create_additional_leave_ledger_entry(allocation, leaves, date): - """Create leave ledger entry for leave types""" - allocation.new_leaves_allocated = leaves - allocation.from_date = date - allocation.unused_leaves = 0 - allocation.create_leave_ledger_entry() - - -def check_effective_date(from_date, to_date, frequency, based_on_date_of_joining): - import calendar - - from dateutil import relativedelta - - from_date = get_datetime(from_date) - to_date = get_datetime(to_date) - rd = relativedelta.relativedelta(to_date, from_date) - # last day of month - last_day = calendar.monthrange(to_date.year, to_date.month)[1] - - if (from_date.day == to_date.day and based_on_date_of_joining) or ( - not based_on_date_of_joining and to_date.day == last_day - ): - if frequency == "Monthly": - return True - elif frequency == "Quarterly" and rd.months % 3: - return True - elif frequency == "Half-Yearly" and rd.months % 6: - return True - elif frequency == "Yearly" and rd.months % 12: - return True - - if frappe.flags.in_test: - return True - - return False - - -def get_salary_assignment(employee, date): - assignment = frappe.db.sql( - """ - select * from `tabSalary Structure Assignment` - where employee=%(employee)s - and docstatus = 1 - and %(on_date)s >= from_date order by from_date desc limit 1""", - { - "employee": employee, - "on_date": date, - }, - as_dict=1, - ) - return assignment[0] if assignment else None - - -def get_sal_slip_total_benefit_given(employee, payroll_period, component=False): - total_given_benefit_amount = 0 - query = """ - select sum(sd.amount) as 'total_amount' - from `tabSalary Slip` ss, `tabSalary Detail` sd - where ss.employee=%(employee)s - and ss.docstatus = 1 and ss.name = sd.parent - and sd.is_flexible_benefit = 1 and sd.parentfield = "earnings" - and sd.parenttype = "Salary Slip" - and (ss.start_date between %(start_date)s and %(end_date)s - or ss.end_date between %(start_date)s and %(end_date)s - or (ss.start_date < %(start_date)s and ss.end_date > %(end_date)s)) - """ - - if component: - query += "and sd.salary_component = %(component)s" - - sum_of_given_benefit = frappe.db.sql( - query, - { - "employee": employee, - "start_date": payroll_period.start_date, - "end_date": payroll_period.end_date, - "component": component, - }, - as_dict=True, - ) - - if sum_of_given_benefit and flt(sum_of_given_benefit[0].total_amount) > 0: - total_given_benefit_amount = sum_of_given_benefit[0].total_amount - return total_given_benefit_amount - - -def get_holiday_dates_for_employee(employee, start_date, end_date): - """return a list of holiday dates for the given employee between start_date and end_date""" - # return only date - holidays = get_holidays_for_employee(employee, start_date, end_date) - - return [cstr(h.holiday_date) for h in holidays] - - -def get_holidays_for_employee( - employee, start_date, end_date, raise_exception=True, only_non_weekly=False -): - """Get Holidays for a given employee - - `employee` (str) - `start_date` (str or datetime) - `end_date` (str or datetime) - `raise_exception` (bool) - `only_non_weekly` (bool) - - return: list of dicts with `holiday_date` and `description` - """ - holiday_list = get_holiday_list_for_employee(employee, raise_exception=raise_exception) - - if not holiday_list: - return [] - - filters = {"parent": holiday_list, "holiday_date": ("between", [start_date, end_date])} - - if only_non_weekly: - filters["weekly_off"] = False - - holidays = frappe.get_all("Holiday", fields=["description", "holiday_date"], filters=filters) - - return holidays - - -@erpnext.allow_regional -def calculate_annual_eligible_hra_exemption(doc): - # Don't delete this method, used for localization - # Indian HRA Exemption Calculation - return {} - - -@erpnext.allow_regional -def calculate_hra_exemption_for_period(doc): - # Don't delete this method, used for localization - # Indian HRA Exemption Calculation - return {} - - -def get_previous_claimed_amount(employee, payroll_period, non_pro_rata=False, component=False): - total_claimed_amount = 0 - query = """ - select sum(claimed_amount) as 'total_amount' - from `tabEmployee Benefit Claim` - where employee=%(employee)s - and docstatus = 1 - and (claim_date between %(start_date)s and %(end_date)s) - """ - if non_pro_rata: - query += "and pay_against_benefit_claim = 1" - if component: - query += "and earning_component = %(component)s" - - sum_of_claimed_amount = frappe.db.sql( - query, - { - "employee": employee, - "start_date": payroll_period.start_date, - "end_date": payroll_period.end_date, - "component": component, - }, - as_dict=True, - ) - if sum_of_claimed_amount and flt(sum_of_claimed_amount[0].total_amount) > 0: - total_claimed_amount = sum_of_claimed_amount[0].total_amount - return total_claimed_amount - - -def share_doc_with_approver(doc, user): - # if approver does not have permissions, share - if not frappe.has_permission(doc=doc, ptype="submit", user=user): - frappe.share.add(doc.doctype, doc.name, user, submit=1, flags={"ignore_share_permission": True}) - - frappe.msgprint( - _("Shared with the user {0} with {1} access").format(user, frappe.bold("submit"), alert=True) - ) - - # remove shared doc if approver changes - doc_before_save = doc.get_doc_before_save() - if doc_before_save: - approvers = { - "Leave Application": "leave_approver", - "Expense Claim": "expense_approver", - "Shift Request": "approver", - } - - approver = approvers.get(doc.doctype) - if doc_before_save.get(approver) != doc.get(approver): - frappe.share.remove(doc.doctype, doc.name, doc_before_save.get(approver)) - - -def validate_active_employee(employee): - if frappe.db.get_value("Employee", employee, "status") == "Inactive": - frappe.throw( - _("Transactions cannot be created for an Inactive Employee {0}.").format( - get_link_to_form("Employee", employee) - ), - InactiveEmployeeStatusError, - ) diff --git a/erpnext/hr/web_form/__init__.py b/erpnext/hr/web_form/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/web_form/job_application/__init__.py b/erpnext/hr/web_form/job_application/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/hr/web_form/job_application/job_application.js b/erpnext/hr/web_form/job_application/job_application.js deleted file mode 100644 index ffc5e98425..0000000000 --- a/erpnext/hr/web_form/job_application/job_application.js +++ /dev/null @@ -1,3 +0,0 @@ -frappe.ready(function() { - // bind events here -}) diff --git a/erpnext/hr/web_form/job_application/job_application.json b/erpnext/hr/web_form/job_application/job_application.json deleted file mode 100644 index 512ba5c555..0000000000 --- a/erpnext/hr/web_form/job_application/job_application.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "accept_payment": 0, - "allow_comments": 1, - "allow_delete": 0, - "allow_edit": 1, - "allow_incomplete": 0, - "allow_multiple": 1, - "allow_print": 0, - "amount": 0.0, - "amount_based_on_field": 0, - "apply_document_permissions": 0, - "client_script": "frappe.web_form.on('resume_link', (field, value) => {\n if (!frappe.utils.is_url(value)) {\n frappe.msgprint(__('Resume link not valid'));\n }\n});\n", - "creation": "2016-09-10 02:53:16.598314", - "doc_type": "Job Applicant", - "docstatus": 0, - "doctype": "Web Form", - "idx": 0, - "introduction_text": "", - "is_standard": 1, - "login_required": 0, - "max_attachment_size": 0, - "modified": "2020-10-07 19:27:17.143355", - "modified_by": "Administrator", - "module": "HR", - "name": "job-application", - "owner": "Administrator", - "published": 1, - "route": "job_application", - "route_to_success_link": 0, - "show_attachments": 0, - "show_in_grid": 0, - "show_sidebar": 1, - "sidebar_items": [], - "success_message": "Thank you for applying.", - "success_url": "/jobs", - "title": "Job Application", - "web_form_fields": [ - { - "allow_read_on_all_link_options": 0, - "fieldname": "job_title", - "fieldtype": "Data", - "hidden": 0, - "label": "Job Opening", - "max_length": 0, - "max_value": 0, - "options": "", - "read_only": 1, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "applicant_name", - "fieldtype": "Data", - "hidden": 0, - "label": "Applicant Name", - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 1, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "email_id", - "fieldtype": "Data", - "hidden": 0, - "label": "Email Address", - "max_length": 0, - "max_value": 0, - "options": "Email", - "read_only": 0, - "reqd": 1, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "phone_number", - "fieldtype": "Data", - "hidden": 0, - "label": "Phone Number", - "max_length": 0, - "max_value": 0, - "options": "Phone", - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "country", - "fieldtype": "Link", - "hidden": 0, - "label": "Country of Residence", - "max_length": 0, - "max_value": 0, - "options": "Country", - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "cover_letter", - "fieldtype": "Text", - "hidden": 0, - "label": "Cover Letter", - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "resume_link", - "fieldtype": "Data", - "hidden": 0, - "label": "Resume Link", - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "", - "fieldtype": "Section Break", - "hidden": 0, - "label": "Expected Salary Range per month", - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 1, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "currency", - "fieldtype": "Link", - "hidden": 0, - "label": "Currency", - "max_length": 0, - "max_value": 0, - "options": "Currency", - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "", - "fieldtype": "Column Break", - "hidden": 0, - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "lower_range", - "fieldtype": "Currency", - "hidden": 0, - "label": "Lower Range", - "max_length": 0, - "max_value": 0, - "options": "currency", - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "", - "fieldtype": "Column Break", - "hidden": 0, - "max_length": 0, - "max_value": 0, - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - }, - { - "allow_read_on_all_link_options": 0, - "fieldname": "upper_range", - "fieldtype": "Currency", - "hidden": 0, - "label": "Upper Range", - "max_length": 0, - "max_value": 0, - "options": "currency", - "read_only": 0, - "reqd": 0, - "show_in_filter": 0 - } - ] -} \ No newline at end of file diff --git a/erpnext/hr/web_form/job_application/job_application.py b/erpnext/hr/web_form/job_application/job_application.py deleted file mode 100644 index 02e3e93333..0000000000 --- a/erpnext/hr/web_form/job_application/job_application.py +++ /dev/null @@ -1,3 +0,0 @@ -def get_context(context): - # do your magic here - pass diff --git a/erpnext/hr/workspace/hr/hr.json b/erpnext/hr/workspace/hr/hr.json deleted file mode 100644 index 30cec1b4a8..0000000000 --- a/erpnext/hr/workspace/hr/hr.json +++ /dev/null @@ -1,1697 +0,0 @@ -{ - "charts": [ - { - "chart_name": "Outgoing Salary", - "label": "Outgoing Salary" - } - ], - "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Human Resource\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Outgoing Salary\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Employee\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Leave Application\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Attendance\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Job Applicant\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Monthly Attendance Sheet\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee Lifecycle\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Employee Exit\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Shift Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Leaves\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Attendance\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Expense Claims\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Loans\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Recruitment\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Performance\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Fleet Management\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Training\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Key Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Other Reports\",\"col\":4}}]", - "creation": "2020-03-02 15:48:58.322521", - "docstatus": 0, - "doctype": "Workspace", - "for_user": "", - "hide_custom": 0, - "icon": "hr", - "idx": 0, - "label": "HR", - "links": [ - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee", - "link_count": 0, - "link_to": "Employee", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employment Type", - "link_count": 0, - "link_to": "Employment Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Branch", - "link_count": 0, - "link_to": "Branch", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Department", - "link_count": 0, - "link_to": "Department", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Designation", - "link_count": 0, - "link_to": "Designation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Grade", - "link_count": 0, - "link_to": "Employee Grade", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Group", - "link_count": 0, - "link_to": "Employee Group", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Health Insurance", - "link_count": 0, - "link_to": "Employee Health Insurance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Job Applicant", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Onboarding", - "link_count": 0, - "link_to": "Employee Onboarding", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Skill Map", - "link_count": 0, - "link_to": "Employee Skill Map", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Promotion", - "link_count": 0, - "link_to": "Employee Promotion", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Transfer", - "link_count": 0, - "link_to": "Employee Transfer", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Grievance Type", - "link_count": 0, - "link_to": "Grievance Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Grievance", - "link_count": 0, - "link_to": "Employee Grievance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Separation", - "link_count": 0, - "link_to": "Employee Separation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Onboarding Template", - "link_count": 0, - "link_to": "Employee Onboarding Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Separation Template", - "link_count": 0, - "link_to": "Employee Separation Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Full and Final Statement", - "link_count": 0, - "link_to": "Full and Final Statement", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Type", - "link_count": 0, - "link_to": "Shift Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Request", - "link_count": 0, - "link_to": "Shift Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Assignment", - "link_count": 0, - "link_to": "Shift Assignment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Holiday List", - "link_count": 0, - "link_to": "Holiday List", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Type", - "link_count": 0, - "link_to": "Leave Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Period", - "link_count": 0, - "link_to": "Leave Period", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Leave Type", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Policy", - "link_count": 0, - "link_to": "Leave Policy", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Leave Policy", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Policy Assignment", - "link_count": 0, - "link_to": "Leave Policy Assignment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Application", - "link_count": 0, - "link_to": "Leave Application", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Allocation", - "link_count": 0, - "link_to": "Leave Allocation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Encashment", - "link_count": 0, - "link_to": "Leave Encashment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Block List", - "link_count": 0, - "link_to": "Leave Block List", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Compensatory Leave Request", - "link_count": 0, - "link_to": "Compensatory Leave Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Attendance Tool", - "link_count": 0, - "link_to": "Employee Attendance Tool", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Attendance", - "link_count": 0, - "link_to": "Attendance", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Attendance Request", - "link_count": 0, - "link_to": "Attendance Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Upload Attendance", - "link_count": 0, - "link_to": "Upload Attendance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Checkin", - "link_count": 0, - "link_to": "Employee Checkin", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Expense Claim", - "link_count": 0, - "link_to": "Expense Claim", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Advance", - "link_count": 0, - "link_to": "Employee Advance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Travel Request", - "link_count": 0, - "link_to": "Travel Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "HR Settings", - "link_count": 0, - "link_to": "HR Settings", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Daily Work Summary Group", - "link_count": 0, - "link_to": "Daily Work Summary Group", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Team Updates", - "link_count": 0, - "link_to": "team-updates", - "link_type": "Page", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Driver", - "link_count": 0, - "link_to": "Driver", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Vehicle", - "link_count": 0, - "link_to": "Vehicle", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Vehicle Log", - "link_count": 0, - "link_to": "Vehicle Log", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Vehicle", - "hidden": 0, - "is_query_report": 1, - "label": "Vehicle Expenses", - "link_count": 0, - "link_to": "Vehicle Expenses", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Opening", - "link_count": 0, - "link_to": "Job Opening", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Referral", - "link_count": 0, - "link_to": "Employee Referral", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Applicant", - "link_count": 0, - "link_to": "Job Applicant", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Offer", - "link_count": 0, - "link_to": "Job Offer", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Staffing Plan", - "link_count": 0, - "link_to": "Staffing Plan", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Appointment Letter", - "link_count": 0, - "link_to": "Appointment Letter", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Appointment Letter Template", - "link_count": 0, - "link_to": "Appointment Letter Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Loans", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Loan Application", - "link_count": 0, - "link_to": "Loan Application", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Loan", - "link_count": 0, - "link_to": "Loan", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Loan Type", - "link_count": 0, - "link_to": "Loan Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Training", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Training Program", - "link_count": 0, - "link_to": "Training Program", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Training Event", - "link_count": 0, - "link_to": "Training Event", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Training Result", - "link_count": 0, - "link_to": "Training Result", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Training Feedback", - "link_count": 0, - "link_to": "Training Feedback", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Performance", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Appraisal", - "link_count": 0, - "link_to": "Appraisal", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Appraisal Template", - "link_count": 0, - "link_to": "Appraisal Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Energy Point Rule", - "link_count": 0, - "link_to": "Energy Point Rule", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Energy Point Log", - "link_count": 0, - "link_to": "Energy Point Log", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Attendance", - "hidden": 0, - "is_query_report": 1, - "label": "Monthly Attendance Sheet", - "link_count": 0, - "link_to": "Monthly Attendance Sheet", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Staffing Plan", - "hidden": 0, - "is_query_report": 1, - "label": "Recruitment Analytics", - "link_count": 0, - "link_to": "Recruitment Analytics", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Analytics", - "link_count": 0, - "link_to": "Employee Analytics", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Leave Balance", - "link_count": 0, - "link_to": "Employee Leave Balance", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Leave Balance Summary", - "link_count": 0, - "link_to": "Employee Leave Balance Summary", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee Advance", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Advance Summary", - "link_count": 0, - "link_to": "Employee Advance Summary", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Other Reports", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Information", - "link_count": 0, - "link_to": "Employee Information", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Birthday", - "link_count": 0, - "link_to": "Employee Birthday", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employees Working on a Holiday", - "link_count": 0, - "link_to": "Employees working on a holiday", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Daily Work Summary", - "hidden": 0, - "is_query_report": 1, - "label": "Daily Work Summary Replies", - "link_count": 0, - "link_to": "Daily Work Summary Replies", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Lifecycle", - "link_count": 7, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Job Applicant", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Onboarding", - "link_count": 0, - "link_to": "Employee Onboarding", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Skill Map", - "link_count": 0, - "link_to": "Employee Skill Map", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Promotion", - "link_count": 0, - "link_to": "Employee Promotion", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Transfer", - "link_count": 0, - "link_to": "Employee Transfer", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Grievance Type", - "link_count": 0, - "link_to": "Grievance Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Grievance", - "link_count": 0, - "link_to": "Employee Grievance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Onboarding Template", - "link_count": 0, - "link_to": "Employee Onboarding Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Exit", - "link_count": 4, - "onboard": 0, - "type": "Card Break" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Separation Template", - "link_count": 0, - "link_to": "Employee Separation Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Separation", - "link_count": 0, - "link_to": "Employee Separation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Full and Final Statement", - "link_count": 0, - "link_to": "Full and Final Statement", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Exit Interview", - "link_count": 0, - "link_to": "Exit Interview", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee", - "link_count": 8, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee", - "link_count": 0, - "link_to": "Employee", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employment Type", - "link_count": 0, - "link_to": "Employment Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Branch", - "link_count": 0, - "link_to": "Branch", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Department", - "link_count": 0, - "link_to": "Department", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Designation", - "link_count": 0, - "link_to": "Designation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Grade", - "link_count": 0, - "link_to": "Employee Grade", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Group", - "link_count": 0, - "link_to": "Employee Group", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Health Insurance", - "link_count": 0, - "link_to": "Employee Health Insurance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Key Reports", - "link_count": 7, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Attendance", - "hidden": 0, - "is_query_report": 1, - "label": "Monthly Attendance Sheet", - "link_count": 0, - "link_to": "Monthly Attendance Sheet", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Staffing Plan", - "hidden": 0, - "is_query_report": 1, - "label": "Recruitment Analytics", - "link_count": 0, - "link_to": "Recruitment Analytics", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Analytics", - "link_count": 0, - "link_to": "Employee Analytics", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Leave Balance", - "link_count": 0, - "link_to": "Employee Leave Balance", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Leave Balance Summary", - "link_count": 0, - "link_to": "Employee Leave Balance Summary", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee Advance", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Advance Summary", - "link_count": 0, - "link_to": "Employee Advance Summary", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Exits", - "link_count": 0, - "link_to": "Employee Exits", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Recruitment", - "link_count": 11, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Opening", - "link_count": 0, - "link_to": "Job Opening", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Employee Referral", - "link_count": 0, - "link_to": "Employee Referral", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Applicant", - "link_count": 0, - "link_to": "Job Applicant", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Job Offer", - "link_count": 0, - "link_to": "Job Offer", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Staffing Plan", - "link_count": 0, - "link_to": "Staffing Plan", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Appointment Letter", - "link_count": 0, - "link_to": "Appointment Letter", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Appointment Letter Template", - "link_count": 0, - "link_to": "Appointment Letter Template", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Interview Type", - "link_count": 0, - "link_to": "Interview Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Interview Round", - "link_count": 0, - "link_to": "Interview Round", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Interview", - "link_count": 0, - "link_to": "Interview", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Interview Feedback", - "link_count": 0, - "link_to": "Interview Feedback", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Fleet Management", - "link_count": 4, - "onboard": 0, - "type": "Card Break" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Driver", - "link_count": 0, - "link_to": "Driver", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Vehicle", - "link_count": 0, - "link_to": "Vehicle", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Vehicle Log", - "link_count": 0, - "link_to": "Vehicle Log", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Vehicle", - "hidden": 0, - "is_query_report": 1, - "label": "Vehicle Expenses", - "link_count": 0, - "link_to": "Vehicle Expenses", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Settings", - "link_count": 3, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "HR Settings", - "link_count": 0, - "link_to": "HR Settings", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Daily Work Summary Group", - "link_count": 0, - "link_to": "Daily Work Summary Group", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Team Updates", - "link_count": 0, - "link_to": "team-updates", - "link_type": "Page", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Expense Claims", - "link_count": 3, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Expense Claim", - "link_count": 0, - "link_to": "Expense Claim", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Advance", - "link_count": 0, - "link_to": "Employee Advance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Travel Request", - "link_count": 0, - "link_to": "Travel Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Attendance", - "link_count": 5, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Attendance Tool", - "link_count": 0, - "link_to": "Employee Attendance Tool", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Attendance", - "link_count": 0, - "link_to": "Attendance", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Attendance Request", - "link_count": 0, - "link_to": "Attendance Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Upload Attendance", - "link_count": 0, - "link_to": "Upload Attendance", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Checkin", - "link_count": 0, - "link_to": "Employee Checkin", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Leaves", - "link_count": 10, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Holiday List", - "link_count": 0, - "link_to": "Holiday List", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Type", - "link_count": 0, - "link_to": "Leave Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Period", - "link_count": 0, - "link_to": "Leave Period", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Leave Type", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Policy", - "link_count": 0, - "link_to": "Leave Policy", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Leave Policy", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Policy Assignment", - "link_count": 0, - "link_to": "Leave Policy Assignment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Application", - "link_count": 0, - "link_to": "Leave Application", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Allocation", - "link_count": 0, - "link_to": "Leave Allocation", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Encashment", - "link_count": 0, - "link_to": "Leave Encashment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Leave Block List", - "link_count": 0, - "link_to": "Leave Block List", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Compensatory Leave Request", - "link_count": 0, - "link_to": "Compensatory Leave Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Shift Management", - "link_count": 3, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Type", - "link_count": 0, - "link_to": "Shift Type", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Request", - "link_count": 0, - "link_to": "Shift Request", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Shift Assignment", - "link_count": 0, - "link_to": "Shift Assignment", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - } - ], - "modified": "2022-01-13 17:38:45.489128", - "modified_by": "Administrator", - "module": "HR", - "name": "HR", - "owner": "Administrator", - "parent_page": "", - "public": 1, - "restrict_to_domain": "", - "roles": [], - "sequence_id": 14.0, - "shortcuts": [ - { - "color": "Green", - "format": "{} Active", - "label": "Employee", - "link_to": "Employee", - "stats_filter": "{\"status\":\"Active\"}", - "type": "DocType" - }, - { - "color": "Yellow", - "format": "{} Open", - "label": "Leave Application", - "link_to": "Leave Application", - "stats_filter": "{\"status\":\"Open\"}", - "type": "DocType" - }, - { - "label": "Attendance", - "link_to": "Attendance", - "stats_filter": "", - "type": "DocType" - }, - { - "label": "Job Applicant", - "link_to": "Job Applicant", - "type": "DocType" - }, - { - "label": "Monthly Attendance Sheet", - "link_to": "Monthly Attendance Sheet", - "type": "Report" - }, - { - "format": "{} Open", - "label": "Dashboard", - "link_to": "Human Resource", - "stats_filter": "{\n \"status\": \"Open\"\n}", - "type": "Dashboard" - } - ], - "title": "HR" -} \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan/loan.js b/erpnext/loan_management/doctype/loan/loan.js index 940a1bbc00..38328e6967 100644 --- a/erpnext/loan_management/doctype/loan/loan.js +++ b/erpnext/loan_management/doctype/loan/loan.js @@ -93,6 +93,12 @@ frappe.ui.form.on('Loan', { frm.trigger("make_loan_refund"); },__('Create')); } + + if (frm.doc.status == "Loan Closure Requested" && frm.doc.is_term_loan && !frm.doc.is_secured_loan) { + frm.add_custom_button(__('Close Loan'), function() { + frm.trigger("close_unsecured_term_loan"); + },__('Status')); + } } frm.trigger("toggle_fields"); }, @@ -174,6 +180,18 @@ frappe.ui.form.on('Loan', { }) }, + close_unsecured_term_loan: function(frm) { + frappe.call({ + args: { + "loan": frm.doc.name + }, + method: "erpnext.loan_management.doctype.loan.loan.close_unsecured_term_loan", + callback: function () { + frm.refresh(); + } + }) + }, + request_loan_closure: function(frm) { frappe.confirm(__("Do you really want to close this loan"), function() { diff --git a/erpnext/loan_management/doctype/loan/loan.json b/erpnext/loan_management/doctype/loan/loan.json index ef78a640aa..47488f43ce 100644 --- a/erpnext/loan_management/doctype/loan/loan.json +++ b/erpnext/loan_management/doctype/loan/loan.json @@ -16,7 +16,6 @@ "company", "posting_date", "status", - "repay_from_salary", "section_break_8", "loan_type", "loan_amount", @@ -48,6 +47,10 @@ "total_payment", "total_principal_paid", "written_off_amount", + "refund_amount", + "debit_adjustment_amount", + "credit_adjustment_amount", + "is_npa", "column_break_19", "total_interest_payable", "total_amount_paid", @@ -124,13 +127,6 @@ "options": "Sanctioned\nPartially Disbursed\nDisbursed\nLoan Closure Requested\nClosed", "read_only": 1 }, - { - "default": "0", - "depends_on": "eval:doc.applicant_type==\"Employee\"", - "fieldname": "repay_from_salary", - "fieldtype": "Check", - "label": "Repay From Salary" - }, { "fieldname": "section_break_8", "fieldtype": "Section Break", @@ -379,12 +375,39 @@ "fieldtype": "Link", "label": "Cost Center", "options": "Cost Center" + }, + { + "fieldname": "refund_amount", + "fieldtype": "Currency", + "label": "Refund amount", + "no_copy": 1, + "options": "Company:company:default_currency", + "read_only": 1 + }, + { + "fieldname": "credit_adjustment_amount", + "fieldtype": "Currency", + "label": "Credit Adjustment Amount", + "options": "Company:company:default_currency" + }, + { + "fieldname": "debit_adjustment_amount", + "fieldtype": "Currency", + "label": "Debit Adjustment Amount", + "options": "Company:company:default_currency" + }, + { + "default": "0", + "description": "Mark Loan as a Nonperforming asset", + "fieldname": "is_npa", + "fieldtype": "Check", + "label": "Is NPA" } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-03-10 11:50:31.957360", + "modified": "2022-07-12 11:50:31.957360", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan", diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py index a0ef1b971c..d84eef6d8c 100644 --- a/erpnext/loan_management/doctype/loan/loan.py +++ b/erpnext/loan_management/doctype/loan/loan.py @@ -20,15 +20,12 @@ from erpnext.loan_management.doctype.loan_security_unpledge.loan_security_unpled class Loan(AccountsController): def validate(self): - if self.applicant_type == "Employee" and self.repay_from_salary: - validate_employee_currency_with_company_currency(self.applicant, self.company) self.set_loan_amount() self.validate_loan_amount() self.set_missing_fields() self.validate_cost_center() self.validate_accounts() self.check_sanctioned_amount_limit() - self.validate_repay_from_salary() if self.is_term_loan: validate_repayment_method( @@ -60,18 +57,20 @@ class Loan(AccountsController): ) def validate_cost_center(self): - if not self.cost_center and self.rate_of_interest != 0: + if not self.cost_center and self.rate_of_interest != 0.0: self.cost_center = frappe.db.get_value("Company", self.company, "cost_center") - if not self.cost_center: - frappe.throw(_("Cost center is mandatory for loans having rate of interest greater than 0")) + if not self.cost_center: + frappe.throw(_("Cost center is mandatory for loans having rate of interest greater than 0")) def on_submit(self): self.link_loan_security_pledge() + # Interest accrual for backdated term loans + self.accrue_loan_interest() def on_cancel(self): self.unlink_loan_security_pledge() - self.ignore_linked_doctypes = ["GL Entry"] + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] def set_missing_fields(self): if not self.company: @@ -104,10 +103,6 @@ class Loan(AccountsController): ) ) - def validate_repay_from_salary(self): - if not self.is_term_loan and self.repay_from_salary: - frappe.throw(_("Repay From Salary can be selected only for term loans")) - def make_repayment_schedule(self): if not self.repayment_start_date: frappe.throw(_("Repayment Start Date is mandatory for term loans")) @@ -187,6 +182,16 @@ class Loan(AccountsController): self.db_set("maximum_loan_amount", maximum_loan_value) + def accrue_loan_interest(self): + from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( + process_loan_interest_accrual_for_term_loans, + ) + + if getdate(self.repayment_start_date) < getdate() and self.is_term_loan: + process_loan_interest_accrual_for_term_loans( + posting_date=getdate(), loan_type=self.loan_type, loan=self.name + ) + def unlink_loan_security_pledge(self): pledges = frappe.get_all("Loan Security Pledge", fields=["name"], filters={"loan": self.name}) pledge_list = [d.name for d in pledges] @@ -330,6 +335,22 @@ def get_loan_application(loan_application): return loan.as_dict() +@frappe.whitelist() +def close_unsecured_term_loan(loan): + loan_details = frappe.db.get_value( + "Loan", {"name": loan}, ["status", "is_term_loan", "is_secured_loan"], as_dict=1 + ) + + if ( + loan_details.status == "Loan Closure Requested" + and loan_details.is_term_loan + and not loan_details.is_secured_loan + ): + frappe.db.set_value("Loan", loan, "status", "Closed") + else: + frappe.throw(_("Cannot close this loan until full repayment")) + + def close_loan(loan, total_amount_paid): frappe.db.set_value("Loan", loan, "total_amount_paid", total_amount_paid) frappe.db.set_value("Loan", loan, "status", "Closed") @@ -463,25 +484,6 @@ def create_loan_security_unpledge(unpledge_map, loan, company, applicant_type, a return unpledge_request -def validate_employee_currency_with_company_currency(applicant, company): - from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import ( - get_employee_currency, - ) - - if not applicant: - frappe.throw(_("Please select Applicant")) - if not company: - frappe.throw(_("Please select Company")) - employee_currency = get_employee_currency(applicant) - company_currency = erpnext.get_company_currency(company) - if employee_currency != company_currency: - frappe.throw( - _( - "Loan cannot be repayed from salary for Employee {0} because salary is processed in currency {1}" - ).format(applicant, employee_currency) - ) - - @frappe.whitelist() def get_shortfall_applicants(): loans = frappe.get_all("Loan Security Shortfall", {"status": "Pending"}, pluck="loan") diff --git a/erpnext/loan_management/doctype/loan/test_loan.py b/erpnext/loan_management/doctype/loan/test_loan.py index e2b0870c32..da05c8e90c 100644 --- a/erpnext/loan_management/doctype/loan/test_loan.py +++ b/erpnext/loan_management/doctype/loan/test_loan.py @@ -29,11 +29,8 @@ from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_ from erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall import ( create_process_loan_security_shortfall, ) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - make_employee, - make_salary_structure, -) from erpnext.selling.doctype.customer.test_customer import get_customer_dict +from erpnext.setup.doctype.employee.test_employee import make_employee class TestLoan(unittest.TestCase): @@ -93,13 +90,6 @@ class TestLoan(unittest.TestCase): ) self.applicant1 = make_employee("robert_loan@loan.com") - make_salary_structure( - "Test Salary Structure Loan", - "Monthly", - employee=self.applicant1, - currency="INR", - company="_Test Company", - ) if not frappe.db.exists("Customer", "_Test Loan Customer"): frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert(ignore_permissions=True) diff --git a/erpnext/loan_management/doctype/loan_application/test_loan_application.py b/erpnext/loan_management/doctype/loan_application/test_loan_application.py index 2a4bb882a8..13bb4afba3 100644 --- a/erpnext/loan_management/doctype/loan_application/test_loan_application.py +++ b/erpnext/loan_management/doctype/loan_application/test_loan_application.py @@ -6,10 +6,7 @@ import unittest import frappe from erpnext.loan_management.doctype.loan.test_loan import create_loan_accounts, create_loan_type -from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - make_employee, - make_salary_structure, -) +from erpnext.setup.doctype.employee.test_employee import make_employee class TestLoanApplication(unittest.TestCase): @@ -32,9 +29,6 @@ class TestLoanApplication(unittest.TestCase): 18, ) self.applicant = make_employee("kate_loan@loan.com", "_Test Company") - make_salary_structure( - "Test Salary Structure Loan", "Monthly", employee=self.applicant, currency="INR" - ) self.create_loan_application() def create_loan_application(self): diff --git a/erpnext/accounts/doctype/salary_component_account/__init__.py b/erpnext/loan_management/doctype/loan_balance_adjustment/__init__.py similarity index 100% rename from erpnext/accounts/doctype/salary_component_account/__init__.py rename to erpnext/loan_management/doctype/loan_balance_adjustment/__init__.py diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js new file mode 100644 index 0000000000..8aec63ad75 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.js @@ -0,0 +1,8 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Loan Balance Adjustment', { + // refresh: function(frm) { + + // } +}); diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json new file mode 100644 index 0000000000..80c3389ba1 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.json @@ -0,0 +1,189 @@ +{ + "actions": [], + "autoname": "LM-ADJ-.#####", + "creation": "2022-06-28 14:48:47.736269", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "loan", + "applicant_type", + "applicant", + "column_break_3", + "company", + "posting_date", + "accounting_dimensions_section", + "cost_center", + "section_break_9", + "adjustment_account", + "column_break_11", + "adjustment_type", + "amount", + "reference_number", + "remarks", + "amended_from" + ], + "fields": [ + { + "fieldname": "loan", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Loan", + "options": "Loan", + "reqd": 1 + }, + { + "fetch_from": "loan.applicant_type", + "fieldname": "applicant_type", + "fieldtype": "Select", + "label": "Applicant Type", + "options": "Employee\nMember\nCustomer", + "read_only": 1 + }, + { + "fetch_from": "loan.applicant", + "fieldname": "applicant", + "fieldtype": "Dynamic Link", + "label": "Applicant ", + "options": "applicant_type", + "read_only": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fetch_from": "loan.company", + "fieldname": "company", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Company", + "options": "Company", + "read_only": 1, + "reqd": 1 + }, + { + "default": "Today", + "fieldname": "posting_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Posting Date", + "reqd": 1 + }, + { + "collapsible": 1, + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center" + }, + { + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "label": "Adjustment Details" + }, + { + "fieldname": "column_break_11", + "fieldtype": "Column Break" + }, + { + "fieldname": "reference_number", + "fieldtype": "Data", + "label": "Reference Number" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Loan Balance Adjustment", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Loan Balance Adjustment", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "adjustment_account", + "fieldtype": "Link", + "label": "Adjustment Account", + "options": "Account", + "reqd": 1 + }, + { + "fieldname": "amount", + "fieldtype": "Currency", + "label": "Amount", + "options": "Company:company:default_currency", + "reqd": 1 + }, + { + "fieldname": "adjustment_type", + "fieldtype": "Select", + "label": "Adjustment Type", + "options": "Credit Adjustment\nDebit Adjustment", + "reqd": 1 + }, + { + "fieldname": "remarks", + "fieldtype": "Data", + "label": "Remarks" + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2022-07-08 16:48:54.480066", + "modified_by": "Administrator", + "module": "Loan Management", + "name": "Loan Balance Adjustment", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Loan Manager", + "share": 1, + "submit": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "track_changes": 1 +} \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py new file mode 100644 index 0000000000..0a576d6969 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_balance_adjustment/loan_balance_adjustment.py @@ -0,0 +1,143 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.utils import add_days, nowdate + +import erpnext +from erpnext.accounts.general_ledger import make_gl_entries +from erpnext.controllers.accounts_controller import AccountsController +from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( + process_loan_interest_accrual_for_demand_loans, +) + + +class LoanBalanceAdjustment(AccountsController): + """ + Add credit/debit adjustments to loan ledger. + """ + + def validate(self): + if self.amount == 0: + frappe.throw(_("Amount cannot be zero")) + if self.amount < 0: + frappe.throw(_("Amount cannot be negative")) + self.set_missing_values() + + def on_submit(self): + self.set_status_and_amounts() + self.make_gl_entries() + + def on_cancel(self): + self.set_status_and_amounts(cancel=1) + self.make_gl_entries(cancel=1) + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] + + def set_missing_values(self): + if not self.posting_date: + self.posting_date = nowdate() + + if not self.cost_center: + self.cost_center = erpnext.get_default_cost_center(self.company) + + def set_status_and_amounts(self, cancel=0): + loan_details = frappe.db.get_value( + "Loan", + self.loan, + [ + "loan_amount", + "credit_adjustment_amount", + "debit_adjustment_amount", + "total_payment", + "total_principal_paid", + "total_interest_payable", + "status", + "is_term_loan", + "is_secured_loan", + ], + as_dict=1, + ) + + if cancel: + adjustment_amount = self.get_values_on_cancel(loan_details) + else: + adjustment_amount = self.get_values_on_submit(loan_details) + + if self.adjustment_type == "Credit Adjustment": + adj_field = "credit_adjustment_amount" + elif self.adjustment_type == "Debit Adjustment": + adj_field = "debit_adjustment_amount" + + frappe.db.set_value("Loan", self.loan, {adj_field: adjustment_amount}) + + def get_values_on_cancel(self, loan_details): + if self.adjustment_type == "Credit Adjustment": + adjustment_amount = loan_details.credit_adjustment_amount - self.amount + elif self.adjustment_type == "Debit Adjustment": + adjustment_amount = loan_details.debit_adjustment_amount - self.amount + + return adjustment_amount + + def get_values_on_submit(self, loan_details): + if self.adjustment_type == "Credit Adjustment": + adjustment_amount = loan_details.credit_adjustment_amount + self.amount + elif self.adjustment_type == "Debit Adjustment": + adjustment_amount = loan_details.debit_adjustment_amount + self.amount + + if loan_details.status in ("Disbursed", "Partially Disbursed") and not loan_details.is_term_loan: + process_loan_interest_accrual_for_demand_loans( + posting_date=add_days(self.posting_date, -1), + loan=self.loan, + accrual_type=self.adjustment_type, + ) + + return adjustment_amount + + def make_gl_entries(self, cancel=0, adv_adj=0): + gle_map = [] + loan_account = frappe.db.get_value("Loan", self.loan, "loan_account") + remarks = "{} against loan {}".format(self.adjustment_type.capitalize(), self.loan) + if self.reference_number: + remarks += "with reference no. {}".format(self.reference_number) + + loan_entry = { + "account": loan_account, + "against": self.adjustment_account, + "against_voucher_type": "Loan", + "against_voucher": self.loan, + "remarks": _(remarks), + "cost_center": self.cost_center, + "party_type": self.applicant_type, + "party": self.applicant, + "posting_date": self.posting_date, + } + company_entry = { + "account": self.adjustment_account, + "against": loan_account, + "against_voucher_type": "Loan", + "against_voucher": self.loan, + "remarks": _(remarks), + "cost_center": self.cost_center, + "posting_date": self.posting_date, + } + if self.adjustment_type == "Credit Adjustment": + loan_entry["credit"] = self.amount + loan_entry["credit_in_account_currency"] = self.amount + + company_entry["debit"] = self.amount + company_entry["debit_in_account_currency"] = self.amount + + elif self.adjustment_type == "Debit Adjustment": + loan_entry["debit"] = self.amount + loan_entry["debit_in_account_currency"] = self.amount + + company_entry["credit"] = self.amount + company_entry["credit_in_account_currency"] = self.amount + + gle_map.append(self.get_gl_dict(loan_entry)) + + gle_map.append(self.get_gl_dict(company_entry)) + + if gle_map: + make_gl_entries(gle_map, cancel=cancel, adv_adj=adv_adj, merge_entries=False) diff --git a/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py b/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py new file mode 100644 index 0000000000..7658d7b215 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_balance_adjustment/test_loan_balance_adjustment.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestLoanBalanceAdjustment(FrappeTestCase): + pass diff --git a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py index 10174e531a..0c2042ba50 100644 --- a/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py +++ b/erpnext/loan_management/doctype/loan_disbursement/loan_disbursement.py @@ -29,7 +29,7 @@ class LoanDisbursement(AccountsController): def on_cancel(self): self.set_status_and_amounts(cancel=1) self.make_gl_entries(cancel=1) - self.ignore_linked_doctypes = ["GL Entry"] + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] def set_missing_values(self): if not self.disbursement_date: diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json index 30e2328442..08dc98c830 100644 --- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json +++ b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.json @@ -35,12 +35,15 @@ { "fieldname": "loan", "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, "label": "Loan", "options": "Loan" }, { "fieldname": "posting_date", "fieldtype": "Date", + "in_list_view": 1, "label": "Posting Date" }, { @@ -75,6 +78,8 @@ "fetch_from": "loan.applicant", "fieldname": "applicant", "fieldtype": "Dynamic Link", + "in_list_view": 1, + "in_standard_filter": 1, "label": "Applicant", "options": "applicant_type" }, @@ -158,8 +163,11 @@ { "fieldname": "accrual_type", "fieldtype": "Select", + "in_filter": 1, + "in_list_view": 1, + "in_standard_filter": 1, "label": "Accrual Type", - "options": "Regular\nRepayment\nDisbursement" + "options": "Regular\nRepayment\nDisbursement\nCredit Adjustment\nDebit Adjustment\nRefund" }, { "fieldname": "penalty_amount", @@ -185,10 +193,11 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2021-04-19 18:26:38.871889", + "modified": "2022-06-30 11:51:31.911794", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan Interest Accrual", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -225,5 +234,6 @@ "quick_entry": 1, "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py index 3a4c6513e4..0aeb448918 100644 --- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py +++ b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py @@ -32,7 +32,7 @@ class LoanInterestAccrual(AccountsController): self.update_is_accrued() self.make_gl_entries(cancel=1) - self.ignore_linked_doctypes = ["GL Entry"] + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] def update_is_accrued(self): frappe.db.set_value("Repayment Schedule", self.repayment_schedule_name, "is_accrued", 0) diff --git a/erpnext/accounts/print_format/gst_e_invoice/__init__.py b/erpnext/loan_management/doctype/loan_refund/__init__.py similarity index 100% rename from erpnext/accounts/print_format/gst_e_invoice/__init__.py rename to erpnext/loan_management/doctype/loan_refund/__init__.py diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.js b/erpnext/loan_management/doctype/loan_refund/loan_refund.js new file mode 100644 index 0000000000..f108bf7a28 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_refund/loan_refund.js @@ -0,0 +1,8 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Loan Refund', { + // refresh: function(frm) { + + // } +}); diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.json b/erpnext/loan_management/doctype/loan_refund/loan_refund.json new file mode 100644 index 0000000000..f78e55e9f9 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_refund/loan_refund.json @@ -0,0 +1,176 @@ +{ + "actions": [], + "autoname": "LM-RF-.#####", + "creation": "2022-06-24 15:51:03.165498", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "loan", + "applicant_type", + "applicant", + "column_break_3", + "company", + "posting_date", + "accounting_dimensions_section", + "cost_center", + "section_break_9", + "refund_account", + "column_break_11", + "refund_amount", + "reference_number", + "amended_from" + ], + "fields": [ + { + "fieldname": "loan", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Loan", + "options": "Loan", + "reqd": 1 + }, + { + "fetch_from": "loan.applicant_type", + "fieldname": "applicant_type", + "fieldtype": "Select", + "label": "Applicant Type", + "options": "Employee\nMember\nCustomer", + "read_only": 1 + }, + { + "fetch_from": "loan.applicant", + "fieldname": "applicant", + "fieldtype": "Dynamic Link", + "label": "Applicant ", + "options": "applicant_type", + "read_only": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fetch_from": "loan.company", + "fieldname": "company", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Company", + "options": "Company", + "read_only": 1, + "reqd": 1 + }, + { + "default": "Today", + "fieldname": "posting_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Posting Date", + "reqd": 1 + }, + { + "collapsible": 1, + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center" + }, + { + "fieldname": "section_break_9", + "fieldtype": "Section Break", + "label": "Refund Details" + }, + { + "fieldname": "refund_account", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Refund Account", + "options": "Account", + "reqd": 1 + }, + { + "fieldname": "column_break_11", + "fieldtype": "Column Break" + }, + { + "fieldname": "refund_amount", + "fieldtype": "Currency", + "label": "Refund Amount", + "options": "Company:company:default_currency", + "reqd": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Loan Refund", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "label": "Amended From", + "no_copy": 1, + "options": "Loan Refund", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "reference_number", + "fieldtype": "Data", + "label": "Reference Number" + } + ], + "index_web_pages_for_search": 1, + "is_submittable": 1, + "links": [], + "modified": "2022-06-24 16:13:48.793486", + "modified_by": "Administrator", + "module": "Loan Management", + "name": "Loan Refund", + "naming_rule": "Expression (old style)", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Loan Manager", + "share": 1, + "submit": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "track_changes": 1 +} \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan_refund/loan_refund.py b/erpnext/loan_management/doctype/loan_refund/loan_refund.py new file mode 100644 index 0000000000..d7ab54ca97 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_refund/loan_refund.py @@ -0,0 +1,97 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.utils import getdate + +import erpnext +from erpnext.accounts.general_ledger import make_gl_entries +from erpnext.controllers.accounts_controller import AccountsController +from erpnext.loan_management.doctype.loan_repayment.loan_repayment import ( + get_pending_principal_amount, +) + + +class LoanRefund(AccountsController): + """ + Add refund if total repayment is more than that is owed. + """ + + def validate(self): + self.set_missing_values() + self.validate_refund_amount() + + def set_missing_values(self): + if not self.cost_center: + self.cost_center = erpnext.get_default_cost_center(self.company) + + def validate_refund_amount(self): + loan = frappe.get_doc("Loan", self.loan) + pending_amount = get_pending_principal_amount(loan) + if pending_amount >= 0: + frappe.throw(_("No excess amount to refund.")) + else: + excess_amount = pending_amount * -1 + + if self.refund_amount > excess_amount: + frappe.throw(_("Refund amount cannot be greater than excess amount {0}").format(excess_amount)) + + def on_submit(self): + self.update_outstanding_amount() + self.make_gl_entries() + + def on_cancel(self): + self.update_outstanding_amount(cancel=1) + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] + self.make_gl_entries(cancel=1) + + def update_outstanding_amount(self, cancel=0): + refund_amount = frappe.db.get_value("Loan", self.loan, "refund_amount") + + if cancel: + refund_amount -= self.refund_amount + else: + refund_amount += self.refund_amount + + frappe.db.set_value("Loan", self.loan, "refund_amount", refund_amount) + + def make_gl_entries(self, cancel=0): + gl_entries = [] + loan_details = frappe.get_doc("Loan", self.loan) + + gl_entries.append( + self.get_gl_dict( + { + "account": self.refund_account, + "against": loan_details.loan_account, + "credit": self.refund_amount, + "credit_in_account_currency": self.refund_amount, + "against_voucher_type": "Loan", + "against_voucher": self.loan, + "remarks": _("Against Loan:") + self.loan, + "cost_center": self.cost_center, + "posting_date": getdate(self.posting_date), + } + ) + ) + + gl_entries.append( + self.get_gl_dict( + { + "account": loan_details.loan_account, + "party_type": loan_details.applicant_type, + "party": loan_details.applicant, + "against": self.refund_account, + "debit": self.refund_amount, + "debit_in_account_currency": self.refund_amount, + "against_voucher_type": "Loan", + "against_voucher": self.loan, + "remarks": _("Against Loan:") + self.loan, + "cost_center": self.cost_center, + "posting_date": getdate(self.posting_date), + } + ) + ) + + make_gl_entries(gl_entries, cancel=cancel, merge_entries=False) diff --git a/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py b/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py new file mode 100644 index 0000000000..de2f9e1372 --- /dev/null +++ b/erpnext/loan_management/doctype/loan_refund/test_loan_refund.py @@ -0,0 +1,9 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +# import frappe +from frappe.tests.utils import FrappeTestCase + + +class TestLoanRefund(FrappeTestCase): + pass diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json index 480e010b49..76dc8b462e 100644 --- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json +++ b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.json @@ -15,9 +15,7 @@ "posting_date", "clearance_date", "rate_of_interest", - "payroll_payable_account", "is_term_loan", - "repay_from_salary", "payment_details_section", "due_date", "pending_principal_amount", @@ -252,21 +250,6 @@ "options": "Company:company:default_currency", "read_only": 1 }, - { - "depends_on": "eval:doc.repay_from_salary", - "fieldname": "payroll_payable_account", - "fieldtype": "Link", - "label": "Payroll Payable Account", - "mandatory_depends_on": "eval:doc.repay_from_salary", - "options": "Account" - }, - { - "default": "0", - "fetch_from": "against_loan.repay_from_salary", - "fieldname": "repay_from_salary", - "fieldtype": "Check", - "label": "Repay From Salary" - }, { "fieldname": "clearance_date", "fieldtype": "Date", @@ -311,7 +294,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-02-18 19:10:07.742298", + "modified": "2022-06-21 10:10:07.742298", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan Repayment", diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py index 2535180092..07a1d0d850 100644 --- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py +++ b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py @@ -41,7 +41,7 @@ class LoanRepayment(AccountsController): self.check_future_accruals() self.update_repayment_schedule(cancel=1) self.mark_as_unpaid() - self.ignore_linked_doctypes = ["GL Entry"] + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] self.make_gl_entries(cancel=1) def set_missing_values(self, amounts): @@ -264,6 +264,7 @@ class LoanRepayment(AccountsController): regenerate_repayment_schedule(self.against_loan, cancel) def allocate_amounts(self, repayment_details): + precision = cint(frappe.db.get_default("currency_precision")) or 2 self.set("repayment_details", []) self.principal_amount_paid = 0 self.total_penalty_paid = 0 @@ -278,9 +279,9 @@ class LoanRepayment(AccountsController): if interest_paid > 0: if self.penalty_amount and interest_paid > self.penalty_amount: - self.total_penalty_paid = self.penalty_amount + self.total_penalty_paid = flt(self.penalty_amount, precision) elif self.penalty_amount: - self.total_penalty_paid = interest_paid + self.total_penalty_paid = flt(interest_paid, precision) interest_paid -= self.total_penalty_paid @@ -385,17 +386,21 @@ class LoanRepayment(AccountsController): def make_gl_entries(self, cancel=0, adv_adj=0): gle_map = [] - if self.shortfall_amount and self.amount_paid > self.shortfall_amount: - remarks = _("Shortfall Repayment of {0}.
Repayment against Loan: {1}").format( + remarks = "Shortfall repayment of {0}.
Repayment against loan {1}".format( self.shortfall_amount, self.against_loan ) elif self.shortfall_amount: - remarks = _("Shortfall Repayment of {0}").format(self.shortfall_amount) + remarks = "Shortfall repayment of {0} against loan {1}".format( + self.shortfall_amount, self.against_loan + ) else: - remarks = _("Repayment against Loan:") + " " + self.against_loan + remarks = "Repayment against loan " + self.against_loan - if self.repay_from_salary: + if self.reference_number: + remarks += "with reference no. {}".format(self.reference_number) + + if hasattr(self, "repay_from_salary") and self.repay_from_salary: payment_account = self.payroll_payable_account else: payment_account = self.payment_account @@ -444,11 +449,9 @@ class LoanRepayment(AccountsController): "debit_in_account_currency": self.amount_paid, "against_voucher_type": "Loan", "against_voucher": self.against_loan, - "remarks": remarks, + "remarks": _(remarks), "cost_center": self.cost_center, "posting_date": getdate(self.posting_date), - "party_type": self.applicant_type if self.repay_from_salary else "", - "party": self.applicant if self.repay_from_salary else "", } ) ) @@ -464,7 +467,7 @@ class LoanRepayment(AccountsController): "credit_in_account_currency": self.amount_paid, "against_voucher_type": "Loan", "against_voucher": self.against_loan, - "remarks": remarks, + "remarks": _(remarks), "cost_center": self.cost_center, "posting_date": getdate(self.posting_date), } @@ -624,16 +627,22 @@ def get_pending_principal_amount(loan): if loan.status in ("Disbursed", "Closed") or loan.disbursed_amount >= loan.loan_amount: pending_principal_amount = ( flt(loan.total_payment) + + flt(loan.debit_adjustment_amount) + - flt(loan.credit_adjustment_amount) - flt(loan.total_principal_paid) - flt(loan.total_interest_payable) - flt(loan.written_off_amount) + + flt(loan.refund_amount) ) else: pending_principal_amount = ( flt(loan.disbursed_amount) + + flt(loan.debit_adjustment_amount) + - flt(loan.credit_adjustment_amount) - flt(loan.total_principal_paid) - flt(loan.total_interest_payable) - flt(loan.written_off_amount) + + flt(loan.refund_amount) ) return pending_principal_amount @@ -675,7 +684,9 @@ def get_amounts(amounts, against_loan, posting_date): if ( no_of_late_days > 0 - and (not against_loan_doc.repay_from_salary) + and ( + not (hasattr(against_loan_doc, "repay_from_salary") and against_loan_doc.repay_from_salary) + ) and entry.accrual_type == "Regular" ): penalty_amount += ( diff --git a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json b/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json index 99b5c72b2d..d4007cb62d 100644 --- a/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json +++ b/erpnext/loan_management/doctype/loan_security_shortfall/loan_security_shortfall.json @@ -7,6 +7,8 @@ "engine": "InnoDB", "field_order": [ "loan", + "applicant_type", + "applicant", "status", "column_break_3", "shortfall_time", @@ -23,6 +25,8 @@ { "fieldname": "loan", "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, "label": "Loan ", "options": "Loan", "read_only": 1 @@ -91,17 +95,35 @@ { "fieldname": "shortfall_percentage", "fieldtype": "Percent", + "in_list_view": 1, "label": "Shortfall Percentage", "read_only": 1 + }, + { + "fetch_from": "loan.applicant_type", + "fieldname": "applicant_type", + "fieldtype": "Select", + "label": "Applicant Type", + "options": "Employee\nMember\nCustomer" + }, + { + "fetch_from": "loan.applicant", + "fieldname": "applicant", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Applicant", + "options": "applicant_type" } ], "in_create": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2021-04-01 08:13:43.263772", + "modified": "2022-06-30 11:57:09.378089", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan Security Shortfall", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -132,5 +154,6 @@ "quick_entry": 1, "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py b/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py index e19fd15fc8..25aecf673b 100644 --- a/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py +++ b/erpnext/loan_management/doctype/loan_write_off/loan_write_off.py @@ -42,7 +42,7 @@ class LoanWriteOff(AccountsController): def on_cancel(self): self.update_outstanding_amount(cancel=1) - self.ignore_linked_doctypes = ["GL Entry"] + self.ignore_linked_doctypes = ["GL Entry", "Payment Ledger Entry"] self.make_gl_entries(cancel=1) def update_outstanding_amount(self, cancel=0): diff --git a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json index 828df2e35f..7fc4736216 100644 --- a/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json +++ b/erpnext/loan_management/doctype/process_loan_interest_accrual/process_loan_interest_accrual.json @@ -54,17 +54,18 @@ "fieldtype": "Select", "hidden": 1, "label": "Accrual Type", - "options": "Regular\nRepayment\nDisbursement", + "options": "Regular\nRepayment\nDisbursement\nCredit Adjustment\nDebit Adjustment\nRefund", "read_only": 1 } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2020-11-06 13:28:51.478909", + "modified": "2022-06-29 11:19:33.203088", "modified_by": "Administrator", "module": "Loan Management", "name": "Process Loan Interest Accrual", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -98,5 +99,6 @@ ], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/loan_management/doctype/salary_slip_loan/__init__.py b/erpnext/loan_management/doctype/salary_slip_loan/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.json b/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.json deleted file mode 100644 index b7b20d945d..0000000000 --- a/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "actions": [], - "creation": "2019-08-29 18:11:36.829526", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "loan", - "loan_type", - "loan_account", - "interest_income_account", - "column_break_4", - "principal_amount", - "interest_amount", - "total_payment", - "loan_repayment_entry" - ], - "fields": [ - { - "fieldname": "loan", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Loan", - "options": "Loan", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "loan_account", - "fieldtype": "Link", - "label": "Loan Account", - "options": "Account", - "read_only": 1 - }, - { - "fieldname": "interest_income_account", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Interest Income Account", - "options": "Account", - "read_only": 1 - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "fieldname": "principal_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Principal Amount", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "interest_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Interest Amount", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "total_payment", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Total Payment", - "options": "Company:company:default_currency" - }, - { - "fieldname": "loan_repayment_entry", - "fieldtype": "Link", - "label": "Loan Repayment Entry", - "no_copy": 1, - "options": "Loan Repayment", - "read_only": 1 - }, - { - "fetch_from": "loan.loan_type", - "fieldname": "loan_type", - "fieldtype": "Link", - "label": "Loan Type", - "options": "Loan Type", - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2022-01-31 14:50:14.823213", - "modified_by": "Administrator", - "module": "Loan Management", - "name": "Salary Slip Loan", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.py b/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.py deleted file mode 100644 index 91267b80ba..0000000000 --- a/erpnext/loan_management/doctype/salary_slip_loan/salary_slip_loan.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class SalarySlipLoan(Document): - pass diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py index 04c080cc72..09d4429712 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py @@ -5,7 +5,7 @@ import frappe from frappe import _, throw from frappe.utils import add_days, cint, cstr, date_diff, formatdate, getdate -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee +from erpnext.setup.doctype.employee.employee import get_holiday_list_for_employee from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.utils import get_valid_serial_nos from erpnext.utilities.transaction_base import TransactionBase, delete_events diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 8a7634e24e..ecad41fe7b 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -81,7 +81,7 @@ frappe.ui.form.on("BOM", { } ) - if (!frm.doc.__islocal && frm.doc.docstatus<2) { + if (!frm.is_new() && frm.doc.docstatus<2) { frm.add_custom_button(__("Update Cost"), function() { frm.events.update_cost(frm, true); }); @@ -93,6 +93,13 @@ frappe.ui.form.on("BOM", { }); } + if (!frm.is_new() && !frm.doc.docstatus == 0) { + frm.add_custom_button(__("New Version"), function() { + let new_bom = frappe.model.copy_doc(frm.doc); + frappe.set_route("Form", "BOM", new_bom.name); + }); + } + if(frm.doc.docstatus==1) { frm.add_custom_button(__("Work Order"), function() { frm.trigger("make_work_order"); @@ -499,15 +506,11 @@ cur_frm.cscript.qty = function(doc) { cur_frm.cscript.rate = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; - var scrap_items = false; - - if(cdt == 'BOM Scrap Item') { - scrap_items = true; - } + const is_scrap_item = cdt == "BOM Scrap Item"; if (d.bom_no) { frappe.msgprint(__("You cannot change the rate if BOM is mentioned against any Item.")); - get_bom_material_detail(doc, cdt, cdn, scrap_items); + get_bom_material_detail(doc, cdt, cdn, is_scrap_item); } else { erpnext.bom.calculate_rm_cost(doc); erpnext.bom.calculate_scrap_materials_cost(doc); diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 220ce1dbd8..b29f6710e1 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -1,11 +1,11 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt import functools import re from collections import deque from operator import itemgetter -from typing import List +from typing import Dict, List import frappe from frappe import _ @@ -22,6 +22,10 @@ from erpnext.stock.get_item_details import get_conversion_factor, get_price_list form_grid_templates = {"items": "templates/form_grid/item_grid.html"} +class BOMRecursionError(frappe.ValidationError): + pass + + class BOMTree: """Full tree representation of a BOM""" @@ -185,6 +189,7 @@ class BOM(WebsiteGenerator): self.validate_transfer_against() self.set_routing_operations() self.validate_operations() + self.update_exploded_items(save=False) self.calculate_cost() self.update_stock_qty() self.update_cost(update_parent=False, from_child_bom=True, update_hour_rate=False, save=False) @@ -251,9 +256,8 @@ class BOM(WebsiteGenerator): for item in self.get("items"): self.validate_bom_currency(item) - item.bom_no = "" - if not item.do_not_explode: - item.bom_no = item.bom_no + if item.do_not_explode: + item.bom_no = "" ret = self.get_bom_material_detail( { @@ -383,40 +387,14 @@ class BOM(WebsiteGenerator): existing_bom_cost = self.total_cost - for d in self.get("items"): - if not d.item_code: - continue - - rate = self.get_rm_rate( - { - "company": self.company, - "item_code": d.item_code, - "bom_no": d.bom_no, - "qty": d.qty, - "uom": d.uom, - "stock_uom": d.stock_uom, - "conversion_factor": d.conversion_factor, - "sourced_by_supplier": d.sourced_by_supplier, - } - ) - - if rate: - d.rate = rate - d.amount = flt(d.rate) * flt(d.qty) - d.base_rate = flt(d.rate) * flt(self.conversion_rate) - d.base_amount = flt(d.amount) * flt(self.conversion_rate) - - if save: - d.db_update() - if self.docstatus == 1: self.flags.ignore_validate_update_after_submit = True - self.calculate_cost(update_hour_rate) + + self.calculate_cost(save_updates=save, update_hour_rate=update_hour_rate) + if save: self.db_update() - self.update_exploded_items(save=save) - # update parent BOMs if self.total_cost != existing_bom_cost and update_parent: parent_boms = frappe.db.sql_list( @@ -467,6 +445,7 @@ class BOM(WebsiteGenerator): and self.is_active ): frappe.db.set(self, "is_default", 1) + frappe.db.set_value("Item", self.item, "default_bom", self.name) else: frappe.db.set(self, "is_default", 0) item = frappe.get_doc("Item", self.item) @@ -555,35 +534,27 @@ class BOM(WebsiteGenerator): """Check whether recursion occurs in any bom""" def _throw_error(bom_name): - frappe.throw(_("BOM recursion: {0} cannot be parent or child of {0}").format(bom_name)) + frappe.throw( + _("BOM recursion: {1} cannot be parent or child of {0}").format(self.name, bom_name), + exc=BOMRecursionError, + ) bom_list = self.traverse_tree() - child_items = ( - frappe.get_all( - "BOM Item", - fields=["bom_no", "item_code"], - filters={"parent": ("in", bom_list), "parenttype": "BOM"}, - ) - or [] + child_items = frappe.get_all( + "BOM Item", + fields=["bom_no", "item_code"], + filters={"parent": ("in", bom_list), "parenttype": "BOM"}, ) - child_bom = {d.bom_no for d in child_items} - child_items_codes = {d.item_code for d in child_items} + for item in child_items: + if self.name == item.bom_no: + _throw_error(self.name) + if self.item == item.item_code and item.bom_no: + # Same item but with different BOM should not be allowed. + # Same item can appear recursively once as long as it doesn't have BOM. + _throw_error(item.bom_no) - if self.name in child_bom: - _throw_error(self.name) - - if self.item in child_items_codes: - _throw_error(self.item) - - bom_nos = ( - frappe.get_all( - "BOM Item", fields=["parent"], filters={"bom_no": self.name, "parenttype": "BOM"} - ) - or [] - ) - - if self.name in {d.parent for d in bom_nos}: + if self.name in {d.bom_no for d in self.items}: _throw_error(self.name) def traverse_tree(self, bom_list=None): @@ -613,11 +584,15 @@ class BOM(WebsiteGenerator): bom_list.reverse() return bom_list - def calculate_cost(self, update_hour_rate=False): + def calculate_cost(self, save_updates=False, update_hour_rate=False): """Calculate bom totals""" self.calculate_op_cost(update_hour_rate) - self.calculate_rm_cost() - self.calculate_sm_cost() + self.calculate_rm_cost(save=save_updates) + self.calculate_sm_cost(save=save_updates) + if save_updates: + # not via doc event, table is not regenerated and needs updation + self.calculate_exploded_cost() + self.total_cost = self.operating_cost + self.raw_material_cost - self.scrap_material_cost self.base_total_cost = ( self.base_operating_cost + self.base_raw_material_cost - self.base_scrap_material_cost @@ -659,12 +634,26 @@ class BOM(WebsiteGenerator): if update_hour_rate: row.db_update() - def calculate_rm_cost(self): + def calculate_rm_cost(self, save=False): """Fetch RM rate as per today's valuation rate and calculate totals""" total_rm_cost = 0 base_total_rm_cost = 0 for d in self.get("items"): + old_rate = d.rate + d.rate = self.get_rm_rate( + { + "company": self.company, + "item_code": d.item_code, + "bom_no": d.bom_no, + "qty": d.qty, + "uom": d.uom, + "stock_uom": d.stock_uom, + "conversion_factor": d.conversion_factor, + "sourced_by_supplier": d.sourced_by_supplier, + } + ) + d.base_rate = flt(d.rate) * flt(self.conversion_rate) d.amount = flt(d.rate, d.precision("rate")) * flt(d.qty, d.precision("qty")) d.base_amount = d.amount * flt(self.conversion_rate) @@ -674,11 +663,13 @@ class BOM(WebsiteGenerator): total_rm_cost += d.amount base_total_rm_cost += d.base_amount + if save and (old_rate != d.rate): + d.db_update() self.raw_material_cost = total_rm_cost self.base_raw_material_cost = base_total_rm_cost - def calculate_sm_cost(self): + def calculate_sm_cost(self, save=False): """Fetch RM rate as per today's valuation rate and calculate totals""" total_sm_cost = 0 base_total_sm_cost = 0 @@ -693,10 +684,45 @@ class BOM(WebsiteGenerator): ) total_sm_cost += d.amount base_total_sm_cost += d.base_amount + if save: + d.db_update() self.scrap_material_cost = total_sm_cost self.base_scrap_material_cost = base_total_sm_cost + def calculate_exploded_cost(self): + "Set exploded row cost from it's parent BOM." + rm_rate_map = self.get_rm_rate_map() + + for row in self.get("exploded_items"): + old_rate = flt(row.rate) + row.rate = rm_rate_map.get(row.item_code) + row.amount = flt(row.stock_qty) * flt(row.rate) + + if old_rate != row.rate: + # Only db_update if changed + row.db_update() + + def get_rm_rate_map(self) -> Dict[str, float]: + "Create Raw Material-Rate map for Exploded Items. Fetch rate from Items table or Subassembly BOM." + rm_rate_map = {} + + for item in self.get("items"): + if item.bom_no: + # Get Item-Rate from Subassembly BOM + explosion_items = frappe.get_all( + "BOM Explosion Item", + filters={"parent": item.bom_no}, + fields=["item_code", "rate"], + order_by=None, # to avoid sort index creation at db level (granular change) + ) + explosion_item_rate = {item.item_code: flt(item.rate) for item in explosion_items} + rm_rate_map.update(explosion_item_rate) + else: + rm_rate_map[item.item_code] = flt(item.base_rate) / flt(item.conversion_factor or 1.0) + + return rm_rate_map + def update_exploded_items(self, save=True): """Update Flat BOM, following will be correct data""" self.get_exploded_items() @@ -907,44 +933,46 @@ def get_bom_item_rate(args, bom_doc): return flt(rate) -def get_valuation_rate(args): - """Get weighted average of valuation rate from all warehouses""" +def get_valuation_rate(data): + """ + 1) Get average valuation rate from all warehouses + 2) If no value, get last valuation rate from SLE + 3) If no value, get valuation rate from Item + """ + from frappe.query_builder.functions import Sum - total_qty, total_value, valuation_rate = 0.0, 0.0, 0.0 - item_bins = frappe.db.sql( - """ - select - bin.actual_qty, bin.stock_value - from - `tabBin` bin, `tabWarehouse` warehouse - where - bin.item_code=%(item)s - and bin.warehouse = warehouse.name - and warehouse.company=%(company)s""", - {"item": args["item_code"], "company": args["company"]}, - as_dict=1, - ) + item_code, company = data.get("item_code"), data.get("company") + valuation_rate = 0.0 - for d in item_bins: - total_qty += flt(d.actual_qty) - total_value += flt(d.stock_value) + bin_table = frappe.qb.DocType("Bin") + wh_table = frappe.qb.DocType("Warehouse") + item_valuation = ( + frappe.qb.from_(bin_table) + .join(wh_table) + .on(bin_table.warehouse == wh_table.name) + .select((Sum(bin_table.stock_value) / Sum(bin_table.actual_qty)).as_("valuation_rate")) + .where((bin_table.item_code == item_code) & (wh_table.company == company)) + ).run(as_dict=True)[0] - if total_qty: - valuation_rate = total_value / total_qty + valuation_rate = item_valuation.get("valuation_rate") - if valuation_rate <= 0: - last_valuation_rate = frappe.db.sql( - """select valuation_rate - from `tabStock Ledger Entry` - where item_code = %s and valuation_rate > 0 and is_cancelled = 0 - order by posting_date desc, posting_time desc, creation desc limit 1""", - args["item_code"], - ) + if (valuation_rate is not None) and valuation_rate <= 0: + # Explicit null value check. If None, Bins don't exist, neither does SLE + sle = frappe.qb.DocType("Stock Ledger Entry") + last_val_rate = ( + frappe.qb.from_(sle) + .select(sle.valuation_rate) + .where((sle.item_code == item_code) & (sle.valuation_rate > 0) & (sle.is_cancelled == 0)) + .orderby(sle.posting_date, order=frappe.qb.desc) + .orderby(sle.posting_time, order=frappe.qb.desc) + .orderby(sle.creation, order=frappe.qb.desc) + .limit(1) + ).run(as_dict=True) - valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0 + valuation_rate = flt(last_val_rate[0].get("valuation_rate")) if last_val_rate else 0 if not valuation_rate: - valuation_rate = frappe.db.get_value("Item", args["item_code"], "valuation_rate") + valuation_rate = frappe.db.get_value("Item", item_code, "valuation_rate") return flt(valuation_rate) @@ -1130,39 +1158,6 @@ def get_children(parent=None, is_root=False, **filters): return bom_items -def get_boms_in_bottom_up_order(bom_no=None): - def _get_parent(bom_no): - return frappe.db.sql_list( - """ - select distinct bom_item.parent from `tabBOM Item` bom_item - where bom_item.bom_no = %s and bom_item.docstatus=1 and bom_item.parenttype='BOM' - and exists(select bom.name from `tabBOM` bom where bom.name=bom_item.parent and bom.is_active=1) - """, - bom_no, - ) - - count = 0 - bom_list = [] - if bom_no: - bom_list.append(bom_no) - else: - # get all leaf BOMs - bom_list = frappe.db.sql_list( - """select name from `tabBOM` bom - where docstatus=1 and is_active=1 - and not exists(select bom_no from `tabBOM Item` - where parent=bom.name and ifnull(bom_no, '')!='')""" - ) - - while count < len(bom_list): - for child_bom in _get_parent(bom_list[count]): - if child_bom not in bom_list: - bom_list.append(child_bom) - count += 1 - - return bom_list - - def add_additional_cost(stock_entry, work_order): # Add non stock items cost in the additional cost stock_entry.additional_costs = [] @@ -1311,7 +1306,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters): if not field in searchfields ] - query_filters = {"disabled": 0, "ifnull(end_of_life, '5050-50-50')": (">", today())} + query_filters = {"disabled": 0, "end_of_life": (">", today())} or_cond_filters = {} if txt: diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py index 62fc0724e0..a190cc7430 100644 --- a/erpnext/manufacturing/doctype/bom/test_bom.py +++ b/erpnext/manufacturing/doctype/bom/test_bom.py @@ -9,14 +9,15 @@ import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import cstr, flt -from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order -from erpnext.manufacturing.doctype.bom.bom import item_query, make_variant_bom -from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import update_cost +from erpnext.controllers.tests.test_subcontracting_controller import set_backflush_based_on +from erpnext.manufacturing.doctype.bom.bom import BOMRecursionError, item_query, make_variant_bom +from erpnext.manufacturing.doctype.bom_update_log.test_bom_update_log import ( + update_cost_in_all_boms_in_test, +) from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import ( create_stock_reconciliation, ) -from erpnext.tests.test_subcontracting import set_backflush_based_on test_records = frappe.get_test_records("BOM") test_dependencies = ["Item", "Quality Inspection Template"] @@ -69,26 +70,31 @@ class TestBOM(FrappeTestCase): def test_update_bom_cost_in_all_boms(self): # get current rate for '_Test Item 2' - rm_rate = frappe.db.sql( - """select rate from `tabBOM Item` - where parent='BOM-_Test Item Home Desktop Manufactured-001' - and item_code='_Test Item 2' and docstatus=1 and parenttype='BOM'""" + bom_rates = frappe.db.get_values( + "BOM Item", + { + "parent": "BOM-_Test Item Home Desktop Manufactured-001", + "item_code": "_Test Item 2", + "docstatus": 1, + }, + fieldname=["rate", "base_rate"], + as_dict=True, ) - rm_rate = rm_rate[0][0] if rm_rate else 0 + rm_base_rate = bom_rates[0].get("base_rate") if bom_rates else 0 # Reset item valuation rate - reset_item_valuation_rate(item_code="_Test Item 2", qty=200, rate=rm_rate + 10) + reset_item_valuation_rate(item_code="_Test Item 2", qty=200, rate=rm_base_rate + 10) # update cost of all BOMs based on latest valuation rate - update_cost() + update_cost_in_all_boms_in_test() # check if new valuation rate updated in all BOMs for d in frappe.db.sql( - """select rate from `tabBOM Item` + """select base_rate from `tabBOM Item` where item_code='_Test Item 2' and docstatus=1 and parenttype='BOM'""", as_dict=1, ): - self.assertEqual(d.rate, rm_rate + 10) + self.assertEqual(d.base_rate, rm_base_rate + 10) def test_bom_cost(self): bom = frappe.copy_doc(test_records[2]) @@ -249,12 +255,29 @@ class TestBOM(FrappeTestCase): bom.submit() # test that sourced_by_supplier rate is zero even after updating cost self.assertEqual(bom.items[2].rate, 0) - # test in Purchase Order sourced_by_supplier is not added to Supplied Item - po = create_purchase_order( - item_code=item_code, qty=1, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" + + from erpnext.controllers.tests.test_subcontracting_controller import ( + get_subcontracting_order, + make_service_item, + ) + + make_service_item("Subcontracted Service Item 1") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 1, + "rate": 100, + "fg_item": item_code, + "fg_item_qty": 1, + }, + ] + # test in Subcontracting Order sourced_by_supplier is not added to Supplied Item + sco = get_subcontracting_order( + service_items=service_items, supplier_warehouse="_Test Warehouse 1 - _TC" ) bom_items = sorted([d.item_code for d in bom.items if d.sourced_by_supplier != 1]) - supplied_items = sorted([d.rm_item_code for d in po.supplied_items]) + supplied_items = sorted([d.rm_item_code for d in sco.supplied_items]) self.assertEqual(bom_items, supplied_items) def test_bom_tree_representation(self): @@ -324,43 +347,36 @@ class TestBOM(FrappeTestCase): def test_bom_recursion_1st_level(self): """BOM should not allow BOM item again in child""" - item_code = "_Test BOM Recursion" - make_item(item_code, {"is_stock_item": 1}) + item_code = make_item(properties={"is_stock_item": 1}).name bom = frappe.new_doc("BOM") bom.item = item_code bom.append("items", frappe._dict(item_code=item_code)) - with self.assertRaises(frappe.ValidationError) as err: + bom.save() + with self.assertRaises(BOMRecursionError): + bom.items[0].bom_no = bom.name bom.save() - self.assertTrue("recursion" in str(err.exception).lower()) - frappe.delete_doc("BOM", bom.name, ignore_missing=True) - def test_bom_recursion_transitive(self): - item1 = "_Test BOM Recursion" - item2 = "_Test BOM Recursion 2" - make_item(item1, {"is_stock_item": 1}) - make_item(item2, {"is_stock_item": 1}) + item1 = make_item(properties={"is_stock_item": 1}).name + item2 = make_item(properties={"is_stock_item": 1}).name bom1 = frappe.new_doc("BOM") bom1.item = item1 bom1.append("items", frappe._dict(item_code=item2)) bom1.save() - bom1.submit() bom2 = frappe.new_doc("BOM") bom2.item = item2 bom2.append("items", frappe._dict(item_code=item1)) + bom2.save() - with self.assertRaises(frappe.ValidationError) as err: + bom2.items[0].bom_no = bom1.name + bom1.items[0].bom_no = bom2.name + + with self.assertRaises(BOMRecursionError): + bom1.save() bom2.save() - bom2.submit() - - self.assertTrue("recursion" in str(err.exception).lower()) - - bom1.cancel() - frappe.delete_doc("BOM", bom1.name, ignore_missing=True, force=True) - frappe.delete_doc("BOM", bom2.name, ignore_missing=True, force=True) def test_bom_with_process_loss_item(self): fg_item_non_whole, fg_item_whole, bom_item = create_process_loss_bom_items() @@ -559,6 +575,42 @@ class TestBOM(FrappeTestCase): bom.submit() self.assertEqual(bom.items[0].rate, 42) + def test_set_default_bom_for_item_having_single_bom(self): + from erpnext.stock.doctype.item.test_item import make_item + + fg_item = make_item(properties={"is_stock_item": 1}) + bom_item = make_item(properties={"is_stock_item": 1}) + + # Step 1: Create BOM + bom = frappe.new_doc("BOM") + bom.item = fg_item.item_code + bom.quantity = 1 + bom.append( + "items", + { + "item_code": bom_item.item_code, + "qty": 1, + "uom": bom_item.stock_uom, + "stock_uom": bom_item.stock_uom, + "rate": 100.0, + }, + ) + bom.save() + bom.submit() + self.assertEqual(frappe.get_value("Item", fg_item.item_code, "default_bom"), bom.name) + + # Step 2: Uncheck is_active field + bom.is_active = 0 + bom.save() + bom.reload() + self.assertIsNone(frappe.get_value("Item", fg_item.item_code, "default_bom")) + + # Step 3: Check is_active field + bom.is_active = 1 + bom.save() + bom.reload() + self.assertEqual(frappe.get_value("Item", fg_item.item_code, "default_bom"), bom.name) + def get_default_bom(item_code="_Test FG Item 2"): return frappe.db.get_value("BOM", {"item": item_code, "is_active": 1, "is_default": 1}) diff --git a/erpnext/manufacturing/doctype/bom/test_records.json b/erpnext/manufacturing/doctype/bom/test_records.json index 25730f9b9f..507d319b51 100644 --- a/erpnext/manufacturing/doctype/bom/test_records.json +++ b/erpnext/manufacturing/doctype/bom/test_records.json @@ -32,6 +32,7 @@ "is_active": 1, "is_default": 1, "item": "_Test Item Home Desktop Manufactured", + "company": "_Test Company", "quantity": 1.0 }, { diff --git a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json index f01d856e72..9b1db63494 100644 --- a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json +++ b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json @@ -169,13 +169,15 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2020-10-08 16:21:29.386212", + "modified": "2022-05-27 13:42:23.305455", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM Explosion Item", + "naming_rule": "Random", "owner": "Administrator", "permissions": [], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/bom_item/bom_item.json b/erpnext/manufacturing/doctype/bom_item/bom_item.json index 3406215cbb..0a8ae7b4a7 100644 --- a/erpnext/manufacturing/doctype/bom_item/bom_item.json +++ b/erpnext/manufacturing/doctype/bom_item/bom_item.json @@ -33,7 +33,6 @@ "amount", "base_amount", "section_break_18", - "scrap", "qty_consumed_per_unit", "section_break_27", "has_variants", @@ -223,15 +222,6 @@ "fieldname": "section_break_18", "fieldtype": "Section Break" }, - { - "columns": 1, - "fieldname": "scrap", - "fieldtype": "Float", - "label": "Scrap %", - "oldfieldname": "scrap", - "oldfieldtype": "Currency", - "print_hide": 1 - }, { "fieldname": "qty_consumed_per_unit", "fieldtype": "Float", @@ -298,7 +288,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-01-24 16:57:57.020232", + "modified": "2022-05-19 02:32:43.785470", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM Item", diff --git a/erpnext/accounts/print_format/gst_purchase_invoice/__init__.py b/erpnext/manufacturing/doctype/bom_update_batch/__init__.py similarity index 100% rename from erpnext/accounts/print_format/gst_purchase_invoice/__init__.py rename to erpnext/manufacturing/doctype/bom_update_batch/__init__.py diff --git a/erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.json b/erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.json new file mode 100644 index 0000000000..b867d2aa5d --- /dev/null +++ b/erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.json @@ -0,0 +1,54 @@ +{ + "actions": [], + "autoname": "hash", + "creation": "2022-05-31 17:34:39.825537", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "level", + "batch_no", + "boms_updated", + "status" + ], + "fields": [ + { + "fieldname": "level", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Level" + }, + { + "fieldname": "batch_no", + "fieldtype": "Int", + "in_list_view": 1, + "label": "Batch No." + }, + { + "fieldname": "boms_updated", + "fieldtype": "Long Text", + "hidden": 1, + "in_list_view": 1, + "label": "BOMs Updated" + }, + { + "fieldname": "status", + "fieldtype": "Select", + "in_list_view": 1, + "label": "Status", + "options": "Pending\nCompleted", + "read_only": 1 + } + ], + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-06-06 14:50:35.161062", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "BOM Update Batch", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} diff --git a/erpnext/hr/doctype/grievance_type/grievance_type.py b/erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.py similarity index 56% rename from erpnext/hr/doctype/grievance_type/grievance_type.py rename to erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.py index 5d8d41cb73..f952e435e6 100644 --- a/erpnext/hr/doctype/grievance_type/grievance_type.py +++ b/erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.py @@ -1,9 +1,9 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt # import frappe from frappe.model.document import Document -class GrievanceType(Document): +class BOMUpdateBatch(Document): pass diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.json b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.json index 98c1acb71c..a926e69ee6 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.json +++ b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.json @@ -7,12 +7,16 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "current_bom", - "new_bom", - "column_break_3", "update_type", "status", + "column_break_3", + "current_bom", + "new_bom", "error_log", + "progress_section", + "current_level", + "processed_boms", + "bom_batches", "amended_from" ], "fields": [ @@ -33,6 +37,7 @@ "options": "BOM" }, { + "depends_on": "eval:doc.update_type === \"Replace BOM\"", "fieldname": "column_break_3", "fieldtype": "Column Break" }, @@ -63,13 +68,37 @@ "fieldtype": "Link", "label": "Error Log", "options": "Error Log" + }, + { + "collapsible": 1, + "depends_on": "eval: doc.update_type == \"Update Cost\"", + "fieldname": "progress_section", + "fieldtype": "Section Break", + "label": "Progress" + }, + { + "fieldname": "processed_boms", + "fieldtype": "Long Text", + "hidden": 1, + "label": "Processed BOMs" + }, + { + "fieldname": "bom_batches", + "fieldtype": "Table", + "options": "BOM Update Batch" + }, + { + "depends_on": "eval:doc.status !== \"Completed\"", + "fieldname": "current_level", + "fieldtype": "Int", + "label": "Current Level" } ], "in_create": 1, "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-03-31 12:51:44.885102", + "modified": "2022-06-20 15:43:55.696388", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM Update Log", diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.py b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.py index c0770fac90..c3f52d4583 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.py +++ b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log.py @@ -1,13 +1,22 @@ # Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt -from typing import Dict, List, Literal, Optional +import json +from typing import Any, Dict, List, Optional, Tuple, Union import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import cstr, flt +from frappe.query_builder import DocType, Interval +from frappe.query_builder.functions import Now +from frappe.utils import cint, cstr -from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import update_cost +from erpnext.manufacturing.doctype.bom_update_log.bom_updation_utils import ( + get_leaf_boms, + get_next_higher_level_boms, + handle_exception, + replace_bom, + set_values_in_log, +) class BOMMissingError(frappe.ValidationError): @@ -15,11 +24,24 @@ class BOMMissingError(frappe.ValidationError): class BOMUpdateLog(Document): + @staticmethod + def clear_old_logs(days=None): + days = days or 90 + table = DocType("BOM Update Log") + frappe.db.delete( + table, + filters=( + (table.modified < (Now() - Interval(days=days))) & (table.update_type == "Update Cost") + ), + ) + def validate(self): if self.update_type == "Replace BOM": self.validate_boms_are_specified() self.validate_same_bom() self.validate_bom_items() + else: + self.validate_bom_cost_update_in_progress() self.status = "Queued" @@ -42,123 +64,197 @@ class BOMUpdateLog(Document): if current_bom_item != new_bom_item: frappe.throw(_("The selected BOMs are not for the same item")) - def on_submit(self): - if frappe.flags.in_test: - return + def validate_bom_cost_update_in_progress(self): + "If another Cost Updation Log is still in progress, dont make new ones." + wip_log = frappe.get_all( + "BOM Update Log", + {"update_type": "Update Cost", "status": ["in", ["Queued", "In Progress"]]}, + limit_page_length=1, + ) + if wip_log: + log_link = frappe.utils.get_link_to_form("BOM Update Log", wip_log[0].name) + frappe.throw( + _("BOM Updation already in progress. Please wait until {0} is complete.").format(log_link), + title=_("Note"), + ) + + def on_submit(self): if self.update_type == "Replace BOM": boms = {"current_bom": self.current_bom, "new_bom": self.new_bom} frappe.enqueue( - method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.run_bom_job", + method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.run_replace_bom_job", doc=self, boms=boms, timeout=40000, + now=frappe.flags.in_test, ) else: frappe.enqueue( - method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.run_bom_job", - doc=self, - update_type="Update Cost", - timeout=40000, + method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.process_boms_cost_level_wise", + update_doc=self, + now=frappe.flags.in_test, ) -def replace_bom(boms: Dict) -> None: - """Replace current BOM with new BOM in parent BOMs.""" - current_bom = boms.get("current_bom") - new_bom = boms.get("new_bom") - - unit_cost = get_new_bom_unit_cost(new_bom) - update_new_bom_in_bom_items(unit_cost, current_bom, new_bom) - - frappe.cache().delete_key("bom_children") - parent_boms = get_parent_boms(new_bom) - - for bom in parent_boms: - bom_obj = frappe.get_doc("BOM", bom) - # this is only used for versioning and we do not want - # to make separate db calls by using load_doc_before_save - # which proves to be expensive while doing bulk replace - bom_obj._doc_before_save = bom_obj - bom_obj.update_exploded_items() - bom_obj.calculate_cost() - bom_obj.update_parent_cost() - bom_obj.db_update() - if bom_obj.meta.get("track_changes") and not bom_obj.flags.ignore_version: - bom_obj.save_version() - - -def update_new_bom_in_bom_items(unit_cost: float, current_bom: str, new_bom: str) -> None: - bom_item = frappe.qb.DocType("BOM Item") - ( - frappe.qb.update(bom_item) - .set(bom_item.bom_no, new_bom) - .set(bom_item.rate, unit_cost) - .set(bom_item.amount, (bom_item.stock_qty * unit_cost)) - .where( - (bom_item.bom_no == current_bom) & (bom_item.docstatus < 2) & (bom_item.parenttype == "BOM") - ) - ).run() - - -def get_parent_boms(new_bom: str, bom_list: Optional[List] = None) -> List: - bom_list = bom_list or [] - bom_item = frappe.qb.DocType("BOM Item") - - parents = ( - frappe.qb.from_(bom_item) - .select(bom_item.parent) - .where((bom_item.bom_no == new_bom) & (bom_item.docstatus < 2) & (bom_item.parenttype == "BOM")) - .run(as_dict=True) - ) - - for d in parents: - if new_bom == d.parent: - frappe.throw(_("BOM recursion: {0} cannot be child of {1}").format(new_bom, d.parent)) - - bom_list.append(d.parent) - get_parent_boms(d.parent, bom_list) - - return list(set(bom_list)) - - -def get_new_bom_unit_cost(new_bom: str) -> float: - bom = frappe.qb.DocType("BOM") - new_bom_unitcost = ( - frappe.qb.from_(bom).select(bom.total_cost / bom.quantity).where(bom.name == new_bom).run() - ) - - return flt(new_bom_unitcost[0][0]) - - -def run_bom_job( +def run_replace_bom_job( doc: "BOMUpdateLog", boms: Optional[Dict[str, str]] = None, - update_type: Literal["Replace BOM", "Update Cost"] = "Replace BOM", ) -> None: try: doc.db_set("status", "In Progress") + if not frappe.flags.in_test: frappe.db.commit() frappe.db.auto_commit_on_many_writes = 1 - boms = frappe._dict(boms or {}) - - if update_type == "Replace BOM": - replace_bom(boms) - else: - update_cost() + replace_bom(boms, doc.name) doc.db_set("status", "Completed") - except Exception: - frappe.db.rollback() - error_log = doc.log_error("BOM Update Tool Error") - - doc.db_set("status", "Failed") - doc.db_set("error_log", error_log.name) - + handle_exception(doc) finally: frappe.db.auto_commit_on_many_writes = 0 - frappe.db.commit() # nosemgrep + + if not frappe.flags.in_test: + frappe.db.commit() # nosemgrep + + +def process_boms_cost_level_wise( + update_doc: "BOMUpdateLog", parent_boms: List[str] = None +) -> Union[None, Tuple]: + "Queue jobs at the start of new BOM Level in 'Update Cost' Jobs." + + current_boms = {} + values = {} + + try: + if update_doc.status == "Queued": + # First level yet to process. On Submit. + current_level = 0 + current_boms = get_leaf_boms() + values = { + "processed_boms": json.dumps({}), + "status": "In Progress", + "current_level": current_level, + } + else: + # Resume next level. via Cron Job. + if not parent_boms: + return + + current_level = cint(update_doc.current_level) + 1 + + # Process the next level BOMs. Stage parents as current BOMs. + current_boms = parent_boms.copy() + values = {"current_level": current_level} + + set_values_in_log(update_doc.name, values, commit=True) + queue_bom_cost_jobs(current_boms, update_doc, current_level) + except Exception: + handle_exception(update_doc) + + +def queue_bom_cost_jobs( + current_boms_list: List[str], update_doc: "BOMUpdateLog", current_level: int +) -> None: + "Queue batches of 20k BOMs of the same level to process parallelly" + batch_no = 0 + + while current_boms_list: + batch_no += 1 + batch_size = 20_000 + boms_to_process = current_boms_list[:batch_size] # slice out batch of 20k BOMs + + # update list to exclude 20K (queued) BOMs + current_boms_list = current_boms_list[batch_size:] if len(current_boms_list) > batch_size else [] + + batch_row = update_doc.append( + "bom_batches", {"level": current_level, "batch_no": batch_no, "status": "Pending"} + ) + batch_row.db_insert() + + frappe.enqueue( + method="erpnext.manufacturing.doctype.bom_update_log.bom_updation_utils.update_cost_in_level", + doc=update_doc, + bom_list=boms_to_process, + batch_name=batch_row.name, + queue="long", + now=frappe.flags.in_test, + ) + + +def resume_bom_cost_update_jobs(): + """ + 1. Checks for In Progress BOM Update Log. + 2. Checks if this job has completed the _current level_. + 3. If current level is complete, get parent BOMs and start next level. + 4. If no parents, mark as Complete. + 5. If current level is WIP, skip the Log. + + Called every 5 minutes via Cron job. + """ + + in_progress_logs = frappe.db.get_all( + "BOM Update Log", + {"update_type": "Update Cost", "status": "In Progress"}, + ["name", "processed_boms", "current_level"], + ) + if not in_progress_logs: + return + + for log in in_progress_logs: + # check if all log batches of current level are processed + bom_batches = frappe.db.get_all( + "BOM Update Batch", + {"parent": log.name, "level": log.current_level}, + ["name", "boms_updated", "status"], + ) + incomplete_level = any(row.get("status") == "Pending" for row in bom_batches) + if not bom_batches or incomplete_level: + continue + + # Prep parent BOMs & updated processed BOMs for next level + current_boms, processed_boms = get_processed_current_boms(log, bom_batches) + parent_boms = get_next_higher_level_boms(child_boms=current_boms, processed_boms=processed_boms) + + # Unset processed BOMs (it is used for next level BOMs) & change status if log is complete + status = "Completed" if not parent_boms else "In Progress" + processed_boms = json.dumps([] if not parent_boms else processed_boms) + set_values_in_log( + log.name, + values={ + "processed_boms": processed_boms, + "status": status, + }, + commit=True, + ) + + # clear progress section + if status == "Completed": + frappe.db.delete("BOM Update Batch", {"parent": log.name}) + + if parent_boms: # there is a next level to process + process_boms_cost_level_wise( + update_doc=frappe.get_doc("BOM Update Log", log.name), parent_boms=parent_boms + ) + + +def get_processed_current_boms( + log: Dict[str, Any], bom_batches: Dict[str, Any] +) -> Tuple[List[str], Dict[str, Any]]: + """ + Aggregate all BOMs from BOM Update Batch rows into 'processed_boms' field + and into current boms list. + """ + processed_boms = json.loads(log.processed_boms) if log.processed_boms else {} + current_boms = [] + + for row in bom_batches: + boms_updated = json.loads(row.boms_updated) + current_boms.extend(boms_updated) + boms_updated_dict = {bom: True for bom in boms_updated} + processed_boms.update(boms_updated_dict) + + return current_boms, processed_boms diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js index e39b5637c7..bc709d8fc4 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js +++ b/erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js @@ -1,6 +1,6 @@ frappe.listview_settings['BOM Update Log'] = { add_fields: ["status"], - get_indicator: function(doc) { + get_indicator: (doc) => { let status_map = { "Queued": "orange", "In Progress": "blue", @@ -9,5 +9,22 @@ frappe.listview_settings['BOM Update Log'] = { }; return [__(doc.status), status_map[doc.status], "status,=," + doc.status]; - } + }, + onload: () => { + if (!frappe.model.can_write("Log Settings")) { + return; + } + + let sidebar_entry = $( + '' + ).appendTo(cur_list.page.sidebar); + let message = __("Note: Automatic log deletion only applies to logs of type Update Cost"); + $(`
${message}
`).appendTo(sidebar_entry); + + frappe.require("logtypes.bundle.js", () => { + frappe.utils.logtypes.show_log_retention_message(cur_list.doctype); + }); + + + }, }; \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py b/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py new file mode 100644 index 0000000000..af115e3e42 --- /dev/null +++ b/erpnext/manufacturing/doctype/bom_update_log/bom_updation_utils.py @@ -0,0 +1,225 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import copy +import json +from collections import defaultdict +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union + +if TYPE_CHECKING: + from erpnext.manufacturing.doctype.bom_update_log.bom_update_log import BOMUpdateLog + +import frappe +from frappe import _ + + +def replace_bom(boms: Dict, log_name: str) -> None: + "Replace current BOM with new BOM in parent BOMs." + + current_bom = boms.get("current_bom") + new_bom = boms.get("new_bom") + + unit_cost = get_bom_unit_cost(new_bom) + update_new_bom_in_bom_items(unit_cost, current_bom, new_bom) + + frappe.cache().delete_key("bom_children") + parent_boms = get_ancestor_boms(new_bom) + + for bom in parent_boms: + bom_obj = frappe.get_doc("BOM", bom) + # this is only used for versioning and we do not want + # to make separate db calls by using load_doc_before_save + # which proves to be expensive while doing bulk replace + bom_obj._doc_before_save = copy.deepcopy(bom_obj) + bom_obj.update_exploded_items() + bom_obj.calculate_cost() + bom_obj.update_parent_cost() + bom_obj.db_update() + bom_obj.flags.updater_reference = { + "doctype": "BOM Update Log", + "docname": log_name, + "label": _("via BOM Update Tool"), + } + bom_obj.save_version() + + +def update_cost_in_level( + doc: "BOMUpdateLog", bom_list: List[str], batch_name: Union[int, str] +) -> None: + "Updates Cost for BOMs within a given level. Runs via background jobs." + + try: + status = frappe.db.get_value("BOM Update Log", doc.name, "status") + if status == "Failed": + return + + update_cost_in_boms(bom_list=bom_list) # main updation logic + + bom_batch = frappe.qb.DocType("BOM Update Batch") + ( + frappe.qb.update(bom_batch) + .set(bom_batch.boms_updated, json.dumps(bom_list)) + .set(bom_batch.status, "Completed") + .where(bom_batch.name == batch_name) + ).run() + except Exception: + handle_exception(doc) + finally: + if not frappe.flags.in_test: + frappe.db.commit() # nosemgrep + + +def get_ancestor_boms(new_bom: str, bom_list: Optional[List] = None) -> List: + "Recursively get all ancestors of BOM." + + bom_list = bom_list or [] + bom_item = frappe.qb.DocType("BOM Item") + + parents = ( + frappe.qb.from_(bom_item) + .select(bom_item.parent) + .where((bom_item.bom_no == new_bom) & (bom_item.docstatus < 2) & (bom_item.parenttype == "BOM")) + .run(as_dict=True) + ) + + for d in parents: + if new_bom == d.parent: + frappe.throw(_("BOM recursion: {0} cannot be child of {1}").format(new_bom, d.parent)) + + bom_list.append(d.parent) + get_ancestor_boms(d.parent, bom_list) + + return list(set(bom_list)) + + +def update_new_bom_in_bom_items(unit_cost: float, current_bom: str, new_bom: str) -> None: + bom_item = frappe.qb.DocType("BOM Item") + ( + frappe.qb.update(bom_item) + .set(bom_item.bom_no, new_bom) + .set(bom_item.rate, unit_cost) + .set(bom_item.amount, (bom_item.stock_qty * unit_cost)) + .where( + (bom_item.bom_no == current_bom) & (bom_item.docstatus < 2) & (bom_item.parenttype == "BOM") + ) + ).run() + + +def get_bom_unit_cost(bom_name: str) -> float: + bom = frappe.qb.DocType("BOM") + new_bom_unitcost = ( + frappe.qb.from_(bom).select(bom.total_cost / bom.quantity).where(bom.name == bom_name).run() + ) + + return frappe.utils.flt(new_bom_unitcost[0][0]) + + +def update_cost_in_boms(bom_list: List[str]) -> None: + "Updates cost in given BOMs. Returns current and total updated BOMs." + + for index, bom in enumerate(bom_list): + bom_doc = frappe.get_doc("BOM", bom, for_update=True) + bom_doc.calculate_cost(save_updates=True, update_hour_rate=True) + bom_doc.db_update() + + if (index % 50 == 0) and not frappe.flags.in_test: + frappe.db.commit() # nosemgrep + + +def get_next_higher_level_boms( + child_boms: List[str], processed_boms: Dict[str, bool] +) -> List[str]: + "Generate immediate higher level dependants with no unresolved dependencies (children)." + + def _all_children_are_processed(parent_bom): + child_boms = dependency_map.get(parent_bom) + return all(processed_boms.get(bom) for bom in child_boms) + + dependants_map, dependency_map = _generate_dependence_map() + + dependants = [] + for bom in child_boms: + # generate list of immediate dependants + parents = dependants_map.get(bom) or [] + dependants.extend(parents) + + dependants = set(dependants) # remove duplicates + resolved_dependants = set() + + # consider only if children are all resolved + for parent_bom in dependants: + if _all_children_are_processed(parent_bom): + resolved_dependants.add(parent_bom) + + return list(resolved_dependants) + + +def get_leaf_boms() -> List[str]: + "Get BOMs that have no dependencies." + + return frappe.db.sql_list( + """select name from `tabBOM` bom + where docstatus=1 and is_active=1 + and not exists(select bom_no from `tabBOM Item` + where parent=bom.name and ifnull(bom_no, '')!='')""" + ) + + +def _generate_dependence_map() -> defaultdict: + """ + Generate maps such as: { BOM-1: [Dependant-BOM-1, Dependant-BOM-2, ..] }. + Here BOM-1 is the leaf/lower level node/dependency. + The list contains one level higher nodes/dependants that depend on BOM-1. + + Generate and return the reverse as well. + """ + + bom = frappe.qb.DocType("BOM") + bom_item = frappe.qb.DocType("BOM Item") + + bom_items = ( + frappe.qb.from_(bom_item) + .join(bom) + .on(bom_item.parent == bom.name) + .select(bom_item.bom_no, bom_item.parent) + .where( + (bom_item.bom_no.isnotnull()) + & (bom_item.bom_no != "") + & (bom.docstatus == 1) + & (bom.is_active == 1) + & (bom_item.parenttype == "BOM") + ) + ).run(as_dict=True) + + child_parent_map = defaultdict(list) + parent_child_map = defaultdict(list) + for row in bom_items: + child_parent_map[row.bom_no].append(row.parent) + parent_child_map[row.parent].append(row.bom_no) + + return child_parent_map, parent_child_map + + +def set_values_in_log(log_name: str, values: Dict[str, Any], commit: bool = False) -> None: + "Update BOM Update Log record." + + if not values: + return + + bom_update_log = frappe.qb.DocType("BOM Update Log") + query = frappe.qb.update(bom_update_log).where(bom_update_log.name == log_name) + + for key, value in values.items(): + query = query.set(key, value) + query.run() + + if commit and not frappe.flags.in_test: + frappe.db.commit() # nosemgrep + + +def handle_exception(doc: "BOMUpdateLog") -> None: + "Rolls back and fails BOM Update Log." + + frappe.db.rollback() + error_log = doc.log_error("BOM Update Tool Error") + set_values_in_log(doc.name, {"status": "Failed", "error_log": error_log.name}) diff --git a/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py b/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py index 47efea961b..b38fc8976b 100644 --- a/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py +++ b/erpnext/manufacturing/doctype/bom_update_log/test_bom_update_log.py @@ -6,9 +6,12 @@ from frappe.tests.utils import FrappeTestCase from erpnext.manufacturing.doctype.bom_update_log.bom_update_log import ( BOMMissingError, - run_bom_job, + resume_bom_cost_update_jobs, +) +from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import ( + enqueue_replace_bom, + enqueue_update_cost, ) -from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import enqueue_replace_bom test_records = frappe.get_test_records("BOM") @@ -31,17 +34,12 @@ class TestBOMUpdateLog(FrappeTestCase): def tearDown(self): frappe.db.rollback() - if self._testMethodName == "test_bom_update_log_completion": - # clear logs and delete BOM created via setUp - frappe.db.delete("BOM Update Log") - self.new_bom_doc.cancel() - self.new_bom_doc.delete() - - # explicitly commit and restore to original state - frappe.db.commit() # nosemgrep - def test_bom_update_log_validate(self): - "Test if BOM presence is validated." + """ + 1) Test if BOM presence is validated. + 2) Test if same BOMs are validated. + 3) Test of non-existent BOM is validated. + """ with self.assertRaises(BOMMissingError): enqueue_replace_bom(boms={}) @@ -52,45 +50,22 @@ class TestBOMUpdateLog(FrappeTestCase): with self.assertRaises(frappe.ValidationError): enqueue_replace_bom(boms=frappe._dict(current_bom=self.boms.new_bom, new_bom="Dummy BOM")) - def test_bom_update_log_queueing(self): - "Test if BOM Update Log is created and queued." - - log = enqueue_replace_bom( - boms=self.boms, - ) - - self.assertEqual(log.docstatus, 1) - self.assertEqual(log.status, "Queued") - def test_bom_update_log_completion(self): "Test if BOM Update Log handles job completion correctly." - log = enqueue_replace_bom( - boms=self.boms, - ) - - # Explicitly commits log, new bom (setUp) and replacement impact. - # Is run via background jobs IRL - run_bom_job( - doc=log, - boms=self.boms, - update_type="Replace BOM", - ) + log = enqueue_replace_bom(boms=self.boms) log.reload() - self.assertEqual(log.status, "Completed") - # teardown (undo replace impact) due to commit - boms = frappe._dict( - current_bom=self.boms.new_bom, - new_bom=self.boms.current_bom, - ) - log2 = enqueue_replace_bom( - boms=self.boms, - ) - run_bom_job( # Explicitly commits - doc=log2, - boms=boms, - update_type="Replace BOM", - ) - self.assertEqual(log2.status, "Completed") + +def update_cost_in_all_boms_in_test(): + """ + Utility to run 'Update Cost' job in tests without Cron job until fully complete. + """ + log = enqueue_update_cost() # create BOM Update Log + + while log.status != "Completed": + resume_bom_cost_update_jobs() # run cron job until complete + log.reload() + + return log diff --git a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py index b0e7da1201..d16fcd0832 100644 --- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py +++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py @@ -10,8 +10,6 @@ if TYPE_CHECKING: import frappe from frappe.model.document import Document -from erpnext.manufacturing.doctype.bom.bom import get_boms_in_bottom_up_order - class BOMUpdateTool(Document): pass @@ -40,14 +38,13 @@ def enqueue_update_cost() -> "BOMUpdateLog": def auto_update_latest_price_in_all_boms() -> None: """Called via hooks.py.""" if frappe.db.get_single_value("Manufacturing Settings", "update_bom_costs_automatically"): - update_cost() - - -def update_cost() -> None: - """Updates Cost for all BOMs from bottom to top.""" - bom_list = get_boms_in_bottom_up_order() - for bom in bom_list: - frappe.get_doc("BOM", bom).update_cost(update_parent=False, from_child_bom=True) + wip_log = frappe.get_all( + "BOM Update Log", + {"update_type": "Update Cost", "status": ["in", ["Queued", "In Progress"]]}, + limit_page_length=1, + ) + if not wip_log: + create_bom_update_log(update_type="Update Cost") def create_bom_update_log( diff --git a/erpnext/manufacturing/doctype/bom_update_tool/test_bom_update_tool.py b/erpnext/manufacturing/doctype/bom_update_tool/test_bom_update_tool.py index fae72a0f6f..5dd557f8ab 100644 --- a/erpnext/manufacturing/doctype/bom_update_tool/test_bom_update_tool.py +++ b/erpnext/manufacturing/doctype/bom_update_tool/test_bom_update_tool.py @@ -1,11 +1,13 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt import frappe from frappe.tests.utils import FrappeTestCase -from erpnext.manufacturing.doctype.bom_update_log.bom_update_log import replace_bom -from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import update_cost +from erpnext.manufacturing.doctype.bom_update_log.test_bom_update_log import ( + update_cost_in_all_boms_in_test, +) +from erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool import enqueue_replace_bom from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom from erpnext.stock.doctype.item.test_item import create_item @@ -15,6 +17,9 @@ test_records = frappe.get_test_records("BOM") class TestBOMUpdateTool(FrappeTestCase): "Test major functions run via BOM Update Tool." + def tearDown(self): + frappe.db.rollback() + def test_replace_bom(self): current_bom = "BOM-_Test Item Home Desktop Manufactured-001" @@ -23,15 +28,10 @@ class TestBOMUpdateTool(FrappeTestCase): bom_doc.insert() boms = frappe._dict(current_bom=current_bom, new_bom=bom_doc.name) - replace_bom(boms) + enqueue_replace_bom(boms=boms) - self.assertFalse(frappe.db.sql("select name from `tabBOM Item` where bom_no=%s", current_bom)) - self.assertTrue(frappe.db.sql("select name from `tabBOM Item` where bom_no=%s", bom_doc.name)) - - # reverse, as it affects other testcases - boms.current_bom = bom_doc.name - boms.new_bom = current_bom - replace_bom(boms) + self.assertFalse(frappe.db.exists("BOM Item", {"bom_no": current_bom, "docstatus": 1})) + self.assertTrue(frappe.db.exists("BOM Item", {"bom_no": bom_doc.name, "docstatus": 1})) def test_bom_cost(self): for item in ["BOM Cost Test Item 1", "BOM Cost Test Item 2", "BOM Cost Test Item 3"]: @@ -52,13 +52,13 @@ class TestBOMUpdateTool(FrappeTestCase): self.assertEqual(doc.total_cost, 200) frappe.db.set_value("Item", "BOM Cost Test Item 2", "valuation_rate", 200) - update_cost() + update_cost_in_all_boms_in_test() doc.load_from_db() self.assertEqual(doc.total_cost, 300) frappe.db.set_value("Item", "BOM Cost Test Item 2", "valuation_rate", 100) - update_cost() + update_cost_in_all_boms_in_test() doc.load_from_db() self.assertEqual(doc.total_cost, 200) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index bf4f82f57e..ed45106634 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -42,6 +42,10 @@ class JobCardCancelError(frappe.ValidationError): pass +class JobCardOverTransferError(frappe.ValidationError): + pass + + class JobCard(Document): def onload(self): excess_transfer = frappe.db.get_single_value( @@ -522,23 +526,50 @@ class JobCard(Document): }, ) - def set_transferred_qty_in_job_card(self, ste_doc): + def set_transferred_qty_in_job_card_item(self, ste_doc): + from frappe.query_builder.functions import Sum + + def _validate_over_transfer(row, transferred_qty): + "Block over transfer of items if not allowed in settings." + required_qty = frappe.db.get_value("Job Card Item", row.job_card_item, "required_qty") + is_excess = flt(transferred_qty) > flt(required_qty) + if is_excess: + frappe.throw( + _( + "Row #{0}: Cannot transfer more than Required Qty {1} for Item {2} against Job Card {3}" + ).format( + row.idx, frappe.bold(required_qty), frappe.bold(row.item_code), ste_doc.job_card + ), + title=_("Excess Transfer"), + exc=JobCardOverTransferError, + ) + for row in ste_doc.items: if not row.job_card_item: continue - qty = frappe.db.sql( - """ SELECT SUM(qty) from `tabStock Entry Detail` sed, `tabStock Entry` se - WHERE sed.job_card_item = %s and se.docstatus = 1 and sed.parent = se.name and - se.purpose = 'Material Transfer for Manufacture' - """, - (row.job_card_item), - )[0][0] + sed = frappe.qb.DocType("Stock Entry Detail") + se = frappe.qb.DocType("Stock Entry") + transferred_qty = ( + frappe.qb.from_(sed) + .join(se) + .on(sed.parent == se.name) + .select(Sum(sed.qty)) + .where( + (sed.job_card_item == row.job_card_item) + & (se.docstatus == 1) + & (se.purpose == "Material Transfer for Manufacture") + ) + ).run()[0][0] - frappe.db.set_value("Job Card Item", row.job_card_item, "transferred_qty", flt(qty)) + allow_excess = frappe.db.get_single_value("Manufacturing Settings", "job_card_excess_transfer") + if not allow_excess: + _validate_over_transfer(row, transferred_qty) + + frappe.db.set_value("Job Card Item", row.job_card_item, "transferred_qty", flt(transferred_qty)) def set_transferred_qty(self, update_status=False): - "Set total FG Qty for which RM was transferred." + "Set total FG Qty in Job Card for which RM was transferred." if not self.items: self.transferred_qty = self.for_quantity if self.docstatus == 1 else 0 @@ -590,19 +621,20 @@ class JobCard(Document): self.set_status(update_status) def set_status(self, update_status=False): - if self.status == "On Hold": + if self.status == "On Hold" and self.docstatus == 0: return self.status = {0: "Open", 1: "Submitted", 2: "Cancelled"}[self.docstatus or 0] - if self.for_quantity <= self.transferred_qty: - self.status = "Material Transferred" + if self.docstatus < 2: + if self.for_quantity <= self.transferred_qty: + self.status = "Material Transferred" - if self.time_logs: - self.status = "Work In Progress" + if self.time_logs: + self.status = "Work In Progress" - if self.docstatus == 1 and (self.for_quantity <= self.total_completed_qty or not self.items): - self.status = "Completed" + if self.docstatus == 1 and (self.for_quantity <= self.total_completed_qty or not self.items): + self.status = "Completed" if update_status: self.db_set("status", self.status) @@ -764,8 +796,6 @@ def make_stock_entry(source_name, target_doc=None): pending_fg_qty = flt(source.get("for_quantity", 0)) - flt(source.get("transferred_qty", 0)) target.fg_completed_qty = pending_fg_qty if pending_fg_qty > 0 else 0 - target.set_transfer_qty() - target.calculate_rate_and_amount() target.set_missing_values() target.set_stock_entry_type() @@ -868,6 +898,7 @@ def make_corrective_job_card(source_name, operation=None, for_operation=None, ta target.set("time_logs", []) target.set("employee", []) target.set("items", []) + target.set("sub_operations", []) target.set_sub_operations() target.get_required_items() target.validate_time_logs() diff --git a/erpnext/manufacturing/doctype/job_card/job_card_list.js b/erpnext/manufacturing/doctype/job_card/job_card_list.js index 7f60bdc6d9..5d883bf9fa 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card_list.js +++ b/erpnext/manufacturing/doctype/job_card/job_card_list.js @@ -1,16 +1,17 @@ frappe.listview_settings['Job Card'] = { has_indicator_for_draft: true, + get_indicator: function(doc) { - if (doc.status === "Work In Progress") { - return [__("Work In Progress"), "orange", "status,=,Work In Progress"]; - } else if (doc.status === "Completed") { - return [__("Completed"), "green", "status,=,Completed"]; - } else if (doc.docstatus == 2) { - return [__("Cancelled"), "red", "status,=,Cancelled"]; - } else if (doc.status === "Material Transferred") { - return [__('Material Transferred'), "blue", "status,=,Material Transferred"]; - } else { - return [__("Open"), "red", "status,=,Open"]; - } + const status_colors = { + "Work In Progress": "orange", + "Completed": "green", + "Cancelled": "red", + "Material Transferred": "blue", + "Open": "red", + }; + const status = doc.status || "Open"; + const color = status_colors[status] || "blue"; + + return [__(status), color, `status,=,${status}`]; } }; diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index 4647ddf05f..ac7114138c 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -1,15 +1,25 @@ # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors # See license.txt -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import random_string -from erpnext.manufacturing.doctype.job_card.job_card import OperationMismatchError, OverlapError +from typing import Literal + +import frappe +from frappe.tests.utils import FrappeTestCase, change_settings +from frappe.utils import random_string +from frappe.utils.data import add_to_date, now + +from erpnext.manufacturing.doctype.job_card.job_card import ( + JobCardOverTransferError, + OperationMismatchError, + OverlapError, + make_corrective_job_card, +) from erpnext.manufacturing.doctype.job_card.job_card import ( make_stock_entry as make_stock_entry_from_jc, ) from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record +from erpnext.manufacturing.doctype.work_order.work_order import WorkOrder from erpnext.manufacturing.doctype.workstation.test_workstation import make_workstation from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry @@ -17,34 +27,36 @@ from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry class TestJobCard(FrappeTestCase): def setUp(self): make_bom_for_jc_tests() + self.transfer_material_against: Literal["Work Order", "Job Card"] = "Work Order" + self.source_warehouse = None + self._work_order = None - transfer_material_against, source_warehouse = None, None + @property + def work_order(self) -> WorkOrder: + """Work Order lazily created for tests.""" + if not self._work_order: + self._work_order = make_wo_order_test_record( + item="_Test FG Item 2", + qty=2, + transfer_material_against=self.transfer_material_against, + source_warehouse=self.source_warehouse, + ) + return self._work_order - tests_that_skip_setup = ("test_job_card_material_transfer_correctness",) - tests_that_transfer_against_jc = ( - "test_job_card_multiple_materials_transfer", - "test_job_card_excess_material_transfer", - "test_job_card_partial_material_transfer", - ) - - if self._testMethodName in tests_that_skip_setup: - return - - if self._testMethodName in tests_that_transfer_against_jc: - transfer_material_against = "Job Card" - source_warehouse = "Stores - _TC" - - self.work_order = make_wo_order_test_record( - item="_Test FG Item 2", - qty=2, - transfer_material_against=transfer_material_against, - source_warehouse=source_warehouse, - ) + def generate_required_stock(self, work_order: WorkOrder) -> None: + """Create twice the stock for all required items in work order.""" + for item in work_order.required_items: + make_stock_entry( + item_code=item.item_code, + target=item.source_warehouse or self.source_warehouse, + qty=item.required_qty * 2, + basic_rate=100, + ) def tearDown(self): frappe.db.rollback() - def test_job_card(self): + def test_job_card_operations(self): job_cards = frappe.get_all( "Job Card", filters={"work_order": self.work_order.name}, fields=["operation_id", "name"] @@ -58,9 +70,6 @@ class TestJobCard(FrappeTestCase): doc.operation_id = "Test Data" self.assertRaises(OperationMismatchError, doc.save) - for d in job_cards: - frappe.delete_doc("Job Card", d.name) - def test_job_card_with_different_work_station(self): job_cards = frappe.get_all( "Job Card", @@ -96,19 +105,11 @@ class TestJobCard(FrappeTestCase): ) self.assertEqual(completed_qty, job_card.for_quantity) - doc.cancel() - - for d in job_cards: - frappe.delete_doc("Job Card", d.name) - def test_job_card_overlap(self): wo2 = make_wo_order_test_record(item="_Test FG Item 2", qty=2) - jc1_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name}) - jc2_name = frappe.db.get_value("Job Card", {"work_order": wo2.name}) - - jc1 = frappe.get_doc("Job Card", jc1_name) - jc2 = frappe.get_doc("Job Card", jc2_name) + jc1 = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) + jc2 = frappe.get_last_doc("Job Card", {"work_order": wo2.name}) employee = "_T-Employee-00001" # from test records @@ -137,10 +138,10 @@ class TestJobCard(FrappeTestCase): def test_job_card_multiple_materials_transfer(self): "Test transferring RMs separately against Job Card with multiple RMs." - make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=10, basic_rate=100) - make_stock_entry( - item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=6, basic_rate=100 - ) + self.transfer_material_against = "Job Card" + self.source_warehouse = "Stores - _TC" + + self.generate_required_stock(self.work_order) job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name}) job_card = frappe.get_doc("Job Card", job_card_name) @@ -165,16 +166,58 @@ class TestJobCard(FrappeTestCase): # transfer was made for 2 fg qty in first transfer Stock Entry self.assertEqual(transfer_entry_2.fg_completed_qty, 0) + @change_settings("Manufacturing Settings", {"job_card_excess_transfer": 1}) def test_job_card_excess_material_transfer(self): "Test transferring more than required RM against Job Card." - make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=25, basic_rate=100) - make_stock_entry( - item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=15, basic_rate=100 + self.transfer_material_against = "Job Card" + self.source_warehouse = "Stores - _TC" + + self.generate_required_stock(self.work_order) + + job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) + self.assertEqual(job_card.status, "Open") + + # fully transfer both RMs + transfer_entry_1 = make_stock_entry_from_jc(job_card.name) + transfer_entry_1.insert() + transfer_entry_1.submit() + + # transfer extra qty of both RM due to previously damaged RM + transfer_entry_2 = make_stock_entry_from_jc(job_card.name) + # deliberately change 'For Quantity' + transfer_entry_2.fg_completed_qty = 1 + transfer_entry_2.items[0].qty = 5 + transfer_entry_2.items[1].qty = 3 + transfer_entry_2.insert() + transfer_entry_2.submit() + + job_card.reload() + self.assertGreater(job_card.transferred_qty, job_card.for_quantity) + + # Check if 'For Quantity' is negative + # as 'transferred_qty' > Qty to Manufacture + transfer_entry_3 = make_stock_entry_from_jc(job_card.name) + self.assertEqual(transfer_entry_3.fg_completed_qty, 0) + + job_card.append( + "time_logs", + {"from_time": "2021-01-01 00:01:00", "to_time": "2021-01-01 06:00:00", "completed_qty": 2}, ) + job_card.save() + job_card.submit() + + # JC is Completed with excess transfer + self.assertEqual(job_card.status, "Completed") + + @change_settings("Manufacturing Settings", {"job_card_excess_transfer": 0}) + def test_job_card_excess_material_transfer_block(self): + + self.transfer_material_against = "Job Card" + self.source_warehouse = "Stores - _TC" + + self.generate_required_stock(self.work_order) job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name}) - job_card = frappe.get_doc("Job Card", job_card_name) - self.assertEqual(job_card.status, "Open") # fully transfer both RMs transfer_entry_1 = make_stock_entry_from_jc(job_card_name) @@ -188,39 +231,19 @@ class TestJobCard(FrappeTestCase): transfer_entry_2.items[0].qty = 5 transfer_entry_2.items[1].qty = 3 transfer_entry_2.insert() - transfer_entry_2.submit() - - job_card.reload() - self.assertGreater(job_card.transferred_qty, job_card.for_quantity) - - # Check if 'For Quantity' is negative - # as 'transferred_qty' > Qty to Manufacture - transfer_entry_3 = make_stock_entry_from_jc(job_card_name) - self.assertEqual(transfer_entry_3.fg_completed_qty, 0) - - job_card.append( - "time_logs", - {"from_time": "2021-01-01 00:01:00", "to_time": "2021-01-01 06:00:00", "completed_qty": 2}, - ) - job_card.save() - job_card.submit() - - # JC is Completed with excess transfer - self.assertEqual(job_card.status, "Completed") + self.assertRaises(JobCardOverTransferError, transfer_entry_2.submit) def test_job_card_partial_material_transfer(self): "Test partial material transfer against Job Card" + self.transfer_material_against = "Job Card" + self.source_warehouse = "Stores - _TC" - make_stock_entry(item_code="_Test Item", target="Stores - _TC", qty=25, basic_rate=100) - make_stock_entry( - item_code="_Test Item Home Desktop Manufactured", target="Stores - _TC", qty=15, basic_rate=100 - ) + self.generate_required_stock(self.work_order) - job_card_name = frappe.db.get_value("Job Card", {"work_order": self.work_order.name}) - job_card = frappe.get_doc("Job Card", job_card_name) + job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) # partially transfer - transfer_entry = make_stock_entry_from_jc(job_card_name) + transfer_entry = make_stock_entry_from_jc(job_card.name) transfer_entry.fg_completed_qty = 1 transfer_entry.get_items() transfer_entry.insert() @@ -232,7 +255,7 @@ class TestJobCard(FrappeTestCase): self.assertEqual(transfer_entry.items[1].qty, 3) # transfer remaining - transfer_entry_2 = make_stock_entry_from_jc(job_card_name) + transfer_entry_2 = make_stock_entry_from_jc(job_card.name) self.assertEqual(transfer_entry_2.fg_completed_qty, 1) self.assertEqual(transfer_entry_2.items[0].qty, 5) @@ -277,7 +300,73 @@ class TestJobCard(FrappeTestCase): self.assertEqual(transfer_entry.items[0].item_code, "_Test Item") self.assertEqual(transfer_entry.items[0].qty, 2) - # rollback via tearDown method + @change_settings( + "Manufacturing Settings", {"add_corrective_operation_cost_in_finished_good_valuation": 1} + ) + def test_corrective_costing(self): + job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) + + job_card.append( + "time_logs", + {"from_time": now(), "to_time": add_to_date(now(), hours=1), "completed_qty": 2}, + ) + job_card.submit() + + self.work_order.reload() + original_cost = self.work_order.total_operating_cost + + # Create a corrective operation against it + corrective_action = frappe.get_doc( + doctype="Operation", is_corrective_operation=1, name=frappe.generate_hash() + ).insert() + + corrective_job_card = make_corrective_job_card( + job_card.name, operation=corrective_action.name, for_operation=job_card.operation + ) + corrective_job_card.hour_rate = 100 + corrective_job_card.insert() + corrective_job_card.append( + "time_logs", + { + "from_time": add_to_date(now(), hours=2), + "to_time": add_to_date(now(), hours=2, minutes=30), + "completed_qty": 2, + }, + ) + corrective_job_card.submit() + + self.work_order.reload() + cost_after_correction = self.work_order.total_operating_cost + self.assertGreater(cost_after_correction, original_cost) + + corrective_job_card.cancel() + self.work_order.reload() + cost_after_cancel = self.work_order.total_operating_cost + self.assertEqual(cost_after_cancel, original_cost) + + def test_job_card_statuses(self): + def assertStatus(status): + jc.set_status() + self.assertEqual(jc.status, status) + + jc = frappe.new_doc("Job Card") + jc.for_quantity = 2 + jc.transferred_qty = 1 + jc.total_completed_qty = 0 + assertStatus("Open") + + jc.transferred_qty = jc.for_quantity + assertStatus("Material Transferred") + + jc.append("time_logs", {}) + assertStatus("Work In Progress") + + jc.docstatus = 1 + jc.total_completed_qty = jc.for_quantity + assertStatus("Completed") + + jc.docstatus = 2 + assertStatus("Cancelled") def create_bom_with_multiple_operations(): diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 9ca05b927f..70ccb78278 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -25,6 +25,7 @@ from erpnext.manufacturing.doctype.bom.bom import get_children as get_bom_childr from erpnext.manufacturing.doctype.bom.bom import validate_bom_no from erpnext.manufacturing.doctype.work_order.work_order import get_item_details from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults +from erpnext.utilities.transaction_base import validate_uom_is_integer class ProductionPlan(Document): @@ -33,6 +34,7 @@ class ProductionPlan(Document): self.calculate_total_planned_qty() self.set_status() self._rename_temporary_references() + validate_uom_is_integer(self, "stock_uom", "planned_qty") def set_pending_qty_in_row_without_reference(self): "Set Pending Qty in independent rows (not from SO or MR)." @@ -506,7 +508,7 @@ class ProductionPlan(Document): po.is_subcontracted = 1 for row in po_list: po_data = { - "item_code": row.production_item, + "fg_item": row.production_item, "warehouse": row.fg_warehouse, "production_plan_sub_assembly_item": row.name, "bom": row.bom_no, @@ -516,9 +518,6 @@ class ProductionPlan(Document): for field in [ "schedule_date", "qty", - "uom", - "stock_uom", - "item_name", "description", "production_plan_item", ]: @@ -849,7 +848,7 @@ def get_subitems( FROM `tabBOM Item` bom_item JOIN `tabBOM` bom ON bom.name = bom_item.parent - JOIN tabItem item ON bom_item.item_code = item.name + JOIN `tabItem` item ON bom_item.item_code = item.name LEFT JOIN `tabItem Default` item_default ON item.name = item_default.parent and item_default.company = %(company)s LEFT JOIN `tabUOM Conversion Detail` item_uom @@ -979,7 +978,7 @@ def get_sales_orders(self): select distinct so.name, so.transaction_date, so.customer, so.base_grand_total from `tabSales Order` so, `tabSales Order Item` so_item where so_item.parent = so.name - and so.docstatus = 1 and so.status not in ("Stopped", "Closed") + and so.docstatus = 1 and so.status not in ('Stopped', 'Closed') and so.company = %(company)s and so_item.qty > so_item.work_order_qty {so_filter} {item_filter} and (exists (select name from `tabBOM` bom where {bom_item} diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index 891a497878..040e791e00 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -679,15 +679,23 @@ class TestProductionPlan(FrappeTestCase): self.assertFalse(pp.all_items_completed()) def test_production_plan_planned_qty(self): - pln = create_production_plan(item_code="_Test FG Item", planned_qty=0.55) - pln.make_work_order() - work_order = frappe.db.get_value("Work Order", {"production_plan": pln.name}, "name") - wo_doc = frappe.get_doc("Work Order", work_order) - wo_doc.update( - {"wip_warehouse": "Work In Progress - _TC", "fg_warehouse": "Finished Goods - _TC"} + # Case 1: When Planned Qty is non-integer and UOM is integer. + from erpnext.utilities.transaction_base import UOMMustBeIntegerError + + self.assertRaises( + UOMMustBeIntegerError, create_production_plan, item_code="_Test FG Item", planned_qty=0.55 ) - wo_doc.submit() - self.assertEqual(wo_doc.qty, 0.55) + + # Case 2: When Planned Qty is non-integer and UOM is also non-integer. + from erpnext.stock.doctype.item.test_item import make_item + + fg_item = make_item(properties={"is_stock_item": 1, "stock_uom": "_Test UOM 1"}).name + bom_item = make_item().name + + make_bom(item=fg_item, raw_materials=[bom_item], source_warehouse="_Test Warehouse - _TC") + + pln = create_production_plan(item_code=fg_item, planned_qty=0.55, stock_uom="_Test UOM 1") + self.assertEqual(pln.po_items[0].planned_qty, 0.55) def test_temporary_name_relinking(self): @@ -751,6 +759,7 @@ def create_production_plan(**args): "bom_no": frappe.db.get_value("Item", args.item_code, "default_bom"), "planned_qty": args.planned_qty or 1, "planned_start_date": args.planned_start_date or now_datetime(), + "stock_uom": args.stock_uom or "Nos", }, ) @@ -798,7 +807,6 @@ def make_bom(**args): for item in args.raw_materials: item_doc = frappe.get_doc("Item", item) - bom.append( "items", { diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 2aba48231b..b556d9974a 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -1,6 +1,8 @@ # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt +import copy + import frappe from frappe.tests.utils import FrappeTestCase, change_settings, timeout from frappe.utils import add_days, add_months, cint, flt, now, today @@ -19,6 +21,7 @@ from erpnext.manufacturing.doctype.work_order.work_order import ( ) from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order from erpnext.stock.doctype.item.test_item import create_item, make_item +from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.stock_entry import test_stock_entry from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse from erpnext.stock.utils import get_bin @@ -28,6 +31,7 @@ class TestWorkOrder(FrappeTestCase): def setUp(self): self.warehouse = "_Test Warehouse 2 - _TC" self.item = "_Test Item" + prepare_data_for_backflush_based_on_materials_transferred() def tearDown(self): frappe.db.rollback() @@ -417,7 +421,7 @@ class TestWorkOrder(FrappeTestCase): "doctype": "Item Price", "item_code": "_Test FG Non Stock Item", "price_list_rate": 1000, - "price_list": "Standard Buying", + "price_list": "_Test Price List India", } ).insert(ignore_permissions=True) @@ -426,8 +430,17 @@ class TestWorkOrder(FrappeTestCase): item_code="_Test FG Item", target="_Test Warehouse - _TC", qty=1, basic_rate=100 ) - if not frappe.db.get_value("BOM", {"item": fg_item}): - make_bom(item=fg_item, rate=1000, raw_materials=["_Test FG Item", "_Test FG Non Stock Item"]) + if not frappe.db.get_value("BOM", {"item": fg_item, "docstatus": 1}): + bom = make_bom( + item=fg_item, + rate=1000, + raw_materials=["_Test FG Item", "_Test FG Non Stock Item"], + do_not_save=True, + ) + bom.rm_cost_as_per = "Price List" # non stock item won't have valuation rate + bom.buying_price_list = "_Test Price List India" + bom.currency = "INR" + bom.save() wo = make_wo_order_test_record(production_item=fg_item) @@ -518,6 +531,8 @@ class TestWorkOrder(FrappeTestCase): work_order.cancel() def test_work_order_with_non_transfer_item(self): + frappe.db.set_value("Manufacturing Settings", None, "backflush_raw_materials_based_on", "BOM") + items = {"Finished Good Transfer Item": 1, "_Test FG Item": 1, "_Test FG Item 1": 0} for item, allow_transfer in items.items(): make_item(item, {"include_item_in_manufacturing": allow_transfer}) @@ -1062,7 +1077,7 @@ class TestWorkOrder(FrappeTestCase): sm = frappe.get_doc(make_stock_entry(wo_order.name, "Material Transfer for Manufacture", 100)) for row in sm.get("items"): if row.get("item_code") == "_Test Item": - row.qty = 110 + row.qty = 120 sm.submit() cancel_stock_entry.append(sm.name) @@ -1070,21 +1085,21 @@ class TestWorkOrder(FrappeTestCase): s = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 90)) for row in s.get("items"): if row.get("item_code") == "_Test Item": - self.assertEqual(row.get("qty"), 100) + self.assertEqual(row.get("qty"), 108) s.submit() cancel_stock_entry.append(s.name) s1 = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 5)) for row in s1.get("items"): if row.get("item_code") == "_Test Item": - self.assertEqual(row.get("qty"), 5) + self.assertEqual(row.get("qty"), 6) s1.submit() cancel_stock_entry.append(s1.name) s2 = frappe.get_doc(make_stock_entry(wo_order.name, "Manufacture", 5)) for row in s2.get("items"): if row.get("item_code") == "_Test Item": - self.assertEqual(row.get("qty"), 5) + self.assertEqual(row.get("qty"), 6) cancel_stock_entry.reverse() for ste in cancel_stock_entry: @@ -1194,6 +1209,269 @@ class TestWorkOrder(FrappeTestCase): self.assertEqual(work_order.required_items[0].transferred_qty, 1) self.assertEqual(work_order.required_items[1].transferred_qty, 2) + def test_backflushed_batch_raw_materials_based_on_transferred(self): + frappe.db.set_value( + "Manufacturing Settings", + None, + "backflush_raw_materials_based_on", + "Material Transferred for Manufacture", + ) + + batch_item = "Test Batch MCC Keyboard" + fg_item = "Test FG Item with Batch Raw Materials" + + ste_doc = test_stock_entry.make_stock_entry( + item_code=batch_item, target="Stores - _TC", qty=2, basic_rate=100, do_not_save=True + ) + + ste_doc.append( + "items", + { + "item_code": batch_item, + "item_name": batch_item, + "description": batch_item, + "basic_rate": 100, + "t_warehouse": "Stores - _TC", + "qty": 2, + "uom": "Nos", + "stock_uom": "Nos", + "conversion_factor": 1, + }, + ) + + # Inward raw materials in Stores warehouse + ste_doc.insert() + ste_doc.submit() + + batch_list = sorted([row.batch_no for row in ste_doc.items]) + + wo_doc = make_wo_order_test_record(production_item=fg_item, qty=4) + transferred_ste_doc = frappe.get_doc( + make_stock_entry(wo_doc.name, "Material Transfer for Manufacture", 4) + ) + + transferred_ste_doc.items[0].qty = 2 + transferred_ste_doc.items[0].batch_no = batch_list[0] + + new_row = copy.deepcopy(transferred_ste_doc.items[0]) + new_row.name = "" + new_row.batch_no = batch_list[1] + + # Transferred two batches from Stores to WIP Warehouse + transferred_ste_doc.append("items", new_row) + transferred_ste_doc.submit() + + # First Manufacture stock entry + manufacture_ste_doc1 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 1)) + + # Batch no should be same as transferred Batch no + self.assertEqual(manufacture_ste_doc1.items[0].batch_no, batch_list[0]) + self.assertEqual(manufacture_ste_doc1.items[0].qty, 1) + + manufacture_ste_doc1.submit() + + # Second Manufacture stock entry + manufacture_ste_doc2 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 2)) + + # Batch no should be same as transferred Batch no + self.assertEqual(manufacture_ste_doc2.items[0].batch_no, batch_list[0]) + self.assertEqual(manufacture_ste_doc2.items[0].qty, 1) + self.assertEqual(manufacture_ste_doc2.items[1].batch_no, batch_list[1]) + self.assertEqual(manufacture_ste_doc2.items[1].qty, 1) + + def test_backflushed_serial_no_raw_materials_based_on_transferred(self): + frappe.db.set_value( + "Manufacturing Settings", + None, + "backflush_raw_materials_based_on", + "Material Transferred for Manufacture", + ) + + sn_item = "Test Serial No BTT Headphone" + fg_item = "Test FG Item with Serial No Raw Materials" + + ste_doc = test_stock_entry.make_stock_entry( + item_code=sn_item, target="Stores - _TC", qty=4, basic_rate=100, do_not_save=True + ) + + # Inward raw materials in Stores warehouse + ste_doc.submit() + + serial_nos_list = sorted(get_serial_nos(ste_doc.items[0].serial_no)) + + wo_doc = make_wo_order_test_record(production_item=fg_item, qty=4) + transferred_ste_doc = frappe.get_doc( + make_stock_entry(wo_doc.name, "Material Transfer for Manufacture", 4) + ) + + transferred_ste_doc.items[0].serial_no = "\n".join(serial_nos_list) + transferred_ste_doc.submit() + + # First Manufacture stock entry + manufacture_ste_doc1 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 1)) + + # Serial nos should be same as transferred Serial nos + self.assertEqual(get_serial_nos(manufacture_ste_doc1.items[0].serial_no), serial_nos_list[0:1]) + self.assertEqual(manufacture_ste_doc1.items[0].qty, 1) + + manufacture_ste_doc1.submit() + + # Second Manufacture stock entry + manufacture_ste_doc2 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 2)) + + # Serial nos should be same as transferred Serial nos + self.assertEqual(get_serial_nos(manufacture_ste_doc2.items[0].serial_no), serial_nos_list[1:3]) + self.assertEqual(manufacture_ste_doc2.items[0].qty, 2) + + def test_backflushed_serial_no_batch_raw_materials_based_on_transferred(self): + frappe.db.set_value( + "Manufacturing Settings", + None, + "backflush_raw_materials_based_on", + "Material Transferred for Manufacture", + ) + + sn_batch_item = "Test Batch Serial No WebCam" + fg_item = "Test FG Item with Serial & Batch No Raw Materials" + + ste_doc = test_stock_entry.make_stock_entry( + item_code=sn_batch_item, target="Stores - _TC", qty=2, basic_rate=100, do_not_save=True + ) + + ste_doc.append( + "items", + { + "item_code": sn_batch_item, + "item_name": sn_batch_item, + "description": sn_batch_item, + "basic_rate": 100, + "t_warehouse": "Stores - _TC", + "qty": 2, + "uom": "Nos", + "stock_uom": "Nos", + "conversion_factor": 1, + }, + ) + + # Inward raw materials in Stores warehouse + ste_doc.insert() + ste_doc.submit() + + batch_dict = {row.batch_no: get_serial_nos(row.serial_no) for row in ste_doc.items} + batches = list(batch_dict.keys()) + + wo_doc = make_wo_order_test_record(production_item=fg_item, qty=4) + transferred_ste_doc = frappe.get_doc( + make_stock_entry(wo_doc.name, "Material Transfer for Manufacture", 4) + ) + + transferred_ste_doc.items[0].qty = 2 + transferred_ste_doc.items[0].batch_no = batches[0] + transferred_ste_doc.items[0].serial_no = "\n".join(batch_dict.get(batches[0])) + + new_row = copy.deepcopy(transferred_ste_doc.items[0]) + new_row.name = "" + new_row.batch_no = batches[1] + new_row.serial_no = "\n".join(batch_dict.get(batches[1])) + + # Transferred two batches from Stores to WIP Warehouse + transferred_ste_doc.append("items", new_row) + transferred_ste_doc.submit() + + # First Manufacture stock entry + manufacture_ste_doc1 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 1)) + + # Batch no & Serial Nos should be same as transferred Batch no & Serial Nos + batch_no = manufacture_ste_doc1.items[0].batch_no + self.assertEqual( + get_serial_nos(manufacture_ste_doc1.items[0].serial_no)[0], batch_dict.get(batch_no)[0] + ) + self.assertEqual(manufacture_ste_doc1.items[0].qty, 1) + + manufacture_ste_doc1.submit() + + # Second Manufacture stock entry + manufacture_ste_doc2 = frappe.get_doc(make_stock_entry(wo_doc.name, "Manufacture", 2)) + + # Batch no & Serial Nos should be same as transferred Batch no & Serial Nos + batch_no = manufacture_ste_doc2.items[0].batch_no + self.assertEqual( + get_serial_nos(manufacture_ste_doc2.items[0].serial_no)[0], batch_dict.get(batch_no)[1] + ) + self.assertEqual(manufacture_ste_doc2.items[0].qty, 1) + + batch_no = manufacture_ste_doc2.items[1].batch_no + self.assertEqual( + get_serial_nos(manufacture_ste_doc2.items[1].serial_no)[0], batch_dict.get(batch_no)[0] + ) + self.assertEqual(manufacture_ste_doc2.items[1].qty, 1) + + +def prepare_data_for_backflush_based_on_materials_transferred(): + batch_item_doc = make_item( + "Test Batch MCC Keyboard", + { + "is_stock_item": 1, + "has_batch_no": 1, + "create_new_batch": 1, + "batch_number_series": "TBMK.#####", + "valuation_rate": 100, + "stock_uom": "Nos", + }, + ) + + item = make_item( + "Test FG Item with Batch Raw Materials", + { + "is_stock_item": 1, + }, + ) + + make_bom(item=item.name, source_warehouse="Stores - _TC", raw_materials=[batch_item_doc.name]) + + sn_item_doc = make_item( + "Test Serial No BTT Headphone", + { + "is_stock_item": 1, + "has_serial_no": 1, + "serial_no_series": "TSBH.#####", + "valuation_rate": 100, + "stock_uom": "Nos", + }, + ) + + item = make_item( + "Test FG Item with Serial No Raw Materials", + { + "is_stock_item": 1, + }, + ) + + make_bom(item=item.name, source_warehouse="Stores - _TC", raw_materials=[sn_item_doc.name]) + + sn_batch_item_doc = make_item( + "Test Batch Serial No WebCam", + { + "is_stock_item": 1, + "has_batch_no": 1, + "create_new_batch": 1, + "batch_number_series": "TBSW.#####", + "has_serial_no": 1, + "serial_no_series": "TBSWC.#####", + "valuation_rate": 100, + "stock_uom": "Nos", + }, + ) + + item = make_item( + "Test FG Item with Serial & Batch No Raw Materials", + { + "is_stock_item": 1, + }, + ) + + make_bom(item=item.name, source_warehouse="Stores - _TC", raw_materials=[sn_batch_item_doc.name]) + def update_job_card(job_card, jc_qty=None): employee = frappe.db.get_value("Employee", {"status": "Active"}, "name") diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 2802310250..7b8625372a 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -939,7 +939,7 @@ class WorkOrder(Document): from `tabStock Entry` entry, `tabStock Entry Detail` detail where entry.work_order = %(name)s - and entry.purpose = "Material Transfer for Manufacture" + and entry.purpose = 'Material Transfer for Manufacture' and entry.docstatus = 1 and detail.parent = entry.name and (detail.item_code = %(item)s or detail.original_item = %(item)s)""", diff --git a/erpnext/manufacturing/report/bom_explorer/bom_explorer.py b/erpnext/manufacturing/report/bom_explorer/bom_explorer.py index ac2f61c5de..2aa31be0f0 100644 --- a/erpnext/manufacturing/report/bom_explorer/bom_explorer.py +++ b/erpnext/manufacturing/report/bom_explorer/bom_explorer.py @@ -21,7 +21,7 @@ def get_exploded_items(bom, data, indent=0, qty=1): exploded_items = frappe.get_all( "BOM Item", filters={"parent": bom}, - fields=["qty", "bom_no", "qty", "scrap", "item_code", "item_name", "description", "uom"], + fields=["qty", "bom_no", "qty", "item_code", "item_name", "description", "uom"], ) for item in exploded_items: @@ -37,7 +37,6 @@ def get_exploded_items(bom, data, indent=0, qty=1): "qty": item.qty * qty, "uom": item.uom, "description": item.description, - "scrap": item.scrap, } ) if item.bom_no: @@ -64,5 +63,4 @@ def get_columns(): "fieldname": "description", "width": 150, }, - {"label": _("Scrap"), "fieldtype": "data", "fieldname": "scrap", "width": 100}, ] diff --git a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py index 3fe2198966..da283435b9 100644 --- a/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py +++ b/erpnext/manufacturing/report/bom_variance_report/bom_variance_report.py @@ -102,7 +102,7 @@ def get_work_orders(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """select name from `tabWork Order` where name like %(name)s and {0} and produced_qty > qty and docstatus = 1 - order by name limit {1}, {2}""".format( + order by name limit {2} offset {1}""".format( cond, start, page_len ), {"name": "%%%s%%" % txt}, diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py index a86c7a47c3..5083b7369d 100644 --- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py +++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py @@ -36,7 +36,7 @@ def get_data(filters): "total_time_in_mins", ] - for field in ["work_order", "workstation", "operation", "company"]: + for field in ["work_order", "workstation", "operation", "status", "company"]: if filters.get(field): query_filters[field] = ("in", filters.get(field)) diff --git a/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py b/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py index 0a79130f1b..de96a6c032 100644 --- a/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py +++ b/erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py @@ -34,8 +34,7 @@ def get_data(filters): if filters.get(field): query_filters[field] = ("in", filters.get(field)) - query_filters["report_date"] = (">=", filters.get("from_date")) - query_filters["report_date"] = ("<=", filters.get("to_date")) + query_filters["report_date"] = ["between", [filters.get("from_date"), filters.get("to_date")]] return frappe.get_all( "Quality Inspection", fields=fields, filters=query_filters, order_by="report_date asc" diff --git a/erpnext/manufacturing/workspace/manufacturing/manufacturing.json b/erpnext/manufacturing/workspace/manufacturing/manufacturing.json index 05ca2a8452..549f5afc70 100644 --- a/erpnext/manufacturing/workspace/manufacturing/manufacturing.json +++ b/erpnext/manufacturing/workspace/manufacturing/manufacturing.json @@ -1,6 +1,6 @@ { "charts": [], - "content": "[{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Item\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Work Order\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Plan\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Forecasting\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Work Order Summary\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Stock Report\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Planning Report\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Production\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Bill of Materials\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}}]", + "content": "[{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Plan\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Work Order\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Job Card\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Forecasting\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"BOM Stock Report\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Production Planning Report\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Production\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Bill of Materials\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Tools\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}}]", "creation": "2020-03-02 17:11:37.032604", "docstatus": 0, "doctype": "Workspace", @@ -402,51 +402,48 @@ "type": "Link" } ], - "modified": "2022-01-13 17:40:09.474747", + "modified": "2022-06-15 15:18:57.062935", "modified_by": "Administrator", "module": "Manufacturing", "name": "Manufacturing", "owner": "Administrator", "parent_page": "", "public": 1, - "restrict_to_domain": "Manufacturing", + "quick_lists": [], + "restrict_to_domain": "", "roles": [], "sequence_id": 17.0, "shortcuts": [ { - "color": "Green", - "format": "{} Active", - "label": "Item", - "link_to": "Item", - "restrict_to_domain": "Manufacturing", - "stats_filter": "{\n \"disabled\": 0\n}", - "type": "DocType" - }, - { - "color": "Green", - "format": "{} Active", + "color": "Grey", + "doc_view": "List", "label": "BOM", "link_to": "BOM", - "restrict_to_domain": "Manufacturing", - "stats_filter": "{\n \"is_active\": 1\n}", + "stats_filter": "{\"is_active\":[\"=\",1]}", "type": "DocType" }, { - "color": "Yellow", - "format": "{} Open", - "label": "Work Order", - "link_to": "Work Order", - "restrict_to_domain": "Manufacturing", - "stats_filter": "{ \n \"status\": [\"in\", \n [\"Draft\", \"Not Started\", \"In Process\"]\n ]\n}", - "type": "DocType" - }, - { - "color": "Yellow", - "format": "{} Open", + "color": "Grey", + "doc_view": "List", "label": "Production Plan", "link_to": "Production Plan", - "restrict_to_domain": "Manufacturing", - "stats_filter": "{ \n \"status\": [\"not in\", [\"Completed\"]]\n}", + "stats_filter": "{\"status\":[\"not in\",[\"Closed\",\"Cancelled\",\"Completed\"]]}", + "type": "DocType" + }, + { + "color": "Grey", + "doc_view": "List", + "label": "Work Order", + "link_to": "Work Order", + "stats_filter": "{\"status\":[\"not in\",[\"Closed\",\"Cancelled\",\"Completed\"]]}", + "type": "DocType" + }, + { + "color": "Grey", + "doc_view": "List", + "label": "Job Card", + "link_to": "Job Card", + "stats_filter": "{\"status\":[\"not in\",[\"Cancelled\",\"Completed\",null]]}", "type": "DocType" }, { @@ -454,12 +451,6 @@ "link_to": "Exponential Smoothing Forecasting", "type": "Report" }, - { - "label": "Work Order Summary", - "link_to": "Work Order Summary", - "restrict_to_domain": "Manufacturing", - "type": "Report" - }, { "label": "BOM Stock Report", "link_to": "BOM Stock Report", @@ -469,12 +460,6 @@ "label": "Production Planning Report", "link_to": "Production Planning Report", "type": "Report" - }, - { - "label": "Dashboard", - "link_to": "Manufacturing", - "restrict_to_domain": "Manufacturing", - "type": "Dashboard" } ], "title": "Manufacturing" diff --git a/erpnext/modules.txt b/erpnext/modules.txt index 869166b939..af962971d2 100644 --- a/erpnext/modules.txt +++ b/erpnext/modules.txt @@ -4,7 +4,6 @@ Buying Projects Selling Setup -HR Manufacturing Stock Support @@ -17,7 +16,7 @@ ERPNext Integrations Quality Management Communication Loan Management -Payroll Telephony Bulk Transaction E-commerce +Subcontracting \ No newline at end of file diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d5b15922ec..1d5f5d7f99 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -6,39 +6,28 @@ erpnext.patches.v11_0.refactor_naming_series erpnext.patches.v11_0.refactor_autoname_naming erpnext.patches.v14_0.change_is_subcontracted_fieldtype execute:frappe.reload_doc("accounts", "doctype", "POS Payment Method") #2020-05-28 -execute:frappe.reload_doc("HR", "doctype", "HR Settings") #2020-01-16 #2020-07-24 erpnext.patches.v4_2.update_requested_and_ordered_qty #2021-03-31 erpnext.patches.v5_7.update_item_description_based_on_item_master erpnext.patches.v4_2.repost_reserved_qty #2021-03-31 -execute:frappe.reload_doc("Payroll", "doctype", "salary_slip") -erpnext.patches.v8_1.setup_gst_india #2017-06-27 erpnext.patches.v8_1.removed_roles_from_gst_report_non_indian_account #16-08-2018 -erpnext.patches.v8_7.sync_india_custom_fields erpnext.patches.v10_0.fichier_des_ecritures_comptables_for_france erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule erpnext.patches.v10_0.set_currency_in_pricing_rule erpnext.patches.v10_0.update_translatable_fields -erpnext.patches.v10_0.rename_offer_letter_to_job_offer execute:frappe.delete_doc('DocType', 'Production Planning Tool', ignore_missing=True) -erpnext.patches.v10_0.migrate_daily_work_summary_settings_to_daily_work_summary_group # 24-12-2018 erpnext.patches.v10_0.add_default_cash_flow_mappers erpnext.patches.v11_0.rename_duplicate_item_code_values erpnext.patches.v11_0.make_quality_inspection_template erpnext.patches.v11_0.merge_land_unit_with_location erpnext.patches.v11_0.add_index_on_nestedset_doctypes erpnext.patches.v11_0.remove_modules_setup_page -erpnext.patches.v11_0.move_leave_approvers_from_employee #13-06-2018 erpnext.patches.v11_0.update_department_lft_rgt -erpnext.patches.v11_0.add_default_email_template_for_leave -erpnext.patches.v11_0.set_default_email_template_in_hr #08-06-2018 erpnext.patches.v11_0.uom_conversion_data #30-06-2018 erpnext.patches.v11_0.update_account_type_in_party_type erpnext.patches.v11_0.rename_supplier_type_to_supplier_group erpnext.patches.v10_1.transfer_subscription_to_auto_repeat erpnext.patches.v11_0.update_brand_in_item_price erpnext.patches.v11_0.create_default_success_action -erpnext.patches.v11_0.rename_field_max_days_allowed -erpnext.patches.v11_0.create_salary_structure_assignments erpnext.patches.v11_0.rebuild_tree_for_company erpnext.patches.v11_0.create_department_records_for_each_company erpnext.patches.v11_0.make_location_from_warehouse @@ -47,16 +36,13 @@ erpnext.patches.v11_0.check_buying_selling_in_currency_exchange erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany #02-07-2018 #19-06-2019 erpnext.patches.v11_0.rename_overproduction_percent_field erpnext.patches.v11_0.update_backflush_subcontract_rm_based_on_bom -erpnext.patches.v11_0.inter_state_field_for_gst erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018 erpnext.patches.v11_0.set_update_field_and_value_in_workflow_state erpnext.patches.v11_0.update_total_qty_field erpnext.patches.v11_0.update_sales_partner_type erpnext.patches.v11_0.rename_asset_adjustment_doctype -erpnext.patches.v11_0.set_salary_component_properties erpnext.patches.v11_0.set_user_permissions_for_department erpnext.patches.v11_0.hr_ux_cleanups -erpnext.patches.v11_0.skip_user_permission_check_for_department erpnext.patches.v11_0.set_department_for_doctypes erpnext.patches.v11_0.update_allow_transfer_for_manufacture erpnext.patches.v11_0.add_item_group_defaults @@ -69,20 +55,13 @@ execute:frappe.delete_doc_if_exists("Page", "sales-analytics") execute:frappe.delete_doc_if_exists("Page", "purchase-analytics") execute:frappe.delete_doc_if_exists("Page", "stock-analytics") execute:frappe.delete_doc_if_exists("Page", "production-analytics") -erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13 #2019-01-09 #2019-04-01 #2019-04-26 #2019-05-03 -erpnext.patches.v11_0.drop_column_max_days_allowed erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019 erpnext.patches.v11_0.update_delivery_trip_status -erpnext.patches.v11_0.set_missing_gst_hsn_code erpnext.patches.v11_0.rename_bom_wo_fields erpnext.patches.v12_0.set_default_homepage_type -erpnext.patches.v11_0.rename_additional_salary_component_additional_salary erpnext.patches.v11_0.renamed_from_to_fields_in_project -erpnext.patches.v11_0.add_permissions_in_gst_settings #2020-04-04 erpnext.patches.v11_1.setup_guardian_role execute:frappe.delete_doc('DocType', 'Notification Control') -erpnext.patches.v12_0.set_gst_category -erpnext.patches.v12_0.update_gst_category erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants erpnext.patches.v12_0.set_task_status erpnext.patches.v11_0.make_italian_localization_fields # 26-03-2019 @@ -97,7 +76,6 @@ erpnext.patches.v12_0.make_item_manufacturer erpnext.patches.v12_0.move_item_tax_to_item_tax_template erpnext.patches.v11_1.set_variant_based_on erpnext.patches.v11_1.woocommerce_set_creation_user -erpnext.patches.v11_1.set_salary_details_submittable erpnext.patches.v11_1.rename_depends_on_lwp execute:frappe.delete_doc("Report", "Inactive Items") erpnext.patches.v11_1.delete_scheduling_tool @@ -119,7 +97,6 @@ execute:frappe.delete_doc("DocType", "Project Task") erpnext.patches.v11_1.update_default_supplier_in_item_defaults erpnext.patches.v12_0.update_due_date_in_gle erpnext.patches.v12_0.add_default_buying_selling_terms_in_company -erpnext.patches.v12_0.update_ewaybill_field_position erpnext.patches.v12_0.create_accounting_dimensions_in_missing_doctypes #2020-05-11 erpnext.patches.v11_1.set_status_for_material_request_type_manufacture erpnext.patches.v12_0.move_plaid_settings_to_doctype @@ -129,7 +106,6 @@ execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_source') execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart') execute:frappe.reload_doc('desk', 'doctype', 'dashboard_chart_field') erpnext.patches.v12_0.remove_bank_remittance_custom_fields -erpnext.patches.v12_0.generate_leave_ledger_entries #04-11-2020 execute:frappe.delete_doc_if_exists("Report", "Loan Repayment") erpnext.patches.v12_0.move_credit_limit_to_customer_credit_limit erpnext.patches.v12_0.add_variant_of_in_item_attribute_table @@ -142,17 +118,13 @@ erpnext.patches.v12_0.replace_accounting_with_accounts_in_home_settings erpnext.patches.v12_0.set_automatically_process_deferred_accounting_in_accounts_settings erpnext.patches.v12_0.set_payment_entry_status erpnext.patches.v12_0.update_owner_fields_in_acc_dimension_custom_fields -erpnext.patches.v12_0.add_export_type_field_in_party_master -erpnext.patches.v12_0.remove_denied_leaves_from_leave_ledger erpnext.patches.v12_0.update_price_or_product_discount erpnext.patches.v12_0.set_production_capacity_in_workstation erpnext.patches.v12_0.set_employee_preferred_emails erpnext.patches.v12_0.set_against_blanket_order_in_sales_and_purchase_order erpnext.patches.v12_0.set_cost_center_in_child_table_of_expense_claim -erpnext.patches.v12_0.add_eway_bill_in_delivery_note erpnext.patches.v12_0.set_lead_title_field erpnext.patches.v12_0.set_permission_einvoicing -erpnext.patches.v12_0.set_job_offer_applicant_email erpnext.patches.v12_0.create_irs_1099_field_united_states erpnext.patches.v12_0.move_bank_account_swift_number_to_bank erpnext.patches.v12_0.rename_bank_reconciliation @@ -165,17 +137,11 @@ erpnext.patches.v12_0.recalculate_requested_qty_in_bin erpnext.patches.v12_0.set_total_batch_quantity erpnext.patches.v12_0.rename_mws_settings_fields erpnext.patches.v12_0.set_updated_purpose_in_pick_list -erpnext.patches.v12_0.set_default_payroll_based_on erpnext.patches.v12_0.repost_stock_ledger_entries_for_target_warehouse erpnext.patches.v12_0.update_end_date_and_status_in_email_campaign -erpnext.patches.v13_0.move_tax_slabs_from_payroll_period_to_income_tax_slab #123 erpnext.patches.v12_0.fix_quotation_expired_status erpnext.patches.v12_0.rename_pos_closing_doctype erpnext.patches.v13_0.replace_pos_payment_mode_table #2020-12-29 -erpnext.patches.v12_0.remove_duplicate_leave_ledger_entries #2020-05-22 -erpnext.patches.v13_0.patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive -execute:frappe.reload_doc("HR", "doctype", "Employee Advance") -erpnext.patches.v12_0.move_due_advance_amount_to_pending_amount execute:frappe.delete_doc_if_exists("Page", "appointment-analytic") execute:frappe.rename_doc("Desk Page", "Getting Started", "Home", force=True) erpnext.patches.v12_0.unset_customer_supplier_based_on_type_of_item_price @@ -197,16 +163,11 @@ erpnext.patches.v12_0.set_italian_import_supplier_invoice_permissions erpnext.patches.v13_0.update_subscription erpnext.patches.v12_0.unhide_cost_center_field erpnext.patches.v13_0.update_sla_enhancements -erpnext.patches.v12_0.update_address_template_for_india erpnext.patches.v13_0.update_deferred_settings erpnext.patches.v12_0.set_multi_uom_in_rfq erpnext.patches.v13_0.delete_old_sales_reports execute:frappe.delete_doc_if_exists("DocType", "Bank Reconciliation") -erpnext.patches.v13_0.move_doctype_reports_and_notification_from_hr_to_payroll #22-06-2020 -erpnext.patches.v13_0.move_payroll_setting_separately_from_hr_settings #22-06-2020 -erpnext.patches.v12_0.create_itc_reversal_custom_fields execute:frappe.reload_doc("regional", "doctype", "e_invoice_settings") -erpnext.patches.v13_0.check_is_income_tax_component #22-06-2020 erpnext.patches.v13_0.loyalty_points_entry_for_pos_invoice #22-07-2020 erpnext.patches.v12_0.add_taxjar_integration_field erpnext.patches.v12_0.fix_percent_complete_for_projects @@ -215,59 +176,40 @@ erpnext.patches.v12_0.update_item_tax_template_company erpnext.patches.v13_0.move_branch_code_to_bank_account erpnext.patches.v13_0.add_standard_navbar_items #2021-03-24 erpnext.patches.v13_0.stock_entry_enhancements -erpnext.patches.v12_0.update_state_code_for_daman_and_diu erpnext.patches.v12_0.rename_lost_reason_detail erpnext.patches.v13_0.drop_razorpay_payload_column -erpnext.patches.v13_0.update_start_end_date_for_old_shift_assignment -erpnext.patches.v13_0.setting_custom_roles_for_some_regional_reports erpnext.patches.v13_0.rename_issue_doctype_fields erpnext.patches.v13_0.change_default_pos_print_format erpnext.patches.v13_0.set_youtube_video_id erpnext.patches.v13_0.set_app_name erpnext.patches.v13_0.print_uom_after_quantity_patch erpnext.patches.v13_0.set_payment_channel_in_payment_gateway_account -erpnext.patches.v12_0.setup_einvoice_fields #2020-12-02 -erpnext.patches.v13_0.updates_for_multi_currency_payroll -erpnext.patches.v13_0.update_reason_for_resignation_in_employee execute:frappe.delete_doc("Report", "Quoted Item Comparison") erpnext.patches.v13_0.update_member_email_address -erpnext.patches.v13_0.create_leave_policy_assignment_based_on_employee_current_leave_policy erpnext.patches.v13_0.update_pos_closing_entry_in_merge_log erpnext.patches.v13_0.add_po_to_global_search erpnext.patches.v13_0.update_returned_qty_in_pr_dn execute:frappe.rename_doc("Workspace", "Loan", "Loan Management", ignore_if_exists=True, force=True) erpnext.patches.v13_0.create_uae_pos_invoice_fields erpnext.patches.v13_0.update_project_template_tasks -erpnext.patches.v13_0.set_company_in_leave_ledger_entry erpnext.patches.v13_0.convert_qi_parameter_to_link_field erpnext.patches.v13_0.add_naming_series_to_old_projects # 1-02-2021 erpnext.patches.v13_0.update_payment_terms_outstanding -erpnext.patches.v12_0.add_state_code_for_ladakh erpnext.patches.v13_0.item_reposting_for_incorrect_sl_and_gl erpnext.patches.v13_0.delete_old_bank_reconciliation_doctypes erpnext.patches.v13_0.update_vehicle_no_reqd_condition -erpnext.patches.v12_0.add_einvoice_status_field #2021-03-17 -erpnext.patches.v12_0.add_einvoice_summary_report_permissions -erpnext.patches.v13_0.setup_fields_for_80g_certificate_and_donation erpnext.patches.v13_0.rename_membership_settings_to_non_profit_settings -erpnext.patches.v13_0.setup_gratuity_rule_for_india_and_uae erpnext.patches.v13_0.setup_uae_vat_fields execute:frappe.db.set_value('System Settings', None, 'app_name', 'ERPNext') -erpnext.patches.v12_0.create_taxable_value_field -erpnext.patches.v12_0.add_gst_category_in_delivery_note erpnext.patches.v12_0.purchase_receipt_status erpnext.patches.v13_0.fix_non_unique_represents_company erpnext.patches.v12_0.add_document_type_field_for_italy_einvoicing -erpnext.patches.v13_0.make_non_standard_user_type #13-04-2021 #17-01-2022 erpnext.patches.v13_0.update_shipment_status erpnext.patches.v13_0.remove_attribute_field_from_item_variant_setting -erpnext.patches.v12_0.add_ewaybill_validity_field erpnext.patches.v13_0.set_pos_closing_as_failed -erpnext.patches.v13_0.rename_stop_to_send_birthday_reminders execute:frappe.rename_doc("Workspace", "Loan Management", "Loans", force=True) erpnext.patches.v13_0.update_timesheet_changes erpnext.patches.v13_0.add_doctype_to_sla #14-06-2021 -erpnext.patches.v13_0.set_training_event_attendance erpnext.patches.v13_0.bill_for_rejected_quantity_in_purchase_invoice erpnext.patches.v13_0.rename_issue_status_hold_to_on_hold erpnext.patches.v13_0.update_response_by_variance @@ -275,9 +217,7 @@ erpnext.patches.v13_0.update_job_card_details erpnext.patches.v13_0.add_missing_fg_item_for_stock_entry erpnext.patches.v13_0.update_subscription_status_in_memberships erpnext.patches.v13_0.update_amt_in_work_order_required_items -erpnext.patches.v12_0.show_einvoice_irn_cancelled_field erpnext.patches.v13_0.delete_orphaned_tables -erpnext.patches.v13_0.update_export_type_for_gst #2021-08-16 erpnext.patches.v13_0.update_tds_check_field #3 erpnext.patches.v13_0.add_custom_field_for_south_africa #2 erpnext.patches.v13_0.update_recipient_email_digest @@ -298,14 +238,11 @@ erpnext.patches.v13_0.make_homepage_products_website_items erpnext.patches.v13_0.replace_supplier_item_group_with_party_specific_item erpnext.patches.v13_0.update_dates_in_tax_withholding_category erpnext.patches.v14_0.update_opportunity_currency_fields -erpnext.patches.v13_0.gst_fields_for_pos_invoice erpnext.patches.v13_0.create_accounting_dimensions_in_pos_doctypes -erpnext.patches.v13_0.trim_sales_invoice_custom_field_length erpnext.patches.v13_0.create_custom_field_for_finance_book erpnext.patches.v13_0.modify_invalid_gain_loss_gl_entries #2 erpnext.patches.v13_0.fix_additional_cost_in_mfg_stock_entry erpnext.patches.v13_0.set_status_in_maintenance_schedule_table -erpnext.patches.v13_0.add_default_interview_notification_templates erpnext.patches.v13_0.enable_scheduler_job_for_item_reposting erpnext.patches.v13_0.requeue_failed_reposts erpnext.patches.v13_0.update_job_card_status @@ -313,9 +250,7 @@ erpnext.patches.v13_0.enable_uoms erpnext.patches.v12_0.update_production_plan_status erpnext.patches.v13_0.healthcare_deprecation_warning erpnext.patches.v13_0.item_naming_series_not_mandatory -erpnext.patches.v14_0.delete_healthcare_doctypes erpnext.patches.v13_0.update_category_in_ltds_certificate -erpnext.patches.v13_0.create_pan_field_for_india #2 erpnext.patches.v13_0.fetch_thumbnail_in_website_items erpnext.patches.v13_0.update_maintenance_schedule_field_in_visit erpnext.patches.v13_0.create_ksa_vat_custom_fields # 07-01-2022 @@ -323,9 +258,6 @@ erpnext.patches.v14_0.migrate_crm_settings erpnext.patches.v13_0.rename_ksa_qr_field erpnext.patches.v13_0.wipe_serial_no_field_for_0_qty erpnext.patches.v13_0.disable_ksa_print_format_for_others # 16-12-2021 -erpnext.patches.v13_0.update_tax_category_for_rcm -execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings') -erpnext.patches.v14_0.set_payroll_cost_centers erpnext.patches.v13_0.agriculture_deprecation_warning erpnext.patches.v13_0.hospitality_deprecation_warning erpnext.patches.v13_0.update_asset_quantity_field @@ -333,21 +265,22 @@ erpnext.patches.v13_0.delete_bank_reconciliation_detail erpnext.patches.v13_0.enable_provisional_accounting erpnext.patches.v13_0.non_profit_deprecation_warning erpnext.patches.v13_0.enable_ksa_vat_docs #1 -erpnext.patches.v14_0.delete_education_doctypes +erpnext.patches.v13_0.show_india_localisation_deprecation_warning +erpnext.patches.v13_0.show_hr_payroll_deprecation_warning +erpnext.patches.v13_0.reset_corrupt_defaults [post_model_sync] +execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings') erpnext.patches.v14_0.rename_ongoing_status_in_sla_documents -erpnext.patches.v14_0.add_default_exit_questionnaire_notification_template erpnext.patches.v14_0.delete_shopify_doctypes +erpnext.patches.v14_0.delete_healthcare_doctypes erpnext.patches.v14_0.delete_hub_doctypes erpnext.patches.v14_0.delete_hospitality_doctypes # 20-01-2022 -erpnext.patches.v14_0.delete_agriculture_doctypes +erpnext.patches.v14_0.delete_agriculture_doctypes # 15-06-2022 +erpnext.patches.v14_0.delete_education_doctypes erpnext.patches.v14_0.delete_datev_doctypes erpnext.patches.v14_0.rearrange_company_fields -erpnext.patches.v14_0.update_leave_notification_template -erpnext.patches.v14_0.restore_einvoice_fields erpnext.patches.v13_0.update_sane_transfer_against -erpnext.patches.v12_0.add_company_link_to_einvoice_settings erpnext.patches.v14_0.migrate_cost_center_allocations erpnext.patches.v13_0.convert_to_website_item_in_item_card_group_template erpnext.patches.v13_0.shopping_cart_to_ecommerce @@ -359,14 +292,20 @@ erpnext.patches.v13_0.set_work_order_qty_in_so_from_mr erpnext.patches.v13_0.update_accounts_in_loan_docs erpnext.patches.v14_0.update_batch_valuation_flag erpnext.patches.v14_0.delete_non_profit_doctypes -erpnext.patches.v14_0.update_employee_advance_status erpnext.patches.v13_0.add_cost_center_in_loans erpnext.patches.v13_0.set_return_against_in_pos_invoice_references erpnext.patches.v13_0.remove_unknown_links_to_prod_plan_items # 24-03-2022 -erpnext.patches.v13_0.update_expense_claim_status_for_paid_advances -erpnext.patches.v13_0.create_gst_custom_fields_in_quotation erpnext.patches.v13_0.copy_custom_field_filters_to_website_item erpnext.patches.v13_0.change_default_item_manufacturer_fieldtype +erpnext.patches.v13_0.requeue_recoverable_reposts erpnext.patches.v14_0.discount_accounting_separation -erpnext.patches.v14_0.delete_employee_transfer_property_doctype -erpnext.patches.v13_0.create_accounting_dimensions_in_orders \ No newline at end of file +erpnext.patches.v13_0.create_accounting_dimensions_in_orders +erpnext.patches.v13_0.set_per_billed_in_return_delivery_note +execute:frappe.delete_doc("DocType", "Naming Series") +erpnext.patches.v13_0.job_card_status_on_hold +erpnext.patches.v14_0.copy_is_subcontracted_value_to_is_old_subcontracting_flow +erpnext.patches.v14_0.migrate_gl_to_payment_ledger +erpnext.patches.v14_0.crm_ux_cleanup +erpnext.patches.v14_0.remove_india_localisation # 14-07-2022 +erpnext.patches.v13_0.fix_number_and_frequency_for_monthly_depreciation +erpnext.patches.v14_0.remove_hr_and_payroll_modules # 20-07-2022 \ No newline at end of file diff --git a/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py b/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py deleted file mode 100644 index 2cbbe055f6..0000000000 --- a/erpnext/patches/v10_0/migrate_daily_work_summary_settings_to_daily_work_summary_group.py +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (c) 2018, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - if not frappe.db.table_exists("Daily Work Summary Group"): - frappe.reload_doc("hr", "doctype", "daily_work_summary_group") - frappe.reload_doc("hr", "doctype", "daily_work_summary_group_user") - - # check if Daily Work Summary Settings Company table exists - try: - frappe.db.sql("DESC `tabDaily Work Summary Settings Company`") - except Exception: - return - - # get the previously saved settings - previous_setting = get_previous_setting() - if previous_setting["companies"]: - for d in previous_setting["companies"]: - users = frappe.get_list( - "Employee", dict(company=d.company, user_id=("!=", " ")), "user_id as user" - ) - if len(users): - # create new group entry for each company entry - new_group = frappe.get_doc( - dict( - doctype="Daily Work Summary Group", - name="Daily Work Summary for " + d.company, - users=users, - send_emails_at=d.send_emails_at, - subject=previous_setting["subject"], - message=previous_setting["message"], - ) - ) - new_group.flags.ignore_permissions = True - new_group.flags.ignore_validate = True - new_group.insert(ignore_if_duplicate=True) - - frappe.delete_doc("DocType", "Daily Work Summary Settings") - frappe.delete_doc("DocType", "Daily Work Summary Settings Company") - - -def get_previous_setting(): - obj = {} - setting_data = frappe.db.sql( - "select field, value from tabSingles where doctype='Daily Work Summary Settings'" - ) - for field, value in setting_data: - obj[field] = value - obj["companies"] = get_setting_companies() - return obj - - -def get_setting_companies(): - return frappe.db.sql("select * from `tabDaily Work Summary Settings Company`", as_dict=True) diff --git a/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py b/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py deleted file mode 100644 index a2deab6225..0000000000 --- a/erpnext/patches/v10_0/rename_offer_letter_to_job_offer.py +++ /dev/null @@ -1,10 +0,0 @@ -import frappe - - -def execute(): - if frappe.db.table_exists("Offer Letter") and not frappe.db.table_exists("Job Offer"): - frappe.rename_doc("DocType", "Offer Letter", "Job Offer", force=True) - frappe.rename_doc("DocType", "Offer Letter Term", "Job Offer Term", force=True) - frappe.reload_doc("hr", "doctype", "job_offer") - frappe.reload_doc("hr", "doctype", "job_offer_term") - frappe.delete_doc("Print Format", "Offer Letter") diff --git a/erpnext/patches/v11_0/add_default_email_template_for_leave.py b/erpnext/patches/v11_0/add_default_email_template_for_leave.py deleted file mode 100644 index 1fddc7f11e..0000000000 --- a/erpnext/patches/v11_0/add_default_email_template_for_leave.py +++ /dev/null @@ -1,38 +0,0 @@ -import os - -import frappe -from frappe import _ - - -def execute(): - frappe.reload_doc("email", "doctype", "email_template") - - if not frappe.db.exists("Email Template", _("Leave Approval Notification")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "leave_application/leave_application_email_template.html") - ) - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Leave Approval Notification"), - "response": response, - "subject": _("Leave Approval Notification"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - - if not frappe.db.exists("Email Template", _("Leave Status Notification")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "leave_application/leave_application_email_template.html") - ) - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Leave Status Notification"), - "response": response, - "subject": _("Leave Status Notification"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) diff --git a/erpnext/patches/v11_0/add_permissions_in_gst_settings.py b/erpnext/patches/v11_0/add_permissions_in_gst_settings.py deleted file mode 100644 index f3429ef1c9..0000000000 --- a/erpnext/patches/v11_0/add_permissions_in_gst_settings.py +++ /dev/null @@ -1,13 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import add_permissions - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.reload_doc("regional", "doctype", "lower_deduction_certificate") - frappe.reload_doc("regional", "doctype", "gstr_3b_report") - add_permissions() diff --git a/erpnext/patches/v11_0/create_salary_structure_assignments.py b/erpnext/patches/v11_0/create_salary_structure_assignments.py deleted file mode 100644 index b81e867b9d..0000000000 --- a/erpnext/patches/v11_0/create_salary_structure_assignments.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2017, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -from datetime import datetime - -import frappe -from frappe.utils import getdate - -from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import ( - DuplicateAssignment, -) - - -def execute(): - frappe.reload_doc("Payroll", "doctype", "Salary Structure") - frappe.reload_doc("Payroll", "doctype", "Salary Structure Assignment") - frappe.db.sql( - """ - delete from `tabSalary Structure Assignment` - where salary_structure in (select name from `tabSalary Structure` where is_active='No' or docstatus!=1) - """ - ) - if frappe.db.table_exists("Salary Structure Employee"): - ss_details = frappe.db.sql( - """ - select sse.employee, sse.employee_name, sse.from_date, sse.to_date, - sse.base, sse.variable, sse.parent as salary_structure, ss.company - from `tabSalary Structure Employee` sse, `tabSalary Structure` ss - where ss.name = sse.parent AND ss.is_active='Yes' - AND sse.employee in (select name from `tabEmployee` where ifNull(status, '') != 'Left')""", - as_dict=1, - ) - else: - cols = "" - if "base" in frappe.db.get_table_columns("Salary Structure"): - cols = ", base, variable" - - ss_details = frappe.db.sql( - """ - select name as salary_structure, employee, employee_name, from_date, to_date, company {0} - from `tabSalary Structure` - where is_active='Yes' - AND employee in (select name from `tabEmployee` where ifNull(status, '') != 'Left') - """.format( - cols - ), - as_dict=1, - ) - - all_companies = frappe.db.get_all("Company", fields=["name", "default_currency"]) - for d in all_companies: - company = d.name - company_currency = d.default_currency - - frappe.db.sql( - """update `tabSalary Structure` set currency = %s where company=%s""", - (company_currency, company), - ) - - for d in ss_details: - try: - joining_date, relieving_date = frappe.db.get_value( - "Employee", d.employee, ["date_of_joining", "relieving_date"] - ) - from_date = d.from_date - if joining_date and getdate(from_date) < joining_date: - from_date = joining_date - elif relieving_date and getdate(from_date) > relieving_date: - continue - company_currency = frappe.db.get_value("Company", d.company, "default_currency") - - s = frappe.new_doc("Salary Structure Assignment") - s.employee = d.employee - s.employee_name = d.employee_name - s.salary_structure = d.salary_structure - s.from_date = from_date - s.to_date = d.to_date if isinstance(d.to_date, datetime) else None - s.base = d.get("base") - s.variable = d.get("variable") - s.company = d.company - s.currency = company_currency - - # to migrate the data of the old employees - s.flags.old_employee = True - s.save() - s.submit() - except DuplicateAssignment: - pass - - frappe.db.sql("update `tabSalary Structure` set docstatus=1") diff --git a/erpnext/patches/v11_0/drop_column_max_days_allowed.py b/erpnext/patches/v11_0/drop_column_max_days_allowed.py deleted file mode 100644 index 4b4770d809..0000000000 --- a/erpnext/patches/v11_0/drop_column_max_days_allowed.py +++ /dev/null @@ -1,7 +0,0 @@ -import frappe - - -def execute(): - if frappe.db.exists("DocType", "Leave Type"): - if "max_days_allowed" in frappe.db.get_table_columns("Leave Type"): - frappe.db.sql("alter table `tabLeave Type` drop column max_days_allowed") diff --git a/erpnext/patches/v11_0/ewaybill_fields_gst_india.py b/erpnext/patches/v11_0/ewaybill_fields_gst_india.py deleted file mode 100644 index 7a06d52242..0000000000 --- a/erpnext/patches/v11_0/ewaybill_fields_gst_india.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - make_custom_fields() diff --git a/erpnext/patches/v11_0/inter_state_field_for_gst.py b/erpnext/patches/v11_0/inter_state_field_for_gst.py deleted file mode 100644 index b8510297c2..0000000000 --- a/erpnext/patches/v11_0/inter_state_field_for_gst.py +++ /dev/null @@ -1,98 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - frappe.reload_doc("Payroll", "doctype", "Employee Tax Exemption Declaration") - frappe.reload_doc("Payroll", "doctype", "Employee Tax Exemption Proof Submission") - frappe.reload_doc("hr", "doctype", "Employee Grade") - frappe.reload_doc("hr", "doctype", "Leave Policy") - - frappe.reload_doc("accounts", "doctype", "Bank Account") - frappe.reload_doc("accounts", "doctype", "Tax Withholding Category") - frappe.reload_doc("accounts", "doctype", "Allowed To Transact With") - frappe.reload_doc("accounts", "doctype", "Finance Book") - frappe.reload_doc("accounts", "doctype", "Loyalty Program") - - frappe.reload_doc("stock", "doctype", "Item Barcode") - - make_custom_fields() - - frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges") - frappe.reload_doc("accounts", "doctype", "purchase_taxes_and_charges") - frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges_template") - frappe.reload_doc("accounts", "doctype", "purchase_taxes_and_charges_template") - - # set is_inter_state in Taxes And Charges Templates - if frappe.db.has_column( - "Sales Taxes and Charges Template", "is_inter_state" - ) and frappe.db.has_column("Purchase Taxes and Charges Template", "is_inter_state"): - - igst_accounts = set( - frappe.db.sql_list( - '''SELECT igst_account from `tabGST Account` WHERE parent = "GST Settings"''' - ) - ) - cgst_accounts = set( - frappe.db.sql_list( - '''SELECT cgst_account FROM `tabGST Account` WHERE parenttype = "GST Settings"''' - ) - ) - - when_then_sales = get_formatted_data("Sales Taxes and Charges", igst_accounts, cgst_accounts) - when_then_purchase = get_formatted_data( - "Purchase Taxes and Charges", igst_accounts, cgst_accounts - ) - - if when_then_sales: - frappe.db.sql( - """update `tabSales Taxes and Charges Template` - set is_inter_state = Case {when_then} Else 0 End - """.format( - when_then=" ".join(when_then_sales) - ) - ) - - if when_then_purchase: - frappe.db.sql( - """update `tabPurchase Taxes and Charges Template` - set is_inter_state = Case {when_then} Else 0 End - """.format( - when_then=" ".join(when_then_purchase) - ) - ) - - -def get_formatted_data(doctype, igst_accounts, cgst_accounts): - # fetch all the rows data from child table - all_details = frappe.db.sql( - ''' - select parent, account_head from `tab{doctype}` - where parenttype="{doctype} Template"'''.format( - doctype=doctype - ), - as_dict=True, - ) - - # group the data in the form "parent: [list of accounts]"" - group_detail = {} - for i in all_details: - if not i["parent"] in group_detail: - group_detail[i["parent"]] = [] - for j in all_details: - if i["parent"] == j["parent"]: - group_detail[i["parent"]].append(j["account_head"]) - - # form when_then condition based on - if list of accounts for a document - # matches any account in igst_accounts list and not matches any in cgst_accounts list - when_then = [] - for i in group_detail: - temp = set(group_detail[i]) - if not temp.isdisjoint(igst_accounts) and temp.isdisjoint(cgst_accounts): - when_then.append("""When name='{name}' Then 1""".format(name=i)) - - return when_then diff --git a/erpnext/patches/v11_0/move_leave_approvers_from_employee.py b/erpnext/patches/v11_0/move_leave_approvers_from_employee.py deleted file mode 100644 index f91a7db2a3..0000000000 --- a/erpnext/patches/v11_0/move_leave_approvers_from_employee.py +++ /dev/null @@ -1,34 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field - - -def execute(): - frappe.reload_doc("hr", "doctype", "department_approver") - frappe.reload_doc("hr", "doctype", "employee") - frappe.reload_doc("hr", "doctype", "department") - - if frappe.db.has_column("Department", "leave_approver"): - rename_field("Department", "leave_approver", "leave_approvers") - - if frappe.db.has_column("Department", "expense_approver"): - rename_field("Department", "expense_approver", "expense_approvers") - - if not frappe.db.table_exists("Employee Leave Approver"): - return - - approvers = frappe.db.sql( - """select distinct app.leave_approver, emp.department from - `tabEmployee Leave Approver` app, `tabEmployee` emp - where app.parenttype = 'Employee' - and emp.name = app.parent - """, - as_dict=True, - ) - - for record in approvers: - if record.department: - department = frappe.get_doc("Department", record.department) - if not department: - return - if not len(department.leave_approvers): - department.append("leave_approvers", {"approver": record.leave_approver}).db_insert() diff --git a/erpnext/patches/v11_0/refactor_naming_series.py b/erpnext/patches/v11_0/refactor_naming_series.py index cdc92fe61f..9cfb082c1f 100644 --- a/erpnext/patches/v11_0/refactor_naming_series.py +++ b/erpnext/patches/v11_0/refactor_naming_series.py @@ -12,7 +12,6 @@ doctype_series_map = { "Attendance": "HR-ATT-.YYYY.-", "Auto Repeat": "SYS-ARP-.YYYY.-", "Blanket Order": "MFG-BLR-.YYYY.-", - "C-Form": "ACC-CF-.YYYY.-", "Campaign": "SAL-CAM-.YYYY.-", "Course Schedule": "EDU-CSH-.YYYY.-", "Customer": "CUST-.YYYY.-", diff --git a/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py b/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py deleted file mode 100644 index 036ae8ebfc..0000000000 --- a/erpnext/patches/v11_0/rename_additional_salary_component_additional_salary.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe - -# this patch should have been included with this PR https://github.com/frappe/erpnext/pull/14302 - - -def execute(): - if frappe.db.table_exists("Additional Salary Component"): - if not frappe.db.table_exists("Additional Salary"): - frappe.rename_doc("DocType", "Additional Salary Component", "Additional Salary") - - frappe.delete_doc("DocType", "Additional Salary Component") diff --git a/erpnext/patches/v11_0/rename_field_max_days_allowed.py b/erpnext/patches/v11_0/rename_field_max_days_allowed.py deleted file mode 100644 index 0813770efc..0000000000 --- a/erpnext/patches/v11_0/rename_field_max_days_allowed.py +++ /dev/null @@ -1,15 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field - - -def execute(): - frappe.db.sql( - """ - UPDATE `tabLeave Type` - SET max_days_allowed = '0' - WHERE trim(coalesce(max_days_allowed, '')) = '' - """ - ) - frappe.db.sql_ddl("""ALTER table `tabLeave Type` modify max_days_allowed int(8) NOT NULL""") - frappe.reload_doc("hr", "doctype", "leave_type") - rename_field("Leave Type", "max_days_allowed", "max_continuous_days_allowed") diff --git a/erpnext/patches/v11_0/set_default_email_template_in_hr.py b/erpnext/patches/v11_0/set_default_email_template_in_hr.py deleted file mode 100644 index ee083ca4b8..0000000000 --- a/erpnext/patches/v11_0/set_default_email_template_in_hr.py +++ /dev/null @@ -1,9 +0,0 @@ -import frappe -from frappe import _ - - -def execute(): - hr_settings = frappe.get_single("HR Settings") - hr_settings.leave_approval_notification_template = _("Leave Approval Notification") - hr_settings.leave_status_notification_template = _("Leave Status Notification") - hr_settings.save() diff --git a/erpnext/patches/v11_0/set_department_for_doctypes.py b/erpnext/patches/v11_0/set_department_for_doctypes.py index 4900458e10..b784772576 100644 --- a/erpnext/patches/v11_0/set_department_for_doctypes.py +++ b/erpnext/patches/v11_0/set_department_for_doctypes.py @@ -6,19 +6,6 @@ import frappe def execute(): doctypes_to_update = { - "hr": [ - "Appraisal", - "Leave Allocation", - "Expense Claim", - "Salary Slip", - "Attendance", - "Training Feedback", - "Training Result Employee", - "Leave Application", - "Employee Advance", - "Training Event Employee", - "Payroll Employee Detail", - ], "projects": ["Activity Cost", "Timesheet"], "setup": ["Sales Person"], } diff --git a/erpnext/patches/v11_0/set_missing_gst_hsn_code.py b/erpnext/patches/v11_0/set_missing_gst_hsn_code.py deleted file mode 100644 index d9356e758d..0000000000 --- a/erpnext/patches/v11_0/set_missing_gst_hsn_code.py +++ /dev/null @@ -1,64 +0,0 @@ -import frappe - -from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_html - - -def execute(): - company = frappe.db.sql_list("select name from tabCompany where country = 'India'") - if not company: - return - - doctypes = [ - "Quotation", - "Sales Order", - "Delivery Note", - "Sales Invoice", - "Supplier Quotation", - "Purchase Order", - "Purchase Receipt", - "Purchase Invoice", - ] - - for dt in doctypes: - date_field = "posting_date" - if dt in ["Quotation", "Sales Order", "Supplier Quotation", "Purchase Order"]: - date_field = "transaction_date" - - transactions = frappe.db.sql( - """ - select dt.name, dt_item.name as child_name - from `tab{dt}` dt, `tab{dt} Item` dt_item - where dt.name = dt_item.parent - and dt.`{date_field}` > '2018-06-01' - and dt.docstatus = 1 - and ifnull(dt_item.gst_hsn_code, '') = '' - and ifnull(dt_item.item_code, '') != '' - and dt.company in ({company}) - """.format( - dt=dt, date_field=date_field, company=", ".join(["%s"] * len(company)) - ), - tuple(company), - as_dict=1, - ) - - if not transactions: - continue - - transaction_rows_name = [d.child_name for d in transactions] - - frappe.db.sql( - """ - update `tab{dt} Item` dt_item - set dt_item.gst_hsn_code = (select gst_hsn_code from tabItem where name=dt_item.item_code) - where dt_item.name in ({rows_name}) - """.format( - dt=dt, rows_name=", ".join(["%s"] * len(transaction_rows_name)) - ), - tuple(transaction_rows_name), - ) - - parent = set([d.name for d in transactions]) - for t in list(parent): - trans_doc = frappe.get_doc(dt, t) - hsnwise_tax = get_itemised_tax_breakup_html(trans_doc) - frappe.db.set_value(dt, t, "other_charges_calculation", hsnwise_tax, update_modified=False) diff --git a/erpnext/patches/v11_0/set_salary_component_properties.py b/erpnext/patches/v11_0/set_salary_component_properties.py deleted file mode 100644 index 3ec9f8ab29..0000000000 --- a/erpnext/patches/v11_0/set_salary_component_properties.py +++ /dev/null @@ -1,22 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("Payroll", "doctype", "salary_detail") - frappe.reload_doc("Payroll", "doctype", "salary_component") - - frappe.db.sql("update `tabSalary Component` set is_tax_applicable=1 where type='Earning'") - - frappe.db.sql( - """update `tabSalary Component` set variable_based_on_taxable_salary=1 - where type='Deduction' and name in ('TDS', 'Tax Deducted at Source')""" - ) - - frappe.db.sql( - """update `tabSalary Detail` set is_tax_applicable=1 - where parentfield='earnings' and statistical_component=0""" - ) - frappe.db.sql( - """update `tabSalary Detail` set variable_based_on_taxable_salary=1 - where parentfield='deductions' and salary_component in ('TDS', 'Tax Deducted at Source')""" - ) diff --git a/erpnext/patches/v11_0/skip_user_permission_check_for_department.py b/erpnext/patches/v11_0/skip_user_permission_check_for_department.py deleted file mode 100644 index 1327da981e..0000000000 --- a/erpnext/patches/v11_0/skip_user_permission_check_for_department.py +++ /dev/null @@ -1,85 +0,0 @@ -import frappe -from frappe.desk.form.linked_with import get_linked_doctypes - -# Skips user permission check for doctypes where department link field was recently added -# https://github.com/frappe/erpnext/pull/14121 - - -def execute(): - doctypes_to_skip = [] - for doctype in [ - "Appraisal", - "Leave Allocation", - "Expense Claim", - "Instructor", - "Salary Slip", - "Attendance", - "Training Feedback", - "Training Result Employee", - "Leave Application", - "Employee Advance", - "Activity Cost", - "Training Event Employee", - "Timesheet", - "Sales Person", - "Payroll Employee Detail", - ]: - if frappe.db.exists("Custom Field", {"dt": doctype, "fieldname": "department"}): - continue - doctypes_to_skip.append(doctype) - - frappe.reload_doctype("User Permission") - - user_permissions = frappe.get_all( - "User Permission", - filters=[["allow", "=", "Department"], ["applicable_for", "in", [None] + doctypes_to_skip]], - fields=["name", "applicable_for"], - ) - - user_permissions_to_delete = [] - new_user_permissions_list = [] - - for user_permission in user_permissions: - if user_permission.applicable_for: - # simply delete user permission record since it needs to be skipped. - user_permissions_to_delete.append(user_permission.name) - else: - # if applicable_for is `None` it means that user permission is applicable for every doctype - # to avoid this we need to create other user permission records and only skip the listed doctypes in this patch - linked_doctypes = get_linked_doctypes(user_permission.allow, True).keys() - applicable_for_doctypes = list(set(linked_doctypes) - set(doctypes_to_skip)) - - user_permissions_to_delete.append(user_permission.name) - - for doctype in applicable_for_doctypes: - if doctype: - # Maintain sequence (name, user, allow, for_value, applicable_for, apply_to_all_doctypes) - new_user_permissions_list.append( - ( - frappe.generate_hash("", 10), - user_permission.user, - user_permission.allow, - user_permission.for_value, - doctype, - 0, - ) - ) - - if new_user_permissions_list: - frappe.db.sql( - """ - INSERT INTO `tabUser Permission` - (`name`, `user`, `allow`, `for_value`, `applicable_for`, `apply_to_all_doctypes`) - VALUES {}""".format( - ", ".join(["%s"] * len(new_user_permissions_list)) - ), # nosec - tuple(new_user_permissions_list), - ) - - if user_permissions_to_delete: - frappe.db.sql( - "DELETE FROM `tabUser Permission` WHERE `name` IN ({})".format( # nosec - ",".join(["%s"] * len(user_permissions_to_delete)) - ), - tuple(user_permissions_to_delete), - ) diff --git a/erpnext/patches/v11_0/update_department_lft_rgt.py b/erpnext/patches/v11_0/update_department_lft_rgt.py index bca5e9e882..778392ec5f 100644 --- a/erpnext/patches/v11_0/update_department_lft_rgt.py +++ b/erpnext/patches/v11_0/update_department_lft_rgt.py @@ -5,7 +5,7 @@ from frappe.utils.nestedset import rebuild_tree def execute(): """assign lft and rgt appropriately""" - frappe.reload_doc("hr", "doctype", "department") + frappe.reload_doc("setup", "doctype", "department") if not frappe.db.exists("Department", _("All Departments")): frappe.get_doc( {"doctype": "Department", "department_name": _("All Departments"), "is_group": 1} diff --git a/erpnext/patches/v11_1/rename_depends_on_lwp.py b/erpnext/patches/v11_1/rename_depends_on_lwp.py deleted file mode 100644 index 4e71838aa0..0000000000 --- a/erpnext/patches/v11_1/rename_depends_on_lwp.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import scrub -from frappe.model.utils.rename_field import rename_field - - -def execute(): - for doctype in ("Salary Component", "Salary Detail"): - if "depends_on_lwp" in frappe.db.get_table_columns(doctype): - frappe.reload_doc("Payroll", "doctype", scrub(doctype)) - rename_field(doctype, "depends_on_lwp", "depends_on_payment_days") diff --git a/erpnext/patches/v11_1/set_salary_details_submittable.py b/erpnext/patches/v11_1/set_salary_details_submittable.py deleted file mode 100644 index e5ecce6486..0000000000 --- a/erpnext/patches/v11_1/set_salary_details_submittable.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe - - -def execute(): - frappe.db.sql( - """ - update `tabSalary Structure` ss, `tabSalary Detail` sd - set sd.docstatus=1 - where ss.name=sd.parent and ss.docstatus=1 and sd.parenttype='Salary Structure' - """ - ) diff --git a/erpnext/patches/v12_0/add_company_link_to_einvoice_settings.py b/erpnext/patches/v12_0/add_company_link_to_einvoice_settings.py deleted file mode 100644 index 40965fa824..0000000000 --- a/erpnext/patches/v12_0/add_company_link_to_einvoice_settings.py +++ /dev/null @@ -1,21 +0,0 @@ -from __future__ import unicode_literals - -import frappe - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company or not frappe.db.count("E Invoice User"): - return - - frappe.reload_doc("regional", "doctype", "e_invoice_user") - for creds in frappe.db.get_all("E Invoice User", fields=["name", "gstin"]): - company_name = frappe.db.sql( - """ - select dl.link_name from `tabAddress` a, `tabDynamic Link` dl - where a.gstin = %s and dl.parent = a.name and dl.link_doctype = 'Company' - """, - (creds.get("gstin")), - ) - if company_name and len(company_name) > 0: - frappe.db.set_value("E Invoice User", creds.get("name"), "company", company_name[0][0]) diff --git a/erpnext/patches/v12_0/add_einvoice_status_field.py b/erpnext/patches/v12_0/add_einvoice_status_field.py deleted file mode 100644 index 8c7abc6199..0000000000 --- a/erpnext/patches/v12_0/add_einvoice_status_field.py +++ /dev/null @@ -1,160 +0,0 @@ -from __future__ import unicode_literals - -import json - -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - # move hidden einvoice fields to a different section - custom_fields = { - "Sales Invoice": [ - dict( - fieldname="einvoice_section", - label="E-Invoice Fields", - fieldtype="Section Break", - insert_after="gst_vehicle_type", - print_hide=1, - hidden=1, - ), - dict( - fieldname="ack_no", - label="Ack. No.", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="einvoice_section", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="ack_date", - label="Ack. Date", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="ack_no", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="irn_cancel_date", - label="Cancel Date", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="ack_date", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="signed_einvoice", - label="Signed E-Invoice", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="irn_cancel_date", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="signed_qr_code", - label="Signed QRCode", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="signed_einvoice", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="qrcode_image", - label="QRCode", - fieldtype="Attach Image", - hidden=1, - insert_after="signed_qr_code", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="einvoice_status", - label="E-Invoice Status", - fieldtype="Select", - insert_after="qrcode_image", - options="\nPending\nGenerated\nCancelled\nFailed", - default=None, - hidden=1, - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="failure_description", - label="E-Invoice Failure Description", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="einvoice_status", - no_copy=1, - print_hide=1, - read_only=1, - ), - ] - } - create_custom_fields(custom_fields, update=True) - - if frappe.db.exists("E Invoice Settings") and frappe.db.get_single_value( - "E Invoice Settings", "enable" - ): - frappe.db.sql( - """ - UPDATE `tabSales Invoice` SET einvoice_status = 'Pending' - WHERE - posting_date >= '2021-04-01' - AND ifnull(irn, '') = '' - AND ifnull(`billing_address_gstin`, '') != ifnull(`company_gstin`, '') - AND ifnull(gst_category, '') in ('Registered Regular', 'SEZ', 'Overseas', 'Deemed Export') - """ - ) - - # set appropriate statuses - frappe.db.sql( - """UPDATE `tabSales Invoice` SET einvoice_status = 'Generated' - WHERE ifnull(irn, '') != '' AND ifnull(irn_cancelled, 0) = 0""" - ) - - frappe.db.sql( - """UPDATE `tabSales Invoice` SET einvoice_status = 'Cancelled' - WHERE ifnull(irn_cancelled, 0) = 1""" - ) - - # set correct acknowledgement in e-invoices - einvoices = frappe.get_all("Sales Invoice", {"irn": ["is", "set"]}, ["name", "signed_einvoice"]) - - if einvoices: - for inv in einvoices: - signed_einvoice = inv.get("signed_einvoice") - if signed_einvoice: - signed_einvoice = json.loads(signed_einvoice) - frappe.db.set_value( - "Sales Invoice", - inv.get("name"), - "ack_no", - signed_einvoice.get("AckNo"), - update_modified=False, - ) - frappe.db.set_value( - "Sales Invoice", - inv.get("name"), - "ack_date", - signed_einvoice.get("AckDt"), - update_modified=False, - ) diff --git a/erpnext/patches/v12_0/add_einvoice_summary_report_permissions.py b/erpnext/patches/v12_0/add_einvoice_summary_report_permissions.py deleted file mode 100644 index e4277ba50f..0000000000 --- a/erpnext/patches/v12_0/add_einvoice_summary_report_permissions.py +++ /dev/null @@ -1,20 +0,0 @@ -from __future__ import unicode_literals - -import frappe - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - if frappe.db.exists("Report", "E-Invoice Summary") and not frappe.db.get_value( - "Custom Role", dict(report="E-Invoice Summary") - ): - frappe.get_doc( - dict( - doctype="Custom Role", - report="E-Invoice Summary", - roles=[dict(role="Accounts User"), dict(role="Accounts Manager")], - ) - ).insert() diff --git a/erpnext/patches/v12_0/add_eway_bill_in_delivery_note.py b/erpnext/patches/v12_0/add_eway_bill_in_delivery_note.py deleted file mode 100644 index db9fa247ed..0000000000 --- a/erpnext/patches/v12_0/add_eway_bill_in_delivery_note.py +++ /dev/null @@ -1,23 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_field - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - - if not company: - return - - create_custom_field( - "Delivery Note", - { - "fieldname": "ewaybill", - "label": "E-Way Bill No.", - "fieldtype": "Data", - "depends_on": "eval:(doc.docstatus === 1)", - "allow_on_submit": 1, - "insert_after": "customer_name_in_arabic", - "translatable": 0, - "owner": "Administrator", - }, - ) diff --git a/erpnext/patches/v12_0/add_ewaybill_validity_field.py b/erpnext/patches/v12_0/add_ewaybill_validity_field.py deleted file mode 100644 index ca3e2540a4..0000000000 --- a/erpnext/patches/v12_0/add_ewaybill_validity_field.py +++ /dev/null @@ -1,27 +0,0 @@ -from __future__ import unicode_literals - -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = { - "Sales Invoice": [ - dict( - fieldname="eway_bill_validity", - label="E-Way Bill Validity", - fieldtype="Data", - no_copy=1, - print_hide=1, - depends_on="ewaybill", - read_only=1, - allow_on_submit=1, - insert_after="ewaybill", - ) - ] - } - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v12_0/add_export_type_field_in_party_master.py b/erpnext/patches/v12_0/add_export_type_field_in_party_master.py deleted file mode 100644 index b14ffd2d34..0000000000 --- a/erpnext/patches/v12_0/add_export_type_field_in_party_master.py +++ /dev/null @@ -1,42 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - make_custom_fields() - - frappe.reload_doctype("Tax Category") - frappe.reload_doctype("Sales Taxes and Charges Template") - frappe.reload_doctype("Purchase Taxes and Charges Template") - - # Create tax category with inter state field checked - tax_category = frappe.db.get_value("Tax Category", {"name": "OUT OF STATE"}, "name") - - if not tax_category: - inter_state_category = frappe.get_doc( - {"doctype": "Tax Category", "title": "OUT OF STATE", "is_inter_state": 1} - ).insert() - - tax_category = inter_state_category.name - - for doctype in ("Sales Taxes and Charges Template", "Purchase Taxes and Charges Template"): - if not frappe.get_meta(doctype).has_field("is_inter_state"): - continue - - template = frappe.db.get_value(doctype, {"is_inter_state": 1, "disabled": 0}, ["name"]) - if template: - frappe.db.set_value(doctype, template, "tax_category", tax_category) - - frappe.db.sql( - """ - DELETE FROM `tabCustom Field` - WHERE fieldname = 'is_inter_state' - AND dt IN ('Sales Taxes and Charges Template', 'Purchase Taxes and Charges Template') - """ - ) diff --git a/erpnext/patches/v12_0/add_gst_category_in_delivery_note.py b/erpnext/patches/v12_0/add_gst_category_in_delivery_note.py deleted file mode 100644 index 5944889b63..0000000000 --- a/erpnext/patches/v12_0/add_gst_category_in_delivery_note.py +++ /dev/null @@ -1,25 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = { - "Delivery Note": [ - dict( - fieldname="gst_category", - label="GST Category", - fieldtype="Select", - insert_after="gst_vehicle_type", - print_hide=1, - options="\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders", - fetch_from="customer.gst_category", - fetch_if_empty=1, - ), - ] - } - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v12_0/add_state_code_for_ladakh.py b/erpnext/patches/v12_0/add_state_code_for_ladakh.py deleted file mode 100644 index 4b06eb1921..0000000000 --- a/erpnext/patches/v12_0/add_state_code_for_ladakh.py +++ /dev/null @@ -1,19 +0,0 @@ -import frappe - -from erpnext.regional.india import states - - -def execute(): - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = ["Address-gst_state", "Tax Category-gst_state"] - - # Update options in gst_state custom fields - for field in custom_fields: - if frappe.db.exists("Custom Field", field): - gst_state_field = frappe.get_doc("Custom Field", field) - gst_state_field.options = "\n".join(states) - gst_state_field.save() diff --git a/erpnext/patches/v12_0/create_itc_reversal_custom_fields.py b/erpnext/patches/v12_0/create_itc_reversal_custom_fields.py deleted file mode 100644 index 906baf22cc..0000000000 --- a/erpnext/patches/v12_0/create_itc_reversal_custom_fields.py +++ /dev/null @@ -1,167 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields -from frappe.custom.doctype.property_setter.property_setter import make_property_setter - -from erpnext.regional.india.utils import get_gst_accounts - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}, fields=["name"]) - if not company: - return - - frappe.reload_doc("regional", "doctype", "gst_settings") - frappe.reload_doc("accounts", "doctype", "gst_account") - - journal_entry_types = frappe.get_meta("Journal Entry").get_options("voucher_type").split("\n") + [ - "Reversal Of ITC" - ] - make_property_setter( - "Journal Entry", "voucher_type", "options", "\n".join(journal_entry_types), "" - ) - - custom_fields = { - "Journal Entry": [ - dict( - fieldname="reversal_type", - label="Reversal Type", - fieldtype="Select", - insert_after="voucher_type", - print_hide=1, - options="As per rules 42 & 43 of CGST Rules\nOthers", - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - dict( - fieldname="company_address", - label="Company Address", - fieldtype="Link", - options="Address", - insert_after="reversal_type", - print_hide=1, - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - read_only=1, - insert_after="company_address", - print_hide=1, - fetch_from="company_address.gstin", - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - ], - "Purchase Invoice": [ - dict( - fieldname="eligibility_for_itc", - label="Eligibility For ITC", - fieldtype="Select", - insert_after="reason_for_issuing_document", - print_hide=1, - options="Input Service Distributor\nImport Of Service\nImport Of Capital Goods\nITC on Reverse Charge\nIneligible As Per Section 17(5)\nIneligible Others\nAll Other ITC", - default="All Other ITC", - ) - ], - "Purchase Invoice Item": [ - dict( - fieldname="taxable_value", - label="Taxable Value", - fieldtype="Currency", - insert_after="base_net_amount", - hidden=1, - options="Company:company:default_currency", - print_hide=1, - ) - ], - } - - create_custom_fields(custom_fields, update=True) - - # Patch ITC Availed fields from Data to Currency - # Patch Availed ITC for current fiscal_year - - gst_accounts = get_gst_accounts(only_non_reverse_charge=1) - - frappe.db.sql( - """ - UPDATE `tabCustom Field` SET fieldtype='Currency', options='Company:company:default_currency' - WHERE dt = 'Purchase Invoice' and fieldname in ('itc_integrated_tax', 'itc_state_tax', 'itc_central_tax', - 'itc_cess_amount') - """ - ) - - frappe.db.sql( - """UPDATE `tabPurchase Invoice` set itc_integrated_tax = '0' - WHERE trim(coalesce(itc_integrated_tax, '')) = '' """ - ) - - frappe.db.sql( - """UPDATE `tabPurchase Invoice` set itc_state_tax = '0' - WHERE trim(coalesce(itc_state_tax, '')) = '' """ - ) - - frappe.db.sql( - """UPDATE `tabPurchase Invoice` set itc_central_tax = '0' - WHERE trim(coalesce(itc_central_tax, '')) = '' """ - ) - - frappe.db.sql( - """UPDATE `tabPurchase Invoice` set itc_cess_amount = '0' - WHERE trim(coalesce(itc_cess_amount, '')) = '' """ - ) - - # Get purchase invoices - invoices = frappe.get_all( - "Purchase Invoice", - {"posting_date": (">=", "2021-04-01"), "eligibility_for_itc": ("!=", "Ineligible")}, - ["name"], - ) - - amount_map = {} - - if invoices: - invoice_list = set([d.name for d in invoices]) - - # Get GST applied - amounts = frappe.db.sql( - """ - SELECT parent, account_head, sum(base_tax_amount_after_discount_amount) as amount - FROM `tabPurchase Taxes and Charges` - where parent in %s - GROUP BY parent, account_head - """, - (invoice_list), - as_dict=1, - ) - - for d in amounts: - amount_map.setdefault( - d.parent, - {"itc_integrated_tax": 0, "itc_state_tax": 0, "itc_central_tax": 0, "itc_cess_amount": 0}, - ) - if not gst_accounts: - continue - - if d.account_head in gst_accounts.get("igst_account"): - amount_map[d.parent]["itc_integrated_tax"] += d.amount - if d.account_head in gst_accounts.get("cgst_account"): - amount_map[d.parent]["itc_central_tax"] += d.amount - if d.account_head in gst_accounts.get("sgst_account"): - amount_map[d.parent]["itc_state_tax"] += d.amount - if d.account_head in gst_accounts.get("cess_account"): - amount_map[d.parent]["itc_cess_amount"] += d.amount - - for invoice, values in amount_map.items(): - frappe.db.set_value( - "Purchase Invoice", - invoice, - { - "itc_integrated_tax": values.get("itc_integrated_tax"), - "itc_central_tax": values.get("itc_central_tax"), - "itc_state_tax": values["itc_state_tax"], - "itc_cess_amount": values["itc_cess_amount"], - }, - ) diff --git a/erpnext/patches/v12_0/create_taxable_value_field.py b/erpnext/patches/v12_0/create_taxable_value_field.py deleted file mode 100644 index ad953032e7..0000000000 --- a/erpnext/patches/v12_0/create_taxable_value_field.py +++ /dev/null @@ -1,24 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = { - "Sales Invoice Item": [ - dict( - fieldname="taxable_value", - label="Taxable Value", - fieldtype="Currency", - insert_after="base_net_amount", - hidden=1, - options="Company:company:default_currency", - print_hide=1, - ) - ] - } - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v12_0/generate_leave_ledger_entries.py b/erpnext/patches/v12_0/generate_leave_ledger_entries.py deleted file mode 100644 index 354c5096c0..0000000000 --- a/erpnext/patches/v12_0/generate_leave_ledger_entries.py +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright (c) 2018, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe.utils import getdate, today - - -def execute(): - """Generates leave ledger entries for leave allocation/application/encashment - for last allocation""" - frappe.reload_doc("HR", "doctype", "Leave Ledger Entry") - frappe.reload_doc("HR", "doctype", "Leave Encashment") - frappe.reload_doc("HR", "doctype", "Leave Type") - - if not frappe.get_meta("Leave Allocation").has_field("unused_leaves"): - frappe.reload_doc("HR", "doctype", "Leave Allocation") - update_leave_allocation_fieldname() - - generate_allocation_ledger_entries() - generate_application_leave_ledger_entries() - generate_encashment_leave_ledger_entries() - generate_expiry_allocation_ledger_entries() - - -def update_leave_allocation_fieldname(): - """maps data from old field to the new field""" - frappe.db.sql( - """ - UPDATE `tabLeave Allocation` - SET `unused_leaves` = `carry_forwarded_leaves` - """ - ) - - -def generate_allocation_ledger_entries(): - """fix ledger entries for missing leave allocation transaction""" - allocation_list = get_allocation_records() - - for allocation in allocation_list: - if not frappe.db.exists( - "Leave Ledger Entry", - {"transaction_type": "Leave Allocation", "transaction_name": allocation.name}, - ): - allocation_obj = frappe.get_doc("Leave Allocation", allocation) - allocation_obj.create_leave_ledger_entry() - - -def generate_application_leave_ledger_entries(): - """fix ledger entries for missing leave application transaction""" - leave_applications = get_leaves_application_records() - - for application in leave_applications: - if not frappe.db.exists( - "Leave Ledger Entry", - {"transaction_type": "Leave Application", "transaction_name": application.name}, - ): - frappe.get_doc("Leave Application", application.name).create_leave_ledger_entry() - - -def generate_encashment_leave_ledger_entries(): - """fix ledger entries for missing leave encashment transaction""" - leave_encashments = get_leave_encashment_records() - - for encashment in leave_encashments: - if not frappe.db.exists( - "Leave Ledger Entry", - {"transaction_type": "Leave Encashment", "transaction_name": encashment.name}, - ): - frappe.get_doc("Leave Encashment", encashment).create_leave_ledger_entry() - - -def generate_expiry_allocation_ledger_entries(): - """fix ledger entries for missing leave allocation transaction""" - from erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry import expire_allocation - - allocation_list = get_allocation_records() - - for allocation in allocation_list: - if not frappe.db.exists( - "Leave Ledger Entry", - {"transaction_type": "Leave Allocation", "transaction_name": allocation.name, "is_expired": 1}, - ): - allocation_obj = frappe.get_doc("Leave Allocation", allocation) - if allocation_obj.to_date <= getdate(today()): - expire_allocation(allocation_obj) - - -def get_allocation_records(): - return frappe.get_all( - "Leave Allocation", filters={"docstatus": 1}, fields=["name"], order_by="to_date ASC" - ) - - -def get_leaves_application_records(): - return frappe.get_all("Leave Application", filters={"docstatus": 1}, fields=["name"]) - - -def get_leave_encashment_records(): - return frappe.get_all("Leave Encashment", filters={"docstatus": 1}, fields=["name"]) diff --git a/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py b/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py deleted file mode 100644 index 8b8d9637f2..0000000000 --- a/erpnext/patches/v12_0/move_due_advance_amount_to_pending_amount.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - """Move from due_advance_amount to pending_amount""" - - if frappe.db.has_column("Employee Advance", "due_advance_amount"): - frappe.db.sql(""" UPDATE `tabEmployee Advance` SET pending_amount=due_advance_amount """) diff --git a/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py b/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py deleted file mode 100644 index 4029a3f0e2..0000000000 --- a/erpnext/patches/v12_0/remove_denied_leaves_from_leave_ledger.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2018, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - """Delete leave ledger entry created - via leave applications with status != Approved""" - if not frappe.db.a_row_exists("Leave Ledger Entry"): - return - - leave_application_list = get_denied_leave_application_list() - if leave_application_list: - delete_denied_leaves_from_leave_ledger_entry(leave_application_list) - - -def get_denied_leave_application_list(): - return frappe.db.sql_list( - """ Select name from `tabLeave Application` where status <> 'Approved' """ - ) - - -def delete_denied_leaves_from_leave_ledger_entry(leave_application_list): - if leave_application_list: - frappe.db.sql( - """ Delete - FROM `tabLeave Ledger Entry` - WHERE - transaction_type = 'Leave Application' - AND transaction_name in (%s) """ - % (", ".join(["%s"] * len(leave_application_list))), # nosec - tuple(leave_application_list), - ) diff --git a/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py b/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py deleted file mode 100644 index 8247734a4a..0000000000 --- a/erpnext/patches/v12_0/remove_duplicate_leave_ledger_entries.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2018, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - """Delete duplicate leave ledger entries of type allocation created.""" - frappe.reload_doc("hr", "doctype", "leave_ledger_entry") - if not frappe.db.a_row_exists("Leave Ledger Entry"): - return - - duplicate_records_list = get_duplicate_records() - delete_duplicate_ledger_entries(duplicate_records_list) - - -def get_duplicate_records(): - """Fetch all but one duplicate records from the list of expired leave allocation.""" - return frappe.db.sql( - """ - SELECT name, employee, transaction_name, leave_type, is_carry_forward, from_date, to_date - FROM `tabLeave Ledger Entry` - WHERE - transaction_type = 'Leave Allocation' - AND docstatus = 1 - AND is_expired = 1 - GROUP BY - employee, transaction_name, leave_type, is_carry_forward, from_date, to_date - HAVING - count(name) > 1 - ORDER BY - creation - """ - ) - - -def delete_duplicate_ledger_entries(duplicate_records_list): - """Delete duplicate leave ledger entries.""" - if not duplicate_records_list: - return - for d in duplicate_records_list: - frappe.db.sql( - """ - DELETE FROM `tabLeave Ledger Entry` - WHERE name != %s - AND employee = %s - AND transaction_name = %s - AND leave_type = %s - AND is_carry_forward = %s - AND from_date = %s - AND to_date = %s - """, - tuple(d), - ) diff --git a/erpnext/patches/v12_0/set_default_payroll_based_on.py b/erpnext/patches/v12_0/set_default_payroll_based_on.py deleted file mode 100644 index de641c65a1..0000000000 --- a/erpnext/patches/v12_0/set_default_payroll_based_on.py +++ /dev/null @@ -1,6 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "hr_settings") - frappe.db.set_value("HR Settings", None, "payroll_based_on", "Leave") diff --git a/erpnext/patches/v12_0/set_gst_category.py b/erpnext/patches/v12_0/set_gst_category.py deleted file mode 100644 index 126a73bd3d..0000000000 --- a/erpnext/patches/v12_0/set_gst_category.py +++ /dev/null @@ -1,66 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.reload_doc("accounts", "doctype", "Tax Category") - - make_custom_fields() - - for doctype in ["Sales Invoice", "Purchase Invoice"]: - has_column = frappe.db.has_column(doctype, "invoice_type") - - if has_column: - update_map = { - "Regular": "Registered Regular", - "Export": "Overseas", - "SEZ": "SEZ", - "Deemed Export": "Deemed Export", - } - - for old, new in update_map.items(): - frappe.db.sql( - "UPDATE `tab{doctype}` SET gst_category = %s where invoice_type = %s".format(doctype=doctype), - (new, old), - ) # nosec - - frappe.delete_doc("Custom Field", "Sales Invoice-invoice_type") - frappe.delete_doc("Custom Field", "Purchase Invoice-invoice_type") - - itc_update_map = { - "ineligible": "Ineligible", - "input service": "Input Service Distributor", - "capital goods": "Import Of Capital Goods", - "input": "All Other ITC", - } - - has_gst_fields = frappe.db.has_column("Purchase Invoice", "eligibility_for_itc") - - if has_gst_fields: - for old, new in itc_update_map.items(): - frappe.db.sql( - "UPDATE `tabPurchase Invoice` SET eligibility_for_itc = %s where eligibility_for_itc = %s ", - (new, old), - ) - - for doctype in ["Customer", "Supplier"]: - - frappe.db.sql( - """ UPDATE `tab{doctype}` t1, `tabAddress` t2, `tabDynamic Link` t3 SET t1.gst_category = "Registered Regular" - where t3.link_name = t1.name and t3.parent = t2.name and t2.gstin IS NOT NULL and t2.gstin != '' """.format( - doctype=doctype - ) - ) # nosec - - frappe.db.sql( - """ UPDATE `tab{doctype}` t1, `tabAddress` t2, `tabDynamic Link` t3 SET t1.gst_category = "Overseas" - where t3.link_name = t1.name and t3.parent = t2.name and t2.country != 'India' """.format( - doctype=doctype - ) - ) # nosec diff --git a/erpnext/patches/v12_0/set_job_offer_applicant_email.py b/erpnext/patches/v12_0/set_job_offer_applicant_email.py deleted file mode 100644 index 0e3b5c4d2a..0000000000 --- a/erpnext/patches/v12_0/set_job_offer_applicant_email.py +++ /dev/null @@ -1,14 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "job_offer") - - frappe.db.sql( - """ - UPDATE - `tabJob Offer` AS offer - SET - applicant_email = (SELECT email_id FROM `tabJob Applicant` WHERE name = offer.job_applicant) - """ - ) diff --git a/erpnext/patches/v12_0/setup_einvoice_fields.py b/erpnext/patches/v12_0/setup_einvoice_fields.py deleted file mode 100644 index 72fa663089..0000000000 --- a/erpnext/patches/v12_0/setup_einvoice_fields.py +++ /dev/null @@ -1,134 +0,0 @@ -from __future__ import unicode_literals - -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - -from erpnext.regional.india.setup import add_permissions, add_print_formats - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.reload_doc("custom", "doctype", "custom_field") - frappe.reload_doc("regional", "doctype", "e_invoice_settings") - custom_fields = { - "Sales Invoice": [ - dict( - fieldname="irn", - label="IRN", - fieldtype="Data", - read_only=1, - insert_after="customer", - no_copy=1, - print_hide=1, - depends_on='eval:in_list(["Registered Regular", "SEZ", "Overseas", "Deemed Export"], doc.gst_category) && doc.irn_cancelled === 0', - ), - dict( - fieldname="ack_no", - label="Ack. No.", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="irn", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="ack_date", - label="Ack. Date", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="ack_no", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="irn_cancelled", - label="IRN Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval:(doc.irn_cancelled === 1)", - read_only=1, - allow_on_submit=1, - insert_after="customer", - ), - dict( - fieldname="eway_bill_cancelled", - label="E-Way Bill Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval:(doc.eway_bill_cancelled === 1)", - read_only=1, - allow_on_submit=1, - insert_after="customer", - ), - dict( - fieldname="signed_einvoice", - fieldtype="Code", - options="JSON", - hidden=1, - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="signed_qr_code", - fieldtype="Code", - options="JSON", - hidden=1, - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="qrcode_image", - label="QRCode", - fieldtype="Attach Image", - hidden=1, - no_copy=1, - print_hide=1, - read_only=1, - ), - ] - } - create_custom_fields(custom_fields, update=True) - add_permissions() - add_print_formats() - - einvoice_cond = ( - 'in_list(["Registered Regular", "SEZ", "Overseas", "Deemed Export"], doc.gst_category)' - ) - t = { - "mode_of_transport": [{"default": None}], - "distance": [{"mandatory_depends_on": f"eval:{einvoice_cond} && doc.transporter"}], - "gst_vehicle_type": [ - {"mandatory_depends_on": f'eval:{einvoice_cond} && doc.mode_of_transport == "Road"'} - ], - "lr_date": [ - { - "mandatory_depends_on": f'eval:{einvoice_cond} && in_list(["Air", "Ship", "Rail"], doc.mode_of_transport)' - } - ], - "lr_no": [ - { - "mandatory_depends_on": f'eval:{einvoice_cond} && in_list(["Air", "Ship", "Rail"], doc.mode_of_transport)' - } - ], - "vehicle_no": [ - {"mandatory_depends_on": f'eval:{einvoice_cond} && doc.mode_of_transport == "Road"'} - ], - "ewaybill": [ - {"read_only_depends_on": "eval:doc.irn && doc.ewaybill"}, - {"depends_on": "eval:((doc.docstatus === 1 || doc.ewaybill) && doc.eway_bill_cancelled === 0)"}, - ], - } - - for field, conditions in t.items(): - for c in conditions: - [(prop, value)] = c.items() - frappe.db.set_value("Custom Field", {"fieldname": field}, prop, value) diff --git a/erpnext/patches/v12_0/show_einvoice_irn_cancelled_field.py b/erpnext/patches/v12_0/show_einvoice_irn_cancelled_field.py deleted file mode 100644 index 459aeea1ec..0000000000 --- a/erpnext/patches/v12_0/show_einvoice_irn_cancelled_field.py +++ /dev/null @@ -1,16 +0,0 @@ -from __future__ import unicode_literals - -import frappe - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - irn_cancelled_field = frappe.db.exists( - "Custom Field", {"dt": "Sales Invoice", "fieldname": "irn_cancelled"} - ) - if irn_cancelled_field: - frappe.db.set_value("Custom Field", irn_cancelled_field, "depends_on", "eval: doc.irn") - frappe.db.set_value("Custom Field", irn_cancelled_field, "read_only", 0) diff --git a/erpnext/patches/v12_0/update_address_template_for_india.py b/erpnext/patches/v12_0/update_address_template_for_india.py deleted file mode 100644 index 27b1bb6dc1..0000000000 --- a/erpnext/patches/v12_0/update_address_template_for_india.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2020, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - -from erpnext.regional.address_template.setup import set_up_address_templates - - -def execute(): - if frappe.db.get_value("Company", {"country": "India"}, "name"): - address_template = frappe.db.get_value("Address Template", "India", "template") - if not address_template or "gstin" not in address_template: - set_up_address_templates(default_country="India") diff --git a/erpnext/patches/v12_0/update_ewaybill_field_position.py b/erpnext/patches/v12_0/update_ewaybill_field_position.py deleted file mode 100644 index 24a834b05c..0000000000 --- a/erpnext/patches/v12_0/update_ewaybill_field_position.py +++ /dev/null @@ -1,29 +0,0 @@ -import frappe - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - - if not company: - return - - field = frappe.db.get_value("Custom Field", {"dt": "Sales Invoice", "fieldname": "ewaybill"}) - - if field: - ewaybill_field = frappe.get_doc("Custom Field", field) - - ewaybill_field.flags.ignore_validate = True - - ewaybill_field.update( - { - "fieldname": "ewaybill", - "label": "e-Way Bill No.", - "fieldtype": "Data", - "depends_on": "eval:(doc.docstatus === 1)", - "allow_on_submit": 1, - "insert_after": "tax_id", - "translatable": 0, - } - ) - - ewaybill_field.save() diff --git a/erpnext/patches/v12_0/update_gst_category.py b/erpnext/patches/v12_0/update_gst_category.py deleted file mode 100644 index 16168f022c..0000000000 --- a/erpnext/patches/v12_0/update_gst_category.py +++ /dev/null @@ -1,23 +0,0 @@ -import frappe - - -def execute(): - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.db.sql( - """ UPDATE `tabSales Invoice` set gst_category = 'Unregistered' - where gst_category = 'Registered Regular' - and ifnull(customer_gstin, '')='' - and ifnull(billing_address_gstin,'')='' - """ - ) - - frappe.db.sql( - """ UPDATE `tabPurchase Invoice` set gst_category = 'Unregistered' - where gst_category = 'Registered Regular' - and ifnull(supplier_gstin, '')='' - """ - ) diff --git a/erpnext/patches/v12_0/update_healthcare_refactored_changes.py b/erpnext/patches/v12_0/update_healthcare_refactored_changes.py deleted file mode 100644 index 5ca0d5d47d..0000000000 --- a/erpnext/patches/v12_0/update_healthcare_refactored_changes.py +++ /dev/null @@ -1,131 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field -from frappe.modules import get_doctype_module, scrub - -field_rename_map = { - "Healthcare Settings": [ - ["patient_master_name", "patient_name_by"], - ["max_visit", "max_visits"], - ["reg_sms", "send_registration_msg"], - ["reg_msg", "registration_msg"], - ["app_con", "send_appointment_confirmation"], - ["app_con_msg", "appointment_confirmation_msg"], - ["no_con", "avoid_confirmation"], - ["app_rem", "send_appointment_reminder"], - ["app_rem_msg", "appointment_reminder_msg"], - ["rem_before", "remind_before"], - ["manage_customer", "link_customer_to_patient"], - ["create_test_on_si_submit", "create_lab_test_on_si_submit"], - ["require_sample_collection", "create_sample_collection_for_lab_test"], - ["require_test_result_approval", "lab_test_approval_required"], - ["manage_appointment_invoice_automatically", "automate_appointment_invoicing"], - ], - "Drug Prescription": [["use_interval", "usage_interval"], ["in_every", "interval_uom"]], - "Lab Test Template": [ - ["sample_quantity", "sample_qty"], - ["sample_collection_details", "sample_details"], - ], - "Sample Collection": [ - ["sample_quantity", "sample_qty"], - ["sample_collection_details", "sample_details"], - ], - "Fee Validity": [["max_visit", "max_visits"]], -} - - -def execute(): - for dn in field_rename_map: - if frappe.db.exists("DocType", dn): - if dn == "Healthcare Settings": - frappe.reload_doctype("Healthcare Settings") - else: - frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn)) - - for dt, field_list in field_rename_map.items(): - if frappe.db.exists("DocType", dt): - for field in field_list: - if dt == "Healthcare Settings": - rename_field(dt, field[0], field[1]) - elif frappe.db.has_column(dt, field[0]): - rename_field(dt, field[0], field[1]) - - # first name mandatory in Patient - if frappe.db.exists("DocType", "Patient"): - patients = frappe.db.sql("select name, patient_name from `tabPatient`", as_dict=1) - frappe.reload_doc("healthcare", "doctype", "patient") - for entry in patients: - name = entry.patient_name.split(" ") - frappe.db.set_value("Patient", entry.name, "first_name", name[0]) - - # mark Healthcare Practitioner status as Disabled - if frappe.db.exists("DocType", "Healthcare Practitioner"): - practitioners = frappe.db.sql( - "select name from `tabHealthcare Practitioner` where 'active'= 0", as_dict=1 - ) - practitioners_lst = [p.name for p in practitioners] - frappe.reload_doc("healthcare", "doctype", "healthcare_practitioner") - if practitioners_lst: - frappe.db.sql( - "update `tabHealthcare Practitioner` set status = 'Disabled' where name IN %(practitioners)s" - "", - {"practitioners": practitioners_lst}, - ) - - # set Clinical Procedure status - if frappe.db.exists("DocType", "Clinical Procedure"): - frappe.reload_doc("healthcare", "doctype", "clinical_procedure") - frappe.db.sql( - """ - UPDATE - `tabClinical Procedure` - SET - docstatus = (CASE WHEN status = 'Cancelled' THEN 2 - WHEN status = 'Draft' THEN 0 - ELSE 1 - END) - """ - ) - - # set complaints and diagnosis in table multiselect in Patient Encounter - if frappe.db.exists("DocType", "Patient Encounter"): - field_list = [["visit_department", "medical_department"], ["type", "appointment_type"]] - encounter_details = frappe.db.sql( - """select symptoms, diagnosis, name from `tabPatient Encounter`""", as_dict=True - ) - frappe.reload_doc("healthcare", "doctype", "patient_encounter") - frappe.reload_doc("healthcare", "doctype", "patient_encounter_symptom") - frappe.reload_doc("healthcare", "doctype", "patient_encounter_diagnosis") - - for field in field_list: - if frappe.db.has_column(dt, field[0]): - rename_field(dt, field[0], field[1]) - - for entry in encounter_details: - doc = frappe.get_doc("Patient Encounter", entry.name) - symptoms = entry.symptoms.split("\n") if entry.symptoms else [] - for symptom in symptoms: - if not frappe.db.exists("Complaint", symptom): - frappe.get_doc({"doctype": "Complaint", "complaints": symptom}).insert() - row = doc.append("symptoms", {"complaint": symptom}) - row.db_update() - - diagnosis = entry.diagnosis.split("\n") if entry.diagnosis else [] - for d in diagnosis: - if not frappe.db.exists("Diagnosis", d): - frappe.get_doc({"doctype": "Diagnosis", "diagnosis": d}).insert() - row = doc.append("diagnosis", {"diagnosis": d}) - row.db_update() - doc.db_update() - - if frappe.db.exists("DocType", "Fee Validity"): - # update fee validity status - frappe.db.sql( - """ - UPDATE - `tabFee Validity` - SET - status = (CASE WHEN visited >= max_visits THEN 'Completed' - ELSE 'Pending' - END) - """ - ) diff --git a/erpnext/patches/v12_0/update_state_code_for_daman_and_diu.py b/erpnext/patches/v12_0/update_state_code_for_daman_and_diu.py deleted file mode 100644 index d7e96fafd6..0000000000 --- a/erpnext/patches/v12_0/update_state_code_for_daman_and_diu.py +++ /dev/null @@ -1,26 +0,0 @@ -import frappe - -from erpnext.regional.india import states - - -def execute(): - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - # Update options in gst_state custom field - gst_state = frappe.get_doc("Custom Field", "Address-gst_state") - gst_state.options = "\n".join(states) - gst_state.save() - - # Update gst_state and state code in existing address - frappe.db.sql( - """ - UPDATE `tabAddress` - SET - gst_state = 'Dadra and Nagar Haveli and Daman and Diu', - gst_state_number = 26 - WHERE gst_state = 'Daman and Diu' - """ - ) diff --git a/erpnext/patches/v13_0/add_bin_unique_constraint.py b/erpnext/patches/v13_0/add_bin_unique_constraint.py index 38a8500ac7..7ad2bec859 100644 --- a/erpnext/patches/v13_0/add_bin_unique_constraint.py +++ b/erpnext/patches/v13_0/add_bin_unique_constraint.py @@ -64,4 +64,8 @@ def delete_and_patch_duplicate_bins(): bin.update(qty_dict) bin.update_reserved_qty_for_production() bin.update_reserved_qty_for_sub_contracting() + if frappe.db.count( + "Purchase Order", {"status": ["!=", "Completed"], "is_old_subcontracting_flow": 1} + ): + bin.update_reserved_qty_for_sub_contracting(subcontract_doctype="Purchase Order") bin.db_update() diff --git a/erpnext/patches/v13_0/add_default_interview_notification_templates.py b/erpnext/patches/v13_0/add_default_interview_notification_templates.py deleted file mode 100644 index 9a47efe870..0000000000 --- a/erpnext/patches/v13_0/add_default_interview_notification_templates.py +++ /dev/null @@ -1,44 +0,0 @@ -import os - -import frappe -from frappe import _ - - -def execute(): - if not frappe.db.exists("Email Template", _("Interview Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "interview/interview_reminder_notification_template.html") - ) - - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Interview Reminder"), - "response": response, - "subject": _("Interview Reminder"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - - if not frappe.db.exists("Email Template", _("Interview Feedback Reminder")): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "interview/interview_feedback_reminder_template.html") - ) - - frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Interview Feedback Reminder"), - "response": response, - "subject": _("Interview Feedback Reminder"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - - hr_settings = frappe.get_doc("HR Settings") - hr_settings.interview_reminder_template = _("Interview Reminder") - hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder") - hr_settings.flags.ignore_links = True - hr_settings.save() diff --git a/erpnext/patches/v13_0/check_is_income_tax_component.py b/erpnext/patches/v13_0/check_is_income_tax_component.py deleted file mode 100644 index 0ae3a3e3bd..0000000000 --- a/erpnext/patches/v13_0/check_is_income_tax_component.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_field - -import erpnext - - -def execute(): - - doctypes = [ - "salary_component", - "Employee Tax Exemption Declaration", - "Employee Tax Exemption Proof Submission", - "Employee Tax Exemption Declaration Category", - "Employee Tax Exemption Proof Submission Detail", - "gratuity_rule", - "gratuity_rule_slab", - "gratuity_applicable_component", - ] - - for doctype in doctypes: - frappe.reload_doc("Payroll", "doctype", doctype, force=True) - - reports = ["Professional Tax Deductions", "Provident Fund Deductions", "E-Invoice Summary"] - for report in reports: - frappe.reload_doc("Regional", "Report", report) - frappe.reload_doc("Regional", "Report", report) - - if erpnext.get_region() == "India": - create_custom_field( - "Salary Component", - dict( - fieldname="component_type", - label="Component Type", - fieldtype="Select", - insert_after="description", - options="\nProvident Fund\nAdditional Provident Fund\nProvident Fund Loan\nProfessional Tax", - depends_on='eval:doc.type == "Deduction"', - ), - ) - - if frappe.db.exists("Salary Component", "Income Tax"): - frappe.db.set_value("Salary Component", "Income Tax", "is_income_tax_component", 1) - if frappe.db.exists("Salary Component", "TDS"): - frappe.db.set_value("Salary Component", "TDS", "is_income_tax_component", 1) - - components = frappe.db.sql( - "select name from `tabSalary Component` where variable_based_on_taxable_salary = 1", as_dict=1 - ) - for component in components: - frappe.db.set_value("Salary Component", component.name, "is_income_tax_component", 1) - - if erpnext.get_region() == "India": - if frappe.db.exists("Salary Component", "Provident Fund"): - frappe.db.set_value("Salary Component", "Provident Fund", "component_type", "Provident Fund") - if frappe.db.exists("Salary Component", "Professional Tax"): - frappe.db.set_value( - "Salary Component", "Professional Tax", "component_type", "Professional Tax" - ) diff --git a/erpnext/patches/v13_0/create_accounting_dimensions_in_orders.py b/erpnext/patches/v13_0/create_accounting_dimensions_in_orders.py index 8a3f1d0a58..8e6bce66fe 100644 --- a/erpnext/patches/v13_0/create_accounting_dimensions_in_orders.py +++ b/erpnext/patches/v13_0/create_accounting_dimensions_in_orders.py @@ -33,7 +33,10 @@ def execute(): "insert_after": insert_after_field, } - create_custom_field(doctype, df, ignore_validate=False) - frappe.clear_cache(doctype=doctype) + try: + create_custom_field(doctype, df, ignore_validate=True) + frappe.clear_cache(doctype=doctype) + except Exception as e: + pass count += 1 diff --git a/erpnext/patches/v13_0/create_gst_custom_fields_in_quotation.py b/erpnext/patches/v13_0/create_gst_custom_fields_in_quotation.py deleted file mode 100644 index 3217eab43d..0000000000 --- a/erpnext/patches/v13_0/create_gst_custom_fields_in_quotation.py +++ /dev/null @@ -1,53 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}, fields=["name"]) - if not company: - return - - sales_invoice_gst_fields = [ - dict( - fieldname="billing_address_gstin", - label="Billing Address GSTIN", - fieldtype="Data", - insert_after="customer_address", - read_only=1, - fetch_from="customer_address.gstin", - print_hide=1, - length=15, - ), - dict( - fieldname="customer_gstin", - label="Customer GSTIN", - fieldtype="Data", - insert_after="shipping_address_name", - fetch_from="shipping_address_name.gstin", - print_hide=1, - length=15, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="customer_gstin", - print_hide=1, - read_only=1, - length=50, - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="company_address", - fetch_from="company_address.gstin", - print_hide=1, - read_only=1, - length=15, - ), - ] - - custom_fields = {"Quotation": sales_invoice_gst_fields} - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v13_0/create_gst_payment_entry_fields.py b/erpnext/patches/v13_0/create_gst_payment_entry_fields.py index bef2516f6d..ee8fc5fa55 100644 --- a/erpnext/patches/v13_0/create_gst_payment_entry_fields.py +++ b/erpnext/patches/v13_0/create_gst_payment_entry_fields.py @@ -2,79 +2,19 @@ # License: GNU General Public License v3. See license.txt import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields +# Patch kept for users outside India def execute(): - frappe.reload_doc("accounts", "doctype", "advance_taxes_and_charges") - frappe.reload_doc("accounts", "doctype", "payment_entry") - if frappe.db.exists("Company", {"country": "India"}): - custom_fields = { - "Payment Entry": [ - dict( - fieldname="gst_section", - label="GST Details", - fieldtype="Section Break", - insert_after="deductions", - print_hide=1, - collapsible=1, - ), - dict( - fieldname="company_address", - label="Company Address", - fieldtype="Link", - insert_after="gst_section", - print_hide=1, - options="Address", - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="company_address", - fetch_from="company_address.gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="company_gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="customer_address", - label="Customer Address", - fieldtype="Link", - insert_after="place_of_supply", - print_hide=1, - options="Address", - depends_on='eval:doc.party_type == "Customer"', - ), - dict( - fieldname="customer_gstin", - label="Customer GSTIN", - fieldtype="Data", - insert_after="customer_address", - fetch_from="customer_address.gstin", - print_hide=1, - read_only=1, - ), - ] - } + return - create_custom_fields(custom_fields, update=True) - else: - fields = [ - "gst_section", - "company_address", - "company_gstin", - "place_of_supply", - "customer_address", - "customer_gstin", - ] - for field in fields: - frappe.delete_doc_if_exists("Custom Field", f"Payment Entry-{field}") + for field in ( + "gst_section", + "company_address", + "company_gstin", + "place_of_supply", + "customer_address", + "customer_gstin", + ): + frappe.delete_doc_if_exists("Custom Field", f"Payment Entry-{field}") diff --git a/erpnext/patches/v13_0/create_leave_policy_assignment_based_on_employee_current_leave_policy.py b/erpnext/patches/v13_0/create_leave_policy_assignment_based_on_employee_current_leave_policy.py deleted file mode 100644 index 59b17eea9f..0000000000 --- a/erpnext/patches/v13_0/create_leave_policy_assignment_based_on_employee_current_leave_policy.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "leave_policy_assignment") - frappe.reload_doc("hr", "doctype", "employee_grade") - employee_with_assignment = [] - leave_policy = [] - - if "leave_policy" in frappe.db.get_table_columns("Employee"): - employees_with_leave_policy = frappe.db.sql( - "SELECT name, leave_policy FROM `tabEmployee` WHERE leave_policy IS NOT NULL and leave_policy != ''", - as_dict=1, - ) - - for employee in employees_with_leave_policy: - alloc = frappe.db.exists( - "Leave Allocation", - {"employee": employee.name, "leave_policy": employee.leave_policy, "docstatus": 1}, - ) - if not alloc: - create_assignment(employee.name, employee.leave_policy) - - employee_with_assignment.append(employee.name) - leave_policy.append(employee.leave_policy) - - if "default_leave_policy" in frappe.db.get_table_columns("Employee Grade"): - employee_grade_with_leave_policy = frappe.db.sql( - "SELECT name, default_leave_policy FROM `tabEmployee Grade` WHERE default_leave_policy IS NOT NULL and default_leave_policy!=''", - as_dict=1, - ) - - # for whole employee Grade - for grade in employee_grade_with_leave_policy: - employees = get_employee_with_grade(grade.name) - for employee in employees: - - if employee not in employee_with_assignment: # Will ensure no duplicate - alloc = frappe.db.exists( - "Leave Allocation", - {"employee": employee.name, "leave_policy": grade.default_leave_policy, "docstatus": 1}, - ) - if not alloc: - create_assignment(employee.name, grade.default_leave_policy) - leave_policy.append(grade.default_leave_policy) - - # for old Leave allocation and leave policy from allocation, which may got updated in employee grade. - leave_allocations = frappe.db.sql( - "SELECT leave_policy, leave_period, employee FROM `tabLeave Allocation` WHERE leave_policy IS NOT NULL and leave_policy != '' and docstatus = 1 ", - as_dict=1, - ) - - for allocation in leave_allocations: - if allocation.leave_policy not in leave_policy: - create_assignment( - allocation.employee, - allocation.leave_policy, - leave_period=allocation.leave_period, - allocation_exists=True, - ) - - -def create_assignment(employee, leave_policy, leave_period=None, allocation_exists=False): - if frappe.db.get_value("Leave Policy", leave_policy, "docstatus") == 2: - return - - filters = {"employee": employee, "leave_policy": leave_policy} - if leave_period: - filters["leave_period"] = leave_period - - if not frappe.db.exists("Leave Policy Assignment", filters): - lpa = frappe.new_doc("Leave Policy Assignment") - lpa.employee = employee - lpa.leave_policy = leave_policy - - lpa.flags.ignore_mandatory = True - if allocation_exists: - lpa.assignment_based_on = "Leave Period" - lpa.leave_period = leave_period - lpa.leaves_allocated = 1 - - lpa.save() - if allocation_exists: - lpa.submit() - # Updating old Leave Allocation - frappe.db.sql("Update `tabLeave Allocation` set leave_policy_assignment = %s", lpa.name) - - -def get_employee_with_grade(grade): - return frappe.get_list("Employee", filters={"grade": grade}) diff --git a/erpnext/patches/v13_0/create_pan_field_for_india.py b/erpnext/patches/v13_0/create_pan_field_for_india.py deleted file mode 100644 index 48c688e19c..0000000000 --- a/erpnext/patches/v13_0/create_pan_field_for_india.py +++ /dev/null @@ -1,19 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - frappe.reload_doc("buying", "doctype", "supplier", force=True) - frappe.reload_doc("selling", "doctype", "customer", force=True) - frappe.reload_doc("core", "doctype", "doctype", force=True) - - custom_fields = { - "Supplier": [ - {"fieldname": "pan", "label": "PAN", "fieldtype": "Data", "insert_after": "supplier_type"} - ], - "Customer": [ - {"fieldname": "pan", "label": "PAN", "fieldtype": "Data", "insert_after": "customer_type"} - ], - } - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v13_0/fix_number_and_frequency_for_monthly_depreciation.py b/erpnext/patches/v13_0/fix_number_and_frequency_for_monthly_depreciation.py new file mode 100644 index 0000000000..e827058df0 --- /dev/null +++ b/erpnext/patches/v13_0/fix_number_and_frequency_for_monthly_depreciation.py @@ -0,0 +1,14 @@ +import frappe + + +def execute(): + assets = frappe.get_all("Asset", filters={"allow_monthly_depreciation": 1}) + + for d in assets: + print(d.name) + asset_doc = frappe.get_doc("Asset", d.name) + for i in asset_doc.get("finance_books"): + if i.frequency_of_depreciation != 1: + i.total_number_of_depreciations *= i.frequency_of_depreciation + i.frequency_of_depreciation = 1 + i.db_update() diff --git a/erpnext/patches/v13_0/gst_fields_for_pos_invoice.py b/erpnext/patches/v13_0/gst_fields_for_pos_invoice.py deleted file mode 100644 index efd2c21d6a..0000000000 --- a/erpnext/patches/v13_0/gst_fields_for_pos_invoice.py +++ /dev/null @@ -1,87 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}, fields=["name"]) - if not company: - return - - hsn_sac_field = dict( - fieldname="gst_hsn_code", - label="HSN/SAC", - fieldtype="Data", - fetch_from="item_code.gst_hsn_code", - insert_after="description", - allow_on_submit=1, - print_hide=1, - fetch_if_empty=1, - ) - nil_rated_exempt = dict( - fieldname="is_nil_exempt", - label="Is Nil Rated or Exempted", - fieldtype="Check", - fetch_from="item_code.is_nil_exempt", - insert_after="gst_hsn_code", - print_hide=1, - ) - is_non_gst = dict( - fieldname="is_non_gst", - label="Is Non GST", - fieldtype="Check", - fetch_from="item_code.is_non_gst", - insert_after="is_nil_exempt", - print_hide=1, - ) - taxable_value = dict( - fieldname="taxable_value", - label="Taxable Value", - fieldtype="Currency", - insert_after="base_net_amount", - hidden=1, - options="Company:company:default_currency", - print_hide=1, - ) - sales_invoice_gst_fields = [ - dict( - fieldname="billing_address_gstin", - label="Billing Address GSTIN", - fieldtype="Data", - insert_after="customer_address", - read_only=1, - fetch_from="customer_address.gstin", - print_hide=1, - ), - dict( - fieldname="customer_gstin", - label="Customer GSTIN", - fieldtype="Data", - insert_after="shipping_address_name", - fetch_from="shipping_address_name.gstin", - print_hide=1, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="customer_gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="company_address", - fetch_from="company_address.gstin", - print_hide=1, - read_only=1, - ), - ] - - custom_fields = { - "POS Invoice": sales_invoice_gst_fields, - "POS Invoice Item": [hsn_sac_field, nil_rated_exempt, is_non_gst, taxable_value], - } - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py b/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py deleted file mode 100644 index 30b84accf3..0000000000 --- a/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py +++ /dev/null @@ -1,94 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field - - -def execute(): - if frappe.db.exists("DocType", "Lab Test") and frappe.db.exists("DocType", "Lab Test Template"): - # rename child doctypes - doctypes = { - "Lab Test Groups": "Lab Test Group Template", - "Normal Test Items": "Normal Test Result", - "Sensitivity Test Items": "Sensitivity Test Result", - "Special Test Items": "Descriptive Test Result", - "Special Test Template": "Descriptive Test Template", - } - - frappe.reload_doc("healthcare", "doctype", "lab_test") - frappe.reload_doc("healthcare", "doctype", "lab_test_template") - - for old_dt, new_dt in doctypes.items(): - frappe.flags.link_fields = {} - should_rename = frappe.db.table_exists(old_dt) and not frappe.db.table_exists(new_dt) - if should_rename: - frappe.reload_doc("healthcare", "doctype", frappe.scrub(old_dt)) - frappe.rename_doc("DocType", old_dt, new_dt, force=True) - frappe.reload_doc("healthcare", "doctype", frappe.scrub(new_dt)) - frappe.delete_doc_if_exists("DocType", old_dt) - - parent_fields = { - "Lab Test Group Template": "lab_test_groups", - "Descriptive Test Template": "descriptive_test_templates", - "Normal Test Result": "normal_test_items", - "Sensitivity Test Result": "sensitivity_test_items", - "Descriptive Test Result": "descriptive_test_items", - } - - for doctype, parentfield in parent_fields.items(): - frappe.db.sql( - """ - UPDATE `tab{0}` - SET parentfield = %(parentfield)s - """.format( - doctype - ), - {"parentfield": parentfield}, - ) - - # copy renamed child table fields (fields were already renamed in old doctype json, hence sql) - rename_fields = { - "lab_test_name": "test_name", - "lab_test_event": "test_event", - "lab_test_uom": "test_uom", - "lab_test_comment": "test_comment", - } - - for new, old in rename_fields.items(): - if frappe.db.has_column("Normal Test Result", old): - frappe.db.sql("""UPDATE `tabNormal Test Result` SET {} = {}""".format(new, old)) - - if frappe.db.has_column("Normal Test Template", "test_event"): - frappe.db.sql("""UPDATE `tabNormal Test Template` SET lab_test_event = test_event""") - - if frappe.db.has_column("Normal Test Template", "test_uom"): - frappe.db.sql("""UPDATE `tabNormal Test Template` SET lab_test_uom = test_uom""") - - if frappe.db.has_column("Descriptive Test Result", "test_particulars"): - frappe.db.sql( - """UPDATE `tabDescriptive Test Result` SET lab_test_particulars = test_particulars""" - ) - - rename_fields = { - "lab_test_template": "test_template", - "lab_test_description": "test_description", - "lab_test_rate": "test_rate", - } - - for new, old in rename_fields.items(): - if frappe.db.has_column("Lab Test Group Template", old): - frappe.db.sql("""UPDATE `tabLab Test Group Template` SET {} = {}""".format(new, old)) - - # rename field - frappe.reload_doc("healthcare", "doctype", "lab_test") - if frappe.db.has_column("Lab Test", "special_toggle"): - rename_field("Lab Test", "special_toggle", "descriptive_toggle") - - if frappe.db.exists("DocType", "Lab Test Group Template"): - # fix select field option - frappe.reload_doc("healthcare", "doctype", "lab_test_group_template") - frappe.db.sql( - """ - UPDATE `tabLab Test Group Template` - SET template_or_new_line = 'Add New Line' - WHERE template_or_new_line = 'Add new line' - """ - ) diff --git a/erpnext/patches/v13_0/item_naming_series_not_mandatory.py b/erpnext/patches/v13_0/item_naming_series_not_mandatory.py index 33fb8f963c..0235a621ce 100644 --- a/erpnext/patches/v13_0/item_naming_series_not_mandatory.py +++ b/erpnext/patches/v13_0/item_naming_series_not_mandatory.py @@ -1,6 +1,6 @@ import frappe -from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series +from erpnext.utilities.naming import set_by_naming_series def execute(): diff --git a/erpnext/patches/v13_0/item_reposting_for_incorrect_sl_and_gl.py b/erpnext/patches/v13_0/item_reposting_for_incorrect_sl_and_gl.py index f6427ca55a..75a5477be8 100644 --- a/erpnext/patches/v13_0/item_reposting_for_incorrect_sl_and_gl.py +++ b/erpnext/patches/v13_0/item_reposting_for_incorrect_sl_and_gl.py @@ -15,6 +15,8 @@ def execute(): ("accounts", "sales_invoice_item"), ("accounts", "purchase_invoice_item"), ("buying", "purchase_receipt_item_supplied"), + ("subcontracting", "subcontracting_receipt_item"), + ("subcontracting", "subcontracting_receipt_supplied_item"), ] for module, doctype in doctypes_to_reload: diff --git a/erpnext/patches/v13_0/job_card_status_on_hold.py b/erpnext/patches/v13_0/job_card_status_on_hold.py new file mode 100644 index 0000000000..8c67c3c858 --- /dev/null +++ b/erpnext/patches/v13_0/job_card_status_on_hold.py @@ -0,0 +1,19 @@ +import frappe + + +def execute(): + job_cards = frappe.get_all( + "Job Card", + {"status": "On Hold", "docstatus": ("!=", 0)}, + pluck="name", + ) + + for idx, job_card in enumerate(job_cards): + try: + doc = frappe.get_doc("Job Card", job_card) + doc.set_status() + doc.db_set("status", doc.status, update_modified=False) + if idx % 100 == 0: + frappe.db.commit() + except Exception: + continue diff --git a/erpnext/patches/v13_0/make_non_standard_user_type.py b/erpnext/patches/v13_0/make_non_standard_user_type.py deleted file mode 100644 index e2c068567b..0000000000 --- a/erpnext/patches/v13_0/make_non_standard_user_type.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - -from erpnext.setup.install import add_non_standard_user_types - - -def execute(): - doctype_dict = { - "projects": ["Timesheet"], - "payroll": [ - "Salary Slip", - "Employee Tax Exemption Declaration", - "Employee Tax Exemption Proof Submission", - "Employee Benefit Application", - "Employee Benefit Claim", - ], - "hr": [ - "Employee", - "Expense Claim", - "Leave Application", - "Attendance Request", - "Compensatory Leave Request", - "Holiday List", - "Employee Advance", - "Training Program", - "Training Feedback", - "Shift Request", - "Employee Grievance", - "Employee Referral", - "Travel Request", - ], - } - - for module, doctypes in doctype_dict.items(): - for doctype in doctypes: - frappe.reload_doc(module, "doctype", doctype) - - frappe.flags.ignore_select_perm = True - frappe.flags.update_select_perm_after_migrate = True - - add_non_standard_user_types() diff --git a/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py b/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py deleted file mode 100644 index 0290af0f73..0000000000 --- a/erpnext/patches/v13_0/move_doctype_reports_and_notification_from_hr_to_payroll.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - frappe.db.sql( - """UPDATE `tabPrint Format` - SET module = 'Payroll' - WHERE name IN ('Salary Slip Based On Timesheet', 'Salary Slip Standard')""" - ) - - frappe.db.sql("""UPDATE `tabNotification` SET module='Payroll' WHERE name='Retention Bonus';""") - - doctypes_moved = [ - "Employee Benefit Application Detail", - "Employee Tax Exemption Declaration Category", - "Salary Component", - "Employee Tax Exemption Proof Submission Detail", - "Income Tax Slab Other Charges", - "Taxable Salary Slab", - "Payroll Period Date", - "Salary Slip Timesheet", - "Payroll Employee Detail", - "Salary Detail", - "Employee Tax Exemption Sub Category", - "Employee Tax Exemption Category", - "Employee Benefit Claim", - "Employee Benefit Application", - "Employee Other Income", - "Employee Tax Exemption Proof Submission", - "Employee Tax Exemption Declaration", - "Employee Incentive", - "Retention Bonus", - "Additional Salary", - "Income Tax Slab", - "Payroll Period", - "Salary Slip", - "Payroll Entry", - "Salary Structure Assignment", - "Salary Structure", - ] - - for doctype in doctypes_moved: - frappe.delete_doc_if_exists("DocType", doctype) - - reports = ["Salary Register", "Bank Remittance"] - - for report in reports: - frappe.delete_doc_if_exists("Report", report) diff --git a/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py b/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py deleted file mode 100644 index 37a3c357b3..0000000000 --- a/erpnext/patches/v13_0/move_payroll_setting_separately_from_hr_settings.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - data = frappe.db.sql( - """SELECT * - FROM `tabSingles` - WHERE - doctype = "HR Settings" - AND - field in ( - "encrypt_salary_slips_in_emails", - "email_salary_slip_to_employee", - "daily_wages_fraction_for_half_day", - "disable_rounded_total", - "include_holidays_in_total_working_days", - "max_working_hours_against_timesheet", - "payroll_based_on", - "password_policy" - ) - """, - as_dict=1, - ) - - for d in data: - frappe.db.set_value("Payroll Settings", None, d.field, d.value) diff --git a/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py b/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py deleted file mode 100644 index f84a739d74..0000000000 --- a/erpnext/patches/v13_0/move_tax_slabs_from_payroll_period_to_income_tax_slab.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - if not ( - frappe.db.table_exists("Payroll Period") and frappe.db.table_exists("Taxable Salary Slab") - ): - return - - for doctype in ( - "income_tax_slab", - "salary_structure_assignment", - "employee_other_income", - "income_tax_slab_other_charges", - ): - frappe.reload_doc("Payroll", "doctype", doctype) - - standard_tax_exemption_amount_exists = frappe.db.has_column( - "Payroll Period", "standard_tax_exemption_amount" - ) - - select_fields = "name, start_date, end_date" - if standard_tax_exemption_amount_exists: - select_fields = "name, start_date, end_date, standard_tax_exemption_amount" - - for company in frappe.get_all("Company"): - payroll_periods = frappe.db.sql( - """ - SELECT - {0} - FROM - `tabPayroll Period` - WHERE company=%s - ORDER BY start_date DESC - """.format( - select_fields - ), - company.name, - as_dict=1, - ) - - for i, period in enumerate(payroll_periods): - income_tax_slab = frappe.new_doc("Income Tax Slab") - income_tax_slab.name = "Tax Slab:" + period.name - - if i == 0: - income_tax_slab.disabled = 0 - else: - income_tax_slab.disabled = 1 - - income_tax_slab.effective_from = period.start_date - income_tax_slab.company = company.name - income_tax_slab.allow_tax_exemption = 1 - if standard_tax_exemption_amount_exists: - income_tax_slab.standard_tax_exemption_amount = period.standard_tax_exemption_amount - - income_tax_slab.flags.ignore_mandatory = True - income_tax_slab.submit() - - frappe.db.sql( - """ UPDATE `tabTaxable Salary Slab` - SET parent = %s , parentfield = 'slabs' , parenttype = "Income Tax Slab" - WHERE parent = %s - """, - (income_tax_slab.name, period.name), - as_dict=1, - ) - - if i == 0: - frappe.db.sql( - """ - UPDATE - `tabSalary Structure Assignment` - set - income_tax_slab = %s - where - company = %s - and from_date >= %s - and docstatus < 2 - """, - (income_tax_slab.name, company.name, period.start_date), - ) - - # move other incomes to separate document - if not frappe.db.table_exists("Employee Tax Exemption Proof Submission"): - return - - migrated = [] - proofs = frappe.get_all( - "Employee Tax Exemption Proof Submission", - filters={"docstatus": 1}, - fields=["payroll_period", "employee", "company", "income_from_other_sources"], - ) - for proof in proofs: - if proof.income_from_other_sources: - employee_other_income = frappe.new_doc("Employee Other Income") - employee_other_income.employee = proof.employee - employee_other_income.payroll_period = proof.payroll_period - employee_other_income.company = proof.company - employee_other_income.amount = proof.income_from_other_sources - - try: - employee_other_income.submit() - migrated.append([proof.employee, proof.payroll_period]) - except Exception: - pass - - if not frappe.db.table_exists("Employee Tax Exemption Declaration"): - return - - declerations = frappe.get_all( - "Employee Tax Exemption Declaration", - filters={"docstatus": 1}, - fields=["payroll_period", "employee", "company", "income_from_other_sources"], - ) - - for declaration in declerations: - if ( - declaration.income_from_other_sources - and [declaration.employee, declaration.payroll_period] not in migrated - ): - employee_other_income = frappe.new_doc("Employee Other Income") - employee_other_income.employee = declaration.employee - employee_other_income.payroll_period = declaration.payroll_period - employee_other_income.company = declaration.company - employee_other_income.amount = declaration.income_from_other_sources - - try: - employee_other_income.submit() - except Exception: - pass diff --git a/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py b/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py deleted file mode 100644 index 45acf49205..0000000000 --- a/erpnext/patches/v13_0/patch_to_fix_reverse_linking_in_additional_salary_encashment_and_incentive.py +++ /dev/null @@ -1,67 +0,0 @@ -import frappe - - -def execute(): - if not frappe.db.table_exists("Additional Salary"): - return - - for doctype in ("Additional Salary", "Employee Incentive", "Salary Detail"): - frappe.reload_doc("Payroll", "doctype", doctype) - - frappe.reload_doc("hr", "doctype", "Leave Encashment") - - if frappe.db.has_column("Leave Encashment", "additional_salary"): - leave_encashments = frappe.get_all( - "Leave Encashment", - fields=["name", "additional_salary"], - filters={"additional_salary": ["!=", ""]}, - ) - for leave_encashment in leave_encashments: - frappe.db.sql( - """ UPDATE `tabAdditional Salary` - SET ref_doctype = 'Leave Encashment', ref_docname = %s - WHERE name = %s - """, - (leave_encashment["name"], leave_encashment["additional_salary"]), - ) - - if frappe.db.has_column("Employee Incentive", "additional_salary"): - employee_incentives = frappe.get_all( - "Employee Incentive", - fields=["name", "additional_salary"], - filters={"additional_salary": ["!=", ""]}, - ) - - for incentive in employee_incentives: - frappe.db.sql( - """ UPDATE `tabAdditional Salary` - SET ref_doctype = 'Employee Incentive', ref_docname = %s - WHERE name = %s - """, - (incentive["name"], incentive["additional_salary"]), - ) - - if frappe.db.has_column("Additional Salary", "salary_slip"): - additional_salaries = frappe.get_all( - "Additional Salary", - fields=["name", "salary_slip", "type", "salary_component"], - filters={"salary_slip": ["!=", ""]}, - group_by="salary_slip", - ) - - salary_slips = [sal["salary_slip"] for sal in additional_salaries] - - for salary in additional_salaries: - comp_type = "earnings" if salary["type"] == "Earning" else "deductions" - if salary["salary_slip"] and salary_slips.count(salary["salary_slip"]) == 1: - frappe.db.sql( - """ - UPDATE `tabSalary Detail` - SET additional_salary = %s - WHERE parenttype = 'Salary Slip' - and parentfield = %s - and parent = %s - and salary_component = %s - """, - (salary["name"], comp_type, salary["salary_slip"], salary["salary_component"]), - ) diff --git a/erpnext/patches/v13_0/print_uom_after_quantity_patch.py b/erpnext/patches/v13_0/print_uom_after_quantity_patch.py deleted file mode 100644 index a16f909fc3..0000000000 --- a/erpnext/patches/v13_0/print_uom_after_quantity_patch.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -from erpnext.setup.install import create_print_uom_after_qty_custom_field - - -def execute(): - create_print_uom_after_qty_custom_field() diff --git a/erpnext/patches/v13_0/rename_discharge_date_in_ip_record.py b/erpnext/patches/v13_0/rename_discharge_date_in_ip_record.py deleted file mode 100644 index 3bd717d77b..0000000000 --- a/erpnext/patches/v13_0/rename_discharge_date_in_ip_record.py +++ /dev/null @@ -1,8 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field - - -def execute(): - frappe.reload_doc("Healthcare", "doctype", "Inpatient Record") - if frappe.db.has_column("Inpatient Record", "discharge_date"): - rename_field("Inpatient Record", "discharge_date", "discharge_datetime") diff --git a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py b/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py deleted file mode 100644 index 434dbb47e7..0000000000 --- a/erpnext/patches/v13_0/rename_stop_to_send_birthday_reminders.py +++ /dev/null @@ -1,21 +0,0 @@ -import frappe -from frappe.model.utils.rename_field import rename_field - - -def execute(): - frappe.reload_doc("hr", "doctype", "hr_settings") - - try: - # Rename the field - rename_field("HR Settings", "stop_birthday_reminders", "send_birthday_reminders") - - # Reverse the value - old_value = frappe.db.get_single_value("HR Settings", "send_birthday_reminders") - - frappe.db.set_value( - "HR Settings", "HR Settings", "send_birthday_reminders", 1 if old_value == 0 else 0 - ) - - except Exception as e: - if e.args[0] != 1054: - raise diff --git a/erpnext/patches/v13_0/requeue_recoverable_reposts.py b/erpnext/patches/v13_0/requeue_recoverable_reposts.py new file mode 100644 index 0000000000..f37c21c976 --- /dev/null +++ b/erpnext/patches/v13_0/requeue_recoverable_reposts.py @@ -0,0 +1,21 @@ +import frappe + + +def execute(): + recoverable = ("QueryDeadlockError", "QueryTimeoutError", "JobTimeoutException") + + failed_reposts = frappe.get_all( + "Repost Item Valuation", + fields=["name", "error_log"], + filters={ + "status": "Failed", + "docstatus": 1, + "modified": (">", "2022-04-20"), + "error_log": ("is", "set"), + }, + ) + for riv in failed_reposts: + for exc in recoverable: + if exc in riv.error_log: + frappe.db.set_value("Repost Item Valuation", riv.name, "status", "Queued") + break diff --git a/erpnext/patches/v13_0/reset_corrupt_defaults.py b/erpnext/patches/v13_0/reset_corrupt_defaults.py new file mode 100644 index 0000000000..7a6d50f19d --- /dev/null +++ b/erpnext/patches/v13_0/reset_corrupt_defaults.py @@ -0,0 +1,29 @@ +import frappe + + +def execute(): + """ + This patch is needed to fix parent incorrectly set as `__2fa` because of + https://github.com/frappe/frappe/commit/a822092211533ff17ff9b92dd86f6f868ed63e2e + """ + + for doctype in ( + "Accounts Settings", + "Stock Settings", + "Selling Settings", + "Buying Settings", + "CRM Settings", + "Global Defaults", + "Healthcare Settings", + "Education Settings", + ): + try: + frappe.get_single(doctype).save() + except Exception: + pass + + try: + pos_profile = frappe.get_last_doc("POS Profile") + pos_profile.set_defaults() + except Exception: + pass diff --git a/erpnext/patches/v13_0/set_company_field_in_healthcare_doctypes.py b/erpnext/patches/v13_0/set_company_field_in_healthcare_doctypes.py deleted file mode 100644 index bc2d1b94f7..0000000000 --- a/erpnext/patches/v13_0/set_company_field_in_healthcare_doctypes.py +++ /dev/null @@ -1,25 +0,0 @@ -import frappe - - -def execute(): - company = frappe.db.get_single_value("Global Defaults", "default_company") - doctypes = [ - "Clinical Procedure", - "Inpatient Record", - "Lab Test", - "Sample Collection", - "Patient Appointment", - "Patient Encounter", - "Vital Signs", - "Therapy Session", - "Therapy Plan", - "Patient Assessment", - ] - for entry in doctypes: - if frappe.db.exists("DocType", entry): - frappe.reload_doc("Healthcare", "doctype", entry) - frappe.db.sql( - "update `tab{dt}` set company = {company} where ifnull(company, '') = ''".format( - dt=entry, company=frappe.db.escape(company) - ) - ) diff --git a/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py b/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py deleted file mode 100644 index adc8784b5b..0000000000 --- a/erpnext/patches/v13_0/set_company_in_leave_ledger_entry.py +++ /dev/null @@ -1,12 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("HR", "doctype", "Leave Allocation") - frappe.reload_doc("HR", "doctype", "Leave Ledger Entry") - frappe.db.sql( - """update `tabLeave Ledger Entry` as lle set company = (select company from `tabEmployee` where employee = lle.employee)""" - ) - frappe.db.sql( - """update `tabLeave Allocation` as la set company = (select company from `tabEmployee` where employee = la.employee)""" - ) diff --git a/erpnext/patches/v13_0/set_per_billed_in_return_delivery_note.py b/erpnext/patches/v13_0/set_per_billed_in_return_delivery_note.py new file mode 100644 index 0000000000..a4d7012449 --- /dev/null +++ b/erpnext/patches/v13_0/set_per_billed_in_return_delivery_note.py @@ -0,0 +1,29 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe + + +def execute(): + dn = frappe.qb.DocType("Delivery Note") + dn_item = frappe.qb.DocType("Delivery Note Item") + + dn_list = ( + frappe.qb.from_(dn) + .inner_join(dn_item) + .on(dn.name == dn_item.parent) + .select(dn.name) + .where(dn.docstatus == 1) + .where(dn.is_return == 1) + .where(dn.per_billed < 100) + .where(dn_item.returned_qty > 0) + .run(as_dict=True) + ) + + frappe.qb.update(dn_item).inner_join(dn).on(dn.name == dn_item.parent).set( + dn_item.returned_qty, 0 + ).where(dn.is_return == 1).where(dn_item.returned_qty > 0).run() + + for d in dn_list: + dn_doc = frappe.get_doc("Delivery Note", d.get("name")) + dn_doc.run_method("update_billing_status") diff --git a/erpnext/patches/v13_0/set_training_event_attendance.py b/erpnext/patches/v13_0/set_training_event_attendance.py deleted file mode 100644 index 7b55758972..0000000000 --- a/erpnext/patches/v13_0/set_training_event_attendance.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "training_event") - frappe.reload_doc("hr", "doctype", "training_event_employee") - - frappe.db.sql("update `tabTraining Event Employee` set `attendance` = 'Present'") - frappe.db.sql( - "update `tabTraining Event Employee` set `is_mandatory` = 1 where `attendance` = 'Mandatory'" - ) diff --git a/erpnext/patches/v13_0/setting_custom_roles_for_some_regional_reports.py b/erpnext/patches/v13_0/setting_custom_roles_for_some_regional_reports.py deleted file mode 100644 index 40c10f3035..0000000000 --- a/erpnext/patches/v13_0/setting_custom_roles_for_some_regional_reports.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import add_custom_roles_for_reports - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - add_custom_roles_for_reports() diff --git a/erpnext/patches/v13_0/setup_fields_for_80g_certificate_and_donation.py b/erpnext/patches/v13_0/setup_fields_for_80g_certificate_and_donation.py deleted file mode 100644 index 1c36b53684..0000000000 --- a/erpnext/patches/v13_0/setup_fields_for_80g_certificate_and_donation.py +++ /dev/null @@ -1,16 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - if frappe.get_all("Company", filters={"country": "India"}): - frappe.reload_doc("accounts", "doctype", "POS Invoice") - frappe.reload_doc("accounts", "doctype", "POS Invoice Item") - - make_custom_fields() - - if not frappe.db.exists("Party Type", "Donor"): - frappe.get_doc( - {"doctype": "Party Type", "party_type": "Donor", "account_type": "Receivable"} - ).insert(ignore_permissions=True) diff --git a/erpnext/patches/v13_0/setup_gratuity_rule_for_india_and_uae.py b/erpnext/patches/v13_0/setup_gratuity_rule_for_india_and_uae.py deleted file mode 100644 index 093e8a7646..0000000000 --- a/erpnext/patches/v13_0/setup_gratuity_rule_for_india_and_uae.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - frappe.reload_doc("payroll", "doctype", "gratuity_rule") - frappe.reload_doc("payroll", "doctype", "gratuity_rule_slab") - frappe.reload_doc("payroll", "doctype", "gratuity_applicable_component") - if frappe.db.exists("Company", {"country": "India"}): - from erpnext.regional.india.setup import create_gratuity_rule - - create_gratuity_rule() - if frappe.db.exists("Company", {"country": "United Arab Emirates"}): - from erpnext.regional.united_arab_emirates.setup import create_gratuity_rule - - create_gratuity_rule() diff --git a/erpnext/patches/v13_0/show_hr_payroll_deprecation_warning.py b/erpnext/patches/v13_0/show_hr_payroll_deprecation_warning.py new file mode 100644 index 0000000000..c9cb7ac5e2 --- /dev/null +++ b/erpnext/patches/v13_0/show_hr_payroll_deprecation_warning.py @@ -0,0 +1,16 @@ +import click +import frappe + + +def execute(): + if "hrms" in frappe.get_installed_apps(): + return + + click.secho( + "HR and Payroll modules have been moved to a separate app" + " and will be removed from ERPNext in Version 14." + " Please install the HRMS app when upgrading to Version 14" + " to continue using the HR and Payroll modules:\n" + "https://github.com/frappe/hrms", + fg="yellow", + ) diff --git a/erpnext/patches/v13_0/show_india_localisation_deprecation_warning.py b/erpnext/patches/v13_0/show_india_localisation_deprecation_warning.py new file mode 100644 index 0000000000..c9935085fa --- /dev/null +++ b/erpnext/patches/v13_0/show_india_localisation_deprecation_warning.py @@ -0,0 +1,18 @@ +import click +import frappe + + +def execute(): + if ( + not frappe.db.exists("Company", {"country": "India"}) + or "india_compliance" in frappe.get_installed_apps() + ): + return + + click.secho( + "India-specific regional features have been moved to a separate app" + " and will be removed from ERPNext in Version 14." + " Please install India Compliance after upgrading to Version 14:\n" + "https://github.com/resilient-tech/india-compliance", + fg="yellow", + ) diff --git a/erpnext/patches/v13_0/trim_sales_invoice_custom_field_length.py b/erpnext/patches/v13_0/trim_sales_invoice_custom_field_length.py deleted file mode 100644 index 5f3fc5761a..0000000000 --- a/erpnext/patches/v13_0/trim_sales_invoice_custom_field_length.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2020, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe - -from erpnext.regional.india.setup import create_custom_fields, get_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = {"Sales Invoice": get_custom_fields().get("Sales Invoice")} - - create_custom_fields(custom_fields, update=True) diff --git a/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py b/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py deleted file mode 100644 index 2bc17ae86b..0000000000 --- a/erpnext/patches/v13_0/update_expense_claim_status_for_paid_advances.py +++ /dev/null @@ -1,25 +0,0 @@ -import frappe - - -def execute(): - """ - Update Expense Claim status to Paid if: - - the entire required amount is already covered via linked advances - - the claim is partially paid via advances and the rest is reimbursed - """ - - ExpenseClaim = frappe.qb.DocType("Expense Claim") - - ( - frappe.qb.update(ExpenseClaim) - .set(ExpenseClaim.status, "Paid") - .where( - ( - (ExpenseClaim.grand_total == 0) - | (ExpenseClaim.grand_total == ExpenseClaim.total_amount_reimbursed) - ) - & (ExpenseClaim.approval_status == "Approved") - & (ExpenseClaim.docstatus == 1) - & (ExpenseClaim.total_sanctioned_amount > 0) - ) - ).run() diff --git a/erpnext/patches/v13_0/update_export_type_for_gst.py b/erpnext/patches/v13_0/update_export_type_for_gst.py deleted file mode 100644 index 62368584dc..0000000000 --- a/erpnext/patches/v13_0/update_export_type_for_gst.py +++ /dev/null @@ -1,40 +0,0 @@ -import frappe - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - # Update custom fields - fieldname = frappe.db.get_value("Custom Field", {"dt": "Customer", "fieldname": "export_type"}) - if fieldname: - frappe.db.set_value( - "Custom Field", - fieldname, - { - "default": "", - "mandatory_depends_on": 'eval:in_list(["SEZ", "Overseas", "Deemed Export"], doc.gst_category)', - }, - ) - - fieldname = frappe.db.get_value("Custom Field", {"dt": "Supplier", "fieldname": "export_type"}) - if fieldname: - frappe.db.set_value( - "Custom Field", - fieldname, - {"default": "", "mandatory_depends_on": 'eval:in_list(["SEZ", "Overseas"], doc.gst_category)'}, - ) - - # Update Customer/Supplier Masters - frappe.db.sql( - """ - UPDATE `tabCustomer` set export_type = '' WHERE gst_category NOT IN ('SEZ', 'Overseas', 'Deemed Export') - """ - ) - - frappe.db.sql( - """ - UPDATE `tabSupplier` set export_type = '' WHERE gst_category NOT IN ('SEZ', 'Overseas') - """ - ) diff --git a/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py b/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py deleted file mode 100644 index 31aa29274d..0000000000 --- a/erpnext/patches/v13_0/update_reason_for_resignation_in_employee.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - - -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "employee") - - if frappe.db.has_column("Employee", "reason_for_resignation"): - frappe.db.sql( - """ UPDATE `tabEmployee` - SET reason_for_leaving = reason_for_resignation - WHERE status = 'Left' and reason_for_leaving is null and reason_for_resignation is not null - """ - ) diff --git a/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py b/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py deleted file mode 100644 index 6d26ac543f..0000000000 --- a/erpnext/patches/v13_0/update_start_end_date_for_old_shift_assignment.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "shift_assignment") - if frappe.db.has_column("Shift Assignment", "date"): - frappe.db.sql( - """update `tabShift Assignment` - set end_date=date, start_date=date - where date IS NOT NULL and start_date IS NULL and end_date IS NULL;""" - ) diff --git a/erpnext/patches/v13_0/update_tax_category_for_rcm.py b/erpnext/patches/v13_0/update_tax_category_for_rcm.py deleted file mode 100644 index 8ac9534889..0000000000 --- a/erpnext/patches/v13_0/update_tax_category_for_rcm.py +++ /dev/null @@ -1,50 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - -from erpnext.regional.india import states - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - create_custom_fields( - { - "Tax Category": [ - dict( - fieldname="is_inter_state", - label="Is Inter State", - fieldtype="Check", - insert_after="disabled", - print_hide=1, - ), - dict( - fieldname="is_reverse_charge", - label="Is Reverse Charge", - fieldtype="Check", - insert_after="is_inter_state", - print_hide=1, - ), - dict( - fieldname="tax_category_column_break", - fieldtype="Column Break", - insert_after="is_reverse_charge", - ), - dict( - fieldname="gst_state", - label="Source State", - fieldtype="Select", - options="\n".join(states), - insert_after="company", - ), - ] - }, - update=True, - ) - - tax_category = frappe.qb.DocType("Tax Category") - - frappe.qb.update(tax_category).set(tax_category.is_reverse_charge, 1).where( - tax_category.name.isin(["Reverse Charge Out-State", "Reverse Charge In-State"]) - ).run() diff --git a/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py b/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py deleted file mode 100644 index b395c01c1d..0000000000 --- a/erpnext/patches/v13_0/updates_for_multi_currency_payroll.py +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (c) 2019, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - -import frappe -from frappe import _ -from frappe.model.utils.rename_field import rename_field - - -def execute(): - - frappe.reload_doc("Accounts", "doctype", "Salary Component Account") - if frappe.db.has_column("Salary Component Account", "default_account"): - rename_field("Salary Component Account", "default_account", "account") - - doctype_list = [ - {"module": "HR", "doctype": "Employee Advance"}, - {"module": "HR", "doctype": "Leave Encashment"}, - {"module": "Payroll", "doctype": "Additional Salary"}, - {"module": "Payroll", "doctype": "Employee Benefit Application"}, - {"module": "Payroll", "doctype": "Employee Benefit Claim"}, - {"module": "Payroll", "doctype": "Employee Incentive"}, - {"module": "Payroll", "doctype": "Employee Tax Exemption Declaration"}, - {"module": "Payroll", "doctype": "Employee Tax Exemption Proof Submission"}, - {"module": "Payroll", "doctype": "Income Tax Slab"}, - {"module": "Payroll", "doctype": "Payroll Entry"}, - {"module": "Payroll", "doctype": "Retention Bonus"}, - {"module": "Payroll", "doctype": "Salary Structure"}, - {"module": "Payroll", "doctype": "Salary Structure Assignment"}, - {"module": "Payroll", "doctype": "Salary Slip"}, - ] - - for item in doctype_list: - frappe.reload_doc(item["module"], "doctype", item["doctype"]) - - # update company in employee advance based on employee company - for dt in [ - "Employee Incentive", - "Leave Encashment", - "Employee Benefit Application", - "Employee Benefit Claim", - ]: - frappe.db.sql( - """ - update `tab{doctype}` - set company = (select company from tabEmployee where name=`tab{doctype}`.employee) - """.format( - doctype=dt - ) - ) - - # update exchange rate for employee advance - frappe.db.sql("update `tabEmployee Advance` set exchange_rate=1") - - # get all companies and it's currency - all_companies = frappe.db.get_all( - "Company", fields=["name", "default_currency", "default_payroll_payable_account"] - ) - for d in all_companies: - company = d.name - company_currency = d.default_currency - default_payroll_payable_account = d.default_payroll_payable_account - - if not default_payroll_payable_account: - default_payroll_payable_account = frappe.db.get_value( - "Account", - { - "account_name": _("Payroll Payable"), - "company": company, - "account_currency": company_currency, - "is_group": 0, - }, - ) - - # update currency in following doctypes based on company currency - doctypes_for_currency = [ - "Employee Advance", - "Leave Encashment", - "Employee Benefit Application", - "Employee Benefit Claim", - "Employee Incentive", - "Additional Salary", - "Employee Tax Exemption Declaration", - "Employee Tax Exemption Proof Submission", - "Income Tax Slab", - "Retention Bonus", - "Salary Structure", - ] - - for dt in doctypes_for_currency: - frappe.db.sql( - """update `tab{doctype}` set currency = %s where company=%s""".format(doctype=dt), - (company_currency, company), - ) - - # update fields in payroll entry - frappe.db.sql( - """ - update `tabPayroll Entry` - set currency = %s, - exchange_rate = 1, - payroll_payable_account=%s - where company=%s - """, - (company_currency, default_payroll_payable_account, company), - ) - - # update fields in Salary Structure Assignment - frappe.db.sql( - """ - update `tabSalary Structure Assignment` - set currency = %s, - payroll_payable_account=%s - where company=%s - """, - (company_currency, default_payroll_payable_account, company), - ) - - # update fields in Salary Slip - frappe.db.sql( - """ - update `tabSalary Slip` - set currency = %s, - exchange_rate = 1, - base_hour_rate = hour_rate, - base_gross_pay = gross_pay, - base_total_deduction = total_deduction, - base_net_pay = net_pay, - base_rounded_total = rounded_total, - base_total_in_words = total_in_words - where company=%s - """, - (company_currency, company), - ) diff --git a/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py b/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py deleted file mode 100644 index 001c8efd55..0000000000 --- a/erpnext/patches/v14_0/add_default_exit_questionnaire_notification_template.py +++ /dev/null @@ -1,29 +0,0 @@ -import os - -import frappe -from frappe import _ - - -def execute(): - template = frappe.db.exists("Email Template", _("Exit Questionnaire Notification")) - if not template: - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html") - ) - - template = frappe.get_doc( - { - "doctype": "Email Template", - "name": _("Exit Questionnaire Notification"), - "response": response, - "subject": _("Exit Questionnaire Notification"), - "owner": frappe.session.user, - } - ).insert(ignore_permissions=True) - template = template.name - - hr_settings = frappe.get_doc("HR Settings") - hr_settings.exit_questionnaire_notification_template = template - hr_settings.flags.ignore_links = True - hr_settings.save() diff --git a/erpnext/patches/v14_0/copy_is_subcontracted_value_to_is_old_subcontracting_flow.py b/erpnext/patches/v14_0/copy_is_subcontracted_value_to_is_old_subcontracting_flow.py new file mode 100644 index 0000000000..607ef69538 --- /dev/null +++ b/erpnext/patches/v14_0/copy_is_subcontracted_value_to_is_old_subcontracting_flow.py @@ -0,0 +1,12 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe + + +def execute(): + for doctype in ["Purchase Order", "Purchase Receipt", "Purchase Invoice"]: + tab = frappe.qb.DocType(doctype).as_("tab") + frappe.qb.update(tab).set(tab.is_old_subcontracting_flow, 1).where( + tab.is_subcontracted == 1 + ).run() diff --git a/erpnext/patches/v14_0/crm_ux_cleanup.py b/erpnext/patches/v14_0/crm_ux_cleanup.py new file mode 100644 index 0000000000..b2df36ff35 --- /dev/null +++ b/erpnext/patches/v14_0/crm_ux_cleanup.py @@ -0,0 +1,94 @@ +import frappe +from frappe.model.utils.rename_field import rename_field +from frappe.utils import add_months, cstr, today + + +def execute(): + for doctype in ("CRM Note", "Lead", "Opportunity", "Prospect", "Prospect Lead"): + frappe.reload_doc("crm", "doctype", doctype) + + try: + rename_field("Lead", "designation", "job_title") + rename_field("Opportunity", "converted_by", "opportunity_owner") + + frappe.db.sql( + """ + update `tabProspect Lead` + set parentfield='leads' + where parentfield='partner_lead' + """ + ) + except Exception as e: + if e.args[0] != 1054: + raise + + add_calendar_event_for_leads() + add_calendar_event_for_opportunities() + + +def add_calendar_event_for_leads(): + # create events based on next contact date + leads = frappe.db.sql( + """ + select name, contact_date, contact_by, ends_on, lead_name, lead_owner + from tabLead + where contact_date >= %s + """, + add_months(today(), -1), + as_dict=1, + ) + + for d in leads: + event = frappe.get_doc( + { + "doctype": "Event", + "owner": d.lead_owner, + "subject": ("Contact " + cstr(d.lead_name)), + "description": ( + ("Contact " + cstr(d.lead_name)) + (("
By: " + cstr(d.contact_by)) if d.contact_by else "") + ), + "starts_on": d.contact_date, + "ends_on": d.ends_on, + "event_type": "Private", + } + ) + + event.append("event_participants", {"reference_doctype": "Lead", "reference_docname": d.name}) + + event.insert(ignore_permissions=True) + + +def add_calendar_event_for_opportunities(): + # create events based on next contact date + opportunities = frappe.db.sql( + """ + select name, contact_date, contact_by, to_discuss, + party_name, opportunity_owner, contact_person + from tabOpportunity + where contact_date >= %s + """, + add_months(today(), -1), + as_dict=1, + ) + + for d in opportunities: + event = frappe.get_doc( + { + "doctype": "Event", + "owner": d.opportunity_owner, + "subject": ("Contact " + cstr(d.contact_person or d.party_name)), + "description": ( + ("Contact " + cstr(d.contact_person or d.party_name)) + + (("
By: " + cstr(d.contact_by)) if d.contact_by else "") + + (("
Agenda: " + cstr(d.to_discuss)) if d.to_discuss else "") + ), + "starts_on": d.contact_date, + "event_type": "Private", + } + ) + + event.append( + "event_participants", {"reference_doctype": "Opportunity", "reference_docname": d.name} + ) + + event.insert(ignore_permissions=True) diff --git a/erpnext/patches/v14_0/delete_agriculture_doctypes.py b/erpnext/patches/v14_0/delete_agriculture_doctypes.py index e0b12a2579..8ec0c33090 100644 --- a/erpnext/patches/v14_0/delete_agriculture_doctypes.py +++ b/erpnext/patches/v14_0/delete_agriculture_doctypes.py @@ -2,6 +2,9 @@ import frappe def execute(): + if "agriculture" in frappe.get_installed_apps(): + return + frappe.delete_doc("Module Def", "Agriculture", ignore_missing=True, force=True) frappe.delete_doc("Workspace", "Agriculture", ignore_missing=True, force=True) @@ -19,3 +22,5 @@ def execute(): doctypes = frappe.get_all("DocType", {"module": "agriculture", "custom": 0}, pluck="name") for doctype in doctypes: frappe.delete_doc("DocType", doctype, ignore_missing=True) + + frappe.delete_doc("Module Def", "Agriculture", ignore_missing=True, force=True) diff --git a/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py b/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py deleted file mode 100644 index b50e010f94..0000000000 --- a/erpnext/patches/v14_0/delete_employee_transfer_property_doctype.py +++ /dev/null @@ -1,5 +0,0 @@ -import frappe - - -def execute(): - frappe.delete_doc("DocType", "Employee Transfer Property", ignore_missing=True) diff --git a/erpnext/patches/v14_0/migrate_gl_to_payment_ledger.py b/erpnext/patches/v14_0/migrate_gl_to_payment_ledger.py new file mode 100644 index 0000000000..e15aa4a1f4 --- /dev/null +++ b/erpnext/patches/v14_0/migrate_gl_to_payment_ledger.py @@ -0,0 +1,140 @@ +import frappe +from frappe import qb +from frappe.query_builder import Case, CustomFunction +from frappe.query_builder.custom import ConstantColumn +from frappe.query_builder.functions import IfNull + +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( + get_dimensions, + make_dimension_in_accounting_doctypes, +) + + +def create_accounting_dimension_fields(): + dimensions_and_defaults = get_dimensions() + if dimensions_and_defaults: + for dimension in dimensions_and_defaults[0]: + make_dimension_in_accounting_doctypes(dimension, ["Payment Ledger Entry"]) + + +def generate_name_for_payment_ledger_entries(gl_entries): + for index, entry in enumerate(gl_entries, 1): + entry.name = index + + +def get_columns(): + columns = [ + "name", + "creation", + "modified", + "modified_by", + "owner", + "docstatus", + "posting_date", + "account_type", + "account", + "party_type", + "party", + "voucher_type", + "voucher_no", + "against_voucher_type", + "against_voucher_no", + "amount", + "amount_in_account_currency", + "account_currency", + "company", + "cost_center", + "due_date", + "finance_book", + ] + + dimensions_and_defaults = get_dimensions() + if dimensions_and_defaults: + for dimension in dimensions_and_defaults[0]: + columns.append(dimension.fieldname) + + return columns + + +def build_insert_query(): + ple = qb.DocType("Payment Ledger Entry") + columns = get_columns() + insert_query = qb.into(ple) + + # build 'insert' columns in query + insert_query = insert_query.columns(tuple(columns)) + + return insert_query + + +def insert_chunk_into_payment_ledger(insert_query, gl_entries): + if gl_entries: + columns = get_columns() + + # build tuple of data with same column order + for entry in gl_entries: + data = () + for column in columns: + data += (entry[column],) + insert_query = insert_query.insert(data) + insert_query.run() + + +def execute(): + if frappe.reload_doc("accounts", "doctype", "payment_ledger_entry"): + # create accounting dimension fields in Payment Ledger + create_accounting_dimension_fields() + + gl = qb.DocType("GL Entry") + account = qb.DocType("Account") + ifelse = CustomFunction("IF", ["condition", "then", "else"]) + + gl_entries = ( + qb.from_(gl) + .inner_join(account) + .on((gl.account == account.name) & (account.account_type.isin(["Receivable", "Payable"]))) + .select( + gl.star, + ConstantColumn(1).as_("docstatus"), + account.account_type.as_("account_type"), + IfNull( + ifelse(gl.against_voucher_type == "", None, gl.against_voucher_type), gl.voucher_type + ).as_("against_voucher_type"), + IfNull(ifelse(gl.against_voucher == "", None, gl.against_voucher), gl.voucher_no).as_( + "against_voucher_no" + ), + # convert debit/credit to amount + Case() + .when(account.account_type == "Receivable", gl.debit - gl.credit) + .else_(gl.credit - gl.debit) + .as_("amount"), + # convert debit/credit in account currency to amount in account currency + Case() + .when( + account.account_type == "Receivable", + gl.debit_in_account_currency - gl.credit_in_account_currency, + ) + .else_(gl.credit_in_account_currency - gl.debit_in_account_currency) + .as_("amount_in_account_currency"), + ) + .where(gl.is_cancelled == 0) + .orderby(gl.creation) + .run(as_dict=True) + ) + + # primary key(name) for payment ledger records + generate_name_for_payment_ledger_entries(gl_entries) + + # split data into chunks + chunk_size = 1000 + try: + for i in range(0, len(gl_entries), chunk_size): + insert_query = build_insert_query() + insert_chunk_into_payment_ledger(insert_query, gl_entries[i : i + chunk_size]) + frappe.db.commit() + except Exception as err: + frappe.db.rollback() + ple = qb.DocType("Payment Ledger Entry") + qb.from_(ple).delete().where(ple.docstatus >= 0).run() + frappe.db.commit() + raise err diff --git a/erpnext/patches/v14_0/remove_hr_and_payroll_modules.py b/erpnext/patches/v14_0/remove_hr_and_payroll_modules.py new file mode 100644 index 0000000000..259b1112f7 --- /dev/null +++ b/erpnext/patches/v14_0/remove_hr_and_payroll_modules.py @@ -0,0 +1,96 @@ +import frappe + + +def execute(): + if "hrms" in frappe.get_installed_apps(): + return + + frappe.delete_doc("Module Def", "HR", ignore_missing=True, force=True) + frappe.delete_doc("Module Def", "Payroll", ignore_missing=True, force=True) + + frappe.delete_doc("Workspace", "HR", ignore_missing=True, force=True) + frappe.delete_doc("Workspace", "Payroll", ignore_missing=True, force=True) + + print_formats = frappe.get_all( + "Print Format", {"module": ("in", ["HR", "Payroll"]), "standard": "Yes"}, pluck="name" + ) + for print_format in print_formats: + frappe.delete_doc("Print Format", print_format, ignore_missing=True, force=True) + + reports = frappe.get_all( + "Report", {"module": ("in", ["HR", "Payroll"]), "is_standard": "Yes"}, pluck="name" + ) + for report in reports: + frappe.delete_doc("Report", report, ignore_missing=True, force=True) + + # reports moved from Projects, Accounts, and Regional module to HRMS app + for report in [ + "Project Profitability", + "Employee Hours Utilization Based On Timesheet", + "Unpaid Expense Claim", + "Professional Tax Deductions", + "Provident Fund Deductions", + ]: + frappe.delete_doc("Report", report, ignore_missing=True) + + doctypes = frappe.get_all( + "DocType", {"module": ("in", ["HR", "Payroll"]), "custom": 0}, pluck="name" + ) + for doctype in doctypes: + frappe.delete_doc("DocType", doctype, ignore_missing=True) + + frappe.delete_doc("DocType", "Salary Slip Loan", ignore_missing=True) + frappe.delete_doc("DocType", "Salary Component Account", ignore_missing=True) + + notifications = frappe.get_all( + "Notification", {"module": ("in", ["HR", "Payroll"]), "is_standard": 1}, pluck="name" + ) + for notifcation in notifications: + frappe.delete_doc("Notification", notifcation, ignore_missing=True) + + frappe.delete_doc("User Type", "Employee Self Service", ignore_missing=True, force=True) + + for dt in ["Web Form", "Dashboard", "Dashboard Chart", "Number Card"]: + records = frappe.get_all( + dt, {"module": ("in", ["HR", "Payroll"]), "is_standard": 1}, pluck="name" + ) + for record in records: + frappe.delete_doc(dt, record, ignore_missing=True, force=True) + + custom_fields = { + "Salary Component": ["component_type"], + "Employee": ["ifsc_code", "pan_number", "micr_code", "provident_fund_account"], + "Company": [ + "hra_section", + "basic_component", + "hra_component", + "hra_column_break", + "arrear_component", + ], + "Employee Tax Exemption Declaration": [ + "hra_section", + "monthly_house_rent", + "rented_in_metro_city", + "salary_structure_hra", + "hra_column_break", + "annual_hra_exemption", + "monthly_hra_exemption", + ], + "Employee Tax Exemption Proof Submission": [ + "hra_section", + "house_rent_payment_amount", + "rented_in_metro_city", + "rented_from_date", + "rented_to_date", + "hra_column_break", + "monthly_house_rent", + "monthly_hra_exemption", + "total_eligible_hra_exemption", + ], + } + + for doc, fields in custom_fields.items(): + filters = {"dt": doc, "fieldname": ["in", fields]} + records = frappe.get_all("Custom Field", filters=filters, pluck="name") + for record in records: + frappe.delete_doc("Custom Field", record, ignore_missing=True, force=True) diff --git a/erpnext/patches/v14_0/remove_india_localisation.py b/erpnext/patches/v14_0/remove_india_localisation.py new file mode 100644 index 0000000000..616c08f886 --- /dev/null +++ b/erpnext/patches/v14_0/remove_india_localisation.py @@ -0,0 +1,71 @@ +import click +import frappe + + +def execute(): + if "india_compliance" in frappe.get_installed_apps(): + return + + delete_docs() + unlink_custom_fields() + + if not frappe.db.exists("Company", {"country": "India"}): + return + + click.secho( + "India-specific regional features have been moved to a separate app." + " Please install India Compliance to continue using these features:" + " https://github.com/resilient-tech/india-compliance", + fg="yellow", + ) + + +def delete_docs(): + to_delete = { + "DocType": [ + "C-Form", + "C-Form Invoice Detail", + "GST Account", + "E Invoice Request Log", + "E Invoice Settings", + "E Invoice User", + "GST HSN Code", + "HSN Tax Rate", + "GST Settings", + "GSTR 3B Report", + ], + "Print Format": [ + "GST E-Invoice", + "GST Purchase Invoice", + "GST Tax Invoice", + "GST POS Invoice", + ], + "Report": [ + "E-Invoice Summary", + "Eway Bill", + "GST Itemised Purchase Register", + "GST Itemised Sales Register", + "GST Purchase Register", + "GST Sales Register", + "GSTR-1", + "GSTR-2", + "HSN-wise-summary of outward supplies", + ], + } + + for doctype, names in to_delete.items(): + frappe.delete_doc( + doctype, + names, + force=True, + ignore_permissions=True, + ignore_missing=True, + ) + + +def unlink_custom_fields(): + frappe.db.set_value( + "Custom Field", + {"dt": "Item", "fieldname": "gst_hsn_code"}, + {"fieldtype": "Data", "options": ""}, + ) diff --git a/erpnext/patches/v14_0/restore_einvoice_fields.py b/erpnext/patches/v14_0/restore_einvoice_fields.py deleted file mode 100644 index 8c7627cbb0..0000000000 --- a/erpnext/patches/v14_0/restore_einvoice_fields.py +++ /dev/null @@ -1,41 +0,0 @@ -import frappe -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields - -from erpnext.regional.india.setup import add_permissions, add_print_formats - - -def execute(): - # restores back the 2 custom fields that was deleted while removing e-invoicing from v14 - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - custom_fields = { - "Sales Invoice": [ - dict( - fieldname="irn_cancelled", - label="IRN Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval:(doc.irn_cancelled === 1)", - read_only=1, - allow_on_submit=1, - insert_after="customer", - ), - dict( - fieldname="eway_bill_cancelled", - label="E-Way Bill Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval:(doc.eway_bill_cancelled === 1)", - read_only=1, - allow_on_submit=1, - insert_after="customer", - ), - ] - } - create_custom_fields(custom_fields, update=True) - add_permissions() - add_print_formats() diff --git a/erpnext/patches/v14_0/set_payroll_cost_centers.py b/erpnext/patches/v14_0/set_payroll_cost_centers.py deleted file mode 100644 index 0951e39bc3..0000000000 --- a/erpnext/patches/v14_0/set_payroll_cost_centers.py +++ /dev/null @@ -1,29 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("payroll", "doctype", "employee_cost_center") - frappe.reload_doc("payroll", "doctype", "salary_structure_assignment") - - employees = frappe.get_all("Employee", fields=["department", "payroll_cost_center", "name"]) - - employee_cost_center = {} - for d in employees: - cost_center = d.payroll_cost_center - if not cost_center and d.department: - cost_center = frappe.get_cached_value("Department", d.department, "payroll_cost_center") - - if cost_center: - employee_cost_center.setdefault(d.name, cost_center) - - salary_structure_assignments = frappe.get_all( - "Salary Structure Assignment", filters={"docstatus": ["!=", 2]}, fields=["name", "employee"] - ) - - for d in salary_structure_assignments: - cost_center = employee_cost_center.get(d.employee) - if cost_center: - assignment = frappe.get_doc("Salary Structure Assignment", d.name) - if not assignment.get("payroll_cost_centers"): - assignment.append("payroll_cost_centers", {"cost_center": cost_center, "percentage": 100}) - assignment.save() diff --git a/erpnext/patches/v14_0/update_employee_advance_status.py b/erpnext/patches/v14_0/update_employee_advance_status.py deleted file mode 100644 index fc9e05e836..0000000000 --- a/erpnext/patches/v14_0/update_employee_advance_status.py +++ /dev/null @@ -1,29 +0,0 @@ -import frappe - - -def execute(): - frappe.reload_doc("hr", "doctype", "employee_advance") - - advance = frappe.qb.DocType("Employee Advance") - ( - frappe.qb.update(advance) - .set(advance.status, "Returned") - .where( - (advance.docstatus == 1) - & ((advance.return_amount) & (advance.paid_amount == advance.return_amount)) - & (advance.status == "Paid") - ) - ).run() - - ( - frappe.qb.update(advance) - .set(advance.status, "Partly Claimed and Returned") - .where( - (advance.docstatus == 1) - & ( - (advance.claimed_amount & advance.return_amount) - & (advance.paid_amount == (advance.return_amount + advance.claimed_amount)) - ) - & (advance.status == "Paid") - ) - ).run() diff --git a/erpnext/patches/v14_0/update_leave_notification_template.py b/erpnext/patches/v14_0/update_leave_notification_template.py deleted file mode 100644 index aec5f8b016..0000000000 --- a/erpnext/patches/v14_0/update_leave_notification_template.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -import frappe -from frappe import _ - - -def execute(): - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "leave_application/leave_application_email_template.html") - ) - - template = frappe.db.exists("Email Template", _("Leave Approval Notification")) - if template: - frappe.db.set_value("Email Template", template, "response", response) - - template = frappe.db.exists("Email Template", _("Leave Status Notification")) - if template: - frappe.db.set_value("Email Template", template, "response", response) diff --git a/erpnext/patches/v8_1/removed_roles_from_gst_report_non_indian_account.py b/erpnext/patches/v8_1/removed_roles_from_gst_report_non_indian_account.py index a8108745e9..5b1885d6ec 100644 --- a/erpnext/patches/v8_1/removed_roles_from_gst_report_non_indian_account.py +++ b/erpnext/patches/v8_1/removed_roles_from_gst_report_non_indian_account.py @@ -6,16 +6,17 @@ import frappe def execute(): - frappe.reload_doc("core", "doctype", "has_role") - company = frappe.get_all("Company", filters={"country": "India"}) + if frappe.db.exists("Company", {"country": "India"}): + return - if not company: - frappe.db.sql( - """ - delete from - `tabHas Role` - where - parenttype = 'Report' and parent in('GST Sales Register', - 'GST Purchase Register', 'GST Itemised Sales Register', - 'GST Itemised Purchase Register', 'Eway Bill')""" - ) + frappe.reload_doc("core", "doctype", "has_role") + frappe.db.sql( + """ + delete from + `tabHas Role` + where + parenttype = 'Report' and parent in('GST Sales Register', + 'GST Purchase Register', 'GST Itemised Sales Register', + 'GST Itemised Purchase Register', 'Eway Bill') + """ + ) diff --git a/erpnext/patches/v8_1/setup_gst_india.py b/erpnext/patches/v8_1/setup_gst_india.py deleted file mode 100644 index b03439842f..0000000000 --- a/erpnext/patches/v8_1/setup_gst_india.py +++ /dev/null @@ -1,64 +0,0 @@ -import frappe -from frappe.email import sendmail_to_system_managers - - -def execute(): - frappe.reload_doc("stock", "doctype", "item") - frappe.reload_doc("stock", "doctype", "customs_tariff_number") - frappe.reload_doc("accounts", "doctype", "payment_terms_template") - frappe.reload_doc("accounts", "doctype", "payment_schedule") - - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.reload_doc("regional", "doctype", "gst_settings") - frappe.reload_doc("regional", "doctype", "gst_hsn_code") - - for report_name in ( - "GST Sales Register", - "GST Purchase Register", - "GST Itemised Sales Register", - "GST Itemised Purchase Register", - ): - - frappe.reload_doc("regional", "report", frappe.scrub(report_name)) - - from erpnext.regional.india.setup import setup - - delete_custom_field_tax_id_if_exists() - setup(patch=True) - send_gst_update_email() - - -def delete_custom_field_tax_id_if_exists(): - for field in frappe.db.sql_list( - """select name from `tabCustom Field` where fieldname='tax_id' - and dt in ('Sales Order', 'Sales Invoice', 'Delivery Note')""" - ): - frappe.delete_doc("Custom Field", field, ignore_permissions=True) - frappe.db.commit() - - -def send_gst_update_email(): - message = """Hello, - -

ERPNext is now GST Ready!

- -

To start making GST Invoices from 1st of July, you just need to create new Tax Accounts, -Templates and update your Customer's and Supplier's GST Numbers.

- -

Please refer {gst_document_link} to know more about how to setup and implement GST in ERPNext.

- -

Please contact us at support@erpnext.com, if you have any questions.

- -

Thanks,

-ERPNext Team. - """.format( - gst_document_link=" ERPNext GST Document " - ) - - try: - sendmail_to_system_managers("[Important] ERPNext GST updates", message) - except Exception as e: - pass diff --git a/erpnext/patches/v8_7/sync_india_custom_fields.py b/erpnext/patches/v8_7/sync_india_custom_fields.py deleted file mode 100644 index e1b9a732de..0000000000 --- a/erpnext/patches/v8_7/sync_india_custom_fields.py +++ /dev/null @@ -1,42 +0,0 @@ -import frappe - -from erpnext.regional.india.setup import make_custom_fields - - -def execute(): - company = frappe.get_all("Company", filters={"country": "India"}) - if not company: - return - - frappe.reload_doc("Payroll", "doctype", "payroll_period") - frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_declaration") - frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_proof_submission") - frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_declaration_category") - frappe.reload_doc("Payroll", "doctype", "employee_tax_exemption_proof_submission_detail") - - frappe.reload_doc("accounts", "doctype", "tax_category") - - for doctype in ["Sales Invoice", "Delivery Note", "Purchase Invoice"]: - frappe.db.sql( - """delete from `tabCustom Field` where dt = %s - and fieldname in ('port_code', 'shipping_bill_number', 'shipping_bill_date')""", - doctype, - ) - - make_custom_fields() - - frappe.db.sql( - """ - update `tabCustom Field` - set reqd = 0, `default` = '' - where fieldname = 'reason_for_issuing_document' - """ - ) - - frappe.db.sql( - """ - update tabAddress - set gst_state_number=concat("0", gst_state_number) - where ifnull(gst_state_number, '') != '' and gst_state_number<10 - """ - ) diff --git a/erpnext/payroll/__init__.py b/erpnext/payroll/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/dashboard_chart/department_wise_salary(last_month)/department_wise_salary(last_month).json b/erpnext/payroll/dashboard_chart/department_wise_salary(last_month)/department_wise_salary(last_month).json deleted file mode 100644 index 61ae86ff02..0000000000 --- a/erpnext/payroll/dashboard_chart/department_wise_salary(last_month)/department_wise_salary(last_month).json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "aggregate_function_based_on": "rounded_total", - "chart_name": "Department Wise Salary(Last Month)", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:34.511940", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Salary Slip", - "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]", - "group_by_based_on": "department", - "group_by_type": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 12:46:05.272076", - "modified": "2020-07-22 12:48:12.080992", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Department Wise Salary(Last Month)", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Monthly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Bar", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/payroll/dashboard_chart/designation_wise_salary(last_month)/designation_wise_salary(last_month).json b/erpnext/payroll/dashboard_chart/designation_wise_salary(last_month)/designation_wise_salary(last_month).json deleted file mode 100644 index b3c4e59395..0000000000 --- a/erpnext/payroll/dashboard_chart/designation_wise_salary(last_month)/designation_wise_salary(last_month).json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "aggregate_function_based_on": "rounded_total", - "chart_name": "Designation Wise Salary(Last Month)", - "chart_type": "Group By", - "creation": "2020-07-22 11:56:34.550339", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Salary Slip", - "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]", - "group_by_based_on": "designation", - "group_by_type": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 12:22:18.412822", - "modified": "2020-07-22 12:39:07.923382", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Designation Wise Salary(Last Month)", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Monthly", - "timeseries": 0, - "timespan": "Last Year", - "type": "Bar", - "use_report_chart": 0, - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json b/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json deleted file mode 100644 index c77c8a5a36..0000000000 --- a/erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "based_on": "end_date", - "chart_name": "Outgoing Salary", - "chart_type": "Sum", - "creation": "2020-07-22 11:56:34.478848", - "custom_options": "", - "docstatus": 0, - "doctype": "Dashboard Chart", - "document_type": "Salary Slip", - "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false]]", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "last_synced_on": "2020-07-22 12:11:27.481231", - "modified": "2020-07-22 12:20:05.777715", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Outgoing Salary", - "number_of_groups": 0, - "owner": "Administrator", - "time_interval": "Monthly", - "timeseries": 1, - "timespan": "Last Year", - "type": "Line", - "use_report_chart": 0, - "value_based_on": "rounded_total", - "y_axis": [] -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/__init__.py b/erpnext/payroll/doctype/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/additional_salary/__init__.py b/erpnext/payroll/doctype/additional_salary/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.js b/erpnext/payroll/doctype/additional_salary/additional_salary.js deleted file mode 100644 index 24ffce537c..0000000000 --- a/erpnext/payroll/doctype/additional_salary/additional_salary.js +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Additional Salary', { - setup: function(frm) { - frm.add_fetch("salary_component", "deduct_full_tax_on_selected_payroll_date", "deduct_full_tax_on_selected_payroll_date"); - - frm.set_query("employee", function() { - return { - filters: { - company: frm.doc.company - } - }; - }); - }, - - onload: function(frm) { - if (frm.doc.type) { - frm.trigger('set_component_query'); - } - }, - - employee: function(frm) { - if (frm.doc.employee) { - frappe.run_serially([ - () => frm.trigger('get_employee_currency'), - () => frm.trigger('set_company') - ]); - } else { - frm.set_value("company", null); - } - }, - - set_company: function(frm) { - frappe.call({ - method: "frappe.client.get_value", - args: { - doctype: "Employee", - fieldname: "company", - filters: { - name: frm.doc.employee - } - }, - callback: function(data) { - if (data.message) { - frm.set_value("company", data.message.company); - } - } - }); - }, - - company: function(frm) { - frm.set_value("type", ""); - frm.trigger('set_component_query'); - }, - - set_component_query: function(frm) { - if (!frm.doc.company) return; - let filters = {company: frm.doc.company}; - if (frm.doc.type) { - filters.type = frm.doc.type; - } - frm.set_query("salary_component", function() { - return { - filters: filters - }; - }); - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - }, -}); diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.json b/erpnext/payroll/doctype/additional_salary/additional_salary.json deleted file mode 100644 index 9c897a7c69..0000000000 --- a/erpnext/payroll/doctype/additional_salary/additional_salary.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "naming_series:", - "creation": "2018-05-10 12:04:08.396461", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee_details_section", - "naming_series", - "employee", - "employee_name", - "column_break_5", - "company", - "department", - "salary_details_section", - "salary_component", - "type", - "currency", - "amount", - "column_break_13", - "is_recurring", - "payroll_date", - "from_date", - "to_date", - "properties_and_references_section", - "deduct_full_tax_on_selected_payroll_date", - "ref_doctype", - "ref_docname", - "column_break_22", - "overwrite_salary_structure_amount", - "amended_from" - ], - "fields": [ - { - "fieldname": "naming_series", - "fieldtype": "Select", - "label": "Series", - "options": "HR-ADS-.YY.-.MM.-", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "salary_component", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Salary Component", - "options": "Salary Component", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "options": "currency", - "reqd": 1 - }, - { - "default": "1", - "fieldname": "overwrite_salary_structure_amount", - "fieldtype": "Check", - "label": "Overwrite Salary Structure Amount" - }, - { - "default": "0", - "fieldname": "deduct_full_tax_on_selected_payroll_date", - "fieldtype": "Check", - "label": "Deduct Full Tax on Selected Payroll Date" - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "depends_on": "eval:(doc.is_recurring==0)", - "description": "The date on which Salary Component with Amount will contribute for Earnings/Deduction in Salary Slip. ", - "fieldname": "payroll_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Payroll Date", - "mandatory_depends_on": "eval:(doc.is_recurring==0)", - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fetch_from": "salary_component.type", - "fieldname": "type", - "fieldtype": "Data", - "label": "Salary Component Type", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Additional Salary", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fieldname": "is_recurring", - "fieldtype": "Check", - "label": "Is Recurring" - }, - { - "depends_on": "eval:(doc.is_recurring==1)", - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "mandatory_depends_on": "eval:(doc.is_recurring==1)" - }, - { - "depends_on": "eval:(doc.is_recurring==1)", - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", - "mandatory_depends_on": "eval:(doc.is_recurring==1)" - }, - { - "fieldname": "ref_doctype", - "fieldtype": "Link", - "label": "Reference Document Type", - "options": "DocType", - "read_only": 1 - }, - { - "fieldname": "ref_docname", - "fieldtype": "Dynamic Link", - "label": "Reference Document", - "no_copy": 1, - "options": "ref_doctype", - "read_only": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "employee_details_section", - "fieldtype": "Section Break", - "label": "Employee Details" - }, - { - "fieldname": "column_break_13", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_22", - "fieldtype": "Column Break" - }, - { - "fieldname": "salary_details_section", - "fieldtype": "Section Break", - "label": "Salary Details" - }, - { - "fieldname": "properties_and_references_section", - "fieldtype": "Section Break", - "label": "Properties and References" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:56:51.765353", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Additional Salary", - "naming_rule": "By \"Naming Series\" field", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/additional_salary/additional_salary.py b/erpnext/payroll/doctype/additional_salary/additional_salary.py deleted file mode 100644 index 18bd3b7733..0000000000 --- a/erpnext/payroll/doctype/additional_salary/additional_salary.py +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _, bold -from frappe.model.document import Document -from frappe.utils import comma_and, date_diff, formatdate, getdate - -from erpnext.hr.utils import validate_active_employee - - -class AdditionalSalary(Document): - def on_submit(self): - self.update_return_amount_in_employee_advance() - self.update_employee_referral() - - def on_cancel(self): - self.update_return_amount_in_employee_advance() - self.update_employee_referral(cancel=True) - - def validate(self): - validate_active_employee(self.employee) - self.validate_dates() - self.validate_salary_structure() - self.validate_recurring_additional_salary_overlap() - self.validate_employee_referral() - - if self.amount < 0: - frappe.throw(_("Amount should not be less than zero")) - - def validate_salary_structure(self): - if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}): - frappe.throw( - _("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format( - self.employee - ) - ) - - def validate_recurring_additional_salary_overlap(self): - if self.is_recurring: - additional_salaries = frappe.db.sql( - """ - SELECT - name - FROM `tabAdditional Salary` - WHERE - employee=%s - AND name <> %s - AND docstatus=1 - AND is_recurring=1 - AND salary_component = %s - AND to_date >= %s - AND from_date <= %s""", - (self.employee, self.name, self.salary_component, self.from_date, self.to_date), - as_dict=1, - ) - - additional_salaries = [salary.name for salary in additional_salaries] - - if additional_salaries and len(additional_salaries): - frappe.throw( - _( - "Additional Salary: {0} already exist for Salary Component: {1} for period {2} and {3}" - ).format( - bold(comma_and(additional_salaries)), - bold(self.salary_component), - bold(formatdate(self.from_date)), - bold(formatdate(self.to_date)), - ) - ) - - def validate_dates(self): - date_of_joining, relieving_date = frappe.db.get_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - - if getdate(self.from_date) > getdate(self.to_date): - frappe.throw(_("From Date can not be greater than To Date.")) - - if date_of_joining: - if self.payroll_date and getdate(self.payroll_date) < getdate(date_of_joining): - frappe.throw(_("Payroll date can not be less than employee's joining date.")) - elif self.from_date and getdate(self.from_date) < getdate(date_of_joining): - frappe.throw(_("From date can not be less than employee's joining date.")) - - if relieving_date: - if self.to_date and getdate(self.to_date) > getdate(relieving_date): - frappe.throw(_("To date can not be greater than employee's relieving date.")) - if self.payroll_date and getdate(self.payroll_date) > getdate(relieving_date): - frappe.throw(_("Payroll date can not be greater than employee's relieving date.")) - - def validate_employee_referral(self): - if self.ref_doctype == "Employee Referral": - referral_details = frappe.db.get_value( - "Employee Referral", - self.ref_docname, - ["is_applicable_for_referral_bonus", "status"], - as_dict=1, - ) - - if not referral_details.is_applicable_for_referral_bonus: - frappe.throw( - _("Employee Referral {0} is not applicable for referral bonus.").format(self.ref_docname) - ) - - if self.type == "Deduction": - frappe.throw(_("Earning Salary Component is required for Employee Referral Bonus.")) - - if referral_details.status != "Accepted": - frappe.throw( - _( - "Additional Salary for referral bonus can only be created against Employee Referral with status {0}" - ).format(frappe.bold("Accepted")) - ) - - def update_return_amount_in_employee_advance(self): - if self.ref_doctype == "Employee Advance" and self.ref_docname: - return_amount = frappe.db.get_value("Employee Advance", self.ref_docname, "return_amount") - - if self.docstatus == 2: - return_amount -= self.amount - else: - return_amount += self.amount - - frappe.db.set_value("Employee Advance", self.ref_docname, "return_amount", return_amount) - advance = frappe.get_doc("Employee Advance", self.ref_docname) - advance.set_status(update=True) - - def update_employee_referral(self, cancel=False): - if self.ref_doctype == "Employee Referral": - status = "Unpaid" if cancel else "Paid" - frappe.db.set_value("Employee Referral", self.ref_docname, "referral_payment_status", status) - - def get_amount(self, sal_start_date, sal_end_date): - start_date = getdate(sal_start_date) - end_date = getdate(sal_end_date) - total_days = date_diff(getdate(self.to_date), getdate(self.from_date)) + 1 - amount_per_day = self.amount / total_days - if getdate(sal_start_date) <= getdate(self.from_date): - start_date = getdate(self.from_date) - if getdate(sal_end_date) > getdate(self.to_date): - end_date = getdate(self.to_date) - no_of_days = date_diff(getdate(end_date), getdate(start_date)) + 1 - return amount_per_day * no_of_days - - -@frappe.whitelist() -def get_additional_salaries(employee, start_date, end_date, component_type): - from frappe.query_builder import Criterion - - comp_type = "Earning" if component_type == "earnings" else "Deduction" - - additional_sal = frappe.qb.DocType("Additional Salary") - component_field = additional_sal.salary_component.as_("component") - overwrite_field = additional_sal.overwrite_salary_structure_amount.as_("overwrite") - - additional_salary_list = ( - frappe.qb.from_(additional_sal) - .select( - additional_sal.name, - component_field, - additional_sal.type, - additional_sal.amount, - additional_sal.is_recurring, - overwrite_field, - additional_sal.deduct_full_tax_on_selected_payroll_date, - ) - .where( - (additional_sal.employee == employee) - & (additional_sal.docstatus == 1) - & (additional_sal.type == comp_type) - ) - .where( - Criterion.any( - [ - Criterion.all( - [ # is recurring and additional salary dates fall within the payroll period - additional_sal.is_recurring == 1, - additional_sal.from_date <= end_date, - additional_sal.to_date >= end_date, - ] - ), - Criterion.all( - [ # is not recurring and additional salary's payroll date falls within the payroll period - additional_sal.is_recurring == 0, - additional_sal.payroll_date[start_date:end_date], - ] - ), - ] - ) - ) - .run(as_dict=True) - ) - - additional_salaries = [] - components_to_overwrite = [] - - for d in additional_salary_list: - if d.overwrite: - if d.component in components_to_overwrite: - frappe.throw( - _( - "Multiple Additional Salaries with overwrite property exist for Salary Component {0} between {1} and {2}." - ).format(frappe.bold(d.component), start_date, end_date), - title=_("Error"), - ) - - components_to_overwrite.append(d.component) - - additional_salaries.append(d) - - return additional_salaries diff --git a/erpnext/payroll/doctype/additional_salary/test_additional_salary.py b/erpnext/payroll/doctype/additional_salary/test_additional_salary.py deleted file mode 100644 index bd739368a0..0000000000 --- a/erpnext/payroll/doctype/additional_salary/test_additional_salary.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, add_months, nowdate - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.payroll.doctype.salary_component.test_salary_component import create_salary_component -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_employee_salary_slip, - setup_test, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - -class TestAdditionalSalary(FrappeTestCase): - def setUp(self): - setup_test() - - def test_recurring_additional_salary(self): - amount = 0 - salary_component = None - emp_id = make_employee("test_additional@salary.com") - frappe.db.set_value("Employee", emp_id, "relieving_date", add_days(nowdate(), 1800)) - salary_structure = make_salary_structure( - "Test Salary Structure Additional Salary", "Monthly", employee=emp_id - ) - add_sal = get_additional_salary(emp_id) - - ss = make_employee_salary_slip( - "test_additional@salary.com", "Monthly", salary_structure=salary_structure.name - ) - for earning in ss.earnings: - if earning.salary_component == "Recurring Salary Component": - amount = earning.amount - salary_component = earning.salary_component - break - - self.assertEqual(amount, add_sal.amount) - self.assertEqual(salary_component, add_sal.salary_component) - - def test_non_recurring_additional_salary(self): - amount = 0 - salary_component = None - date = nowdate() - - emp_id = make_employee("test_additional@salary.com") - frappe.db.set_value("Employee", emp_id, "relieving_date", add_days(date, 1800)) - salary_structure = make_salary_structure( - "Test Salary Structure Additional Salary", "Monthly", employee=emp_id - ) - add_sal = get_additional_salary(emp_id, recurring=False, payroll_date=date) - - ss = make_employee_salary_slip( - "test_additional@salary.com", "Monthly", salary_structure=salary_structure.name - ) - - amount, salary_component = None, None - for earning in ss.earnings: - if earning.salary_component == "Recurring Salary Component": - amount = earning.amount - salary_component = earning.salary_component - break - - self.assertEqual(amount, add_sal.amount) - self.assertEqual(salary_component, add_sal.salary_component) - - # should not show up in next months - ss.posting_date = add_months(date, 1) - ss.start_date = ss.end_date = None - ss.earnings = [] - ss.deductions = [] - ss.save() - - amount, salary_component = None, None - for earning in ss.earnings: - if earning.salary_component == "Recurring Salary Component": - amount = earning.amount - salary_component = earning.salary_component - break - - self.assertIsNone(amount) - self.assertIsNone(salary_component) - - -def get_additional_salary(emp_id, recurring=True, payroll_date=None): - create_salary_component("Recurring Salary Component") - add_sal = frappe.new_doc("Additional Salary") - add_sal.employee = emp_id - add_sal.salary_component = "Recurring Salary Component" - - add_sal.is_recurring = 1 if recurring else 0 - add_sal.from_date = add_days(nowdate(), -50) - add_sal.to_date = add_days(nowdate(), 180) - add_sal.payroll_date = payroll_date - - add_sal.amount = 5000 - add_sal.currency = erpnext.get_default_currency() - add_sal.save() - add_sal.submit() - - return add_sal diff --git a/erpnext/payroll/doctype/employee_benefit_application/__init__.py b/erpnext/payroll/doctype/employee_benefit_application/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js deleted file mode 100644 index 6756cd93e7..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.js +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Benefit Application', { - employee: function(frm) { - if (frm.doc.employee) { - frappe.run_serially([ - () => frm.trigger('get_employee_currency'), - () => frm.trigger('set_earning_component') - ]); - } - var method, args; - if(frm.doc.employee && frm.doc.date && frm.doc.payroll_period){ - method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits_remaining"; - args = { - employee: frm.doc.employee, - on_date: frm.doc.date, - payroll_period: frm.doc.payroll_period - }; - get_max_benefits(frm, method, args); - } - else if(frm.doc.employee && frm.doc.date){ - method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits"; - args = { - employee: frm.doc.employee, - on_date: frm.doc.date - }; - get_max_benefits(frm, method, args); - } - }, - - date: function(frm) { - frm.trigger('set_earning_component'); - }, - - set_earning_component: function(frm) { - if(!frm.doc.employee && !frm.doc.date) return; - frm.set_query("earning_component", "employee_benefits", function() { - return { - query : "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_earning_components", - filters: {date: frm.doc.date, employee: frm.doc.employee} - }; - }); - }, - - get_employee_currency: function(frm) { - if (frm.doc.employee) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - } - }, - - payroll_period: function(frm) { - var method, args; - if (frm.doc.employee && frm.doc.date && frm.doc.payroll_period) { - method = "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits_remaining"; - args = { - employee: frm.doc.employee, - on_date: frm.doc.date, - payroll_period: frm.doc.payroll_period - }; - get_max_benefits(frm, method, args); - } - }, - max_benefits: function(frm) { - calculate_all(frm.doc); - } -}); - -var get_max_benefits=function(frm, method, args) { - frappe.call({ - method: method, - args: args, - callback: function (data) { - if (!data.exc) { - if (data.message) { - frm.set_value("max_benefits", data.message); - } else { - frm.set_value("max_benefits", 0); - } - } - frm.refresh_fields(); - } - }); -}; - -frappe.ui.form.on("Employee Benefit Application Detail",{ - amount: function(frm) { - calculate_all(frm.doc); - }, - employee_benefits_remove: function(frm) { - calculate_all(frm.doc); - } -}); - -var calculate_all = function(doc) { - var tbl = doc.employee_benefits || []; - var pro_rata_dispensed_amount = 0; - var total_amount = 0; - if (doc.max_benefits === 0) { - doc.employee_benefits = []; - } else { - for (var i = 0; i < tbl.length; i++) { - if (cint(tbl[i].amount) > 0) { - total_amount += flt(tbl[i].amount); - } - if (tbl[i].pay_against_benefit_claim != 1) { - pro_rata_dispensed_amount += flt(tbl[i].amount); - } - } - } - - doc.total_amount = total_amount; - doc.remaining_benefit = doc.max_benefits - total_amount; - doc.pro_rata_dispensed_amount = pro_rata_dispensed_amount; - refresh_many(['pro_rata_dispensed_amount', 'total_amount','remaining_benefit']); -}; diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json deleted file mode 100644 index 2e4b64e9da..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.json +++ /dev/null @@ -1,222 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-BEN-APP-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:31:39.190787", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "currency", - "max_benefits", - "remaining_benefit", - "column_break_2", - "date", - "payroll_period", - "department", - "company", - "amended_from", - "section_break_4", - "employee_benefits", - "totals", - "total_amount", - "column_break", - "pro_rata_dispensed_amount" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "max_benefits", - "fieldtype": "Currency", - "label": "Max Benefits (Yearly)", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "remaining_benefit", - "fieldtype": "Currency", - "label": "Remaining Benefits (Yearly)", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "default": "Today", - "fieldname": "date", - "fieldtype": "Date", - "label": "Date", - "reqd": 1 - }, - { - "fieldname": "payroll_period", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Payroll Period", - "options": "Payroll Period", - "reqd": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Benefit Application", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "label": "Benefits Applied" - }, - { - "fieldname": "employee_benefits", - "fieldtype": "Table", - "label": "Employee Benefits", - "options": "Employee Benefit Application Detail", - "reqd": 1 - }, - { - "fieldname": "totals", - "fieldtype": "Section Break", - "label": "Totals" - }, - { - "fieldname": "total_amount", - "fieldtype": "Currency", - "label": "Total Amount", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "pro_rata_dispensed_amount", - "fieldtype": "Currency", - "label": "Dispensed Amount (Pro-rated)", - "options": "currency", - "read_only": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "read_only": 1, - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "column_break", - "fieldtype": "Column Break" - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:58:31.664468", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Benefit Application", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py deleted file mode 100644 index 0acd44711b..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application/employee_benefit_application.py +++ /dev/null @@ -1,346 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_days, cint, cstr, date_diff, getdate, rounded - -from erpnext.hr.utils import ( - get_holiday_dates_for_employee, - get_previous_claimed_amount, - get_sal_slip_total_benefit_given, - validate_active_employee, -) -from erpnext.payroll.doctype.payroll_period.payroll_period import ( - get_payroll_period_days, - get_period_factor, -) -from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import ( - get_assigned_salary_structure, -) - - -class EmployeeBenefitApplication(Document): - def validate(self): - validate_active_employee(self.employee) - self.validate_duplicate_on_payroll_period() - if not self.max_benefits: - self.max_benefits = get_max_benefits_remaining(self.employee, self.date, self.payroll_period) - if self.max_benefits and self.max_benefits > 0: - self.validate_max_benefit_for_component() - self.validate_prev_benefit_claim() - if self.remaining_benefit > 0: - self.validate_remaining_benefit_amount() - else: - frappe.throw( - _("As per your assigned Salary Structure you cannot apply for benefits").format(self.employee) - ) - - def validate_prev_benefit_claim(self): - if self.employee_benefits: - for benefit in self.employee_benefits: - if benefit.pay_against_benefit_claim == 1: - payroll_period = frappe.get_doc("Payroll Period", self.payroll_period) - benefit_claimed = get_previous_claimed_amount( - self.employee, payroll_period, component=benefit.earning_component - ) - benefit_given = get_sal_slip_total_benefit_given( - self.employee, payroll_period, component=benefit.earning_component - ) - benefit_claim_remining = benefit_claimed - benefit_given - if benefit_claimed > 0 and benefit_claim_remining > benefit.amount: - frappe.throw( - _( - "An amount of {0} already claimed for the component {1}, set the amount equal or greater than {2}" - ).format( - benefit_claimed, benefit.earning_component, benefit_claim_remining - ) - ) - - def validate_remaining_benefit_amount(self): - # check salary structure earnings have flexi component (sum of max_benefit_amount) - # without pro-rata which satisfy the remaining_benefit - # else pro-rata component for the amount - # again comes the same validation and satisfy or throw - benefit_components = [] - if self.employee_benefits: - for employee_benefit in self.employee_benefits: - benefit_components.append(employee_benefit.earning_component) - salary_struct_name = get_assigned_salary_structure(self.employee, self.date) - if salary_struct_name: - non_pro_rata_amount = 0 - pro_rata_amount = 0 - salary_structure = frappe.get_doc("Salary Structure", salary_struct_name) - if salary_structure.earnings: - for earnings in salary_structure.earnings: - if earnings.is_flexible_benefit == 1 and earnings.salary_component not in benefit_components: - pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value( - "Salary Component", - earnings.salary_component, - ["pay_against_benefit_claim", "max_benefit_amount"], - ) - if pay_against_benefit_claim != 1: - pro_rata_amount += max_benefit_amount - else: - non_pro_rata_amount += max_benefit_amount - - if pro_rata_amount == 0 and non_pro_rata_amount == 0: - frappe.throw( - _("Please add the remaining benefits {0} to any of the existing component").format( - self.remaining_benefit - ) - ) - elif non_pro_rata_amount > 0 and non_pro_rata_amount < rounded(self.remaining_benefit): - frappe.throw( - _( - "You can claim only an amount of {0}, the rest amount {1} should be in the application as pro-rata component" - ).format(non_pro_rata_amount, self.remaining_benefit - non_pro_rata_amount) - ) - elif non_pro_rata_amount == 0: - frappe.throw( - _("Please add the remaining benefits {0} to the application as pro-rata component").format( - self.remaining_benefit - ) - ) - - def validate_max_benefit_for_component(self): - if self.employee_benefits: - max_benefit_amount = 0 - for employee_benefit in self.employee_benefits: - self.validate_max_benefit(employee_benefit.earning_component) - max_benefit_amount += employee_benefit.amount - if max_benefit_amount > self.max_benefits: - frappe.throw( - _("Maximum benefit amount of employee {0} exceeds {1}").format( - self.employee, self.max_benefits - ) - ) - - def validate_max_benefit(self, earning_component_name): - max_benefit_amount = frappe.db.get_value( - "Salary Component", earning_component_name, "max_benefit_amount" - ) - benefit_amount = 0 - for employee_benefit in self.employee_benefits: - if employee_benefit.earning_component == earning_component_name: - benefit_amount += employee_benefit.amount - prev_sal_slip_flexi_amount = get_sal_slip_total_benefit_given( - self.employee, frappe.get_doc("Payroll Period", self.payroll_period), earning_component_name - ) - benefit_amount += prev_sal_slip_flexi_amount - if rounded(benefit_amount, 2) > max_benefit_amount: - frappe.throw( - _("Maximum benefit amount of component {0} exceeds {1}").format( - earning_component_name, max_benefit_amount - ) - ) - - def validate_duplicate_on_payroll_period(self): - application = frappe.db.exists( - "Employee Benefit Application", - {"employee": self.employee, "payroll_period": self.payroll_period, "docstatus": 1}, - ) - if application: - frappe.throw( - _("Employee {0} already submited an apllication {1} for the payroll period {2}").format( - self.employee, application, self.payroll_period - ) - ) - - -@frappe.whitelist() -def get_max_benefits(employee, on_date): - sal_struct = get_assigned_salary_structure(employee, on_date) - if sal_struct: - max_benefits = frappe.db.get_value("Salary Structure", sal_struct, "max_benefits") - if max_benefits > 0: - return max_benefits - return False - - -@frappe.whitelist() -def get_max_benefits_remaining(employee, on_date, payroll_period): - max_benefits = get_max_benefits(employee, on_date) - if max_benefits and max_benefits > 0: - have_depends_on_payment_days = False - per_day_amount_total = 0 - payroll_period_days = get_payroll_period_days(on_date, on_date, employee)[1] - payroll_period_obj = frappe.get_doc("Payroll Period", payroll_period) - - # Get all salary slip flexi amount in the payroll period - prev_sal_slip_flexi_total = get_sal_slip_total_benefit_given(employee, payroll_period_obj) - - if prev_sal_slip_flexi_total > 0: - # Check salary structure hold depends_on_payment_days component - # If yes then find the amount per day of each component and find the sum - sal_struct_name = get_assigned_salary_structure(employee, on_date) - if sal_struct_name: - sal_struct = frappe.get_doc("Salary Structure", sal_struct_name) - for sal_struct_row in sal_struct.get("earnings"): - salary_component = frappe.get_doc("Salary Component", sal_struct_row.salary_component) - if ( - salary_component.depends_on_payment_days == 1 - and salary_component.pay_against_benefit_claim != 1 - ): - have_depends_on_payment_days = True - benefit_amount = get_benefit_amount_based_on_pro_rata( - sal_struct, salary_component.max_benefit_amount - ) - amount_per_day = benefit_amount / payroll_period_days - per_day_amount_total += amount_per_day - - # Then the sum multiply with the no of lwp in that period - # Include that amount to the prev_sal_slip_flexi_total to get the actual - if have_depends_on_payment_days and per_day_amount_total > 0: - holidays = get_holiday_dates_for_employee(employee, payroll_period_obj.start_date, on_date) - working_days = date_diff(on_date, payroll_period_obj.start_date) + 1 - leave_days = calculate_lwp(employee, payroll_period_obj.start_date, holidays, working_days) - leave_days_amount = leave_days * per_day_amount_total - prev_sal_slip_flexi_total += leave_days_amount - - return max_benefits - prev_sal_slip_flexi_total - return max_benefits - - -def calculate_lwp(employee, start_date, holidays, working_days): - lwp = 0 - holidays = "','".join(holidays) - for d in range(working_days): - dt = add_days(cstr(getdate(start_date)), d) - leave = frappe.db.sql( - """ - select t1.name, t1.half_day - from `tabLeave Application` t1, `tabLeave Type` t2 - where t2.name = t1.leave_type - and t2.is_lwp = 1 - and t1.docstatus = 1 - and t1.employee = %(employee)s - and CASE WHEN t2.include_holiday != 1 THEN %(dt)s not in ('{0}') and %(dt)s between from_date and to_date - WHEN t2.include_holiday THEN %(dt)s between from_date and to_date - END - """.format( - holidays - ), - {"employee": employee, "dt": dt}, - ) - if leave: - lwp = cint(leave[0][1]) and (lwp + 0.5) or (lwp + 1) - return lwp - - -def get_benefit_component_amount( - employee, start_date, end_date, salary_component, sal_struct, payroll_frequency, payroll_period -): - if not payroll_period: - frappe.msgprint( - _("Start and end dates not in a valid Payroll Period, cannot calculate {0}").format( - salary_component - ) - ) - return False - - # Considering there is only one application for a year - benefit_application = frappe.db.sql( - """ - select name - from `tabEmployee Benefit Application` - where - payroll_period=%(payroll_period)s - and employee=%(employee)s - and docstatus = 1 - """, - {"employee": employee, "payroll_period": payroll_period.name}, - ) - - current_benefit_amount = 0.0 - component_max_benefit, depends_on_payment_days = frappe.db.get_value( - "Salary Component", salary_component, ["max_benefit_amount", "depends_on_payment_days"] - ) - - benefit_amount = 0 - if benefit_application: - benefit_amount = frappe.db.get_value( - "Employee Benefit Application Detail", - {"parent": benefit_application[0][0], "earning_component": salary_component}, - "amount", - ) - elif component_max_benefit: - benefit_amount = get_benefit_amount_based_on_pro_rata(sal_struct, component_max_benefit) - - current_benefit_amount = 0 - if benefit_amount: - total_sub_periods = get_period_factor( - employee, start_date, end_date, payroll_frequency, payroll_period, depends_on_payment_days - )[0] - - current_benefit_amount = benefit_amount / total_sub_periods - - return current_benefit_amount - - -def get_benefit_amount_based_on_pro_rata(sal_struct, component_max_benefit): - max_benefits_total = 0 - benefit_amount = 0 - for d in sal_struct.get("earnings"): - if d.is_flexible_benefit == 1: - component = frappe.db.get_value( - "Salary Component", - d.salary_component, - ["max_benefit_amount", "pay_against_benefit_claim"], - as_dict=1, - ) - if not component.pay_against_benefit_claim: - max_benefits_total += component.max_benefit_amount - - if max_benefits_total > 0: - benefit_amount = sal_struct.max_benefits * component.max_benefit_amount / max_benefits_total - if benefit_amount > component_max_benefit: - benefit_amount = component_max_benefit - - return benefit_amount - - -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs -def get_earning_components(doctype, txt, searchfield, start, page_len, filters): - if len(filters) < 2: - return {} - - salary_structure = get_assigned_salary_structure(filters["employee"], filters["date"]) - - if salary_structure: - return frappe.db.sql( - """ - select salary_component - from `tabSalary Detail` - where parent = %s and is_flexible_benefit = 1 - order by name - """, - salary_structure, - ) - else: - frappe.throw( - _("Salary Structure not found for employee {0} and date {1}").format( - filters["employee"], filters["date"] - ) - ) - - -@frappe.whitelist() -def get_earning_components_max_benefits(employee, date, earning_component): - salary_structure = get_assigned_salary_structure(employee, date) - amount = frappe.db.sql( - """ - select amount - from `tabSalary Detail` - where parent = %s and is_flexible_benefit = 1 - and salary_component = %s - order by name - """, - salary_structure, - earning_component, - ) - - return amount if amount else 0 diff --git a/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py b/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py deleted file mode 100644 index 02149adfce..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application/test_employee_benefit_application.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeBenefitApplication(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/__init__.py b/erpnext/payroll/doctype/employee_benefit_application_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json b/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json deleted file mode 100644 index c93d356c20..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "actions": [], - "creation": "2018-04-13 16:36:18.389786", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "earning_component", - "pay_against_benefit_claim", - "max_benefit_amount", - "amount" - ], - "fields": [ - { - "fieldname": "earning_component", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Earning Component", - "options": "Salary Component", - "reqd": 1 - }, - { - "default": "0", - "fetch_from": "earning_component.pay_against_benefit_claim", - "fieldname": "pay_against_benefit_claim", - "fieldtype": "Check", - "label": "Pay Against Benefit Claim", - "read_only": 1 - }, - { - "fetch_from": "earning_component.max_benefit_amount", - "fieldname": "max_benefit_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Max Benefit Amount", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "options": "currency", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-09-29 16:22:15.783854", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Benefit Application Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py b/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py deleted file mode 100644 index 51aa2c9dcf..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_application_detail/employee_benefit_application_detail.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class EmployeeBenefitApplicationDetail(Document): - pass diff --git a/erpnext/payroll/doctype/employee_benefit_claim/__init__.py b/erpnext/payroll/doctype/employee_benefit_claim/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js deleted file mode 100644 index e1f8431ec5..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Benefit Claim', { - setup: function(frm) { - frm.set_query("earning_component", function() { - return { - query : "erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application.get_earning_components", - filters: {date: frm.doc.claim_date, employee: frm.doc.employee} - }; - }); - }, - employee: function(frm) { - frm.set_value("earning_component", null); - if (frm.doc.employee) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - } - } - }); - } - if (!frm.doc.earning_component) { - frm.doc.max_amount_eligible = null; - frm.doc.claimed_amount = null; - } - frm.refresh_fields(); - } -}); diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json deleted file mode 100644 index 5deb0a5eca..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "HR-BEN-CLM-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:43:10.386409", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "column_break_3", - "claim_date", - "currency", - "company", - "benefit_type_and_amount", - "earning_component", - "max_amount_eligible", - "pay_against_benefit_claim", - "claimed_amount", - "salary_slip", - "amended_from", - "section_break_9", - "attachments" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "default": "Today", - "fieldname": "claim_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Claim Date", - "reqd": 1 - }, - { - "fieldname": "benefit_type_and_amount", - "fieldtype": "Section Break", - "label": "Benefit Type and Amount" - }, - { - "fieldname": "earning_component", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Claim Benefit For", - "options": "Salary Component", - "reqd": 1 - }, - { - "fetch_from": "earning_component.max_benefit_amount", - "fieldname": "max_amount_eligible", - "fieldtype": "Currency", - "label": "Max Amount Eligible", - "options": "currency", - "read_only": 1 - }, - { - "default": "0", - "fetch_from": "earning_component.pay_against_benefit_claim", - "fieldname": "pay_against_benefit_claim", - "fieldtype": "Check", - "hidden": 1, - "label": "Pay Against Benefit Claim", - "read_only": 1 - }, - { - "fieldname": "claimed_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Claimed Amount", - "options": "currency", - "reqd": 1 - }, - { - "fieldname": "salary_slip", - "fieldtype": "Link", - "label": "Salary Slip", - "options": "Salary Slip", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Benefit Claim", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "section_break_9", - "fieldtype": "Section Break", - "label": "Expense Proof" - }, - { - "fieldname": "attachments", - "fieldtype": "Attach", - "label": "Attachments" - }, - { - "depends_on": "eval: doc.employee", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "read_only": 1, - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:59:15.699118", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Benefit Claim", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py b/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py deleted file mode 100644 index 6ec34b9e71..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_claim/employee_benefit_claim.py +++ /dev/null @@ -1,241 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt - -from erpnext.hr.utils import get_previous_claimed_amount, validate_active_employee -from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import ( - get_max_benefits, -) -from erpnext.payroll.doctype.payroll_period.payroll_period import get_payroll_period -from erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment import ( - get_assigned_salary_structure, -) - - -class EmployeeBenefitClaim(Document): - def validate(self): - validate_active_employee(self.employee) - max_benefits = get_max_benefits(self.employee, self.claim_date) - if not max_benefits or max_benefits <= 0: - frappe.throw(_("Employee {0} has no maximum benefit amount").format(self.employee)) - payroll_period = get_payroll_period( - self.claim_date, self.claim_date, frappe.db.get_value("Employee", self.employee, "company") - ) - if not payroll_period: - frappe.throw( - _("{0} is not in a valid Payroll Period").format( - frappe.format(self.claim_date, dict(fieldtype="Date")) - ) - ) - self.validate_max_benefit_for_component(payroll_period) - self.validate_max_benefit_for_sal_struct(max_benefits) - self.validate_benefit_claim_amount(max_benefits, payroll_period) - if self.pay_against_benefit_claim: - self.validate_non_pro_rata_benefit_claim(max_benefits, payroll_period) - - def validate_benefit_claim_amount(self, max_benefits, payroll_period): - claimed_amount = self.claimed_amount - claimed_amount += get_previous_claimed_amount(self.employee, payroll_period) - if max_benefits < claimed_amount: - frappe.throw( - _( - "Maximum benefit of employee {0} exceeds {1} by the sum {2} of previous claimed amount" - ).format(self.employee, max_benefits, claimed_amount - max_benefits) - ) - - def validate_max_benefit_for_sal_struct(self, max_benefits): - if self.claimed_amount > max_benefits: - frappe.throw( - _("Maximum benefit amount of employee {0} exceeds {1}").format(self.employee, max_benefits) - ) - - def validate_max_benefit_for_component(self, payroll_period): - if self.max_amount_eligible: - claimed_amount = self.claimed_amount - claimed_amount += get_previous_claimed_amount( - self.employee, payroll_period, component=self.earning_component - ) - if claimed_amount > self.max_amount_eligible: - frappe.throw( - _("Maximum amount eligible for the component {0} exceeds {1}").format( - self.earning_component, self.max_amount_eligible - ) - ) - - def validate_non_pro_rata_benefit_claim(self, max_benefits, payroll_period): - claimed_amount = self.claimed_amount - pro_rata_amount = self.get_pro_rata_amount_in_application(payroll_period.name) - if not pro_rata_amount: - pro_rata_amount = 0 - # Get pro_rata_amount if there is no application, - # get salary structure for the date and calculate pro-rata amount - sal_struct_name = get_assigned_salary_structure(self.employee, self.claim_date) - if sal_struct_name: - sal_struct = frappe.get_doc("Salary Structure", sal_struct_name) - pro_rata_amount = get_benefit_pro_rata_ratio_amount(self.employee, self.claim_date, sal_struct) - - claimed_amount += get_previous_claimed_amount(self.employee, payroll_period, non_pro_rata=True) - if max_benefits < pro_rata_amount + claimed_amount: - frappe.throw( - _( - "Maximum benefit of employee {0} exceeds {1} by the sum {2} of benefit application pro-rata component amount and previous claimed amount" - ).format( - self.employee, max_benefits, pro_rata_amount + claimed_amount - max_benefits - ) - ) - - def get_pro_rata_amount_in_application(self, payroll_period): - application = frappe.db.exists( - "Employee Benefit Application", - {"employee": self.employee, "payroll_period": payroll_period, "docstatus": 1}, - ) - if application: - return frappe.db.get_value( - "Employee Benefit Application", application, "pro_rata_dispensed_amount" - ) - return False - - -def get_benefit_pro_rata_ratio_amount(employee, on_date, sal_struct): - total_pro_rata_max = 0 - benefit_amount_total = 0 - for sal_struct_row in sal_struct.get("earnings"): - try: - pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value( - "Salary Component", - sal_struct_row.salary_component, - ["pay_against_benefit_claim", "max_benefit_amount"], - ) - except TypeError: - # show the error in tests? - frappe.throw(_("Unable to find Salary Component {0}").format(sal_struct_row.salary_component)) - if sal_struct_row.is_flexible_benefit == 1 and pay_against_benefit_claim != 1: - total_pro_rata_max += max_benefit_amount - if total_pro_rata_max > 0: - for sal_struct_row in sal_struct.get("earnings"): - pay_against_benefit_claim, max_benefit_amount = frappe.db.get_value( - "Salary Component", - sal_struct_row.salary_component, - ["pay_against_benefit_claim", "max_benefit_amount"], - ) - - if sal_struct_row.is_flexible_benefit == 1 and pay_against_benefit_claim != 1: - component_max = max_benefit_amount - benefit_amount = component_max * sal_struct.max_benefits / total_pro_rata_max - if benefit_amount > component_max: - benefit_amount = component_max - benefit_amount_total += benefit_amount - return benefit_amount_total - - -def get_benefit_claim_amount(employee, start_date, end_date, salary_component=None): - query = """ - select sum(claimed_amount) - from `tabEmployee Benefit Claim` - where - employee=%(employee)s - and docstatus = 1 - and pay_against_benefit_claim = 1 - and claim_date between %(start_date)s and %(end_date)s - """ - - if salary_component: - query += " and earning_component = %(earning_component)s" - - claimed_amount = flt( - frappe.db.sql( - query, - { - "employee": employee, - "start_date": start_date, - "end_date": end_date, - "earning_component": salary_component, - }, - )[0][0] - ) - - return claimed_amount - - -def get_total_benefit_dispensed(employee, sal_struct, sal_slip_start_date, payroll_period): - pro_rata_amount = 0 - claimed_amount = 0 - application = frappe.db.exists( - "Employee Benefit Application", - {"employee": employee, "payroll_period": payroll_period.name, "docstatus": 1}, - ) - if application: - application_obj = frappe.get_doc("Employee Benefit Application", application) - pro_rata_amount = ( - application_obj.pro_rata_dispensed_amount - + application_obj.max_benefits - - application_obj.remaining_benefit - ) - else: - pro_rata_amount = get_benefit_pro_rata_ratio_amount(employee, sal_slip_start_date, sal_struct) - - claimed_amount += get_benefit_claim_amount( - employee, payroll_period.start_date, payroll_period.end_date - ) - - return claimed_amount + pro_rata_amount - - -def get_last_payroll_period_benefits( - employee, sal_slip_start_date, sal_slip_end_date, payroll_period, sal_struct -): - max_benefits = get_max_benefits(employee, payroll_period.end_date) - if not max_benefits: - max_benefits = 0 - remaining_benefit = max_benefits - get_total_benefit_dispensed( - employee, sal_struct, sal_slip_start_date, payroll_period - ) - if remaining_benefit > 0: - have_remaining = True - # Set the remaining benefits to flexi non pro-rata component in the salary structure - salary_components_array = [] - for d in sal_struct.get("earnings"): - if d.is_flexible_benefit == 1: - salary_component = frappe.get_doc("Salary Component", d.salary_component) - if salary_component.pay_against_benefit_claim == 1: - claimed_amount = get_benefit_claim_amount( - employee, payroll_period.start_date, sal_slip_end_date, d.salary_component - ) - amount_fit_to_component = salary_component.max_benefit_amount - claimed_amount - if amount_fit_to_component > 0: - if remaining_benefit > amount_fit_to_component: - amount = amount_fit_to_component - remaining_benefit -= amount_fit_to_component - else: - amount = remaining_benefit - have_remaining = False - current_claimed_amount = get_benefit_claim_amount( - employee, sal_slip_start_date, sal_slip_end_date, d.salary_component - ) - amount += current_claimed_amount - struct_row = {} - salary_components_dict = {} - struct_row["depends_on_payment_days"] = salary_component.depends_on_payment_days - struct_row["salary_component"] = salary_component.name - struct_row["abbr"] = salary_component.salary_component_abbr - struct_row["do_not_include_in_total"] = salary_component.do_not_include_in_total - struct_row["is_tax_applicable"] = (salary_component.is_tax_applicable,) - struct_row["is_flexible_benefit"] = (salary_component.is_flexible_benefit,) - struct_row[ - "variable_based_on_taxable_salary" - ] = salary_component.variable_based_on_taxable_salary - salary_components_dict["amount"] = amount - salary_components_dict["struct_row"] = struct_row - salary_components_array.append(salary_components_dict) - if not have_remaining: - break - - if len(salary_components_array) > 0: - return salary_components_array - - return False diff --git a/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py b/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py deleted file mode 100644 index b1d3c66ca8..0000000000 --- a/erpnext/payroll/doctype/employee_benefit_claim/test_employee_benefit_claim.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeBenefitClaim(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/employee_cost_center/__init__.py b/erpnext/payroll/doctype/employee_cost_center/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json b/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json deleted file mode 100644 index 8fed9f7752..0000000000 --- a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "actions": [], - "creation": "2021-12-23 12:44:38.389283", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "cost_center", - "percentage" - ], - "fields": [ - { - "allow_on_submit": 1, - "fieldname": "cost_center", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Cost Center", - "options": "Cost Center", - "reqd": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "percentage", - "fieldtype": "Int", - "in_list_view": 1, - "label": "Percentage (%)", - "non_negative": 1, - "reqd": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-12-23 17:39:03.410924", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Cost Center", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "states": [] -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py b/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py deleted file mode 100644 index 6c5be9744b..0000000000 --- a/erpnext/payroll/doctype/employee_cost_center/employee_cost_center.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class EmployeeCostCenter(Document): - pass diff --git a/erpnext/payroll/doctype/employee_incentive/__init__.py b/erpnext/payroll/doctype/employee_incentive/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.js b/erpnext/payroll/doctype/employee_incentive/employee_incentive.js deleted file mode 100644 index b2809b164a..0000000000 --- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Incentive', { - setup: function(frm) { - frm.set_query("employee", function() { - return { - filters: { - "status": "Active" - } - }; - }); - frm.trigger('set_earning_component'); - }, - - employee: function(frm) { - if (frm.doc.employee) { - frappe.run_serially([ - () => frm.trigger('get_employee_currency'), - () => frm.trigger('set_company') - ]); - } else { - frm.set_value("company", null); - } - }, - - set_company: function(frm) { - frappe.call({ - method: "frappe.client.get_value", - args: { - doctype: "Employee", - fieldname: "company", - filters: { - name: frm.doc.employee - } - }, - callback: function(data) { - if (data.message) { - frm.set_value("company", data.message.company); - frm.trigger('set_earning_component'); - } - } - }); - }, - - set_earning_component: function(frm) { - if (!frm.doc.company) return; - frm.set_query("salary_component", function() { - return { - filters: {type: "earning", company: frm.doc.company} - }; - }); - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - }, -}); diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.json b/erpnext/payroll/doctype/employee_incentive/employee_incentive.json deleted file mode 100644 index 64fb8c5c98..0000000000 --- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "actions": [], - "autoname": "HR-EINV-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:13:43.404546", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "company", - "currency", - "incentive_amount", - "column_break_5", - "salary_component", - "payroll_date", - "department", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fieldname": "incentive_amount", - "fieldtype": "Currency", - "label": "Incentive Amount", - "options": "currency", - "reqd": 1 - }, - { - "fieldname": "payroll_date", - "fieldtype": "Date", - "label": "Payroll Date", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Incentive", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "salary_component", - "fieldtype": "Link", - "label": "Salary Component", - "options": "Salary Component", - "reqd": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:52:19.850710", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Incentive", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_incentive/employee_incentive.py b/erpnext/payroll/doctype/employee_incentive/employee_incentive.py deleted file mode 100644 index 7686185349..0000000000 --- a/erpnext/payroll/doctype/employee_incentive/employee_incentive.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - -from erpnext.hr.utils import validate_active_employee - - -class EmployeeIncentive(Document): - def validate(self): - validate_active_employee(self.employee) - self.validate_salary_structure() - - def validate_salary_structure(self): - if not frappe.db.exists("Salary Structure Assignment", {"employee": self.employee}): - frappe.throw( - _("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format( - self.employee - ) - ) - - def on_submit(self): - company = frappe.db.get_value("Employee", self.employee, "company") - - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.employee = self.employee - additional_salary.currency = self.currency - additional_salary.salary_component = self.salary_component - additional_salary.overwrite_salary_structure_amount = 0 - additional_salary.amount = self.incentive_amount - additional_salary.payroll_date = self.payroll_date - additional_salary.company = company - additional_salary.ref_doctype = self.doctype - additional_salary.ref_docname = self.name - additional_salary.submit() diff --git a/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py b/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py deleted file mode 100644 index e296fdf864..0000000000 --- a/erpnext/payroll/doctype/employee_incentive/test_employee_incentive.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeIncentive(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/employee_other_income/__init__.py b/erpnext/payroll/doctype/employee_other_income/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.js b/erpnext/payroll/doctype/employee_other_income/employee_other_income.js deleted file mode 100644 index c1a74e863b..0000000000 --- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Other Income', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.json b/erpnext/payroll/doctype/employee_other_income/employee_other_income.json deleted file mode 100644 index 04ce9f79a1..0000000000 --- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "actions": [], - "autoname": "HR-INCOME-.######", - "creation": "2020-03-18 15:04:40.767434", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "payroll_period", - "column_break_3", - "company", - "source", - "amount", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fieldname": "payroll_period", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Payroll Period", - "options": "Payroll Period", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "source", - "fieldtype": "Data", - "label": "Source" - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "options": "Company:company:default_currency", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Other Income", - "print_hide": 1, - "read_only": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:58:43.255900", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Other Income", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "quick_entry": 1, - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_other_income/employee_other_income.py b/erpnext/payroll/doctype/employee_other_income/employee_other_income.py deleted file mode 100644 index 51059a1364..0000000000 --- a/erpnext/payroll/doctype/employee_other_income/employee_other_income.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class EmployeeOtherIncome(Document): - pass diff --git a/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py b/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py deleted file mode 100644 index 8f0f637650..0000000000 --- a/erpnext/payroll/doctype/employee_other_income/test_employee_other_income.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestEmployeeOtherIncome(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_category/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js deleted file mode 100644 index 1df609f320..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Tax Exemption Category', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json deleted file mode 100644 index f2556d7d96..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "Prompt", - "creation": "2018-04-13 16:51:36.971140", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "max_amount", - "is_active" - ], - "fields": [ - { - "fieldname": "max_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Max Exemption Amount" - }, - { - "default": "1", - "fieldname": "is_active", - "fieldtype": "Check", - "label": "Is Active" - } - ], - "links": [], - "modified": "2020-06-22 23:16:47.472910", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Category", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py b/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py deleted file mode 100644 index 5c109dec96..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_category/employee_tax_exemption_category.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class EmployeeTaxExemptionCategory(Document): - pass diff --git a/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py b/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py deleted file mode 100644 index 84e6183f3b..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_category/test_employee_tax_exemption_category.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeTaxExemptionCategory(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js deleted file mode 100644 index fb11875e96..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Tax Exemption Declaration', { - setup: function(frm) { - frm.set_query('employee', function() { - return { - filters: { - 'status': "Active" - } - } - }); - - frm.set_query('payroll_period', function() { - const fields = {'employee': 'Employee', 'company': 'Company'}; - - for (let [field, label] of Object.entries(fields)) { - if (!frm.doc[field]) { - frappe.msgprint(__("Please select {0}", [label])) - } - }; - - if (frm.doc.employee && frm.doc.company){ - return { - filters: { - 'company': frm.doc.company - } - } - } - }); - - frm.set_query('exemption_sub_category', 'declarations', function() { - return { - filters: { - 'is_active': 1 - } - } - }); - }, - - refresh: function(frm) { - if(frm.doc.docstatus==1) { - frm.add_custom_button(__('Submit Proof'), function() { - frappe.model.open_mapped_doc({ - method: "erpnext.payroll.doctype.employee_tax_exemption_declaration.employee_tax_exemption_declaration.make_proof_submission", - frm: frm - }); - }).addClass("btn-primary"); - } - }, - - employee: function(frm) { - if (frm.doc.employee) { - frm.trigger('get_employee_currency'); - } - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - } -}); diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json deleted file mode 100644 index 5ef373e887..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-TAX-DEC-.YYYY.-.#####", - "creation": "2018-04-13 16:53:36.175504", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "column_break_2", - "payroll_period", - "company", - "currency", - "amended_from", - "section_break_8", - "declarations", - "section_break_10", - "total_declared_amount", - "column_break_12", - "total_exemption_amount" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fieldname": "payroll_period", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Payroll Period", - "options": "Payroll Period", - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Tax Exemption Declaration", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "section_break_8", - "fieldtype": "Section Break" - }, - { - "fieldname": "declarations", - "fieldtype": "Table", - "label": "Declarations", - "options": "Employee Tax Exemption Declaration Category" - }, - { - "fieldname": "section_break_10", - "fieldtype": "Section Break" - }, - { - "fieldname": "total_declared_amount", - "fieldtype": "Currency", - "label": "Total Declared Amount", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fieldname": "total_exemption_amount", - "fieldtype": "Currency", - "label": "Total Exemption Amount", - "options": "currency", - "read_only": 1 - }, - { - "depends_on": "eval: doc.employee", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:58:54.707871", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Declaration", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py deleted file mode 100644 index c0ef2eee78..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import flt - -from erpnext.hr.utils import ( - calculate_annual_eligible_hra_exemption, - get_total_exemption_amount, - validate_active_employee, - validate_duplicate_exemption_for_payroll_period, - validate_tax_declaration, -) - - -class EmployeeTaxExemptionDeclaration(Document): - def validate(self): - validate_active_employee(self.employee) - validate_tax_declaration(self.declarations) - validate_duplicate_exemption_for_payroll_period( - self.doctype, self.name, self.payroll_period, self.employee - ) - self.set_total_declared_amount() - self.set_total_exemption_amount() - self.calculate_hra_exemption() - - def set_total_declared_amount(self): - self.total_declared_amount = 0.0 - for d in self.declarations: - self.total_declared_amount += flt(d.amount) - - def set_total_exemption_amount(self): - self.total_exemption_amount = get_total_exemption_amount(self.declarations) - - def calculate_hra_exemption(self): - self.salary_structure_hra, self.annual_hra_exemption, self.monthly_hra_exemption = 0, 0, 0 - if self.get("monthly_house_rent"): - hra_exemption = calculate_annual_eligible_hra_exemption(self) - if hra_exemption: - self.total_exemption_amount += hra_exemption["annual_exemption"] - self.salary_structure_hra = hra_exemption["hra_amount"] - self.annual_hra_exemption = hra_exemption["annual_exemption"] - self.monthly_hra_exemption = hra_exemption["monthly_exemption"] - - -@frappe.whitelist() -def make_proof_submission(source_name, target_doc=None): - doclist = get_mapped_doc( - "Employee Tax Exemption Declaration", - source_name, - { - "Employee Tax Exemption Declaration": { - "doctype": "Employee Tax Exemption Proof Submission", - "field_no_map": ["monthly_house_rent", "monthly_hra_exemption"], - }, - "Employee Tax Exemption Declaration Category": { - "doctype": "Employee Tax Exemption Proof Submission Detail", - "add_if_empty": True, - }, - }, - target_doc, - ) - - return doclist diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py deleted file mode 100644 index 1d90e7383f..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration/test_employee_tax_exemption_declaration.py +++ /dev/null @@ -1,165 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.utils import DuplicateDeclarationError - - -class TestEmployeeTaxExemptionDeclaration(unittest.TestCase): - def setUp(self): - make_employee("employee@taxexepmtion.com") - make_employee("employee1@taxexepmtion.com") - create_payroll_period() - create_exemption_category() - frappe.db.sql("""delete from `tabEmployee Tax Exemption Declaration`""") - - def test_duplicate_category_in_declaration(self): - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Declaration", - "employee": frappe.get_value("Employee", {"user_id": "employee@taxexepmtion.com"}, "name"), - "company": erpnext.get_default_company(), - "payroll_period": "_Test Payroll Period", - "currency": erpnext.get_default_currency(), - "declarations": [ - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=100000, - ), - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=50000, - ), - ], - } - ) - self.assertRaises(frappe.ValidationError, declaration.save) - - def test_duplicate_entry_for_payroll_period(self): - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Declaration", - "employee": frappe.get_value("Employee", {"user_id": "employee@taxexepmtion.com"}, "name"), - "company": erpnext.get_default_company(), - "payroll_period": "_Test Payroll Period", - "currency": erpnext.get_default_currency(), - "declarations": [ - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=100000, - ), - dict( - exemption_sub_category="_Test1 Sub Category", - exemption_category="_Test Category", - amount=50000, - ), - ], - } - ).insert() - - duplicate_declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Declaration", - "employee": frappe.get_value("Employee", {"user_id": "employee@taxexepmtion.com"}, "name"), - "company": erpnext.get_default_company(), - "payroll_period": "_Test Payroll Period", - "currency": erpnext.get_default_currency(), - "declarations": [ - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=100000, - ) - ], - } - ) - self.assertRaises(DuplicateDeclarationError, duplicate_declaration.insert) - duplicate_declaration.employee = frappe.get_value( - "Employee", {"user_id": "employee1@taxexepmtion.com"}, "name" - ) - self.assertTrue(duplicate_declaration.insert) - - def test_exemption_amount(self): - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Declaration", - "employee": frappe.get_value("Employee", {"user_id": "employee@taxexepmtion.com"}, "name"), - "company": erpnext.get_default_company(), - "payroll_period": "_Test Payroll Period", - "currency": erpnext.get_default_currency(), - "declarations": [ - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=80000, - ), - dict( - exemption_sub_category="_Test1 Sub Category", - exemption_category="_Test Category", - amount=60000, - ), - ], - } - ).insert() - - self.assertEqual(declaration.total_exemption_amount, 100000) - - -def create_payroll_period(**args): - args = frappe._dict(args) - name = args.name or "_Test Payroll Period" - if not frappe.db.exists("Payroll Period", name): - from datetime import date - - payroll_period = frappe.get_doc( - dict( - doctype="Payroll Period", - name=name, - company=args.company or erpnext.get_default_company(), - start_date=args.start_date or date(date.today().year, 1, 1), - end_date=args.end_date or date(date.today().year, 12, 31), - ) - ).insert() - return payroll_period - else: - return frappe.get_doc("Payroll Period", name) - - -def create_exemption_category(): - if not frappe.db.exists("Employee Tax Exemption Category", "_Test Category"): - category = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Category", - "name": "_Test Category", - "deduction_component": "Income Tax", - "max_amount": 100000, - } - ).insert() - if not frappe.db.exists("Employee Tax Exemption Sub Category", "_Test Sub Category"): - frappe.get_doc( - { - "doctype": "Employee Tax Exemption Sub Category", - "name": "_Test Sub Category", - "exemption_category": "_Test Category", - "max_amount": 100000, - "is_active": 1, - } - ).insert() - if not frappe.db.exists("Employee Tax Exemption Sub Category", "_Test1 Sub Category"): - frappe.get_doc( - { - "doctype": "Employee Tax Exemption Sub Category", - "name": "_Test1 Sub Category", - "exemption_category": "_Test Category", - "max_amount": 50000, - "is_active": 1, - } - ).insert() diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json deleted file mode 100644 index 723a3df3c7..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "actions": [], - "creation": "2018-04-13 16:56:23.333041", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "exemption_sub_category", - "exemption_category", - "max_amount", - "amount" - ], - "fields": [ - { - "fieldname": "exemption_sub_category", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Exemption Sub Category", - "options": "Employee Tax Exemption Sub Category", - "reqd": 1 - }, - { - "fetch_from": "exemption_sub_category.exemption_category", - "fieldname": "exemption_category", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Exemption Category", - "options": "Employee Tax Exemption Category", - "read_only": 1, - "reqd": 1 - }, - { - "fetch_from": "exemption_sub_category.max_amount", - "fieldname": "max_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Maximum Exempted Amount", - "options": "currency", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Declared Amount", - "options": "currency", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-10-20 16:43:09.606265", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Declaration Category", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py b/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py deleted file mode 100644 index 4322f31c01..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_declaration_category/employee_tax_exemption_declaration_category.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class EmployeeTaxExemptionDeclarationCategory(Document): - pass diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js deleted file mode 100644 index 4fb0a3771e..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.js +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Tax Exemption Proof Submission', { - setup: function(frm) { - frm.set_query('employee', function() { - return { - filters: { - 'status': "Active" - } - } - }); - - frm.set_query('payroll_period', function() { - if(frm.doc.employee && frm.doc.company){ - return { - filters: { - 'company': frm.doc.company - } - } - }else { - frappe.msgprint(__("Please select Employee")); - } - }); - - frm.set_query('exemption_sub_category', 'tax_exemption_proofs', function() { - return { - filters: { - 'is_active': 1 - } - } - }); - }, - - refresh: function(frm) { - if(frm.doc.docstatus === 0) { - let filters = { - docstatus: 1, - company: frm.doc.company - }; - if(frm.doc.employee) filters["employee"] = frm.doc.employee; - if(frm.doc.payroll_period) filters["payroll_period"] = frm.doc.payroll_period; - - frm.add_custom_button(__('Get Details From Declaration'), function() { - erpnext.utils.map_current_doc({ - method: "erpnext.payroll.doctype.employee_tax_exemption_declaration.employee_tax_exemption_declaration.make_proof_submission", - source_doctype: "Employee Tax Exemption Declaration", - target: frm, - date_field: "creation", - setters: { - employee: frm.doc.employee || undefined - }, - get_query_filters: filters - }); - }); - } - }, - - currency: function(frm) { - frm.refresh_fields(); - }, - - employee: function(frm) { - if (frm.doc.employee) { - frm.trigger('get_employee_currency'); - } - }, - - get_employee_currency: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - }, -}); diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json deleted file mode 100644 index bb90051e5d..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-TAX-PRF-.YYYY.-.#####", - "creation": "2018-04-13 17:24:11.456132", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "currency", - "column_break_2", - "submission_date", - "payroll_period", - "company", - "section_break_5", - "tax_exemption_proofs", - "section_break_10", - "total_actual_amount", - "column_break_12", - "exemption_amount", - "attachment_section", - "attachments", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "default": "Today", - "fieldname": "submission_date", - "fieldtype": "Date", - "label": "Submission Date", - "reqd": 1 - }, - { - "fieldname": "payroll_period", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Payroll Period", - "options": "Payroll Period", - "reqd": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break" - }, - { - "fieldname": "tax_exemption_proofs", - "fieldtype": "Table", - "label": "Tax Exemption Proofs", - "options": "Employee Tax Exemption Proof Submission Detail" - }, - { - "fieldname": "section_break_10", - "fieldtype": "Section Break" - }, - { - "fieldname": "total_actual_amount", - "fieldtype": "Currency", - "label": "Total Actual Amount", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "column_break_12", - "fieldtype": "Column Break" - }, - { - "fieldname": "exemption_amount", - "fieldtype": "Currency", - "label": "Total Exemption Amount", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "attachment_section", - "fieldtype": "Section Break" - }, - { - "fieldname": "attachments", - "fieldtype": "Attach", - "label": "Attachments" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Employee Tax Exemption Proof Submission", - "print_hide": 1, - "read_only": 1 - }, - { - "depends_on": "eval: doc.employee", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:58:24.244546", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Proof Submission", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py deleted file mode 100644 index c52efaba59..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/employee_tax_exemption_proof_submission.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document -from frappe.utils import flt - -from erpnext.hr.utils import ( - calculate_hra_exemption_for_period, - get_total_exemption_amount, - validate_active_employee, - validate_duplicate_exemption_for_payroll_period, - validate_tax_declaration, -) - - -class EmployeeTaxExemptionProofSubmission(Document): - def validate(self): - validate_active_employee(self.employee) - validate_tax_declaration(self.tax_exemption_proofs) - self.set_total_actual_amount() - self.set_total_exemption_amount() - self.calculate_hra_exemption() - validate_duplicate_exemption_for_payroll_period( - self.doctype, self.name, self.payroll_period, self.employee - ) - - def set_total_actual_amount(self): - self.total_actual_amount = flt(self.get("house_rent_payment_amount")) - for d in self.tax_exemption_proofs: - self.total_actual_amount += flt(d.amount) - - def set_total_exemption_amount(self): - self.exemption_amount = get_total_exemption_amount(self.tax_exemption_proofs) - - def calculate_hra_exemption(self): - self.monthly_hra_exemption, self.monthly_house_rent, self.total_eligible_hra_exemption = 0, 0, 0 - if self.get("house_rent_payment_amount"): - hra_exemption = calculate_hra_exemption_for_period(self) - if hra_exemption: - self.exemption_amount += hra_exemption["total_eligible_hra_exemption"] - self.monthly_hra_exemption = hra_exemption["monthly_exemption"] - self.monthly_house_rent = hra_exemption["monthly_house_rent"] - self.total_eligible_hra_exemption = hra_exemption["total_eligible_hra_exemption"] diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py deleted file mode 100644 index 58b2c1af05..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - -from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import ( - create_exemption_category, - create_payroll_period, -) - - -class TestEmployeeTaxExemptionProofSubmission(unittest.TestCase): - def setup(self): - make_employee("employee@proofsubmission.com") - create_payroll_period() - create_exemption_category() - frappe.db.sql("""delete from `tabEmployee Tax Exemption Proof Submission`""") - - def test_exemption_amount_lesser_than_category_max(self): - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Proof Submission", - "employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"), - "payroll_period": "Test Payroll Period", - "tax_exemption_proofs": [ - dict( - exemption_sub_category="_Test Sub Category", - type_of_proof="Test Proof", - exemption_category="_Test Category", - amount=150000, - ) - ], - } - ) - self.assertRaises(frappe.ValidationError, declaration.save) - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Proof Submission", - "payroll_period": "Test Payroll Period", - "employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"), - "tax_exemption_proofs": [ - dict( - exemption_sub_category="_Test Sub Category", - type_of_proof="Test Proof", - exemption_category="_Test Category", - amount=100000, - ) - ], - } - ) - self.assertTrue(declaration.save) - self.assertTrue(declaration.submit) - - def test_duplicate_category_in_proof_submission(self): - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Proof Submission", - "employee": frappe.get_value("Employee", {"user_id": "employee@proofsubmission.com"}, "name"), - "payroll_period": "Test Payroll Period", - "tax_exemption_proofs": [ - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - type_of_proof="Test Proof", - amount=100000, - ), - dict( - exemption_sub_category="_Test Sub Category", - exemption_category="_Test Category", - amount=50000, - ), - ], - } - ) - self.assertRaises(frappe.ValidationError, declaration.save) diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json deleted file mode 100644 index 2fd8b94efd..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "actions": [], - "creation": "2018-04-13 17:19:03.006149", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "exemption_sub_category", - "exemption_category", - "max_amount", - "type_of_proof", - "amount" - ], - "fields": [ - { - "fieldname": "exemption_sub_category", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Exemption Sub Category", - "options": "Employee Tax Exemption Sub Category", - "reqd": 1 - }, - { - "fetch_from": "exemption_sub_category.exemption_category", - "fieldname": "exemption_category", - "fieldtype": "Read Only", - "in_list_view": 1, - "label": "Exemption Category", - "reqd": 1 - }, - { - "fetch_from": "exemption_sub_category.max_amount", - "fieldname": "max_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Maximum Exemption Amount", - "options": "currency", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "type_of_proof", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Type of Proof", - "reqd": 1 - }, - { - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Actual Amount", - "options": "currency" - } - ], - "istable": 1, - "links": [], - "modified": "2020-10-20 16:47:31.480870", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Proof Submission Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py b/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py deleted file mode 100644 index 37209e5840..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_proof_submission_detail/employee_tax_exemption_proof_submission_detail.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class EmployeeTaxExemptionProofSubmissionDetail(Document): - pass diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/__init__.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js deleted file mode 100644 index 8a83a2739c..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Employee Tax Exemption Sub Category', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json deleted file mode 100644 index f8c4b8bcb0..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "Prompt", - "creation": "2018-05-09 12:47:26.983095", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "exemption_category", - "max_amount", - "is_active" - ], - "fields": [ - { - "fieldname": "exemption_category", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Tax Exemption Category", - "options": "Employee Tax Exemption Category", - "reqd": 1 - }, - { - "fetch_from": "exemption_category.max_amount", - "fetch_if_empty": 1, - "fieldname": "max_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Max Exemption Amount" - }, - { - "default": "1", - "fieldname": "is_active", - "fieldtype": "Check", - "label": "Is Active" - } - ], - "links": [], - "modified": "2020-06-22 23:18:08.254645", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Employee Tax Exemption Sub Category", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py deleted file mode 100644 index fb75d6706c..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/employee_tax_exemption_sub_category.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt - - -class EmployeeTaxExemptionSubCategory(Document): - def validate(self): - category_max_amount = frappe.db.get_value( - "Employee Tax Exemption Category", self.exemption_category, "max_amount" - ) - if flt(self.max_amount) > flt(category_max_amount): - frappe.throw( - _( - "Max Exemption Amount cannot be greater than maximum exemption amount {0} of Tax Exemption Category {1}" - ).format(category_max_amount, self.exemption_category) - ) diff --git a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py b/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py deleted file mode 100644 index 64d2e3a1e6..0000000000 --- a/erpnext/payroll/doctype/employee_tax_exemption_sub_category/test_employee_tax_exemption_sub_category.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestEmployeeTaxExemptionSubCategory(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/gratuity/__init__.py b/erpnext/payroll/doctype/gratuity/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/gratuity/gratuity.js b/erpnext/payroll/doctype/gratuity/gratuity.js deleted file mode 100644 index 3d69c46e55..0000000000 --- a/erpnext/payroll/doctype/gratuity/gratuity.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Gratuity', { - setup: function (frm) { - frm.set_query("salary_component", function () { - return { - filters: { - type: "Earning" - } - }; - }); - - frm.set_query("expense_account", function () { - return { - filters: { - "root_type": "Expense", - "is_group": 0, - "company": frm.doc.company - } - }; - }); - - frm.set_query("payable_account", function () { - return { - filters: { - "root_type": "Liability", - "is_group": 0, - "company": frm.doc.company - } - }; - }); - }, - refresh: function (frm) { - if (frm.doc.docstatus == 1 && !frm.doc.pay_via_salary_slip && frm.doc.status == "Unpaid") { - frm.add_custom_button(__("Create Payment Entry"), function () { - return frappe.call({ - method: 'erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry', - args: { - "dt": frm.doc.doctype, - "dn": frm.doc.name - }, - callback: function (r) { - var doclist = frappe.model.sync(r.message); - frappe.set_route("Form", doclist[0].doctype, doclist[0].name); - } - }); - }); - } - }, - employee: function (frm) { - frm.events.calculate_work_experience_and_amount(frm); - }, - gratuity_rule: function (frm) { - frm.events.calculate_work_experience_and_amount(frm); - }, - calculate_work_experience_and_amount: function (frm) { - - if (frm.doc.employee && frm.doc.gratuity_rule) { - frappe.call({ - method: "erpnext.payroll.doctype.gratuity.gratuity.calculate_work_experience_and_amount", - args: { - employee: frm.doc.employee, - gratuity_rule: frm.doc.gratuity_rule - } - }).then((r) => { - frm.set_value("current_work_experience", r.message['current_work_experience']); - frm.set_value("amount", r.message['amount']); - }); - } - } - -}); diff --git a/erpnext/payroll/doctype/gratuity/gratuity.json b/erpnext/payroll/doctype/gratuity/gratuity.json deleted file mode 100644 index 1fd1cecaaa..0000000000 --- a/erpnext/payroll/doctype/gratuity/gratuity.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "actions": [], - "autoname": "HR-GRA-PAY-.#####", - "creation": "2022-01-27 16:24:28.200061", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "designation", - "column_break_3", - "posting_date", - "status", - "company", - "gratuity_rule", - "section_break_5", - "pay_via_salary_slip", - "payroll_date", - "salary_component", - "payable_account", - "expense_account", - "mode_of_payment", - "cost_center", - "column_break_15", - "current_work_experience", - "amount", - "paid_amount", - "amended_from" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.company", - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "posting_date", - "fieldtype": "Date", - "label": "Posting date", - "reqd": 1 - }, - { - "default": "0", - "fieldname": "current_work_experience", - "fieldtype": "Int", - "label": "Current Work Experience", - "read_only": 1 - }, - { - "default": "0", - "fieldname": "amount", - "fieldtype": "Currency", - "label": "Total Amount", - "read_only": 1, - "reqd": 1 - }, - { - "default": "Draft", - "fieldname": "status", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Status", - "options": "Draft\nUnpaid\nPaid", - "read_only": 1, - "reqd": 1 - }, - { - "depends_on": "eval: !doc.pay_via_salary_slip", - "fieldname": "expense_account", - "fieldtype": "Link", - "label": "Expense Account", - "mandatory_depends_on": "eval: !doc.pay_via_salary_slip", - "options": "Account" - }, - { - "depends_on": "eval: !doc.pay_via_salary_slip", - "fieldname": "mode_of_payment", - "fieldtype": "Link", - "label": "Mode of Payment", - "mandatory_depends_on": "eval: !doc.pay_via_salary_slip", - "options": "Mode of Payment" - }, - { - "fieldname": "gratuity_rule", - "fieldtype": "Link", - "label": "Gratuity Rule", - "options": "Gratuity Rule", - "reqd": 1 - }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "label": "Payment Configuration" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Data", - "label": "Designation", - "read_only": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Gratuity", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_15", - "fieldtype": "Column Break" - }, - { - "default": "0", - "depends_on": "eval:doc.pay_via_salary_slip == 0", - "fieldname": "paid_amount", - "fieldtype": "Currency", - "label": "Paid Amount", - "read_only": 1 - }, - { - "depends_on": "eval: !doc.pay_via_salary_slip", - "fieldname": "payable_account", - "fieldtype": "Link", - "label": "Payable Account", - "mandatory_depends_on": "eval: !doc.pay_via_salary_slip", - "options": "Account" - }, - { - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "options": "Cost Center" - }, - { - "default": "1", - "fieldname": "pay_via_salary_slip", - "fieldtype": "Check", - "label": "Pay via Salary Slip" - }, - { - "depends_on": "pay_via_salary_slip", - "fieldname": "payroll_date", - "fieldtype": "Date", - "label": "Payroll Date", - "mandatory_depends_on": "pay_via_salary_slip" - }, - { - "depends_on": "pay_via_salary_slip", - "fieldname": "salary_component", - "fieldtype": "Link", - "label": "Salary Component", - "mandatory_depends_on": "pay_via_salary_slip", - "options": "Salary Component" - } - ], - "index_web_pages_for_search": 1, - "is_submittable": 1, - "links": [], - "modified": "2022-02-02 14:00:45.536152", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Gratuity", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/gratuity/gratuity.py b/erpnext/payroll/doctype/gratuity/gratuity.py deleted file mode 100644 index 91740ae8c6..0000000000 --- a/erpnext/payroll/doctype/gratuity/gratuity.py +++ /dev/null @@ -1,334 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from math import floor - -import frappe -from frappe import _, bold -from frappe.utils import flt, get_datetime, get_link_to_form - -from erpnext.accounts.general_ledger import make_gl_entries -from erpnext.controllers.accounts_controller import AccountsController - - -class Gratuity(AccountsController): - def validate(self): - data = calculate_work_experience_and_amount(self.employee, self.gratuity_rule) - self.current_work_experience = data["current_work_experience"] - self.amount = data["amount"] - if self.docstatus == 1: - self.status = "Unpaid" - - def on_submit(self): - if self.pay_via_salary_slip: - self.create_additional_salary() - else: - self.create_gl_entries() - - def on_cancel(self): - self.ignore_linked_doctypes = ["GL Entry"] - self.create_gl_entries(cancel=True) - - def create_gl_entries(self, cancel=False): - gl_entries = self.get_gl_entries() - make_gl_entries(gl_entries, cancel) - - def get_gl_entries(self): - gl_entry = [] - # payable entry - if self.amount: - gl_entry.append( - self.get_gl_dict( - { - "account": self.payable_account, - "credit": self.amount, - "credit_in_account_currency": self.amount, - "against": self.expense_account, - "party_type": "Employee", - "party": self.employee, - "against_voucher_type": self.doctype, - "against_voucher": self.name, - "cost_center": self.cost_center, - }, - item=self, - ) - ) - - # expense entries - gl_entry.append( - self.get_gl_dict( - { - "account": self.expense_account, - "debit": self.amount, - "debit_in_account_currency": self.amount, - "against": self.payable_account, - "cost_center": self.cost_center, - }, - item=self, - ) - ) - else: - frappe.throw(_("Total Amount can not be zero")) - - return gl_entry - - def create_additional_salary(self): - if self.pay_via_salary_slip: - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.employee = self.employee - additional_salary.salary_component = self.salary_component - additional_salary.overwrite_salary_structure_amount = 0 - additional_salary.amount = self.amount - additional_salary.payroll_date = self.payroll_date - additional_salary.company = self.company - additional_salary.ref_doctype = self.doctype - additional_salary.ref_docname = self.name - additional_salary.submit() - - def set_total_advance_paid(self): - paid_amount = frappe.db.sql( - """ - select ifnull(sum(debit_in_account_currency), 0) as paid_amount - from `tabGL Entry` - where against_voucher_type = 'Gratuity' - and against_voucher = %s - and party_type = 'Employee' - and party = %s - """, - (self.name, self.employee), - as_dict=1, - )[0].paid_amount - - if flt(paid_amount) > self.amount: - frappe.throw(_("Row {0}# Paid Amount cannot be greater than Total amount")) - - self.db_set("paid_amount", paid_amount) - if self.amount == self.paid_amount: - self.db_set("status", "Paid") - - -@frappe.whitelist() -def calculate_work_experience_and_amount(employee, gratuity_rule): - current_work_experience = calculate_work_experience(employee, gratuity_rule) or 0 - gratuity_amount = calculate_gratuity_amount(employee, gratuity_rule, current_work_experience) or 0 - - return {"current_work_experience": current_work_experience, "amount": gratuity_amount} - - -def calculate_work_experience(employee, gratuity_rule): - - total_working_days_per_year, minimum_year_for_gratuity = frappe.db.get_value( - "Gratuity Rule", gratuity_rule, ["total_working_days_per_year", "minimum_year_for_gratuity"] - ) - - date_of_joining, relieving_date = frappe.db.get_value( - "Employee", employee, ["date_of_joining", "relieving_date"] - ) - if not relieving_date: - frappe.throw( - _("Please set Relieving Date for employee: {0}").format( - bold(get_link_to_form("Employee", employee)) - ) - ) - - method = frappe.db.get_value( - "Gratuity Rule", gratuity_rule, "work_experience_calculation_function" - ) - employee_total_workings_days = calculate_employee_total_workings_days( - employee, date_of_joining, relieving_date - ) - - current_work_experience = employee_total_workings_days / total_working_days_per_year or 1 - current_work_experience = get_work_experience_using_method( - method, current_work_experience, minimum_year_for_gratuity, employee - ) - return current_work_experience - - -def calculate_employee_total_workings_days(employee, date_of_joining, relieving_date): - employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(date_of_joining)).days - - payroll_based_on = frappe.db.get_value("Payroll Settings", None, "payroll_based_on") or "Leave" - if payroll_based_on == "Leave": - total_lwp = get_non_working_days(employee, relieving_date, "On Leave") - employee_total_workings_days -= total_lwp - elif payroll_based_on == "Attendance": - total_absents = get_non_working_days(employee, relieving_date, "Absent") - employee_total_workings_days -= total_absents - - return employee_total_workings_days - - -def get_work_experience_using_method( - method, current_work_experience, minimum_year_for_gratuity, employee -): - if method == "Round off Work Experience": - current_work_experience = round(current_work_experience) - else: - current_work_experience = floor(current_work_experience) - - if current_work_experience < minimum_year_for_gratuity: - frappe.throw( - _("Employee: {0} have to complete minimum {1} years for gratuity").format( - bold(employee), minimum_year_for_gratuity - ) - ) - return current_work_experience - - -def get_non_working_days(employee, relieving_date, status): - - filters = { - "docstatus": 1, - "status": status, - "employee": employee, - "attendance_date": ("<=", get_datetime(relieving_date)), - } - - if status == "On Leave": - lwp_leave_types = frappe.get_list("Leave Type", filters={"is_lwp": 1}) - lwp_leave_types = [leave_type.name for leave_type in lwp_leave_types] - filters["leave_type"] = ("IN", lwp_leave_types) - - record = frappe.get_all("Attendance", filters=filters, fields=["COUNT(name) as total_lwp"]) - return record[0].total_lwp if len(record) else 0 - - -def calculate_gratuity_amount(employee, gratuity_rule, experience): - applicable_earnings_component = get_applicable_components(gratuity_rule) - total_applicable_components_amount = get_total_applicable_component_amount( - employee, applicable_earnings_component, gratuity_rule - ) - - calculate_gratuity_amount_based_on = frappe.db.get_value( - "Gratuity Rule", gratuity_rule, "calculate_gratuity_amount_based_on" - ) - gratuity_amount = 0 - slabs = get_gratuity_rule_slabs(gratuity_rule) - slab_found = False - year_left = experience - - for slab in slabs: - if calculate_gratuity_amount_based_on == "Current Slab": - slab_found, gratuity_amount = calculate_amount_based_on_current_slab( - slab.from_year, - slab.to_year, - experience, - total_applicable_components_amount, - slab.fraction_of_applicable_earnings, - ) - if slab_found: - break - - elif calculate_gratuity_amount_based_on == "Sum of all previous slabs": - if slab.to_year == 0 and slab.from_year == 0: - gratuity_amount += ( - year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings - ) - slab_found = True - break - - if experience > slab.to_year and experience > slab.from_year and slab.to_year != 0: - gratuity_amount += ( - (slab.to_year - slab.from_year) - * total_applicable_components_amount - * slab.fraction_of_applicable_earnings - ) - year_left -= slab.to_year - slab.from_year - slab_found = True - elif slab.from_year <= experience and (experience < slab.to_year or slab.to_year == 0): - gratuity_amount += ( - year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings - ) - slab_found = True - - if not slab_found: - frappe.throw( - _("No Suitable Slab found for Calculation of gratuity amount in Gratuity Rule: {0}").format( - bold(gratuity_rule) - ) - ) - return gratuity_amount - - -def get_applicable_components(gratuity_rule): - applicable_earnings_component = frappe.get_all( - "Gratuity Applicable Component", filters={"parent": gratuity_rule}, fields=["salary_component"] - ) - if len(applicable_earnings_component) == 0: - frappe.throw( - _("No Applicable Earnings Component found for Gratuity Rule: {0}").format( - bold(get_link_to_form("Gratuity Rule", gratuity_rule)) - ) - ) - applicable_earnings_component = [ - component.salary_component for component in applicable_earnings_component - ] - - return applicable_earnings_component - - -def get_total_applicable_component_amount(employee, applicable_earnings_component, gratuity_rule): - sal_slip = get_last_salary_slip(employee) - if not sal_slip: - frappe.throw(_("No Salary Slip is found for Employee: {0}").format(bold(employee))) - component_and_amounts = frappe.get_all( - "Salary Detail", - filters={ - "docstatus": 1, - "parent": sal_slip, - "parentfield": "earnings", - "salary_component": ("in", applicable_earnings_component), - }, - fields=["amount"], - ) - total_applicable_components_amount = 0 - if not len(component_and_amounts): - frappe.throw(_("No Applicable Component is present in last month salary slip")) - for data in component_and_amounts: - total_applicable_components_amount += data.amount - return total_applicable_components_amount - - -def calculate_amount_based_on_current_slab( - from_year, - to_year, - experience, - total_applicable_components_amount, - fraction_of_applicable_earnings, -): - slab_found = False - gratuity_amount = 0 - if experience >= from_year and (to_year == 0 or experience < to_year): - gratuity_amount = ( - total_applicable_components_amount * experience * fraction_of_applicable_earnings - ) - if fraction_of_applicable_earnings: - slab_found = True - - return slab_found, gratuity_amount - - -def get_gratuity_rule_slabs(gratuity_rule): - return frappe.get_all( - "Gratuity Rule Slab", filters={"parent": gratuity_rule}, fields=["*"], order_by="idx" - ) - - -def get_salary_structure(employee): - return frappe.get_list( - "Salary Structure Assignment", - filters={"employee": employee, "docstatus": 1}, - fields=["from_date", "salary_structure"], - order_by="from_date desc", - )[0].salary_structure - - -def get_last_salary_slip(employee): - salary_slips = frappe.get_list( - "Salary Slip", filters={"employee": employee, "docstatus": 1}, order_by="start_date desc" - ) - if not salary_slips: - return - return salary_slips[0].name diff --git a/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py b/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py deleted file mode 100644 index 9396461f1d..0000000000 --- a/erpnext/payroll/doctype/gratuity/gratuity_dashboard.py +++ /dev/null @@ -1,11 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "reference_name", - "non_standard_fieldnames": { - "Additional Salary": "ref_docname", - }, - "transactions": [{"label": _("Payment"), "items": ["Payment Entry", "Additional Salary"]}], - } diff --git a/erpnext/payroll/doctype/gratuity/test_gratuity.py b/erpnext/payroll/doctype/gratuity/test_gratuity.py deleted file mode 100644 index aa03d80d63..0000000000 --- a/erpnext/payroll/doctype/gratuity/test_gratuity.py +++ /dev/null @@ -1,226 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.utils import add_days, flt, get_datetime, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.expense_claim.test_expense_claim import get_payable_account -from erpnext.payroll.doctype.gratuity.gratuity import get_last_salary_slip -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_deduction_salary_component, - make_earning_salary_component, - make_employee_salary_slip, -) -from erpnext.regional.united_arab_emirates.setup import create_gratuity_rule - -test_dependencies = ["Salary Component", "Salary Slip", "Account"] - - -class TestGratuity(unittest.TestCase): - def setUp(self): - frappe.db.delete("Gratuity") - frappe.db.delete("Additional Salary", {"ref_doctype": "Gratuity"}) - - make_earning_salary_component( - setup=True, test_tax=True, company_list=["_Test Company"], include_flexi_benefits=True - ) - make_deduction_salary_component(setup=True, test_tax=True, company_list=["_Test Company"]) - - def test_get_last_salary_slip_should_return_none_for_new_employee(self): - new_employee = make_employee("new_employee@salary.com", company="_Test Company") - salary_slip = get_last_salary_slip(new_employee) - assert salary_slip is None - - def test_check_gratuity_amount_based_on_current_slab_and_additional_salary_creation(self): - employee, sal_slip = create_employee_and_get_last_salary_slip() - - rule = get_gratuity_rule("Rule Under Unlimited Contract on termination (UAE)") - gratuity = create_gratuity(pay_via_salary_slip=1, employee=employee, rule=rule.name) - - # work experience calculation - date_of_joining, relieving_date = frappe.db.get_value( - "Employee", employee, ["date_of_joining", "relieving_date"] - ) - employee_total_workings_days = ( - get_datetime(relieving_date) - get_datetime(date_of_joining) - ).days - - experience = employee_total_workings_days / rule.total_working_days_per_year - gratuity.reload() - from math import floor - - self.assertEqual(floor(experience), gratuity.current_work_experience) - - # amount Calculation - component_amount = frappe.get_all( - "Salary Detail", - filters={ - "docstatus": 1, - "parent": sal_slip, - "parentfield": "earnings", - "salary_component": "Basic Salary", - }, - fields=["amount"], - ) - - """ 5 - 0 fraction is 1 """ - - gratuity_amount = component_amount[0].amount * experience - gratuity.reload() - - self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2)) - - # additional salary creation (Pay via salary slip) - self.assertTrue(frappe.db.exists("Additional Salary", {"ref_docname": gratuity.name})) - - def test_check_gratuity_amount_based_on_all_previous_slabs(self): - employee, sal_slip = create_employee_and_get_last_salary_slip() - rule = get_gratuity_rule("Rule Under Limited Contract (UAE)") - set_mode_of_payment_account() - - gratuity = create_gratuity( - expense_account="Payment Account - _TC", mode_of_payment="Cash", employee=employee - ) - - # work experience calculation - date_of_joining, relieving_date = frappe.db.get_value( - "Employee", employee, ["date_of_joining", "relieving_date"] - ) - employee_total_workings_days = ( - get_datetime(relieving_date) - get_datetime(date_of_joining) - ).days - - experience = employee_total_workings_days / rule.total_working_days_per_year - - gratuity.reload() - - from math import floor - - self.assertEqual(floor(experience), gratuity.current_work_experience) - - # amount Calculation - component_amount = frappe.get_all( - "Salary Detail", - filters={ - "docstatus": 1, - "parent": sal_slip, - "parentfield": "earnings", - "salary_component": "Basic Salary", - }, - fields=["amount"], - ) - - """ range | Fraction - 0-1 | 0 - 1-5 | 0.7 - 5-0 | 1 - """ - - gratuity_amount = ((0 * 1) + (4 * 0.7) + (1 * 1)) * component_amount[0].amount - gratuity.reload() - - self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2)) - self.assertEqual(gratuity.status, "Unpaid") - - from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry - - pay_entry = get_payment_entry("Gratuity", gratuity.name) - pay_entry.reference_no = "123467" - pay_entry.reference_date = getdate() - pay_entry.save() - pay_entry.submit() - gratuity.reload() - - self.assertEqual(gratuity.status, "Paid") - self.assertEqual(flt(gratuity.paid_amount, 2), flt(gratuity.amount, 2)) - - def tearDown(self): - frappe.db.rollback() - - -def get_gratuity_rule(name): - rule = frappe.db.exists("Gratuity Rule", name) - if not rule: - create_gratuity_rule() - rule = frappe.get_doc("Gratuity Rule", name) - rule.applicable_earnings_component = [] - rule.append("applicable_earnings_component", {"salary_component": "Basic Salary"}) - rule.save() - rule.reload() - - return rule - - -def create_gratuity(**args): - if args: - args = frappe._dict(args) - gratuity = frappe.new_doc("Gratuity") - gratuity.employee = args.employee - gratuity.posting_date = getdate() - gratuity.gratuity_rule = args.rule or "Rule Under Limited Contract (UAE)" - gratuity.pay_via_salary_slip = args.pay_via_salary_slip or 0 - if gratuity.pay_via_salary_slip: - gratuity.payroll_date = getdate() - gratuity.salary_component = "Performance Bonus" - else: - gratuity.expense_account = args.expense_account or "Payment Account - _TC" - gratuity.payable_account = args.payable_account or get_payable_account("_Test Company") - gratuity.mode_of_payment = args.mode_of_payment or "Cash" - - gratuity.save() - gratuity.submit() - - return gratuity - - -def set_mode_of_payment_account(): - if not frappe.db.exists("Account", "Payment Account - _TC"): - mode_of_payment = create_account() - - mode_of_payment = frappe.get_doc("Mode of Payment", "Cash") - - mode_of_payment.accounts = [] - mode_of_payment.append( - "accounts", {"company": "_Test Company", "default_account": "_Test Bank - _TC"} - ) - mode_of_payment.save() - - -def create_account(): - return frappe.get_doc( - { - "doctype": "Account", - "company": "_Test Company", - "account_name": "Payment Account", - "root_type": "Asset", - "report_type": "Balance Sheet", - "currency": "INR", - "parent_account": "Bank Accounts - _TC", - "account_type": "Bank", - } - ).insert(ignore_permissions=True) - - -def create_employee_and_get_last_salary_slip(): - employee = make_employee("test_employee@salary.com", company="_Test Company") - frappe.db.set_value("Employee", employee, "relieving_date", getdate()) - frappe.db.set_value("Employee", employee, "date_of_joining", add_days(getdate(), -(6 * 365))) - if not frappe.db.exists("Salary Slip", {"employee": employee}): - salary_slip = make_employee_salary_slip("test_employee@salary.com", "Monthly") - salary_slip.submit() - salary_slip = salary_slip.name - else: - salary_slip = get_last_salary_slip(employee) - - if not frappe.db.get_value("Employee", "test_employee@salary.com", "holiday_list"): - from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - - make_holiday_list() - frappe.db.set_value( - "Company", "_Test Company", "default_holiday_list", "Salary Slip Test Holiday List" - ) - - return employee, salary_slip diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/__init__.py b/erpnext/payroll/doctype/gratuity_applicable_component/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json b/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json deleted file mode 100644 index eea0e852b1..0000000000 --- a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "actions": [], - "creation": "2020-08-05 19:00:28.097265", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "salary_component" - ], - "fields": [ - { - "fieldname": "salary_component", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Salary Component ", - "options": "Salary Component", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-08-05 20:17:13.855035", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Gratuity Applicable Component", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py b/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py deleted file mode 100644 index 9c1657d21d..0000000000 --- a/erpnext/payroll/doctype/gratuity_applicable_component/gratuity_applicable_component.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class GratuityApplicableComponent(Document): - pass diff --git a/erpnext/payroll/doctype/gratuity_rule/__init__.py b/erpnext/payroll/doctype/gratuity_rule/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js deleted file mode 100644 index 7290a9eafa..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Gratuity Rule', { - // refresh: function(frm) { - - // } -}); - -frappe.ui.form.on('Gratuity Rule Slab', { - - /* - Slabs should be in order like - - from | to | fraction - 0 | 4 | 0.5 - 4 | 6 | 0.7 - - So, on row addition setting current_row.from = previous row.to. - On to_year insert we have to check that it is not less than from_year - - Wrong order may lead to Wrong Calculation - */ - - gratuity_rule_slabs_add(frm, cdt, cdn) { - let row = locals[cdt][cdn]; - let array_idx = row.idx - 1; - if (array_idx > 0) { - row.from_year = cur_frm.doc.gratuity_rule_slabs[array_idx - 1].to_year; - frm.refresh(); - } - }, - - to_year(frm, cdt, cdn) { - let row = locals[cdt][cdn]; - if (row.to_year <= row.from_year && row.to_year === 0) { - frappe.throw(__("To(Year) year can not be less than From(year)")); - } - } -}); diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json deleted file mode 100644 index 84cdcf5038..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "actions": [], - "autoname": "Prompt", - "creation": "2020-08-05 19:00:36.103500", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "applicable_earnings_component", - "work_experience_calculation_function", - "total_working_days_per_year", - "column_break_3", - "disable", - "calculate_gratuity_amount_based_on", - "minimum_year_for_gratuity", - "gratuity_rules_section", - "gratuity_rule_slabs" - ], - "fields": [ - { - "default": "0", - "fieldname": "disable", - "fieldtype": "Check", - "label": "Disable" - }, - { - "fieldname": "calculate_gratuity_amount_based_on", - "fieldtype": "Select", - "in_list_view": 1, - "label": "Calculate Gratuity Amount Based On", - "options": "Current Slab\nSum of all previous slabs", - "reqd": 1 - }, - { - "description": "Salary components should be part of the Salary Structure.", - "fieldname": "applicable_earnings_component", - "fieldtype": "Table MultiSelect", - "label": "Applicable Earnings Component", - "options": "Gratuity Applicable Component", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fieldname": "gratuity_rules_section", - "fieldtype": "Section Break", - "label": "Gratuity Rules" - }, - { - "description": "Leave From and To 0 for no upper and lower limit.", - "fieldname": "gratuity_rule_slabs", - "fieldtype": "Table", - "label": "Current Work Experience", - "options": "Gratuity Rule Slab", - "reqd": 1 - }, - { - "default": "Round off Work Experience", - "fieldname": "work_experience_calculation_function", - "fieldtype": "Select", - "label": "Work Experience Calculation method", - "options": "Round off Work Experience\nTake Exact Completed Years" - }, - { - "default": "365", - "fieldname": "total_working_days_per_year", - "fieldtype": "Int", - "label": "Total working Days Per Year" - }, - { - "fieldname": "minimum_year_for_gratuity", - "fieldtype": "Int", - "label": "Minimum Year for Gratuity" - } - ], - "index_web_pages_for_search": 1, - "links": [], - "modified": "2020-12-03 17:08:27.891535", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Gratuity Rule", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py deleted file mode 100644 index 5cde79a162..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class GratuityRule(Document): - def validate(self): - for current_slab in self.gratuity_rule_slabs: - if (current_slab.from_year > current_slab.to_year) and current_slab.to_year != 0: - frappe.throw( - _("Row {0}: From (Year) can not be greater than To (Year)").format(current_slab.idx) - ) - - if ( - current_slab.to_year == 0 and current_slab.from_year == 0 and len(self.gratuity_rule_slabs) > 1 - ): - frappe.throw( - _("You can not define multiple slabs if you have a slab with no lower and upper limits.") - ) - - -def get_gratuity_rule(name, slabs, **args): - args = frappe._dict(args) - - rule = frappe.new_doc("Gratuity Rule") - rule.name = name - rule.calculate_gratuity_amount_based_on = ( - args.calculate_gratuity_amount_based_on or "Current Slab" - ) - rule.work_experience_calculation_method = ( - args.work_experience_calculation_method or "Take Exact Completed Years" - ) - rule.minimum_year_for_gratuity = 1 - - for slab in slabs: - slab = frappe._dict(slab) - rule.append("gratuity_rule_slabs", slab) - return rule diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py deleted file mode 100644 index fa5a9dedd3..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule_dashboard.py +++ /dev/null @@ -1,8 +0,0 @@ -from frappe import _ - - -def get_data(): - return { - "fieldname": "gratuity_rule", - "transactions": [{"label": _("Gratuity"), "items": ["Gratuity"]}], - } diff --git a/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py b/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py deleted file mode 100644 index 8393050b4a..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule/test_gratuity_rule.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestGratuityRule(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/__init__.py b/erpnext/payroll/doctype/gratuity_rule_slab/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json b/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json deleted file mode 100644 index bc37b0f51e..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "actions": [], - "creation": "2020-08-05 19:12:49.423500", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "from_year", - "to_year", - "fraction_of_applicable_earnings" - ], - "fields": [ - { - "fieldname": "fraction_of_applicable_earnings", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Fraction of Applicable Earnings ", - "reqd": 1 - }, - { - "default": "0", - "fieldname": "from_year", - "fieldtype": "Int", - "in_list_view": 1, - "label": "From(Year)", - "read_only": 1, - "reqd": 1 - }, - { - "default": "0", - "fieldname": "to_year", - "fieldtype": "Int", - "in_list_view": 1, - "label": "To(Year)", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-08-17 14:09:56.781712", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Gratuity Rule Slab", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py b/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py deleted file mode 100644 index 2ae6b54798..0000000000 --- a/erpnext/payroll/doctype/gratuity_rule_slab/gratuity_rule_slab.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class GratuityRuleSlab(Document): - pass diff --git a/erpnext/payroll/doctype/income_tax_slab/__init__.py b/erpnext/payroll/doctype/income_tax_slab/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js deleted file mode 100644 index 7d780d3b04..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Income Tax Slab', { - currency: function(frm) { - frm.refresh_fields(); - } -}); diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json deleted file mode 100644 index 5a7de37bec..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "actions": [], - "autoname": "Prompt", - "creation": "2020-03-17 16:50:35.564915", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "effective_from", - "company", - "column_break_3", - "currency", - "standard_tax_exemption_amount", - "allow_tax_exemption", - "disabled", - "amended_from", - "taxable_salary_slabs_section", - "slabs", - "taxes_and_charges_on_income_tax_section", - "other_taxes_and_charges" - ], - "fields": [ - { - "fieldname": "effective_from", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Effective from", - "reqd": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "default": "0", - "description": "If enabled, Tax Exemption Declaration will be considered for income tax calculation.", - "fieldname": "allow_tax_exemption", - "fieldtype": "Check", - "label": "Allow Tax Exemption" - }, - { - "fieldname": "taxable_salary_slabs_section", - "fieldtype": "Section Break", - "label": "Taxable Salary Slabs" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Income Tax Slab", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "slabs", - "fieldtype": "Table", - "label": "Taxable Salary Slabs", - "options": "Taxable Salary Slab", - "reqd": 1 - }, - { - "allow_on_submit": 1, - "default": "0", - "fieldname": "disabled", - "fieldtype": "Check", - "label": "Disabled" - }, - { - "depends_on": "allow_tax_exemption", - "fieldname": "standard_tax_exemption_amount", - "fieldtype": "Currency", - "label": "Standard Tax Exemption Amount", - "options": "currency" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "collapsible": 1, - "collapsible_depends_on": "other_taxes_and_charges", - "fieldname": "taxes_and_charges_on_income_tax_section", - "fieldtype": "Section Break", - "label": "Taxes and Charges on Income Tax" - }, - { - "fieldname": "other_taxes_and_charges", - "fieldtype": "Table", - "label": "Other Taxes and Charges", - "options": "Income Tax Slab Other Charges" - }, - { - "fetch_from": "company.default_currency", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2021-03-31 22:42:08.139520", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Income Tax Slab", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py b/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py deleted file mode 100644 index e62d61f4c2..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab/income_tax_slab.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - -# import frappe -import erpnext - - -class IncomeTaxSlab(Document): - def validate(self): - if self.company: - self.currency = erpnext.get_company_currency(self.company) diff --git a/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py b/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py deleted file mode 100644 index 680cb3bb00..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab/test_income_tax_slab.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestIncomeTaxSlab(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/__init__.py b/erpnext/payroll/doctype/income_tax_slab_other_charges/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json b/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json deleted file mode 100644 index 0dba338250..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "actions": [], - "creation": "2020-04-24 11:46:59.041180", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "description", - "column_break_2", - "percent", - "conditions_section", - "min_taxable_income", - "column_break_7", - "max_taxable_income" - ], - "fields": [ - { - "columns": 4, - "fieldname": "description", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Description", - "reqd": 1 - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "columns": 2, - "fieldname": "percent", - "fieldtype": "Percent", - "in_list_view": 1, - "label": "Percent", - "reqd": 1 - }, - { - "fieldname": "conditions_section", - "fieldtype": "Section Break", - "label": "Conditions" - }, - { - "columns": 2, - "fieldname": "min_taxable_income", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Min Taxable Income", - "options": "currency" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - }, - { - "columns": 2, - "fieldname": "max_taxable_income", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Max Taxable Income", - "options": "currency" - } - ], - "istable": 1, - "links": [], - "modified": "2020-10-19 13:45:12.850090", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Income Tax Slab Other Charges", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py b/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py deleted file mode 100644 index 53911a945b..0000000000 --- a/erpnext/payroll/doctype/income_tax_slab_other_charges/income_tax_slab_other_charges.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class IncomeTaxSlabOtherCharges(Document): - pass diff --git a/erpnext/payroll/doctype/payroll_employee_detail/__init__.py b/erpnext/payroll/doctype/payroll_employee_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json b/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json deleted file mode 100644 index 09c7eb9a45..0000000000 --- a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "actions": [], - "creation": "2017-11-30 06:07:33.477781", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "column_break_3", - "department", - "designation" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Employee Name", - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Designation", - "read_only": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-12-17 15:43:29.542977", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll Employee Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py b/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py deleted file mode 100644 index 8cc426b9db..0000000000 --- a/erpnext/payroll/doctype/payroll_employee_detail/payroll_employee_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class PayrollEmployeeDetail(Document): - pass diff --git a/erpnext/payroll/doctype/payroll_entry/__init__.py b/erpnext/payroll/doctype/payroll_entry/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js b/erpnext/payroll/doctype/payroll_entry/payroll_entry.js deleted file mode 100644 index 62e183e59c..0000000000 --- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.js +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -var in_progress = false; - -frappe.provide("erpnext.accounts.dimensions"); - -frappe.ui.form.on('Payroll Entry', { - onload: function (frm) { - if (!frm.doc.posting_date) { - frm.doc.posting_date = frappe.datetime.nowdate(); - } - frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet); - - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); - frm.events.department_filters(frm); - frm.events.payroll_payable_account_filters(frm); - }, - - department_filters: function (frm) { - frm.set_query("department", function () { - return { - "filters": { - "company": frm.doc.company, - } - }; - }); - }, - - payroll_payable_account_filters: function (frm) { - frm.set_query("payroll_payable_account", function () { - return { - filters: { - "company": frm.doc.company, - "root_type": "Liability", - "is_group": 0, - } - }; - }); - }, - - refresh: function (frm) { - if (frm.doc.docstatus == 0) { - if (!frm.is_new()) { - frm.page.clear_primary_action(); - frm.add_custom_button(__("Get Employees"), - function () { - frm.events.get_employee_details(frm); - } - ).toggleClass('btn-primary', !(frm.doc.employees || []).length); - } - if ((frm.doc.employees || []).length && !frappe.model.has_workflow(frm.doctype)) { - frm.page.clear_primary_action(); - frm.page.set_primary_action(__('Create Salary Slips'), () => { - frm.save('Submit').then(() => { - frm.page.clear_primary_action(); - frm.refresh(); - frm.events.refresh(frm); - }); - }); - } - } - if (frm.doc.docstatus == 1) { - if (frm.custom_buttons) frm.clear_custom_buttons(); - frm.events.add_context_buttons(frm); - } - }, - - get_employee_details: function (frm) { - return frappe.call({ - doc: frm.doc, - method: 'fill_employee_details', - }).then(r => { - if (r.docs && r.docs[0].employees) { - frm.employees = r.docs[0].employees; - frm.dirty(); - frm.save(); - frm.refresh(); - if (r.docs[0].validate_attendance) { - render_employee_attendance(frm, r.message); - } - } - }); - }, - - create_salary_slips: function (frm) { - frm.call({ - doc: frm.doc, - method: "create_salary_slips", - callback: function () { - frm.refresh(); - frm.toolbar.refresh(); - } - }); - }, - - add_context_buttons: function (frm) { - if (frm.doc.salary_slips_submitted || (frm.doc.__onload && frm.doc.__onload.submitted_ss)) { - frm.events.add_bank_entry_button(frm); - } else if (frm.doc.salary_slips_created) { - frm.add_custom_button(__("Submit Salary Slip"), function () { - submit_salary_slip(frm); - }).addClass("btn-primary"); - } - }, - - add_bank_entry_button: function (frm) { - frappe.call({ - method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.payroll_entry_has_bank_entries', - args: { - 'name': frm.doc.name - }, - callback: function (r) { - if (r.message && !r.message.submitted) { - frm.add_custom_button(__("Make Bank Entry"), function () { - make_bank_entry(frm); - }).addClass("btn-primary"); - } - } - }); - }, - - setup: function (frm) { - frm.add_fetch('company', 'cost_center', 'cost_center'); - - frm.set_query("payment_account", function () { - var account_types = ["Bank", "Cash"]; - return { - filters: { - "account_type": ["in", account_types], - "is_group": 0, - "company": frm.doc.company - } - }; - }); - - frm.set_query('employee', 'employees', () => { - let error_fields = []; - let mandatory_fields = ['company', 'payroll_frequency', 'start_date', 'end_date']; - - let message = __('Mandatory fields required in {0}', [__(frm.doc.doctype)]); - - mandatory_fields.forEach(field => { - if (!frm.doc[field]) { - error_fields.push(frappe.unscrub(field)); - } - }); - - if (error_fields && error_fields.length) { - message = message + '

  • ' + error_fields.join('
  • ') + "
"; - frappe.throw({ - message: message, - indicator: 'red', - title: __('Missing Fields') - }); - } - - return { - query: "erpnext.payroll.doctype.payroll_entry.payroll_entry.employee_query", - filters: frm.events.get_employee_filters(frm) - }; - }); - }, - - get_employee_filters: function (frm) { - let filters = {}; - filters['salary_slip_based_on_timesheet'] = frm.doc.salary_slip_based_on_timesheet; - - let fields = ['company', 'start_date', 'end_date', 'payroll_frequency', 'payroll_payable_account', - 'currency', 'department', 'branch', 'designation']; - - fields.forEach(field => { - if (frm.doc[field]) { - filters[field] = frm.doc[field]; - } - }); - - if (frm.doc.employees) { - let employees = frm.doc.employees.filter(d => d.employee).map(d => d.employee); - if (employees && employees.length) { - filters['employees'] = employees; - } - } - return filters; - }, - - payroll_frequency: function (frm) { - frm.trigger("set_start_end_dates").then( ()=> { - frm.events.clear_employee_table(frm); - }); - }, - - company: function (frm) { - frm.events.clear_employee_table(frm); - erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); - frm.trigger("set_payable_account_and_currency"); - }, - - set_payable_account_and_currency: function (frm) { - frappe.db.get_value("Company", {"name": frm.doc.company}, "default_currency", (r) => { - frm.set_value('currency', r.default_currency); - }); - frappe.db.get_value("Company", {"name": frm.doc.company}, "default_payroll_payable_account", (r) => { - frm.set_value('payroll_payable_account', r.default_payroll_payable_account); - }); - }, - - currency: function (frm) { - var company_currency; - if (!frm.doc.company) { - company_currency = erpnext.get_currency(frappe.defaults.get_default("Company")); - } else { - company_currency = erpnext.get_currency(frm.doc.company); - } - if (frm.doc.currency) { - if (company_currency != frm.doc.currency) { - frappe.call({ - method: "erpnext.setup.utils.get_exchange_rate", - args: { - from_currency: frm.doc.currency, - to_currency: company_currency, - }, - callback: function (r) { - frm.set_value("exchange_rate", flt(r.message)); - frm.set_df_property('exchange_rate', 'hidden', 0); - frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency + - " = [?] " + company_currency); - } - }); - } else { - frm.set_value("exchange_rate", 1.0); - frm.set_df_property('exchange_rate', 'hidden', 1); - frm.set_df_property("exchange_rate", "description", ""); - } - } - }, - - department: function (frm) { - frm.events.clear_employee_table(frm); - }, - - designation: function (frm) { - frm.events.clear_employee_table(frm); - }, - - branch: function (frm) { - frm.events.clear_employee_table(frm); - }, - - start_date: function (frm) { - if (!in_progress && frm.doc.start_date) { - frm.trigger("set_end_date"); - } else { - // reset flag - in_progress = false; - } - frm.events.clear_employee_table(frm); - }, - - project: function (frm) { - frm.events.clear_employee_table(frm); - }, - - salary_slip_based_on_timesheet: function (frm) { - frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet); - }, - - set_start_end_dates: function (frm) { - if (!frm.doc.salary_slip_based_on_timesheet) { - frappe.call({ - method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_start_end_dates', - args: { - payroll_frequency: frm.doc.payroll_frequency, - start_date: frm.doc.posting_date - }, - callback: function (r) { - if (r.message) { - in_progress = true; - frm.set_value('start_date', r.message.start_date); - frm.set_value('end_date', r.message.end_date); - } - } - }); - } - }, - - set_end_date: function (frm) { - frappe.call({ - method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_end_date', - args: { - frequency: frm.doc.payroll_frequency, - start_date: frm.doc.start_date - }, - callback: function (r) { - if (r.message) { - frm.set_value('end_date', r.message.end_date); - } - } - }); - }, - - validate_attendance: function (frm) { - if (frm.doc.validate_attendance && frm.doc.employees) { - frappe.call({ - method: 'validate_employee_attendance', - args: {}, - callback: function (r) { - render_employee_attendance(frm, r.message); - }, - doc: frm.doc, - freeze: true, - freeze_message: __('Validating Employee Attendance...') - }); - } else { - frm.fields_dict.attendance_detail_html.html(""); - } - }, - - clear_employee_table: function (frm) { - frm.clear_table('employees'); - frm.refresh(); - }, -}); - -// Submit salary slips - -const submit_salary_slip = function (frm) { - frappe.confirm(__('This will submit Salary Slips and create accrual Journal Entry. Do you want to proceed?'), - function () { - frappe.call({ - method: 'submit_salary_slips', - args: {}, - callback: function () { - frm.events.refresh(frm); - }, - doc: frm.doc, - freeze: true, - freeze_message: __('Submitting Salary Slips and creating Journal Entry...') - }); - }, - function () { - if (frappe.dom.freeze_count) { - frappe.dom.unfreeze(); - frm.events.refresh(frm); - } - } - ); -}; - -let make_bank_entry = function (frm) { - var doc = frm.doc; - if (doc.payment_account) { - return frappe.call({ - doc: cur_frm.doc, - method: "make_payment_entry", - callback: function () { - frappe.set_route( - 'List', 'Journal Entry', { - "Journal Entry Account.reference_name": frm.doc.name - } - ); - }, - freeze: true, - freeze_message: __("Creating Payment Entries......") - }); - } else { - frappe.msgprint(__("Payment Account is mandatory")); - frm.scroll_to_field('payment_account'); - } -}; - -let render_employee_attendance = function (frm, data) { - frm.fields_dict.attendance_detail_html.html( - frappe.render_template('employees_to_mark_attendance', { - data: data - }) - ); -}; diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.json b/erpnext/payroll/doctype/payroll_entry/payroll_entry.json deleted file mode 100644 index 0444134aa4..0000000000 --- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "actions": [], - "allow_copy": 1, - "autoname": "HR-PRUN-.YYYY.-.#####", - "creation": "2017-10-23 15:22:29.291323", - "doctype": "DocType", - "document_type": "Other", - "engine": "InnoDB", - "field_order": [ - "section_break0", - "column_break0", - "posting_date", - "payroll_frequency", - "company", - "column_break1", - "currency", - "exchange_rate", - "payroll_payable_account", - "section_break_8", - "branch", - "department", - "column_break_10", - "designation", - "number_of_employees", - "sec_break20", - "employees", - "section_break_13", - "validate_attendance", - "attendance_detail_html", - "section_break_12", - "salary_slip_based_on_timesheet", - "select_payroll_period", - "start_date", - "end_date", - "column_break_11", - "deduct_tax_for_unclaimed_employee_benefits", - "deduct_tax_for_unsubmitted_tax_exemption_proof", - "accounting_dimensions_section", - "project", - "dimension_col_break", - "cost_center", - "account", - "payment_account", - "amended_from", - "column_break_33", - "bank_account", - "salary_slips_created", - "salary_slips_submitted" - ], - "fields": [ - { - "fieldname": "section_break0", - "fieldtype": "Section Break", - "label": "Select Employees" - }, - { - "fieldname": "column_break0", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "default": "Today", - "fieldname": "posting_date", - "fieldtype": "Date", - "label": "Posting Date", - "reqd": 1 - }, - { - "depends_on": "eval:doc.salary_slip_based_on_timesheet == 0", - "fieldname": "payroll_frequency", - "fieldtype": "Select", - "label": "Payroll Frequency", - "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily", - "reqd": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fieldname": "section_break_8", - "fieldtype": "Section Break", - "label": "Employees" - }, - { - "fieldname": "branch", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Branch", - "options": "Branch" - }, - { - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department" - }, - { - "fieldname": "column_break_10", - "fieldtype": "Column Break" - }, - { - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "options": "Designation" - }, - { - "fieldname": "number_of_employees", - "fieldtype": "Int", - "label": "Number Of Employees", - "read_only": 1 - }, - { - "fieldname": "sec_break20", - "fieldtype": "Section Break" - }, - { - "fieldname": "employees", - "fieldtype": "Table", - "label": "Employee Details", - "options": "Payroll Employee Detail" - }, - { - "fieldname": "section_break_13", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "validate_attendance", - "fieldtype": "Check", - "label": "Validate Attendance" - }, - { - "fieldname": "attendance_detail_html", - "fieldtype": "HTML" - }, - { - "fieldname": "section_break_12", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "salary_slip_based_on_timesheet", - "fieldtype": "Check", - "label": "Salary Slip Based on Timesheet" - }, - { - "fieldname": "select_payroll_period", - "fieldtype": "Section Break", - "label": "Select Payroll Period" - }, - { - "fieldname": "start_date", - "fieldtype": "Date", - "label": "Start Date", - "reqd": 1 - }, - { - "fieldname": "end_date", - "fieldtype": "Date", - "label": "End Date", - "reqd": 1 - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "deduct_tax_for_unclaimed_employee_benefits", - "fieldtype": "Check", - "label": "Deduct Tax For Unclaimed Employee Benefits" - }, - { - "default": "0", - "fieldname": "deduct_tax_for_unsubmitted_tax_exemption_proof", - "fieldtype": "Check", - "label": "Deduct Tax For Unsubmitted Tax Exemption Proof" - }, - { - "default": ":Company", - "fieldname": "cost_center", - "fieldtype": "Link", - "label": "Cost Center", - "options": "Cost Center", - "reqd": 1 - }, - { - "fieldname": "project", - "fieldtype": "Link", - "label": "Project", - "options": "Project" - }, - { - "fieldname": "account", - "fieldtype": "Section Break", - "label": "Payment Entry" - }, - { - "allow_on_submit": 1, - "description": "Select Payment Account to make Bank Entry", - "fetch_from": "bank_account.account", - "fieldname": "payment_account", - "fieldtype": "Link", - "label": "Payment Account", - "options": "Account" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Payroll Entry", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fieldname": "salary_slips_created", - "fieldtype": "Check", - "hidden": 1, - "label": "Salary Slips Created", - "read_only": 1 - }, - { - "default": "0", - "fieldname": "salary_slips_submitted", - "fieldtype": "Check", - "hidden": 1, - "label": "Salary Slips Submitted", - "read_only": 1 - }, - { - "fieldname": "accounting_dimensions_section", - "fieldtype": "Section Break", - "label": "Accounting Dimensions" - }, - { - "fieldname": "dimension_col_break", - "fieldtype": "Column Break" - }, - { - "fieldname": "bank_account", - "fieldtype": "Link", - "label": "Bank Account", - "options": "Bank Account" - }, - { - "fieldname": "column_break_33", - "fieldtype": "Column Break" - }, - { - "depends_on": "company", - "fieldname": "currency", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Currency", - "options": "Currency", - "reqd": 1 - }, - { - "depends_on": "company", - "fieldname": "exchange_rate", - "fieldtype": "Float", - "label": "Exchange Rate", - "precision": "9", - "reqd": 1 - }, - { - "depends_on": "company", - "fieldname": "payroll_payable_account", - "fieldtype": "Link", - "label": "Payroll Payable Account", - "options": "Account", - "reqd": 1 - } - ], - "icon": "fa fa-cog", - "is_submittable": 1, - "links": [], - "modified": "2020-12-17 15:13:17.766210", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll Entry", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py b/erpnext/payroll/doctype/payroll_entry/payroll_entry.py deleted file mode 100644 index 54d56f9612..0000000000 --- a/erpnext/payroll/doctype/payroll_entry/payroll_entry.py +++ /dev/null @@ -1,967 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from dateutil.relativedelta import relativedelta -from frappe import _ -from frappe.desk.reportview import get_filters_cond, get_match_cond -from frappe.model.document import Document -from frappe.query_builder.functions import Coalesce -from frappe.utils import ( - DATE_FORMAT, - add_days, - add_to_date, - cint, - comma_and, - date_diff, - flt, - getdate, -) - -import erpnext -from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( - get_accounting_dimensions, -) -from erpnext.accounts.utils import get_fiscal_year -from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee - - -class PayrollEntry(Document): - def onload(self): - if not self.docstatus == 1 or self.salary_slips_submitted: - return - - # check if salary slips were manually submitted - entries = frappe.db.count("Salary Slip", {"payroll_entry": self.name, "docstatus": 1}, ["name"]) - if cint(entries) == len(self.employees): - self.set_onload("submitted_ss", True) - - def validate(self): - self.number_of_employees = len(self.employees) - - def on_submit(self): - self.create_salary_slips() - - def before_submit(self): - self.validate_employee_details() - if self.validate_attendance: - if self.validate_employee_attendance(): - frappe.throw(_("Cannot Submit, Employees left to mark attendance")) - - def validate_employee_details(self): - emp_with_sal_slip = [] - for employee_details in self.employees: - if frappe.db.exists( - "Salary Slip", - { - "employee": employee_details.employee, - "start_date": self.start_date, - "end_date": self.end_date, - "docstatus": 1, - }, - ): - emp_with_sal_slip.append(employee_details.employee) - - if len(emp_with_sal_slip): - frappe.throw(_("Salary Slip already exists for {0}").format(comma_and(emp_with_sal_slip))) - - def on_cancel(self): - frappe.delete_doc( - "Salary Slip", - frappe.db.sql_list( - """select name from `tabSalary Slip` - where payroll_entry=%s """, - (self.name), - ), - ) - self.db_set("salary_slips_created", 0) - self.db_set("salary_slips_submitted", 0) - - def get_emp_list(self): - """ - Returns list of active employees based on selected criteria - and for which salary structure exists - """ - self.check_mandatory() - filters = self.make_filters() - cond = get_filter_condition(filters) - cond += get_joining_relieving_condition(self.start_date, self.end_date) - - condition = "" - if self.payroll_frequency: - condition = """and payroll_frequency = '%(payroll_frequency)s'""" % { - "payroll_frequency": self.payroll_frequency - } - - sal_struct = get_sal_struct( - self.company, self.currency, self.salary_slip_based_on_timesheet, condition - ) - if sal_struct: - cond += "and t2.salary_structure IN %(sal_struct)s " - cond += "and t2.payroll_payable_account = %(payroll_payable_account)s " - cond += "and %(from_date)s >= t2.from_date" - emp_list = get_emp_list(sal_struct, cond, self.end_date, self.payroll_payable_account) - emp_list = remove_payrolled_employees(emp_list, self.start_date, self.end_date) - return emp_list - - def make_filters(self): - filters = frappe._dict() - filters["company"] = self.company - filters["branch"] = self.branch - filters["department"] = self.department - filters["designation"] = self.designation - - return filters - - @frappe.whitelist() - def fill_employee_details(self): - self.set("employees", []) - employees = self.get_emp_list() - if not employees: - error_msg = _( - "No employees found for the mentioned criteria:
Company: {0}
Currency: {1}
Payroll Payable Account: {2}" - ).format( - frappe.bold(self.company), - frappe.bold(self.currency), - frappe.bold(self.payroll_payable_account), - ) - if self.branch: - error_msg += "
" + _("Branch: {0}").format(frappe.bold(self.branch)) - if self.department: - error_msg += "
" + _("Department: {0}").format(frappe.bold(self.department)) - if self.designation: - error_msg += "
" + _("Designation: {0}").format(frappe.bold(self.designation)) - if self.start_date: - error_msg += "
" + _("Start date: {0}").format(frappe.bold(self.start_date)) - if self.end_date: - error_msg += "
" + _("End date: {0}").format(frappe.bold(self.end_date)) - frappe.throw(error_msg, title=_("No employees found")) - - for d in employees: - self.append("employees", d) - - self.number_of_employees = len(self.employees) - if self.validate_attendance: - return self.validate_employee_attendance() - - def check_mandatory(self): - for fieldname in ["company", "start_date", "end_date"]: - if not self.get(fieldname): - frappe.throw(_("Please set {0}").format(self.meta.get_label(fieldname))) - - @frappe.whitelist() - def create_salary_slips(self): - """ - Creates salary slip for selected employees if already not created - """ - self.check_permission("write") - employees = [emp.employee for emp in self.employees] - if employees: - args = frappe._dict( - { - "salary_slip_based_on_timesheet": self.salary_slip_based_on_timesheet, - "payroll_frequency": self.payroll_frequency, - "start_date": self.start_date, - "end_date": self.end_date, - "company": self.company, - "posting_date": self.posting_date, - "deduct_tax_for_unclaimed_employee_benefits": self.deduct_tax_for_unclaimed_employee_benefits, - "deduct_tax_for_unsubmitted_tax_exemption_proof": self.deduct_tax_for_unsubmitted_tax_exemption_proof, - "payroll_entry": self.name, - "exchange_rate": self.exchange_rate, - "currency": self.currency, - } - ) - if len(employees) > 30: - frappe.enqueue(create_salary_slips_for_employees, timeout=600, employees=employees, args=args) - else: - create_salary_slips_for_employees(employees, args, publish_progress=False) - # since this method is called via frm.call this doc needs to be updated manually - self.reload() - - def get_sal_slip_list(self, ss_status, as_dict=False): - """ - Returns list of salary slips based on selected criteria - """ - - ss = frappe.qb.DocType("Salary Slip") - ss_list = ( - frappe.qb.from_(ss) - .select(ss.name, ss.salary_structure) - .where( - (ss.docstatus == ss_status) - & (ss.start_date >= self.start_date) - & (ss.end_date <= self.end_date) - & (ss.payroll_entry == self.name) - & ((ss.journal_entry.isnull()) | (ss.journal_entry == "")) - & (Coalesce(ss.salary_slip_based_on_timesheet, 0) == self.salary_slip_based_on_timesheet) - ) - ).run(as_dict=as_dict) - - return ss_list - - @frappe.whitelist() - def submit_salary_slips(self): - self.check_permission("write") - ss_list = self.get_sal_slip_list(ss_status=0) - if len(ss_list) > 30: - frappe.enqueue( - submit_salary_slips_for_employees, timeout=600, payroll_entry=self, salary_slips=ss_list - ) - else: - submit_salary_slips_for_employees(self, ss_list, publish_progress=False) - - def email_salary_slip(self, submitted_ss): - if frappe.db.get_single_value("Payroll Settings", "email_salary_slip_to_employee"): - for ss in submitted_ss: - ss.email_salary_slip() - - def get_salary_component_account(self, salary_component): - account = frappe.db.get_value( - "Salary Component Account", {"parent": salary_component, "company": self.company}, "account" - ) - - if not account: - frappe.throw(_("Please set account in Salary Component {0}").format(salary_component)) - - return account - - def get_salary_components(self, component_type): - salary_slips = self.get_sal_slip_list(ss_status=1, as_dict=True) - - if salary_slips: - ss = frappe.qb.DocType("Salary Slip") - ssd = frappe.qb.DocType("Salary Detail") - salary_components = ( - frappe.qb.from_(ss) - .join(ssd) - .on(ss.name == ssd.parent) - .select(ssd.salary_component, ssd.amount, ssd.parentfield, ss.salary_structure, ss.employee) - .where( - (ssd.parentfield == component_type) & (ss.name.isin(tuple([d.name for d in salary_slips]))) - ) - ).run(as_dict=True) - - return salary_components - - def get_salary_component_total(self, component_type=None): - salary_components = self.get_salary_components(component_type) - if salary_components: - component_dict = {} - self.employee_cost_centers = {} - for item in salary_components: - employee_cost_centers = self.get_payroll_cost_centers_for_employee( - item.employee, item.salary_structure - ) - - add_component_to_accrual_jv_entry = True - if component_type == "earnings": - is_flexible_benefit, only_tax_impact = frappe.get_cached_value( - "Salary Component", item["salary_component"], ["is_flexible_benefit", "only_tax_impact"] - ) - if is_flexible_benefit == 1 and only_tax_impact == 1: - add_component_to_accrual_jv_entry = False - - if add_component_to_accrual_jv_entry: - for cost_center, percentage in employee_cost_centers.items(): - amount_against_cost_center = flt(item.amount) * percentage / 100 - component_dict[(item.salary_component, cost_center)] = ( - component_dict.get((item.salary_component, cost_center), 0) + amount_against_cost_center - ) - - account_details = self.get_account(component_dict=component_dict) - return account_details - - def get_payroll_cost_centers_for_employee(self, employee, salary_structure): - if not self.employee_cost_centers.get(employee): - ss_assignment_name = frappe.db.get_value( - "Salary Structure Assignment", - {"employee": employee, "salary_structure": salary_structure, "docstatus": 1}, - "name", - ) - - if ss_assignment_name: - cost_centers = dict( - frappe.get_all( - "Employee Cost Center", - {"parent": ss_assignment_name}, - ["cost_center", "percentage"], - as_list=1, - ) - ) - if not cost_centers: - default_cost_center, department = frappe.get_cached_value( - "Employee", employee, ["payroll_cost_center", "department"] - ) - if not default_cost_center and department: - default_cost_center = frappe.get_cached_value( - "Department", department, "payroll_cost_center" - ) - if not default_cost_center: - default_cost_center = self.cost_center - - cost_centers = {default_cost_center: 100} - - self.employee_cost_centers.setdefault(employee, cost_centers) - - return self.employee_cost_centers.get(employee, {}) - - def get_account(self, component_dict=None): - account_dict = {} - for key, amount in component_dict.items(): - account = self.get_salary_component_account(key[0]) - account_dict[(account, key[1])] = account_dict.get((account, key[1]), 0) + amount - return account_dict - - def make_accrual_jv_entry(self): - self.check_permission("write") - earnings = self.get_salary_component_total(component_type="earnings") or {} - deductions = self.get_salary_component_total(component_type="deductions") or {} - payroll_payable_account = self.payroll_payable_account - jv_name = "" - precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency") - - if earnings or deductions: - journal_entry = frappe.new_doc("Journal Entry") - journal_entry.voucher_type = "Journal Entry" - journal_entry.user_remark = _("Accrual Journal Entry for salaries from {0} to {1}").format( - self.start_date, self.end_date - ) - journal_entry.company = self.company - journal_entry.posting_date = self.posting_date - accounting_dimensions = get_accounting_dimensions() or [] - - accounts = [] - currencies = [] - payable_amount = 0 - multi_currency = 0 - company_currency = erpnext.get_company_currency(self.company) - - # Earnings - for acc_cc, amount in earnings.items(): - exchange_rate, amt = self.get_amount_and_exchange_rate_for_journal_entry( - acc_cc[0], amount, company_currency, currencies - ) - payable_amount += flt(amount, precision) - accounts.append( - self.update_accounting_dimensions( - { - "account": acc_cc[0], - "debit_in_account_currency": flt(amt, precision), - "exchange_rate": flt(exchange_rate), - "cost_center": acc_cc[1] or self.cost_center, - "project": self.project, - }, - accounting_dimensions, - ) - ) - - # Deductions - for acc_cc, amount in deductions.items(): - exchange_rate, amt = self.get_amount_and_exchange_rate_for_journal_entry( - acc_cc[0], amount, company_currency, currencies - ) - payable_amount -= flt(amount, precision) - accounts.append( - self.update_accounting_dimensions( - { - "account": acc_cc[0], - "credit_in_account_currency": flt(amt, precision), - "exchange_rate": flt(exchange_rate), - "cost_center": acc_cc[1] or self.cost_center, - "project": self.project, - }, - accounting_dimensions, - ) - ) - - # Payable amount - exchange_rate, payable_amt = self.get_amount_and_exchange_rate_for_journal_entry( - payroll_payable_account, payable_amount, company_currency, currencies - ) - accounts.append( - self.update_accounting_dimensions( - { - "account": payroll_payable_account, - "credit_in_account_currency": flt(payable_amt, precision), - "exchange_rate": flt(exchange_rate), - "cost_center": self.cost_center, - }, - accounting_dimensions, - ) - ) - - journal_entry.set("accounts", accounts) - if len(currencies) > 1: - multi_currency = 1 - journal_entry.multi_currency = multi_currency - journal_entry.title = payroll_payable_account - journal_entry.save() - - try: - journal_entry.submit() - jv_name = journal_entry.name - self.update_salary_slip_status(jv_name=jv_name) - except Exception as e: - if type(e) in (str, list, tuple): - frappe.msgprint(e) - raise - - return jv_name - - def update_accounting_dimensions(self, row, accounting_dimensions): - for dimension in accounting_dimensions: - row.update({dimension: self.get(dimension)}) - - return row - - def get_amount_and_exchange_rate_for_journal_entry( - self, account, amount, company_currency, currencies - ): - conversion_rate = 1 - exchange_rate = self.exchange_rate - account_currency = frappe.db.get_value("Account", account, "account_currency") - if account_currency not in currencies: - currencies.append(account_currency) - if account_currency == company_currency: - conversion_rate = self.exchange_rate - exchange_rate = 1 - amount = flt(amount) * flt(conversion_rate) - return exchange_rate, amount - - @frappe.whitelist() - def make_payment_entry(self): - self.check_permission("write") - - salary_slip_name_list = frappe.db.sql( - """ select t1.name from `tabSalary Slip` t1 - where t1.docstatus = 1 and start_date >= %s and end_date <= %s and t1.payroll_entry = %s - """, - (self.start_date, self.end_date, self.name), - as_list=True, - ) - - if salary_slip_name_list and len(salary_slip_name_list) > 0: - salary_slip_total = 0 - for salary_slip_name in salary_slip_name_list: - salary_slip = frappe.get_doc("Salary Slip", salary_slip_name[0]) - for sal_detail in salary_slip.earnings: - ( - is_flexible_benefit, - only_tax_impact, - creat_separate_je, - statistical_component, - ) = frappe.db.get_value( - "Salary Component", - sal_detail.salary_component, - [ - "is_flexible_benefit", - "only_tax_impact", - "create_separate_payment_entry_against_benefit_claim", - "statistical_component", - ], - ) - if only_tax_impact != 1 and statistical_component != 1: - if is_flexible_benefit == 1 and creat_separate_je == 1: - self.create_journal_entry(sal_detail.amount, sal_detail.salary_component) - else: - salary_slip_total += sal_detail.amount - for sal_detail in salary_slip.deductions: - statistical_component = frappe.db.get_value( - "Salary Component", sal_detail.salary_component, "statistical_component" - ) - if statistical_component != 1: - salary_slip_total -= sal_detail.amount - if salary_slip_total > 0: - self.create_journal_entry(salary_slip_total, "salary") - - def create_journal_entry(self, je_payment_amount, user_remark): - payroll_payable_account = self.payroll_payable_account - precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency") - - accounts = [] - currencies = [] - multi_currency = 0 - company_currency = erpnext.get_company_currency(self.company) - accounting_dimensions = get_accounting_dimensions() or [] - - exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry( - self.payment_account, je_payment_amount, company_currency, currencies - ) - accounts.append( - self.update_accounting_dimensions( - { - "account": self.payment_account, - "bank_account": self.bank_account, - "credit_in_account_currency": flt(amount, precision), - "exchange_rate": flt(exchange_rate), - }, - accounting_dimensions, - ) - ) - - exchange_rate, amount = self.get_amount_and_exchange_rate_for_journal_entry( - payroll_payable_account, je_payment_amount, company_currency, currencies - ) - accounts.append( - self.update_accounting_dimensions( - { - "account": payroll_payable_account, - "debit_in_account_currency": flt(amount, precision), - "exchange_rate": flt(exchange_rate), - "reference_type": self.doctype, - "reference_name": self.name, - }, - accounting_dimensions, - ) - ) - - if len(currencies) > 1: - multi_currency = 1 - - journal_entry = frappe.new_doc("Journal Entry") - journal_entry.voucher_type = "Bank Entry" - journal_entry.user_remark = _("Payment of {0} from {1} to {2}").format( - user_remark, self.start_date, self.end_date - ) - journal_entry.company = self.company - journal_entry.posting_date = self.posting_date - journal_entry.multi_currency = multi_currency - - journal_entry.set("accounts", accounts) - journal_entry.save(ignore_permissions=True) - - def update_salary_slip_status(self, jv_name=None): - ss_list = self.get_sal_slip_list(ss_status=1) - for ss in ss_list: - ss_obj = frappe.get_doc("Salary Slip", ss[0]) - frappe.db.set_value("Salary Slip", ss_obj.name, "journal_entry", jv_name) - - def set_start_end_dates(self): - self.update( - get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date, self.company) - ) - - @frappe.whitelist() - def validate_employee_attendance(self): - employees_to_mark_attendance = [] - days_in_payroll, days_holiday, days_attendance_marked = 0, 0, 0 - for employee_detail in self.employees: - employee_joining_date = frappe.db.get_value( - "Employee", employee_detail.employee, "date_of_joining" - ) - start_date = self.start_date - if employee_joining_date > getdate(self.start_date): - start_date = employee_joining_date - days_holiday = self.get_count_holidays_of_employee(employee_detail.employee, start_date) - days_attendance_marked = self.get_count_employee_attendance( - employee_detail.employee, start_date - ) - days_in_payroll = date_diff(self.end_date, start_date) + 1 - if days_in_payroll > days_holiday + days_attendance_marked: - employees_to_mark_attendance.append( - {"employee": employee_detail.employee, "employee_name": employee_detail.employee_name} - ) - return employees_to_mark_attendance - - def get_count_holidays_of_employee(self, employee, start_date): - holiday_list = get_holiday_list_for_employee(employee) - holidays = 0 - if holiday_list: - days = frappe.db.sql( - """select count(*) from tabHoliday where - parent=%s and holiday_date between %s and %s""", - (holiday_list, start_date, self.end_date), - ) - if days and days[0][0]: - holidays = days[0][0] - return holidays - - def get_count_employee_attendance(self, employee, start_date): - marked_days = 0 - attendances = frappe.get_all( - "Attendance", - fields=["count(*)"], - filters={"employee": employee, "attendance_date": ("between", [start_date, self.end_date])}, - as_list=1, - ) - if attendances and attendances[0][0]: - marked_days = attendances[0][0] - return marked_days - - -def get_sal_struct(company, currency, salary_slip_based_on_timesheet, condition): - return frappe.db.sql_list( - """ - select - name from `tabSalary Structure` - where - docstatus = 1 and - is_active = 'Yes' - and company = %(company)s - and currency = %(currency)s and - ifnull(salary_slip_based_on_timesheet,0) = %(salary_slip_based_on_timesheet)s - {condition}""".format( - condition=condition - ), - { - "company": company, - "currency": currency, - "salary_slip_based_on_timesheet": salary_slip_based_on_timesheet, - }, - ) - - -def get_filter_condition(filters): - cond = "" - for f in ["company", "branch", "department", "designation"]: - if filters.get(f): - cond += " and t1." + f + " = " + frappe.db.escape(filters.get(f)) - - return cond - - -def get_joining_relieving_condition(start_date, end_date): - cond = """ - and ifnull(t1.date_of_joining, '0000-00-00') <= '%(end_date)s' - and ifnull(t1.relieving_date, '2199-12-31') >= '%(start_date)s' - """ % { - "start_date": start_date, - "end_date": end_date, - } - return cond - - -def get_emp_list(sal_struct, cond, end_date, payroll_payable_account): - return frappe.db.sql( - """ - select - distinct t1.name as employee, t1.employee_name, t1.department, t1.designation - from - `tabEmployee` t1, `tabSalary Structure Assignment` t2 - where - t1.name = t2.employee - and t2.docstatus = 1 - and t1.status != 'Inactive' - %s order by t2.from_date desc - """ - % cond, - { - "sal_struct": tuple(sal_struct), - "from_date": end_date, - "payroll_payable_account": payroll_payable_account, - }, - as_dict=True, - ) - - -def remove_payrolled_employees(emp_list, start_date, end_date): - new_emp_list = [] - for employee_details in emp_list: - if not frappe.db.exists( - "Salary Slip", - { - "employee": employee_details.employee, - "start_date": start_date, - "end_date": end_date, - "docstatus": 1, - }, - ): - new_emp_list.append(employee_details) - - return new_emp_list - - -@frappe.whitelist() -def get_start_end_dates(payroll_frequency, start_date=None, company=None): - """Returns dict of start and end dates for given payroll frequency based on start_date""" - - if payroll_frequency == "Monthly" or payroll_frequency == "Bimonthly" or payroll_frequency == "": - fiscal_year = get_fiscal_year(start_date, company=company)[0] - month = "%02d" % getdate(start_date).month - m = get_month_details(fiscal_year, month) - if payroll_frequency == "Bimonthly": - if getdate(start_date).day <= 15: - start_date = m["month_start_date"] - end_date = m["month_mid_end_date"] - else: - start_date = m["month_mid_start_date"] - end_date = m["month_end_date"] - else: - start_date = m["month_start_date"] - end_date = m["month_end_date"] - - if payroll_frequency == "Weekly": - end_date = add_days(start_date, 6) - - if payroll_frequency == "Fortnightly": - end_date = add_days(start_date, 13) - - if payroll_frequency == "Daily": - end_date = start_date - - return frappe._dict({"start_date": start_date, "end_date": end_date}) - - -def get_frequency_kwargs(frequency_name): - frequency_dict = { - "monthly": {"months": 1}, - "fortnightly": {"days": 14}, - "weekly": {"days": 7}, - "daily": {"days": 1}, - } - return frequency_dict.get(frequency_name) - - -@frappe.whitelist() -def get_end_date(start_date, frequency): - start_date = getdate(start_date) - frequency = frequency.lower() if frequency else "monthly" - kwargs = ( - get_frequency_kwargs(frequency) if frequency != "bimonthly" else get_frequency_kwargs("monthly") - ) - - # weekly, fortnightly and daily intervals have fixed days so no problems - end_date = add_to_date(start_date, **kwargs) - relativedelta(days=1) - if frequency != "bimonthly": - return dict(end_date=end_date.strftime(DATE_FORMAT)) - - else: - return dict(end_date="") - - -def get_month_details(year, month): - ysd = frappe.db.get_value("Fiscal Year", year, "year_start_date") - if ysd: - import calendar - import datetime - - diff_mnt = cint(month) - cint(ysd.month) - if diff_mnt < 0: - diff_mnt = 12 - int(ysd.month) + cint(month) - msd = ysd + relativedelta(months=diff_mnt) # month start date - month_days = cint(calendar.monthrange(cint(msd.year), cint(month))[1]) # days in month - mid_start = datetime.date(msd.year, cint(month), 16) # month mid start date - mid_end = datetime.date(msd.year, cint(month), 15) # month mid end date - med = datetime.date(msd.year, cint(month), month_days) # month end date - return frappe._dict( - { - "year": msd.year, - "month_start_date": msd, - "month_end_date": med, - "month_mid_start_date": mid_start, - "month_mid_end_date": mid_end, - "month_days": month_days, - } - ) - else: - frappe.throw(_("Fiscal Year {0} not found").format(year)) - - -def get_payroll_entry_bank_entries(payroll_entry_name): - journal_entries = frappe.db.sql( - "select name from `tabJournal Entry Account` " - 'where reference_type="Payroll Entry" ' - "and reference_name=%s and docstatus=1", - payroll_entry_name, - as_dict=1, - ) - - return journal_entries - - -@frappe.whitelist() -def payroll_entry_has_bank_entries(name): - response = {} - bank_entries = get_payroll_entry_bank_entries(name) - response["submitted"] = 1 if bank_entries else 0 - - return response - - -def create_salary_slips_for_employees(employees, args, publish_progress=True): - salary_slips_exists_for = get_existing_salary_slips(employees, args) - count = 0 - salary_slips_not_created = [] - for emp in employees: - if emp not in salary_slips_exists_for: - args.update({"doctype": "Salary Slip", "employee": emp}) - ss = frappe.get_doc(args) - ss.insert() - count += 1 - if publish_progress: - frappe.publish_progress( - count * 100 / len(set(employees) - set(salary_slips_exists_for)), - title=_("Creating Salary Slips..."), - ) - - else: - salary_slips_not_created.append(emp) - - payroll_entry = frappe.get_doc("Payroll Entry", args.payroll_entry) - payroll_entry.db_set("salary_slips_created", 1) - payroll_entry.notify_update() - - if salary_slips_not_created: - frappe.msgprint( - _( - "Salary Slips already exists for employees {}, and will not be processed by this payroll." - ).format(frappe.bold(", ".join([emp for emp in salary_slips_not_created]))), - title=_("Message"), - indicator="orange", - ) - - -def get_existing_salary_slips(employees, args): - return frappe.db.sql_list( - """ - select distinct employee from `tabSalary Slip` - where docstatus!= 2 and company = %s and payroll_entry = %s - and start_date >= %s and end_date <= %s - and employee in (%s) - """ - % ("%s", "%s", "%s", "%s", ", ".join(["%s"] * len(employees))), - [args.company, args.payroll_entry, args.start_date, args.end_date] + employees, - ) - - -def submit_salary_slips_for_employees(payroll_entry, salary_slips, publish_progress=True): - submitted_ss = [] - not_submitted_ss = [] - frappe.flags.via_payroll_entry = True - - count = 0 - for ss in salary_slips: - ss_obj = frappe.get_doc("Salary Slip", ss[0]) - if ss_obj.net_pay < 0: - not_submitted_ss.append(ss[0]) - else: - try: - ss_obj.submit() - submitted_ss.append(ss_obj) - except frappe.ValidationError: - not_submitted_ss.append(ss[0]) - - count += 1 - if publish_progress: - frappe.publish_progress(count * 100 / len(salary_slips), title=_("Submitting Salary Slips...")) - if submitted_ss: - payroll_entry.make_accrual_jv_entry() - frappe.msgprint( - _("Salary Slip submitted for period from {0} to {1}").format(ss_obj.start_date, ss_obj.end_date) - ) - - payroll_entry.email_salary_slip(submitted_ss) - - payroll_entry.db_set("salary_slips_submitted", 1) - payroll_entry.notify_update() - - if not submitted_ss and not not_submitted_ss: - frappe.msgprint( - _( - "No salary slip found to submit for the above selected criteria OR salary slip already submitted" - ) - ) - - if not_submitted_ss: - frappe.msgprint(_("Could not submit some Salary Slips")) - - frappe.flags.via_payroll_entry = False - - -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs -def get_payroll_entries_for_jv(doctype, txt, searchfield, start, page_len, filters): - return frappe.db.sql( - """ - select name from `tabPayroll Entry` - where `{key}` LIKE %(txt)s - and name not in - (select reference_name from `tabJournal Entry Account` - where reference_type="Payroll Entry") - order by name limit %(start)s, %(page_len)s""".format( - key=searchfield - ), - {"txt": "%%%s%%" % txt, "start": start, "page_len": page_len}, - ) - - -def get_employee_list(filters): - cond = get_filter_condition(filters) - cond += get_joining_relieving_condition(filters.start_date, filters.end_date) - condition = """and payroll_frequency = '%(payroll_frequency)s'""" % { - "payroll_frequency": filters.payroll_frequency - } - sal_struct = get_sal_struct( - filters.company, filters.currency, filters.salary_slip_based_on_timesheet, condition - ) - if sal_struct: - cond += "and t2.salary_structure IN %(sal_struct)s " - cond += "and t2.payroll_payable_account = %(payroll_payable_account)s " - cond += "and %(from_date)s >= t2.from_date" - emp_list = get_emp_list(sal_struct, cond, filters.end_date, filters.payroll_payable_account) - emp_list = remove_payrolled_employees(emp_list, filters.start_date, filters.end_date) - return emp_list - - return [] - - -@frappe.whitelist() -@frappe.validate_and_sanitize_search_inputs -def employee_query(doctype, txt, searchfield, start, page_len, filters): - filters = frappe._dict(filters) - conditions = [] - include_employees = [] - emp_cond = "" - - if not filters.payroll_frequency: - frappe.throw(_("Select Payroll Frequency.")) - - if filters.start_date and filters.end_date: - employee_list = get_employee_list(filters) - emp = filters.get("employees") or [] - include_employees = [ - employee.employee for employee in employee_list if employee.employee not in emp - ] - filters.pop("start_date") - filters.pop("end_date") - filters.pop("salary_slip_based_on_timesheet") - filters.pop("payroll_frequency") - filters.pop("payroll_payable_account") - filters.pop("currency") - if filters.employees is not None: - filters.pop("employees") - - if include_employees: - emp_cond += "and employee in %(include_employees)s" - - return frappe.db.sql( - """select name, employee_name from `tabEmployee` - where status = 'Active' - and docstatus < 2 - and ({key} like %(txt)s - or employee_name like %(txt)s) - {emp_cond} - {fcond} {mcond} - order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, employee_name), locate(%(_txt)s, employee_name), 99999), - idx desc, - name, employee_name - limit %(start)s, %(page_len)s""".format( - **{ - "key": searchfield, - "fcond": get_filters_cond(doctype, filters, conditions), - "mcond": get_match_cond(doctype), - "emp_cond": emp_cond, - } - ), - { - "txt": "%%%s%%" % txt, - "_txt": txt.replace("%", ""), - "start": start, - "page_len": page_len, - "include_employees": include_employees, - }, - ) diff --git a/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py b/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py deleted file mode 100644 index eb93d688f9..0000000000 --- a/erpnext/payroll/doctype/payroll_entry/payroll_entry_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -def get_data(): - return { - "fieldname": "payroll_entry", - "non_standard_fieldnames": { - "Journal Entry": "reference_name", - "Payment Entry": "reference_name", - }, - "transactions": [{"items": ["Salary Slip", "Journal Entry"]}], - } diff --git a/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py b/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py deleted file mode 100644 index fda0fcf8be..0000000000 --- a/erpnext/payroll/doctype/payroll_entry/test_payroll_entry.py +++ /dev/null @@ -1,432 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import unittest - -import frappe -from dateutil.relativedelta import relativedelta -from frappe.utils import add_months - -import erpnext -from erpnext.accounts.utils import get_fiscal_year, getdate, nowdate -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.loan_management.doctype.loan.test_loan import ( - create_loan, - create_loan_accounts, - create_loan_type, - make_loan_disbursement_entry, -) -from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( - process_loan_interest_accrual_for_term_loans, -) -from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_end_date, get_start_end_dates -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - create_account, - get_salary_component_account, - make_deduction_salary_component, - make_earning_salary_component, - make_employee_salary_slip, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - create_salary_structure_assignment, - make_salary_structure, -) - -test_dependencies = ["Holiday List"] - - -class TestPayrollEntry(unittest.TestCase): - @classmethod - def setUpClass(cls): - frappe.db.set_value( - "Company", erpnext.get_default_company(), "default_holiday_list", "_Test Holiday List" - ) - - def setUp(self): - for dt in [ - "Salary Slip", - "Salary Component", - "Salary Component Account", - "Payroll Entry", - "Salary Structure", - "Salary Structure Assignment", - "Payroll Employee Detail", - "Additional Salary", - ]: - frappe.db.sql("delete from `tab%s`" % dt) - - make_earning_salary_component(setup=True, company_list=["_Test Company"]) - make_deduction_salary_component(setup=True, test_tax=False, company_list=["_Test Company"]) - - frappe.db.set_value("Payroll Settings", None, "email_salary_slip_to_employee", 0) - - def test_payroll_entry(self): # pylint: disable=no-self-use - company = erpnext.get_default_company() - for data in frappe.get_all("Salary Component", fields=["name"]): - if not frappe.db.get_value( - "Salary Component Account", {"parent": data.name, "company": company}, "name" - ): - get_salary_component_account(data.name) - - employee = frappe.db.get_value("Employee", {"company": company}) - company_doc = frappe.get_doc("Company", company) - make_salary_structure( - "_Test Salary Structure", - "Monthly", - employee, - company=company, - currency=company_doc.default_currency, - ) - dates = get_start_end_dates("Monthly", nowdate()) - if not frappe.db.get_value( - "Salary Slip", {"start_date": dates.start_date, "end_date": dates.end_date} - ): - make_payroll_entry( - start_date=dates.start_date, - end_date=dates.end_date, - payable_account=company_doc.default_payroll_payable_account, - currency=company_doc.default_currency, - ) - - def test_multi_currency_payroll_entry(self): # pylint: disable=no-self-use - company = erpnext.get_default_company() - employee = make_employee("test_muti_currency_employee@payroll.com", company=company) - for data in frappe.get_all("Salary Component", fields=["name"]): - if not frappe.db.get_value( - "Salary Component Account", {"parent": data.name, "company": company}, "name" - ): - get_salary_component_account(data.name) - - company_doc = frappe.get_doc("Company", company) - salary_structure = make_salary_structure( - "_Test Multi Currency Salary Structure", "Monthly", company=company, currency="USD" - ) - create_salary_structure_assignment( - employee, salary_structure.name, company=company, currency="USD" - ) - frappe.db.sql( - """delete from `tabSalary Slip` where employee=%s""", - (frappe.db.get_value("Employee", {"user_id": "test_muti_currency_employee@payroll.com"})), - ) - salary_slip = get_salary_slip( - "test_muti_currency_employee@payroll.com", "Monthly", "_Test Multi Currency Salary Structure" - ) - dates = get_start_end_dates("Monthly", nowdate()) - payroll_entry = make_payroll_entry( - start_date=dates.start_date, - end_date=dates.end_date, - payable_account=company_doc.default_payroll_payable_account, - currency="USD", - exchange_rate=70, - ) - payroll_entry.make_payment_entry() - - salary_slip.load_from_db() - - payroll_je = salary_slip.journal_entry - if payroll_je: - payroll_je_doc = frappe.get_doc("Journal Entry", payroll_je) - - self.assertEqual(salary_slip.base_gross_pay, payroll_je_doc.total_debit) - self.assertEqual(salary_slip.base_gross_pay, payroll_je_doc.total_credit) - - payment_entry = frappe.db.sql( - """ - Select ifnull(sum(je.total_debit),0) as total_debit, ifnull(sum(je.total_credit),0) as total_credit from `tabJournal Entry` je, `tabJournal Entry Account` jea - Where je.name = jea.parent - And jea.reference_name = %s - """, - (payroll_entry.name), - as_dict=1, - ) - - self.assertEqual(salary_slip.base_net_pay, payment_entry[0].total_debit) - self.assertEqual(salary_slip.base_net_pay, payment_entry[0].total_credit) - - def test_payroll_entry_with_employee_cost_center(self): # pylint: disable=no-self-use - for data in frappe.get_all("Salary Component", fields=["name"]): - if not frappe.db.get_value( - "Salary Component Account", {"parent": data.name, "company": "_Test Company"}, "name" - ): - get_salary_component_account(data.name) - - if not frappe.db.exists("Department", "cc - _TC"): - frappe.get_doc( - {"doctype": "Department", "department_name": "cc", "company": "_Test Company"} - ).insert() - - frappe.db.sql("""delete from `tabEmployee` where employee_name='test_employee1@example.com' """) - frappe.db.sql("""delete from `tabEmployee` where employee_name='test_employee2@example.com' """) - frappe.db.sql("""delete from `tabSalary Structure` where name='_Test Salary Structure 1' """) - frappe.db.sql("""delete from `tabSalary Structure` where name='_Test Salary Structure 2' """) - - employee1 = make_employee( - "test_employee1@example.com", - payroll_cost_center="_Test Cost Center - _TC", - department="cc - _TC", - company="_Test Company", - ) - employee2 = make_employee( - "test_employee2@example.com", department="cc - _TC", company="_Test Company" - ) - - if not frappe.db.exists("Account", "_Test Payroll Payable - _TC"): - create_account( - account_name="_Test Payroll Payable", - company="_Test Company", - parent_account="Current Liabilities - _TC", - account_type="Payable", - ) - - if ( - not frappe.db.get_value("Company", "_Test Company", "default_payroll_payable_account") - or frappe.db.get_value("Company", "_Test Company", "default_payroll_payable_account") - != "_Test Payroll Payable - _TC" - ): - frappe.db.set_value( - "Company", "_Test Company", "default_payroll_payable_account", "_Test Payroll Payable - _TC" - ) - currency = frappe.db.get_value("Company", "_Test Company", "default_currency") - - make_salary_structure( - "_Test Salary Structure 1", - "Monthly", - employee1, - company="_Test Company", - currency=currency, - test_tax=False, - ) - ss = make_salary_structure( - "_Test Salary Structure 2", - "Monthly", - employee2, - company="_Test Company", - currency=currency, - test_tax=False, - ) - - # update cost centers in salary structure assignment for employee2 - ssa = frappe.db.get_value( - "Salary Structure Assignment", - {"employee": employee2, "salary_structure": ss.name, "docstatus": 1}, - "name", - ) - - ssa_doc = frappe.get_doc("Salary Structure Assignment", ssa) - ssa_doc.payroll_cost_centers = [] - ssa_doc.append( - "payroll_cost_centers", {"cost_center": "_Test Cost Center - _TC", "percentage": 60} - ) - ssa_doc.append( - "payroll_cost_centers", {"cost_center": "_Test Cost Center 2 - _TC", "percentage": 40} - ) - - ssa_doc.save() - - dates = get_start_end_dates("Monthly", nowdate()) - if not frappe.db.get_value( - "Salary Slip", {"start_date": dates.start_date, "end_date": dates.end_date} - ): - pe = make_payroll_entry( - start_date=dates.start_date, - end_date=dates.end_date, - payable_account="_Test Payroll Payable - _TC", - currency=frappe.db.get_value("Company", "_Test Company", "default_currency"), - department="cc - _TC", - company="_Test Company", - payment_account="Cash - _TC", - cost_center="Main - _TC", - ) - je = frappe.db.get_value("Salary Slip", {"payroll_entry": pe.name}, "journal_entry") - je_entries = frappe.db.sql( - """ - select account, cost_center, debit, credit - from `tabJournal Entry Account` - where parent=%s - order by account, cost_center - """, - je, - ) - expected_je = ( - ("_Test Payroll Payable - _TC", "Main - _TC", 0.0, 155600.0), - ("Salary - _TC", "_Test Cost Center - _TC", 124800.0, 0.0), - ("Salary - _TC", "_Test Cost Center 2 - _TC", 31200.0, 0.0), - ("Salary Deductions - _TC", "_Test Cost Center - _TC", 0.0, 320.0), - ("Salary Deductions - _TC", "_Test Cost Center 2 - _TC", 0.0, 80.0), - ) - - self.assertEqual(je_entries, expected_je) - - def test_get_end_date(self): - self.assertEqual(get_end_date("2017-01-01", "monthly"), {"end_date": "2017-01-31"}) - self.assertEqual(get_end_date("2017-02-01", "monthly"), {"end_date": "2017-02-28"}) - self.assertEqual(get_end_date("2017-02-01", "fortnightly"), {"end_date": "2017-02-14"}) - self.assertEqual(get_end_date("2017-02-01", "bimonthly"), {"end_date": ""}) - self.assertEqual(get_end_date("2017-01-01", "bimonthly"), {"end_date": ""}) - self.assertEqual(get_end_date("2020-02-15", "bimonthly"), {"end_date": ""}) - self.assertEqual(get_end_date("2017-02-15", "monthly"), {"end_date": "2017-03-14"}) - self.assertEqual(get_end_date("2017-02-15", "daily"), {"end_date": "2017-02-15"}) - - def test_loan(self): - branch = "Test Employee Branch" - applicant = make_employee("test_employee@loan.com", company="_Test Company") - company = "_Test Company" - holiday_list = make_holiday("test holiday for loan") - - company_doc = frappe.get_doc("Company", company) - if not company_doc.default_payroll_payable_account: - company_doc.default_payroll_payable_account = frappe.db.get_value( - "Account", {"company": company, "root_type": "Liability", "account_type": ""}, "name" - ) - company_doc.save() - - if not frappe.db.exists("Branch", branch): - frappe.get_doc({"doctype": "Branch", "branch": branch}).insert() - - employee_doc = frappe.get_doc("Employee", applicant) - employee_doc.branch = branch - employee_doc.holiday_list = holiday_list - employee_doc.save() - - salary_structure = "Test Salary Structure for Loan" - make_salary_structure( - salary_structure, - "Monthly", - employee=employee_doc.name, - company="_Test Company", - currency=company_doc.default_currency, - ) - - if not frappe.db.exists("Loan Type", "Car Loan"): - create_loan_accounts() - create_loan_type( - "Car Loan", - 500000, - 8.4, - is_term_loan=1, - mode_of_payment="Cash", - disbursement_account="Disbursement Account - _TC", - payment_account="Payment Account - _TC", - loan_account="Loan Account - _TC", - interest_income_account="Interest Income Account - _TC", - penalty_income_account="Penalty Income Account - _TC", - ) - - loan = create_loan( - applicant, - "Car Loan", - 280000, - "Repay Over Number of Periods", - 20, - posting_date=add_months(nowdate(), -1), - ) - loan.repay_from_salary = 1 - loan.submit() - - make_loan_disbursement_entry( - loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1) - ) - process_loan_interest_accrual_for_term_loans(posting_date=nowdate()) - - dates = get_start_end_dates("Monthly", nowdate()) - make_payroll_entry( - company="_Test Company", - start_date=dates.start_date, - payable_account=company_doc.default_payroll_payable_account, - currency=company_doc.default_currency, - end_date=dates.end_date, - branch=branch, - cost_center="Main - _TC", - payment_account="Cash - _TC", - ) - - name = frappe.db.get_value( - "Salary Slip", {"posting_date": nowdate(), "employee": applicant}, "name" - ) - - salary_slip = frappe.get_doc("Salary Slip", name) - for row in salary_slip.loans: - if row.loan == loan.name: - interest_amount = (280000 * 8.4) / (12 * 100) - principal_amount = loan.monthly_repayment_amount - interest_amount - self.assertEqual(row.interest_amount, interest_amount) - self.assertEqual(row.principal_amount, principal_amount) - self.assertEqual(row.total_payment, interest_amount + principal_amount) - - if salary_slip.docstatus == 0: - frappe.delete_doc("Salary Slip", name) - - -def make_payroll_entry(**args): - args = frappe._dict(args) - - payroll_entry = frappe.new_doc("Payroll Entry") - payroll_entry.company = args.company or erpnext.get_default_company() - payroll_entry.start_date = args.start_date or "2016-11-01" - payroll_entry.end_date = args.end_date or "2016-11-30" - payroll_entry.payment_account = get_payment_account() - payroll_entry.posting_date = nowdate() - payroll_entry.payroll_frequency = "Monthly" - payroll_entry.branch = args.branch or None - payroll_entry.department = args.department or None - payroll_entry.payroll_payable_account = args.payable_account - payroll_entry.currency = args.currency - payroll_entry.exchange_rate = args.exchange_rate or 1 - - if args.cost_center: - payroll_entry.cost_center = args.cost_center - - if args.payment_account: - payroll_entry.payment_account = args.payment_account - - payroll_entry.fill_employee_details() - payroll_entry.save() - payroll_entry.create_salary_slips() - payroll_entry.submit_salary_slips() - if payroll_entry.get_sal_slip_list(ss_status=1): - payroll_entry.make_payment_entry() - - return payroll_entry - - -def get_payment_account(): - return frappe.get_value( - "Account", - {"account_type": "Cash", "company": erpnext.get_default_company(), "is_group": 0}, - "name", - ) - - -def make_holiday(holiday_list_name): - if not frappe.db.exists("Holiday List", holiday_list_name): - current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True) - dt = getdate(nowdate()) - - new_year = dt + relativedelta(month=1, day=1, year=dt.year) - republic_day = dt + relativedelta(month=1, day=26, year=dt.year) - test_holiday = dt + relativedelta(month=2, day=2, year=dt.year) - - frappe.get_doc( - { - "doctype": "Holiday List", - "from_date": current_fiscal_year.year_start_date, - "to_date": current_fiscal_year.year_end_date, - "holiday_list_name": holiday_list_name, - "holidays": [ - {"holiday_date": new_year, "description": "New Year"}, - {"holiday_date": republic_day, "description": "Republic Day"}, - {"holiday_date": test_holiday, "description": "Test Holiday"}, - ], - } - ).insert() - - return holiday_list_name - - -def get_salary_slip(user, period, salary_structure): - salary_slip = make_employee_salary_slip(user, period, salary_structure) - salary_slip.exchange_rate = 70 - salary_slip.calculate_net_pay() - salary_slip.db_update() - - return salary_slip diff --git a/erpnext/payroll/doctype/payroll_period/__init__.py b/erpnext/payroll/doctype/payroll_period/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.js b/erpnext/payroll/doctype/payroll_period/payroll_period.js deleted file mode 100644 index 67caf9d101..0000000000 --- a/erpnext/payroll/doctype/payroll_period/payroll_period.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Payroll Period', { - refresh: function(frm) { - - } -}); diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.json b/erpnext/payroll/doctype/payroll_period/payroll_period.json deleted file mode 100644 index 0e0948475c..0000000000 --- a/erpnext/payroll/doctype/payroll_period/payroll_period.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "Prompt", - "creation": "2018-04-13 15:18:53.698553", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "column_break_2", - "start_date", - "end_date", - "section_break_5", - "periods" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "column_break_2", - "fieldtype": "Column Break" - }, - { - "fieldname": "start_date", - "fieldtype": "Date", - "label": "Start Date", - "reqd": 1 - }, - { - "fieldname": "end_date", - "fieldtype": "Date", - "label": "End Date", - "reqd": 1 - }, - { - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "hidden": 1, - "label": "Payroll Periods" - }, - { - "fieldname": "periods", - "fieldtype": "Table", - "label": "Payroll Periods", - "options": "Payroll Period Date" - } - ], - "links": [], - "modified": "2020-06-29 17:17:12.689089", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll Period", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - } - ], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period.py b/erpnext/payroll/doctype/payroll_period/payroll_period.py deleted file mode 100644 index e1f1cabbc7..0000000000 --- a/erpnext/payroll/doctype/payroll_period/payroll_period.py +++ /dev/null @@ -1,130 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import add_months, cint, date_diff, flt, formatdate, getdate, month_diff - -from erpnext.hr.utils import get_holiday_dates_for_employee - - -class PayrollPeriod(Document): - def validate(self): - self.validate_dates() - self.validate_overlap() - - def validate_dates(self): - if getdate(self.start_date) > getdate(self.end_date): - frappe.throw(_("End date can not be less than start date")) - - def validate_overlap(self): - query = """ - select name - from `tab{0}` - where name != %(name)s - and company = %(company)s and (start_date between %(start_date)s and %(end_date)s \ - or end_date between %(start_date)s and %(end_date)s \ - or (start_date < %(start_date)s and end_date > %(end_date)s)) - """ - if not self.name: - # hack! if name is null, it could cause problems with != - self.name = "New " + self.doctype - - overlap_doc = frappe.db.sql( - query.format(self.doctype), - { - "start_date": self.start_date, - "end_date": self.end_date, - "name": self.name, - "company": self.company, - }, - as_dict=1, - ) - - if overlap_doc: - msg = ( - _("A {0} exists between {1} and {2} (").format( - self.doctype, formatdate(self.start_date), formatdate(self.end_date) - ) - + """ {1}""".format(self.doctype, overlap_doc[0].name) - + _(") for {0}").format(self.company) - ) - frappe.throw(msg) - - -def get_payroll_period_days(start_date, end_date, employee, company=None): - if not company: - company = frappe.db.get_value("Employee", employee, "company") - payroll_period = frappe.db.sql( - """ - select name, start_date, end_date - from `tabPayroll Period` - where - company=%(company)s - and %(start_date)s between start_date and end_date - and %(end_date)s between start_date and end_date - """, - {"company": company, "start_date": start_date, "end_date": end_date}, - ) - - if len(payroll_period) > 0: - actual_no_of_days = date_diff(getdate(payroll_period[0][2]), getdate(payroll_period[0][1])) + 1 - working_days = actual_no_of_days - if not cint( - frappe.db.get_value("Payroll Settings", None, "include_holidays_in_total_working_days") - ): - holidays = get_holiday_dates_for_employee( - employee, getdate(payroll_period[0][1]), getdate(payroll_period[0][2]) - ) - working_days -= len(holidays) - return payroll_period[0][0], working_days, actual_no_of_days - return False, False, False - - -def get_payroll_period(from_date, to_date, company): - payroll_period = frappe.db.sql( - """ - select name, start_date, end_date - from `tabPayroll Period` - where start_date<=%s and end_date>= %s and company=%s - """, - (from_date, to_date, company), - as_dict=1, - ) - - return payroll_period[0] if payroll_period else None - - -def get_period_factor( - employee, start_date, end_date, payroll_frequency, payroll_period, depends_on_payment_days=0 -): - # TODO if both deduct checked update the factor to make tax consistent - period_start, period_end = payroll_period.start_date, payroll_period.end_date - joining_date, relieving_date = frappe.db.get_value( - "Employee", employee, ["date_of_joining", "relieving_date"] - ) - - if getdate(joining_date) > getdate(period_start): - period_start = joining_date - if relieving_date and getdate(relieving_date) < getdate(period_end): - period_end = relieving_date - if month_diff(period_end, start_date) > 1: - start_date = add_months(start_date, -(month_diff(period_end, start_date) + 1)) - - total_sub_periods, remaining_sub_periods = 0.0, 0.0 - - if payroll_frequency == "Monthly" and not depends_on_payment_days: - total_sub_periods = month_diff(payroll_period.end_date, payroll_period.start_date) - remaining_sub_periods = month_diff(period_end, start_date) - else: - salary_days = date_diff(end_date, start_date) + 1 - - days_in_payroll_period = date_diff(payroll_period.end_date, payroll_period.start_date) + 1 - total_sub_periods = flt(days_in_payroll_period) / flt(salary_days) - - remaining_days_in_payroll_period = date_diff(period_end, start_date) + 1 - remaining_sub_periods = flt(remaining_days_in_payroll_period) / flt(salary_days) - - return total_sub_periods, remaining_sub_periods diff --git a/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py b/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py deleted file mode 100644 index 96632c5008..0000000000 --- a/erpnext/payroll/doctype/payroll_period/payroll_period_dashboard.py +++ /dev/null @@ -1,7 +0,0 @@ -def get_data(): - return { - "fieldname": "payroll_period", - "transactions": [ - {"items": ["Employee Tax Exemption Proof Submission", "Employee Tax Exemption Declaration"]}, - ], - } diff --git a/erpnext/payroll/doctype/payroll_period/test_payroll_period.py b/erpnext/payroll/doctype/payroll_period/test_payroll_period.py deleted file mode 100644 index 61967c04bd..0000000000 --- a/erpnext/payroll/doctype/payroll_period/test_payroll_period.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestPayrollPeriod(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/payroll_period_date/__init__.py b/erpnext/payroll/doctype/payroll_period_date/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json b/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json deleted file mode 100644 index 4a2f383b37..0000000000 --- a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "actions": [], - "creation": "2018-04-13 15:17:30.513630", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "start_date", - "end_date" - ], - "fields": [ - { - "fieldname": "start_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Start Date", - "reqd": 1 - }, - { - "fieldname": "end_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "End Date", - "reqd": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-06-22 23:30:15.943356", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll Period Date", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py b/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py deleted file mode 100644 index c90a76a829..0000000000 --- a/erpnext/payroll/doctype/payroll_period_date/payroll_period_date.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class PayrollPeriodDate(Document): - pass diff --git a/erpnext/payroll/doctype/payroll_settings/__init__.py b/erpnext/payroll/doctype/payroll_settings/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.js b/erpnext/payroll/doctype/payroll_settings/payroll_settings.js deleted file mode 100644 index 941464dc51..0000000000 --- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Payroll Settings', { - encrypt_salary_slips_in_emails: function(frm) { - let encrypt_state = frm.doc.encrypt_salary_slips_in_emails; - frm.set_df_property('password_policy', 'reqd', encrypt_state); - }, - - validate: function(frm) { - let policy = frm.doc.password_policy; - if (policy) { - if (policy.includes(' ') || policy.includes('--')) { - frappe.msgprint(__("Password policy cannot contain spaces or simultaneous hyphens. The format will be restructured automatically")); - } - frm.set_value('password_policy', policy.split(new RegExp(" |-", 'g')).filter((token) => token).join('-')); - } - }, -}); diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.json b/erpnext/payroll/doctype/payroll_settings/payroll_settings.json deleted file mode 100644 index 54377e94b3..0000000000 --- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "actions": [], - "creation": "2020-06-04 15:13:33.589685", - "doctype": "DocType", - "document_type": "Other", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "payroll_based_on", - "consider_unmarked_attendance_as", - "max_working_hours_against_timesheet", - "include_holidays_in_total_working_days", - "disable_rounded_total", - "column_break_11", - "daily_wages_fraction_for_half_day", - "email_salary_slip_to_employee", - "encrypt_salary_slips_in_emails", - "show_leave_balances_in_salary_slip", - "password_policy" - ], - "fields": [ - { - "default": "Leave", - "fieldname": "payroll_based_on", - "fieldtype": "Select", - "label": "Calculate Payroll Working Days Based On", - "options": "Leave\nAttendance" - }, - { - "fieldname": "max_working_hours_against_timesheet", - "fieldtype": "Float", - "label": "Max working hours against Timesheet" - }, - { - "default": "0", - "description": "If checked, Total no. of Working Days will include holidays, and this will reduce the value of Salary Per Day", - "fieldname": "include_holidays_in_total_working_days", - "fieldtype": "Check", - "label": "Include holidays in Total no. of Working Days" - }, - { - "default": "0", - "description": "If checked, hides and disables Rounded Total field in Salary Slips", - "fieldname": "disable_rounded_total", - "fieldtype": "Check", - "label": "Disable Rounded Total" - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "default": "0.5", - "description": "The fraction of daily wages to be paid for half-day attendance", - "fieldname": "daily_wages_fraction_for_half_day", - "fieldtype": "Float", - "label": "Fraction of Daily Salary for Half Day" - }, - { - "default": "1", - "description": "Emails salary slip to employee based on preferred email selected in Employee", - "fieldname": "email_salary_slip_to_employee", - "fieldtype": "Check", - "label": "Email Salary Slip to Employee" - }, - { - "default": "0", - "depends_on": "eval: doc.email_salary_slip_to_employee == 1;", - "description": "The salary slip emailed to the employee will be password protected, the password will be generated based on the password policy.", - "fieldname": "encrypt_salary_slips_in_emails", - "fieldtype": "Check", - "label": "Encrypt Salary Slips in Emails" - }, - { - "depends_on": "eval: doc.encrypt_salary_slips_in_emails == 1", - "description": "Example: SAL-{first_name}-{date_of_birth.year}
This will generate a password like SAL-Jane-1972", - "fieldname": "password_policy", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Password Policy" - }, - { - "depends_on": "eval:doc.payroll_based_on == 'Attendance'", - "fieldname": "consider_unmarked_attendance_as", - "fieldtype": "Select", - "label": "Consider Unmarked Attendance As", - "options": "Present\nAbsent" - }, - { - "default": "0", - "fieldname": "show_leave_balances_in_salary_slip", - "fieldtype": "Check", - "label": "Show Leave Balances in Salary Slip" - } - ], - "icon": "fa fa-cog", - "index_web_pages_for_search": 1, - "issingle": 1, - "links": [], - "modified": "2021-03-03 17:49:59.579723", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll Settings", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "role": "System Manager", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "ASC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/payroll_settings/payroll_settings.py b/erpnext/payroll/doctype/payroll_settings/payroll_settings.py deleted file mode 100644 index 33614e9d30..0000000000 --- a/erpnext/payroll/doctype/payroll_settings/payroll_settings.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.custom.doctype.property_setter.property_setter import make_property_setter -from frappe.model.document import Document -from frappe.utils import cint - - -class PayrollSettings(Document): - def validate(self): - self.validate_password_policy() - - if not self.daily_wages_fraction_for_half_day: - self.daily_wages_fraction_for_half_day = 0.5 - - def validate_password_policy(self): - if self.email_salary_slip_to_employee and self.encrypt_salary_slips_in_emails: - if not self.password_policy: - frappe.throw(_("Password policy for Salary Slips is not set")) - - def on_update(self): - self.toggle_rounded_total() - frappe.clear_cache() - - def toggle_rounded_total(self): - self.disable_rounded_total = cint(self.disable_rounded_total) - make_property_setter( - "Salary Slip", - "rounded_total", - "hidden", - self.disable_rounded_total, - "Check", - validate_fields_for_doctype=False, - ) - make_property_setter( - "Salary Slip", - "rounded_total", - "print_hide", - self.disable_rounded_total, - "Check", - validate_fields_for_doctype=False, - ) diff --git a/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py b/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py deleted file mode 100644 index 3b96db6ed4..0000000000 --- a/erpnext/payroll/doctype/payroll_settings/test_payroll_settings.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -# import frappe -import unittest - - -class TestPayrollSettings(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/retention_bonus/__init__.py b/erpnext/payroll/doctype/retention_bonus/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.js b/erpnext/payroll/doctype/retention_bonus/retention_bonus.js deleted file mode 100644 index f8bb40a9cb..0000000000 --- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Retention Bonus', { - setup: function(frm) { - frm.set_query("employee", function() { - if (!frm.doc.company) { - frappe.msgprint(__("Please Select Company First")); - } - return { - filters: { - "status": "Active", - "company": frm.doc.company - } - }; - }); - - frm.set_query("salary_component", function() { - return { - filters: { - "type": "Earning" - } - }; - }); - }, - - employee: function(frm) { - if (frm.doc.employee) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure_assignment.salary_structure_assignment.get_employee_currency", - args: { - employee: frm.doc.employee, - }, - callback: function(r) { - if (r.message) { - frm.set_value('currency', r.message); - frm.refresh_fields(); - } - } - }); - } - } -}); diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.json b/erpnext/payroll/doctype/retention_bonus/retention_bonus.json deleted file mode 100644 index f8d8bb46de..0000000000 --- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "HR-RTB-.YYYY.-.#####", - "creation": "2018-05-13 14:59:42.038964", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "employee", - "bonus_payment_date", - "bonus_amount", - "salary_component", - "amended_from", - "column_break_6", - "employee_name", - "department", - "date_of_joining", - "currency" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1 - }, - { - "fieldname": "bonus_payment_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Bonus Payment Date", - "reqd": 1 - }, - { - "fieldname": "bonus_amount", - "fieldtype": "Currency", - "label": "Bonus Amount", - "options": "currency", - "reqd": 1 - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Retention Bonus", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_6", - "fieldtype": "Column Break" - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.date_of_joining", - "fieldname": "date_of_joining", - "fieldtype": "Data", - "label": "Date of Joining", - "read_only": 1 - }, - { - "fieldname": "salary_component", - "fieldtype": "Link", - "label": "Salary Component", - "options": "Salary Component", - "reqd": 1 - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.employee)", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:57:37.898953", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Retention Bonus", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Employee", - "share": 1 - } - ], - "search_fields": "employee_name", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/retention_bonus/retention_bonus.py b/erpnext/payroll/doctype/retention_bonus/retention_bonus.py deleted file mode 100644 index cdcd9a9025..0000000000 --- a/erpnext/payroll/doctype/retention_bonus/retention_bonus.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import getdate - -from erpnext.hr.utils import validate_active_employee - - -class RetentionBonus(Document): - def validate(self): - validate_active_employee(self.employee) - if getdate(self.bonus_payment_date) < getdate(): - frappe.throw(_("Bonus Payment Date cannot be a past date")) - - def on_submit(self): - company = frappe.db.get_value("Employee", self.employee, "company") - additional_salary = self.get_additional_salary() - - if not additional_salary: - additional_salary = frappe.new_doc("Additional Salary") - additional_salary.employee = self.employee - additional_salary.salary_component = self.salary_component - additional_salary.amount = self.bonus_amount - additional_salary.payroll_date = self.bonus_payment_date - additional_salary.company = company - additional_salary.overwrite_salary_structure_amount = 0 - additional_salary.ref_doctype = self.doctype - additional_salary.ref_docname = self.name - additional_salary.submit() - # self.db_set('additional_salary', additional_salary.name) - - else: - bonus_added = ( - frappe.db.get_value("Additional Salary", additional_salary, "amount") + self.bonus_amount - ) - frappe.db.set_value("Additional Salary", additional_salary, "amount", bonus_added) - self.db_set("additional_salary", additional_salary) - - def on_cancel(self): - - additional_salary = self.get_additional_salary() - if self.additional_salary: - bonus_removed = ( - frappe.db.get_value("Additional Salary", self.additional_salary, "amount") - self.bonus_amount - ) - if bonus_removed == 0: - frappe.get_doc("Additional Salary", self.additional_salary).cancel() - else: - frappe.db.set_value("Additional Salary", self.additional_salary, "amount", bonus_removed) - - # self.db_set('additional_salary', '') - - def get_additional_salary(self): - return frappe.db.exists( - "Additional Salary", - { - "employee": self.employee, - "salary_component": self.salary_component, - "payroll_date": self.bonus_payment_date, - "company": self.company, - "docstatus": 1, - "ref_doctype": self.doctype, - "ref_docname": self.name, - }, - ) diff --git a/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py b/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py deleted file mode 100644 index c86bf33511..0000000000 --- a/erpnext/payroll/doctype/retention_bonus/test_retention_bonus.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestRetentionBonus(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/salary_component/README.md b/erpnext/payroll/doctype/salary_component/README.md deleted file mode 100644 index 9644192449..0000000000 --- a/erpnext/payroll/doctype/salary_component/README.md +++ /dev/null @@ -1 +0,0 @@ -Type of earning and deductions that is a part of the salary. diff --git a/erpnext/payroll/doctype/salary_component/__init__.py b/erpnext/payroll/doctype/salary_component/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_component/salary_component.js b/erpnext/payroll/doctype/salary_component/salary_component.js deleted file mode 100644 index dbf75140ac..0000000000 --- a/erpnext/payroll/doctype/salary_component/salary_component.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Salary Component', { - setup: function(frm) { - frm.set_query("account", "accounts", function(doc, cdt, cdn) { - var d = locals[cdt][cdn]; - return { - filters: { - "is_group": 0, - "company": d.company - } - }; - }); - frm.set_query("earning_component_group", function() { - return { - filters: { - "is_group": 1, - "is_flexible_benefit": 1 - } - }; - }); - }, - is_flexible_benefit: function(frm) { - if(frm.doc.is_flexible_benefit){ - set_value_for_condition_and_formula(frm); - frm.set_value("formula", ''); - frm.set_value("amount", 0); - } - }, - type: function(frm) { - if(frm.doc.type=="Earning"){ - frm.set_value("is_tax_applicable", 1); - frm.set_value("variable_based_on_taxable_salary", 0); - } - if(frm.doc.type=="Deduction"){ - frm.set_value("is_tax_applicable", 0); - frm.set_value("is_flexible_benefit", 0); - } - }, - variable_based_on_taxable_salary: function(frm) { - if(frm.doc.variable_based_on_taxable_salary){ - set_value_for_condition_and_formula(frm); - } - }, - create_separate_payment_entry_against_benefit_claim: function(frm) { - if(frm.doc.create_separate_payment_entry_against_benefit_claim){ - frm.set_df_property("accounts", "reqd", 1); - frm.set_value("only_tax_impact", 0); - } - else{ - frm.set_df_property("accounts", "reqd", 0); - } - }, - only_tax_impact: function(frm) { - if(frm.only_tax_impact){ - frm.set_value("create_separate_payment_entry_against_benefit_claim", 0); - } - } -}); - -var set_value_for_condition_and_formula = function(frm) { - frm.set_value("formula", null); - frm.set_value("condition", null); - frm.set_value("amount_based_on_formula", 0); - frm.set_value("statistical_component", 0); - frm.set_value("do_not_include_in_total", 0); - frm.set_value("depends_on_payment_days", 0); -}; diff --git a/erpnext/payroll/doctype/salary_component/salary_component.json b/erpnext/payroll/doctype/salary_component/salary_component.json deleted file mode 100644 index c97e45cd53..0000000000 --- a/erpnext/payroll/doctype/salary_component/salary_component.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:salary_component", - "creation": "2016-06-30 15:42:43.631931", - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "salary_component", - "salary_component_abbr", - "type", - "description", - "column_break_4", - "depends_on_payment_days", - "is_tax_applicable", - "is_income_tax_component", - "deduct_full_tax_on_selected_payroll_date", - "variable_based_on_taxable_salary", - "exempted_from_income_tax", - "round_to_the_nearest_integer", - "statistical_component", - "do_not_include_in_total", - "disabled", - "flexible_benefits", - "is_flexible_benefit", - "max_benefit_amount", - "column_break_9", - "pay_against_benefit_claim", - "only_tax_impact", - "create_separate_payment_entry_against_benefit_claim", - "section_break_5", - "accounts", - "condition_and_formula", - "condition", - "amount", - "amount_based_on_formula", - "formula", - "column_break_28", - "help" - ], - "fields": [ - { - "fieldname": "salary_component", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Name", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "salary_component_abbr", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Abbr", - "print_width": "120px", - "reqd": 1, - "width": "120px" - }, - { - "fieldname": "type", - "fieldtype": "Select", - "in_standard_filter": 1, - "label": "Type", - "options": "Earning\nDeduction", - "reqd": 1 - }, - { - "default": "1", - "depends_on": "eval:doc.type == \"Earning\"", - "fieldname": "is_tax_applicable", - "fieldtype": "Check", - "label": "Is Tax Applicable" - }, - { - "default": "1", - "fieldname": "depends_on_payment_days", - "fieldtype": "Check", - "label": "Depends on Payment Days", - "print_hide": 1 - }, - { - "default": "0", - "fieldname": "do_not_include_in_total", - "fieldtype": "Check", - "label": "Do Not Include in Total" - }, - { - "default": "0", - "depends_on": "eval:doc.is_tax_applicable && doc.type=='Earning'", - "fieldname": "deduct_full_tax_on_selected_payroll_date", - "fieldtype": "Check", - "label": "Deduct Full Tax on Selected Payroll Date" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "disabled", - "fieldtype": "Check", - "label": "Disabled" - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "in_list_view": 1, - "label": "Description" - }, - { - "default": "0", - "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", - "fieldname": "statistical_component", - "fieldtype": "Check", - "label": "Statistical Component" - }, - { - "depends_on": "eval:doc.type==\"Earning\" && doc.statistical_component!=1", - "fieldname": "flexible_benefits", - "fieldtype": "Section Break", - "label": "Flexible Benefits" - }, - { - "default": "0", - "fieldname": "is_flexible_benefit", - "fieldtype": "Check", - "label": "Is Flexible Benefit" - }, - { - "depends_on": "is_flexible_benefit", - "fieldname": "max_benefit_amount", - "fieldtype": "Currency", - "label": "Max Benefit Amount (Yearly)" - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "default": "0", - "depends_on": "is_flexible_benefit", - "fieldname": "pay_against_benefit_claim", - "fieldtype": "Check", - "label": "Pay Against Benefit Claim" - }, - { - "default": "0", - "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.create_separate_payment_entry_against_benefit_claim !=1", - "fieldname": "only_tax_impact", - "fieldtype": "Check", - "label": "Only Tax Impact (Cannot Claim But Part of Taxable Income)" - }, - { - "default": "0", - "depends_on": "eval:doc.is_flexible_benefit == 1 & doc.only_tax_impact !=1", - "fieldname": "create_separate_payment_entry_against_benefit_claim", - "fieldtype": "Check", - "label": "Create Separate Payment Entry Against Benefit Claim" - }, - { - "default": "0", - "depends_on": "eval:doc.type == \"Deduction\"", - "fieldname": "variable_based_on_taxable_salary", - "fieldtype": "Check", - "label": "Variable Based On Taxable Salary" - }, - { - "depends_on": "eval:doc.statistical_component != 1", - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "label": "Accounts" - }, - { - "fieldname": "accounts", - "fieldtype": "Table", - "label": "Accounts", - "options": "Salary Component Account" - }, - { - "collapsible": 1, - "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1", - "fieldname": "condition_and_formula", - "fieldtype": "Section Break", - "label": "Condition and Formula" - }, - { - "fieldname": "condition", - "fieldtype": "Code", - "label": "Condition" - }, - { - "default": "0", - "fieldname": "amount_based_on_formula", - "fieldtype": "Check", - "label": "Amount based on formula" - }, - { - "depends_on": "amount_based_on_formula", - "fieldname": "formula", - "fieldtype": "Code", - "label": "Formula" - }, - { - "depends_on": "eval:doc.amount_based_on_formula!==1", - "fieldname": "amount", - "fieldtype": "Currency", - "label": "Amount" - }, - { - "fieldname": "column_break_28", - "fieldtype": "Column Break" - }, - { - "fieldname": "help", - "fieldtype": "HTML", - "label": "Help", - "options": "

Help

\n\n

Notes:

\n\n
    \n
  1. Use field base for using base salary of the Employee
  2. \n
  3. Use Salary Component abbreviations in conditions and formulas. BS = Basic Salary
  4. \n
  5. Use field name for employee details in conditions and formulas. Employment Type = employment_typeBranch = branch
  6. \n
  7. Use field name from Salary Slip in conditions and formulas. Payment Days = payment_daysLeave without pay = leave_without_pay
  8. \n
  9. Direct Amount can also be entered based on Condition. See example 3
\n\n

Examples

\n
    \n
  1. Calculating Basic Salary based on base\n
    Condition: base < 10000
    \n
    Formula: base * .2
  2. \n
  3. Calculating HRA based on Basic SalaryBS \n
    Condition: BS > 2000
    \n
    Formula: BS * .1
  4. \n
  5. Calculating TDS based on Employment Typeemployment_type \n
    Condition: employment_type==\"Intern\"
    \n
    Amount: 1000
  6. \n
" - }, - { - "default": "0", - "fieldname": "round_to_the_nearest_integer", - "fieldtype": "Check", - "label": "Round to the Nearest Integer" - }, - { - "default": "0", - "depends_on": "eval:doc.type == \"Deduction\" && !doc.variable_based_on_taxable_salary", - "description": "If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.", - "fieldname": "exempted_from_income_tax", - "fieldtype": "Check", - "label": "Exempted from Income Tax" - }, - { - "default": "0", - "depends_on": "eval:doc.type == \"Deduction\"", - "fieldname": "is_income_tax_component", - "fieldtype": "Check", - "label": "Is Income Tax Component" - } - ], - "icon": "fa fa-flag", - "index_web_pages_for_search": 1, - "links": [], - "modified": "2020-10-07 20:38:33.795853", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Component", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "write": 1 - }, - { - "read": 1, - "role": "Employee" - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_component/salary_component.py b/erpnext/payroll/doctype/salary_component/salary_component.py deleted file mode 100644 index 409c4a1769..0000000000 --- a/erpnext/payroll/doctype/salary_component/salary_component.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document -from frappe.model.naming import append_number_if_name_exists - - -class SalaryComponent(Document): - def validate(self): - self.validate_abbr() - - def validate_abbr(self): - if not self.salary_component_abbr: - self.salary_component_abbr = "".join([c[0] for c in self.salary_component.split()]).upper() - - self.salary_component_abbr = self.salary_component_abbr.strip() - self.salary_component_abbr = append_number_if_name_exists( - "Salary Component", - self.salary_component_abbr, - "salary_component_abbr", - separator="_", - filters={"name": ["!=", self.name]}, - ) diff --git a/erpnext/payroll/doctype/salary_component/test_records.json b/erpnext/payroll/doctype/salary_component/test_records.json deleted file mode 100644 index 104b44ffa1..0000000000 --- a/erpnext/payroll/doctype/salary_component/test_records.json +++ /dev/null @@ -1,36 +0,0 @@ -[ - { - "doctype": "Salary Component", - "salary_component": "_Test Basic Salary", - "type": "Earning", - "is_tax_applicable": 1 - }, - { - "doctype": "Salary Component", - "salary_component": "_Test Allowance", - "type": "Earning", - "is_tax_applicable": 1 - }, - { - "doctype": "Salary Component", - "salary_component": "_Test Professional Tax", - "type": "Deduction" - }, - { - "doctype": "Salary Component", - "salary_component": "_Test TDS", - "type": "Deduction" - }, - { - "doctype": "Salary Component", - "salary_component": "Basic", - "type": "Earning", - "is_tax_applicable": 1 - }, - { - "doctype": "Salary Component", - "salary_component": "Leave Encashment", - "type": "Earning", - "is_tax_applicable": 1 - } -] \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_component/test_salary_component.py b/erpnext/payroll/doctype/salary_component/test_salary_component.py deleted file mode 100644 index cd729e8240..0000000000 --- a/erpnext/payroll/doctype/salary_component/test_salary_component.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - -import frappe - -# test_records = frappe.get_test_records('Salary Component') - - -class TestSalaryComponent(unittest.TestCase): - pass - - -def create_salary_component(component_name, **args): - if not frappe.db.exists("Salary Component", component_name): - frappe.get_doc( - { - "doctype": "Salary Component", - "salary_component": component_name, - "type": args.get("type") or "Earning", - "is_tax_applicable": args.get("is_tax_applicable") or 1, - } - ).insert() diff --git a/erpnext/payroll/doctype/salary_detail/__init__.py b/erpnext/payroll/doctype/salary_detail/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_detail/salary_detail.json b/erpnext/payroll/doctype/salary_detail/salary_detail.json deleted file mode 100644 index 665f0a8297..0000000000 --- a/erpnext/payroll/doctype/salary_detail/salary_detail.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "actions": [], - "creation": "2016-06-30 15:32:36.385111", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "salary_component", - "abbr", - "column_break_3", - "amount", - "year_to_date", - "section_break_5", - "additional_salary", - "is_recurring_additional_salary", - "statistical_component", - "depends_on_payment_days", - "exempted_from_income_tax", - "is_tax_applicable", - "column_break_11", - "is_flexible_benefit", - "variable_based_on_taxable_salary", - "do_not_include_in_total", - "deduct_full_tax_on_selected_payroll_date", - "section_break_2", - "condition", - "column_break_18", - "amount_based_on_formula", - "formula", - "section_break_19", - "default_amount", - "additional_amount", - "column_break_24", - "tax_on_flexible_benefit", - "tax_on_additional_salary" - ], - "fields": [ - { - "fieldname": "salary_component", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Component", - "options": "Salary Component", - "reqd": 1 - }, - { - "columns": 1, - "depends_on": "eval:doc.parenttype=='Salary Structure'", - "fetch_from": "salary_component.salary_component_abbr", - "fieldname": "abbr", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Abbr", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "column_break_3", - "fieldtype": "Column Break" - }, - { - "default": "0", - "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", - "fetch_from": "salary_component.statistical_component", - "fieldname": "statistical_component", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Statistical Component" - }, - { - "default": "0", - "depends_on": "eval:doc.parentfield=='earnings'", - "fetch_from": "salary_component.is_tax_applicable", - "fieldname": "is_tax_applicable", - "fieldtype": "Check", - "label": "Is Tax Applicable", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "depends_on": "eval:doc.parentfield=='earnings'", - "fetch_from": "salary_component.is_flexible_benefit", - "fieldname": "is_flexible_benefit", - "fieldtype": "Check", - "label": "Is Flexible Benefit", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "depends_on": "eval:doc.parentfield=='deductions'", - "fetch_from": "salary_component.variable_based_on_taxable_salary", - "fieldname": "variable_based_on_taxable_salary", - "fieldtype": "Check", - "label": "Variable Based On Taxable Salary", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fetch_from": "salary_component.depends_on_payment_days", - "fieldname": "depends_on_payment_days", - "fieldtype": "Check", - "label": "Depends on Payment Days", - "print_hide": 1, - "read_only": 1 - }, - { - "default": "0", - "fieldname": "deduct_full_tax_on_selected_payroll_date", - "fieldtype": "Check", - "label": "Deduct Full Tax on Selected Payroll Date", - "print_hide": 1, - "read_only": 1 - }, - { - "collapsible": 1, - "depends_on": "eval:doc.is_flexible_benefit != 1", - "fieldname": "section_break_2", - "fieldtype": "Section Break", - "label": "Condition and formula" - }, - { - "allow_on_submit": 1, - "depends_on": "eval:doc.parenttype=='Salary Structure'", - "fieldname": "condition", - "fieldtype": "Code", - "label": "Condition" - }, - { - "default": "0", - "depends_on": "eval:doc.parenttype=='Salary Structure'", - "fieldname": "amount_based_on_formula", - "fieldtype": "Check", - "label": "Amount based on formula" - }, - { - "allow_on_submit": 1, - "depends_on": "eval:doc.amount_based_on_formula!==0 && doc.parenttype==='Salary Structure'", - "fieldname": "formula", - "fieldtype": "Code", - "in_list_view": 1, - "label": "Formula" - }, - { - "depends_on": "eval:doc.amount_based_on_formula!==1 || doc.parenttype==='Salary Slip'", - "fieldname": "amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "Amount", - "options": "currency" - }, - { - "default": "0", - "fieldname": "do_not_include_in_total", - "fieldtype": "Check", - "label": "Do not include in total" - }, - { - "depends_on": "eval:doc.parenttype=='Salary Structure'", - "fieldname": "default_amount", - "fieldtype": "Currency", - "label": "Default Amount", - "options": "currency", - "print_hide": 1 - }, - { - "fieldname": "additional_amount", - "fieldtype": "Currency", - "hidden": 1, - "label": "Additional Amount", - "no_copy": 1, - "options": "currency", - "print_hide": 1, - "read_only": 1 - }, - { - "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", - "fieldname": "tax_on_flexible_benefit", - "fieldtype": "Currency", - "label": "Tax on flexible benefit", - "options": "currency", - "read_only": 1 - }, - { - "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.parentfield=='deductions' && doc.variable_based_on_taxable_salary == 1", - "fieldname": "tax_on_additional_salary", - "fieldtype": "Currency", - "label": "Tax on additional salary", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "additional_salary", - "fieldtype": "Link", - "label": "Additional Salary ", - "options": "Additional Salary", - "read_only": 1 - }, - { - "default": "0", - "depends_on": "eval:doc.parentfield=='deductions'", - "fetch_from": "salary_component.exempted_from_income_tax", - "fieldname": "exempted_from_income_tax", - "fieldtype": "Check", - "label": "Exempted from Income Tax", - "read_only": 1 - }, - { - "collapsible": 1, - "fieldname": "section_break_5", - "fieldtype": "Section Break", - "label": "Component properties and references " - }, - { - "fieldname": "column_break_11", - "fieldtype": "Column Break" - }, - { - "fieldname": "section_break_19", - "fieldtype": "Section Break" - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_24", - "fieldtype": "Column Break" - }, - { - "description": "Total salary booked against this component for this employee from the beginning of the year (payroll period or fiscal year) up to the current salary slip's end date.", - "fieldname": "year_to_date", - "fieldtype": "Currency", - "label": "Year To Date", - "options": "currency", - "read_only": 1 - }, - { - "default": "0", - "depends_on": "eval:doc.parenttype=='Salary Slip' && doc.additional_salary", - "fieldname": "is_recurring_additional_salary", - "fieldtype": "Check", - "label": "Is Recurring Additional Salary", - "read_only": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2021-08-30 13:39:15.847158", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Detail", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_detail/salary_detail.py b/erpnext/payroll/doctype/salary_detail/salary_detail.py deleted file mode 100644 index c74bd546eb..0000000000 --- a/erpnext/payroll/doctype/salary_detail/salary_detail.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from frappe.model.document import Document - - -class SalaryDetail(Document): - pass diff --git a/erpnext/payroll/doctype/salary_slip/README.md b/erpnext/payroll/doctype/salary_slip/README.md deleted file mode 100644 index 736550e42c..0000000000 --- a/erpnext/payroll/doctype/salary_slip/README.md +++ /dev/null @@ -1 +0,0 @@ -Details of monthly salary paid for an Employee. \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_slip/__init__.py b/erpnext/payroll/doctype/salary_slip/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.js b/erpnext/payroll/doctype/salary_slip/salary_slip.js deleted file mode 100644 index 3ef9762a83..0000000000 --- a/erpnext/payroll/doctype/salary_slip/salary_slip.js +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -cur_frm.add_fetch('employee', 'company', 'company'); -cur_frm.add_fetch('time_sheet', 'total_hours', 'working_hours'); - -frappe.ui.form.on("Salary Slip", { - setup: function(frm) { - $.each(["earnings", "deductions"], function(i, table_fieldname) { - frm.get_field(table_fieldname).grid.editable_fields = [ - {fieldname: 'salary_component', columns: 6}, - {fieldname: 'amount', columns: 4} - ]; - }); - - frm.fields_dict["timesheets"].grid.get_field("time_sheet").get_query = function() { - return { - filters: { - employee: frm.doc.employee - } - }; - }; - - frm.set_query("salary_component", "earnings", function() { - return { - filters: { - type: "earning" - } - }; - }); - - frm.set_query("salary_component", "deductions", function() { - return { - filters: { - type: "deduction" - } - }; - }); - - frm.set_query("employee", function() { - return { - query: "erpnext.controllers.queries.employee_query", - filters: { - company: frm.doc.company - } - }; - }); - }, - - start_date: function(frm) { - if (frm.doc.start_date) { - frm.trigger("set_end_date"); - } - }, - - end_date: function(frm) { - frm.events.get_emp_and_working_day_details(frm); - }, - - set_end_date: function(frm) { - frappe.call({ - method: 'erpnext.payroll.doctype.payroll_entry.payroll_entry.get_end_date', - args: { - frequency: frm.doc.payroll_frequency, - start_date: frm.doc.start_date - }, - callback: function (r) { - if (r.message) { - frm.set_value('end_date', r.message.end_date); - } - } - }); - }, - - company: function(frm) { - var company = locals[':Company'][frm.doc.company]; - if (!frm.doc.letter_head && company.default_letter_head) { - frm.set_value('letter_head', company.default_letter_head); - } - }, - - currency: function(frm) { - frm.trigger("set_dynamic_labels"); - }, - - set_dynamic_labels: function(frm) { - var company_currency = frm.doc.company? erpnext.get_currency(frm.doc.company): frappe.defaults.get_default("currency"); - if (frm.doc.employee && frm.doc.currency) { - frappe.run_serially([ - () => frm.events.set_exchange_rate(frm, company_currency), - () => frm.events.change_form_labels(frm, company_currency), - () => frm.events.change_grid_labels(frm), - () => frm.refresh_fields() - ]); - } - }, - - set_exchange_rate: function(frm, company_currency) { - if (frm.doc.docstatus === 0) { - if (frm.doc.currency) { - var from_currency = frm.doc.currency; - if (from_currency != company_currency) { - frm.events.hide_loan_section(frm); - frappe.call({ - method: "erpnext.setup.utils.get_exchange_rate", - args: { - from_currency: from_currency, - to_currency: company_currency, - }, - callback: function(r) { - if (r.message) { - frm.set_value("exchange_rate", flt(r.message)); - frm.set_df_property('exchange_rate', 'hidden', 0); - frm.set_df_property("exchange_rate", "description", "1 " + frm.doc.currency - + " = [?] " + company_currency); - } - } - }); - } else { - frm.set_value("exchange_rate", 1.0); - frm.set_df_property('exchange_rate', 'hidden', 1); - frm.set_df_property("exchange_rate", "description", "" ); - } - } - } - }, - - exchange_rate: function(frm) { - set_totals(frm); - }, - - hide_loan_section: function(frm) { - frm.set_df_property('section_break_43', 'hidden', 1); - }, - - change_form_labels: function(frm, company_currency) { - frm.set_currency_labels(["base_hour_rate", "base_gross_pay", "base_total_deduction", - "base_net_pay", "base_rounded_total", "base_total_in_words", "base_year_to_date", "base_month_to_date", "gross_base_year_to_date"], - company_currency); - - frm.set_currency_labels(["hour_rate", "gross_pay", "total_deduction", "net_pay", "rounded_total", "total_in_words", "year_to_date", "month_to_date", "gross_year_to_date"], - frm.doc.currency); - - // toggle fields - frm.toggle_display(["exchange_rate", "base_hour_rate", "base_gross_pay", "base_total_deduction", - "base_net_pay", "base_rounded_total", "base_total_in_words", "base_year_to_date", "base_month_to_date", "base_gross_year_to_date"], - frm.doc.currency != company_currency); - }, - - change_grid_labels: function(frm) { - let fields = ["amount", "year_to_date", "default_amount", "additional_amount", "tax_on_flexible_benefit", - "tax_on_additional_salary"]; - - frm.set_currency_labels(fields, frm.doc.currency, "earnings"); - frm.set_currency_labels(fields, frm.doc.currency, "deductions"); - }, - - refresh: function(frm) { - frm.trigger("toggle_fields"); - - var salary_detail_fields = ["formula", "abbr", "statistical_component", "variable_based_on_taxable_salary"]; - frm.fields_dict['earnings'].grid.set_column_disp(salary_detail_fields, false); - frm.fields_dict['deductions'].grid.set_column_disp(salary_detail_fields, false); - frm.trigger("set_dynamic_labels"); - }, - - salary_slip_based_on_timesheet: function(frm) { - frm.trigger("toggle_fields"); - frm.events.get_emp_and_working_day_details(frm); - }, - - payroll_frequency: function(frm) { - frm.trigger("toggle_fields"); - frm.set_value('end_date', ''); - }, - - employee: function(frm) { - frm.events.get_emp_and_working_day_details(frm); - }, - - leave_without_pay: function(frm) { - if (frm.doc.employee && frm.doc.start_date && frm.doc.end_date) { - return frappe.call({ - method: 'process_salary_based_on_working_days', - doc: frm.doc, - callback: function() { - frm.refresh(); - } - }); - } - }, - - toggle_fields: function(frm) { - frm.toggle_display(['hourly_wages', 'timesheets'], cint(frm.doc.salary_slip_based_on_timesheet)===1); - - frm.toggle_display(['payment_days', 'total_working_days', 'leave_without_pay'], - frm.doc.payroll_frequency != ""); - }, - - get_emp_and_working_day_details: function(frm) { - if (frm.doc.employee) { - return frappe.call({ - method: 'get_emp_and_working_day_details', - doc: frm.doc, - callback: function(r) { - if (r.message[1] !== "Leave" && r.message[0]) { - frm.fields_dict.absent_days.set_description(__("Unmarked Days is treated as {0}. You can can change this in {1}", [r.message, frappe.utils.get_form_link("Payroll Settings", "Payroll Settings", true)])); - } - frm.refresh(); - } - }); - } - } -}); - -frappe.ui.form.on('Salary Slip Timesheet', { - time_sheet: function(frm) { - set_totals(frm); - }, - timesheets_remove: function(frm) { - set_totals(frm); - } -}); - -var set_totals = function(frm) { - if (frm.doc.docstatus === 0 && frm.doc.doctype === "Salary Slip") { - if (frm.doc.earnings || frm.doc.deductions) { - frappe.call({ - method: "set_totals", - doc: frm.doc, - callback: function() { - frm.refresh_fields(); - } - }); - } - } -}; - -frappe.ui.form.on('Salary Detail', { - amount: function(frm) { - set_totals(frm); - }, - - earnings_remove: function(frm) { - set_totals(frm); - }, - - deductions_remove: function(frm) { - set_totals(frm); - }, - - salary_component: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if (child.salary_component) { - frappe.call({ - method: "frappe.client.get", - args: { - doctype: "Salary Component", - name: child.salary_component - }, - callback: function(data) { - if (data.message) { - var result = data.message; - frappe.model.set_value(cdt, cdn, 'condition', result.condition); - frappe.model.set_value(cdt, cdn, 'amount_based_on_formula', result.amount_based_on_formula); - if (result.amount_based_on_formula === 1) { - frappe.model.set_value(cdt, cdn, 'formula', result.formula); - } else { - frappe.model.set_value(cdt, cdn, 'amount', result.amount); - } - frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component); - frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days); - frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total); - frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary); - frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable); - frappe.model.set_value(cdt, cdn, 'is_flexible_benefit', result.is_flexible_benefit); - refresh_field("earnings"); - refresh_field("deductions"); - } - } - }); - } - }, - - amount_based_on_formula: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if (child.amount_based_on_formula === 1) { - frappe.model.set_value(cdt, cdn, 'amount', null); - } else { - frappe.model.set_value(cdt, cdn, 'formula', null); - } - } -}); diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.json b/erpnext/payroll/doctype/salary_slip/salary_slip.json deleted file mode 100644 index fe8e22cedf..0000000000 --- a/erpnext/payroll/doctype/salary_slip/salary_slip.json +++ /dev/null @@ -1,683 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "creation": "2013-01-10 16:34:15", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "posting_date", - "employee", - "employee_name", - "department", - "designation", - "branch", - "column_break1", - "status", - "journal_entry", - "payroll_entry", - "company", - "currency", - "exchange_rate", - "letter_head", - "section_break_10", - "start_date", - "end_date", - "salary_structure", - "column_break_18", - "salary_slip_based_on_timesheet", - "payroll_frequency", - "section_break_20", - "total_working_days", - "unmarked_days", - "leave_without_pay", - "column_break_24", - "absent_days", - "payment_days", - "hourly_wages", - "timesheets", - "column_break_20", - "total_working_hours", - "hour_rate", - "base_hour_rate", - "section_break_26", - "bank_name", - "bank_account_no", - "mode_of_payment", - "section_break_32", - "deduct_tax_for_unclaimed_employee_benefits", - "deduct_tax_for_unsubmitted_tax_exemption_proof", - "earning_deduction", - "earning", - "earnings", - "deduction", - "deductions", - "totals", - "gross_pay", - "base_gross_pay", - "gross_year_to_date", - "base_gross_year_to_date", - "column_break_25", - "total_deduction", - "base_total_deduction", - "loan_repayment", - "loans", - "section_break_43", - "total_principal_amount", - "total_interest_amount", - "column_break_45", - "total_loan_repayment", - "net_pay_info", - "net_pay", - "base_net_pay", - "year_to_date", - "base_year_to_date", - "column_break_53", - "rounded_total", - "base_rounded_total", - "month_to_date", - "base_month_to_date", - "section_break_55", - "total_in_words", - "column_break_69", - "base_total_in_words", - "leave_details_section", - "leave_details", - "section_break_75", - "amended_from" - ], - "fields": [ - { - "default": "Today", - "fieldname": "posting_date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Posting Date", - "reqd": 1 - }, - { - "fieldname": "employee", - "fieldtype": "Link", - "in_global_search": 1, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "oldfieldname": "employee", - "oldfieldtype": "Link", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Read Only", - "in_global_search": 1, - "in_list_view": 1, - "label": "Employee Name", - "oldfieldname": "employee_name", - "oldfieldtype": "Data", - "reqd": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Department", - "oldfieldname": "department", - "oldfieldtype": "Link", - "options": "Department", - "read_only": 1 - }, - { - "depends_on": "eval:doc.designation", - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Link", - "label": "Designation", - "oldfieldname": "designation", - "oldfieldtype": "Link", - "options": "Designation", - "read_only": 1 - }, - { - "fetch_from": "employee.branch", - "fieldname": "branch", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Branch", - "oldfieldname": "branch", - "oldfieldtype": "Link", - "options": "Branch", - "read_only": 1 - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "status", - "fieldtype": "Select", - "label": "Status", - "options": "Draft\nSubmitted\nCancelled", - "read_only": 1 - }, - { - "fieldname": "journal_entry", - "fieldtype": "Link", - "label": "Journal Entry", - "options": "Journal Entry", - "read_only": 1 - }, - { - "fieldname": "payroll_entry", - "fieldtype": "Link", - "label": "Payroll Entry", - "options": "Payroll Entry", - "read_only": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Company", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "allow_on_submit": 1, - "fieldname": "letter_head", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Letter Head", - "options": "Letter Head", - "print_hide": 1 - }, - { - "fieldname": "section_break_10", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "salary_slip_based_on_timesheet", - "fieldtype": "Check", - "label": "Salary Slip Based on Timesheet", - "read_only": 1 - }, - { - "fieldname": "start_date", - "fieldtype": "Date", - "label": "Start Date" - }, - { - "fieldname": "end_date", - "fieldtype": "Date", - "label": "End Date" - }, - { - "fieldname": "salary_structure", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Salary Structure", - "options": "Salary Structure", - "read_only": 1, - "reqd": 1, - "search_index": 1 - }, - { - "depends_on": "eval:(!doc.salary_slip_based_on_timesheet)", - "fieldname": "payroll_frequency", - "fieldtype": "Select", - "label": "Payroll Frequency", - "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily" - }, - { - "fieldname": "total_working_days", - "fieldtype": "Float", - "label": "Working Days", - "oldfieldname": "total_days_in_month", - "oldfieldtype": "Int", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "leave_without_pay", - "fieldtype": "Float", - "label": "Leave Without Pay", - "oldfieldname": "leave_without_pay", - "oldfieldtype": "Currency" - }, - { - "fieldname": "payment_days", - "fieldtype": "Float", - "label": "Payment Days", - "oldfieldname": "payment_days", - "oldfieldtype": "Float", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "hourly_wages", - "fieldtype": "Section Break" - }, - { - "fieldname": "timesheets", - "fieldtype": "Table", - "label": "Salary Slip Timesheet", - "options": "Salary Slip Timesheet" - }, - { - "fieldname": "column_break_20", - "fieldtype": "Column Break" - }, - { - "fieldname": "total_working_hours", - "fieldtype": "Float", - "label": "Total Working Hours", - "print_hide_if_no_value": 1 - }, - { - "fieldname": "hour_rate", - "fieldtype": "Currency", - "label": "Hour Rate", - "options": "currency", - "print_hide_if_no_value": 1 - }, - { - "fieldname": "section_break_26", - "fieldtype": "Section Break" - }, - { - "fieldname": "bank_name", - "fieldtype": "Data", - "label": "Bank Name", - "oldfieldname": "bank_name", - "oldfieldtype": "Data", - "read_only": 1 - }, - { - "fieldname": "bank_account_no", - "fieldtype": "Data", - "label": "Bank Account No.", - "oldfieldname": "bank_account_no", - "oldfieldtype": "Data", - "read_only": 1 - }, - { - "fieldname": "section_break_32", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "deduct_tax_for_unclaimed_employee_benefits", - "fieldtype": "Check", - "label": "Deduct Tax For Unclaimed Employee Benefits" - }, - { - "default": "0", - "fieldname": "deduct_tax_for_unsubmitted_tax_exemption_proof", - "fieldtype": "Check", - "label": "Deduct Tax For Unsubmitted Tax Exemption Proof" - }, - { - "fieldname": "earning_deduction", - "fieldtype": "Section Break", - "label": "Earnings & Deductions", - "oldfieldtype": "Section Break" - }, - { - "fieldname": "earning", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "earnings", - "fieldtype": "Table", - "label": "Earnings", - "oldfieldname": "earning_details", - "oldfieldtype": "Table", - "options": "Salary Detail" - }, - { - "fieldname": "deduction", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "deductions", - "fieldtype": "Table", - "label": "Deductions", - "oldfieldname": "deduction_details", - "oldfieldtype": "Table", - "options": "Salary Detail" - }, - { - "fieldname": "totals", - "fieldtype": "Section Break", - "oldfieldtype": "Section Break" - }, - { - "fieldname": "gross_pay", - "fieldtype": "Currency", - "label": "Gross Pay", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "column_break_25", - "fieldtype": "Column Break" - }, - { - "depends_on": "total_loan_repayment", - "fieldname": "loan_repayment", - "fieldtype": "Section Break", - "label": "Loan Repayment" - }, - { - "fieldname": "loans", - "fieldtype": "Table", - "label": "Employee Loan", - "options": "Salary Slip Loan", - "print_hide": 1 - }, - { - "depends_on": "eval:doc.docstatus != 0", - "fieldname": "section_break_43", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "total_principal_amount", - "fieldtype": "Currency", - "label": "Total Principal Amount", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "default": "0", - "fieldname": "total_interest_amount", - "fieldtype": "Currency", - "label": "Total Interest Amount", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "column_break_45", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "total_loan_repayment", - "fieldtype": "Currency", - "label": "Total Loan Repayment", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "net_pay_info", - "fieldtype": "Section Break", - "label": "Net Pay Info" - }, - { - "fieldname": "net_pay", - "fieldtype": "Currency", - "label": "Net Pay", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "column_break_53", - "fieldtype": "Column Break" - }, - { - "bold": 1, - "fieldname": "rounded_total", - "fieldtype": "Currency", - "label": "Rounded Total", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "section_break_55", - "fieldtype": "Section Break" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Amended From", - "no_copy": 1, - "oldfieldname": "amended_from", - "oldfieldtype": "Data", - "options": "Salary Slip", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "mode_of_payment", - "fieldtype": "Select", - "label": "Mode Of Payment", - "read_only": 1 - }, - { - "fieldname": "absent_days", - "fieldtype": "Float", - "label": "Absent Days", - "read_only": 1 - }, - { - "fieldname": "unmarked_days", - "fieldtype": "Float", - "hidden": 1, - "label": "Unmarked days" - }, - { - "fieldname": "section_break_20", - "fieldtype": "Section Break" - }, - { - "fieldname": "column_break_24", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_18", - "fieldtype": "Column Break" - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.salary_structure)", - "fetch_from": "salary_structure.currency", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "total_deduction", - "fieldtype": "Currency", - "label": "Total Deduction", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "total_in_words", - "fieldtype": "Data", - "label": "Total in words", - "length": 240, - "read_only": 1 - }, - { - "fieldname": "section_break_75", - "fieldtype": "Section Break" - }, - { - "fieldname": "base_hour_rate", - "fieldtype": "Currency", - "label": "Hour Rate (Company Currency)", - "options": "Company:company:default_currency", - "print_hide_if_no_value": 1 - }, - { - "fieldname": "base_gross_pay", - "fieldtype": "Currency", - "label": "Gross Pay (Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "default": "1.0", - "fieldname": "exchange_rate", - "fieldtype": "Float", - "hidden": 1, - "label": "Exchange Rate", - "print_hide": 1, - "reqd": 1 - }, - { - "fieldname": "base_total_deduction", - "fieldtype": "Currency", - "label": "Total Deduction (Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "base_net_pay", - "fieldtype": "Currency", - "label": "Net Pay (Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "bold": 1, - "fieldname": "base_rounded_total", - "fieldtype": "Currency", - "label": "Rounded Total (Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "base_total_in_words", - "fieldtype": "Data", - "label": "Total in words (Company Currency)", - "length": 240, - "read_only": 1 - }, - { - "fieldname": "column_break_69", - "fieldtype": "Column Break" - }, - { - "description": "Total salary booked for this employee from the beginning of the year (payroll period or fiscal year) up to the current salary slip's end date.", - "fieldname": "year_to_date", - "fieldtype": "Currency", - "label": "Year To Date", - "options": "currency", - "read_only": 1 - }, - { - "description": "Total salary booked for this employee from the beginning of the month up to the current salary slip's end date.", - "fieldname": "month_to_date", - "fieldtype": "Currency", - "label": "Month To Date", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "base_year_to_date", - "fieldtype": "Currency", - "label": "Year To Date(Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "base_month_to_date", - "fieldtype": "Currency", - "label": "Month To Date(Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - }, - { - "fieldname": "leave_details_section", - "fieldtype": "Section Break", - "label": "Leave Details" - }, - { - "fieldname": "leave_details", - "fieldtype": "Table", - "label": "Leave Details", - "options": "Salary Slip Leave", - "read_only": 1 - }, - { - "fieldname": "gross_year_to_date", - "fieldtype": "Currency", - "label": "Gross Year To Date", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "base_gross_year_to_date", - "fieldtype": "Currency", - "label": "Gross Year To Date(Company Currency)", - "options": "Company:company:default_currency", - "read_only": 1 - } - ], - "icon": "fa fa-file-text", - "idx": 9, - "is_submittable": 1, - "links": [], - "modified": "2022-01-19 12:45:54.999345", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Slip", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "read": 1, - "role": "Employee" - } - ], - "search_fields": "employee_name", - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "timeline_field": "employee", - "title_field": "employee_name" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip.py b/erpnext/payroll/doctype/salary_slip/salary_slip.py deleted file mode 100644 index 6a7f72b013..0000000000 --- a/erpnext/payroll/doctype/salary_slip/salary_slip.py +++ /dev/null @@ -1,1732 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import datetime -import math - -import frappe -from frappe import _, msgprint -from frappe.model.naming import make_autoname -from frappe.utils import ( - add_days, - cint, - cstr, - date_diff, - flt, - formatdate, - get_first_day, - getdate, - money_in_words, - rounded, -) -from frappe.utils.background_jobs import enqueue - -import erpnext -from erpnext.accounts.utils import get_fiscal_year -from erpnext.hr.utils import get_holiday_dates_for_employee, validate_active_employee -from erpnext.loan_management.doctype.loan_repayment.loan_repayment import ( - calculate_amounts, - create_repayment_entry, -) -from erpnext.payroll.doctype.additional_salary.additional_salary import get_additional_salaries -from erpnext.payroll.doctype.employee_benefit_application.employee_benefit_application import ( - get_benefit_component_amount, -) -from erpnext.payroll.doctype.employee_benefit_claim.employee_benefit_claim import ( - get_benefit_claim_amount, - get_last_payroll_period_benefits, -) -from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates -from erpnext.payroll.doctype.payroll_period.payroll_period import ( - get_payroll_period, - get_period_factor, -) -from erpnext.utilities.transaction_base import TransactionBase - - -class SalarySlip(TransactionBase): - def __init__(self, *args, **kwargs): - super(SalarySlip, self).__init__(*args, **kwargs) - self.series = "Sal Slip/{0}/.#####".format(self.employee) - self.whitelisted_globals = { - "int": int, - "float": float, - "long": int, - "round": round, - "date": datetime.date, - "getdate": getdate, - } - - def autoname(self): - self.name = make_autoname(self.series) - - def validate(self): - self.status = self.get_status() - validate_active_employee(self.employee) - self.validate_dates() - self.check_existing() - if not self.salary_slip_based_on_timesheet: - self.get_date_details() - - if not (len(self.get("earnings")) or len(self.get("deductions"))): - # get details from salary structure - self.get_emp_and_working_day_details() - else: - self.get_working_days_details(lwp=self.leave_without_pay) - - self.calculate_net_pay() - self.compute_year_to_date() - self.compute_month_to_date() - self.compute_component_wise_year_to_date() - self.add_leave_balances() - - if frappe.db.get_single_value("Payroll Settings", "max_working_hours_against_timesheet"): - max_working_hours = frappe.db.get_single_value( - "Payroll Settings", "max_working_hours_against_timesheet" - ) - if self.salary_slip_based_on_timesheet and (self.total_working_hours > int(max_working_hours)): - frappe.msgprint( - _("Total working hours should not be greater than max working hours {0}").format( - max_working_hours - ), - alert=True, - ) - - def set_net_total_in_words(self): - doc_currency = self.currency - company_currency = erpnext.get_company_currency(self.company) - total = self.net_pay if self.is_rounding_total_disabled() else self.rounded_total - base_total = self.base_net_pay if self.is_rounding_total_disabled() else self.base_rounded_total - self.total_in_words = money_in_words(total, doc_currency) - self.base_total_in_words = money_in_words(base_total, company_currency) - - def on_submit(self): - if self.net_pay < 0: - frappe.throw(_("Net Pay cannot be less than 0")) - else: - self.set_status() - self.update_status(self.name) - self.make_loan_repayment_entry() - if ( - frappe.db.get_single_value("Payroll Settings", "email_salary_slip_to_employee") - ) and not frappe.flags.via_payroll_entry: - self.email_salary_slip() - - self.update_payment_status_for_gratuity() - - def update_payment_status_for_gratuity(self): - add_salary = frappe.db.get_all( - "Additional Salary", - filters={ - "payroll_date": ("BETWEEN", [self.start_date, self.end_date]), - "employee": self.employee, - "ref_doctype": "Gratuity", - "docstatus": 1, - }, - fields=["ref_docname", "name"], - limit=1, - ) - - if len(add_salary): - status = "Paid" if self.docstatus == 1 else "Unpaid" - if add_salary[0].name in [data.additional_salary for data in self.earnings]: - frappe.db.set_value("Gratuity", add_salary.ref_docname, "status", status) - - def on_cancel(self): - self.set_status() - self.update_status() - self.update_payment_status_for_gratuity() - self.cancel_loan_repayment_entry() - - def on_trash(self): - from frappe.model.naming import revert_series_if_last - - revert_series_if_last(self.series, self.name) - - def get_status(self): - if self.docstatus == 0: - status = "Draft" - elif self.docstatus == 1: - status = "Submitted" - elif self.docstatus == 2: - status = "Cancelled" - return status - - def validate_dates(self, joining_date=None, relieving_date=None): - if date_diff(self.end_date, self.start_date) < 0: - frappe.throw(_("To date cannot be before From date")) - - if not joining_date: - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ("date_of_joining", "relieving_date") - ) - - if date_diff(self.end_date, joining_date) < 0: - frappe.throw(_("Cannot create Salary Slip for Employee joining after Payroll Period")) - - if relieving_date and date_diff(relieving_date, self.start_date) < 0: - frappe.throw(_("Cannot create Salary Slip for Employee who has left before Payroll Period")) - - def is_rounding_total_disabled(self): - return cint(frappe.db.get_single_value("Payroll Settings", "disable_rounded_total")) - - def check_existing(self): - if not self.salary_slip_based_on_timesheet: - cond = "" - if self.payroll_entry: - cond += "and payroll_entry = '{0}'".format(self.payroll_entry) - ret_exist = frappe.db.sql( - """select name from `tabSalary Slip` - where start_date = %s and end_date = %s and docstatus != 2 - and employee = %s and name != %s {0}""".format( - cond - ), - (self.start_date, self.end_date, self.employee, self.name), - ) - if ret_exist: - frappe.throw( - _("Salary Slip of employee {0} already created for this period").format(self.employee) - ) - else: - for data in self.timesheets: - if frappe.db.get_value("Timesheet", data.time_sheet, "status") == "Payrolled": - frappe.throw( - _("Salary Slip of employee {0} already created for time sheet {1}").format( - self.employee, data.time_sheet - ) - ) - - def get_date_details(self): - if not self.end_date: - date_details = get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date) - self.start_date = date_details.start_date - self.end_date = date_details.end_date - - @frappe.whitelist() - def get_emp_and_working_day_details(self): - """First time, load all the components from salary structure""" - if self.employee: - self.set("earnings", []) - self.set("deductions", []) - - if not self.salary_slip_based_on_timesheet: - self.get_date_details() - - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ("date_of_joining", "relieving_date") - ) - - self.validate_dates(joining_date, relieving_date) - - # getin leave details - self.get_working_days_details(joining_date, relieving_date) - struct = self.check_sal_struct(joining_date, relieving_date) - - if struct: - self._salary_structure_doc = frappe.get_doc("Salary Structure", struct) - self.salary_slip_based_on_timesheet = ( - self._salary_structure_doc.salary_slip_based_on_timesheet or 0 - ) - self.set_time_sheet() - self.pull_sal_struct() - ps = frappe.db.get_value( - "Payroll Settings", None, ["payroll_based_on", "consider_unmarked_attendance_as"], as_dict=1 - ) - return [ps.payroll_based_on, ps.consider_unmarked_attendance_as] - - def set_time_sheet(self): - if self.salary_slip_based_on_timesheet: - self.set("timesheets", []) - timesheets = frappe.db.sql( - """ select * from `tabTimesheet` where employee = %(employee)s and start_date BETWEEN %(start_date)s AND %(end_date)s and (status = 'Submitted' or - status = 'Billed')""", - {"employee": self.employee, "start_date": self.start_date, "end_date": self.end_date}, - as_dict=1, - ) - - for data in timesheets: - self.append("timesheets", {"time_sheet": data.name, "working_hours": data.total_hours}) - - def check_sal_struct(self, joining_date, relieving_date): - cond = """and sa.employee=%(employee)s and (sa.from_date <= %(start_date)s or - sa.from_date <= %(end_date)s or sa.from_date <= %(joining_date)s)""" - if self.payroll_frequency: - cond += """and ss.payroll_frequency = '%(payroll_frequency)s'""" % { - "payroll_frequency": self.payroll_frequency - } - - st_name = frappe.db.sql( - """ - select sa.salary_structure - from `tabSalary Structure Assignment` sa join `tabSalary Structure` ss - where sa.salary_structure=ss.name - and sa.docstatus = 1 and ss.docstatus = 1 and ss.is_active ='Yes' %s - order by sa.from_date desc - limit 1 - """ - % cond, - { - "employee": self.employee, - "start_date": self.start_date, - "end_date": self.end_date, - "joining_date": joining_date, - }, - ) - - if st_name: - self.salary_structure = st_name[0][0] - return self.salary_structure - - else: - self.salary_structure = None - frappe.msgprint( - _("No active or default Salary Structure found for employee {0} for the given dates").format( - self.employee - ), - title=_("Salary Structure Missing"), - ) - - def pull_sal_struct(self): - from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip - - if self.salary_slip_based_on_timesheet: - self.salary_structure = self._salary_structure_doc.name - self.hour_rate = self._salary_structure_doc.hour_rate - self.base_hour_rate = flt(self.hour_rate) * flt(self.exchange_rate) - self.total_working_hours = sum([d.working_hours or 0.0 for d in self.timesheets]) or 0.0 - wages_amount = self.hour_rate * self.total_working_hours - - self.add_earning_for_hourly_wages( - self, self._salary_structure_doc.salary_component, wages_amount - ) - - make_salary_slip(self._salary_structure_doc.name, self) - - def get_working_days_details( - self, joining_date=None, relieving_date=None, lwp=None, for_preview=0 - ): - payroll_based_on = frappe.db.get_value("Payroll Settings", None, "payroll_based_on") - include_holidays_in_total_working_days = frappe.db.get_single_value( - "Payroll Settings", "include_holidays_in_total_working_days" - ) - - working_days = date_diff(self.end_date, self.start_date) + 1 - if for_preview: - self.total_working_days = working_days - self.payment_days = working_days - return - - holidays = self.get_holidays_for_employee(self.start_date, self.end_date) - - if not cint(include_holidays_in_total_working_days): - working_days -= len(holidays) - if working_days < 0: - frappe.throw(_("There are more holidays than working days this month.")) - - if not payroll_based_on: - frappe.throw(_("Please set Payroll based on in Payroll settings")) - - if payroll_based_on == "Attendance": - actual_lwp, absent = self.calculate_lwp_ppl_and_absent_days_based_on_attendance(holidays) - self.absent_days = absent - else: - actual_lwp = self.calculate_lwp_or_ppl_based_on_leave_application(holidays, working_days) - - if not lwp: - lwp = actual_lwp - elif lwp != actual_lwp: - frappe.msgprint( - _("Leave Without Pay does not match with approved {} records").format(payroll_based_on) - ) - - self.leave_without_pay = lwp - self.total_working_days = working_days - - payment_days = self.get_payment_days( - joining_date, relieving_date, include_holidays_in_total_working_days - ) - - if flt(payment_days) > flt(lwp): - self.payment_days = flt(payment_days) - flt(lwp) - - if payroll_based_on == "Attendance": - self.payment_days -= flt(absent) - - consider_unmarked_attendance_as = ( - frappe.db.get_value("Payroll Settings", None, "consider_unmarked_attendance_as") or "Present" - ) - - if payroll_based_on == "Attendance" and consider_unmarked_attendance_as == "Absent": - unmarked_days = self.get_unmarked_days(include_holidays_in_total_working_days) - self.absent_days += unmarked_days # will be treated as absent - self.payment_days -= unmarked_days - else: - self.payment_days = 0 - - def get_unmarked_days(self, include_holidays_in_total_working_days): - unmarked_days = self.total_working_days - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - start_date = self.start_date - end_date = self.end_date - - if joining_date and (getdate(self.start_date) < joining_date <= getdate(self.end_date)): - start_date = joining_date - unmarked_days = self.get_unmarked_days_based_on_doj_or_relieving( - unmarked_days, - include_holidays_in_total_working_days, - self.start_date, - add_days(joining_date, -1), - ) - - if relieving_date and (getdate(self.start_date) <= relieving_date < getdate(self.end_date)): - end_date = relieving_date - unmarked_days = self.get_unmarked_days_based_on_doj_or_relieving( - unmarked_days, - include_holidays_in_total_working_days, - add_days(relieving_date, 1), - self.end_date, - ) - - # exclude days for which attendance has been marked - unmarked_days -= frappe.get_all( - "Attendance", - filters={ - "attendance_date": ["between", [start_date, end_date]], - "employee": self.employee, - "docstatus": 1, - }, - fields=["COUNT(*) as marked_days"], - )[0].marked_days - - return unmarked_days - - def get_unmarked_days_based_on_doj_or_relieving( - self, unmarked_days, include_holidays_in_total_working_days, start_date, end_date - ): - """ - Exclude days before DOJ or after - Relieving Date from unmarked days - """ - from erpnext.hr.doctype.employee.employee import is_holiday - - if include_holidays_in_total_working_days: - unmarked_days -= date_diff(end_date, start_date) + 1 - else: - # exclude only if not holidays - for days in range(date_diff(end_date, start_date) + 1): - date = add_days(end_date, -days) - if not is_holiday(self.employee, date): - unmarked_days -= 1 - - return unmarked_days - - def get_payment_days(self, joining_date, relieving_date, include_holidays_in_total_working_days): - if not joining_date: - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - - start_date = getdate(self.start_date) - if joining_date: - if getdate(self.start_date) <= joining_date <= getdate(self.end_date): - start_date = joining_date - elif joining_date > getdate(self.end_date): - return - - end_date = getdate(self.end_date) - if relieving_date: - if getdate(self.start_date) <= relieving_date <= getdate(self.end_date): - end_date = relieving_date - elif relieving_date < getdate(self.start_date): - frappe.throw(_("Employee relieved on {0} must be set as 'Left'").format(relieving_date)) - - payment_days = date_diff(end_date, start_date) + 1 - - if not cint(include_holidays_in_total_working_days): - holidays = self.get_holidays_for_employee(start_date, end_date) - payment_days -= len(holidays) - - return payment_days - - def get_holidays_for_employee(self, start_date, end_date): - return get_holiday_dates_for_employee(self.employee, start_date, end_date) - - def calculate_lwp_or_ppl_based_on_leave_application(self, holidays, working_days): - lwp = 0 - holidays = "','".join(holidays) - daily_wages_fraction_for_half_day = ( - flt(frappe.db.get_value("Payroll Settings", None, "daily_wages_fraction_for_half_day")) or 0.5 - ) - - for d in range(working_days): - dt = add_days(cstr(getdate(self.start_date)), d) - leave = frappe.db.sql( - """ - SELECT t1.name, - CASE WHEN (t1.half_day_date = %(dt)s or t1.to_date = t1.from_date) - THEN t1.half_day else 0 END, - t2.is_ppl, - t2.fraction_of_daily_salary_per_leave - FROM `tabLeave Application` t1, `tabLeave Type` t2 - WHERE t2.name = t1.leave_type - AND (t2.is_lwp = 1 or t2.is_ppl = 1) - AND t1.docstatus = 1 - AND t1.employee = %(employee)s - AND ifnull(t1.salary_slip, '') = '' - AND CASE - WHEN t2.include_holiday != 1 - THEN %(dt)s not in ('{0}') and %(dt)s between from_date and to_date - WHEN t2.include_holiday - THEN %(dt)s between from_date and to_date - END - """.format( - holidays - ), - {"employee": self.employee, "dt": dt}, - ) - - if leave: - equivalent_lwp_count = 0 - is_half_day_leave = cint(leave[0][1]) - is_partially_paid_leave = cint(leave[0][2]) - fraction_of_daily_salary_per_leave = flt(leave[0][3]) - - equivalent_lwp_count = (1 - daily_wages_fraction_for_half_day) if is_half_day_leave else 1 - - if is_partially_paid_leave: - equivalent_lwp_count *= ( - fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1 - ) - - lwp += equivalent_lwp_count - - return lwp - - def calculate_lwp_ppl_and_absent_days_based_on_attendance(self, holidays): - lwp = 0 - absent = 0 - - daily_wages_fraction_for_half_day = ( - flt(frappe.db.get_value("Payroll Settings", None, "daily_wages_fraction_for_half_day")) or 0.5 - ) - - leave_types = frappe.get_all( - "Leave Type", - or_filters=[["is_ppl", "=", 1], ["is_lwp", "=", 1]], - fields=["name", "is_lwp", "is_ppl", "fraction_of_daily_salary_per_leave", "include_holiday"], - ) - - leave_type_map = {} - for leave_type in leave_types: - leave_type_map[leave_type.name] = leave_type - - attendances = frappe.db.sql( - """ - SELECT attendance_date, status, leave_type - FROM `tabAttendance` - WHERE - status in ("Absent", "Half Day", "On leave") - AND employee = %s - AND docstatus = 1 - AND attendance_date between %s and %s - """, - values=(self.employee, self.start_date, self.end_date), - as_dict=1, - ) - - for d in attendances: - if ( - d.status in ("Half Day", "On Leave") - and d.leave_type - and d.leave_type not in leave_type_map.keys() - ): - continue - - if formatdate(d.attendance_date, "yyyy-mm-dd") in holidays: - if d.status == "Absent" or ( - d.leave_type - and d.leave_type in leave_type_map.keys() - and not leave_type_map[d.leave_type]["include_holiday"] - ): - continue - - if d.leave_type: - fraction_of_daily_salary_per_leave = leave_type_map[d.leave_type][ - "fraction_of_daily_salary_per_leave" - ] - - if d.status == "Half Day": - equivalent_lwp = 1 - daily_wages_fraction_for_half_day - - if d.leave_type in leave_type_map.keys() and leave_type_map[d.leave_type]["is_ppl"]: - equivalent_lwp *= ( - fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1 - ) - lwp += equivalent_lwp - elif d.status == "On Leave" and d.leave_type and d.leave_type in leave_type_map.keys(): - equivalent_lwp = 1 - if leave_type_map[d.leave_type]["is_ppl"]: - equivalent_lwp *= ( - fraction_of_daily_salary_per_leave if fraction_of_daily_salary_per_leave else 1 - ) - lwp += equivalent_lwp - elif d.status == "Absent": - absent += 1 - return lwp, absent - - def add_earning_for_hourly_wages(self, doc, salary_component, amount): - row_exists = False - for row in doc.earnings: - if row.salary_component == salary_component: - row.amount = amount - row_exists = True - break - - if not row_exists: - wages_row = { - "salary_component": salary_component, - "abbr": frappe.db.get_value("Salary Component", salary_component, "salary_component_abbr"), - "amount": self.hour_rate * self.total_working_hours, - "default_amount": 0.0, - "additional_amount": 0.0, - } - doc.append("earnings", wages_row) - - def calculate_net_pay(self): - if self.salary_structure: - self.calculate_component_amounts("earnings") - self.gross_pay = self.get_component_totals("earnings", depends_on_payment_days=1) - self.base_gross_pay = flt( - flt(self.gross_pay) * flt(self.exchange_rate), self.precision("base_gross_pay") - ) - - if self.salary_structure: - self.calculate_component_amounts("deductions") - - self.set_loan_repayment() - self.set_precision_for_component_amounts() - self.set_net_pay() - - def set_net_pay(self): - self.total_deduction = self.get_component_totals("deductions") - self.base_total_deduction = flt( - flt(self.total_deduction) * flt(self.exchange_rate), self.precision("base_total_deduction") - ) - self.net_pay = flt(self.gross_pay) - (flt(self.total_deduction) + flt(self.total_loan_repayment)) - self.rounded_total = rounded(self.net_pay) - self.base_net_pay = flt( - flt(self.net_pay) * flt(self.exchange_rate), self.precision("base_net_pay") - ) - self.base_rounded_total = flt(rounded(self.base_net_pay), self.precision("base_net_pay")) - if self.hour_rate: - self.base_hour_rate = flt( - flt(self.hour_rate) * flt(self.exchange_rate), self.precision("base_hour_rate") - ) - self.set_net_total_in_words() - - def calculate_component_amounts(self, component_type): - if not getattr(self, "_salary_structure_doc", None): - self._salary_structure_doc = frappe.get_doc("Salary Structure", self.salary_structure) - - payroll_period = get_payroll_period(self.start_date, self.end_date, self.company) - - self.add_structure_components(component_type) - self.add_additional_salary_components(component_type) - if component_type == "earnings": - self.add_employee_benefits(payroll_period) - else: - self.add_tax_components(payroll_period) - - def add_structure_components(self, component_type): - data = self.get_data_for_eval() - for struct_row in self._salary_structure_doc.get(component_type): - amount = self.eval_condition_and_formula(struct_row, data) - if amount and struct_row.statistical_component == 0: - self.update_component_row(struct_row, amount, component_type) - - def get_data_for_eval(self): - """Returns data for evaluating formula""" - data = frappe._dict() - employee = frappe.get_doc("Employee", self.employee).as_dict() - - start_date = getdate(self.start_date) - date_to_validate = ( - employee.date_of_joining if employee.date_of_joining > start_date else start_date - ) - - salary_structure_assignment = frappe.get_value( - "Salary Structure Assignment", - { - "employee": self.employee, - "salary_structure": self.salary_structure, - "from_date": ("<=", date_to_validate), - "docstatus": 1, - }, - "*", - order_by="from_date desc", - as_dict=True, - ) - - if not salary_structure_assignment: - frappe.throw( - _( - "Please assign a Salary Structure for Employee {0} " "applicable from or before {1} first" - ).format( - frappe.bold(self.employee_name), - frappe.bold(formatdate(date_to_validate)), - ) - ) - - data.update(salary_structure_assignment) - data.update(employee) - data.update(self.as_dict()) - - # set values for components - salary_components = frappe.get_all("Salary Component", fields=["salary_component_abbr"]) - for sc in salary_components: - data.setdefault(sc.salary_component_abbr, 0) - - for key in ("earnings", "deductions"): - for d in self.get(key): - data[d.abbr] = d.amount - - return data - - def eval_condition_and_formula(self, d, data): - try: - condition = d.condition.strip().replace("\n", " ") if d.condition else None - if condition: - if not frappe.safe_eval(condition, self.whitelisted_globals, data): - return None - amount = d.amount - if d.amount_based_on_formula: - formula = d.formula.strip().replace("\n", " ") if d.formula else None - if formula: - amount = flt(frappe.safe_eval(formula, self.whitelisted_globals, data), d.precision("amount")) - if amount: - data[d.abbr] = amount - - return amount - - except NameError as err: - frappe.throw( - _("{0}
This error can be due to missing or deleted field.").format(err), - title=_("Name error"), - ) - except SyntaxError as err: - frappe.throw(_("Syntax error in formula or condition: {0}").format(err)) - except Exception as e: - frappe.throw(_("Error in formula or condition: {0}").format(e)) - raise - - def add_employee_benefits(self, payroll_period): - for struct_row in self._salary_structure_doc.get("earnings"): - if struct_row.is_flexible_benefit == 1: - if ( - frappe.db.get_value( - "Salary Component", struct_row.salary_component, "pay_against_benefit_claim" - ) - != 1 - ): - benefit_component_amount = get_benefit_component_amount( - self.employee, - self.start_date, - self.end_date, - struct_row.salary_component, - self._salary_structure_doc, - self.payroll_frequency, - payroll_period, - ) - if benefit_component_amount: - self.update_component_row(struct_row, benefit_component_amount, "earnings") - else: - benefit_claim_amount = get_benefit_claim_amount( - self.employee, self.start_date, self.end_date, struct_row.salary_component - ) - if benefit_claim_amount: - self.update_component_row(struct_row, benefit_claim_amount, "earnings") - - self.adjust_benefits_in_last_payroll_period(payroll_period) - - def adjust_benefits_in_last_payroll_period(self, payroll_period): - if payroll_period: - if getdate(payroll_period.end_date) <= getdate(self.end_date): - last_benefits = get_last_payroll_period_benefits( - self.employee, self.start_date, self.end_date, payroll_period, self._salary_structure_doc - ) - if last_benefits: - for last_benefit in last_benefits: - last_benefit = frappe._dict(last_benefit) - amount = last_benefit.amount - self.update_component_row(frappe._dict(last_benefit.struct_row), amount, "earnings") - - def add_additional_salary_components(self, component_type): - additional_salaries = get_additional_salaries( - self.employee, self.start_date, self.end_date, component_type - ) - - for additional_salary in additional_salaries: - self.update_component_row( - get_salary_component_data(additional_salary.component), - additional_salary.amount, - component_type, - additional_salary, - is_recurring=additional_salary.is_recurring, - ) - - def add_tax_components(self, payroll_period): - # Calculate variable_based_on_taxable_salary after all components updated in salary slip - tax_components, other_deduction_components = [], [] - for d in self._salary_structure_doc.get("deductions"): - if d.variable_based_on_taxable_salary == 1 and not d.formula and not flt(d.amount): - tax_components.append(d.salary_component) - else: - other_deduction_components.append(d.salary_component) - - if not tax_components: - tax_components = [ - d.name - for d in frappe.get_all("Salary Component", filters={"variable_based_on_taxable_salary": 1}) - if d.name not in other_deduction_components - ] - - for d in tax_components: - tax_amount = self.calculate_variable_based_on_taxable_salary(d, payroll_period) - tax_row = get_salary_component_data(d) - self.update_component_row(tax_row, tax_amount, "deductions") - - def update_component_row( - self, component_data, amount, component_type, additional_salary=None, is_recurring=0 - ): - component_row = None - for d in self.get(component_type): - if d.salary_component != component_data.salary_component: - continue - - if (not d.additional_salary and (not additional_salary or additional_salary.overwrite)) or ( - additional_salary and additional_salary.name == d.additional_salary - ): - component_row = d - break - - if additional_salary and additional_salary.overwrite: - # Additional Salary with overwrite checked, remove default rows of same component - self.set( - component_type, - [ - d - for d in self.get(component_type) - if d.salary_component != component_data.salary_component - or (d.additional_salary and additional_salary.name != d.additional_salary) - or d == component_row - ], - ) - - if not component_row: - if not amount: - return - - component_row = self.append(component_type) - for attr in ( - "depends_on_payment_days", - "salary_component", - "abbr", - "do_not_include_in_total", - "is_tax_applicable", - "is_flexible_benefit", - "variable_based_on_taxable_salary", - "exempted_from_income_tax", - ): - component_row.set(attr, component_data.get(attr)) - - if additional_salary: - if additional_salary.overwrite: - component_row.additional_amount = flt( - flt(amount) - flt(component_row.get("default_amount", 0)), - component_row.precision("additional_amount"), - ) - else: - component_row.default_amount = 0 - component_row.additional_amount = amount - - component_row.is_recurring_additional_salary = is_recurring - component_row.additional_salary = additional_salary.name - component_row.deduct_full_tax_on_selected_payroll_date = ( - additional_salary.deduct_full_tax_on_selected_payroll_date - ) - else: - component_row.default_amount = amount - component_row.additional_amount = 0 - component_row.deduct_full_tax_on_selected_payroll_date = ( - component_data.deduct_full_tax_on_selected_payroll_date - ) - - component_row.amount = amount - - self.update_component_amount_based_on_payment_days(component_row) - - def update_component_amount_based_on_payment_days(self, component_row): - joining_date, relieving_date = self.get_joining_and_relieving_dates() - component_row.amount = self.get_amount_based_on_payment_days( - component_row, joining_date, relieving_date - )[0] - - def set_precision_for_component_amounts(self): - for component_type in ("earnings", "deductions"): - for component_row in self.get(component_type): - component_row.amount = flt(component_row.amount, component_row.precision("amount")) - - def calculate_variable_based_on_taxable_salary(self, tax_component, payroll_period): - if not payroll_period: - frappe.msgprint( - _("Start and end dates not in a valid Payroll Period, cannot calculate {0}.").format( - tax_component - ) - ) - return - - # Deduct taxes forcefully for unsubmitted tax exemption proof and unclaimed benefits in the last period - if payroll_period.end_date <= getdate(self.end_date): - self.deduct_tax_for_unsubmitted_tax_exemption_proof = 1 - self.deduct_tax_for_unclaimed_employee_benefits = 1 - - return self.calculate_variable_tax(payroll_period, tax_component) - - def calculate_variable_tax(self, payroll_period, tax_component): - # get Tax slab from salary structure assignment for the employee and payroll period - tax_slab = self.get_income_tax_slabs(payroll_period) - - # get remaining numbers of sub-period (period for which one salary is processed) - remaining_sub_periods = get_period_factor( - self.employee, self.start_date, self.end_date, self.payroll_frequency, payroll_period - )[1] - # get taxable_earnings, paid_taxes for previous period - previous_taxable_earnings = self.get_taxable_earnings_for_prev_period( - payroll_period.start_date, self.start_date, tax_slab.allow_tax_exemption - ) - previous_total_paid_taxes = self.get_tax_paid_in_period( - payroll_period.start_date, self.start_date, tax_component - ) - - # get taxable_earnings for current period (all days) - current_taxable_earnings = self.get_taxable_earnings( - tax_slab.allow_tax_exemption, payroll_period=payroll_period - ) - future_structured_taxable_earnings = current_taxable_earnings.taxable_earnings * ( - math.ceil(remaining_sub_periods) - 1 - ) - - # get taxable_earnings, addition_earnings for current actual payment days - current_taxable_earnings_for_payment_days = self.get_taxable_earnings( - tax_slab.allow_tax_exemption, based_on_payment_days=1, payroll_period=payroll_period - ) - current_structured_taxable_earnings = current_taxable_earnings_for_payment_days.taxable_earnings - current_additional_earnings = current_taxable_earnings_for_payment_days.additional_income - current_additional_earnings_with_full_tax = ( - current_taxable_earnings_for_payment_days.additional_income_with_full_tax - ) - - # Get taxable unclaimed benefits - unclaimed_taxable_benefits = 0 - if self.deduct_tax_for_unclaimed_employee_benefits: - unclaimed_taxable_benefits = self.calculate_unclaimed_taxable_benefits(payroll_period) - unclaimed_taxable_benefits += current_taxable_earnings_for_payment_days.flexi_benefits - - # Total exemption amount based on tax exemption declaration - total_exemption_amount = self.get_total_exemption_amount(payroll_period, tax_slab) - - # Employee Other Incomes - other_incomes = self.get_income_form_other_sources(payroll_period) or 0.0 - - # Total taxable earnings including additional and other incomes - total_taxable_earnings = ( - previous_taxable_earnings - + current_structured_taxable_earnings - + future_structured_taxable_earnings - + current_additional_earnings - + other_incomes - + unclaimed_taxable_benefits - - total_exemption_amount - ) - - # Total taxable earnings without additional earnings with full tax - total_taxable_earnings_without_full_tax_addl_components = ( - total_taxable_earnings - current_additional_earnings_with_full_tax - ) - - # Structured tax amount - eval_locals = self.get_data_for_eval() - total_structured_tax_amount = calculate_tax_by_tax_slab( - total_taxable_earnings_without_full_tax_addl_components, - tax_slab, - self.whitelisted_globals, - eval_locals, - ) - current_structured_tax_amount = ( - total_structured_tax_amount - previous_total_paid_taxes - ) / remaining_sub_periods - - # Total taxable earnings with additional earnings with full tax - full_tax_on_additional_earnings = 0.0 - if current_additional_earnings_with_full_tax: - total_tax_amount = calculate_tax_by_tax_slab( - total_taxable_earnings, tax_slab, self.whitelisted_globals, eval_locals - ) - full_tax_on_additional_earnings = total_tax_amount - total_structured_tax_amount - - current_tax_amount = current_structured_tax_amount + full_tax_on_additional_earnings - if flt(current_tax_amount) < 0: - current_tax_amount = 0 - - return current_tax_amount - - def get_income_tax_slabs(self, payroll_period): - income_tax_slab, ss_assignment_name = frappe.db.get_value( - "Salary Structure Assignment", - {"employee": self.employee, "salary_structure": self.salary_structure, "docstatus": 1}, - ["income_tax_slab", "name"], - ) - - if not income_tax_slab: - frappe.throw( - _("Income Tax Slab not set in Salary Structure Assignment: {0}").format(ss_assignment_name) - ) - - income_tax_slab_doc = frappe.get_doc("Income Tax Slab", income_tax_slab) - if income_tax_slab_doc.disabled: - frappe.throw(_("Income Tax Slab: {0} is disabled").format(income_tax_slab)) - - if getdate(income_tax_slab_doc.effective_from) > getdate(payroll_period.start_date): - frappe.throw( - _("Income Tax Slab must be effective on or before Payroll Period Start Date: {0}").format( - payroll_period.start_date - ) - ) - - return income_tax_slab_doc - - def get_taxable_earnings_for_prev_period(self, start_date, end_date, allow_tax_exemption=False): - taxable_earnings = frappe.db.sql( - """ - select sum(sd.amount) - from - `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name - where - sd.parentfield='earnings' - and sd.is_tax_applicable=1 - and is_flexible_benefit=0 - and ss.docstatus=1 - and ss.employee=%(employee)s - and ss.start_date between %(from_date)s and %(to_date)s - and ss.end_date between %(from_date)s and %(to_date)s - """, - {"employee": self.employee, "from_date": start_date, "to_date": end_date}, - ) - taxable_earnings = flt(taxable_earnings[0][0]) if taxable_earnings else 0 - - exempted_amount = 0 - if allow_tax_exemption: - exempted_amount = frappe.db.sql( - """ - select sum(sd.amount) - from - `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name - where - sd.parentfield='deductions' - and sd.exempted_from_income_tax=1 - and is_flexible_benefit=0 - and ss.docstatus=1 - and ss.employee=%(employee)s - and ss.start_date between %(from_date)s and %(to_date)s - and ss.end_date between %(from_date)s and %(to_date)s - """, - {"employee": self.employee, "from_date": start_date, "to_date": end_date}, - ) - exempted_amount = flt(exempted_amount[0][0]) if exempted_amount else 0 - - return taxable_earnings - exempted_amount - - def get_tax_paid_in_period(self, start_date, end_date, tax_component): - # find total_tax_paid, tax paid for benefit, additional_salary - total_tax_paid = flt( - frappe.db.sql( - """ - select - sum(sd.amount) - from - `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name - where - sd.parentfield='deductions' - and sd.salary_component=%(salary_component)s - and sd.variable_based_on_taxable_salary=1 - and ss.docstatus=1 - and ss.employee=%(employee)s - and ss.start_date between %(from_date)s and %(to_date)s - and ss.end_date between %(from_date)s and %(to_date)s - """, - { - "salary_component": tax_component, - "employee": self.employee, - "from_date": start_date, - "to_date": end_date, - }, - )[0][0] - ) - - return total_tax_paid - - def get_taxable_earnings( - self, allow_tax_exemption=False, based_on_payment_days=0, payroll_period=None - ): - joining_date, relieving_date = self.get_joining_and_relieving_dates() - - taxable_earnings = 0 - additional_income = 0 - additional_income_with_full_tax = 0 - flexi_benefits = 0 - - for earning in self.earnings: - if based_on_payment_days: - amount, additional_amount = self.get_amount_based_on_payment_days( - earning, joining_date, relieving_date - ) - else: - if earning.additional_amount: - amount, additional_amount = earning.amount, earning.additional_amount - else: - amount, additional_amount = earning.default_amount, earning.additional_amount - - if earning.is_tax_applicable: - if earning.is_flexible_benefit: - flexi_benefits += amount - else: - taxable_earnings += amount - additional_amount - additional_income += additional_amount - - # Get additional amount based on future recurring additional salary - if additional_amount and earning.is_recurring_additional_salary: - additional_income += self.get_future_recurring_additional_amount( - earning.additional_salary, earning.additional_amount, payroll_period - ) # Used earning.additional_amount to consider the amount for the full month - - if earning.deduct_full_tax_on_selected_payroll_date: - additional_income_with_full_tax += additional_amount - - if allow_tax_exemption: - for ded in self.deductions: - if ded.exempted_from_income_tax: - amount, additional_amount = ded.amount, ded.additional_amount - if based_on_payment_days: - amount, additional_amount = self.get_amount_based_on_payment_days( - ded, joining_date, relieving_date - ) - - taxable_earnings -= flt(amount - additional_amount) - additional_income -= additional_amount - - if additional_amount and ded.is_recurring_additional_salary: - additional_income -= self.get_future_recurring_additional_amount( - ded.additional_salary, ded.additional_amount, payroll_period - ) # Used ded.additional_amount to consider the amount for the full month - - return frappe._dict( - { - "taxable_earnings": taxable_earnings, - "additional_income": additional_income, - "additional_income_with_full_tax": additional_income_with_full_tax, - "flexi_benefits": flexi_benefits, - } - ) - - def get_future_recurring_additional_amount( - self, additional_salary, monthly_additional_amount, payroll_period - ): - future_recurring_additional_amount = 0 - to_date = frappe.db.get_value("Additional Salary", additional_salary, "to_date") - - # future month count excluding current - from_date, to_date = getdate(self.start_date), getdate(to_date) - - # If recurring period end date is beyond the payroll period, - # last day of payroll period should be considered for recurring period calculation - if getdate(to_date) > getdate(payroll_period.end_date): - to_date = getdate(payroll_period.end_date) - - future_recurring_period = ((to_date.year - from_date.year) * 12) + ( - to_date.month - from_date.month - ) - - if future_recurring_period > 0: - future_recurring_additional_amount = ( - monthly_additional_amount * future_recurring_period - ) # Used earning.additional_amount to consider the amount for the full month - return future_recurring_additional_amount - - def get_amount_based_on_payment_days(self, row, joining_date, relieving_date): - amount, additional_amount = row.amount, row.additional_amount - timesheet_component = frappe.db.get_value( - "Salary Structure", self.salary_structure, "salary_component" - ) - - if ( - self.salary_structure - and cint(row.depends_on_payment_days) - and cint(self.total_working_days) - and not ( - row.additional_salary and row.default_amount - ) # to identify overwritten additional salary - and ( - row.salary_component != timesheet_component - or getdate(self.start_date) < joining_date - or (relieving_date and getdate(self.end_date) > relieving_date) - ) - ): - additional_amount = flt( - (flt(row.additional_amount) * flt(self.payment_days) / cint(self.total_working_days)), - row.precision("additional_amount"), - ) - amount = ( - flt( - (flt(row.default_amount) * flt(self.payment_days) / cint(self.total_working_days)), - row.precision("amount"), - ) - + additional_amount - ) - - elif ( - not self.payment_days - and row.salary_component != timesheet_component - and cint(row.depends_on_payment_days) - ): - amount, additional_amount = 0, 0 - elif not row.amount: - amount = flt(row.default_amount) + flt(row.additional_amount) - - # apply rounding - if frappe.get_cached_value( - "Salary Component", row.salary_component, "round_to_the_nearest_integer" - ): - amount, additional_amount = rounded(amount or 0), rounded(additional_amount or 0) - - return amount, additional_amount - - def calculate_unclaimed_taxable_benefits(self, payroll_period): - # get total sum of benefits paid - total_benefits_paid = flt( - frappe.db.sql( - """ - select sum(sd.amount) - from `tabSalary Detail` sd join `tabSalary Slip` ss on sd.parent=ss.name - where - sd.parentfield='earnings' - and sd.is_tax_applicable=1 - and is_flexible_benefit=1 - and ss.docstatus=1 - and ss.employee=%(employee)s - and ss.start_date between %(start_date)s and %(end_date)s - and ss.end_date between %(start_date)s and %(end_date)s - """, - { - "employee": self.employee, - "start_date": payroll_period.start_date, - "end_date": self.start_date, - }, - )[0][0] - ) - - # get total benefits claimed - total_benefits_claimed = flt( - frappe.db.sql( - """ - select sum(claimed_amount) - from `tabEmployee Benefit Claim` - where - docstatus=1 - and employee=%s - and claim_date between %s and %s - """, - (self.employee, payroll_period.start_date, self.end_date), - )[0][0] - ) - - return total_benefits_paid - total_benefits_claimed - - def get_total_exemption_amount(self, payroll_period, tax_slab): - total_exemption_amount = 0 - if tax_slab.allow_tax_exemption: - if self.deduct_tax_for_unsubmitted_tax_exemption_proof: - exemption_proof = frappe.db.get_value( - "Employee Tax Exemption Proof Submission", - {"employee": self.employee, "payroll_period": payroll_period.name, "docstatus": 1}, - ["exemption_amount"], - ) - if exemption_proof: - total_exemption_amount = exemption_proof - else: - declaration = frappe.db.get_value( - "Employee Tax Exemption Declaration", - {"employee": self.employee, "payroll_period": payroll_period.name, "docstatus": 1}, - ["total_exemption_amount"], - ) - if declaration: - total_exemption_amount = declaration - - total_exemption_amount += flt(tax_slab.standard_tax_exemption_amount) - - return total_exemption_amount - - def get_income_form_other_sources(self, payroll_period): - return frappe.get_all( - "Employee Other Income", - filters={ - "employee": self.employee, - "payroll_period": payroll_period.name, - "company": self.company, - "docstatus": 1, - }, - fields="SUM(amount) as total_amount", - )[0].total_amount - - def get_component_totals(self, component_type, depends_on_payment_days=0): - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - - total = 0.0 - for d in self.get(component_type): - if not d.do_not_include_in_total: - if depends_on_payment_days: - amount = self.get_amount_based_on_payment_days(d, joining_date, relieving_date)[0] - else: - amount = flt(d.amount, d.precision("amount")) - total += amount - return total - - def get_joining_and_relieving_dates(self): - joining_date, relieving_date = frappe.get_cached_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - - if not relieving_date: - relieving_date = getdate(self.end_date) - - if not joining_date: - frappe.throw( - _("Please set the Date Of Joining for employee {0}").format(frappe.bold(self.employee_name)) - ) - - return joining_date, relieving_date - - def set_loan_repayment(self): - self.total_loan_repayment = 0 - self.total_interest_amount = 0 - self.total_principal_amount = 0 - - if not self.get("loans"): - for loan in self.get_loan_details(): - - amounts = calculate_amounts(loan.name, self.posting_date, "Regular Payment") - - if amounts["interest_amount"] or amounts["payable_principal_amount"]: - self.append( - "loans", - { - "loan": loan.name, - "total_payment": amounts["interest_amount"] + amounts["payable_principal_amount"], - "interest_amount": amounts["interest_amount"], - "principal_amount": amounts["payable_principal_amount"], - "loan_account": loan.loan_account, - "interest_income_account": loan.interest_income_account, - }, - ) - - for payment in self.get("loans"): - amounts = calculate_amounts(payment.loan, self.posting_date, "Regular Payment") - total_amount = amounts["interest_amount"] + amounts["payable_principal_amount"] - if payment.total_payment > total_amount: - frappe.throw( - _( - """Row {0}: Paid amount {1} is greater than pending accrued amount {2} against loan {3}""" - ).format( - payment.idx, - frappe.bold(payment.total_payment), - frappe.bold(total_amount), - frappe.bold(payment.loan), - ) - ) - - self.total_interest_amount += payment.interest_amount - self.total_principal_amount += payment.principal_amount - - self.total_loan_repayment += payment.total_payment - - def get_loan_details(self): - return frappe.get_all( - "Loan", - fields=["name", "interest_income_account", "loan_account", "loan_type"], - filters={ - "applicant": self.employee, - "docstatus": 1, - "repay_from_salary": 1, - "company": self.company, - }, - ) - - def make_loan_repayment_entry(self): - payroll_payable_account = get_payroll_payable_account(self.company, self.payroll_entry) - for loan in self.loans: - if loan.total_payment: - repayment_entry = create_repayment_entry( - loan.loan, - self.employee, - self.company, - self.posting_date, - loan.loan_type, - "Regular Payment", - loan.interest_amount, - loan.principal_amount, - loan.total_payment, - payroll_payable_account=payroll_payable_account, - ) - - repayment_entry.save() - repayment_entry.submit() - - frappe.db.set_value( - "Salary Slip Loan", loan.name, "loan_repayment_entry", repayment_entry.name - ) - - def cancel_loan_repayment_entry(self): - for loan in self.loans: - if loan.loan_repayment_entry: - repayment_entry = frappe.get_doc("Loan Repayment", loan.loan_repayment_entry) - repayment_entry.cancel() - - def email_salary_slip(self): - receiver = frappe.db.get_value("Employee", self.employee, "prefered_email") - payroll_settings = frappe.get_single("Payroll Settings") - message = "Please see attachment" - password = None - if payroll_settings.encrypt_salary_slips_in_emails: - password = generate_password_for_pdf(payroll_settings.password_policy, self.employee) - message += """
Note: Your salary slip is password protected, - the password to unlock the PDF is of the format {0}. """.format( - payroll_settings.password_policy - ) - - if receiver: - email_args = { - "recipients": [receiver], - "message": _(message), - "subject": "Salary Slip - from {0} to {1}".format(self.start_date, self.end_date), - "attachments": [ - frappe.attach_print(self.doctype, self.name, file_name=self.name, password=password) - ], - "reference_doctype": self.doctype, - "reference_name": self.name, - } - if not frappe.flags.in_test: - enqueue(method=frappe.sendmail, queue="short", timeout=300, is_async=True, **email_args) - else: - frappe.sendmail(**email_args) - else: - msgprint(_("{0}: Employee email not found, hence email not sent").format(self.employee_name)) - - def update_status(self, salary_slip=None): - for data in self.timesheets: - if data.time_sheet: - timesheet = frappe.get_doc("Timesheet", data.time_sheet) - timesheet.salary_slip = salary_slip - timesheet.flags.ignore_validate_update_after_submit = True - timesheet.set_status() - timesheet.save() - - def set_status(self, status=None): - """Get and update status""" - if not status: - status = self.get_status() - self.db_set("status", status) - - def process_salary_structure(self, for_preview=0): - """Calculate salary after salary structure details have been updated""" - if not self.salary_slip_based_on_timesheet: - self.get_date_details() - self.pull_emp_details() - self.get_working_days_details(for_preview=for_preview) - self.calculate_net_pay() - - def pull_emp_details(self): - emp = frappe.db.get_value( - "Employee", self.employee, ["bank_name", "bank_ac_no", "salary_mode"], as_dict=1 - ) - if emp: - self.mode_of_payment = emp.salary_mode - self.bank_name = emp.bank_name - self.bank_account_no = emp.bank_ac_no - - @frappe.whitelist() - def process_salary_based_on_working_days(self): - self.get_working_days_details(lwp=self.leave_without_pay) - self.calculate_net_pay() - - @frappe.whitelist() - def set_totals(self): - self.gross_pay = 0.0 - if self.salary_slip_based_on_timesheet == 1: - self.calculate_total_for_salary_slip_based_on_timesheet() - else: - self.total_deduction = 0.0 - if hasattr(self, "earnings"): - for earning in self.earnings: - self.gross_pay += flt(earning.amount, earning.precision("amount")) - if hasattr(self, "deductions"): - for deduction in self.deductions: - self.total_deduction += flt(deduction.amount, deduction.precision("amount")) - self.net_pay = flt(self.gross_pay) - flt(self.total_deduction) - flt(self.total_loan_repayment) - self.set_base_totals() - - def set_base_totals(self): - self.base_gross_pay = flt(self.gross_pay) * flt(self.exchange_rate) - self.base_total_deduction = flt(self.total_deduction) * flt(self.exchange_rate) - self.rounded_total = rounded(self.net_pay or 0) - self.base_net_pay = flt(self.net_pay) * flt(self.exchange_rate) - self.base_rounded_total = rounded(self.base_net_pay or 0) - self.set_net_total_in_words() - - # calculate total working hours, earnings based on hourly wages and totals - def calculate_total_for_salary_slip_based_on_timesheet(self): - if self.timesheets: - self.total_working_hours = 0 - for timesheet in self.timesheets: - if timesheet.working_hours: - self.total_working_hours += timesheet.working_hours - - wages_amount = self.total_working_hours * self.hour_rate - self.base_hour_rate = flt(self.hour_rate) * flt(self.exchange_rate) - salary_component = frappe.db.get_value( - "Salary Structure", {"name": self.salary_structure}, "salary_component" - ) - if self.earnings: - for i, earning in enumerate(self.earnings): - if earning.salary_component == salary_component: - self.earnings[i].amount = wages_amount - self.gross_pay += flt(self.earnings[i].amount, earning.precision("amount")) - self.net_pay = flt(self.gross_pay) - flt(self.total_deduction) - - def compute_year_to_date(self): - year_to_date = 0 - period_start_date, period_end_date = self.get_year_to_date_period() - - salary_slip_sum = frappe.get_list( - "Salary Slip", - fields=["sum(net_pay) as net_sum", "sum(gross_pay) as gross_sum"], - filters={ - "employee": self.employee, - "start_date": [">=", period_start_date], - "end_date": ["<", period_end_date], - "name": ["!=", self.name], - "docstatus": 1, - }, - ) - - year_to_date = flt(salary_slip_sum[0].net_sum) if salary_slip_sum else 0.0 - gross_year_to_date = flt(salary_slip_sum[0].gross_sum) if salary_slip_sum else 0.0 - - year_to_date += self.net_pay - gross_year_to_date += self.gross_pay - self.year_to_date = year_to_date - self.gross_year_to_date = gross_year_to_date - - def compute_month_to_date(self): - month_to_date = 0 - first_day_of_the_month = get_first_day(self.start_date) - salary_slip_sum = frappe.get_list( - "Salary Slip", - fields=["sum(net_pay) as sum"], - filters={ - "employee": self.employee, - "start_date": [">=", first_day_of_the_month], - "end_date": ["<", self.start_date], - "name": ["!=", self.name], - "docstatus": 1, - }, - ) - - month_to_date = flt(salary_slip_sum[0].sum) if salary_slip_sum else 0.0 - - month_to_date += self.net_pay - self.month_to_date = month_to_date - - def compute_component_wise_year_to_date(self): - period_start_date, period_end_date = self.get_year_to_date_period() - - for key in ("earnings", "deductions"): - for component in self.get(key): - year_to_date = 0 - component_sum = frappe.db.sql( - """ - SELECT sum(detail.amount) as sum - FROM `tabSalary Detail` as detail - INNER JOIN `tabSalary Slip` as salary_slip - ON detail.parent = salary_slip.name - WHERE - salary_slip.employee = %(employee)s - AND detail.salary_component = %(component)s - AND salary_slip.start_date >= %(period_start_date)s - AND salary_slip.end_date < %(period_end_date)s - AND salary_slip.name != %(docname)s - AND salary_slip.docstatus = 1""", - { - "employee": self.employee, - "component": component.salary_component, - "period_start_date": period_start_date, - "period_end_date": period_end_date, - "docname": self.name, - }, - ) - - year_to_date = flt(component_sum[0][0]) if component_sum else 0.0 - year_to_date += component.amount - component.year_to_date = year_to_date - - def get_year_to_date_period(self): - payroll_period = get_payroll_period(self.start_date, self.end_date, self.company) - - if payroll_period: - period_start_date = payroll_period.start_date - period_end_date = payroll_period.end_date - else: - # get dates based on fiscal year if no payroll period exists - fiscal_year = get_fiscal_year(date=self.start_date, company=self.company, as_dict=1) - period_start_date = fiscal_year.year_start_date - period_end_date = fiscal_year.year_end_date - - return period_start_date, period_end_date - - def add_leave_balances(self): - self.set("leave_details", []) - - if frappe.db.get_single_value("Payroll Settings", "show_leave_balances_in_salary_slip"): - from erpnext.hr.doctype.leave_application.leave_application import get_leave_details - - leave_details = get_leave_details(self.employee, self.end_date) - - for leave_type, leave_values in leave_details["leave_allocation"].items(): - self.append( - "leave_details", - { - "leave_type": leave_type, - "total_allocated_leaves": flt(leave_values.get("total_leaves")), - "expired_leaves": flt(leave_values.get("expired_leaves")), - "used_leaves": flt(leave_values.get("leaves_taken")), - "pending_leaves": flt(leave_values.get("leaves_pending_approval")), - "available_leaves": flt(leave_values.get("remaining_leaves")), - }, - ) - - -def unlink_ref_doc_from_salary_slip(ref_no): - linked_ss = frappe.db.sql_list( - """select name from `tabSalary Slip` - where journal_entry=%s and docstatus < 2""", - (ref_no), - ) - if linked_ss: - for ss in linked_ss: - ss_doc = frappe.get_doc("Salary Slip", ss) - frappe.db.set_value("Salary Slip", ss_doc.name, "journal_entry", "") - - -def generate_password_for_pdf(policy_template, employee): - employee = frappe.get_doc("Employee", employee) - return policy_template.format(**employee.as_dict()) - - -def get_salary_component_data(component): - return frappe.get_value( - "Salary Component", - component, - [ - "name as salary_component", - "depends_on_payment_days", - "salary_component_abbr as abbr", - "do_not_include_in_total", - "is_tax_applicable", - "is_flexible_benefit", - "variable_based_on_taxable_salary", - ], - as_dict=1, - ) - - -def get_payroll_payable_account(company, payroll_entry): - if payroll_entry: - payroll_payable_account = frappe.db.get_value( - "Payroll Entry", payroll_entry, "payroll_payable_account" - ) - else: - payroll_payable_account = frappe.db.get_value( - "Company", company, "default_payroll_payable_account" - ) - - return payroll_payable_account - - -def calculate_tax_by_tax_slab( - annual_taxable_earning, tax_slab, eval_globals=None, eval_locals=None -): - eval_locals.update({"annual_taxable_earning": annual_taxable_earning}) - tax_amount = 0 - for slab in tax_slab.slabs: - cond = cstr(slab.condition).strip() - if cond and not eval_tax_slab_condition(cond, eval_globals, eval_locals): - continue - if not slab.to_amount and annual_taxable_earning >= slab.from_amount: - tax_amount += (annual_taxable_earning - slab.from_amount + 1) * slab.percent_deduction * 0.01 - continue - if annual_taxable_earning >= slab.from_amount and annual_taxable_earning < slab.to_amount: - tax_amount += (annual_taxable_earning - slab.from_amount + 1) * slab.percent_deduction * 0.01 - elif annual_taxable_earning >= slab.from_amount and annual_taxable_earning >= slab.to_amount: - tax_amount += (slab.to_amount - slab.from_amount + 1) * slab.percent_deduction * 0.01 - - # other taxes and charges on income tax - for d in tax_slab.other_taxes_and_charges: - if flt(d.min_taxable_income) and flt(d.min_taxable_income) > annual_taxable_earning: - continue - - if flt(d.max_taxable_income) and flt(d.max_taxable_income) < annual_taxable_earning: - continue - - tax_amount += tax_amount * flt(d.percent) / 100 - - return tax_amount - - -def eval_tax_slab_condition(condition, eval_globals=None, eval_locals=None): - if not eval_globals: - eval_globals = { - "int": int, - "float": float, - "long": int, - "round": round, - "date": datetime.date, - "getdate": getdate, - } - - try: - condition = condition.strip() - if condition: - return frappe.safe_eval(condition, eval_globals, eval_locals) - except NameError as err: - frappe.throw( - _("{0}
This error can be due to missing or deleted field.").format(err), - title=_("Name error"), - ) - except SyntaxError as err: - frappe.throw(_("Syntax error in condition: {0} in Income Tax Slab").format(err)) - except Exception as e: - frappe.throw(_("Error in formula or condition: {0} in Income Tax Slab").format(e)) - raise diff --git a/erpnext/payroll/doctype/salary_slip/salary_slip_list.js b/erpnext/payroll/doctype/salary_slip/salary_slip_list.js deleted file mode 100644 index 33d5bd786f..0000000000 --- a/erpnext/payroll/doctype/salary_slip/salary_slip_list.js +++ /dev/null @@ -1,3 +0,0 @@ -frappe.listview_settings['Salary Slip'] = { - add_fields: ["employee", "employee_name"], -}; diff --git a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py b/erpnext/payroll/doctype/salary_slip/test_salary_slip.py deleted file mode 100644 index 1bc3741922..0000000000 --- a/erpnext/payroll/doctype/salary_slip/test_salary_slip.py +++ /dev/null @@ -1,1550 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - -import calendar -import random -import unittest - -import frappe -from frappe.model.document import Document -from frappe.tests.utils import change_settings -from frappe.utils import ( - add_days, - add_months, - cstr, - date_diff, - flt, - get_first_day, - get_last_day, - getdate, - nowdate, -) -from frappe.utils.make_random import get_random - -import erpnext -from erpnext.accounts.utils import get_fiscal_year -from erpnext.hr.doctype.attendance.attendance import mark_attendance -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation -from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type -from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import ( - create_exemption_category, - create_payroll_period, -) -from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_month_details -from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip - - -class TestSalarySlip(unittest.TestCase): - def setUp(self): - setup_test() - frappe.flags.pop("via_payroll_entry", None) - - def tearDown(self): - frappe.db.rollback() - frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 0) - frappe.set_user("Administrator") - - @change_settings( - "Payroll Settings", {"payroll_based_on": "Attendance", "daily_wages_fraction_for_half_day": 0.75} - ) - def test_payment_days_based_on_attendance(self): - no_of_days = self.get_no_of_days() - - emp_id = make_employee("test_payment_days_based_on_attendance@salary.com") - frappe.db.set_value("Employee", emp_id, {"relieving_date": None, "status": "Active"}) - - frappe.db.set_value("Leave Type", "Leave Without Pay", "include_holiday", 0) - - month_start_date = get_first_day(nowdate()) - month_end_date = get_last_day(nowdate()) - - first_sunday = frappe.db.sql( - """ - select holiday_date from `tabHoliday` - where parent = 'Salary Slip Test Holiday List' - and holiday_date between %s and %s - order by holiday_date - """, - (month_start_date, month_end_date), - )[0][0] - - mark_attendance(emp_id, first_sunday, "Absent", ignore_validate=True) # invalid lwp - mark_attendance( - emp_id, add_days(first_sunday, 1), "Absent", ignore_validate=True - ) # counted as absent - mark_attendance( - emp_id, - add_days(first_sunday, 2), - "Half Day", - leave_type="Leave Without Pay", - ignore_validate=True, - ) # valid 0.75 lwp - mark_attendance( - emp_id, - add_days(first_sunday, 3), - "On Leave", - leave_type="Leave Without Pay", - ignore_validate=True, - ) # valid lwp - mark_attendance( - emp_id, add_days(first_sunday, 4), "On Leave", leave_type="Casual Leave", ignore_validate=True - ) # invalid lwp - mark_attendance( - emp_id, - add_days(first_sunday, 7), - "On Leave", - leave_type="Leave Without Pay", - ignore_validate=True, - ) # invalid lwp - - ss = make_employee_salary_slip( - "test_payment_days_based_on_attendance@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - - self.assertEqual(ss.leave_without_pay, 1.25) - self.assertEqual(ss.absent_days, 1) - - days_in_month = no_of_days[0] - no_of_holidays = no_of_days[1] - - self.assertEqual(ss.payment_days, days_in_month - no_of_holidays - 2.25) - - # Gross pay calculation based on attendances - gross_pay = 78000 - ( - (78000 / (days_in_month - no_of_holidays)) * flt(ss.leave_without_pay + ss.absent_days) - ) - - self.assertEqual(ss.gross_pay, gross_pay) - - @change_settings( - "Payroll Settings", - { - "payroll_based_on": "Attendance", - "consider_unmarked_attendance_as": "Absent", - "include_holidays_in_total_working_days": True, - }, - ) - def test_payment_days_for_mid_joinee_including_holidays(self): - no_of_days = self.get_no_of_days() - month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate()) - - new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com") - joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5) - - for days in range(date_diff(month_end_date, month_start_date) + 1): - date = add_days(month_start_date, days) - mark_attendance(new_emp_id, date, "Present", ignore_validate=True) - - # Case 1: relieving in mid month - frappe.db.set_value( - "Employee", - new_emp_id, - {"date_of_joining": month_start_date, "relieving_date": relieving_date, "status": "Active"}, - ) - - new_ss = make_employee_salary_slip( - "test_payment_days_based_on_joining_date@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - self.assertEqual(new_ss.payment_days, no_of_days[0] - 5) - - # Case 2: joining in mid month - frappe.db.set_value( - "Employee", - new_emp_id, - {"date_of_joining": joining_date, "relieving_date": month_end_date, "status": "Active"}, - ) - - frappe.delete_doc("Salary Slip", new_ss.name, force=True) - new_ss = make_employee_salary_slip( - "test_payment_days_based_on_joining_date@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - self.assertEqual(new_ss.payment_days, no_of_days[0] - 3) - - # Case 3: joining and relieving in mid-month - frappe.db.set_value( - "Employee", - new_emp_id, - {"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"}, - ) - - frappe.delete_doc("Salary Slip", new_ss.name, force=True) - new_ss = make_employee_salary_slip( - "test_payment_days_based_on_joining_date@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - - self.assertEqual(new_ss.total_working_days, no_of_days[0]) - self.assertEqual(new_ss.payment_days, no_of_days[0] - 8) - - @change_settings( - "Payroll Settings", - { - "payroll_based_on": "Attendance", - "consider_unmarked_attendance_as": "Absent", - "include_holidays_in_total_working_days": True, - }, - ) - def test_payment_days_for_mid_joinee_including_holidays_and_unmarked_days(self): - # tests mid month joining and relieving along with unmarked days - from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday - - no_of_days = self.get_no_of_days() - month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate()) - - new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com") - joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5) - holidays = 0 - - for days in range(date_diff(relieving_date, joining_date) + 1): - date = add_days(joining_date, days) - if not is_holiday("Salary Slip Test Holiday List", date): - mark_attendance(new_emp_id, date, "Present", ignore_validate=True) - else: - holidays += 1 - - frappe.db.set_value( - "Employee", - new_emp_id, - {"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"}, - ) - - new_ss = make_employee_salary_slip( - "test_payment_days_based_on_joining_date@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - - self.assertEqual(new_ss.total_working_days, no_of_days[0]) - self.assertEqual(new_ss.payment_days, no_of_days[0] - holidays - 8) - - @change_settings( - "Payroll Settings", - { - "payroll_based_on": "Attendance", - "consider_unmarked_attendance_as": "Absent", - "include_holidays_in_total_working_days": False, - }, - ) - def test_payment_days_for_mid_joinee_excluding_holidays(self): - from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday - - no_of_days = self.get_no_of_days() - month_start_date, month_end_date = get_first_day(nowdate()), get_last_day(nowdate()) - - new_emp_id = make_employee("test_payment_days_based_on_joining_date@salary.com") - joining_date, relieving_date = add_days(month_start_date, 3), add_days(month_end_date, -5) - frappe.db.set_value( - "Employee", - new_emp_id, - {"date_of_joining": joining_date, "relieving_date": relieving_date, "status": "Left"}, - ) - - holidays = 0 - - for days in range(date_diff(relieving_date, joining_date) + 1): - date = add_days(joining_date, days) - if not is_holiday("Salary Slip Test Holiday List", date): - mark_attendance(new_emp_id, date, "Present", ignore_validate=True) - else: - holidays += 1 - - new_ss = make_employee_salary_slip( - "test_payment_days_based_on_joining_date@salary.com", - "Monthly", - "Test Payment Based On Attendence", - ) - - self.assertEqual(new_ss.total_working_days, no_of_days[0] - no_of_days[1]) - self.assertEqual(new_ss.payment_days, no_of_days[0] - holidays - 8) - - @change_settings("Payroll Settings", {"payroll_based_on": "Leave"}) - def test_payment_days_based_on_leave_application(self): - no_of_days = self.get_no_of_days() - - emp_id = make_employee("test_payment_days_based_on_leave_application@salary.com") - frappe.db.set_value("Employee", emp_id, {"relieving_date": None, "status": "Active"}) - - frappe.db.set_value("Leave Type", "Leave Without Pay", "include_holiday", 0) - - month_start_date = get_first_day(nowdate()) - month_end_date = get_last_day(nowdate()) - - first_sunday = frappe.db.sql( - """ - select holiday_date from `tabHoliday` - where parent = 'Salary Slip Test Holiday List' - and holiday_date between %s and %s - order by holiday_date - """, - (month_start_date, month_end_date), - )[0][0] - - make_leave_application(emp_id, first_sunday, add_days(first_sunday, 3), "Leave Without Pay") - - leave_type_ppl = create_leave_type(leave_type_name="Test Partially Paid Leave", is_ppl=1) - leave_type_ppl.save() - - alloc = create_leave_allocation( - employee=emp_id, - from_date=add_days(first_sunday, 4), - to_date=add_days(first_sunday, 10), - new_leaves_allocated=3, - leave_type="Test Partially Paid Leave", - ) - alloc.save() - alloc.submit() - - # two day leave ppl with fraction_of_daily_salary_per_leave = 0.5 equivalent to single day lwp - make_leave_application( - emp_id, add_days(first_sunday, 4), add_days(first_sunday, 5), "Test Partially Paid Leave" - ) - - ss = make_employee_salary_slip( - "test_payment_days_based_on_leave_application@salary.com", - "Monthly", - "Test Payment Based On Leave Application", - ) - - self.assertEqual(ss.leave_without_pay, 4) - - days_in_month = no_of_days[0] - no_of_holidays = no_of_days[1] - - self.assertEqual(ss.payment_days, days_in_month - no_of_holidays - 4) - - @change_settings("Payroll Settings", {"payroll_based_on": "Attendance"}) - def test_payment_days_in_salary_slip_based_on_timesheet(self): - from erpnext.hr.doctype.attendance.attendance import mark_attendance - from erpnext.projects.doctype.timesheet.test_timesheet import ( - make_salary_structure_for_timesheet, - make_timesheet, - ) - from erpnext.projects.doctype.timesheet.timesheet import ( - make_salary_slip as make_salary_slip_for_timesheet, - ) - - emp = make_employee( - "test_employee_timesheet@salary.com", - company="_Test Company", - holiday_list="Salary Slip Test Holiday List", - ) - frappe.db.set_value("Employee", emp, {"relieving_date": None, "status": "Active"}) - - # mark attendance - month_start_date = get_first_day(nowdate()) - month_end_date = get_last_day(nowdate()) - - first_sunday = frappe.db.sql( - """ - select holiday_date from `tabHoliday` - where parent = 'Salary Slip Test Holiday List' - and holiday_date between %s and %s - order by holiday_date - """, - (month_start_date, month_end_date), - )[0][0] - - mark_attendance( - emp, add_days(first_sunday, 1), "Absent", ignore_validate=True - ) # counted as absent - - # salary structure based on timesheet - make_salary_structure_for_timesheet(emp) - timesheet = make_timesheet(emp, simulate=True, is_billable=1) - salary_slip = make_salary_slip_for_timesheet(timesheet.name) - salary_slip.start_date = month_start_date - salary_slip.end_date = month_end_date - salary_slip.save() - salary_slip.submit() - salary_slip.reload() - - no_of_days = self.get_no_of_days() - days_in_month = no_of_days[0] - no_of_holidays = no_of_days[1] - - self.assertEqual(salary_slip.payment_days, days_in_month - no_of_holidays - 1) - - # gross pay calculation based on attendance (payment days) - gross_pay = 78100 - ( - (78000 / (days_in_month - no_of_holidays)) - * flt(salary_slip.leave_without_pay + salary_slip.absent_days) - ) - - self.assertEqual(salary_slip.gross_pay, flt(gross_pay, 2)) - - @change_settings("Payroll Settings", {"payroll_based_on": "Attendance"}) - def test_component_amount_dependent_on_another_payment_days_based_component(self): - from erpnext.hr.doctype.attendance.attendance import mark_attendance - from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - create_salary_structure_assignment, - ) - - salary_structure = make_salary_structure_for_payment_days_based_component_dependency() - employee = make_employee("test_payment_days_based_component@salary.com", company="_Test Company") - - # base = 50000 - create_salary_structure_assignment( - employee, salary_structure.name, company="_Test Company", currency="INR" - ) - - # mark employee absent for a day since this case works fine if payment days are equal to working days - month_start_date = get_first_day(nowdate()) - month_end_date = get_last_day(nowdate()) - - first_sunday = frappe.db.sql( - """ - select holiday_date from `tabHoliday` - where parent = 'Salary Slip Test Holiday List' - and holiday_date between %s and %s - order by holiday_date - """, - (month_start_date, month_end_date), - )[0][0] - - mark_attendance( - employee, add_days(first_sunday, 1), "Absent", ignore_validate=True - ) # counted as absent - - # make salary slip and assert payment days - ss = make_salary_slip_for_payment_days_dependency_test( - "test_payment_days_based_component@salary.com", salary_structure.name - ) - self.assertEqual(ss.absent_days, 1) - - ss.reload() - payment_days_based_comp_amount = 0 - for component in ss.earnings: - if component.salary_component == "HRA - Payment Days": - payment_days_based_comp_amount = flt(component.amount, component.precision("amount")) - break - - # check if the dependent component is calculated using the amount updated after payment days - actual_amount = 0 - precision = 0 - for component in ss.deductions: - if component.salary_component == "P - Employee Provident Fund": - precision = component.precision("amount") - actual_amount = flt(component.amount, precision) - break - - expected_amount = flt((flt(ss.gross_pay) - payment_days_based_comp_amount) * 0.12, precision) - - self.assertEqual(actual_amount, expected_amount) - - @change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 1}) - def test_salary_slip_with_holidays_included(self): - no_of_days = self.get_no_of_days() - make_employee("test_salary_slip_with_holidays_included@salary.com") - frappe.db.set_value( - "Employee", - frappe.get_value( - "Employee", {"employee_name": "test_salary_slip_with_holidays_included@salary.com"}, "name" - ), - "relieving_date", - None, - ) - frappe.db.set_value( - "Employee", - frappe.get_value( - "Employee", {"employee_name": "test_salary_slip_with_holidays_included@salary.com"}, "name" - ), - "status", - "Active", - ) - ss = make_employee_salary_slip( - "test_salary_slip_with_holidays_included@salary.com", - "Monthly", - "Test Salary Slip With Holidays Included", - ) - - self.assertEqual(ss.total_working_days, no_of_days[0]) - self.assertEqual(ss.payment_days, no_of_days[0]) - self.assertEqual(ss.earnings[0].amount, 50000) - self.assertEqual(ss.earnings[1].amount, 3000) - self.assertEqual(ss.gross_pay, 78000) - - @change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 0}) - def test_salary_slip_with_holidays_excluded(self): - no_of_days = self.get_no_of_days() - make_employee("test_salary_slip_with_holidays_excluded@salary.com") - frappe.db.set_value( - "Employee", - frappe.get_value( - "Employee", {"employee_name": "test_salary_slip_with_holidays_excluded@salary.com"}, "name" - ), - "relieving_date", - None, - ) - frappe.db.set_value( - "Employee", - frappe.get_value( - "Employee", {"employee_name": "test_salary_slip_with_holidays_excluded@salary.com"}, "name" - ), - "status", - "Active", - ) - ss = make_employee_salary_slip( - "test_salary_slip_with_holidays_excluded@salary.com", - "Monthly", - "Test Salary Slip With Holidays Excluded", - ) - - self.assertEqual(ss.total_working_days, no_of_days[0] - no_of_days[1]) - self.assertEqual(ss.payment_days, no_of_days[0] - no_of_days[1]) - self.assertEqual(ss.earnings[0].amount, 50000) - self.assertEqual(ss.earnings[0].default_amount, 50000) - self.assertEqual(ss.earnings[1].amount, 3000) - self.assertEqual(ss.gross_pay, 78000) - - @change_settings("Payroll Settings", {"include_holidays_in_total_working_days": 1}) - def test_payment_days(self): - from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - create_salary_structure_assignment, - ) - - no_of_days = self.get_no_of_days() - - # set joinng date in the same month - employee = make_employee("test_payment_days@salary.com") - if getdate(nowdate()).day >= 15: - relieving_date = getdate(add_days(nowdate(), -10)) - date_of_joining = getdate(add_days(nowdate(), -10)) - elif getdate(nowdate()).day < 15 and getdate(nowdate()).day >= 5: - date_of_joining = getdate(add_days(nowdate(), -3)) - relieving_date = getdate(add_days(nowdate(), -3)) - elif getdate(nowdate()).day < 5 and not getdate(nowdate()).day == 1: - date_of_joining = getdate(add_days(nowdate(), -1)) - relieving_date = getdate(add_days(nowdate(), -1)) - elif getdate(nowdate()).day == 1: - date_of_joining = getdate(nowdate()) - relieving_date = getdate(nowdate()) - - frappe.db.set_value( - "Employee", - employee, - {"date_of_joining": date_of_joining, "relieving_date": None, "status": "Active"}, - ) - - salary_structure = "Test Payment Days" - ss = make_employee_salary_slip("test_payment_days@salary.com", "Monthly", salary_structure) - - self.assertEqual(ss.total_working_days, no_of_days[0]) - self.assertEqual(ss.payment_days, (no_of_days[0] - getdate(date_of_joining).day + 1)) - - # set relieving date in the same month - frappe.db.set_value( - "Employee", - employee, - { - "date_of_joining": add_days(nowdate(), -60), - "relieving_date": relieving_date, - "status": "Left", - }, - ) - - if date_of_joining.day > 1: - self.assertRaises(frappe.ValidationError, ss.save) - - create_salary_structure_assignment(employee, salary_structure) - ss.reload() - ss.save() - - self.assertEqual(ss.total_working_days, no_of_days[0]) - self.assertEqual(ss.payment_days, getdate(relieving_date).day) - - frappe.db.set_value( - "Employee", - frappe.get_value("Employee", {"employee_name": "test_payment_days@salary.com"}, "name"), - "relieving_date", - None, - ) - frappe.db.set_value( - "Employee", - frappe.get_value("Employee", {"employee_name": "test_payment_days@salary.com"}, "name"), - "status", - "Active", - ) - - def test_employee_salary_slip_read_permission(self): - make_employee("test_employee_salary_slip_read_permission@salary.com") - - salary_slip_test_employee = make_employee_salary_slip( - "test_employee_salary_slip_read_permission@salary.com", - "Monthly", - "Test Employee Salary Slip Read Permission", - ) - frappe.set_user("test_employee_salary_slip_read_permission@salary.com") - self.assertTrue(salary_slip_test_employee.has_permission("read")) - - @change_settings("Payroll Settings", {"email_salary_slip_to_employee": 1}) - def test_email_salary_slip(self): - frappe.db.delete("Email Queue") - - user_id = "test_email_salary_slip@salary.com" - - make_employee(user_id, company="_Test Company") - ss = make_employee_salary_slip(user_id, "Monthly", "Test Salary Slip Email") - ss.company = "_Test Company" - ss.save() - ss.submit() - - email_queue = frappe.db.a_row_exists("Email Queue") - self.assertTrue(email_queue) - - def test_loan_repayment_salary_slip(self): - from erpnext.loan_management.doctype.loan.test_loan import ( - create_loan, - create_loan_accounts, - create_loan_type, - make_loan_disbursement_entry, - ) - from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import ( - process_loan_interest_accrual_for_term_loans, - ) - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - applicant = make_employee("test_loan_repayment_salary_slip@salary.com", company="_Test Company") - - create_loan_accounts() - - create_loan_type( - "Car Loan", - 500000, - 8.4, - is_term_loan=1, - mode_of_payment="Cash", - disbursement_account="Disbursement Account - _TC", - payment_account="Payment Account - _TC", - loan_account="Loan Account - _TC", - interest_income_account="Interest Income Account - _TC", - penalty_income_account="Penalty Income Account - _TC", - ) - - payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company") - - make_salary_structure( - "Test Loan Repayment Salary Structure", - "Monthly", - employee=applicant, - currency="INR", - payroll_period=payroll_period, - ) - - frappe.db.sql( - "delete from tabLoan where applicant = 'test_loan_repayment_salary_slip@salary.com'" - ) - loan = create_loan( - applicant, - "Car Loan", - 11000, - "Repay Over Number of Periods", - 20, - posting_date=add_months(nowdate(), -1), - ) - loan.repay_from_salary = 1 - loan.submit() - - make_loan_disbursement_entry( - loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1) - ) - - process_loan_interest_accrual_for_term_loans(posting_date=nowdate()) - - ss = make_employee_salary_slip( - "test_loan_repayment_salary_slip@salary.com", "Monthly", "Test Loan Repayment Salary Structure" - ) - ss.submit() - - self.assertEqual(ss.total_loan_repayment, 592) - self.assertEqual( - ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment))) - ) - - def test_payroll_frequency(self): - fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company())[0] - month = "%02d" % getdate(nowdate()).month - m = get_month_details(fiscal_year, month) - - for payroll_frequency in ["Monthly", "Bimonthly", "Fortnightly", "Weekly", "Daily"]: - make_employee(payroll_frequency + "_test_employee@salary.com") - ss = make_employee_salary_slip( - payroll_frequency + "_test_employee@salary.com", - payroll_frequency, - payroll_frequency + "_Test Payroll Frequency", - ) - if payroll_frequency == "Monthly": - self.assertEqual(ss.end_date, m["month_end_date"]) - elif payroll_frequency == "Bimonthly": - if getdate(ss.start_date).day <= 15: - self.assertEqual(ss.end_date, m["month_mid_end_date"]) - else: - self.assertEqual(ss.end_date, m["month_end_date"]) - elif payroll_frequency == "Fortnightly": - self.assertEqual(ss.end_date, add_days(nowdate(), 13)) - elif payroll_frequency == "Weekly": - self.assertEqual(ss.end_date, add_days(nowdate(), 6)) - elif payroll_frequency == "Daily": - self.assertEqual(ss.end_date, nowdate()) - - def test_multi_currency_salary_slip(self): - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - applicant = make_employee("test_multi_currency_salary_slip@salary.com", company="_Test Company") - frappe.db.sql( - """delete from `tabSalary Structure` where name='Test Multi Currency Salary Slip'""" - ) - salary_structure = make_salary_structure( - "Test Multi Currency Salary Slip", - "Monthly", - employee=applicant, - company="_Test Company", - currency="USD", - ) - salary_slip = make_salary_slip(salary_structure.name, employee=applicant) - salary_slip.exchange_rate = 70 - salary_slip.calculate_net_pay() - - self.assertEqual(salary_slip.gross_pay, 78000) - self.assertEqual(salary_slip.base_gross_pay, 78000 * 70) - - def test_year_to_date_computation(self): - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - applicant = make_employee("test_ytd@salary.com", company="_Test Company") - - payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company") - - create_tax_slab( - payroll_period, - allow_tax_exemption=True, - currency="INR", - effective_date=getdate("2019-04-01"), - company="_Test Company", - ) - - salary_structure = make_salary_structure( - "Monthly Salary Structure Test for Salary Slip YTD", - "Monthly", - employee=applicant, - company="_Test Company", - currency="INR", - payroll_period=payroll_period, - ) - - # clear salary slip for this employee - frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = 'test_ytd@salary.com'") - - create_salary_slips_for_payroll_period( - applicant, salary_structure.name, payroll_period, deduct_random=False, num=6 - ) - - salary_slips = frappe.get_all( - "Salary Slip", - fields=["year_to_date", "net_pay"], - filters={"employee_name": "test_ytd@salary.com"}, - order_by="posting_date", - ) - - year_to_date = 0 - for slip in salary_slips: - year_to_date += flt(slip.net_pay) - self.assertEqual(slip.year_to_date, year_to_date) - - def test_component_wise_year_to_date_computation(self): - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - employee_name = "test_component_wise_ytd@salary.com" - applicant = make_employee(employee_name, company="_Test Company") - - payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company") - - create_tax_slab( - payroll_period, - allow_tax_exemption=True, - currency="INR", - effective_date=getdate("2019-04-01"), - company="_Test Company", - ) - - salary_structure = make_salary_structure( - "Monthly Salary Structure Test for Salary Slip YTD", - "Monthly", - employee=applicant, - company="_Test Company", - currency="INR", - payroll_period=payroll_period, - ) - - # clear salary slip for this employee - frappe.db.sql("DELETE FROM `tabSalary Slip` where employee_name = '%s'" % employee_name) - - create_salary_slips_for_payroll_period( - applicant, salary_structure.name, payroll_period, deduct_random=False, num=3 - ) - - salary_slips = frappe.get_all( - "Salary Slip", - fields=["name"], - filters={"employee_name": employee_name}, - order_by="posting_date", - ) - - year_to_date = dict() - for slip in salary_slips: - doc = frappe.get_doc("Salary Slip", slip.name) - for entry in doc.get("earnings"): - if not year_to_date.get(entry.salary_component): - year_to_date[entry.salary_component] = 0 - - year_to_date[entry.salary_component] += entry.amount - self.assertEqual(year_to_date[entry.salary_component], entry.year_to_date) - - def test_tax_for_payroll_period(self): - data = {} - # test the impact of tax exemption declaration, tax exemption proof submission - # and deduct check boxes in annual tax calculation - # as per assigned salary structure 40500 in monthly salary so 236000*5/100/12 - frappe.db.sql("""delete from `tabPayroll Period`""") - frappe.db.sql("""delete from `tabSalary Component`""") - - payroll_period = create_payroll_period() - - create_tax_slab(payroll_period, allow_tax_exemption=True) - - employee = make_employee("test_tax@salary.slip") - delete_docs = [ - "Salary Slip", - "Additional Salary", - "Employee Tax Exemption Declaration", - "Employee Tax Exemption Proof Submission", - "Employee Benefit Claim", - "Salary Structure Assignment", - ] - for doc in delete_docs: - frappe.db.sql("delete from `tab%s` where employee='%s'" % (doc, employee)) - - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - salary_structure = make_salary_structure( - "Stucture to test tax", - "Monthly", - other_details={"max_benefits": 100000}, - test_tax=True, - include_flexi_benefits=True, - employee=employee, - payroll_period=payroll_period, - ) - - # create salary slip for whole period deducting tax only on last period - # to find the total tax amount paid - create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period, deduct_random=False - ) - tax_paid = get_tax_paid_in_period(employee) - - annual_tax = 113589.0 - try: - self.assertEqual(tax_paid, annual_tax) - except AssertionError: - print("\nSalary Slip - Annual tax calculation failed\n") - raise - frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) - - # create exemption declaration so the tax amount varies - create_exemption_declaration(employee, payroll_period.name) - - # create for payroll deducting in random months - data["deducted_dates"] = create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period - ) - tax_paid = get_tax_paid_in_period(employee) - - # No proof, benefit claim sumitted, total tax paid, should not change - try: - self.assertEqual(tax_paid, annual_tax) - except AssertionError: - print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n") - raise - - # Submit proof for total 120000 - data["proof"] = create_proof_submission(employee, payroll_period, 120000) - - # Submit benefit claim for total 50000 - data["benefit-1"] = create_benefit_claim(employee, payroll_period, 15000, "Medical Allowance") - data["benefit-2"] = create_benefit_claim( - employee, payroll_period, 35000, "Leave Travel Allowance" - ) - - frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) - data["deducted_dates"] = create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period - ) - tax_paid = get_tax_paid_in_period(employee) - - # total taxable income 416000, 166000 @ 5% ie. 8300 - try: - self.assertEqual(tax_paid, 82389.0) - except AssertionError: - print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n") - raise - - # create additional salary of 150000 - frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) - data["additional-1"] = create_additional_salary(employee, payroll_period, 150000) - data["deducted_dates"] = create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period - ) - - # total taxable income 566000, 250000 @ 5%, 66000 @ 20%, 12500 + 13200 - tax_paid = get_tax_paid_in_period(employee) - try: - self.assertEqual(tax_paid, annual_tax) - except AssertionError: - print("\nSalary Slip - Tax calculation failed on following case\n", data, "\n") - raise - frappe.db.sql("""delete from `tabAdditional Salary` where employee=%s""", (employee)) - - # undelete fixture data - frappe.db.rollback() - - def test_tax_for_recurring_additional_salary(self): - frappe.db.sql("""delete from `tabPayroll Period`""") - frappe.db.sql("""delete from `tabSalary Component`""") - - payroll_period = create_payroll_period() - - create_tax_slab(payroll_period, allow_tax_exemption=True) - - employee = make_employee("test_tax@salary.slip") - delete_docs = [ - "Salary Slip", - "Additional Salary", - "Employee Tax Exemption Declaration", - "Employee Tax Exemption Proof Submission", - "Employee Benefit Claim", - "Salary Structure Assignment", - ] - for doc in delete_docs: - frappe.db.sql("delete from `tab%s` where employee='%s'" % (doc, employee)) - - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - salary_structure = make_salary_structure( - "Stucture to test tax", - "Monthly", - other_details={"max_benefits": 100000}, - test_tax=True, - include_flexi_benefits=True, - employee=employee, - payroll_period=payroll_period, - ) - - create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period, deduct_random=False, num=3 - ) - - tax_paid = get_tax_paid_in_period(employee) - - annual_tax = 23196.0 - self.assertEqual(tax_paid, annual_tax) - - frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) - - # ------------------------------------ - # Recurring additional salary - start_date = add_months(payroll_period.start_date, 3) - end_date = add_months(payroll_period.start_date, 5) - create_recurring_additional_salary(employee, "Performance Bonus", 20000, start_date, end_date) - - frappe.db.sql("""delete from `tabSalary Slip` where employee=%s""", (employee)) - - create_salary_slips_for_payroll_period( - employee, salary_structure.name, payroll_period, deduct_random=False, num=4 - ) - - tax_paid = get_tax_paid_in_period(employee) - - annual_tax = 32315.0 - self.assertEqual(tax_paid, annual_tax) - - frappe.db.rollback() - - def make_activity_for_employee(self): - activity_type = frappe.get_doc("Activity Type", "_Test Activity Type") - activity_type.billing_rate = 50 - activity_type.costing_rate = 20 - activity_type.wage_rate = 25 - activity_type.save() - - def get_no_of_days(self): - no_of_days_in_month = calendar.monthrange(getdate(nowdate()).year, getdate(nowdate()).month) - no_of_holidays_in_month = len( - [ - 1 - for i in calendar.monthcalendar(getdate(nowdate()).year, getdate(nowdate()).month) - if i[6] != 0 - ] - ) - - return [no_of_days_in_month[1], no_of_holidays_in_month] - - -def make_employee_salary_slip(user, payroll_frequency, salary_structure=None): - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - if not salary_structure: - salary_structure = payroll_frequency + " Salary Structure Test for Salary Slip" - - employee = frappe.db.get_value( - "Employee", {"user_id": user}, ["name", "company", "employee_name"], as_dict=True - ) - - salary_structure_doc = make_salary_structure( - salary_structure, payroll_frequency, employee=employee.name, company=employee.company - ) - salary_slip_name = frappe.db.get_value( - "Salary Slip", {"employee": frappe.db.get_value("Employee", {"user_id": user})} - ) - - if not salary_slip_name: - salary_slip = make_salary_slip(salary_structure_doc.name, employee=employee.name) - salary_slip.employee_name = employee.employee_name - salary_slip.payroll_frequency = payroll_frequency - salary_slip.posting_date = nowdate() - salary_slip.insert() - else: - salary_slip = frappe.get_doc("Salary Slip", salary_slip_name) - - return salary_slip - - -def make_salary_component(salary_components, test_tax, company_list=None): - for salary_component in salary_components: - if frappe.db.exists("Salary Component", salary_component["salary_component"]): - continue - - if test_tax: - if salary_component["type"] == "Earning": - salary_component["is_tax_applicable"] = 1 - elif salary_component["salary_component"] == "TDS": - salary_component["variable_based_on_taxable_salary"] = 1 - salary_component["amount_based_on_formula"] = 0 - salary_component["amount"] = 0 - salary_component["formula"] = "" - salary_component["condition"] = "" - - salary_component["salary_component_abbr"] = salary_component["abbr"] - doc = frappe.new_doc("Salary Component") - doc.update(salary_component) - doc.insert() - - get_salary_component_account(doc, company_list) - - -def get_salary_component_account(sal_comp, company_list=None): - company = erpnext.get_default_company() - - if company_list and company not in company_list: - company_list.append(company) - - if not isinstance(sal_comp, Document): - sal_comp = frappe.get_doc("Salary Component", sal_comp) - - if not sal_comp.get("accounts"): - for d in company_list: - company_abbr = frappe.get_cached_value("Company", d, "abbr") - - if sal_comp.type == "Earning": - account_name = "Salary" - parent_account = "Indirect Expenses - " + company_abbr - else: - account_name = "Salary Deductions" - parent_account = "Current Liabilities - " + company_abbr - - sal_comp.append( - "accounts", {"company": d, "account": create_account(account_name, d, parent_account)} - ) - sal_comp.save() - - -def create_account(account_name, company, parent_account, account_type=None): - company_abbr = frappe.get_cached_value("Company", company, "abbr") - account = frappe.db.get_value("Account", account_name + " - " + company_abbr) - if not account: - frappe.get_doc( - { - "doctype": "Account", - "account_name": account_name, - "parent_account": parent_account, - "company": company, - } - ).insert() - return account - - -def make_earning_salary_component( - setup=False, test_tax=False, company_list=None, include_flexi_benefits=False -): - data = [ - { - "salary_component": "Basic Salary", - "abbr": "BS", - "condition": "base > 10000", - "formula": "base", - "type": "Earning", - "amount_based_on_formula": 1, - }, - {"salary_component": "HRA", "abbr": "H", "amount": 3000, "type": "Earning"}, - { - "salary_component": "Special Allowance", - "abbr": "SA", - "condition": "H < 10000", - "formula": "BS*.5", - "type": "Earning", - "amount_based_on_formula": 1, - }, - {"salary_component": "Leave Encashment", "abbr": "LE", "type": "Earning"}, - ] - if include_flexi_benefits: - data.extend( - [ - { - "salary_component": "Leave Travel Allowance", - "abbr": "B", - "is_flexible_benefit": 1, - "type": "Earning", - "pay_against_benefit_claim": 1, - "max_benefit_amount": 100000, - "depends_on_payment_days": 0, - }, - { - "salary_component": "Medical Allowance", - "abbr": "B", - "is_flexible_benefit": 1, - "pay_against_benefit_claim": 0, - "type": "Earning", - "max_benefit_amount": 15000, - }, - ] - ) - if test_tax: - data.extend( - [ - {"salary_component": "Performance Bonus", "abbr": "B", "type": "Earning"}, - ] - ) - - if setup or test_tax: - make_salary_component(data, test_tax, company_list) - - data.append( - { - "salary_component": "Basic Salary", - "abbr": "BS", - "condition": "base < 10000", - "formula": "base*.2", - "type": "Earning", - "amount_based_on_formula": 1, - } - ) - return data - - -def make_deduction_salary_component(setup=False, test_tax=False, company_list=None): - data = [ - { - "salary_component": "Professional Tax", - "abbr": "PT", - "type": "Deduction", - "amount": 200, - "exempted_from_income_tax": 1, - } - ] - if not test_tax: - data.append( - { - "salary_component": "TDS", - "abbr": "T", - "condition": 'employment_type=="Intern"', - "type": "Deduction", - "round_to_the_nearest_integer": 1, - } - ) - else: - data.append( - { - "salary_component": "TDS", - "abbr": "T", - "type": "Deduction", - "depends_on_payment_days": 0, - "variable_based_on_taxable_salary": 1, - "round_to_the_nearest_integer": 1, - } - ) - if setup or test_tax: - make_salary_component(data, test_tax, company_list) - - return data - - -def get_tax_paid_in_period(employee): - tax_paid_amount = frappe.db.sql( - """select sum(sd.amount) from `tabSalary Detail` - sd join `tabSalary Slip` ss where ss.name=sd.parent and ss.employee=%s - and ss.docstatus=1 and sd.salary_component='TDS'""", - (employee), - ) - return tax_paid_amount[0][0] - - -def create_exemption_declaration(employee, payroll_period): - create_exemption_category() - declaration = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Declaration", - "employee": employee, - "payroll_period": payroll_period, - "company": erpnext.get_default_company(), - "currency": erpnext.get_default_currency(), - } - ) - declaration.append( - "declarations", - { - "exemption_sub_category": "_Test Sub Category", - "exemption_category": "_Test Category", - "amount": 100000, - }, - ) - declaration.submit() - - -def create_proof_submission(employee, payroll_period, amount): - submission_date = add_months(payroll_period.start_date, random.randint(0, 11)) - proof_submission = frappe.get_doc( - { - "doctype": "Employee Tax Exemption Proof Submission", - "employee": employee, - "payroll_period": payroll_period.name, - "submission_date": submission_date, - "currency": erpnext.get_default_currency(), - } - ) - proof_submission.append( - "tax_exemption_proofs", - { - "exemption_sub_category": "_Test Sub Category", - "exemption_category": "_Test Category", - "type_of_proof": "Test", - "amount": amount, - }, - ) - proof_submission.submit() - return submission_date - - -def create_benefit_claim(employee, payroll_period, amount, component): - claim_date = add_months(payroll_period.start_date, random.randint(0, 11)) - frappe.get_doc( - { - "doctype": "Employee Benefit Claim", - "employee": employee, - "claimed_amount": amount, - "claim_date": claim_date, - "earning_component": component, - "currency": erpnext.get_default_currency(), - } - ).submit() - return claim_date - - -def create_tax_slab( - payroll_period, - effective_date=None, - allow_tax_exemption=False, - dont_submit=False, - currency=None, - company=None, -): - if not currency: - currency = erpnext.get_default_currency() - - if company: - currency = erpnext.get_company_currency(company) - - slabs = [ - { - "from_amount": 250000, - "to_amount": 500000, - "percent_deduction": 5, - "condition": "annual_taxable_earning > 500000", - }, - {"from_amount": 500001, "to_amount": 1000000, "percent_deduction": 20}, - {"from_amount": 1000001, "percent_deduction": 30}, - ] - - income_tax_slab_name = frappe.db.get_value("Income Tax Slab", {"currency": currency}) - if not income_tax_slab_name: - income_tax_slab = frappe.new_doc("Income Tax Slab") - income_tax_slab.name = "Tax Slab: " + payroll_period.name + " " + cstr(currency) - income_tax_slab.effective_from = effective_date or add_days(payroll_period.start_date, -2) - income_tax_slab.company = company or "" - income_tax_slab.currency = currency - - if allow_tax_exemption: - income_tax_slab.allow_tax_exemption = 1 - income_tax_slab.standard_tax_exemption_amount = 50000 - - for item in slabs: - income_tax_slab.append("slabs", item) - - income_tax_slab.append("other_taxes_and_charges", {"description": "cess", "percent": 4}) - - income_tax_slab.save() - if not dont_submit: - income_tax_slab.submit() - - return income_tax_slab.name - else: - return income_tax_slab_name - - -def create_salary_slips_for_payroll_period( - employee, salary_structure, payroll_period, deduct_random=True, num=12 -): - deducted_dates = [] - i = 0 - while i < num: - slip = frappe.get_doc( - { - "doctype": "Salary Slip", - "employee": employee, - "salary_structure": salary_structure, - "frequency": "Monthly", - } - ) - if i == 0: - posting_date = add_days(payroll_period.start_date, 25) - else: - posting_date = add_months(posting_date, 1) - if i == 11: - slip.deduct_tax_for_unsubmitted_tax_exemption_proof = 1 - slip.deduct_tax_for_unclaimed_employee_benefits = 1 - if deduct_random and not random.randint(0, 2): - slip.deduct_tax_for_unsubmitted_tax_exemption_proof = 1 - deducted_dates.append(posting_date) - slip.posting_date = posting_date - slip.start_date = get_first_day(posting_date) - slip.end_date = get_last_day(posting_date) - doc = make_salary_slip(salary_structure, slip, employee) - doc.submit() - i += 1 - return deducted_dates - - -def create_additional_salary(employee, payroll_period, amount): - salary_date = add_months(payroll_period.start_date, random.randint(0, 11)) - frappe.get_doc( - { - "doctype": "Additional Salary", - "employee": employee, - "company": erpnext.get_default_company(), - "salary_component": "Performance Bonus", - "payroll_date": salary_date, - "amount": amount, - "type": "Earning", - "currency": erpnext.get_default_currency(), - } - ).submit() - return salary_date - - -def make_leave_application( - employee, - from_date, - to_date, - leave_type, - company=None, - half_day=False, - half_day_date=None, - submit=True, -): - leave_application = frappe.get_doc( - dict( - doctype="Leave Application", - employee=employee, - leave_type=leave_type, - from_date=from_date, - to_date=to_date, - half_day=half_day, - half_day_date=half_day_date, - company=company or erpnext.get_default_company() or "_Test Company", - status="Approved", - leave_approver="test@example.com", - ) - ).insert() - - if submit: - leave_application.submit() - - return leave_application - - -def setup_test(): - make_earning_salary_component(setup=True, company_list=["_Test Company"]) - make_deduction_salary_component(setup=True, company_list=["_Test Company"]) - - for dt in [ - "Leave Application", - "Leave Allocation", - "Salary Slip", - "Attendance", - "Additional Salary", - ]: - frappe.db.sql("delete from `tab%s`" % dt) - - make_holiday_list() - - frappe.db.set_value( - "Company", erpnext.get_default_company(), "default_holiday_list", "Salary Slip Test Holiday List" - ) - frappe.db.set_value("Payroll Settings", None, "email_salary_slip_to_employee", 0) - frappe.db.set_value("HR Settings", None, "leave_status_notification_template", None) - frappe.db.set_value("HR Settings", None, "leave_approval_notification_template", None) - - -def make_holiday_list(list_name=None, from_date=None, to_date=None): - fiscal_year = get_fiscal_year(nowdate(), company=erpnext.get_default_company()) - name = list_name or "Salary Slip Test Holiday List" - - frappe.delete_doc_if_exists("Holiday List", name, force=True) - - holiday_list = frappe.get_doc( - { - "doctype": "Holiday List", - "holiday_list_name": name, - "from_date": from_date or fiscal_year[1], - "to_date": to_date or fiscal_year[2], - "weekly_off": "Sunday", - } - ).insert() - holiday_list.get_weekly_off_dates() - holiday_list.save() - holiday_list = holiday_list.name - - return holiday_list - - -def make_salary_structure_for_payment_days_based_component_dependency(): - earnings = [ - { - "salary_component": "Basic Salary - Payment Days", - "abbr": "P_BS", - "type": "Earning", - "formula": "base", - "amount_based_on_formula": 1, - }, - { - "salary_component": "HRA - Payment Days", - "abbr": "P_HRA", - "type": "Earning", - "depends_on_payment_days": 1, - "amount_based_on_formula": 1, - "formula": "base * 0.20", - }, - ] - - make_salary_component(earnings, False, company_list=["_Test Company"]) - - deductions = [ - { - "salary_component": "P - Professional Tax", - "abbr": "P_PT", - "type": "Deduction", - "depends_on_payment_days": 1, - "amount": 200.00, - }, - { - "salary_component": "P - Employee Provident Fund", - "abbr": "P_EPF", - "type": "Deduction", - "exempted_from_income_tax": 1, - "amount_based_on_formula": 1, - "depends_on_payment_days": 0, - "formula": "(gross_pay - P_HRA) * 0.12", - }, - ] - - make_salary_component(deductions, False, company_list=["_Test Company"]) - - salary_structure = "Salary Structure with PF" - if frappe.db.exists("Salary Structure", salary_structure): - frappe.db.delete("Salary Structure", salary_structure) - - details = { - "doctype": "Salary Structure", - "name": salary_structure, - "company": "_Test Company", - "payroll_frequency": "Monthly", - "payment_account": get_random("Account", filters={"account_currency": "INR"}), - "currency": "INR", - } - - salary_structure_doc = frappe.get_doc(details) - - for entry in earnings: - salary_structure_doc.append("earnings", entry) - - for entry in deductions: - salary_structure_doc.append("deductions", entry) - - salary_structure_doc.insert() - salary_structure_doc.submit() - - return salary_structure_doc - - -def make_salary_slip_for_payment_days_dependency_test(employee, salary_structure): - employee = frappe.db.get_value( - "Employee", {"user_id": employee}, ["name", "company", "employee_name"], as_dict=True - ) - - salary_slip_name = frappe.db.get_value("Salary Slip", {"employee": employee.name}) - - if not salary_slip_name: - salary_slip = make_salary_slip(salary_structure, employee=employee.name) - salary_slip.employee_name = employee.employee_name - salary_slip.payroll_frequency = "Monthly" - salary_slip.posting_date = nowdate() - salary_slip.insert() - else: - salary_slip = frappe.get_doc("Salary Slip", salary_slip_name) - - return salary_slip - - -def create_recurring_additional_salary( - employee, salary_component, amount, from_date, to_date, company=None -): - frappe.get_doc( - { - "doctype": "Additional Salary", - "employee": employee, - "company": company or erpnext.get_default_company(), - "salary_component": salary_component, - "is_recurring": 1, - "from_date": from_date, - "to_date": to_date, - "amount": amount, - "type": "Earning", - "currency": erpnext.get_default_currency(), - } - ).submit() diff --git a/erpnext/payroll/doctype/salary_slip_leave/__init__.py b/erpnext/payroll/doctype/salary_slip_leave/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json b/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json deleted file mode 100644 index 60ed453938..0000000000 --- a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "actions": [], - "creation": "2021-02-19 11:45:18.173417", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "leave_type", - "total_allocated_leaves", - "expired_leaves", - "used_leaves", - "pending_leaves", - "available_leaves" - ], - "fields": [ - { - "fieldname": "leave_type", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Leave Type", - "no_copy": 1, - "options": "Leave Type", - "read_only": 1 - }, - { - "fieldname": "total_allocated_leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Total Allocated Leave(s)", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "expired_leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Expired Leave(s)", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "used_leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Used Leave(s)", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "pending_leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Leave(s) Pending Approval", - "no_copy": 1, - "read_only": 1 - }, - { - "fieldname": "available_leaves", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Available Leave(s)", - "no_copy": 1, - "read_only": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2022-02-28 14:01:32.327204", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Slip Leave", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py b/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py deleted file mode 100644 index b29a60bd4a..0000000000 --- a/erpnext/payroll/doctype/salary_slip_leave/salary_slip_leave.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class SalarySlipLeave(Document): - pass diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/__init__.py b/erpnext/payroll/doctype/salary_slip_timesheet/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json b/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json deleted file mode 100644 index 9930c53ec9..0000000000 --- a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "actions": [], - "creation": "2016-06-14 19:22:29.811658", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "time_sheet", - "working_hours" - ], - "fields": [ - { - "fieldname": "time_sheet", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Time Sheet", - "options": "Timesheet", - "reqd": 1 - }, - { - "fieldname": "working_hours", - "fieldtype": "Float", - "in_list_view": 1, - "label": "Working Hours", - "no_copy": 1, - "read_only": 1 - } - ], - "istable": 1, - "links": [], - "modified": "2020-06-22 23:27:43.463532", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Slip Timesheet", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py b/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py deleted file mode 100644 index 022eba05fd..0000000000 --- a/erpnext/payroll/doctype/salary_slip_timesheet/salary_slip_timesheet.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class SalarySlipTimesheet(Document): - pass diff --git a/erpnext/payroll/doctype/salary_structure/README.md b/erpnext/payroll/doctype/salary_structure/README.md deleted file mode 100644 index 3795971c11..0000000000 --- a/erpnext/payroll/doctype/salary_structure/README.md +++ /dev/null @@ -1 +0,0 @@ -Salary Template for an Employee, basis of which monthly Salary is calculated. \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_structure/__init__.py b/erpnext/payroll/doctype/salary_structure/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html b/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html deleted file mode 100644 index 0f6cc37851..0000000000 --- a/erpnext/payroll/doctype/salary_structure/condition_and_formula_help.html +++ /dev/null @@ -1,47 +0,0 @@ -

Variables

-
    -
  • - Variables from Salary Structure Assignment:
    - base = Base, variable = Variable etc. -
  • -
  • - Variables from Employee:
    Employment Type = employment_type, Branch = branch etc. -
  • -
  • - Variables from Salary Slip:
    - Payment Days = payment_days, Leave without pay = leave_without_pay etc. -
  • -
  • - Abbreviation from Salary Component:
    - BS = Basic Salary etc. -
  • -
  • - Some additional variable:
    - gross_pay and annual_taxable_earning can also be used. -
  • -
  • Direct Amount can also be used
  • -
- -

Examples for Conditions and formula

-
    -
  • - Calculating Basic Salary based on base -
    Condition: base < 10000
    -
    Formula: base * .2
    -
  • -
  • - Calculating HRA based on Basic SalaryBS -
    Condition: BS > 2000
    -
    Formula: BS * .1
    -
  • -
  • - Calculating TDS based on Employment Typeemployment_type -
    Condition: employment_type=="Intern"
    -
    Amount: 1000
    -
  • -
  • - Calculating Income Tax based on annual_taxable_earning -
    Condition: annual_taxable_earning > 20000000
    -
    Formula: annual_taxable_earning * 0.10 
    -
  • -
diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.js b/erpnext/payroll/doctype/salary_structure/salary_structure.js deleted file mode 100755 index 7853b4860e..0000000000 --- a/erpnext/payroll/doctype/salary_structure/salary_structure.js +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt -{% include "erpnext/public/js/controllers/accounts.js" %} - -cur_frm.add_fetch('company', 'default_letter_head', 'letter_head'); - - -cur_frm.cscript.onload = function(doc, dt, dn){ - var e_tbl = doc.earnings || []; - var d_tbl = doc.deductions || []; - if (e_tbl.length == 0 && d_tbl.length == 0) - return function(r, rt) { refresh_many(['earnings', 'deductions']);}; -} - -frappe.ui.form.on('Salary Structure', { - onload: function(frm) { - - let help_button = $(` - ${__("Condition and Formula Help")} - `).click(()=>{ - - let d = new frappe.ui.Dialog({ - title: __('Condition and Formula Help'), - fields: [ - { - fieldname: 'msg_wrapper', - fieldtype: 'HTML' - } - ] - }); - - let message_html = frappe.render_template("condition_and_formula_help") - - d.fields_dict.msg_wrapper.$wrapper.append(message_html) - - d.show() - }); - let help_button_wrapper = frm.get_field("conditions_and_formula_variable_and_example").$wrapper; - help_button_wrapper.empty(); - help_button_wrapper.append(frm.doc.filters_html).append(help_button) - - frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet) - - frm.set_query("payment_account", function () { - var account_types = ["Bank", "Cash"]; - return { - filters: { - "account_type": ["in", account_types], - "is_group": 0, - "company": frm.doc.company - } - }; - }); - frm.trigger('set_earning_deduction_component'); - }, - - set_earning_deduction_component: function(frm) { - if(!frm.doc.company) return; - frm.set_query("salary_component", "earnings", function() { - return { - filters: {type: "earning", company: frm.doc.company} - }; - }); - frm.set_query("salary_component", "deductions", function() { - return { - filters: {type: "deduction", company: frm.doc.company} - }; - }); - }, - - company: function(frm) { - frm.trigger('set_earning_deduction_component'); - }, - - currency: function(frm) { - calculate_totals(frm.doc); - frm.trigger("set_dynamic_labels") - frm.refresh() - }, - - set_dynamic_labels: function(frm) { - frm.set_currency_labels(["net_pay","hour_rate", "leave_encashment_amount_per_day", "max_benefits", "total_earning", - "total_deduction"], frm.doc.currency); - - frm.set_currency_labels(["amount", "additional_amount", "tax_on_flexible_benefit", "tax_on_additional_salary"], - frm.doc.currency, "earnings"); - - frm.set_currency_labels(["amount", "additional_amount", "tax_on_flexible_benefit", "tax_on_additional_salary"], - frm.doc.currency, "deductions"); - - frm.refresh_fields(); - }, - - refresh: function(frm) { - frm.trigger("set_dynamic_labels") - frm.trigger("toggle_fields"); - frm.fields_dict['earnings'].grid.set_column_disp("default_amount", false); - frm.fields_dict['deductions'].grid.set_column_disp("default_amount", false); - - if(frm.doc.docstatus === 1) { - frm.add_custom_button(__("Preview Salary Slip"), function() { - frm.trigger('preview_salary_slip'); - }); - } - - if(frm.doc.docstatus==1) { - frm.add_custom_button(__("Assign Salary Structure"), function() { - var doc = frappe.model.get_new_doc('Salary Structure Assignment'); - doc.salary_structure = frm.doc.name; - doc.company = frm.doc.company; - frappe.set_route('Form', 'Salary Structure Assignment', doc.name); - }); - frm.add_custom_button(__("Assign to Employees"),function () { - frm.trigger('assign_to_employees') - }) - } - - // set columns read-only - let fields_read_only = ["is_tax_applicable", "is_flexible_benefit", "variable_based_on_taxable_salary"]; - fields_read_only.forEach(function(field) { - frm.fields_dict.earnings.grid.update_docfield_property( - field, 'read_only', 1 - ); - frm.fields_dict.deductions.grid.update_docfield_property( - field, 'read_only', 1 - ); - }); - frm.trigger('set_earning_deduction_component'); - }, - - assign_to_employees:function (frm) { - var d = new frappe.ui.Dialog({ - title: __("Assign to Employees"), - fields: [ - {fieldname: "sec_break", fieldtype: "Section Break", label: __("Filter Employees By (Optional)")}, - {fieldname: "grade", fieldtype: "Link", options: "Employee Grade", label: __("Employee Grade")}, - {fieldname:'department', fieldtype:'Link', options: 'Department', label: __('Department')}, - {fieldname:'designation', fieldtype:'Link', options: 'Designation', label: __('Designation')}, - {fieldname:"employee", fieldtype: "Link", options: "Employee", label: __("Employee")}, - {fieldname:"payroll_payable_account", fieldtype: "Link", options: "Account", filters: {"company": frm.doc.company, "root_type": "Liability", "is_group": 0, "account_currency": frm.doc.currency}, label: __("Payroll Payable Account")}, - {fieldname:'base_variable', fieldtype:'Section Break'}, - {fieldname:'from_date', fieldtype:'Date', label: __('From Date'), "reqd": 1}, - {fieldname:'income_tax_slab', fieldtype:'Link', label: __('Income Tax Slab'), options: 'Income Tax Slab'}, - {fieldname:'base_col_br', fieldtype:'Column Break'}, - {fieldname:'base', fieldtype:'Currency', label: __('Base')}, - {fieldname:'variable', fieldtype:'Currency', label: __('Variable')} - ], - primary_action: function() { - var data = d.get_values(); - delete data.company - delete data.currency - frappe.call({ - doc: frm.doc, - method: "assign_salary_structure", - args: data, - callback: function(r) { - if(!r.exc) { - d.hide(); - frm.reload_doc(); - } - } - }); - }, - primary_action_label: __('Assign') - }); - - d.fields_dict.grade.df.onchange = function() { - const grade = d.fields_dict.grade.value; - if (grade) { - frappe.db.get_value('Employee Grade', grade, 'default_base_pay') - .then(({ message }) => { - d.set_value('base', message.default_base_pay); - }); - } - }; - - d.show(); - }, - - salary_slip_based_on_timesheet: function(frm) { - frm.trigger("toggle_fields") - }, - - preview_salary_slip: function(frm) { - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure.salary_structure.get_employees", - args: { - salary_structure: frm.doc.name - }, - callback: function(r) { - var employees = r.message; - if(!employees) return; - if (employees.length == 1){ - frm.events.open_salary_slip(frm, employees[0]); - } else { - var d = new frappe.ui.Dialog({ - title: __("Preview Salary Slip"), - fields: [ - { - "label":__("Employee"), - "fieldname":"employee", - "fieldtype":"Select", - "reqd": true, - options: employees - }, { - fieldname:"fetch", - "label":__("Show Salary Slip"), - "fieldtype":"Button" - } - ] - }); - d.get_input("fetch").on("click", function() { - var values = d.get_values(); - if(!values) return; - frm.events.open_salary_slip(frm, values.employee) - - }); - d.show(); - } - } - }); - }, - - open_salary_slip: function(frm, employee){ - var print_format = frm.doc.salary_slip_based_on_timesheet ? "Salary Slip based on Timesheet" : "Salary Slip Standard"; - frappe.call({ - method: "erpnext.payroll.doctype.salary_structure.salary_structure.make_salary_slip", - args: { - source_name: frm.doc.name, - employee: employee, - as_print: 1, - print_format: print_format, - for_preview: 1 - }, - callback: function(r) { - var new_window = window.open(); - new_window.document.write(r.message); - } - }); - }, - - toggle_fields: function(frm) { - frm.toggle_display(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet); - frm.toggle_reqd(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet); - frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet); - } -}); - -var validate_date = function(frm, cdt, cdn) { - var doc = locals[cdt][cdn]; - if(doc.to_date && doc.from_date) { - var from_date = frappe.datetime.str_to_obj(doc.from_date); - var to_date = frappe.datetime.str_to_obj(doc.to_date); - - if(to_date < from_date) { - frappe.model.set_value(cdt, cdn, "to_date", ""); - frappe.throw(__("From Date cannot be greater than To Date")); - } - } -} - - -cur_frm.cscript.amount = function(doc, cdt, cdn){ - calculate_totals(doc, cdt, cdn); -}; - -var calculate_totals = function(doc) { - var tbl1 = doc.earnings || []; - var tbl2 = doc.deductions || []; - - var total_earn = 0; var total_ded = 0; - for(var i = 0; i < tbl1.length; i++){ - total_earn += flt(tbl1[i].amount); - } - for(var j = 0; j < tbl2.length; j++){ - total_ded += flt(tbl2[j].amount); - } - doc.total_earning = total_earn; - doc.total_deduction = total_ded; - doc.net_pay = 0.0 - if(doc.salary_slip_based_on_timesheet == 0){ - doc.net_pay = flt(total_earn) - flt(total_ded); - } - - refresh_many(['total_earning', 'total_deduction', 'net_pay']); -} - -cur_frm.cscript.validate = function(doc, cdt, cdn) { - calculate_totals(doc); -} - - -frappe.ui.form.on('Salary Detail', { - amount: function(frm) { - calculate_totals(frm.doc); - }, - - earnings_remove: function(frm) { - calculate_totals(frm.doc); - }, - - deductions_remove: function(frm) { - calculate_totals(frm.doc); - }, - - salary_component: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(child.salary_component){ - frappe.call({ - method: "frappe.client.get", - args: { - doctype: "Salary Component", - name: child.salary_component - }, - callback: function(data) { - if(data.message){ - var result = data.message; - frappe.model.set_value(cdt, cdn, 'condition', result.condition); - frappe.model.set_value(cdt, cdn, 'amount_based_on_formula', result.amount_based_on_formula); - if(result.amount_based_on_formula == 1){ - frappe.model.set_value(cdt, cdn, 'formula', result.formula); - } - else{ - frappe.model.set_value(cdt, cdn, 'amount', result.amount); - } - frappe.model.set_value(cdt, cdn, 'statistical_component', result.statistical_component); - frappe.model.set_value(cdt, cdn, 'depends_on_payment_days', result.depends_on_payment_days); - frappe.model.set_value(cdt, cdn, 'do_not_include_in_total', result.do_not_include_in_total); - frappe.model.set_value(cdt, cdn, 'variable_based_on_taxable_salary', result.variable_based_on_taxable_salary); - frappe.model.set_value(cdt, cdn, 'is_tax_applicable', result.is_tax_applicable); - frappe.model.set_value(cdt, cdn, 'is_flexible_benefit', result.is_flexible_benefit); - refresh_field("earnings"); - refresh_field("deductions"); - } - } - }); - } - }, - - amount_based_on_formula: function(frm, cdt, cdn) { - var child = locals[cdt][cdn]; - if(child.amount_based_on_formula == 1){ - frappe.model.set_value(cdt, cdn, 'amount', null); - } - else{ - frappe.model.set_value(cdt, cdn, 'formula', null); - } - } -}) diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.json b/erpnext/payroll/doctype/salary_structure/salary_structure.json deleted file mode 100644 index 8df995769d..0000000000 --- a/erpnext/payroll/doctype/salary_structure/salary_structure.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "Prompt", - "creation": "2013-03-07 18:50:29", - "doctype": "DocType", - "document_type": "Document", - "engine": "InnoDB", - "field_order": [ - "company", - "letter_head", - "column_break1", - "is_active", - "payroll_frequency", - "currency", - "is_default", - "time_sheet_earning_detail", - "salary_slip_based_on_timesheet", - "column_break_17", - "salary_component", - "hour_rate", - "leave_encashment_amount_per_day", - "max_benefits", - "earning_deduction", - "earnings", - "deductions", - "conditions_and_formula_variable_and_example", - "net_pay_detail", - "total_earning", - "total_deduction", - "column_break2", - "net_pay", - "account", - "mode_of_payment", - "column_break_28", - "payment_account", - "amended_from" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "remember_last_selected_value": 1, - "reqd": 1 - }, - { - "fieldname": "letter_head", - "fieldtype": "Link", - "label": "Letter Head", - "options": "Letter Head" - }, - { - "fieldname": "column_break1", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "allow_on_submit": 1, - "default": "Yes", - "fieldname": "is_active", - "fieldtype": "Select", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Is Active", - "oldfieldname": "is_active", - "oldfieldtype": "Select", - "options": "\nYes\nNo", - "reqd": 1 - }, - { - "default": "Monthly", - "depends_on": "eval:(!doc.salary_slip_based_on_timesheet)", - "fieldname": "payroll_frequency", - "fieldtype": "Select", - "label": "Payroll Frequency", - "options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily" - }, - { - "default": "No", - "fieldname": "is_default", - "fieldtype": "Select", - "hidden": 1, - "label": "Is Default", - "no_copy": 1, - "options": "Yes\nNo", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "time_sheet_earning_detail", - "fieldtype": "Section Break" - }, - { - "default": "0", - "fieldname": "salary_slip_based_on_timesheet", - "fieldtype": "Check", - "label": "Salary Slip Based on Timesheet" - }, - { - "fieldname": "column_break_17", - "fieldtype": "Column Break" - }, - { - "description": "Salary Component for timesheet based payroll.", - "fieldname": "salary_component", - "fieldtype": "Link", - "label": "Salary Component", - "options": "Salary Component" - }, - { - "fieldname": "hour_rate", - "fieldtype": "Currency", - "label": "Hour Rate", - "options": "currency" - }, - { - "fieldname": "leave_encashment_amount_per_day", - "fieldtype": "Currency", - "label": "Leave Encashment Amount Per Day", - "options": "currency" - }, - { - "fieldname": "max_benefits", - "fieldtype": "Currency", - "label": "Max Benefits (Amount)", - "options": "currency" - }, - { - "description": "Salary breakup based on Earning and Deduction.", - "fieldname": "earning_deduction", - "fieldtype": "Section Break", - "oldfieldname": "earning_deduction", - "oldfieldtype": "Section Break", - "precision": "2" - }, - { - "fieldname": "earnings", - "fieldtype": "Table", - "label": "Earnings", - "oldfieldname": "earning_details", - "oldfieldtype": "Table", - "options": "Salary Detail" - }, - { - "fieldname": "deductions", - "fieldtype": "Table", - "label": "Deductions", - "oldfieldname": "deduction_details", - "oldfieldtype": "Table", - "options": "Salary Detail" - }, - { - "fieldname": "net_pay_detail", - "fieldtype": "Section Break", - "options": "Simple" - }, - { - "fieldname": "column_break2", - "fieldtype": "Column Break", - "width": "50%" - }, - { - "fieldname": "total_earning", - "fieldtype": "Currency", - "hidden": 1, - "label": "Total Earning", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "total_deduction", - "fieldtype": "Currency", - "hidden": 1, - "label": "Total Deduction", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "net_pay", - "fieldtype": "Currency", - "hidden": 1, - "label": "Net Pay", - "options": "currency", - "read_only": 1 - }, - { - "fieldname": "account", - "fieldtype": "Section Break", - "label": "Account" - }, - { - "fieldname": "mode_of_payment", - "fieldtype": "Link", - "label": "Mode of Payment", - "options": "Mode of Payment" - }, - { - "fieldname": "column_break_28", - "fieldtype": "Column Break" - }, - { - "fieldname": "payment_account", - "fieldtype": "Link", - "label": "Payment Account", - "options": "Account" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Salary Structure", - "print_hide": 1, - "read_only": 1 - }, - { - "fieldname": "conditions_and_formula_variable_and_example", - "fieldtype": "HTML", - "label": "Conditions and Formula variable and example" - }, - { - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "reqd": 1 - } - ], - "icon": "fa fa-file-text", - "idx": 1, - "is_submittable": 1, - "links": [], - "modified": "2022-02-03 23:50:10.205676", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Structure", - "naming_rule": "Set by user", - "owner": "Administrator", - "permissions": [ - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "import": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "show_name_in_global_search": 1, - "sort_field": "modified", - "sort_order": "DESC", - "states": [] -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure.py b/erpnext/payroll/doctype/salary_structure/salary_structure.py deleted file mode 100644 index fa36b7ab2d..0000000000 --- a/erpnext/payroll/doctype/salary_structure/salary_structure.py +++ /dev/null @@ -1,315 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import cint, cstr, flt - -import erpnext - - -class SalaryStructure(Document): - def validate(self): - self.set_missing_values() - self.validate_amount() - self.strip_condition_and_formula_fields() - self.validate_max_benefits_with_flexi() - self.validate_component_based_on_tax_slab() - - def set_missing_values(self): - overwritten_fields = [ - "depends_on_payment_days", - "variable_based_on_taxable_salary", - "is_tax_applicable", - "is_flexible_benefit", - ] - overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"] - for table in ["earnings", "deductions"]: - for d in self.get(table): - component_default_value = frappe.db.get_value( - "Salary Component", - cstr(d.salary_component), - overwritten_fields + overwritten_fields_if_missing, - as_dict=1, - ) - if component_default_value: - for fieldname in overwritten_fields: - value = component_default_value.get(fieldname) - if d.get(fieldname) != value: - d.set(fieldname, value) - - if not (d.get("amount") or d.get("formula")): - for fieldname in overwritten_fields_if_missing: - d.set(fieldname, component_default_value.get(fieldname)) - - def validate_component_based_on_tax_slab(self): - for row in self.deductions: - if row.variable_based_on_taxable_salary and (row.amount or row.formula): - frappe.throw( - _( - "Row #{0}: Cannot set amount or formula for Salary Component {1} with Variable Based On Taxable Salary" - ).format(row.idx, row.salary_component) - ) - - def validate_amount(self): - if flt(self.net_pay) < 0 and self.salary_slip_based_on_timesheet: - frappe.throw(_("Net pay cannot be negative")) - - def strip_condition_and_formula_fields(self): - # remove whitespaces from condition and formula fields - for row in self.earnings: - row.condition = row.condition.strip() if row.condition else "" - row.formula = row.formula.strip() if row.formula else "" - - for row in self.deductions: - row.condition = row.condition.strip() if row.condition else "" - row.formula = row.formula.strip() if row.formula else "" - - def validate_max_benefits_with_flexi(self): - have_a_flexi = False - if self.earnings: - flexi_amount = 0 - for earning_component in self.earnings: - if earning_component.is_flexible_benefit == 1: - have_a_flexi = True - max_of_component = frappe.db.get_value( - "Salary Component", earning_component.salary_component, "max_benefit_amount" - ) - flexi_amount += max_of_component - - if have_a_flexi and flt(self.max_benefits) == 0: - frappe.throw(_("Max benefits should be greater than zero to dispense benefits")) - if have_a_flexi and flexi_amount and flt(self.max_benefits) > flexi_amount: - frappe.throw( - _( - "Total flexible benefit component amount {0} should not be less than max benefits {1}" - ).format(flexi_amount, self.max_benefits) - ) - if not have_a_flexi and flt(self.max_benefits) > 0: - frappe.throw( - _("Salary Structure should have flexible benefit component(s) to dispense benefit amount") - ) - - def get_employees(self, **kwargs): - conditions, values = [], [] - for field, value in kwargs.items(): - if value: - conditions.append("{0}=%s".format(field)) - values.append(value) - - condition_str = " and " + " and ".join(conditions) if conditions else "" - - employees = frappe.db.sql_list( - "select name from tabEmployee where status='Active' {condition}".format( - condition=condition_str - ), - tuple(values), - ) - - return employees - - @frappe.whitelist() - def assign_salary_structure( - self, - grade=None, - department=None, - designation=None, - employee=None, - payroll_payable_account=None, - from_date=None, - base=None, - variable=None, - income_tax_slab=None, - ): - employees = self.get_employees( - company=self.company, grade=grade, department=department, designation=designation, name=employee - ) - - if employees: - if len(employees) > 20: - frappe.enqueue( - assign_salary_structure_for_employees, - timeout=600, - employees=employees, - salary_structure=self, - payroll_payable_account=payroll_payable_account, - from_date=from_date, - base=base, - variable=variable, - income_tax_slab=income_tax_slab, - ) - else: - assign_salary_structure_for_employees( - employees, - self, - payroll_payable_account=payroll_payable_account, - from_date=from_date, - base=base, - variable=variable, - income_tax_slab=income_tax_slab, - ) - else: - frappe.msgprint(_("No Employee Found")) - - -def assign_salary_structure_for_employees( - employees, - salary_structure, - payroll_payable_account=None, - from_date=None, - base=None, - variable=None, - income_tax_slab=None, -): - salary_structures_assignments = [] - existing_assignments_for = get_existing_assignments(employees, salary_structure, from_date) - count = 0 - for employee in employees: - if employee in existing_assignments_for: - continue - count += 1 - - salary_structures_assignment = create_salary_structures_assignment( - employee, salary_structure, payroll_payable_account, from_date, base, variable, income_tax_slab - ) - salary_structures_assignments.append(salary_structures_assignment) - frappe.publish_progress( - count * 100 / len(set(employees) - set(existing_assignments_for)), - title=_("Assigning Structures..."), - ) - - if salary_structures_assignments: - frappe.msgprint(_("Structures have been assigned successfully")) - - -def create_salary_structures_assignment( - employee, - salary_structure, - payroll_payable_account, - from_date, - base, - variable, - income_tax_slab=None, -): - if not payroll_payable_account: - payroll_payable_account = frappe.db.get_value( - "Company", salary_structure.company, "default_payroll_payable_account" - ) - if not payroll_payable_account: - frappe.throw(_('Please set "Default Payroll Payable Account" in Company Defaults')) - payroll_payable_account_currency = frappe.db.get_value( - "Account", payroll_payable_account, "account_currency" - ) - company_curency = erpnext.get_company_currency(salary_structure.company) - if ( - payroll_payable_account_currency != salary_structure.currency - and payroll_payable_account_currency != company_curency - ): - frappe.throw( - _("Invalid Payroll Payable Account. The account currency must be {0} or {1}").format( - salary_structure.currency, company_curency - ) - ) - - assignment = frappe.new_doc("Salary Structure Assignment") - assignment.employee = employee - assignment.salary_structure = salary_structure.name - assignment.company = salary_structure.company - assignment.currency = salary_structure.currency - assignment.payroll_payable_account = payroll_payable_account - assignment.from_date = from_date - assignment.base = base - assignment.variable = variable - assignment.income_tax_slab = income_tax_slab - assignment.save(ignore_permissions=True) - assignment.submit() - return assignment.name - - -def get_existing_assignments(employees, salary_structure, from_date): - salary_structures_assignments = frappe.db.sql_list( - """ - select distinct employee from `tabSalary Structure Assignment` - where salary_structure=%s and employee in (%s) - and from_date=%s and company= %s and docstatus=1 - """ - % ("%s", ", ".join(["%s"] * len(employees)), "%s", "%s"), - [salary_structure.name] + employees + [from_date] + [salary_structure.company], - ) - if salary_structures_assignments: - frappe.msgprint( - _( - "Skipping Salary Structure Assignment for the following employees, as Salary Structure Assignment records already exists against them. {0}" - ).format("\n".join(salary_structures_assignments)) - ) - return salary_structures_assignments - - -@frappe.whitelist() -def make_salary_slip( - source_name, - target_doc=None, - employee=None, - as_print=False, - print_format=None, - for_preview=0, - ignore_permissions=False, -): - def postprocess(source, target): - if employee: - employee_details = frappe.db.get_value( - "Employee", employee, ["employee_name", "branch", "designation", "department"], as_dict=1 - ) - target.employee = employee - target.employee_name = employee_details.employee_name - target.branch = employee_details.branch - target.designation = employee_details.designation - target.department = employee_details.department - - target.run_method("process_salary_structure", for_preview=for_preview) - - doc = get_mapped_doc( - "Salary Structure", - source_name, - { - "Salary Structure": { - "doctype": "Salary Slip", - "field_map": { - "total_earning": "gross_pay", - "name": "salary_structure", - "currency": "currency", - }, - } - }, - target_doc, - postprocess, - ignore_child_tables=True, - ignore_permissions=ignore_permissions, - ) - - if cint(as_print): - doc.name = "Preview for {0}".format(employee) - return frappe.get_print(doc.doctype, doc.name, doc=doc, print_format=print_format) - else: - return doc - - -@frappe.whitelist() -def get_employees(salary_structure): - employees = frappe.get_list( - "Salary Structure Assignment", - filters={"salary_structure": salary_structure, "docstatus": 1}, - fields=["employee"], - ) - - if not employees: - frappe.throw( - _( - "There's no Employee with Salary Structure: {0}. Assign {1} to an Employee to preview Salary Slip" - ).format(salary_structure, salary_structure) - ) - - return list(set([d.employee for d in employees])) diff --git a/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py b/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py deleted file mode 100644 index cf363b410d..0000000000 --- a/erpnext/payroll/doctype/salary_structure/salary_structure_dashboard.py +++ /dev/null @@ -1,9 +0,0 @@ -def get_data(): - return { - "fieldname": "salary_structure", - "non_standard_fieldnames": {"Employee Grade": "default_salary_structure"}, - "transactions": [ - {"items": ["Salary Structure Assignment", "Salary Slip"]}, - {"items": ["Employee Grade"]}, - ], - } diff --git a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py b/erpnext/payroll/doctype/salary_structure/test_salary_structure.py deleted file mode 100644 index e9b5ed2261..0000000000 --- a/erpnext/payroll/doctype/salary_structure/test_salary_structure.py +++ /dev/null @@ -1,283 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and Contributors -# See license.txt - -import unittest - -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_years, date_diff, get_first_day, nowdate -from frappe.utils.make_random import get_random - -import erpnext -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import ( - create_payroll_period, -) -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - create_tax_slab, - make_deduction_salary_component, - make_earning_salary_component, - make_employee_salary_slip, -) -from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip - -test_dependencies = ["Fiscal Year"] - - -class TestSalaryStructure(FrappeTestCase): - def setUp(self): - for dt in ["Salary Slip", "Salary Structure", "Salary Structure Assignment"]: - frappe.db.sql("delete from `tab%s`" % dt) - - self.make_holiday_list() - frappe.db.set_value( - "Company", - erpnext.get_default_company(), - "default_holiday_list", - "Salary Structure Test Holiday List", - ) - make_employee("test_employee@salary.com") - make_employee("test_employee_2@salary.com") - - def make_holiday_list(self): - if not frappe.db.get_value("Holiday List", "Salary Structure Test Holiday List"): - holiday_list = frappe.get_doc( - { - "doctype": "Holiday List", - "holiday_list_name": "Salary Structure Test Holiday List", - "from_date": nowdate(), - "to_date": add_years(nowdate(), 1), - "weekly_off": "Sunday", - } - ).insert() - holiday_list.get_weekly_off_dates() - holiday_list.save() - - def test_salary_structure_deduction_based_on_gross_pay(self): - - emp = make_employee("test_employee_3@salary.com") - - sal_struct = make_salary_structure("Salary Structure 2", "Monthly", dont_submit=True) - - sal_struct.earnings = [sal_struct.earnings[0]] - sal_struct.earnings[0].amount_based_on_formula = 1 - sal_struct.earnings[0].formula = "base" - - sal_struct.deductions = [sal_struct.deductions[0]] - - sal_struct.deductions[0].amount_based_on_formula = 1 - sal_struct.deductions[0].condition = "gross_pay > 100" - sal_struct.deductions[0].formula = "gross_pay * 0.2" - - sal_struct.submit() - - assignment = create_salary_structure_assignment(emp, "Salary Structure 2") - ss = make_salary_slip(sal_struct.name, employee=emp) - - self.assertEqual(assignment.base * 0.2, ss.deductions[0].amount) - - def test_amount_totals(self): - frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 0) - sal_slip = frappe.get_value("Salary Slip", {"employee_name": "test_employee_2@salary.com"}) - if not sal_slip: - sal_slip = make_employee_salary_slip( - "test_employee_2@salary.com", "Monthly", "Salary Structure Sample" - ) - self.assertEqual(sal_slip.get("salary_structure"), "Salary Structure Sample") - self.assertEqual(sal_slip.get("earnings")[0].amount, 50000) - self.assertEqual(sal_slip.get("earnings")[1].amount, 3000) - self.assertEqual(sal_slip.get("earnings")[2].amount, 25000) - self.assertEqual(sal_slip.get("gross_pay"), 78000) - self.assertEqual(sal_slip.get("deductions")[0].amount, 200) - self.assertEqual(sal_slip.get("net_pay"), 78000 - sal_slip.get("total_deduction")) - - def test_whitespaces_in_formula_conditions_fields(self): - salary_structure = make_salary_structure("Salary Structure Sample", "Monthly", dont_submit=True) - - for row in salary_structure.earnings: - row.formula = "\n%s\n\n" % row.formula - row.condition = "\n%s\n\n" % row.condition - - for row in salary_structure.deductions: - row.formula = "\n%s\n\n" % row.formula - row.condition = "\n%s\n\n" % row.condition - - salary_structure.save() - - for row in salary_structure.earnings: - self.assertFalse("\n" in row.formula or "\n" in row.condition) - - for row in salary_structure.deductions: - self.assertFalse(("\n" in row.formula) or ("\n" in row.condition)) - - def test_salary_structures_assignment(self): - company_currency = erpnext.get_default_currency() - salary_structure = make_salary_structure( - "Salary Structure Sample", "Monthly", currency=company_currency - ) - employee = "test_assign_stucture@salary.com" - employee_doc_name = make_employee(employee) - # clear the already assigned stuctures - frappe.db.sql( - """delete from `tabSalary Structure Assignment` where employee=%s and salary_structure=%s """, - ("test_assign_stucture@salary.com", salary_structure.name), - ) - # test structure_assignment - salary_structure.assign_salary_structure( - employee=employee_doc_name, from_date="2013-01-01", base=5000, variable=200 - ) - salary_structure_assignment = frappe.get_doc( - "Salary Structure Assignment", {"employee": employee_doc_name, "from_date": "2013-01-01"} - ) - self.assertEqual(salary_structure_assignment.docstatus, 1) - self.assertEqual(salary_structure_assignment.base, 5000) - self.assertEqual(salary_structure_assignment.variable, 200) - - def test_employee_grade_defaults(self): - salary_structure = make_salary_structure( - "Salary Structure - Lead", "Monthly", currency="INR", company="_Test Company" - ) - create_employee_grade("Lead", salary_structure.name) - employee = make_employee("test_employee_grade@salary.com", company="_Test Company", grade="Lead") - - # structure assignment should have the default salary structure and base pay - salary_structure.assign_salary_structure(employee=employee, from_date=nowdate()) - structure, base = frappe.db.get_value( - "Salary Structure Assignment", - {"employee": employee, "salary_structure": salary_structure.name, "from_date": nowdate()}, - ["salary_structure", "base"], - ) - self.assertEqual(structure, salary_structure.name) - self.assertEqual(base, 50000) - - def test_multi_currency_salary_structure(self): - make_employee("test_muti_currency_employee@salary.com") - sal_struct = make_salary_structure("Salary Structure Multi Currency", "Monthly", currency="USD") - self.assertEqual(sal_struct.currency, "USD") - - -def make_salary_structure( - salary_structure, - payroll_frequency, - employee=None, - from_date=None, - dont_submit=False, - other_details=None, - test_tax=False, - company=None, - currency=erpnext.get_default_currency(), - payroll_period=None, - include_flexi_benefits=False, -): - if test_tax: - frappe.db.sql("""delete from `tabSalary Structure` where name=%s""", (salary_structure)) - - if frappe.db.exists("Salary Structure", salary_structure): - frappe.db.delete("Salary Structure", salary_structure) - - details = { - "doctype": "Salary Structure", - "name": salary_structure, - "company": company or erpnext.get_default_company(), - "earnings": make_earning_salary_component( - setup=True, - test_tax=test_tax, - company_list=["_Test Company"], - include_flexi_benefits=include_flexi_benefits, - ), - "deductions": make_deduction_salary_component( - setup=True, test_tax=test_tax, company_list=["_Test Company"] - ), - "payroll_frequency": payroll_frequency, - "payment_account": get_random("Account", filters={"account_currency": currency}), - "currency": currency, - } - if other_details and isinstance(other_details, dict): - details.update(other_details) - salary_structure_doc = frappe.get_doc(details) - salary_structure_doc.insert() - if not dont_submit: - salary_structure_doc.submit() - - filters = {"employee": employee, "docstatus": 1} - if not from_date and payroll_period: - from_date = payroll_period.start_date - - if from_date: - filters["from_date"] = from_date - - if ( - employee - and not frappe.db.get_value("Salary Structure Assignment", filters) - and salary_structure_doc.docstatus == 1 - ): - create_salary_structure_assignment( - employee, - salary_structure, - from_date=from_date, - company=company, - currency=currency, - payroll_period=payroll_period, - ) - - return salary_structure_doc - - -def create_salary_structure_assignment( - employee, - salary_structure, - from_date=None, - company=None, - currency=erpnext.get_default_currency(), - payroll_period=None, -): - - if frappe.db.exists("Salary Structure Assignment", {"employee": employee}): - frappe.db.sql("""delete from `tabSalary Structure Assignment` where employee=%s""", (employee)) - - if not payroll_period: - payroll_period = create_payroll_period() - - income_tax_slab = frappe.db.get_value("Income Tax Slab", {"currency": currency}) - - if not income_tax_slab: - income_tax_slab = create_tax_slab(payroll_period, allow_tax_exemption=True, currency=currency) - - salary_structure_assignment = frappe.new_doc("Salary Structure Assignment") - salary_structure_assignment.employee = employee - salary_structure_assignment.base = 50000 - salary_structure_assignment.variable = 5000 - - if not from_date: - from_date = get_first_day(nowdate()) - joining_date = frappe.get_cached_value("Employee", employee, "date_of_joining") - if date_diff(joining_date, from_date) > 0: - from_date = joining_date - - salary_structure_assignment.from_date = from_date - salary_structure_assignment.salary_structure = salary_structure - salary_structure_assignment.currency = currency - salary_structure_assignment.payroll_payable_account = get_payable_account(company) - salary_structure_assignment.company = company or erpnext.get_default_company() - salary_structure_assignment.save(ignore_permissions=True) - salary_structure_assignment.income_tax_slab = income_tax_slab - salary_structure_assignment.submit() - return salary_structure_assignment - - -def get_payable_account(company=None): - if not company: - company = erpnext.get_default_company() - return frappe.db.get_value("Company", company, "default_payroll_payable_account") - - -def create_employee_grade(grade, default_structure=None): - if not frappe.db.exists("Employee Grade", grade): - frappe.get_doc( - { - "doctype": "Employee Grade", - "__newname": grade, - "default_salary_structure": default_structure, - "default_base_pay": 50000, - } - ).insert() diff --git a/erpnext/payroll/doctype/salary_structure_assignment/__init__.py b/erpnext/payroll/doctype/salary_structure_assignment/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js deleted file mode 100644 index 220bfbfd65..0000000000 --- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.js +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Salary Structure Assignment', { - setup: function(frm) { - frm.set_query("employee", function() { - return { - query: "erpnext.controllers.queries.employee_query", - } - }); - frm.set_query("salary_structure", function() { - return { - filters: { - company: frm.doc.company, - docstatus: 1, - is_active: "Yes" - } - } - }); - - frm.set_query("income_tax_slab", function() { - return { - filters: { - company: frm.doc.company, - docstatus: 1, - disabled: 0, - currency: frm.doc.currency - } - }; - }); - - frm.set_query("payroll_payable_account", function() { - var company_currency = erpnext.get_currency(frm.doc.company); - return { - filters: { - "company": frm.doc.company, - "root_type": "Liability", - "is_group": 0, - "account_currency": ["in", [frm.doc.currency, company_currency]], - } - } - }); - - frm.set_query("cost_center", "payroll_cost_centers", function() { - return { - filters: { - "company": frm.doc.company, - "is_group": 0 - } - }; - }); - }, - - employee: function(frm) { - if (frm.doc.employee) { - frappe.call({ - method: "set_payroll_cost_centers", - doc: frm.doc, - callback: function(data) { - refresh_field("payroll_cost_centers"); - } - }); - } - else { - frm.set_value("payroll_cost_centers", []); - } - }, - - company: function(frm) { - if (frm.doc.company) { - frappe.db.get_value("Company", frm.doc.company, "default_payroll_payable_account", (r) => { - frm.set_value("payroll_payable_account", r.default_payroll_payable_account); - }); - } - } -}); diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json deleted file mode 100644 index 91d49a0738..0000000000 --- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "actions": [], - "allow_import": 1, - "autoname": "HR-SSA-.YY.-.MM.-.#####", - "creation": "2018-04-13 16:38:41.769237", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "employee", - "employee_name", - "department", - "grade", - "company", - "payroll_payable_account", - "column_break_6", - "designation", - "salary_structure", - "from_date", - "income_tax_slab", - "currency", - "section_break_7", - "base", - "column_break_9", - "variable", - "amended_from", - "section_break_17", - "payroll_cost_centers" - ], - "fields": [ - { - "fieldname": "employee", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Employee", - "options": "Employee", - "reqd": 1, - "search_index": 1 - }, - { - "fetch_from": "employee.employee_name", - "fieldname": "employee_name", - "fieldtype": "Data", - "label": "Employee Name", - "read_only": 1 - }, - { - "fetch_from": "employee.department", - "fieldname": "department", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Department", - "options": "Department", - "read_only": 1 - }, - { - "fetch_from": "employee.designation", - "fieldname": "designation", - "fieldtype": "Link", - "in_standard_filter": 1, - "label": "Designation", - "options": "Designation", - "read_only": 1 - }, - { - "fieldname": "column_break_6", - "fieldtype": "Column Break" - }, - { - "fetch_from": "grade.default_salary_structure", - "fetch_if_empty": 1, - "fieldname": "salary_structure", - "fieldtype": "Link", - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Salary Structure", - "options": "Salary Structure", - "reqd": 1, - "search_index": 1 - }, - { - "fieldname": "from_date", - "fieldtype": "Date", - "label": "From Date", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company", - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "section_break_7", - "fieldtype": "Section Break", - "label": "Base & Variable" - }, - { - "fetch_from": "grade.default_base_pay", - "fetch_if_empty": 1, - "fieldname": "base", - "fieldtype": "Currency", - "label": "Base", - "options": "currency" - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break" - }, - { - "fieldname": "variable", - "fieldtype": "Currency", - "label": "Variable", - "options": "currency" - }, - { - "fieldname": "amended_from", - "fieldtype": "Link", - "label": "Amended From", - "no_copy": 1, - "options": "Salary Structure Assignment", - "print_hide": 1, - "read_only": 1 - }, - { - "depends_on": "salary_structure", - "fieldname": "income_tax_slab", - "fieldtype": "Link", - "label": "Income Tax Slab", - "options": "Income Tax Slab" - }, - { - "depends_on": "eval:(doc.docstatus==1 || doc.salary_structure)", - "fetch_from": "salary_structure.currency", - "fieldname": "currency", - "fieldtype": "Link", - "label": "Currency", - "options": "Currency", - "print_hide": 1, - "read_only": 1, - "reqd": 1 - }, - { - "depends_on": "employee", - "fieldname": "payroll_payable_account", - "fieldtype": "Link", - "label": "Payroll Payable Account", - "options": "Account" - }, - { - "collapsible": 1, - "depends_on": "employee", - "fieldname": "section_break_17", - "fieldtype": "Section Break", - "label": "Payroll Cost Centers" - }, - { - "allow_on_submit": 1, - "fieldname": "payroll_cost_centers", - "fieldtype": "Table", - "label": "Cost Centers", - "options": "Employee Cost Center" - }, - { - "fetch_from": "employee.grade", - "fieldname": "grade", - "fieldtype": "Link", - "label": "Grade", - "options": "Employee Grade", - "read_only": 1 - } - ], - "is_submittable": 1, - "links": [], - "modified": "2022-05-06 12:18:36.972336", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Structure Assignment", - "naming_rule": "Expression (old style)", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "amend": 1, - "cancel": 1, - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR Manager", - "share": 1, - "submit": 1, - "write": 1 - }, - { - "create": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "HR User", - "share": 1, - "submit": 1, - "write": 1 - } - ], - "search_fields": "employee_name, salary_structure", - "sort_field": "modified", - "sort_order": "DESC", - "states": [], - "title_field": "employee_name", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py b/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py deleted file mode 100644 index 28b5eb136b..0000000000 --- a/erpnext/payroll/doctype/salary_structure_assignment/salary_structure_assignment.py +++ /dev/null @@ -1,134 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import flt, getdate - - -class DuplicateAssignment(frappe.ValidationError): - pass - - -class SalaryStructureAssignment(Document): - def validate(self): - self.validate_dates() - self.validate_income_tax_slab() - self.set_payroll_payable_account() - if not self.get("payroll_cost_centers"): - self.set_payroll_cost_centers() - - self.validate_cost_center_distribution() - - def validate_dates(self): - joining_date, relieving_date = frappe.db.get_value( - "Employee", self.employee, ["date_of_joining", "relieving_date"] - ) - - if self.from_date: - if frappe.db.exists( - "Salary Structure Assignment", - {"employee": self.employee, "from_date": self.from_date, "docstatus": 1}, - ): - frappe.throw(_("Salary Structure Assignment for Employee already exists"), DuplicateAssignment) - - if joining_date and getdate(self.from_date) < joining_date: - frappe.throw( - _("From Date {0} cannot be before employee's joining Date {1}").format( - self.from_date, joining_date - ) - ) - - # flag - old_employee is for migrating the old employees data via patch - if relieving_date and getdate(self.from_date) > relieving_date and not self.flags.old_employee: - frappe.throw( - _("From Date {0} cannot be after employee's relieving Date {1}").format( - self.from_date, relieving_date - ) - ) - - def validate_income_tax_slab(self): - if not self.income_tax_slab: - return - - income_tax_slab_currency = frappe.db.get_value( - "Income Tax Slab", self.income_tax_slab, "currency" - ) - if self.currency != income_tax_slab_currency: - frappe.throw( - _("Currency of selected Income Tax Slab should be {0} instead of {1}").format( - self.currency, income_tax_slab_currency - ) - ) - - def set_payroll_payable_account(self): - if not self.payroll_payable_account: - payroll_payable_account = frappe.db.get_value( - "Company", self.company, "default_payroll_payable_account" - ) - if not payroll_payable_account: - payroll_payable_account = frappe.db.get_value( - "Account", - { - "account_name": _("Payroll Payable"), - "company": self.company, - "account_currency": frappe.db.get_value("Company", self.company, "default_currency"), - "is_group": 0, - }, - ) - self.payroll_payable_account = payroll_payable_account - - @frappe.whitelist() - def set_payroll_cost_centers(self): - self.payroll_cost_centers = [] - default_payroll_cost_center = self.get_payroll_cost_center() - if default_payroll_cost_center: - self.append( - "payroll_cost_centers", {"cost_center": default_payroll_cost_center, "percentage": 100} - ) - - def get_payroll_cost_center(self): - payroll_cost_center = frappe.db.get_value("Employee", self.employee, "payroll_cost_center") - if not payroll_cost_center and self.department: - payroll_cost_center = frappe.db.get_value("Department", self.department, "payroll_cost_center") - - return payroll_cost_center - - def validate_cost_center_distribution(self): - if self.get("payroll_cost_centers"): - total_percentage = sum([flt(d.percentage) for d in self.get("payroll_cost_centers", [])]) - if total_percentage != 100: - frappe.throw(_("Total percentage against cost centers should be 100")) - - -def get_assigned_salary_structure(employee, on_date): - if not employee or not on_date: - return None - salary_structure = frappe.db.sql( - """ - select salary_structure from `tabSalary Structure Assignment` - where employee=%(employee)s - and docstatus = 1 - and %(on_date)s >= from_date order by from_date desc limit 1""", - { - "employee": employee, - "on_date": on_date, - }, - ) - return salary_structure[0][0] if salary_structure else None - - -@frappe.whitelist() -def get_employee_currency(employee): - employee_currency = frappe.db.get_value( - "Salary Structure Assignment", {"employee": employee}, "currency" - ) - if not employee_currency: - frappe.throw( - _("There is no Salary Structure assigned to {0}. First assign a Salary Stucture.").format( - employee - ) - ) - return employee_currency diff --git a/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py b/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py deleted file mode 100644 index 56dd0d0fe5..0000000000 --- a/erpnext/payroll/doctype/salary_structure_assignment/test_salary_structure_assignment.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestSalaryStructureAssignment(unittest.TestCase): - pass diff --git a/erpnext/payroll/doctype/taxable_salary_slab/__init__.py b/erpnext/payroll/doctype/taxable_salary_slab/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json b/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json deleted file mode 100644 index 65d3824f3a..0000000000 --- a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "actions": [], - "creation": "2018-04-13 17:42:13.516032", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "from_amount", - "to_amount", - "percent_deduction", - "condition", - "column_break_5", - "html_6" - ], - "fields": [ - { - "default": "0", - "fieldname": "from_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "From Amount", - "options": "currency", - "reqd": 1 - }, - { - "fieldname": "to_amount", - "fieldtype": "Currency", - "in_list_view": 1, - "label": "To Amount", - "options": "currency" - }, - { - "default": "0", - "fieldname": "percent_deduction", - "fieldtype": "Percent", - "in_list_view": 1, - "label": "Percent Deduction", - "reqd": 1 - }, - { - "fieldname": "condition", - "fieldtype": "Code", - "in_list_view": 1, - "label": "Condition" - }, - { - "fieldname": "column_break_5", - "fieldtype": "Column Break" - }, - { - "fieldname": "html_6", - "fieldtype": "HTML", - "options": "

Condition Examples

\n
    \n
  1. Applying tax if employee born between 31-12-1937 and 01-01-1958 (Employees aged 60 to 80)
    \nCondition: date_of_birth>date(1937, 12, 31) and date_of_birth<date(1958, 01, 01)

  2. Applying tax by employee gender
    \nCondition: gender==\"Male\"

  3. \n
  4. Applying tax by Salary Component
    \nCondition: base > 10000
" - } - ], - "istable": 1, - "links": [], - "modified": "2020-10-19 13:44:39.549337", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Taxable Salary Slab", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py b/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py deleted file mode 100644 index d1ccbe3858..0000000000 --- a/erpnext/payroll/doctype/taxable_salary_slab/taxable_salary_slab.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -# import frappe -from frappe.model.document import Document - - -class TaxableSalarySlab(Document): - pass diff --git a/erpnext/payroll/module_onboarding/payroll/payroll.json b/erpnext/payroll/module_onboarding/payroll/payroll.json deleted file mode 100644 index b5226b2aca..0000000000 --- a/erpnext/payroll/module_onboarding/payroll/payroll.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "allow_roles": [ - { - "role": "HR Manager" - }, - { - "role": "HR User" - } - ], - "creation": "2020-06-01 12:10:52.560472", - "docstatus": 0, - "doctype": "Module Onboarding", - "documentation_url": "https://docs.erpnext.com/docs/user/manual/en/human-resources/payroll-entry", - "idx": 0, - "is_complete": 0, - "modified": "2020-07-08 14:06:13.994310", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll", - "owner": "Administrator", - "steps": [ - { - "step": "Create Employee" - }, - { - "step": "Create Salary Component" - }, - { - "step": "Create Payroll Period" - }, - { - "step": "Create Income Tax Slab" - }, - { - "step": "Create Salary Structure" - }, - { - "step": "Assign Salary Structure" - }, - { - "step": "Create Salary Slip" - }, - { - "step": "Payroll Settings" - } - ], - "subtitle": "Salary, Compensation, and more.", - "success_message": "The Payroll Module is all set up!", - "title": "Let's Set Up the Payroll Module. " -} \ No newline at end of file diff --git a/erpnext/payroll/notification/as b/erpnext/payroll/notification/as deleted file mode 100644 index 05c2c1bec2..0000000000 --- a/erpnext/payroll/notification/as +++ /dev/null @@ -1 +0,0 @@ -update from `tabNotification` set module='Payroll' where name = "Retention Bonus" diff --git a/erpnext/payroll/notification/retention_bonus/__init__.py b/erpnext/payroll/notification/retention_bonus/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.json b/erpnext/payroll/notification/retention_bonus/retention_bonus.json deleted file mode 100644 index 37381fa942..0000000000 --- a/erpnext/payroll/notification/retention_bonus/retention_bonus.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "attach_print": 0, - "channel": "Email", - "condition": "doc.docstatus==1", - "creation": "2018-05-15 18:52:36.362838", - "date_changed": "bonus_payment_date", - "days_in_advance": 14, - "docstatus": 0, - "doctype": "Notification", - "document_type": "Retention Bonus", - "enabled": 1, - "event": "Days Before", - "idx": 0, - "is_standard": 1, - "message": "

{{ _(\"Hello\") }},

\n\n

{{ _(\"Retention Bonus for\") }} {{ doc.employee_name }} {{ _(\"due on\") }} {{ doc.bonus_payment_date }}

", - "modified": "2018-05-15 19:00:24.294418", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Retention Bonus", - "owner": "Administrator", - "recipients": [ - { - "email_by_role": "HR Manager" - } - ], - "subject": "Retention Bonus alert for {{ doc.employee }}" -} \ No newline at end of file diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.md b/erpnext/payroll/notification/retention_bonus/retention_bonus.md deleted file mode 100644 index 8f48193994..0000000000 --- a/erpnext/payroll/notification/retention_bonus/retention_bonus.md +++ /dev/null @@ -1,3 +0,0 @@ -

{{ _("Hello") }},

- -

{{ _("Retention Bonus for") }} {{ doc.employee_name }} {{ _("due on") }} {{ doc.bonus_payment_date }}

\ No newline at end of file diff --git a/erpnext/payroll/notification/retention_bonus/retention_bonus.py b/erpnext/payroll/notification/retention_bonus/retention_bonus.py deleted file mode 100644 index 02e3e93333..0000000000 --- a/erpnext/payroll/notification/retention_bonus/retention_bonus.py +++ /dev/null @@ -1,3 +0,0 @@ -def get_context(context): - # do your magic here - pass diff --git a/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json b/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json deleted file mode 100644 index fa5739b2f3..0000000000 --- a/erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:34.575627", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Employee Tax Exemption Declaration", - "dynamic_filters_json": "[[\"Employee Tax Exemption Declaration\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Employee Tax Exemption Declaration\",\"creation\",\"Timespan\",\"last year\",false],[\"Employee Tax Exemption Declaration\",\"docstatus\",\"=\",\"1\",false]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Declaration Submitted", - "modified": "2020-07-22 13:22:46.001099", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Total Declaration Submitted", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/payroll/number_card/total_incentive_given(last_month)/total_incentive_given(last_month).json b/erpnext/payroll/number_card/total_incentive_given(last_month)/total_incentive_given(last_month).json deleted file mode 100644 index 2106706173..0000000000 --- a/erpnext/payroll/number_card/total_incentive_given(last_month)/total_incentive_given(last_month).json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "aggregate_function_based_on": "incentive_amount", - "creation": "2020-07-22 11:56:34.599047", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Employee Incentive", - "dynamic_filters_json": "", - "filters_json": "[[\"Employee Incentive\",\"docstatus\",\"=\",\"1\",false],[\"Employee Incentive\",\"payroll_date\",\"Timespan\",\"last year\",false]]", - "function": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Incentive Given(Last month)", - "modified": "2020-07-23 12:05:26.963616", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Total Incentive Given(Last month)", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/payroll/number_card/total_outgoing_salary(last_month)/total_outgoing_salary(last_month).json b/erpnext/payroll/number_card/total_outgoing_salary(last_month)/total_outgoing_salary(last_month).json deleted file mode 100644 index 44ee72203f..0000000000 --- a/erpnext/payroll/number_card/total_outgoing_salary(last_month)/total_outgoing_salary(last_month).json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "aggregate_function_based_on": "rounded_total", - "creation": "2020-07-22 11:56:34.626019", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Salary Slip", - "dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]", - "function": "Sum", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Outgoing Salary(Last month)", - "modified": "2020-07-22 13:54:14.678954", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Total Outgoing Salary(Last month)", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json b/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json deleted file mode 100644 index 030935f96d..0000000000 --- a/erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "creation": "2020-07-22 11:56:34.688843", - "docstatus": 0, - "doctype": "Number Card", - "document_type": "Salary Structure", - "dynamic_filters_json": "[[\"Salary Structure\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]", - "filters_json": "[[\"Salary Structure\",\"docstatus\",\"=\",\"1\",false]]", - "function": "Count", - "idx": 0, - "is_public": 1, - "is_standard": 1, - "label": "Total Salary Structure", - "modified": "2020-07-22 13:24:03.938846", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Total Salary Structure", - "owner": "Administrator", - "show_percentage_stats": 1, - "stats_time_interval": "Monthly", - "type": "Document Type" -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json b/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json deleted file mode 100644 index 8a07b10276..0000000000 --- a/erpnext/payroll/onboarding_step/assign_salary_structure/assign_salary_structure.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:58:43.927590", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 1, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-01 11:58:43.927590", - "modified_by": "Administrator", - "name": "Assign Salary Structure", - "owner": "Administrator", - "reference_document": "Salary Structure Assignment", - "show_full_form": 1, - "title": "Assign Salary Structure", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_employee/create_employee.json b/erpnext/payroll/onboarding_step/create_employee/create_employee.json deleted file mode 100644 index 3aa33c6d86..0000000000 --- a/erpnext/payroll/onboarding_step/create_employee/create_employee.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-05-14 11:43:25.561152", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 1, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-05-14 12:26:28.629074", - "modified_by": "Administrator", - "name": "Create Employee", - "owner": "Administrator", - "reference_document": "Employee", - "show_full_form": 0, - "title": "Create Employee", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json b/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json deleted file mode 100644 index faada7e411..0000000000 --- a/erpnext/payroll/onboarding_step/create_income_tax_slab/create_income_tax_slab.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:54:54.823796", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-01 11:54:54.823796", - "modified_by": "Administrator", - "name": "Create Income Tax Slab", - "owner": "Administrator", - "reference_document": "Income Tax Slab", - "show_full_form": 1, - "title": "Create Income Tax Slab", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json b/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json deleted file mode 100644 index b1a7cc2734..0000000000 --- a/erpnext/payroll/onboarding_step/create_payroll_period/create_payroll_period.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:53:54.553947", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 1, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-29 11:53:54.553947", - "modified_by": "Administrator", - "name": "Create Payroll Period", - "owner": "Administrator", - "reference_document": "Payroll Period", - "show_full_form": 0, - "title": "Create Payroll Period", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json b/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json deleted file mode 100644 index 002d819618..0000000000 --- a/erpnext/payroll/onboarding_step/create_salary_component/create_salary_component.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:57:04.002073", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-01 11:57:04.002073", - "modified_by": "Administrator", - "name": "Create Salary Component", - "owner": "Administrator", - "reference_document": "Salary Component", - "show_full_form": 1, - "title": "Create Salary Component", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json b/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json deleted file mode 100644 index 2aa31f485f..0000000000 --- a/erpnext/payroll/onboarding_step/create_salary_slip/create_salary_slip.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:59:29.972393", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 1, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-01 11:59:29.972393", - "modified_by": "Administrator", - "name": "Create Salary Slip", - "owner": "Administrator", - "reference_document": "Salary Slip", - "show_full_form": 1, - "title": "Create Salary Slip", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json b/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json deleted file mode 100644 index 11d8327259..0000000000 --- a/erpnext/payroll/onboarding_step/create_salary_structure/create_salary_structure.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Create Entry", - "creation": "2020-06-01 11:57:54.527808", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 1, - "is_single": 0, - "is_skipped": 0, - "modified": "2020-06-01 11:57:54.527808", - "modified_by": "Administrator", - "name": "Create Salary Structure", - "owner": "Administrator", - "reference_document": "Salary Structure", - "show_full_form": 1, - "title": "Create Salary Structure", - "validate_action": 1 -} \ No newline at end of file diff --git a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json b/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json deleted file mode 100644 index a7cf7bf988..0000000000 --- a/erpnext/payroll/onboarding_step/payroll_settings/payroll_settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "action": "Update Settings", - "creation": "2020-06-04 16:34:29.664917", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 0, - "is_complete": 0, - "is_mandatory": 0, - "is_single": 1, - "is_skipped": 0, - "modified": "2020-06-29 16:34:29.664917", - "modified_by": "Administrator", - "name": "Payroll Settings", - "owner": "Administrator", - "reference_document": "Payroll Settings", - "show_full_form": 0, - "title": "Payroll Settings", - "validate_action": 0 -} \ No newline at end of file diff --git a/erpnext/payroll/payroll_dashboard/payroll/payroll.json b/erpnext/payroll/payroll_dashboard/payroll/payroll.json deleted file mode 100644 index fb49d88de7..0000000000 --- a/erpnext/payroll/payroll_dashboard/payroll/payroll.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cards": [ - { - "card": "Total Declaration Submitted" - }, - { - "card": "Total Salary Structure" - }, - { - "card": "Total Incentive Given(Last month)" - }, - { - "card": "Total Outgoing Salary(Last month)" - } - ], - "charts": [ - { - "chart": "Outgoing Salary", - "width": "Full" - }, - { - "chart": "Designation Wise Salary(Last Month)", - "width": "Half" - }, - { - "chart": "Department Wise Salary(Last Month)", - "width": "Half" - } - ], - "creation": "2020-07-22 11:56:34.727185", - "dashboard_name": "Payroll", - "docstatus": 0, - "doctype": "Dashboard", - "idx": 0, - "is_default": 1, - "is_standard": 1, - "modified": "2020-07-22 13:20:18.608969", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll", - "owner": "Administrator" -} \ No newline at end of file diff --git a/erpnext/payroll/print_format/__init__.py b/erpnext/payroll/print_format/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/__init__.py b/erpnext/payroll/print_format/salary_slip_based_on_timesheet/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json b/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json deleted file mode 100644 index d5fee6b5b8..0000000000 --- a/erpnext/payroll/print_format/salary_slip_based_on_timesheet/salary_slip_based_on_timesheet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "creation": "2016-07-07 12:38:32.447281", - "custom_format": 0, - "disabled": 0, - "doc_type": "Salary Slip", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"HTML\", \"options\": \"

{{doc.name}}


\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\"}, {\"print_hide\": 0, \"fieldname\": \"department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_hours\"}, {\"print_hide\": 0, \"fieldname\": \"hour_rate\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"time_sheet\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"working_hours\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"timesheets\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\"}, {\"fieldtype\": \"Section Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\"}]", - "idx": 0, - "modified": "2016-08-21 21:02:59.896033", - "modified_by": "Administrator", - "name": "Salary Slip based on Timesheet", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Jinja", - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/payroll/print_format/salary_slip_standard/__init__.py b/erpnext/payroll/print_format/salary_slip_standard/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json b/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json deleted file mode 100644 index 98a4435a50..0000000000 --- a/erpnext/payroll/print_format/salary_slip_standard/salary_slip_standard.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "align_labels_right": 0, - "creation": "2016-07-07 11:45:14.872204", - "custom_format": 0, - "disabled": 0, - "doc_type": "Salary Slip", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"employee\", \"label\": \"Employee\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"employee_name\", \"label\": \"Employee Name\"}, {\"print_hide\": 0, \"fieldname\": \"department\", \"label\": \"Department\"}, {\"print_hide\": 0, \"fieldname\": \"designation\", \"label\": \"Designation\"}, {\"print_hide\": 0, \"fieldname\": \"branch\", \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"start_date\", \"label\": \"Start Date\"}, {\"print_hide\": 0, \"fieldname\": \"end_date\", \"label\": \"End Date\"}, {\"print_hide\": 0, \"fieldname\": \"total_working_days\", \"label\": \"Working Days\"}, {\"print_hide\": 0, \"fieldname\": \"leave_without_pay\", \"label\": \"Leave Without Pay\"}, {\"print_hide\": 0, \"fieldname\": \"payment_days\", \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"earnings\", \"label\": \"Earnings\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"salary_component\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"deductions\", \"label\": \"Deductions\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"gross_pay\", \"label\": \"Gross Pay\"}, {\"print_hide\": 0, \"fieldname\": \"total_deduction\", \"label\": \"Total Deduction\"}, {\"print_hide\": 0, \"fieldname\": \"net_pay\", \"label\": \"Net Pay\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"total_in_words\", \"label\": \"Total in words\"}]", - "idx": 0, - "line_breaks": 0, - "modified": "2018-07-24 19:31:39.040701", - "modified_by": "Administrator", - "module": "HR", - "name": "Salary Slip Standard", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Jinja", - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/payroll/print_format/salary_slip_with_year_to_date/__init__.py b/erpnext/payroll/print_format/salary_slip_with_year_to_date/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json b/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json deleted file mode 100644 index 71ba37f6ed..0000000000 --- a/erpnext/payroll/print_format/salary_slip_with_year_to_date/salary_slip_with_year_to_date.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2021-01-14 09:56:42.393623", - "custom_format": 0, - "default_print_language": "en", - "disabled": 0, - "doc_type": "Salary Slip", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"

{{doc.name}}

\\n
\\n
\\n
\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"employee\", \"print_hide\": 0, \"label\": \"Employee\"}, {\"fieldname\": \"company\", \"print_hide\": 0, \"label\": \"Company\"}, {\"fieldname\": \"employee_name\", \"print_hide\": 0, \"label\": \"Employee Name\"}, {\"fieldname\": \"department\", \"print_hide\": 0, \"label\": \"Department\"}, {\"fieldname\": \"designation\", \"print_hide\": 0, \"label\": \"Designation\"}, {\"fieldname\": \"branch\", \"print_hide\": 0, \"label\": \"Branch\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"start_date\", \"print_hide\": 0, \"label\": \"Start Date\"}, {\"fieldname\": \"end_date\", \"print_hide\": 0, \"label\": \"End Date\"}, {\"fieldname\": \"total_working_days\", \"print_hide\": 0, \"label\": \"Working Days\"}, {\"fieldname\": \"leave_without_pay\", \"print_hide\": 0, \"label\": \"Leave Without Pay\"}, {\"fieldname\": \"payment_days\", \"print_hide\": 0, \"label\": \"Payment Days\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"earnings\", \"print_hide\": 0, \"label\": \"Earnings\", \"visible_columns\": [{\"fieldname\": \"salary_component\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"amount\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"year_to_date\", \"print_width\": \"\", \"print_hide\": 0}]}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"deductions\", \"print_hide\": 0, \"label\": \"Deductions\", \"visible_columns\": [{\"fieldname\": \"salary_component\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"amount\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"year_to_date\", \"print_width\": \"\", \"print_hide\": 0}, {\"fieldname\": \"depends_on_payment_days\", \"print_width\": \"\", \"print_hide\": 0}]}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"gross_pay\", \"print_hide\": 0, \"label\": \"Gross Pay\"}, {\"fieldname\": \"total_deduction\", \"print_hide\": 0, \"label\": \"Total Deduction\"}, {\"fieldname\": \"net_pay\", \"print_hide\": 0, \"label\": \"Net Pay\"}, {\"fieldname\": \"rounded_total\", \"print_hide\": 0, \"label\": \"Rounded Total\"}, {\"fieldname\": \"total_in_words\", \"print_hide\": 0, \"label\": \"Total in words\"}, {\"fieldtype\": \"Section Break\", \"label\": \"net pay info\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldname\": \"year_to_date\", \"print_hide\": 0, \"label\": \"Year To Date\"}, {\"fieldname\": \"month_to_date\", \"print_hide\": 0, \"label\": \"Month To Date\"}]", - "idx": 0, - "line_breaks": 0, - "modified": "2021-01-14 10:03:45.283725", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Slip with Year to Date", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/payroll/report/__init__.py b/erpnext/payroll/report/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/bank_remittance/__init__.py b/erpnext/payroll/report/bank_remittance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.js b/erpnext/payroll/report/bank_remittance/bank_remittance.js deleted file mode 100644 index 8b75b4face..0000000000 --- a/erpnext/payroll/report/bank_remittance/bank_remittance.js +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Bank Remittance"] = { - "filters": [ - { - fieldname:"company", - label: __("Company"), - fieldtype: "Link", - options: "Company", - default: frappe.defaults.get_user_default("Company"), - reqd: 1 - }, - { - fieldname:"from_date", - label: __("From Date"), - fieldtype: "Date", - }, - { - fieldname:"to_date", - label: __("To Date"), - fieldtype: "Date", - }, - - ] -} diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.json b/erpnext/payroll/report/bank_remittance/bank_remittance.json deleted file mode 100644 index 2a697b2589..0000000000 --- a/erpnext/payroll/report/bank_remittance/bank_remittance.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2019-03-26 16:57:52.558895", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-05-28 00:08:08.097494", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Bank Remittance", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Payroll Entry", - "report_name": "Bank Remittance", - "report_type": "Script Report", - "roles": [ - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/bank_remittance/bank_remittance.py b/erpnext/payroll/report/bank_remittance/bank_remittance.py deleted file mode 100644 index 9d8efff821..0000000000 --- a/erpnext/payroll/report/bank_remittance/bank_remittance.py +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _, get_all - - -def execute(filters=None): - columns = [ - { - "label": _("Payroll Number"), - "fieldtype": "Link", - "fieldname": "payroll_no", - "options": "Payroll Entry", - "width": 150, - }, - { - "label": _("Debit A/C Number"), - "fieldtype": "Int", - "fieldname": "debit_account", - "hidden": 1, - "width": 200, - }, - {"label": _("Payment Date"), "fieldtype": "Data", "fieldname": "payment_date", "width": 100}, - { - "label": _("Employee Name"), - "fieldtype": "Link", - "fieldname": "employee_name", - "options": "Employee", - "width": 200, - }, - {"label": _("Bank Name"), "fieldtype": "Data", "fieldname": "bank_name", "width": 50}, - { - "label": _("Employee A/C Number"), - "fieldtype": "Int", - "fieldname": "employee_account_no", - "width": 50, - }, - ] - - if frappe.db.has_column("Employee", "ifsc_code"): - columns.append( - {"label": _("IFSC Code"), "fieldtype": "Data", "fieldname": "bank_code", "width": 100} - ) - - columns += [ - {"label": _("Currency"), "fieldtype": "Data", "fieldname": "currency", "width": 50}, - { - "label": _("Net Salary Amount"), - "fieldtype": "Currency", - "options": "currency", - "fieldname": "amount", - "width": 100, - }, - ] - - data = [] - - accounts = get_bank_accounts() - payroll_entries = get_payroll_entries(accounts, filters) - salary_slips = get_salary_slips(payroll_entries) - - if frappe.db.has_column("Employee", "ifsc_code"): - get_emp_bank_ifsc_code(salary_slips) - - for salary in salary_slips: - if ( - salary.bank_name - and salary.bank_account_no - and salary.debit_acc_no - and salary.status in ["Submitted", "Paid"] - ): - row = { - "payroll_no": salary.payroll_entry, - "debit_account": salary.debit_acc_no, - "payment_date": frappe.utils.formatdate(salary.modified.strftime("%Y-%m-%d")), - "bank_name": salary.bank_name, - "employee_account_no": salary.bank_account_no, - "bank_code": salary.ifsc_code, - "employee_name": salary.employee + ": " + salary.employee_name, - "currency": frappe.get_cached_value("Company", filters.company, "default_currency"), - "amount": salary.net_pay, - } - data.append(row) - - return columns, data - - -def get_bank_accounts(): - accounts = [d.name for d in get_all("Account", filters={"account_type": "Bank"})] - return accounts - - -def get_payroll_entries(accounts, filters): - payroll_filter = [ - ("payment_account", "IN", accounts), - ("number_of_employees", ">", 0), - ("Company", "=", filters.company), - ] - if filters.to_date: - payroll_filter.append(("posting_date", "<", filters.to_date)) - - if filters.from_date: - payroll_filter.append(("posting_date", ">", filters.from_date)) - - entries = get_all("Payroll Entry", payroll_filter, ["name", "payment_account"]) - - payment_accounts = [d.payment_account for d in entries] - entries = set_company_account(payment_accounts, entries) - return entries - - -def get_salary_slips(payroll_entries): - payroll = [d.name for d in payroll_entries] - salary_slips = get_all( - "Salary Slip", - filters=[("payroll_entry", "IN", payroll)], - fields=[ - "modified", - "net_pay", - "bank_name", - "bank_account_no", - "payroll_entry", - "employee", - "employee_name", - "status", - ], - ) - - payroll_entry_map = {} - for entry in payroll_entries: - payroll_entry_map[entry.name] = entry - - # appending company debit accounts - for slip in salary_slips: - if slip.payroll_entry: - slip["debit_acc_no"] = payroll_entry_map[slip.payroll_entry]["company_account"] - else: - slip["debit_acc_no"] = None - - return salary_slips - - -def get_emp_bank_ifsc_code(salary_slips): - emp_names = [d.employee for d in salary_slips] - ifsc_codes = get_all("Employee", [("name", "IN", emp_names)], ["ifsc_code", "name"]) - - ifsc_codes_map = {} - for code in ifsc_codes: - ifsc_codes_map[code.name] = code - - for slip in salary_slips: - slip["ifsc_code"] = ifsc_codes_map[code.name]["ifsc_code"] - - return salary_slips - - -def set_company_account(payment_accounts, payroll_entries): - company_accounts = get_all( - "Bank Account", [("account", "in", payment_accounts)], ["account", "bank_account_no"] - ) - company_accounts_map = {} - for acc in company_accounts: - company_accounts_map[acc.account] = acc - - for entry in payroll_entries: - company_account = "" - if entry.payment_account in company_accounts_map: - company_account = company_accounts_map[entry.payment_account]["bank_account_no"] - entry["company_account"] = company_account - - return payroll_entries diff --git a/erpnext/payroll/report/income_tax_computation/__init__.py b/erpnext/payroll/report/income_tax_computation/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.js b/erpnext/payroll/report/income_tax_computation/income_tax_computation.js deleted file mode 100644 index 26e463f268..0000000000 --- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Income Tax Computation"] = { - "filters": [ - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "width": "100px", - "reqd": 1 - }, - { - "fieldname":"payroll_period", - "label": __("Payroll Period"), - "fieldtype": "Link", - "options": "Payroll Period", - "width": "100px", - "reqd": 1 - }, - { - "fieldname":"employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee", - "width": "100px" - }, - { - "fieldname":"department", - "label": __("Department"), - "fieldtype": "Link", - "options": "Department", - "width": "100px", - }, - { - "fieldname":"consider_tax_exemption_declaration", - "label": __("Consider Tax Exemption Declaration"), - "fieldtype": "Check", - "width": "180px" - } - ] -}; - - diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.json b/erpnext/payroll/report/income_tax_computation/income_tax_computation.json deleted file mode 100644 index 7cb5b2270c..0000000000 --- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "add_total_row": 0, - "columns": [], - "creation": "2022-02-17 17:19:30.921422", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "filters": [], - "idx": 0, - "is_standard": "Yes", - "letter_head": "", - "modified": "2022-02-23 13:07:30.347861", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Income Tax Computation", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Income Tax Computation", - "report_type": "Script Report", - "roles": [ - { - "role": "Employee" - }, - { - "role": "HR User" - }, - { - "role": "HR Manager" - }, - { - "role": "Employee Self Service" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/income_tax_computation/income_tax_computation.py b/erpnext/payroll/report/income_tax_computation/income_tax_computation.py deleted file mode 100644 index 739ed8eb2d..0000000000 --- a/erpnext/payroll/report/income_tax_computation/income_tax_computation.py +++ /dev/null @@ -1,513 +0,0 @@ -# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _, scrub -from frappe.query_builder.functions import Sum -from frappe.utils import add_days, flt, getdate, rounded - -from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_start_end_dates -from erpnext.payroll.doctype.salary_slip.salary_slip import calculate_tax_by_tax_slab - - -def execute(filters=None): - return IncomeTaxComputationReport(filters).run() - - -class IncomeTaxComputationReport(object): - def __init__(self, filters=None): - self.filters = frappe._dict(filters or {}) - self.columns = [] - self.data = [] - self.employees = frappe._dict() - self.payroll_period_start_date = None - self.payroll_period_end_date = None - if self.filters.payroll_period: - self.payroll_period_start_date, self.payroll_period_end_date = frappe.db.get_value( - "Payroll Period", self.filters.payroll_period, ["start_date", "end_date"] - ) - - def run(self): - self.get_fixed_columns() - self.get_data() - return self.columns, self.data - - def get_data(self): - self.get_employee_details() - self.get_future_salary_slips() - self.get_ctc() - self.get_tax_exempted_earnings_and_deductions() - self.get_employee_tax_exemptions() - self.get_hra() - self.get_standard_tax_exemption() - self.get_total_taxable_amount() - self.get_applicable_tax() - self.get_total_deducted_tax() - self.get_payable_tax() - - self.data = list(self.employees.values()) - - def get_employee_details(self): - filters, or_filters = self.get_employee_filters() - fields = [ - "name as employee", - "employee_name", - "department", - "designation", - "date_of_joining", - "relieving_date", - ] - - employees = frappe.get_all("Employee", filters=filters, or_filters=or_filters, fields=fields) - ss_assignments = self.get_ss_assignments([d.employee for d in employees]) - - for d in employees: - if d.employee in list(ss_assignments.keys()): - d.update(ss_assignments[d.employee]) - self.employees.setdefault(d.employee, d) - - if not self.employees: - frappe.throw(_("No employees found with selected filters and active salary structure")) - - def get_employee_filters(self): - filters = {"company": self.filters.company} - or_filters = { - "status": "Active", - "relieving_date": ["between", [self.payroll_period_start_date, self.payroll_period_end_date]], - } - if self.filters.employee: - filters = {"name": self.filters.employee} - elif self.filters.department: - filters.update({"department": self.filters.department}) - - return filters, or_filters - - def get_ss_assignments(self, employees): - ss_assignments = frappe.get_all( - "Salary Structure Assignment", - filters={ - "employee": ["in", employees], - "docstatus": 1, - "salary_structure": ["is", "set"], - "income_tax_slab": ["is", "set"], - }, - fields=["employee", "income_tax_slab", "salary_structure"], - order_by="from_date desc", - ) - - employee_ss_assignments = frappe._dict() - for d in ss_assignments: - if d.employee not in list(employee_ss_assignments.keys()): - tax_slab = frappe.get_cached_value( - "Income Tax Slab", d.income_tax_slab, ["allow_tax_exemption", "disabled"], as_dict=1 - ) - - if tax_slab and not tax_slab.disabled: - employee_ss_assignments.setdefault( - d.employee, - { - "salary_structure": d.salary_structure, - "income_tax_slab": d.income_tax_slab, - "allow_tax_exemption": tax_slab.allow_tax_exemption, - }, - ) - return employee_ss_assignments - - def get_future_salary_slips(self): - self.future_salary_slips = frappe._dict() - for employee in list(self.employees.keys()): - last_ss = self.get_last_salary_slip(employee) - if last_ss and last_ss.end_date == self.payroll_period_end_date: - continue - - relieving_date = self.employees[employee].get("relieving_date", "") - if last_ss: - ss_start_date = add_days(last_ss.end_date, 1) - else: - ss_start_date = self.payroll_period_start_date - last_ss = frappe._dict( - { - "payroll_frequency": "Monthly", - "salary_structure": self.employees[employee].get("salary_structure"), - } - ) - - while getdate(ss_start_date) < getdate(self.payroll_period_end_date) and ( - not relieving_date or getdate(ss_start_date) < relieving_date - ): - ss_end_date = get_start_end_dates(last_ss.payroll_frequency, ss_start_date).end_date - - ss = frappe.new_doc("Salary Slip") - ss.employee = employee - ss.start_date = ss_start_date - ss.end_date = ss_end_date - ss.salary_structure = last_ss.salary_structure - ss.payroll_frequency = last_ss.payroll_frequency - ss.company = self.filters.company - try: - ss.process_salary_structure(for_preview=1) - self.future_salary_slips.setdefault(employee, []).append(ss.as_dict()) - except Exception: - break - - ss_start_date = add_days(ss_end_date, 1) - - def get_last_salary_slip(self, employee): - last_salary_slip = frappe.db.get_value( - "Salary Slip", - { - "employee": employee, - "docstatus": 1, - "start_date": ["between", [self.payroll_period_start_date, self.payroll_period_end_date]], - }, - ["start_date", "end_date", "salary_structure", "payroll_frequency"], - order_by="start_date desc", - as_dict=1, - ) - - return last_salary_slip - - def get_ctc(self): - # Get total earnings from existing salary slip - ss = frappe.qb.DocType("Salary Slip") - existing_ss = frappe._dict( - ( - frappe.qb.from_(ss) - .select(ss.employee, Sum(ss.base_gross_pay).as_("amount")) - .where(ss.docstatus == 1) - .where(ss.employee.isin(list(self.employees.keys()))) - .where(ss.start_date >= self.payroll_period_start_date) - .where(ss.end_date <= self.payroll_period_end_date) - .groupby(ss.employee) - ).run() - ) - - for employee in list(self.employees.keys()): - future_ss_earnings = self.get_future_earnings(employee) - ctc = flt(existing_ss.get(employee)) + future_ss_earnings - - self.employees[employee].setdefault("ctc", ctc) - - def get_future_earnings(self, employee): - future_earnings = 0.0 - for ss in self.future_salary_slips.get(employee, []): - future_earnings += flt(ss.base_gross_pay) - - return future_earnings - - def get_tax_exempted_earnings_and_deductions(self): - tax_exempted_components = self.get_tax_exempted_components() - - # Get component totals from existing salary slips - ss = frappe.qb.DocType("Salary Slip") - ss_comps = frappe.qb.DocType("Salary Detail") - - records = ( - frappe.qb.from_(ss) - .inner_join(ss_comps) - .on(ss.name == ss_comps.parent) - .select(ss.name, ss.employee, ss_comps.salary_component, Sum(ss_comps.amount).as_("amount")) - .where(ss.docstatus == 1) - .where(ss.employee.isin(list(self.employees.keys()))) - .where(ss_comps.salary_component.isin(tax_exempted_components)) - .where(ss.start_date >= self.payroll_period_start_date) - .where(ss.end_date <= self.payroll_period_end_date) - .groupby(ss.employee, ss_comps.salary_component) - ).run(as_dict=True) - - existing_ss_exemptions = frappe._dict() - for d in records: - existing_ss_exemptions.setdefault(d.employee, {}).setdefault( - scrub(d.salary_component), d.amount - ) - - for employee in list(self.employees.keys()): - if not self.employees[employee]["allow_tax_exemption"]: - continue - - exemptions = existing_ss_exemptions.get(employee, {}) - self.add_exemptions_from_future_salary_slips(employee, exemptions) - self.employees[employee].update(exemptions) - - total_exemptions = sum(list(exemptions.values())) - self.add_to_total_exemption(employee, total_exemptions) - - def add_exemptions_from_future_salary_slips(self, employee, exemptions): - for ss in self.future_salary_slips.get(employee, []): - for e in ss.earnings: - if not e.is_tax_applicable: - exemptions.setdefault(scrub(e.salary_component), 0) - exemptions[scrub(e.salary_component)] += flt(e.amount) - - for d in ss.deductions: - if d.exempted_from_income_tax: - exemptions.setdefault(scrub(d.salary_component), 0) - exemptions[scrub(d.salary_component)] += flt(d.amount) - - return exemptions - - def get_tax_exempted_components(self): - # nontaxable earning components - nontaxable_earning_components = [ - d.name - for d in frappe.get_all( - "Salary Component", {"type": "Earning", "is_tax_applicable": 0, "disabled": 0} - ) - ] - - # tax exempted deduction components - tax_exempted_deduction_components = [ - d.name - for d in frappe.get_all( - "Salary Component", {"type": "Deduction", "exempted_from_income_tax": 1, "disabled": 0} - ) - ] - - tax_exempted_components = nontaxable_earning_components + tax_exempted_deduction_components - - # Add columns - for d in tax_exempted_components: - self.add_column(d) - - return tax_exempted_components - - def add_to_total_exemption(self, employee, amount): - self.employees[employee].setdefault("total_exemption", 0) - self.employees[employee]["total_exemption"] += amount - - def get_employee_tax_exemptions(self): - # add columns - exemption_categories = frappe.get_all("Employee Tax Exemption Category", {"is_active": 1}) - for d in exemption_categories: - self.add_column(d.name) - - self.employees_with_proofs = [] - self.get_tax_exemptions("Employee Tax Exemption Proof Submission") - if self.filters.consider_tax_exemption_declaration: - self.get_tax_exemptions("Employee Tax Exemption Declaration") - - def get_tax_exemptions(self, source): - # Get category-wise exmeptions based on submitted proofs or declarations - if source == "Employee Tax Exemption Proof Submission": - child_doctype = "Employee Tax Exemption Proof Submission Detail" - else: - child_doctype = "Employee Tax Exemption Declaration Category" - - max_exemptions = self.get_max_exemptions_based_on_category() - - par = frappe.qb.DocType(source) - child = frappe.qb.DocType(child_doctype) - - records = ( - frappe.qb.from_(par) - .inner_join(child) - .on(par.name == child.parent) - .select(par.employee, child.exemption_category, Sum(child.amount).as_("amount")) - .where(par.docstatus == 1) - .where(par.employee.isin(list(self.employees.keys()))) - .where(par.payroll_period == self.filters.payroll_period) - .groupby(par.employee, child.exemption_category) - ).run(as_dict=True) - - for d in records: - if not self.employees[d.employee]["allow_tax_exemption"]: - continue - - if source == "Employee Tax Exemption Declaration" and d.employee in self.employees_with_proofs: - continue - - amount = flt(d.amount) - max_eligible_amount = flt(max_exemptions.get(d.exemption_category)) - if max_eligible_amount and amount > max_eligible_amount: - amount = max_eligible_amount - - self.employees[d.employee].setdefault(scrub(d.exemption_category), amount) - self.add_to_total_exemption(d.employee, amount) - - if ( - source == "Employee Tax Exemption Proof Submission" - and d.employee not in self.employees_with_proofs - ): - self.employees_with_proofs.append(d.employee) - - def get_max_exemptions_based_on_category(self): - return dict( - frappe.get_all( - "Employee Tax Exemption Category", - filters={"is_active": 1}, - fields=["name", "max_amount"], - as_list=1, - ) - ) - - def get_hra(self): - if not frappe.get_meta("Employee Tax Exemption Declaration").has_field("monthly_house_rent"): - return - - self.add_column("HRA") - - self.employees_with_proofs = [] - self.get_eligible_hra("Employee Tax Exemption Proof Submission") - if self.filters.consider_tax_exemption_declaration: - self.get_eligible_hra("Employee Tax Exemption Declaration") - - def get_eligible_hra(self, source): - if source == "Employee Tax Exemption Proof Submission": - hra_amount_field = "total_eligible_hra_exemption" - else: - hra_amount_field = "annual_hra_exemption" - - records = frappe.get_all( - source, - filters={ - "docstatus": 1, - "employee": ["in", list(self.employees.keys())], - "payroll_period": self.filters.payroll_period, - }, - fields=["employee", hra_amount_field], - as_list=1, - ) - - for d in records: - if not self.employees[d[0]]["allow_tax_exemption"]: - continue - - if d[0] not in self.employees_with_proofs: - self.employees[d[0]].setdefault("hra", d[1]) - self.add_to_total_exemption(d[0], d[1]) - self.employees_with_proofs.append(d[0]) - - def get_standard_tax_exemption(self): - self.add_column("Standard Tax Exemption") - - standard_exemptions_per_slab = dict( - frappe.get_all( - "Income Tax Slab", - filters={"company": self.filters.company, "docstatus": 1, "disabled": 0}, - fields=["name", "standard_tax_exemption_amount"], - as_list=1, - ) - ) - - for emp, emp_details in self.employees.items(): - if not self.employees[emp]["allow_tax_exemption"]: - continue - - income_tax_slab = emp_details.get("income_tax_slab") - standard_exemption = standard_exemptions_per_slab.get(income_tax_slab, 0) - emp_details["standard_tax_exemption"] = standard_exemption - self.add_to_total_exemption(emp, standard_exemption) - - self.add_column("Total Exemption") - - def get_total_taxable_amount(self): - self.add_column("Total Taxable Amount") - for emp, emp_details in self.employees.items(): - emp_details["total_taxable_amount"] = flt(emp_details.get("ctc")) - flt( - emp_details.get("total_exemption") - ) - - def get_applicable_tax(self): - self.add_column("Applicable Tax") - - is_tax_rounded = frappe.db.get_value( - "Salary Component", - {"variable_based_on_taxable_salary": 1, "disabled": 0}, - "round_to_the_nearest_integer", - ) - - for emp, emp_details in self.employees.items(): - tax_slab = emp_details.get("income_tax_slab") - if tax_slab: - tax_slab = frappe.get_cached_doc("Income Tax Slab", tax_slab) - employee_dict = frappe.get_doc("Employee", emp).as_dict() - tax_amount = calculate_tax_by_tax_slab( - emp_details["total_taxable_amount"], tax_slab, eval_globals=None, eval_locals=employee_dict - ) - else: - tax_amount = 0.0 - - if is_tax_rounded: - tax_amount = rounded(tax_amount) - emp_details["applicable_tax"] = tax_amount - - def get_total_deducted_tax(self): - self.add_column("Total Tax Deducted") - - ss = frappe.qb.DocType("Salary Slip") - ss_ded = frappe.qb.DocType("Salary Detail") - - records = ( - frappe.qb.from_(ss) - .inner_join(ss_ded) - .on(ss.name == ss_ded.parent) - .select(ss.employee, Sum(ss_ded.amount).as_("amount")) - .where(ss.docstatus == 1) - .where(ss.employee.isin(list(self.employees.keys()))) - .where(ss_ded.parentfield == "deductions") - .where(ss_ded.variable_based_on_taxable_salary == 1) - .where(ss.start_date >= self.payroll_period_start_date) - .where(ss.end_date <= self.payroll_period_end_date) - .groupby(ss.employee) - ).run(as_dict=True) - - for d in records: - self.employees[d.employee].setdefault("total_tax_deducted", d.amount) - - def get_payable_tax(self): - self.add_column("Payable Tax") - - for emp, emp_details in self.employees.items(): - emp_details["payable_tax"] = flt(emp_details.get("applicable_tax")) - flt( - emp_details.get("total_tax_deducted") - ) - - def add_column(self, label, fieldname=None, fieldtype=None, options=None, width=None): - col = { - "label": _(label), - "fieldname": fieldname or scrub(label), - "fieldtype": fieldtype or "Currency", - "options": options, - "width": width or "140px", - } - self.columns.append(col) - - def get_fixed_columns(self): - self.columns = [ - { - "label": _("Employee"), - "fieldname": "employee", - "fieldtype": "Link", - "options": "Employee", - "width": "140px", - }, - { - "label": _("Employee Name"), - "fieldname": "employee_name", - "fieldtype": "Data", - "width": "160px", - }, - { - "label": _("Department"), - "fieldname": "department", - "fieldtype": "Link", - "options": "Department", - "width": "140px", - }, - { - "label": _("Designation"), - "fieldname": "designation", - "fieldtype": "Link", - "options": "Designation", - "width": "140px", - }, - {"label": _("Date of Joining"), "fieldname": "date_of_joining", "fieldtype": "Date"}, - { - "label": _("Income Tax Slab"), - "fieldname": "income_tax_slab", - "fieldtype": "Link", - "options": "Income Tax Slab", - "width": "140px", - }, - {"label": _("CTC"), "fieldname": "ctc", "fieldtype": "Currency", "width": "140px"}, - ] diff --git a/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py b/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py deleted file mode 100644 index 57ca317160..0000000000 --- a/erpnext/payroll/report/income_tax_computation/test_income_tax_computation.py +++ /dev/null @@ -1,115 +0,0 @@ -import unittest - -import frappe -from frappe.utils import getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.payroll.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import ( - create_payroll_period, -) -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - create_exemption_declaration, - create_salary_slips_for_payroll_period, - create_tax_slab, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure -from erpnext.payroll.report.income_tax_computation.income_tax_computation import execute - - -class TestIncomeTaxComputation(unittest.TestCase): - def setUp(self): - self.cleanup_records() - self.create_records() - - def tearDown(self): - frappe.db.rollback() - - def cleanup_records(self): - frappe.db.sql("delete from `tabEmployee Tax Exemption Declaration`") - frappe.db.sql("delete from `tabPayroll Period`") - frappe.db.sql("delete from `tabIncome Tax Slab`") - frappe.db.sql("delete from `tabSalary Component`") - frappe.db.sql("delete from `tabEmployee Benefit Application`") - frappe.db.sql("delete from `tabEmployee Benefit Claim`") - frappe.db.sql("delete from `tabEmployee` where company='_Test Company'") - frappe.db.sql("delete from `tabSalary Slip`") - - def create_records(self): - self.employee = make_employee( - "employee_tax_computation@example.com", - company="_Test Company", - date_of_joining=getdate("01-10-2021"), - ) - - self.payroll_period = create_payroll_period( - name="_Test Payroll Period 1", company="_Test Company" - ) - - self.income_tax_slab = create_tax_slab( - self.payroll_period, - allow_tax_exemption=True, - effective_date=getdate("2019-04-01"), - company="_Test Company", - ) - salary_structure = make_salary_structure( - "Monthly Salary Structure Test Income Tax Computation", - "Monthly", - employee=self.employee, - company="_Test Company", - currency="INR", - payroll_period=self.payroll_period, - test_tax=True, - ) - - create_exemption_declaration(self.employee, self.payroll_period.name) - - create_salary_slips_for_payroll_period( - self.employee, salary_structure.name, self.payroll_period, deduct_random=False, num=3 - ) - - def test_report(self): - filters = frappe._dict( - { - "company": "_Test Company", - "payroll_period": self.payroll_period.name, - "employee": self.employee, - } - ) - - result = execute(filters) - - expected_data = { - "employee": self.employee, - "employee_name": "employee_tax_computation@example.com", - "department": "All Departments", - "income_tax_slab": self.income_tax_slab, - "ctc": 936000.0, - "professional_tax": 2400.0, - "standard_tax_exemption": 50000, - "total_exemption": 52400.0, - "total_taxable_amount": 883600.0, - "applicable_tax": 92789.0, - "total_tax_deducted": 17997.0, - "payable_tax": 74792, - } - - for key, val in expected_data.items(): - self.assertEqual(result[1][0].get(key), val) - - # Run report considering tax exemption declaration - filters.consider_tax_exemption_declaration = 1 - - result = execute(filters) - - expected_data.update( - { - "_test_category": 100000.0, - "total_exemption": 152400.0, - "total_taxable_amount": 783600.0, - "applicable_tax": 71989.0, - "payable_tax": 53992.0, - } - ) - - for key, val in expected_data.items(): - self.assertEqual(result[1][0].get(key), val) diff --git a/erpnext/payroll/report/income_tax_deductions/__init__.py b/erpnext/payroll/report/income_tax_deductions/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js deleted file mode 100644 index 6ecf2b1960..0000000000 --- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() { - frappe.query_reports["Income Tax Deductions"] = erpnext.salary_slip_deductions_report_filters; -}); diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json deleted file mode 100644 index cf80398f98..0000000000 --- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-05-30 00:07:56.744372", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-05-30 00:07:56.744372", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Income Tax Deductions", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Income Tax Deductions", - "report_type": "Script Report", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - }, - { - "role": "Employee" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py b/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py deleted file mode 100644 index ccf16565c1..0000000000 --- a/erpnext/payroll/report/income_tax_deductions/income_tax_deductions.py +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - -import erpnext - - -def execute(filters=None): - data = get_data(filters) - columns = get_columns(filters) if len(data) else [] - - return columns, data - - -def get_columns(filters): - columns = [ - { - "label": _("Employee"), - "options": "Employee", - "fieldname": "employee", - "fieldtype": "Link", - "width": 200, - }, - { - "label": _("Employee Name"), - "options": "Employee", - "fieldname": "employee_name", - "fieldtype": "Link", - "width": 160, - }, - ] - - if erpnext.get_region() == "India": - columns.append( - {"label": _("PAN Number"), "fieldname": "pan_number", "fieldtype": "Data", "width": 140} - ) - - columns += [ - {"label": _("Income Tax Component"), "fieldname": "it_comp", "fieldtype": "Data", "width": 170}, - { - "label": _("Income Tax Amount"), - "fieldname": "it_amount", - "fieldtype": "Currency", - "options": "currency", - "width": 140, - }, - { - "label": _("Gross Pay"), - "fieldname": "gross_pay", - "fieldtype": "Currency", - "options": "currency", - "width": 140, - }, - {"label": _("Posting Date"), "fieldname": "posting_date", "fieldtype": "Date", "width": 140}, - ] - - return columns - - -def get_conditions(filters): - conditions = [""] - - if filters.get("department"): - conditions.append("sal.department = '%s' " % (filters["department"])) - - if filters.get("branch"): - conditions.append("sal.branch = '%s' " % (filters["branch"])) - - if filters.get("company"): - conditions.append("sal.company = '%s' " % (filters["company"])) - - if filters.get("month"): - conditions.append("month(sal.start_date) = '%s' " % (filters["month"])) - - if filters.get("year"): - conditions.append("year(start_date) = '%s' " % (filters["year"])) - - return " and ".join(conditions) - - -def get_data(filters): - - data = [] - - if erpnext.get_region() == "India": - employee_pan_dict = frappe._dict( - frappe.db.sql(""" select employee, pan_number from `tabEmployee`""") - ) - - component_types = frappe.db.sql( - """ select name from `tabSalary Component` - where is_income_tax_component = 1 """ - ) - - component_types = [comp_type[0] for comp_type in component_types] - - if not len(component_types): - return [] - - conditions = get_conditions(filters) - - entry = frappe.db.sql( - """ select sal.employee, sal.employee_name, sal.posting_date, ded.salary_component, ded.amount,sal.gross_pay - from `tabSalary Slip` sal, `tabSalary Detail` ded - where sal.name = ded.parent - and ded.parentfield = 'deductions' - and ded.parenttype = 'Salary Slip' - and sal.docstatus = 1 %s - and ded.salary_component in (%s) - """ - % (conditions, ", ".join(["%s"] * len(component_types))), - tuple(component_types), - as_dict=1, - ) - - for d in entry: - - employee = { - "employee": d.employee, - "employee_name": d.employee_name, - "it_comp": d.salary_component, - "posting_date": d.posting_date, - # "pan_number": employee_pan_dict.get(d.employee), - "it_amount": d.amount, - "gross_pay": d.gross_pay, - } - - if erpnext.get_region() == "India": - employee["pan_number"] = employee_pan_dict.get(d.employee) - - data.append(employee) - - return data diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/__init__.py b/erpnext/payroll/report/salary_payments_based_on_payment_mode/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js deleted file mode 100644 index 9b82954169..0000000000 --- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() { - frappe.query_reports["Salary Payments Based On Payment Mode"] = erpnext.salary_slip_deductions_report_filters; -}); diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json deleted file mode 100644 index c04cc32b9b..0000000000 --- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-06-16 18:43:43.107246", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-06-16 18:43:43.107246", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Payments Based On Payment Mode", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Salary Payments Based On Payment Mode", - "report_type": "Script Report", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - }, - { - "role": "Employee" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py b/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py deleted file mode 100644 index 4223f9d4fb..0000000000 --- a/erpnext/payroll/report/salary_payments_based_on_payment_mode/salary_payments_based_on_payment_mode.py +++ /dev/null @@ -1,180 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - -import erpnext -from erpnext.regional.report.provident_fund_deductions.provident_fund_deductions import ( - get_conditions, -) - - -def execute(filters=None): - mode_of_payments = get_payment_modes() - - if not len(mode_of_payments): - return [], [] - - columns = get_columns(filters, mode_of_payments) - data, total_rows, report_summary = get_data(filters, mode_of_payments) - chart = get_chart(mode_of_payments, total_rows) - - return columns, data, None, chart, report_summary - - -def get_columns(filters, mode_of_payments): - columns = [ - { - "label": _("Branch"), - "options": "Branch", - "fieldname": "branch", - "fieldtype": "Link", - "width": 200, - } - ] - - for mode in mode_of_payments: - columns.append({"label": _(mode), "fieldname": mode, "fieldtype": "Currency", "width": 160}) - - columns.append({"label": _("Total"), "fieldname": "total", "fieldtype": "Currency", "width": 140}) - - return columns - - -def get_payment_modes(): - mode_of_payments = frappe.db.sql_list( - """ - select distinct mode_of_payment from `tabSalary Slip` where docstatus = 1 - """ - ) - return mode_of_payments - - -def prepare_data(entry): - branch_wise_entries = {} - gross_pay = 0 - - for d in entry: - gross_pay += d.gross_pay - if branch_wise_entries.get(d.branch): - branch_wise_entries[d.branch][d.mode_of_payment] = d.net_pay - else: - branch_wise_entries.setdefault(d.branch, {}).setdefault(d.mode_of_payment, d.net_pay) - - return branch_wise_entries, gross_pay - - -def get_data(filters, mode_of_payments): - data = [] - - conditions = get_conditions(filters) - - entry = frappe.db.sql( - """ - select branch, mode_of_payment, sum(net_pay) as net_pay, sum(gross_pay) as gross_pay - from `tabSalary Slip` sal - where docstatus = 1 %s - group by branch, mode_of_payment - """ - % (conditions), - as_dict=1, - ) - - branch_wise_entries, gross_pay = prepare_data(entry) - - branches = frappe.db.sql_list( - """ - select distinct branch from `tabSalary Slip` sal - where docstatus = 1 %s - """ - % (conditions) - ) - - total_row = {"total": 0, "branch": "Total"} - - for branch in branches: - total = 0 - row = {"branch": branch} - for mode in mode_of_payments: - if branch_wise_entries.get(branch).get(mode): - row[mode] = branch_wise_entries.get(branch).get(mode) - total += branch_wise_entries.get(branch).get(mode) - - row["total"] = total - data.append(row) - - total_row = get_total_based_on_mode_of_payment(data, mode_of_payments) - total_deductions = gross_pay - total_row.get("total") - - report_summary = [] - - if data: - data.append(total_row) - data.append({}) - data.append({"branch": "Total Gross Pay", mode_of_payments[0]: gross_pay}) - data.append({"branch": "Total Deductions", mode_of_payments[0]: total_deductions}) - data.append({"branch": "Total Net Pay", mode_of_payments[0]: total_row.get("total")}) - - currency = erpnext.get_company_currency(filters.company) - report_summary = get_report_summary( - gross_pay, total_deductions, total_row.get("total"), currency - ) - - return data, total_row, report_summary - - -def get_total_based_on_mode_of_payment(data, mode_of_payments): - - total = 0 - total_row = {"branch": "Total"} - for mode in mode_of_payments: - sum_of_payment = sum([detail[mode] for detail in data if mode in detail.keys()]) - total_row[mode] = sum_of_payment - total += sum_of_payment - - total_row["total"] = total - return total_row - - -def get_report_summary(gross_pay, total_deductions, net_pay, currency): - return [ - { - "value": gross_pay, - "label": _("Total Gross Pay"), - "indicator": "Green", - "datatype": "Currency", - "currency": currency, - }, - { - "value": total_deductions, - "label": _("Total Deduction"), - "datatype": "Currency", - "indicator": "Red", - "currency": currency, - }, - { - "value": net_pay, - "label": _("Total Net Pay"), - "datatype": "Currency", - "indicator": "Blue", - "currency": currency, - }, - ] - - -def get_chart(mode_of_payments, data): - if data: - values = [] - labels = [] - - for mode in mode_of_payments: - values.append(data[mode]) - labels.append([mode]) - - chart = { - "data": {"labels": labels, "datasets": [{"name": "Mode Of Payments", "values": values}]} - } - chart["type"] = "bar" - return chart diff --git a/erpnext/payroll/report/salary_payments_via_ecs/__init__.py b/erpnext/payroll/report/salary_payments_via_ecs/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js deleted file mode 100644 index e49fc112ff..0000000000 --- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() { - - let ecs_checklist_filter = erpnext.salary_slip_deductions_report_filters - ecs_checklist_filter['filters'].push({ - fieldname: "type", - label: __("Type"), - fieldtype: "Select", - options:["", "Bank", "Cash", "Cheque"] - }) - - frappe.query_reports["Salary Payments via ECS"] = ecs_checklist_filter -}); diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json deleted file mode 100644 index dd0ac7c4ef..0000000000 --- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-06-16 18:35:30.508143", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-06-16 18:38:23.680185", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Payments via ECS", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Salary Payments via ECS", - "report_type": "Script Report", - "roles": [ - { - "role": "HR Manager" - }, - { - "role": "HR User" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py b/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py deleted file mode 100644 index 4f9370b742..0000000000 --- a/erpnext/payroll/report/salary_payments_via_ecs/salary_payments_via_ecs.py +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - -import erpnext - - -def execute(filters=None): - columns = get_columns(filters) - data = get_data(filters) - - return columns, data - - -def get_columns(filters): - columns = [ - { - "label": _("Branch"), - "options": "Branch", - "fieldname": "branch", - "fieldtype": "Link", - "width": 200, - }, - { - "label": _("Employee Name"), - "options": "Employee", - "fieldname": "employee_name", - "fieldtype": "Link", - "width": 160, - }, - { - "label": _("Employee"), - "options": "Employee", - "fieldname": "employee", - "fieldtype": "Link", - "width": 140, - }, - { - "label": _("Gross Pay"), - "fieldname": "gross_pay", - "fieldtype": "Currency", - "options": "currency", - "width": 140, - }, - {"label": _("Bank"), "fieldname": "bank", "fieldtype": "Data", "width": 140}, - {"label": _("Account No"), "fieldname": "account_no", "fieldtype": "Data", "width": 140}, - ] - if erpnext.get_region() == "India": - columns += [ - {"label": _("IFSC"), "fieldname": "ifsc", "fieldtype": "Data", "width": 140}, - {"label": _("MICR"), "fieldname": "micr", "fieldtype": "Data", "width": 140}, - ] - - return columns - - -def get_conditions(filters): - conditions = [""] - - if filters.get("department"): - conditions.append("department = '%s' " % (filters["department"])) - - if filters.get("branch"): - conditions.append("branch = '%s' " % (filters["branch"])) - - if filters.get("company"): - conditions.append("company = '%s' " % (filters["company"])) - - if filters.get("month"): - conditions.append("month(start_date) = '%s' " % (filters["month"])) - - if filters.get("year"): - conditions.append("year(start_date) = '%s' " % (filters["year"])) - - return " and ".join(conditions) - - -def get_data(filters): - - data = [] - - fields = ["employee", "branch", "bank_name", "bank_ac_no", "salary_mode"] - if erpnext.get_region() == "India": - fields += ["ifsc_code", "micr_code"] - - employee_details = frappe.get_list("Employee", fields=fields) - employee_data_dict = {} - - for d in employee_details: - employee_data_dict.setdefault( - d.employee, - { - "bank_ac_no": d.bank_ac_no, - "ifsc_code": d.ifsc_code or None, - "micr_code": d.micr_code or None, - "branch": d.branch, - "salary_mode": d.salary_mode, - "bank_name": d.bank_name, - }, - ) - - conditions = get_conditions(filters) - - entry = frappe.db.sql( - """ select employee, employee_name, gross_pay - from `tabSalary Slip` - where docstatus = 1 %s """ - % (conditions), - as_dict=1, - ) - - for d in entry: - - employee = { - "branch": employee_data_dict.get(d.employee).get("branch"), - "employee_name": d.employee_name, - "employee": d.employee, - "gross_pay": d.gross_pay, - } - - if employee_data_dict.get(d.employee).get("salary_mode") == "Bank": - employee["bank"] = employee_data_dict.get(d.employee).get("bank_name") - employee["account_no"] = employee_data_dict.get(d.employee).get("bank_ac_no") - if erpnext.get_region() == "India": - employee["ifsc"] = employee_data_dict.get(d.employee).get("ifsc_code") - employee["micr"] = employee_data_dict.get(d.employee).get("micr_code") - else: - employee["account_no"] = employee_data_dict.get(d.employee).get("salary_mode") - - if filters.get("type") and employee_data_dict.get(d.employee).get("salary_mode") == filters.get( - "type" - ): - data.append(employee) - elif not filters.get("type"): - data.append(employee) - - return data diff --git a/erpnext/payroll/report/salary_register/__init__.py b/erpnext/payroll/report/salary_register/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/payroll/report/salary_register/salary_register.html b/erpnext/payroll/report/salary_register/salary_register.html deleted file mode 100644 index 3abc3a008d..0000000000 --- a/erpnext/payroll/report/salary_register/salary_register.html +++ /dev/null @@ -1,40 +0,0 @@ -{% - var report_columns = report.get_columns_for_print(); -%} -
- {%= frappe.boot.letter_heads[filters.letter_head || frappe.defaults.get_default("letter_head")].header %} -
-

{%= __(report.report_name) %}

-
{{ __("From") }} {%= filters.from_date %} {{ __("to") }} {%= filters.to_date %}
-
- - - - {% for(var i=1, l=report_columns.length; i{%= report_columns[i].label %} - {% } %} - - - - {% for(var j=0, k=data.length; j - {% for(var i=1, l=report_columns.length; i - {% var fieldname = report_columns[i].fieldname; %} - {% if (report_columns[i].fieldtype=='Currency' && !isNaN(row[fieldname])) { %} - {%= format_currency(row[fieldname]) %} - {% } else { %} - {% if (!is_null(row[fieldname])) { %} - {%= row[fieldname] %} - {% } %} - {% } %} - - {% } %} - - {% } %} - -
-

{{ __("Printed On") }} {%= frappe.datetime.str_to_user(frappe.datetime.get_datetime_as_string()) %}

diff --git a/erpnext/payroll/report/salary_register/salary_register.js b/erpnext/payroll/report/salary_register/salary_register.js deleted file mode 100644 index eb4acb91a7..0000000000 --- a/erpnext/payroll/report/salary_register/salary_register.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.query_reports["Salary Register"] = { - "filters": [ - { - "fieldname":"from_date", - "label": __("From"), - "fieldtype": "Date", - "default": frappe.datetime.add_months(frappe.datetime.get_today(),-1), - "reqd": 1, - "width": "100px" - }, - { - "fieldname":"to_date", - "label": __("To"), - "fieldtype": "Date", - "default": frappe.datetime.get_today(), - "reqd": 1, - "width": "100px" - }, - { - "fieldname": "currency", - "fieldtype": "Link", - "options": "Currency", - "label": __("Currency"), - "default": erpnext.get_currency(frappe.defaults.get_default("Company")), - "width": "50px" - }, - { - "fieldname":"employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee", - "width": "100px" - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "width": "100px", - "reqd": 1 - }, - { - "fieldname":"docstatus", - "label":__("Document Status"), - "fieldtype":"Select", - "options":["Draft", "Submitted", "Cancelled"], - "default": "Submitted", - "width": "100px" - } - ] -} diff --git a/erpnext/payroll/report/salary_register/salary_register.json b/erpnext/payroll/report/salary_register/salary_register.json deleted file mode 100644 index 5a70c32593..0000000000 --- a/erpnext/payroll/report/salary_register/salary_register.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "add_total_row": 1, - "creation": "2017-01-10 17:36:58.153863", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 2, - "is_standard": "Yes", - "modified": "2020-05-28 00:07:18.576661", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Salary Register", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Salary Register", - "report_type": "Script Report", - "roles": [ - { - "role": "HR User" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/payroll/report/salary_register/salary_register.py b/erpnext/payroll/report/salary_register/salary_register.py deleted file mode 100644 index 0a62b43a8e..0000000000 --- a/erpnext/payroll/report/salary_register/salary_register.py +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _ -from frappe.utils import flt - -import erpnext - - -def execute(filters=None): - if not filters: - filters = {} - currency = None - if filters.get("currency"): - currency = filters.get("currency") - company_currency = erpnext.get_company_currency(filters.get("company")) - salary_slips = get_salary_slips(filters, company_currency) - if not salary_slips: - return [], [] - - columns, earning_types, ded_types = get_columns(salary_slips) - ss_earning_map = get_ss_earning_map(salary_slips, currency, company_currency) - ss_ded_map = get_ss_ded_map(salary_slips, currency, company_currency) - doj_map = get_employee_doj_map() - - data = [] - for ss in salary_slips: - row = [ - ss.name, - ss.employee, - ss.employee_name, - doj_map.get(ss.employee), - ss.branch, - ss.department, - ss.designation, - ss.company, - ss.start_date, - ss.end_date, - ss.leave_without_pay, - ss.payment_days, - ] - - if ss.branch is not None: - columns[3] = columns[3].replace("-1", "120") - if ss.department is not None: - columns[4] = columns[4].replace("-1", "120") - if ss.designation is not None: - columns[5] = columns[5].replace("-1", "120") - if ss.leave_without_pay is not None: - columns[9] = columns[9].replace("-1", "130") - - for e in earning_types: - row.append(ss_earning_map.get(ss.name, {}).get(e)) - - if currency == company_currency: - row += [flt(ss.gross_pay) * flt(ss.exchange_rate)] - else: - row += [ss.gross_pay] - - for d in ded_types: - row.append(ss_ded_map.get(ss.name, {}).get(d)) - - row.append(ss.total_loan_repayment) - - if currency == company_currency: - row += [ - flt(ss.total_deduction) * flt(ss.exchange_rate), - flt(ss.net_pay) * flt(ss.exchange_rate), - ] - else: - row += [ss.total_deduction, ss.net_pay] - row.append(currency or company_currency) - data.append(row) - - return columns, data - - -def get_columns(salary_slips): - """ - columns = [ - _("Salary Slip ID") + ":Link/Salary Slip:150", - _("Employee") + ":Link/Employee:120", - _("Employee Name") + "::140", - _("Date of Joining") + "::80", - _("Branch") + ":Link/Branch:120", - _("Department") + ":Link/Department:120", - _("Designation") + ":Link/Designation:120", - _("Company") + ":Link/Company:120", - _("Start Date") + "::80", - _("End Date") + "::80", - _("Leave Without Pay") + ":Float:130", - _("Payment Days") + ":Float:120", - _("Currency") + ":Link/Currency:80" - ] - """ - columns = [ - _("Salary Slip ID") + ":Link/Salary Slip:150", - _("Employee") + ":Link/Employee:120", - _("Employee Name") + "::140", - _("Date of Joining") + "::80", - _("Branch") + ":Link/Branch:-1", - _("Department") + ":Link/Department:-1", - _("Designation") + ":Link/Designation:120", - _("Company") + ":Link/Company:120", - _("Start Date") + "::80", - _("End Date") + "::80", - _("Leave Without Pay") + ":Float:50", - _("Payment Days") + ":Float:120", - ] - - salary_components = {_("Earning"): [], _("Deduction"): []} - - for component in frappe.db.sql( - """select distinct sd.salary_component, sc.type - from `tabSalary Detail` sd, `tabSalary Component` sc - where sc.name=sd.salary_component and sd.amount != 0 and sd.parent in (%s)""" - % (", ".join(["%s"] * len(salary_slips))), - tuple([d.name for d in salary_slips]), - as_dict=1, - ): - salary_components[_(component.type)].append(component.salary_component) - - columns = ( - columns - + [(e + ":Currency:120") for e in salary_components[_("Earning")]] - + [_("Gross Pay") + ":Currency:120"] - + [(d + ":Currency:120") for d in salary_components[_("Deduction")]] - + [ - _("Loan Repayment") + ":Currency:120", - _("Total Deduction") + ":Currency:120", - _("Net Pay") + ":Currency:120", - ] - ) - - return columns, salary_components[_("Earning")], salary_components[_("Deduction")] - - -def get_salary_slips(filters, company_currency): - filters.update({"from_date": filters.get("from_date"), "to_date": filters.get("to_date")}) - conditions, filters = get_conditions(filters, company_currency) - salary_slips = frappe.db.sql( - """select * from `tabSalary Slip` where %s - order by employee""" - % conditions, - filters, - as_dict=1, - ) - - return salary_slips or [] - - -def get_conditions(filters, company_currency): - conditions = "" - doc_status = {"Draft": 0, "Submitted": 1, "Cancelled": 2} - - if filters.get("docstatus"): - conditions += "docstatus = {0}".format(doc_status[filters.get("docstatus")]) - - if filters.get("from_date"): - conditions += " and start_date >= %(from_date)s" - if filters.get("to_date"): - conditions += " and end_date <= %(to_date)s" - if filters.get("company"): - conditions += " and company = %(company)s" - if filters.get("employee"): - conditions += " and employee = %(employee)s" - if filters.get("currency") and filters.get("currency") != company_currency: - conditions += " and currency = %(currency)s" - - return conditions, filters - - -def get_employee_doj_map(): - return frappe._dict( - frappe.db.sql( - """ - SELECT - employee, - date_of_joining - FROM `tabEmployee` - """ - ) - ) - - -def get_ss_earning_map(salary_slips, currency, company_currency): - ss_earnings = frappe.db.sql( - """select sd.parent, sd.salary_component, sd.amount, ss.exchange_rate, ss.name - from `tabSalary Detail` sd, `tabSalary Slip` ss where sd.parent=ss.name and sd.parent in (%s)""" - % (", ".join(["%s"] * len(salary_slips))), - tuple([d.name for d in salary_slips]), - as_dict=1, - ) - - ss_earning_map = {} - for d in ss_earnings: - ss_earning_map.setdefault(d.parent, frappe._dict()).setdefault(d.salary_component, 0.0) - if currency == company_currency: - ss_earning_map[d.parent][d.salary_component] += flt(d.amount) * flt( - d.exchange_rate if d.exchange_rate else 1 - ) - else: - ss_earning_map[d.parent][d.salary_component] += flt(d.amount) - - return ss_earning_map - - -def get_ss_ded_map(salary_slips, currency, company_currency): - ss_deductions = frappe.db.sql( - """select sd.parent, sd.salary_component, sd.amount, ss.exchange_rate, ss.name - from `tabSalary Detail` sd, `tabSalary Slip` ss where sd.parent=ss.name and sd.parent in (%s)""" - % (", ".join(["%s"] * len(salary_slips))), - tuple([d.name for d in salary_slips]), - as_dict=1, - ) - - ss_ded_map = {} - for d in ss_deductions: - ss_ded_map.setdefault(d.parent, frappe._dict()).setdefault(d.salary_component, 0.0) - if currency == company_currency: - ss_ded_map[d.parent][d.salary_component] += flt(d.amount) * flt( - d.exchange_rate if d.exchange_rate else 1 - ) - else: - ss_ded_map[d.parent][d.salary_component] += flt(d.amount) - - return ss_ded_map diff --git a/erpnext/payroll/workspace/payroll/payroll.json b/erpnext/payroll/workspace/payroll/payroll.json deleted file mode 100644 index 5629e63021..0000000000 --- a/erpnext/payroll/workspace/payroll/payroll.json +++ /dev/null @@ -1,372 +0,0 @@ -{ - "charts": [ - { - "chart_name": "Outgoing Salary", - "label": "Outgoing Salary" - } - ], - "content": "[{\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Payroll\",\"col\":12}},{\"type\":\"chart\",\"data\":{\"chart_name\":\"Outgoing Salary\",\"col\":12}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Your Shortcuts\",\"col\":12}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Structure\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Payroll Entry\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Slip\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Income Tax Slab\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Salary Register\",\"col\":3}},{\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"Dashboard\",\"col\":3}},{\"type\":\"spacer\",\"data\":{\"col\":12}},{\"type\":\"header\",\"data\":{\"text\":\"Reports & Masters\",\"col\":12}},{\"type\":\"card\",\"data\":{\"card_name\":\"Payroll\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Taxation\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Compensations\",\"col\":4}},{\"type\":\"card\",\"data\":{\"card_name\":\"Reports\",\"col\":4}}]", - "creation": "2020-05-27 19:54:23.405607", - "docstatus": 0, - "doctype": "Workspace", - "for_user": "", - "hide_custom": 0, - "icon": "money-coins-1", - "idx": 0, - "label": "Payroll", - "links": [ - { - "hidden": 0, - "is_query_report": 0, - "label": "Payroll", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Salary Component", - "link_count": 0, - "link_to": "Salary Component", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Salary Structure", - "link_count": 0, - "link_to": "Salary Structure", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Salary Structure Assignment", - "link_count": 0, - "link_to": "Salary Structure Assignment", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Payroll Entry", - "link_count": 0, - "link_to": "Payroll Entry", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Salary Slip", - "link_count": 0, - "link_to": "Salary Slip", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Taxation", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Payroll Period", - "link_count": 0, - "link_to": "Payroll Period", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Income Tax Slab", - "link_count": 0, - "link_to": "Income Tax Slab", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Other Income", - "link_count": 0, - "link_to": "Employee Other Income", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Tax Exemption Declaration", - "link_count": 0, - "link_to": "Employee Tax Exemption Declaration", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Tax Exemption Proof Submission", - "link_count": 0, - "link_to": "Employee Tax Exemption Proof Submission", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Tax Exemption Category", - "link_count": 0, - "link_to": "Employee Tax Exemption Category", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Tax Exemption Sub Category", - "link_count": 0, - "link_to": "Employee Tax Exemption Sub Category", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Compensations", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Additional Salary", - "link_count": 0, - "link_to": "Additional Salary", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Retention Bonus", - "link_count": 0, - "link_to": "Retention Bonus", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Incentive", - "link_count": 0, - "link_to": "Employee Incentive", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Benefit Application", - "link_count": 0, - "link_to": "Employee Benefit Application", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Benefit Claim", - "link_count": 0, - "link_to": "Employee Benefit Claim", - "link_type": "DocType", - "onboard": 0, - "type": "Link" - }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Reports", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Salary Register", - "link_count": 0, - "link_to": "Salary Register", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Structure", - "hidden": 0, - "is_query_report": 1, - "label": "Income Tax Computation", - "link_count": 0, - "link_to": "Income Tax Computation", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Salary Payments Based On Payment Mode", - "link_count": 0, - "link_to": "Salary Payments Based On Payment Mode", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Salary Payments via ECS", - "link_count": 0, - "link_to": "Salary Payments via ECS", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Income Tax Deductions", - "link_count": 0, - "link_to": "Income Tax Deductions", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Professional Tax Deductions", - "link_count": 0, - "link_to": "Professional Tax Deductions", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Provident Fund Deductions", - "link_count": 0, - "link_to": "Provident Fund Deductions", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Payroll Entry", - "hidden": 0, - "is_query_report": 1, - "label": "Bank Remittance", - "link_count": 0, - "link_to": "Bank Remittance", - "link_type": "Report", - "onboard": 0, - "type": "Link" - } - ], - "modified": "2022-02-23 17:41:19.098813", - "modified_by": "Administrator", - "module": "Payroll", - "name": "Payroll", - "owner": "Administrator", - "parent_page": "", - "public": 1, - "restrict_to_domain": "", - "roles": [], - "sequence_id": 19.0, - "shortcuts": [ - { - "label": "Salary Structure", - "link_to": "Salary Structure", - "type": "DocType" - }, - { - "label": "Payroll Entry", - "link_to": "Payroll Entry", - "type": "DocType" - }, - { - "color": "", - "format": "{} Pending", - "label": "Salary Slip", - "link_to": "Salary Slip", - "stats_filter": "{\"status\": \"Draft\"}", - "type": "DocType" - }, - { - "label": "Income Tax Slab", - "link_to": "Income Tax Slab", - "type": "DocType" - }, - { - "label": "Salary Register", - "link_to": "Salary Register", - "type": "Report" - }, - { - "label": "Dashboard", - "link_to": "Payroll", - "type": "Dashboard" - } - ], - "title": "Payroll" -} \ No newline at end of file diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json index 1cda0a08c4..37d98ad8ea 100644 --- a/erpnext/projects/doctype/project/project.json +++ b/erpnext/projects/doctype/project/project.json @@ -38,7 +38,6 @@ "project_details", "estimated_costing", "total_costing_amount", - "total_expense_claim", "total_purchase_cost", "company", "column_break_28", @@ -234,7 +233,7 @@ }, { "fieldname": "actual_start_date", - "fieldtype": "Data", + "fieldtype": "Date", "label": "Actual Start Date (via Time Sheet)", "read_only": 1 }, @@ -279,12 +278,6 @@ "label": "Total Costing Amount (via Timesheets)", "read_only": 1 }, - { - "fieldname": "total_expense_claim", - "fieldtype": "Currency", - "label": "Total Expense Claim (via Expense Claims)", - "read_only": 1 - }, { "fieldname": "total_purchase_cost", "fieldtype": "Currency", @@ -458,7 +451,7 @@ "index_web_pages_for_search": 1, "links": [], "max_attachments": 4, - "modified": "2022-01-29 13:58:27.712714", + "modified": "2022-06-23 16:45:06.108499", "modified_by": "Administrator", "module": "Projects", "name": "Project", @@ -504,4 +497,4 @@ "timeline_field": "customer", "title_field": "project_name", "track_seen": 1 -} \ No newline at end of file +} diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 8a8e1d1bf5..e78e4b6577 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -12,8 +12,7 @@ from frappe.utils import add_days, flt, get_datetime, get_time, get_url, nowtime from erpnext import get_default_company from erpnext.controllers.employee_boarding_controller import update_employee_boarding_status from erpnext.controllers.queries import get_filters_cond -from erpnext.hr.doctype.daily_work_summary.daily_work_summary import get_users_email -from erpnext.hr.doctype.holiday_list.holiday_list import is_holiday +from erpnext.setup.doctype.holiday_list.holiday_list import is_holiday class Project(Document): @@ -212,26 +211,20 @@ class Project(Document): self.status = "Completed" def update_costing(self): - from_time_sheet = frappe.db.sql( - """select - sum(costing_amount) as costing_amount, - sum(billing_amount) as billing_amount, - min(from_time) as start_date, - max(to_time) as end_date, - sum(hours) as time - from `tabTimesheet Detail` where project = %s and docstatus = 1""", - self.name, - as_dict=1, - )[0] + from frappe.query_builder.functions import Max, Min, Sum - from_expense_claim = frappe.db.sql( - """select - sum(total_sanctioned_amount) as total_sanctioned_amount - from `tabExpense Claim` where project = %s - and docstatus = 1""", - self.name, - as_dict=1, - )[0] + TimesheetDetail = frappe.qb.DocType("Timesheet Detail") + from_time_sheet = ( + frappe.qb.from_(TimesheetDetail) + .select( + Sum(TimesheetDetail.costing_amount).as_("costing_amount"), + Sum(TimesheetDetail.billing_amount).as_("billing_amount"), + Min(TimesheetDetail.from_time).as_("start_date"), + Max(TimesheetDetail.to_time).as_("end_date"), + Sum(TimesheetDetail.hours).as_("time"), + ) + .where((TimesheetDetail.project == self.name) & (TimesheetDetail.docstatus == 1)) + ).run(as_dict=True)[0] self.actual_start_date = from_time_sheet.start_date self.actual_end_date = from_time_sheet.end_date @@ -240,7 +233,6 @@ class Project(Document): self.total_billable_amount = from_time_sheet.billing_amount self.actual_time = from_time_sheet.time - self.total_expense_claim = from_expense_claim.total_sanctioned_amount self.update_purchase_costing() self.update_sales_amount() self.update_billed_amount() @@ -249,7 +241,6 @@ class Project(Document): def calculate_gross_margin(self): expense_amount = ( flt(self.total_costing_amount) - + flt(self.total_expense_claim) + flt(self.total_purchase_cost) + flt(self.get("total_consumed_material_cost", 0)) ) @@ -387,11 +378,11 @@ def get_users_for_project(doctype, txt, searchfield, start, page_len, filters): or full_name like %(txt)s) {fcond} {mcond} order by - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), - if(locate(%(_txt)s, full_name), locate(%(_txt)s, full_name), 99999), + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end), + (case when locate(%(_txt)s, full_name) > 0 then locate(%(_txt)s, full_name) else 99999 end) idx desc, name, full_name - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( **{ "key": searchfield, "fcond": get_filters_cond(doctype, filters, conditions), @@ -680,3 +671,7 @@ def get_holiday_list(company=None): ) ) return holiday_list + + +def get_users_email(doc): + return [d.email for d in doc.users if frappe.db.get_value("User", d.user, "enabled")] diff --git a/erpnext/projects/doctype/project/project_dashboard.py b/erpnext/projects/doctype/project/project_dashboard.py index b6c74f9387..5d17efbabc 100644 --- a/erpnext/projects/doctype/project/project_dashboard.py +++ b/erpnext/projects/doctype/project/project_dashboard.py @@ -9,7 +9,7 @@ def get_data(): "transactions": [ { "label": _("Project"), - "items": ["Task", "Timesheet", "Expense Claim", "Issue", "Project Update"], + "items": ["Task", "Timesheet", "Issue", "Project Update"], }, {"label": _("Material"), "items": ["Material Request", "BOM", "Stock Entry"]}, {"label": _("Sales"), "items": ["Sales Order", "Delivery Note", "Sales Invoice"]}, diff --git a/erpnext/projects/doctype/project_update/project_update.py b/erpnext/projects/doctype/project_update/project_update.py index 5a29fb6c33..175f787a30 100644 --- a/erpnext/projects/doctype/project_update/project_update.py +++ b/erpnext/projects/doctype/project_update/project_update.py @@ -28,7 +28,7 @@ def daily_reminder(): for drafts in draft: number_of_drafts = drafts[0] update = frappe.db.sql( - """SELECT name,date,time,progress,progress_details FROM `tabProject Update` WHERE `tabProject Update`.project = %s AND date = DATE_ADD(CURDATE(), INTERVAL -1 DAY);""", + """SELECT name,date,time,progress,progress_details FROM `tabProject Update` WHERE `tabProject Update`.project = %s AND date = DATE_ADD(CURRENT_DATE, INTERVAL -1 DAY);""", project_name, ) email_sending(project_name, frequency, date_start, date_end, progress, number_of_drafts, update) @@ -39,7 +39,7 @@ def email_sending( ): holiday = frappe.db.sql( - """SELECT holiday_date FROM `tabHoliday` where holiday_date = CURDATE();""" + """SELECT holiday_date FROM `tabHoliday` where holiday_date = CURRENT_DATE;""" ) msg = ( "

Project Name: " diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json index 81822085a5..141a99e612 100644 --- a/erpnext/projects/doctype/task/task.json +++ b/erpnext/projects/doctype/task/task.json @@ -42,7 +42,6 @@ "act_end_date", "sb_costing", "total_costing_amount", - "total_expense_claim", "column_break_20", "total_billing_amount", "sb_more_info", @@ -279,13 +278,6 @@ "options": "Company:company:default_currency", "read_only": 1 }, - { - "fieldname": "total_expense_claim", - "fieldtype": "Currency", - "label": "Total Expense Claim (via Expense Claim)", - "options": "Company:company:default_currency", - "read_only": 1 - }, { "fieldname": "column_break_20", "fieldtype": "Column Break" @@ -397,7 +389,7 @@ "is_tree": 1, "links": [], "max_attachments": 5, - "modified": "2022-01-29 13:58:47.005241", + "modified": "2022-06-23 16:58:47.005241", "modified_by": "Administrator", "module": "Projects", "name": "Task", diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 4575fb544c..fa507854a6 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -156,13 +156,6 @@ class Task(NestedSet): if self.status == "Cancelled": clear(self.doctype, self.name) - def update_total_expense_claim(self): - self.total_expense_claim = frappe.db.sql( - """select sum(total_sanctioned_amount) from `tabExpense Claim` - where project = %s and task = %s and docstatus=1""", - (self.project, self.name), - )[0][0] - def update_time_and_costing(self): tl = frappe.db.sql( """select min(from_time) as start_date, max(to_time) as end_date, @@ -288,7 +281,7 @@ def get_project(doctype, txt, searchfield, start, page_len, filters): %(mcond)s {search_condition} order by name - limit %(start)s, %(page_len)s""".format( + limit %(page_len)s offset %(start)s""".format( search_columns=search_columns, search_condition=search_cond ), { diff --git a/erpnext/projects/doctype/task/task_dashboard.py b/erpnext/projects/doctype/task/task_dashboard.py index 07477da17a..52ff790d46 100644 --- a/erpnext/projects/doctype/task/task_dashboard.py +++ b/erpnext/projects/doctype/task/task_dashboard.py @@ -6,6 +6,5 @@ def get_data(): "fieldname": "task", "transactions": [ {"label": _("Activity"), "items": ["Timesheet"]}, - {"label": _("Accounting"), "items": ["Expense Claim"]}, ], } diff --git a/erpnext/projects/doctype/timesheet/test_timesheet.py b/erpnext/projects/doctype/timesheet/test_timesheet.py index 57bfd5b607..e098c3e3c4 100644 --- a/erpnext/projects/doctype/timesheet/test_timesheet.py +++ b/erpnext/projects/doctype/timesheet/test_timesheet.py @@ -8,36 +8,16 @@ import frappe from frappe.utils import add_months, add_to_date, now_datetime, nowdate from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.payroll.doctype.salary_slip.test_salary_slip import ( - make_deduction_salary_component, - make_earning_salary_component, -) -from erpnext.payroll.doctype.salary_structure.test_salary_structure import ( - create_salary_structure_assignment, - make_salary_structure, -) -from erpnext.projects.doctype.timesheet.timesheet import ( - OverlapError, - make_salary_slip, - make_sales_invoice, -) +from erpnext.projects.doctype.timesheet.timesheet import OverlapError, make_sales_invoice +from erpnext.setup.doctype.employee.test_employee import make_employee class TestTimesheet(unittest.TestCase): - @classmethod - def setUpClass(cls): - make_earning_salary_component(setup=True, company_list=["_Test Company"]) - make_deduction_salary_component(setup=True, company_list=["_Test Company"]) - def setUp(self): - for dt in ["Salary Slip", "Salary Structure", "Salary Structure Assignment", "Timesheet"]: - frappe.db.sql("delete from `tab%s`" % dt) + frappe.db.delete("Timesheet") def test_timesheet_billing_amount(self): emp = make_employee("test_employee_6@salary.com") - - make_salary_structure_for_timesheet(emp) timesheet = make_timesheet(emp, simulate=True, is_billable=1) self.assertEqual(timesheet.total_hours, 2) @@ -48,8 +28,6 @@ class TestTimesheet(unittest.TestCase): def test_timesheet_billing_amount_not_billable(self): emp = make_employee("test_employee_6@salary.com") - - make_salary_structure_for_timesheet(emp) timesheet = make_timesheet(emp, simulate=True, is_billable=0) self.assertEqual(timesheet.total_hours, 2) @@ -58,33 +36,13 @@ class TestTimesheet(unittest.TestCase): self.assertEqual(timesheet.time_logs[0].billing_amount, 0) self.assertEqual(timesheet.total_billable_amount, 0) - def test_salary_slip_from_timesheet(self): - emp = make_employee("test_employee_6@salary.com", company="_Test Company") - - salary_structure = make_salary_structure_for_timesheet(emp) - timesheet = make_timesheet(emp, simulate=True, is_billable=1) - salary_slip = make_salary_slip(timesheet.name) - salary_slip.submit() - - self.assertEqual(salary_slip.total_working_hours, 2) - self.assertEqual(salary_slip.hour_rate, 50) - self.assertEqual(salary_slip.earnings[0].salary_component, "Timesheet Component") - self.assertEqual(salary_slip.earnings[0].amount, 100) - self.assertEqual(salary_slip.timesheets[0].time_sheet, timesheet.name) - self.assertEqual(salary_slip.timesheets[0].working_hours, 2) - - timesheet = frappe.get_doc("Timesheet", timesheet.name) - self.assertEqual(timesheet.status, "Payslip") - salary_slip.cancel() - - timesheet = frappe.get_doc("Timesheet", timesheet.name) - self.assertEqual(timesheet.status, "Submitted") - def test_sales_invoice_from_timesheet(self): emp = make_employee("test_employee_6@salary.com") timesheet = make_timesheet(emp, simulate=True, is_billable=1) - sales_invoice = make_sales_invoice(timesheet.name, "_Test Item", "_Test Customer") + sales_invoice = make_sales_invoice( + timesheet.name, "_Test Item", "_Test Customer", currency="INR" + ) sales_invoice.due_date = nowdate() sales_invoice.submit() timesheet = frappe.get_doc("Timesheet", timesheet.name) @@ -204,31 +162,6 @@ class TestTimesheet(unittest.TestCase): self.assertEqual(to_time, add_to_date(from_time, hours=2, as_datetime=True)) -def make_salary_structure_for_timesheet(employee, company=None): - salary_structure_name = "Timesheet Salary Structure Test" - frequency = "Monthly" - - if not frappe.db.exists("Salary Component", "Timesheet Component"): - frappe.get_doc( - {"doctype": "Salary Component", "salary_component": "Timesheet Component"} - ).insert() - - salary_structure = make_salary_structure( - salary_structure_name, frequency, company=company, dont_submit=True - ) - salary_structure.salary_component = "Timesheet Component" - salary_structure.salary_slip_based_on_timesheet = 1 - salary_structure.hour_rate = 50.0 - salary_structure.save() - salary_structure.submit() - - if not frappe.db.get_value("Salary Structure Assignment", {"employee": employee, "docstatus": 1}): - frappe.db.set_value("Employee", employee, "date_of_joining", add_months(nowdate(), -5)) - create_salary_structure_assignment(employee, salary_structure.name) - - return salary_structure - - def make_timesheet( employee, simulate=False, diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index 453d46c7c4..e1486de18c 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -4,7 +4,7 @@ frappe.ui.form.on("Timesheet", { setup: function(frm) { frappe.require("/assets/erpnext/js/projects/timer.js"); - frm.add_fetch('employee', 'employee_name', 'employee_name'); + frm.fields_dict.employee.get_query = function() { return { filters:{ @@ -43,15 +43,15 @@ frappe.ui.form.on("Timesheet", { }, refresh: function(frm) { - if(frm.doc.docstatus==1) { - if(frm.doc.per_billed < 100 && frm.doc.total_billable_hours && frm.doc.total_billable_hours > frm.doc.total_billed_hours){ - frm.add_custom_button(__('Create Sales Invoice'), function() { frm.trigger("make_invoice") }, - "fa fa-file-text"); - } - - if(!frm.doc.salary_slip && frm.doc.employee){ - frm.add_custom_button(__('Create Salary Slip'), function() { frm.trigger("make_salary_slip") }, - "fa fa-file-text"); + if (frm.doc.docstatus == 1) { + if ( + (frm.doc.per_billed < 100) + && (frm.doc.total_billable_hours) + && (frm.doc.total_billable_hours > frm.doc.total_billed_hours) + ) { + frm.add_custom_button(__("Create Sales Invoice"), function() { + frm.trigger("make_invoice"); + }); } } @@ -210,13 +210,6 @@ frappe.ui.form.on("Timesheet", { dialog.show(); }, - make_salary_slip: function(frm) { - frappe.model.open_mapped_doc({ - method: "erpnext.projects.doctype.timesheet.timesheet.make_salary_slip", - frm: frm - }); - }, - parent_project: function(frm) { set_project_in_timelog(frm); } diff --git a/erpnext/projects/doctype/timesheet/timesheet.json b/erpnext/projects/doctype/timesheet/timesheet.json index be6771e56f..0cce129034 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.json +++ b/erpnext/projects/doctype/timesheet/timesheet.json @@ -16,7 +16,6 @@ "exchange_rate", "sales_invoice", "column_break_3", - "salary_slip", "status", "parent_project", "employee_detail", @@ -85,15 +84,6 @@ "fieldname": "column_break_3", "fieldtype": "Column Break" }, - { - "fieldname": "salary_slip", - "fieldtype": "Link", - "label": "Salary Slip", - "no_copy": 1, - "options": "Salary Slip", - "print_hide": 1, - "read_only": 1 - }, { "default": "Draft", "fieldname": "status", @@ -120,6 +110,7 @@ }, { "depends_on": "employee", + "fetch_from": "employee.employee_name", "fieldname": "employee_name", "fieldtype": "Data", "in_global_search": 1, @@ -320,7 +311,7 @@ "idx": 1, "is_submittable": 1, "links": [], - "modified": "2021-06-09 12:08:53.930200", + "modified": "2022-06-15 22:08:53.930200", "modified_by": "Administrator", "module": "Projects", "name": "Timesheet", diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 2ef966b319..b9bb37a05c 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -10,7 +10,6 @@ from frappe.model.document import Document from frappe.utils import add_to_date, flt, get_datetime, getdate, time_diff_in_hours from erpnext.controllers.queries import get_match_cond -from erpnext.hr.utils import validate_active_employee from erpnext.setup.utils import get_exchange_rate @@ -24,9 +23,6 @@ class OverWorkLoggedError(frappe.ValidationError): class Timesheet(Document): def validate(self): - if self.employee: - validate_active_employee(self.employee) - self.set_employee_name() self.set_status() self.validate_dates() self.validate_time_logs() @@ -35,10 +31,6 @@ class Timesheet(Document): self.calculate_percentage_billed() self.set_dates() - def set_employee_name(self): - if self.employee and not self.employee_name: - self.employee_name = frappe.db.get_value("Employee", self.employee, "employee_name") - def calculate_total_amounts(self): self.total_hours = 0.0 self.total_billable_hours = 0.0 @@ -80,10 +72,7 @@ class Timesheet(Document): if self.per_billed == 100: self.status = "Billed" - if self.salary_slip: - self.status = "Payslip" - - if self.sales_invoice and self.salary_slip: + if self.sales_invoice: self.status = "Completed" def set_dates(self): @@ -328,7 +317,7 @@ def get_timesheet(doctype, txt, searchfield, start, page_len, filters): ts.status in ('Submitted', 'Payslip') and tsd.parent = ts.name and tsd.docstatus = 1 and ts.total_billable_amount > 0 and tsd.parent LIKE %(txt)s {condition} - order by tsd.parent limit %(start)s, %(page_len)s""".format( + order by tsd.parent limit %(page_len)s offset %(start)s""".format( condition=condition ), { @@ -406,27 +395,6 @@ def make_sales_invoice(source_name, item_code=None, customer=None, currency=None return target -@frappe.whitelist() -def make_salary_slip(source_name, target_doc=None): - target = frappe.new_doc("Salary Slip") - set_missing_values(source_name, target) - target.run_method("get_emp_and_working_day_details") - - return target - - -def set_missing_values(time_sheet, target): - doc = frappe.get_doc("Timesheet", time_sheet) - target.employee = doc.employee - target.employee_name = doc.employee_name - target.salary_slip_based_on_timesheet = 1 - target.start_date = doc.start_date - target.end_date = doc.end_date - target.posting_date = doc.modified - target.total_working_hours = doc.total_hours - target.append("timesheets", {"time_sheet": doc.name, "working_hours": doc.total_hours}) - - @frappe.whitelist() def get_activity_cost(employee=None, activity_type=None, currency=None): base_currency = frappe.defaults.get_global_default("currency") @@ -515,7 +483,7 @@ def get_timesheets_list( tsd.project IN %(projects)s ) ORDER BY `end_date` ASC - LIMIT {0}, {1} + LIMIT {1} offset {0} """.format( limit_start, limit_page_length ), diff --git a/erpnext/projects/doctype/timesheet/timesheet_dashboard.py b/erpnext/projects/doctype/timesheet/timesheet_dashboard.py index 6d6b57bebd..07e96cc786 100644 --- a/erpnext/projects/doctype/timesheet/timesheet_dashboard.py +++ b/erpnext/projects/doctype/timesheet/timesheet_dashboard.py @@ -4,5 +4,5 @@ from frappe import _ def get_data(): return { "fieldname": "time_sheet", - "transactions": [{"label": _("References"), "items": ["Sales Invoice", "Salary Slip"]}], + "transactions": [{"label": _("References"), "items": ["Sales Invoice"]}], } diff --git a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/__init__.py b/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.js b/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.js deleted file mode 100644 index 9a30b99f9b..0000000000 --- a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Employee Hours Utilization Based On Timesheet"] = { - "filters": [ - { - fieldname: "company", - label: __("Company"), - fieldtype: "Link", - options: "Company", - default: frappe.defaults.get_user_default("Company"), - reqd: 1 - }, - { - fieldname: "from_date", - label: __("From Date"), - fieldtype: "Date", - default: frappe.datetime.add_months(frappe.datetime.get_today(), -1), - reqd: 1 - }, - { - fieldname:"to_date", - label: __("To Date"), - fieldtype: "Date", - default: frappe.datetime.now_date(), - reqd: 1 - }, - { - fieldname: "employee", - label: __("Employee"), - fieldtype: "Link", - options: "Employee" - }, - { - fieldname: "department", - label: __("Department"), - fieldtype: "Link", - options: "Department" - }, - { - fieldname: "project", - label: __("Project"), - fieldtype: "Link", - options: "Project" - } - ] -}; diff --git a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.json b/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.json deleted file mode 100644 index 5ff8186572..0000000000 --- a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "add_total_row": 0, - "columns": [], - "creation": "2021-04-05 19:23:43.838623", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "filters": [], - "idx": 0, - "is_standard": "Yes", - "modified": "2021-04-05 19:23:43.838623", - "modified_by": "Administrator", - "module": "Projects", - "name": "Employee Hours Utilization Based On Timesheet", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Timesheet", - "report_name": "Employee Hours Utilization Based On Timesheet", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.py b/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.py deleted file mode 100644 index a89e6f039e..0000000000 --- a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/employee_hours_utilization_based_on_timesheet.py +++ /dev/null @@ -1,261 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.utils import flt, getdate - - -def execute(filters=None): - return EmployeeHoursReport(filters).run() - - -class EmployeeHoursReport: - """Employee Hours Utilization Report Based On Timesheet""" - - def __init__(self, filters=None): - self.filters = frappe._dict(filters or {}) - - self.from_date = getdate(self.filters.from_date) - self.to_date = getdate(self.filters.to_date) - - self.validate_dates() - self.validate_standard_working_hours() - - def validate_dates(self): - self.day_span = (self.to_date - self.from_date).days - - if self.day_span <= 0: - frappe.throw(_("From Date must come before To Date")) - - def validate_standard_working_hours(self): - self.standard_working_hours = frappe.db.get_single_value("HR Settings", "standard_working_hours") - if not self.standard_working_hours: - msg = _( - "The metrics for this report are calculated based on the Standard Working Hours. Please set {0} in {1}." - ).format( - frappe.bold("Standard Working Hours"), - frappe.utils.get_link_to_form("HR Settings", "HR Settings"), - ) - - frappe.throw(msg) - - def run(self): - self.generate_columns() - self.generate_data() - self.generate_report_summary() - self.generate_chart_data() - - return self.columns, self.data, None, self.chart, self.report_summary - - def generate_columns(self): - self.columns = [ - { - "label": _("Employee"), - "options": "Employee", - "fieldname": "employee", - "fieldtype": "Link", - "width": 230, - }, - { - "label": _("Department"), - "options": "Department", - "fieldname": "department", - "fieldtype": "Link", - "width": 120, - }, - {"label": _("Total Hours (T)"), "fieldname": "total_hours", "fieldtype": "Float", "width": 120}, - { - "label": _("Billed Hours (B)"), - "fieldname": "billed_hours", - "fieldtype": "Float", - "width": 170, - }, - { - "label": _("Non-Billed Hours (NB)"), - "fieldname": "non_billed_hours", - "fieldtype": "Float", - "width": 170, - }, - { - "label": _("Untracked Hours (U)"), - "fieldname": "untracked_hours", - "fieldtype": "Float", - "width": 170, - }, - { - "label": _("% Utilization (B + NB) / T"), - "fieldname": "per_util", - "fieldtype": "Percentage", - "width": 200, - }, - { - "label": _("% Utilization (B / T)"), - "fieldname": "per_util_billed_only", - "fieldtype": "Percentage", - "width": 200, - }, - ] - - def generate_data(self): - self.generate_filtered_time_logs() - self.generate_stats_by_employee() - self.set_employee_department_and_name() - - if self.filters.department: - self.filter_stats_by_department() - - self.calculate_utilizations() - - self.data = [] - - for emp, data in self.stats_by_employee.items(): - row = frappe._dict() - row["employee"] = emp - row.update(data) - self.data.append(row) - - # Sort by descending order of percentage utilization - self.data.sort(key=lambda x: x["per_util"], reverse=True) - - def filter_stats_by_department(self): - filtered_data = frappe._dict() - for emp, data in self.stats_by_employee.items(): - if data["department"] == self.filters.department: - filtered_data[emp] = data - - # Update stats - self.stats_by_employee = filtered_data - - def generate_filtered_time_logs(self): - additional_filters = "" - - filter_fields = ["employee", "project", "company"] - - for field in filter_fields: - if self.filters.get(field): - if field == "project": - additional_filters += f"AND ttd.{field} = '{self.filters.get(field)}'" - else: - additional_filters += f"AND tt.{field} = '{self.filters.get(field)}'" - - self.filtered_time_logs = frappe.db.sql( - """ - SELECT tt.employee AS employee, ttd.hours AS hours, ttd.is_billable AS is_billable, ttd.project AS project - FROM `tabTimesheet Detail` AS ttd - JOIN `tabTimesheet` AS tt - ON ttd.parent = tt.name - WHERE tt.employee IS NOT NULL - AND tt.start_date BETWEEN '{0}' AND '{1}' - AND tt.end_date BETWEEN '{0}' AND '{1}' - {2} - """.format( - self.filters.from_date, self.filters.to_date, additional_filters - ) - ) - - def generate_stats_by_employee(self): - self.stats_by_employee = frappe._dict() - - for emp, hours, is_billable, project in self.filtered_time_logs: - self.stats_by_employee.setdefault(emp, frappe._dict()).setdefault("billed_hours", 0.0) - - self.stats_by_employee[emp].setdefault("non_billed_hours", 0.0) - - if is_billable: - self.stats_by_employee[emp]["billed_hours"] += flt(hours, 2) - else: - self.stats_by_employee[emp]["non_billed_hours"] += flt(hours, 2) - - def set_employee_department_and_name(self): - for emp in self.stats_by_employee: - emp_name = frappe.db.get_value("Employee", emp, "employee_name") - emp_dept = frappe.db.get_value("Employee", emp, "department") - - self.stats_by_employee[emp]["department"] = emp_dept - self.stats_by_employee[emp]["employee_name"] = emp_name - - def calculate_utilizations(self): - TOTAL_HOURS = flt(self.standard_working_hours * self.day_span, 2) - for emp, data in self.stats_by_employee.items(): - data["total_hours"] = TOTAL_HOURS - data["untracked_hours"] = flt(TOTAL_HOURS - data["billed_hours"] - data["non_billed_hours"], 2) - - # To handle overtime edge-case - if data["untracked_hours"] < 0: - data["untracked_hours"] = 0.0 - - data["per_util"] = flt( - ((data["billed_hours"] + data["non_billed_hours"]) / TOTAL_HOURS) * 100, 2 - ) - data["per_util_billed_only"] = flt((data["billed_hours"] / TOTAL_HOURS) * 100, 2) - - def generate_report_summary(self): - self.report_summary = [] - - if not self.data: - return - - avg_utilization = 0.0 - avg_utilization_billed_only = 0.0 - total_billed, total_non_billed = 0.0, 0.0 - total_untracked = 0.0 - - for row in self.data: - avg_utilization += row["per_util"] - avg_utilization_billed_only += row["per_util_billed_only"] - total_billed += row["billed_hours"] - total_non_billed += row["non_billed_hours"] - total_untracked += row["untracked_hours"] - - avg_utilization /= len(self.data) - avg_utilization = flt(avg_utilization, 2) - - avg_utilization_billed_only /= len(self.data) - avg_utilization_billed_only = flt(avg_utilization_billed_only, 2) - - THRESHOLD_PERCENTAGE = 70.0 - self.report_summary = [ - { - "value": f"{avg_utilization}%", - "indicator": "Red" if avg_utilization < THRESHOLD_PERCENTAGE else "Green", - "label": _("Avg Utilization"), - "datatype": "Percentage", - }, - { - "value": f"{avg_utilization_billed_only}%", - "indicator": "Red" if avg_utilization_billed_only < THRESHOLD_PERCENTAGE else "Green", - "label": _("Avg Utilization (Billed Only)"), - "datatype": "Percentage", - }, - {"value": total_billed, "label": _("Total Billed Hours"), "datatype": "Float"}, - {"value": total_non_billed, "label": _("Total Non-Billed Hours"), "datatype": "Float"}, - ] - - def generate_chart_data(self): - self.chart = {} - - labels = [] - billed_hours = [] - non_billed_hours = [] - untracked_hours = [] - - for row in self.data: - labels.append(row.get("employee_name")) - billed_hours.append(row.get("billed_hours")) - non_billed_hours.append(row.get("non_billed_hours")) - untracked_hours.append(row.get("untracked_hours")) - - self.chart = { - "data": { - "labels": labels[:30], - "datasets": [ - {"name": _("Billed Hours"), "values": billed_hours[:30]}, - {"name": _("Non-Billed Hours"), "values": non_billed_hours[:30]}, - {"name": _("Untracked Hours"), "values": untracked_hours[:30]}, - ], - }, - "type": "bar", - "barOptions": {"stacked": True}, - } diff --git a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/test_employee_util.py b/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/test_employee_util.py deleted file mode 100644 index 4cddc4a349..0000000000 --- a/erpnext/projects/report/employee_hours_utilization_based_on_timesheet/test_employee_util.py +++ /dev/null @@ -1,199 +0,0 @@ -import unittest - -import frappe -from frappe.utils.make_random import get_random - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.projects.doctype.project.test_project import make_project -from erpnext.projects.report.employee_hours_utilization_based_on_timesheet.employee_hours_utilization_based_on_timesheet import ( - execute, -) - - -class TestEmployeeUtilization(unittest.TestCase): - @classmethod - def setUpClass(cls): - # Create test employee - cls.test_emp1 = make_employee("test1@employeeutil.com", "_Test Company") - cls.test_emp2 = make_employee("test2@employeeutil.com", "_Test Company") - - # Create test project - cls.test_project = make_project({"project_name": "_Test Project"}) - - # Create test timesheets - cls.create_test_timesheets() - - frappe.db.set_value("HR Settings", "HR Settings", "standard_working_hours", 9) - - @classmethod - def create_test_timesheets(cls): - timesheet1 = frappe.new_doc("Timesheet") - timesheet1.employee = cls.test_emp1 - timesheet1.company = "_Test Company" - - timesheet1.append( - "time_logs", - { - "activity_type": get_random("Activity Type"), - "hours": 5, - "is_billable": 1, - "from_time": "2021-04-01 13:30:00.000000", - "to_time": "2021-04-01 18:30:00.000000", - }, - ) - - timesheet1.save() - timesheet1.submit() - - timesheet2 = frappe.new_doc("Timesheet") - timesheet2.employee = cls.test_emp2 - timesheet2.company = "_Test Company" - - timesheet2.append( - "time_logs", - { - "activity_type": get_random("Activity Type"), - "hours": 10, - "is_billable": 0, - "from_time": "2021-04-01 13:30:00.000000", - "to_time": "2021-04-01 23:30:00.000000", - "project": cls.test_project.name, - }, - ) - - timesheet2.save() - timesheet2.submit() - - @classmethod - def tearDownClass(cls): - # Delete time logs - frappe.db.sql( - """ - DELETE FROM `tabTimesheet Detail` - WHERE parent IN ( - SELECT name - FROM `tabTimesheet` - WHERE company = '_Test Company' - ) - """ - ) - - frappe.db.sql("DELETE FROM `tabTimesheet` WHERE company='_Test Company'") - frappe.db.sql(f"DELETE FROM `tabProject` WHERE name='{cls.test_project.name}'") - - def test_utilization_report_with_required_filters_only(self): - filters = {"company": "_Test Company", "from_date": "2021-04-01", "to_date": "2021-04-03"} - - report = execute(filters) - - expected_data = self.get_expected_data_for_test_employees() - self.assertEqual(report[1], expected_data) - - def test_utilization_report_for_single_employee(self): - filters = { - "company": "_Test Company", - "from_date": "2021-04-01", - "to_date": "2021-04-03", - "employee": self.test_emp1, - } - - report = execute(filters) - - emp1_data = frappe.get_doc("Employee", self.test_emp1) - expected_data = [ - { - "employee": self.test_emp1, - "employee_name": "test1@employeeutil.com", - "billed_hours": 5.0, - "non_billed_hours": 0.0, - "department": emp1_data.department, - "total_hours": 18.0, - "untracked_hours": 13.0, - "per_util": 27.78, - "per_util_billed_only": 27.78, - } - ] - - self.assertEqual(report[1], expected_data) - - def test_utilization_report_for_project(self): - filters = { - "company": "_Test Company", - "from_date": "2021-04-01", - "to_date": "2021-04-03", - "project": self.test_project.name, - } - - report = execute(filters) - - emp2_data = frappe.get_doc("Employee", self.test_emp2) - expected_data = [ - { - "employee": self.test_emp2, - "employee_name": "test2@employeeutil.com", - "billed_hours": 0.0, - "non_billed_hours": 10.0, - "department": emp2_data.department, - "total_hours": 18.0, - "untracked_hours": 8.0, - "per_util": 55.56, - "per_util_billed_only": 0.0, - } - ] - - self.assertEqual(report[1], expected_data) - - def test_utilization_report_for_department(self): - emp1_data = frappe.get_doc("Employee", self.test_emp1) - filters = { - "company": "_Test Company", - "from_date": "2021-04-01", - "to_date": "2021-04-03", - "department": emp1_data.department, - } - - report = execute(filters) - - expected_data = self.get_expected_data_for_test_employees() - self.assertEqual(report[1], expected_data) - - def test_report_summary_data(self): - filters = {"company": "_Test Company", "from_date": "2021-04-01", "to_date": "2021-04-03"} - - report = execute(filters) - summary = report[4] - expected_summary_values = ["41.67%", "13.89%", 5.0, 10.0] - - self.assertEqual(len(summary), 4) - - for i in range(4): - self.assertEqual(summary[i]["value"], expected_summary_values[i]) - - def get_expected_data_for_test_employees(self): - emp1_data = frappe.get_doc("Employee", self.test_emp1) - emp2_data = frappe.get_doc("Employee", self.test_emp2) - - return [ - { - "employee": self.test_emp2, - "employee_name": "test2@employeeutil.com", - "billed_hours": 0.0, - "non_billed_hours": 10.0, - "department": emp2_data.department, - "total_hours": 18.0, - "untracked_hours": 8.0, - "per_util": 55.56, - "per_util_billed_only": 0.0, - }, - { - "employee": self.test_emp1, - "employee_name": "test1@employeeutil.com", - "billed_hours": 5.0, - "non_billed_hours": 0.0, - "department": emp1_data.department, - "total_hours": 18.0, - "untracked_hours": 13.0, - "per_util": 27.78, - "per_util_billed_only": 27.78, - }, - ] diff --git a/erpnext/projects/report/project_profitability/__init__.py b/erpnext/projects/report/project_profitability/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/projects/report/project_profitability/project_profitability.js b/erpnext/projects/report/project_profitability/project_profitability.js deleted file mode 100644 index 13ae19bb29..0000000000 --- a/erpnext/projects/report/project_profitability/project_profitability.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Project Profitability"] = { - "filters": [ - { - "fieldname": "company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company"), - "reqd": 1 - }, - { - "fieldname": "start_date", - "label": __("Start Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1) - }, - { - "fieldname": "end_date", - "label": __("End Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.now_date() - }, - { - "fieldname": "customer_name", - "label": __("Customer"), - "fieldtype": "Link", - "options": "Customer" - }, - { - "fieldname": "employee", - "label": __("Employee"), - "fieldtype": "Link", - "options": "Employee" - }, - { - "fieldname": "project", - "label": __("Project"), - "fieldtype": "Link", - "options": "Project" - } - ] -}; diff --git a/erpnext/projects/report/project_profitability/project_profitability.json b/erpnext/projects/report/project_profitability/project_profitability.json deleted file mode 100644 index 0b092cd2c0..0000000000 --- a/erpnext/projects/report/project_profitability/project_profitability.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "add_total_row": 0, - "columns": [], - "creation": "2021-04-16 15:50:28.914872", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "filters": [], - "idx": 0, - "is_standard": "Yes", - "modified": "2021-04-16 15:50:48.490866", - "modified_by": "Administrator", - "module": "Projects", - "name": "Project Profitability", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Timesheet", - "report_name": "Project Profitability", - "report_type": "Script Report", - "roles": [ - { - "role": "HR User" - }, - { - "role": "Accounts User" - }, - { - "role": "Employee" - }, - { - "role": "Projects User" - }, - { - "role": "Manufacturing User" - }, - { - "role": "Employee Self Service" - }, - { - "role": "HR Manager" - } - ] -} \ No newline at end of file diff --git a/erpnext/projects/report/project_profitability/project_profitability.py b/erpnext/projects/report/project_profitability/project_profitability.py deleted file mode 100644 index abbbaf5d92..0000000000 --- a/erpnext/projects/report/project_profitability/project_profitability.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _ -from frappe.utils import flt - - -def execute(filters=None): - data = get_data(filters) - columns = get_columns() - charts = get_chart_data(data) - return columns, data, None, charts - - -def get_data(filters): - data = get_rows(filters) - data = calculate_cost_and_profit(data) - return data - - -def get_rows(filters): - conditions = get_conditions(filters) - standard_working_hours = frappe.db.get_single_value("HR Settings", "standard_working_hours") - if not standard_working_hours: - msg = _( - "The metrics for this report are calculated based on the Standard Working Hours. Please set {0} in {1}." - ).format( - frappe.bold("Standard Working Hours"), - frappe.utils.get_link_to_form("HR Settings", "HR Settings"), - ) - - frappe.msgprint(msg) - return [] - - sql = """ - SELECT - * - FROM - (SELECT - si.customer_name,si.base_grand_total, - si.name as voucher_no,tabTimesheet.employee, - tabTimesheet.title as employee_name,tabTimesheet.parent_project as project, - tabTimesheet.start_date,tabTimesheet.end_date, - tabTimesheet.total_billed_hours,tabTimesheet.name as timesheet, - ss.base_gross_pay,ss.total_working_days, - tabTimesheet.total_billed_hours/(ss.total_working_days * {0}) as utilization - FROM - `tabSalary Slip Timesheet` as sst join `tabTimesheet` on tabTimesheet.name = sst.time_sheet - join `tabSales Invoice Timesheet` as sit on sit.time_sheet = tabTimesheet.name - join `tabSales Invoice` as si on si.name = sit.parent and si.status != "Cancelled" - join `tabSalary Slip` as ss on ss.name = sst.parent and ss.status != "Cancelled" """.format( - standard_working_hours - ) - if conditions: - sql += """ - WHERE - {0}) as t""".format( - conditions - ) - return frappe.db.sql(sql, filters, as_dict=True) - - -def calculate_cost_and_profit(data): - for row in data: - row.fractional_cost = flt(row.base_gross_pay) * flt(row.utilization) - row.profit = flt(row.base_grand_total) - flt(row.base_gross_pay) * flt(row.utilization) - return data - - -def get_conditions(filters): - conditions = [] - - if filters.get("company"): - conditions.append("tabTimesheet.company={0}".format(frappe.db.escape(filters.get("company")))) - - if filters.get("start_date"): - conditions.append("tabTimesheet.start_date>='{0}'".format(filters.get("start_date"))) - - if filters.get("end_date"): - conditions.append("tabTimesheet.end_date<='{0}'".format(filters.get("end_date"))) - - if filters.get("customer_name"): - conditions.append("si.customer_name={0}".format(frappe.db.escape(filters.get("customer_name")))) - - if filters.get("employee"): - conditions.append("tabTimesheet.employee={0}".format(frappe.db.escape(filters.get("employee")))) - - if filters.get("project"): - conditions.append( - "tabTimesheet.parent_project={0}".format(frappe.db.escape(filters.get("project"))) - ) - - conditions = " and ".join(conditions) - return conditions - - -def get_chart_data(data): - if not data: - return None - - labels = [] - utilization = [] - - for entry in data: - labels.append(entry.get("employee_name") + " - " + str(entry.get("end_date"))) - utilization.append(entry.get("utilization")) - - charts = { - "data": {"labels": labels, "datasets": [{"name": "Utilization", "values": utilization}]}, - "type": "bar", - "colors": ["#84BDD5"], - } - return charts - - -def get_columns(): - return [ - { - "fieldname": "customer_name", - "label": _("Customer"), - "fieldtype": "Link", - "options": "Customer", - "width": 150, - }, - { - "fieldname": "employee", - "label": _("Employee"), - "fieldtype": "Link", - "options": "Employee", - "width": 130, - }, - {"fieldname": "employee_name", "label": _("Employee Name"), "fieldtype": "Data", "width": 120}, - { - "fieldname": "voucher_no", - "label": _("Sales Invoice"), - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - { - "fieldname": "timesheet", - "label": _("Timesheet"), - "fieldtype": "Link", - "options": "Timesheet", - "width": 120, - }, - { - "fieldname": "project", - "label": _("Project"), - "fieldtype": "Link", - "options": "Project", - "width": 100, - }, - { - "fieldname": "base_grand_total", - "label": _("Bill Amount"), - "fieldtype": "Currency", - "options": "currency", - "width": 100, - }, - { - "fieldname": "base_gross_pay", - "label": _("Cost"), - "fieldtype": "Currency", - "options": "currency", - "width": 100, - }, - { - "fieldname": "profit", - "label": _("Profit"), - "fieldtype": "Currency", - "options": "currency", - "width": 100, - }, - {"fieldname": "utilization", "label": _("Utilization"), "fieldtype": "Percentage", "width": 100}, - { - "fieldname": "fractional_cost", - "label": _("Fractional Cost"), - "fieldtype": "Int", - "width": 120, - }, - { - "fieldname": "total_billed_hours", - "label": _("Total Billed Hours"), - "fieldtype": "Int", - "width": 150, - }, - {"fieldname": "start_date", "label": _("Start Date"), "fieldtype": "Date", "width": 100}, - {"fieldname": "end_date", "label": _("End Date"), "fieldtype": "Date", "width": 100}, - { - "label": _("Currency"), - "fieldname": "currency", - "fieldtype": "Link", - "options": "Currency", - "width": 80, - }, - ] diff --git a/erpnext/projects/report/project_profitability/test_project_profitability.py b/erpnext/projects/report/project_profitability/test_project_profitability.py deleted file mode 100644 index 91a5447011..0000000000 --- a/erpnext/projects/report/project_profitability/test_project_profitability.py +++ /dev/null @@ -1,72 +0,0 @@ -import frappe -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, getdate - -from erpnext.hr.doctype.employee.test_employee import make_employee -from erpnext.projects.doctype.timesheet.test_timesheet import ( - make_salary_structure_for_timesheet, - make_timesheet, -) -from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice -from erpnext.projects.report.project_profitability.project_profitability import execute - - -class TestProjectProfitability(FrappeTestCase): - def setUp(self): - frappe.db.sql("delete from `tabTimesheet`") - emp = make_employee("test_employee_9@salary.com", company="_Test Company") - - if not frappe.db.exists("Salary Component", "Timesheet Component"): - frappe.get_doc( - {"doctype": "Salary Component", "salary_component": "Timesheet Component"} - ).insert() - - make_salary_structure_for_timesheet(emp, company="_Test Company") - date = getdate() - - self.timesheet = make_timesheet(emp, is_billable=1) - self.salary_slip = make_salary_slip(self.timesheet.name) - self.salary_slip.start_date = self.timesheet.start_date - - holidays = self.salary_slip.get_holidays_for_employee(date, date) - if holidays: - frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 1) - - self.salary_slip.submit() - self.sales_invoice = make_sales_invoice(self.timesheet.name, "_Test Item", "_Test Customer") - self.sales_invoice.due_date = date - self.sales_invoice.submit() - - frappe.db.set_value("HR Settings", None, "standard_working_hours", 8) - frappe.db.set_value("Payroll Settings", None, "include_holidays_in_total_working_days", 0) - - def test_project_profitability(self): - filters = { - "company": "_Test Company", - "start_date": add_days(self.timesheet.start_date, -3), - "end_date": self.timesheet.start_date, - } - - report = execute(filters) - - row = report[1][0] - timesheet = frappe.get_doc("Timesheet", self.timesheet.name) - - self.assertEqual(self.sales_invoice.customer, row.customer_name) - self.assertEqual(timesheet.title, row.employee_name) - self.assertEqual(self.sales_invoice.base_grand_total, row.base_grand_total) - self.assertEqual(self.salary_slip.base_gross_pay, row.base_gross_pay) - self.assertEqual(timesheet.total_billed_hours, row.total_billed_hours) - self.assertEqual(self.salary_slip.total_working_days, row.total_working_days) - - standard_working_hours = frappe.db.get_single_value("HR Settings", "standard_working_hours") - utilization = timesheet.total_billed_hours / ( - self.salary_slip.total_working_days * standard_working_hours - ) - self.assertEqual(utilization, row.utilization) - - profit = self.sales_invoice.base_grand_total - self.salary_slip.base_gross_pay * utilization - self.assertEqual(profit, row.profit) - - fractional_cost = self.salary_slip.base_gross_pay * utilization - self.assertEqual(fractional_cost, row.fractional_cost) diff --git a/erpnext/projects/utils.py b/erpnext/projects/utils.py index 000ea66275..3cc4da4f07 100644 --- a/erpnext/projects/utils.py +++ b/erpnext/projects/utils.py @@ -25,7 +25,7 @@ def query_task(doctype, txt, searchfield, start, page_len, filters): case when `%s` like %s then 0 else 1 end, `%s`, subject - limit %s, %s""" + limit %s offset %s""" % (searchfield, "%s", "%s", match_conditions, "%s", searchfield, "%s", searchfield, "%s", "%s"), - (search_string, search_string, order_by_string, order_by_string, start, page_len), + (search_string, search_string, order_by_string, order_by_string, page_len, start), ) diff --git a/erpnext/projects/workspace/projects/projects.json b/erpnext/projects/workspace/projects/projects.json index c5a047d5cb..1253649e49 100644 --- a/erpnext/projects/workspace/projects/projects.json +++ b/erpnext/projects/workspace/projects/projects.json @@ -138,28 +138,6 @@ "onboard": 1, "type": "Link" }, - { - "dependencies": "Timesheet", - "hidden": 0, - "is_query_report": 1, - "label": "Employee Hours Utilization", - "link_count": 0, - "link_to": "Employee Hours Utilization Based On Timesheet", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, - { - "dependencies": "Timesheet, Sales Invoice, Salary Slip", - "hidden": 0, - "is_query_report": 1, - "label": "Project Profitability", - "link_count": 0, - "link_to": "Project Profitability", - "link_type": "Report", - "onboard": 0, - "type": "Link" - }, { "dependencies": "Project", "hidden": 0, @@ -194,13 +172,14 @@ "type": "Link" } ], - "modified": "2022-01-13 17:41:55.163878", + "modified": "2022-06-28 12:31:30.167740", "modified_by": "Administrator", "module": "Projects", "name": "Projects", "owner": "Administrator", "parent_page": "", "public": 1, + "quick_lists": [], "restrict_to_domain": "", "roles": [], "sequence_id": 20.0, diff --git a/erpnext/public/build.json b/erpnext/public/build.json index 91a752c291..44abb339d0 100644 --- a/erpnext/public/build.json +++ b/erpnext/public/build.json @@ -25,7 +25,6 @@ "public/js/controllers/taxes_and_totals.js", "public/js/controllers/transaction.js", "public/js/templates/item_selector.html", - "public/js/templates/employees_to_mark_attendance.html", "public/js/utils/item_selector.js", "public/js/help_links.js", "public/js/agriculture/ternary_plot.js", diff --git a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js index 214a1be134..cb34c9b4c7 100644 --- a/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js +++ b/erpnext/public/js/bank_reconciliation_tool/dialog_manager.js @@ -169,62 +169,46 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { label: __("Filters"), depends_on: "eval:doc.action=='Match Against Voucher'", }, - { - fieldtype: "Check", - label: "Payment Entry", - fieldname: "payment_entry", - onchange: () => this.update_options(), - }, - { - fieldtype: "Check", - label: "Journal Entry", - fieldname: "journal_entry", - onchange: () => this.update_options(), - }, - { - fieldtype: "Check", - label: "Loan Repayment", - fieldname: "loan_repayment", - onchange: () => this.update_options(), - }, - { - fieldname: "column_break_5", - fieldtype: "Column Break", - }, - { - fieldtype: "Check", - label: "Sales Invoice", - fieldname: "sales_invoice", - onchange: () => this.update_options(), - }, - { - fieldtype: "Check", - label: "Purchase Invoice", - fieldname: "purchase_invoice", - onchange: () => this.update_options(), - }, + ]; + + frappe.call({ + method: "erpnext.accounts.doctype.bank_transaction.bank_transaction.get_doctypes_for_bank_reconciliation", + callback: (r) => { + $.each(r.message, (_i, entry) => { + if (_i % 3 == 0) { + fields.push({ + fieldtype: "Column Break", + }); + } + fields.push({ + fieldtype: "Check", + label: entry, + fieldname: frappe.scrub(entry), + onchange: () => this.update_options(), + }); + }); + + fields.push(...this.get_voucher_fields()); + + me.dialog = new frappe.ui.Dialog({ + title: __("Reconcile the Bank Transaction"), + fields: fields, + size: "large", + primary_action: (values) => + this.reconciliation_dialog_primary_action(values), + }); + } + }); + } + + get_voucher_fields() { + return [ { fieldtype: "Check", label: "Show Only Exact Amount", fieldname: "exact_match", onchange: () => this.update_options(), }, - { - fieldname: "column_break_5", - fieldtype: "Column Break", - }, - { - fieldtype: "Check", - label: "Expense Claim", - fieldname: "expense_claim", - onchange: () => this.update_options(), - }, - { - fieldtype: "Check", - label: "Loan Disbursement", - fieldname: "loan_disbursement", - onchange: () => this.update_options(), - }, { fieldtype: "Section Break", fieldname: "section_break_1", @@ -404,14 +388,6 @@ erpnext.accounts.bank_reconciliation.DialogManager = class DialogManager { read_only: 1, }, ]; - - me.dialog = new frappe.ui.Dialog({ - title: __("Reconcile the Bank Transaction"), - fields: fields, - size: "large", - primary_action: (values) => - this.reconciliation_dialog_primary_action(values), - }); } get_selected_attributes() { diff --git a/erpnext/public/js/controllers/accounts.js b/erpnext/public/js/controllers/accounts.js index 84c717676c..c1fe72bb48 100644 --- a/erpnext/public/js/controllers/accounts.js +++ b/erpnext/public/js/controllers/accounts.js @@ -27,7 +27,8 @@ frappe.ui.form.on(cur_frm.doctype, { query: "erpnext.controllers.queries.tax_account_query", filters: { "account_type": account_type, - "company": doc.company + "company": doc.company, + "disabled": 0 } } }); diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index bbf1ff6736..09779d89ec 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -74,6 +74,7 @@ erpnext.buying.BuyingController = class BuyingController extends erpnext.Transac me.frm.set_query('supplier_address', erpnext.queries.address_query); me.frm.set_query('billing_address', erpnext.queries.company_address_query); + erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype); if(this.frm.fields_dict.supplier) { this.frm.set_query("supplier", function() { @@ -82,15 +83,23 @@ erpnext.buying.BuyingController = class BuyingController extends erpnext.Transac this.frm.set_query("item_code", "items", function() { if (me.frm.doc.is_subcontracted) { + var filters = {'supplier': me.frm.doc.supplier}; + if (me.frm.doc.is_old_subcontracting_flow) { + filters["is_sub_contracted_item"] = 1; + } + else { + filters["is_stock_item"] = 0; + } + return{ query: "erpnext.controllers.queries.item_query", - filters:{ 'supplier': me.frm.doc.supplier, 'is_sub_contracted_item': 1 } + filters: filters } } else { return{ query: "erpnext.controllers.queries.item_query", - filters: { 'supplier': me.frm.doc.supplier, 'is_purchase_item': 1 } + filters: { 'supplier': me.frm.doc.supplier, 'is_purchase_item': 1, 'has_variants': 0} } } }); diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 3dd11f69a7..16b0b4a866 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -789,11 +789,23 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { if(this.frm.doc.is_pos && (update_paid_amount===undefined || update_paid_amount)) { $.each(this.frm.doc['payments'] || [], function(index, data) { if(data.default && payment_status && total_amount_to_pay > 0) { - let base_amount = flt(total_amount_to_pay, precision("base_amount", data)); + let base_amount, amount; + + if (me.frm.doc.party_account_currency == me.frm.doc.currency) { + // if customer/supplier currency is same as company currency + // total_amount_to_pay is already in customer/supplier currency + // so base_amount has to be calculated using total_amount_to_pay + base_amount = flt(total_amount_to_pay * me.frm.doc.conversion_rate, precision("base_amount", data)); + amount = flt(total_amount_to_pay, precision("amount", data)); + } else { + base_amount = flt(total_amount_to_pay, precision("base_amount", data)); + amount = flt(total_amount_to_pay / me.frm.doc.conversion_rate, precision("amount", data)); + } + frappe.model.set_value(data.doctype, data.name, "base_amount", base_amount); - let amount = flt(total_amount_to_pay / me.frm.doc.conversion_rate, precision("amount", data)); frappe.model.set_value(data.doctype, data.name, "amount", amount); payment_status = false; + } else if(me.frm.doc.paid_amount) { frappe.model.set_value(data.doctype, data.name, "amount", 0.0); } diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 767221e99d..85485fc7a6 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -423,7 +423,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe item.barcode = null; - if(item.item_code || item.barcode || item.serial_no) { + if(item.item_code || item.serial_no) { if(!this.validate_company_and_party()) { this.frm.fields_dict["items"].grid.grid_rows[item.idx - 1].remove(); } else { @@ -453,7 +453,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe is_pos: cint(me.frm.doc.is_pos), is_return: cint(me.frm.doc.is_return), is_subcontracted: me.frm.doc.is_subcontracted, - transaction_date: me.frm.doc.transaction_date || me.frm.doc.posting_date, ignore_pricing_rule: me.frm.doc.ignore_pricing_rule, doctype: me.frm.doc.doctype, name: me.frm.doc.name, @@ -463,6 +462,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe stock_qty: item.stock_qty, conversion_factor: item.conversion_factor, weight_per_unit: item.weight_per_unit, + uom: item.uom, weight_uom: item.weight_uom, manufacturer: item.manufacturer, stock_uom: item.stock_uom, @@ -470,7 +470,8 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe cost_center: item.cost_center, tax_category: me.frm.doc.tax_category, item_tax_template: item.item_tax_template, - child_docname: item.name + child_docname: item.name, + is_old_subcontracting_flow: me.frm.doc.is_old_subcontracting_flow, } }, @@ -526,12 +527,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe if(!d[k]) d[k] = v; }); - if (d.__disable_batch_serial_selector) { - // reset for future use. - d.__disable_batch_serial_selector = false; - return; - } - if (d.has_batch_no && d.has_serial_no) { d.batch_no = undefined; } @@ -923,12 +918,12 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } currency() { - /* manqala 19/09/2016: let the translation date be whichever of the transaction_date or posting_date is available */ - var transaction_date = this.frm.doc.transaction_date || this.frm.doc.posting_date; - /* end manqala */ - var me = this; + // The transaction date be either transaction_date (from orders) or posting_date (from invoices) + let transaction_date = this.frm.doc.transaction_date || this.frm.doc.posting_date; + + let me = this; this.set_dynamic_labels(); - var company_currency = this.get_company_currency(); + let company_currency = this.get_company_currency(); // Added `ignore_price_list` to determine if document is loading after mapping from another doc if(this.frm.doc.currency && this.frm.doc.currency !== company_currency && !(this.frm.doc.__onload && this.frm.doc.__onload.ignore_price_list)) { @@ -942,7 +937,13 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } }); } else { - this.conversion_rate(); + // company currency and doc currency is same + // this will prevent unnecessary conversion rate triggers + if(this.frm.doc.currency === this.get_company_currency()) { + this.frm.set_value("conversion_rate", 1.0); + } else { + this.conversion_rate(); + } } } @@ -1107,9 +1108,25 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } } + is_a_mapped_document(item) { + const mapped_item_field_map = { + "Delivery Note Item": ["si_detail", "so_detail", "dn_detail"], + "Sales Invoice Item": ["dn_detail", "so_detail", "sales_invoice_item"], + "Purchase Receipt Item": ["purchase_order_item", "purchase_invoice_item", "purchase_receipt_item"], + "Purchase Invoice Item": ["purchase_order_item", "pr_detail", "po_detail"], + }; + const mappped_fields = mapped_item_field_map[item.doctype] || []; + + return mappped_fields + .map((field) => item[field]) + .filter(Boolean).length > 0; + } + batch_no(doc, cdt, cdn) { let item = frappe.get_doc(cdt, cdn); - this.apply_price_list(item, true); + if (!this.is_a_mapped_document(item)) { + this.apply_price_list(item, true); + } } toggle_conversion_factor(item) { @@ -1384,12 +1401,15 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe var me = this; var args = this._get_args(item); if (!(args.items && args.items.length)) { - if(calculate_taxes_and_totals) me.calculate_taxes_and_totals(); + if (calculate_taxes_and_totals) me.calculate_taxes_and_totals(); return; } // Target doc created from a mapped doc if (this.frm.doc.__onload && this.frm.doc.__onload.ignore_price_list) { + // Calculate totals even though pricing rule is not applied. + // `apply_pricing_rule` is triggered due to change in data which most likely contributes to Total. + if (calculate_taxes_and_totals) me.calculate_taxes_and_totals(); return; } @@ -1480,48 +1500,46 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } _set_values_for_item_list(children) { - var me = this; - var items_rule_dict = {}; + const items_rule_dict = {}; - for(var i=0, l=children.length; i 0) { - me.apply_product_discount(d); + if (child.free_item_data.length > 0) { + this.apply_product_discount(child); } - if (d.apply_rule_on_other_items) { - items_rule_dict[d.name] = d; + if (child.apply_rule_on_other_items) { + items_rule_dict[child.name] = child; } } - me.frm.refresh_field('items'); - me.apply_rule_on_other_items(items_rule_dict); - - me.calculate_taxes_and_totals(); + this.apply_rule_on_other_items(items_rule_dict); + this.calculate_taxes_and_totals(); } apply_rule_on_other_items(args) { @@ -1986,7 +2004,8 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe "qty": item.qty, "description": item.description, "serial_no": item.serial_no, - "batch_no": item.batch_no + "batch_no": item.batch_no, + "sample_size": item.sample_quantity }); dialog_items.grid.refresh(); } diff --git a/erpnext/public/js/erpnext.bundle.js b/erpnext/public/js/erpnext.bundle.js index 3dae6d407b..14a088e405 100644 --- a/erpnext/public/js/erpnext.bundle.js +++ b/erpnext/public/js/erpnext.bundle.js @@ -8,7 +8,6 @@ import "./payment/payments"; import "./controllers/taxes_and_totals"; import "./controllers/transaction"; import "./templates/item_selector.html"; -import "./templates/employees_to_mark_attendance.html"; import "./utils/item_selector"; import "./help_links"; import "./agriculture/ternary_plot"; @@ -22,5 +21,8 @@ import "./utils/barcode_scanner"; import "./telephony"; import "./templates/call_link.html"; import "./bulk_transaction_processing"; +import "./utils/crm_activities"; +import "./templates/crm_activities.html"; +import "./templates/crm_notes.html"; // import { sum } from 'frappe/public/utils/util.js' diff --git a/erpnext/public/js/salary_slip_deductions_report_filters.js b/erpnext/public/js/salary_slip_deductions_report_filters.js deleted file mode 100644 index 1ca36600c3..0000000000 --- a/erpnext/public/js/salary_slip_deductions_report_filters.js +++ /dev/null @@ -1,66 +0,0 @@ -frappe.provide("erpnext.salary_slip_deductions_report_filters"); - -erpnext.salary_slip_deductions_report_filters = { - "filters": [ - { - fieldname: "company", - label: __("Company"), - fieldtype: "Link", - options: "Company", - reqd:1, - default: frappe.defaults.get_user_default("Company"), - }, - { - fieldname: "month", - label: __("Month"), - fieldtype: "Select", - reqd: 1 , - options: [ - { "value": 1, "label": __("Jan") }, - { "value": 2, "label": __("Feb") }, - { "value": 3, "label": __("Mar") }, - { "value": 4, "label": __("Apr") }, - { "value": 5, "label": __("May") }, - { "value": 6, "label": __("June") }, - { "value": 7, "label": __("July") }, - { "value": 8, "label": __("Aug") }, - { "value": 9, "label": __("Sep") }, - { "value": 10, "label": __("Oct") }, - { "value": 11, "label": __("Nov") }, - { "value": 12, "label": __("Dec") }, - ], - default: frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1 - }, - { - fieldname:"year", - label: __("Year"), - fieldtype: "Select", - reqd: 1 - }, - { - fieldname: "department", - label: __("Department"), - fieldtype: "Link", - options: "Department", - }, - { - fieldname: "branch", - label: __("Branch"), - fieldtype: "Link", - options: "Branch", - } - ], - - "onload": function() { - return frappe.call({ - method: "erpnext.regional.report.provident_fund_deductions.provident_fund_deductions.get_years", - callback: function(r) { - var year_filter = frappe.query_report.get_filter('year'); - year_filter.df.options = r.message; - year_filter.df.default = r.message.split("\n")[0]; - year_filter.refresh(); - year_filter.set_input(year_filter.df.default); - } - }); - } -} diff --git a/erpnext/public/js/templates/crm_activities.html b/erpnext/public/js/templates/crm_activities.html new file mode 100644 index 0000000000..4260319608 --- /dev/null +++ b/erpnext/public/js/templates/crm_activities.html @@ -0,0 +1,176 @@ +

+
+ + + + +
+
+
+
+ {{ __("Open Tasks") }} +
+ {% if (tasks.length) { %} + {% for(var i=0, l=tasks.length; i +
+ +
+ +
+
+ {% if(tasks[i].date) { %} +
+ {%= frappe.datetime.global_date_format(tasks[i].date) %} +
+ {% } %} + {% if(tasks[i].allocated_to) { %} +
+ {{ __("Allocated To:") }} + {%= tasks[i].allocated_to %} +
+ {% } %} +
+ {% } %} + {% } else { %} +
+ {{ __("No open task") }} +
+ {% } %} +
+
+
+ {{ __("Open Events") }} +
+ {% if (events.length) { %} + {% let icon_set = {"Sent/Received Email": "mail", "Call": "call", "Meeting": "share-people"}; %} + {% for(var i=0, l=events.length; i +
+ +
+ +
+
+
+ {%= frappe.datetime.global_date_format(events[i].starts_on) %} + + {% if (events[i].ends_on) { %} + {% if (frappe.datetime.obj_to_user(events[i].starts_on) != frappe.datetime.obj_to_user(events[i].ends_on)) %} + - + {%= frappe.datetime.global_date_format(frappe.datetime.obj_to_user(events[i].ends_on)) %} + {%= frappe.datetime.get_time(events[i].ends_on) %} + {% } else if (events[i].ends_on) { %} + - + {%= frappe.datetime.get_time(events[i].ends_on) %} + {% } %} + {% } %} + +
+
+ {% } %} + {% } else { %} +
+ {{ __("No open event") }} +
+ {% } %} +
+
+
+ + + \ No newline at end of file diff --git a/erpnext/public/js/templates/crm_notes.html b/erpnext/public/js/templates/crm_notes.html new file mode 100644 index 0000000000..fddeb1c1cc --- /dev/null +++ b/erpnext/public/js/templates/crm_notes.html @@ -0,0 +1,74 @@ +
+
+ +
+
+ {% if (notes.length) { %} + {% for(var i=0, l=notes.length; i +
+
+
+ {{ frappe.avatar(notes[i].added_by) }} +
+
+
+ {{ strip_html(notes[i].added_by) }} +
+
+ {{ frappe.datetime.global_date_format(notes[i].added_on) }} +
+
+
+
+
+ {{ notes[i].note }} +
+
+ + + + + + +
+
+ {% } %} + {% } else { %} +
+ {{ __("No Notes") }} +
+ {% } %} +
+ + + \ No newline at end of file diff --git a/erpnext/public/js/templates/employees_to_mark_attendance.html b/erpnext/public/js/templates/employees_to_mark_attendance.html deleted file mode 100644 index 167c775636..0000000000 --- a/erpnext/public/js/templates/employees_to_mark_attendance.html +++ /dev/null @@ -1,14 +0,0 @@ -{% if data %} -
-
- Employees to mark attendance -
- {% for item in data %} -
- {{ item.employee }}    {{ item.employee_name }} -
- {% } %} -
-{% } else { %} -
-{% } %} diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index eded16529c..f2bea5829c 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -87,17 +87,6 @@ $.extend(erpnext, { route_to_pending_reposts: (args) => { frappe.set_route('List', 'Repost Item Valuation', args); }, - - proceed_save_with_reminders_frequency_change: () => { - frappe.ui.hide_open_dialog(); - - frappe.call({ - method: 'erpnext.hr.doctype.hr_settings.hr_settings.set_proceed_with_frequency_change', - callback: () => { - cur_frm.save(); - } - }); - } }); @@ -125,7 +114,7 @@ $.extend(erpnext.utils, { }, add_indicator_for_multicompany: function(frm, info) { - frm.dashboard.stats_area.removeClass('hidden'); + frm.dashboard.stats_area.show(); frm.dashboard.stats_area_row.addClass('flex'); frm.dashboard.stats_area_row.css('flex-wrap', 'wrap'); @@ -213,8 +202,10 @@ $.extend(erpnext.utils, { filters.splice(index, 0, { "fieldname": dimension["fieldname"], "label": __(dimension["label"]), - "fieldtype": "Link", - "options": dimension["document_type"] + "fieldtype": "MultiSelectList", + get_data: function(txt) { + return frappe.db.get_link_options(dimension["document_type"], txt); + }, }); } }); @@ -222,6 +213,32 @@ $.extend(erpnext.utils, { }); }, + add_inventory_dimensions: function(report_name, index) { + let filters = frappe.query_reports[report_name].filters; + + frappe.call({ + method: "erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_inventory_dimensions", + callback: function(r) { + if (r.message && r.message.length) { + r.message.forEach((dimension) => { + let found = filters.some(el => el.fieldname === dimension['fieldname']); + + if (!found) { + filters.splice(index, 0, { + "fieldname": dimension["fieldname"], + "label": __(dimension["label"]), + "fieldtype": "MultiSelectList", + get_data: function(txt) { + return frappe.db.get_link_options(dimension["doctype"], txt); + }, + }); + } + }); + } + } + }); + }, + make_subscription: function(doctype, docname) { frappe.call({ method: "frappe.automation.doctype.auto_repeat.auto_repeat.make_auto_repeat", @@ -484,7 +501,11 @@ erpnext.utils.update_child_items = function(opts) { filters = {"is_sales_item": 1}; } else if (frm.doc.doctype == 'Purchase Order') { if (frm.doc.is_subcontracted) { - filters = {"is_sub_contracted_item": 1}; + if (frm.doc.is_old_subcontracting_flow) { + filters = {"is_sub_contracted_item": 1}; + } else { + filters = {"is_stock_item": 0}; + } } else { filters = {"is_purchase_item": 1}; } @@ -711,7 +732,7 @@ erpnext.utils.map_current_doc = function(opts) { get_query: opts.get_query, add_filters_group: 1, allow_child_item_selection: opts.allow_child_item_selection, - child_fieldname: opts.child_fielname, + child_fieldname: opts.child_fieldname, child_columns: opts.child_columns, size: opts.size, action: function(selections, args) { diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js index f72b85c0f6..a6bff2c148 100644 --- a/erpnext/public/js/utils/barcode_scanner.js +++ b/erpnext/public/js/utils/barcode_scanner.js @@ -9,7 +9,14 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.barcode_field = opts.barcode_field || "barcode"; this.serial_no_field = opts.serial_no_field || "serial_no"; this.batch_no_field = opts.batch_no_field || "batch_no"; + this.uom_field = opts.uom_field || "uom"; this.qty_field = opts.qty_field || "qty"; + // field name on row which defines max quantity to be scanned e.g. picklist + this.max_qty_field = opts.max_qty_field; + // scanner won't add a new row if this flag is set. + this.dont_allow_new_row = opts.dont_allow_new_row; + // scanner will ask user to type the quantity instead of incrementing by 1 + this.prompt_qty = opts.prompt_qty; this.items_table_name = opts.items_table_name || "items"; this.items_table = this.frm.doc[this.items_table_name]; @@ -20,98 +27,123 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { // bar_code: "123456", // present if barcode was scanned // batch_no: "LOT12", // present if batch was scanned // serial_no: "987XYZ", // present if serial no was scanned + // uom: "Kg", // present if barcode UOM is different from default // } this.scan_api = opts.scan_api || "erpnext.stock.utils.scan_barcode"; } process_scan() { - let me = this; + return new Promise((resolve, reject) => { + let me = this; - const input = this.scan_barcode_field.value; - if (!input) { - return; - } + const input = this.scan_barcode_field.value; + this.scan_barcode_field.set_value(""); + if (!input) { + return; + } - frappe - .call({ - method: this.scan_api, - args: { - search_value: input, - }, - }) - .then((r) => { - const data = r && r.message; - if (!data || Object.keys(data).length === 0) { - frappe.show_alert({ - message: __("Cannot find Item with this Barcode"), - indicator: "red", + frappe + .call({ + method: this.scan_api, + args: { + search_value: input, + }, + }) + .then((r) => { + const data = r && r.message; + if (!data || Object.keys(data).length === 0) { + this.show_alert(__("Cannot find Item with this Barcode"), "red"); + this.clean_up(); + reject(); + return; + } + + me.update_table(data).then(row => { + row ? resolve(row) : reject(); }); + }); + }); + } + + update_table(data) { + return new Promise(resolve => { + let cur_grid = this.frm.fields_dict[this.items_table_name].grid; + + const {item_code, barcode, batch_no, serial_no, uom} = data; + + let row = this.get_row_to_modify_on_scan(item_code, batch_no, uom); + + if (!row) { + if (this.dont_allow_new_row) { + this.show_alert(__("Maximum quantity scanned for item {0}.", [item_code]), "red"); this.clean_up(); return; } - me.update_table(data); - }); - } + // add new row if new item/batch is scanned + row = frappe.model.add_child(this.frm.doc, cur_grid.doctype, this.items_table_name); + // trigger any row add triggers defined on child table. + this.frm.script_manager.trigger(`${this.items_table_name}_add`, row.doctype, row.name); + } - update_table(data) { - let cur_grid = this.frm.fields_dict[this.items_table_name].grid; - let row = null; + if (this.is_duplicate_serial_no(row, serial_no)) { + this.clean_up(); + return; + } - const {item_code, barcode, batch_no, serial_no} = data; - - // Check if batch is scanned and table has batch no field - let batch_no_scan = - Boolean(batch_no) && frappe.meta.has_field(cur_grid.doctype, this.batch_no_field); - - if (batch_no_scan) { - row = this.get_batch_row_to_modify(batch_no); - } else { - // serial or barcode scan - row = this.get_row_to_modify_on_scan(item_code); - } - - if (!row) { - // add new row if new item/batch is scanned - row = frappe.model.add_child(this.frm.doc, cur_grid.doctype, this.items_table_name); - // trigger any row add triggers defined on child table. - this.frm.script_manager.trigger(`${this.items_table_name}_add`, row.doctype, row.name); - } - - if (this.is_duplicate_serial_no(row, serial_no)) { - this.clean_up(); - return; - } - - this.show_scan_message(row.idx, row.item_code); - this.set_selector_trigger_flag(row, data); - this.set_item(row, item_code); - this.set_serial_no(row, serial_no); - this.set_batch_no(row, batch_no); - this.set_barcode(row, barcode); - this.clean_up(); + frappe.run_serially([ + () => this.set_selector_trigger_flag(data), + () => this.set_item(row, item_code).then(qty => { + this.show_scan_message(row.idx, row.item_code, qty); + }), + () => this.set_barcode_uom(row, uom), + () => this.set_serial_no(row, serial_no), + () => this.set_batch_no(row, batch_no), + () => this.set_barcode(row, barcode), + () => this.clean_up(), + () => this.revert_selector_flag(), + () => resolve(row) + ]); + }); } // batch and serial selector is reduandant when all info can be added by scan // this flag on item row is used by transaction.js to avoid triggering selector - set_selector_trigger_flag(row, data) { + set_selector_trigger_flag(data) { const {batch_no, serial_no, has_batch_no, has_serial_no} = data; const require_selecting_batch = has_batch_no && !batch_no; const require_selecting_serial = has_serial_no && !serial_no; if (!(require_selecting_batch || require_selecting_serial)) { - row.__disable_batch_serial_selector = true; + frappe.flags.hide_serial_batch_dialog = true; } } - set_item(row, item_code) { - const item_data = { item_code: item_code }; - item_data[this.qty_field] = (row[this.qty_field] || 0) + 1; - frappe.model.set_value(row.doctype, row.name, item_data); + revert_selector_flag() { + frappe.flags.hide_serial_batch_dialog = false; } - set_serial_no(row, serial_no) { + set_item(row, item_code) { + return new Promise(resolve => { + const increment = async (value = 1) => { + const item_data = {item_code: item_code}; + item_data[this.qty_field] = Number((row[this.qty_field] || 0)) + Number(value); + await frappe.model.set_value(row.doctype, row.name, item_data); + return value; + }; + + if (this.prompt_qty) { + frappe.prompt(__("Please enter quantity for item {0}", [item_code]), ({value}) => { + increment(value).then((value) => resolve(value)); + }); + } else { + increment().then((value) => resolve(value)); + } + }); + } + + async set_serial_no(row, serial_no) { if (serial_no && frappe.meta.has_field(row.doctype, this.serial_no_field)) { const existing_serial_nos = row[this.serial_no_field]; let new_serial_nos = ""; @@ -121,69 +153,66 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { } else { new_serial_nos = serial_no; } - frappe.model.set_value(row.doctype, row.name, this.serial_no_field, new_serial_nos); + await frappe.model.set_value(row.doctype, row.name, this.serial_no_field, new_serial_nos); } } - set_batch_no(row, batch_no) { + async set_barcode_uom(row, uom) { + if (uom && frappe.meta.has_field(row.doctype, this.uom_field)) { + await frappe.model.set_value(row.doctype, row.name, this.uom_field, uom); + } + } + + async set_batch_no(row, batch_no) { if (batch_no && frappe.meta.has_field(row.doctype, this.batch_no_field)) { - frappe.model.set_value(row.doctype, row.name, this.batch_no_field, batch_no); + await frappe.model.set_value(row.doctype, row.name, this.batch_no_field, batch_no); } } - set_barcode(row, barcode) { + async set_barcode(row, barcode) { if (barcode && frappe.meta.has_field(row.doctype, this.barcode_field)) { - frappe.model.set_value(row.doctype, row.name, this.barcode_field, barcode); + await frappe.model.set_value(row.doctype, row.name, this.barcode_field, barcode); } } - show_scan_message(idx, exist = null) { + show_scan_message(idx, exist = null, qty = 1) { // show new row or qty increase toast if (exist) { - frappe.show_alert( - { - message: __("Row #{0}: Qty increased by 1", [idx]), - indicator: "green", - }, - 5 - ); + this.show_alert(__("Row #{0}: Qty increased by {1}", [idx, qty]), "green"); } else { - frappe.show_alert( - { - message: __("Row #{0}: Item added", [idx]), - indicator: "green", - }, - 5 - ); + this.show_alert(__("Row #{0}: Item added", [idx]), "green") } } is_duplicate_serial_no(row, serial_no) { - const is_duplicate = !!serial_no && !!row[this.serial_no_field] - && row[this.serial_no_field].includes(serial_no); + const is_duplicate = row[this.serial_no_field]?.includes(serial_no); if (is_duplicate) { - frappe.show_alert( - { - message: __("Serial No {0} is already added", [serial_no]), - indicator: "orange", - }, - 5 - ); + this.show_alert(__("Serial No {0} is already added", [serial_no]), "orange"); } return is_duplicate; } - get_batch_row_to_modify(batch_no) { - // get row if batch already exists in table - const existing_batch_row = this.items_table.find((d) => d.batch_no === batch_no); - return existing_batch_row || this.get_existing_blank_row(); - } + get_row_to_modify_on_scan(item_code, batch_no, uom) { + let cur_grid = this.frm.fields_dict[this.items_table_name].grid; - get_row_to_modify_on_scan(item_code) { - // get an existing item row to increment or blank row to modify - const existing_item_row = this.items_table.find((d) => d.item_code === item_code); - return existing_item_row || this.get_existing_blank_row(); + // Check if batch is scanned and table has batch no field + let is_batch_no_scan = batch_no && frappe.meta.has_field(cur_grid.doctype, this.batch_no_field); + let check_max_qty = this.max_qty_field && frappe.meta.has_field(cur_grid.doctype, this.max_qty_field); + + const matching_row = (row) => { + const item_match = row.item_code == item_code; + const batch_match = row[this.batch_no_field] == batch_no; + const uom_match = !uom || row[this.uom_field] == uom; + const qty_in_limit = flt(row[this.qty_field]) < flt(row[this.max_qty_field]); + + return item_match + && uom_match + && (!is_batch_no_scan || batch_match) + && (!check_max_qty || qty_in_limit) + } + + return this.items_table.find(matching_row) || this.get_existing_blank_row(); } get_existing_blank_row() { @@ -194,4 +223,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.scan_barcode_field.set_value(""); refresh_field(this.items_table_name); } + show_alert(msg, indicator, duration=3) { + frappe.show_alert({message: msg, indicator: indicator}, duration); + } }; diff --git a/erpnext/public/js/utils/crm_activities.js b/erpnext/public/js/utils/crm_activities.js new file mode 100644 index 0000000000..bbd9ded8c9 --- /dev/null +++ b/erpnext/public/js/utils/crm_activities.js @@ -0,0 +1,234 @@ +erpnext.utils.CRMActivities = class CRMActivities { + constructor(opts) { + $.extend(this, opts); + } + + refresh() { + var me = this; + $(this.open_activities_wrapper).empty(); + let cur_form_footer = this.form_wrapper.find('.form-footer'); + + // all activities + if (!$(this.all_activities_wrapper).find('.form-footer').length) { + this.all_activities_wrapper.empty(); + $(cur_form_footer).appendTo(this.all_activities_wrapper); + + // remove frappe-control class to avoid absolute position for action-btn + $(this.all_activities_wrapper).removeClass('frappe-control'); + // hide new event button + $('.timeline-actions').find('.btn-default').hide(); + // hide new comment box + $(".comment-box").hide(); + // show only communications by default + $($('.timeline-content').find('.nav-link')[0]).tab('show'); + } + + // open activities + frappe.call({ + method: "erpnext.crm.utils.get_open_activities", + args: { + ref_doctype: this.frm.doc.doctype, + ref_docname: this.frm.doc.name + }, + callback: (r) => { + if (!r.exc) { + var activities_html = frappe.render_template('crm_activities', { + tasks: r.message.tasks, + events: r.message.events + }); + + $(activities_html).appendTo(me.open_activities_wrapper); + + $(".open-tasks").find(".completion-checkbox").on("click", function() { + me.update_status(this, "ToDo"); + }); + + $(".open-events").find(".completion-checkbox").on("click", function() { + me.update_status(this, "Event"); + }); + + me.create_task(); + me.create_event(); + } + } + }); + } + + create_task () { + let me = this; + let _create_task = () => { + const args = { + doc: me.frm.doc, + frm: me.frm, + title: __("New Task") + }; + let composer = new frappe.views.InteractionComposer(args); + composer.dialog.get_field('interaction_type').set_value("ToDo"); + // hide column having interaction type field + $(composer.dialog.get_field('interaction_type').wrapper).closest('.form-column').hide(); + // hide summary field + $(composer.dialog.get_field('summary').wrapper).closest('.form-section').hide(); + }; + $(".new-task-btn").click(_create_task); + } + + create_event () { + let me = this; + let _create_event = () => { + const args = { + doc: me.frm.doc, + frm: me.frm, + title: __("New Event") + }; + let composer = new frappe.views.InteractionComposer(args); + composer.dialog.get_field('interaction_type').set_value("Event"); + $(composer.dialog.get_field('interaction_type').wrapper).hide(); + }; + $(".new-event-btn").click(_create_event); + } + + async update_status (input_field, doctype) { + let completed = $(input_field).prop("checked") ? 1 : 0; + let docname = $(input_field).attr("name"); + if (completed) { + await frappe.db.set_value(doctype, docname, "status", "Closed"); + this.refresh(); + } + } +}; + +erpnext.utils.CRMNotes = class CRMNotes { + constructor(opts) { + $.extend(this, opts); + } + + refresh() { + var me = this; + this.notes_wrapper.find('.notes-section').remove(); + + let notes = this.frm.doc.notes || []; + notes.sort( + function(a, b) { + return new Date(b.added_on) - new Date(a.added_on); + } + ); + + let notes_html = frappe.render_template( + 'crm_notes', + { + notes: notes + } + ); + $(notes_html).appendTo(this.notes_wrapper); + + this.add_note(); + + $(".notes-section").find(".edit-note-btn").on("click", function() { + me.edit_note(this); + }); + + $(".notes-section").find(".delete-note-btn").on("click", function() { + me.delete_note(this); + }); + } + + + add_note () { + let me = this; + let _add_note = () => { + var d = new frappe.ui.Dialog({ + title: __('Add a Note'), + fields: [ + { + "label": "Note", + "fieldname": "note", + "fieldtype": "Text Editor", + "reqd": 1 + } + ], + primary_action: function() { + var data = d.get_values(); + frappe.call({ + method: "add_note", + doc: me.frm.doc, + args: { + note: data.note + }, + freeze: true, + callback: function(r) { + if (!r.exc) { + me.frm.refresh_field("notes"); + me.refresh(); + } + d.hide(); + } + }); + }, + primary_action_label: __('Add') + }); + d.show(); + }; + $(".new-note-btn").click(_add_note); + } + + edit_note (edit_btn) { + var me = this; + let row = $(edit_btn).closest('.comment-content'); + let row_id = row.attr("name"); + let row_content = $(row).find(".content").html(); + if (row_content) { + var d = new frappe.ui.Dialog({ + title: __('Edit Note'), + fields: [ + { + "label": "Note", + "fieldname": "note", + "fieldtype": "Text Editor", + "default": row_content + } + ], + primary_action: function() { + var data = d.get_values(); + frappe.call({ + method: "edit_note", + doc: me.frm.doc, + args: { + note: data.note, + row_id: row_id + }, + freeze: true, + callback: function(r) { + if (!r.exc) { + me.frm.refresh_field("notes"); + me.refresh(); + d.hide(); + } + + } + }); + }, + primary_action_label: __('Done') + }); + d.show(); + } + } + + delete_note (delete_btn) { + var me = this; + let row_id = $(delete_btn).closest('.comment-content').attr("name"); + frappe.call({ + method: "delete_note", + doc: me.frm.doc, + args: { + row_id: row_id + }, + freeze: true, + callback: function(r) { + if (!r.exc) { + me.frm.refresh_field("notes"); + me.refresh(); + } + } + }); + } +}; diff --git a/erpnext/regional/address_template/templates/india.html b/erpnext/regional/address_template/templates/india.html deleted file mode 100644 index 5d2329efff..0000000000 --- a/erpnext/regional/address_template/templates/india.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ address_line1 }}
{% if address_line2 %}{{ address_line2 }}
{% endif -%}{{ city }}
-{% if gst_state %}{{ gst_state }}{% endif -%} -{% if gst_state_number %}, State Code: {{ gst_state_number }}
{% endif -%} -{% if pincode %}Postal Code: {{ pincode }}
{% endif -%} -{{ country }}
-{% if phone %}Phone: {{ phone }}
{% endif -%} -{% if fax %}Fax: {{ fax }}
{% endif -%} -{% if email_id %}Email: {{ email_id }}
{% endif -%} -{% if gstin %}GSTIN: {{ gstin }}
{% endif -%} diff --git a/erpnext/regional/doctype/e_invoice_request_log/__init__.py b/erpnext/regional/doctype/e_invoice_request_log/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.js b/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.js deleted file mode 100644 index 7b7ba964e5..0000000000 --- a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('E Invoice Request Log', { - // refresh: function(frm) { - - // } -}); diff --git a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.json b/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.json deleted file mode 100644 index 3034370fea..0000000000 --- a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "actions": [], - "autoname": "EINV-REQ-.#####", - "creation": "2020-12-08 12:54:08.175992", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "user", - "url", - "headers", - "response", - "column_break_7", - "timestamp", - "reference_invoice", - "data" - ], - "fields": [ - { - "fieldname": "user", - "fieldtype": "Link", - "label": "User", - "options": "User" - }, - { - "fieldname": "reference_invoice", - "fieldtype": "Data", - "label": "Reference Invoice" - }, - { - "fieldname": "headers", - "fieldtype": "Code", - "label": "Headers", - "options": "JSON" - }, - { - "fieldname": "data", - "fieldtype": "Code", - "label": "Data", - "options": "JSON" - }, - { - "default": "Now", - "fieldname": "timestamp", - "fieldtype": "Datetime", - "label": "Timestamp" - }, - { - "fieldname": "response", - "fieldtype": "Code", - "label": "Response", - "options": "JSON" - }, - { - "fieldname": "url", - "fieldtype": "Data", - "label": "URL" - }, - { - "fieldname": "column_break_7", - "fieldtype": "Column Break" - } - ], - "index_web_pages_for_search": 1, - "links": [], - "modified": "2021-01-13 12:06:57.253111", - "modified_by": "Administrator", - "module": "Regional", - "name": "E Invoice Request Log", - "owner": "Administrator", - "permissions": [ - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts User", - "share": 1 - }, - { - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "share": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC" -} \ No newline at end of file diff --git a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.py b/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.py deleted file mode 100644 index c89552d782..0000000000 --- a/erpnext/regional/doctype/e_invoice_request_log/e_invoice_request_log.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class EInvoiceRequestLog(Document): - pass diff --git a/erpnext/regional/doctype/e_invoice_request_log/test_e_invoice_request_log.py b/erpnext/regional/doctype/e_invoice_request_log/test_e_invoice_request_log.py deleted file mode 100644 index 091cc88e45..0000000000 --- a/erpnext/regional/doctype/e_invoice_request_log/test_e_invoice_request_log.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -# import frappe -import unittest - - -class TestEInvoiceRequestLog(unittest.TestCase): - pass diff --git a/erpnext/regional/doctype/e_invoice_settings/__init__.py b/erpnext/regional/doctype/e_invoice_settings/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.js b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.js deleted file mode 100644 index 54e488610d..0000000000 --- a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.js +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('E Invoice Settings', { - refresh(frm) { - const docs_link = 'https://docs.erpnext.com/docs/v13/user/manual/en/regional/india/setup-e-invoicing'; - frm.dashboard.set_headline( - __("Read {0} for more information on E Invoicing features.", [`documentation`]) - ); - } -}); diff --git a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json deleted file mode 100644 index 16b2963301..0000000000 --- a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "actions": [], - "creation": "2020-09-24 16:23:16.235722", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "enable", - "section_break_2", - "sandbox_mode", - "applicable_from", - "credentials", - "advanced_settings_section", - "client_id", - "column_break_8", - "client_secret", - "auth_token", - "token_expiry" - ], - "fields": [ - { - "default": "0", - "fieldname": "enable", - "fieldtype": "Check", - "label": "Enable" - }, - { - "depends_on": "enable", - "fieldname": "section_break_2", - "fieldtype": "Section Break" - }, - { - "fieldname": "auth_token", - "fieldtype": "Data", - "hidden": 1, - "read_only": 1 - }, - { - "fieldname": "token_expiry", - "fieldtype": "Datetime", - "hidden": 1, - "read_only": 1 - }, - { - "fieldname": "credentials", - "fieldtype": "Table", - "label": "Credentials", - "mandatory_depends_on": "enable", - "options": "E Invoice User" - }, - { - "default": "0", - "fieldname": "sandbox_mode", - "fieldtype": "Check", - "label": "Sandbox Mode" - }, - { - "fieldname": "applicable_from", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Applicable From", - "reqd": 1 - }, - { - "collapsible": 1, - "fieldname": "advanced_settings_section", - "fieldtype": "Section Break", - "label": "Advanced Settings" - }, - { - "fieldname": "client_id", - "fieldtype": "Data", - "label": "Client ID" - }, - { - "fieldname": "client_secret", - "fieldtype": "Password", - "label": "Client Secret" - }, - { - "fieldname": "column_break_8", - "fieldtype": "Column Break" - } - ], - "index_web_pages_for_search": 1, - "issingle": 1, - "links": [], - "modified": "2021-11-16 19:50:28.029517", - "modified_by": "Administrator", - "module": "Regional", - "name": "E Invoice Settings", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.py b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.py deleted file mode 100644 index 0959a10f18..0000000000 --- a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _ -from frappe.model.document import Document - - -class EInvoiceSettings(Document): - def validate(self): - if self.enable and not self.credentials: - frappe.throw(_("You must add atleast one credentials to be able to use E Invoicing.")) diff --git a/erpnext/regional/doctype/e_invoice_settings/test_e_invoice_settings.py b/erpnext/regional/doctype/e_invoice_settings/test_e_invoice_settings.py deleted file mode 100644 index 10770deb0e..0000000000 --- a/erpnext/regional/doctype/e_invoice_settings/test_e_invoice_settings.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -# import frappe -import unittest - - -class TestEInvoiceSettings(unittest.TestCase): - pass diff --git a/erpnext/regional/doctype/e_invoice_user/__init__.py b/erpnext/regional/doctype/e_invoice_user/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/e_invoice_user/e_invoice_user.json b/erpnext/regional/doctype/e_invoice_user/e_invoice_user.json deleted file mode 100644 index a65b1ca7ca..0000000000 --- a/erpnext/regional/doctype/e_invoice_user/e_invoice_user.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "actions": [], - "creation": "2020-12-22 15:02:46.229474", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "gstin", - "username", - "password" - ], - "fields": [ - { - "fieldname": "gstin", - "fieldtype": "Data", - "in_list_view": 1, - "label": "GSTIN", - "reqd": 1 - }, - { - "fieldname": "username", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Username", - "reqd": 1 - }, - { - "fieldname": "password", - "fieldtype": "Password", - "in_list_view": 1, - "label": "Password", - "reqd": 1 - }, - { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", - "reqd": 1 - } - ], - "index_web_pages_for_search": 1, - "istable": 1, - "links": [], - "modified": "2021-03-22 12:16:56.365616", - "modified_by": "Administrator", - "module": "Regional", - "name": "E Invoice User", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/regional/doctype/e_invoice_user/e_invoice_user.py b/erpnext/regional/doctype/e_invoice_user/e_invoice_user.py deleted file mode 100644 index 4e0e89c09a..0000000000 --- a/erpnext/regional/doctype/e_invoice_user/e_invoice_user.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -# import frappe -from frappe.model.document import Document - - -class EInvoiceUser(Document): - pass diff --git a/erpnext/regional/doctype/gst_hsn_code/__init__.py b/erpnext/regional/doctype/gst_hsn_code/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.js b/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.js deleted file mode 100644 index 347fdfe61b..0000000000 --- a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.js +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('GST HSN Code', { - refresh: function(frm) { - if(! frm.doc.__islocal && frm.doc.taxes.length){ - frm.add_custom_button(__('Update Taxes for Items'), function(){ - frappe.confirm( - 'Are you sure? It will overwrite taxes for all items with HSN Code '+frm.doc.name+'.', - function(){ - frappe.call({ - args:{ - taxes: frm.doc.taxes, - hsn_code: frm.doc.name - }, - method: 'erpnext.regional.doctype.gst_hsn_code.gst_hsn_code.update_taxes_in_item_master', - callback: function(r) { - if(r.message){ - frappe.show_alert(__('Item taxes updated')); - } - } - }); - } - ); - }); - } - } -}); diff --git a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.json b/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.json deleted file mode 100644 index 06dab3726d..0000000000 --- a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "autoname": "field:hsn_code", - "creation": "2017-06-21 10:48:56.422086", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "hsn_code", - "description", - "taxes" - ], - "fields": [ - { - "fieldname": "hsn_code", - "fieldtype": "Data", - "in_list_view": 1, - "label": "HSN Code", - "reqd": 1, - "unique": 1 - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "in_list_view": 1, - "label": "Description" - }, - { - "fieldname": "taxes", - "fieldtype": "Table", - "label": "Taxes", - "options": "Item Tax" - } - ], - "modified": "2019-11-01 11:18:59.556931", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST HSN Code", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "search_fields": "hsn_code, description", - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "hsn_code", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.py b/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.py deleted file mode 100644 index e6bdabdf2b..0000000000 --- a/erpnext/regional/doctype/gst_hsn_code/gst_hsn_code.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe.model.document import Document - - -class GSTHSNCode(Document): - pass - - -@frappe.whitelist() -def update_taxes_in_item_master(taxes, hsn_code): - items = frappe.get_list("Item", filters={"gst_hsn_code": hsn_code}) - - taxes = frappe.parse_json(taxes) - frappe.enqueue(update_item_document, items=items, taxes=taxes) - return 1 - - -def update_item_document(items, taxes): - for item in items: - item_to_be_updated = frappe.get_doc("Item", item.name) - item_to_be_updated.taxes = [] - for tax in taxes: - tax = frappe._dict(tax) - item_to_be_updated.append( - "taxes", - { - "item_tax_template": tax.item_tax_template, - "tax_category": tax.tax_category, - "valid_from": tax.valid_from, - }, - ) - item_to_be_updated.save() diff --git a/erpnext/regional/doctype/gst_hsn_code/test_gst_hsn_code.py b/erpnext/regional/doctype/gst_hsn_code/test_gst_hsn_code.py deleted file mode 100644 index 6dbca1af1a..0000000000 --- a/erpnext/regional/doctype/gst_hsn_code/test_gst_hsn_code.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestGSTHSNCode(unittest.TestCase): - pass diff --git a/erpnext/regional/doctype/gst_settings/__init__.py b/erpnext/regional/doctype/gst_settings/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/gst_settings/gst_settings.js b/erpnext/regional/doctype/gst_settings/gst_settings.js deleted file mode 100644 index cd682c5403..0000000000 --- a/erpnext/regional/doctype/gst_settings/gst_settings.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('GST Settings', { - refresh: function(frm) { - frm.add_custom_button('Send GST Update Reminder', () => { - return new Promise((resolve) => { - return frappe.call({ - method: 'erpnext.regional.doctype.gst_settings.gst_settings.send_reminder' - }).always(() => { resolve(); }); - }); - }); - - $(frm.fields_dict.gst_summary.wrapper).empty().html( - ` - - - - - - -
Total Addresses${frm.doc.__onload.data.total_addresses}
Total Addresses with GST${frm.doc.__onload.data.total_addresses_with_gstin}
` - ); - }, - - setup: function(frm) { - $.each(["cgst_account", "sgst_account", "igst_account", "cess_account"], function(i, field) { - frm.events.filter_accounts(frm, field); - }); - }, - - filter_accounts: function(frm, account_field) { - frm.set_query(account_field, "gst_accounts", function(doc, cdt, cdn) { - var row = locals[cdt][cdn]; - return { - filters: { - company: row.company, - account_type: "Tax", - is_group: 0 - } - }; - }); - } -}); diff --git a/erpnext/regional/doctype/gst_settings/gst_settings.json b/erpnext/regional/doctype/gst_settings/gst_settings.json deleted file mode 100644 index fc579d4b38..0000000000 --- a/erpnext/regional/doctype/gst_settings/gst_settings.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "actions": [], - "creation": "2017-06-27 15:09:01.318003", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "gst_summary", - "gst_tax_settings_section", - "round_off_gst_values", - "column_break_4", - "hsn_wise_tax_breakup", - "gstin_email_sent_on", - "section_break_4", - "gst_accounts", - "b2c_limit" - ], - "fields": [ - { - "fieldname": "gst_summary", - "fieldtype": "HTML", - "label": "GST Summary" - }, - { - "fieldname": "gstin_email_sent_on", - "fieldtype": "Date", - "label": "GSTIN Email Sent On", - "read_only": 1 - }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break" - }, - { - "fieldname": "gst_accounts", - "fieldtype": "Table", - "label": "GST Accounts", - "options": "GST Account" - }, - { - "default": "250000", - "description": "Set Invoice Value for B2C. B2CL and B2CS calculated based on this invoice value.", - "fieldname": "b2c_limit", - "fieldtype": "Data", - "in_list_view": 1, - "label": "B2C Limit", - "reqd": 1 - }, - { - "default": "0", - "description": "Enabling this option will round off individual GST components in all the Invoices", - "fieldname": "round_off_gst_values", - "fieldtype": "Check", - "label": "Round Off GST Values" - }, - { - "default": "0", - "fieldname": "hsn_wise_tax_breakup", - "fieldtype": "Check", - "label": "Tax Breakup Table Based On HSN Code" - }, - { - "fieldname": "gst_tax_settings_section", - "fieldtype": "Section Break", - "label": "GST Tax Settings" - }, - { - "fieldname": "column_break_4", - "fieldtype": "Column Break" - } - ], - "index_web_pages_for_search": 1, - "issingle": 1, - "links": [], - "modified": "2021-10-11 18:10:14.242614", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Settings", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/regional/doctype/gst_settings/gst_settings.py b/erpnext/regional/doctype/gst_settings/gst_settings.py deleted file mode 100644 index ff09ed0130..0000000000 --- a/erpnext/regional/doctype/gst_settings/gst_settings.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import os - -import frappe -from frappe import _ -from frappe.contacts.doctype.contact.contact import get_default_contact -from frappe.model.document import Document -from frappe.utils import date_diff, get_url, nowdate - - -class EmailMissing(frappe.ValidationError): - pass - - -class GSTSettings(Document): - def onload(self): - data = frappe._dict() - data.total_addresses = frappe.db.sql( - '''select count(*) from tabAddress where country = "India"''' - ) - data.total_addresses_with_gstin = frappe.db.sql( - """select distinct count(*) - from tabAddress where country = "India" and ifnull(gstin, '')!='' """ - ) - self.set_onload("data", data) - - def validate(self): - # Validate duplicate accounts - self.validate_duplicate_accounts() - - def validate_duplicate_accounts(self): - account_list = [] - for account in self.get("gst_accounts"): - for fieldname in ["cgst_account", "sgst_account", "igst_account", "cess_account"]: - if account.get(fieldname) in account_list: - frappe.throw( - _("Account {0} appears multiple times").format(frappe.bold(account.get(fieldname))) - ) - - if account.get(fieldname): - account_list.append(account.get(fieldname)) - - -@frappe.whitelist() -def send_reminder(): - frappe.has_permission("GST Settings", throw=True) - - last_sent = frappe.db.get_single_value("GST Settings", "gstin_email_sent_on") - if last_sent and date_diff(nowdate(), last_sent) < 3: - frappe.throw(_("Please wait 3 days before resending the reminder.")) - - frappe.db.set_value("GST Settings", "GST Settings", "gstin_email_sent_on", nowdate()) - - # enqueue if large number of customers, suppliser - frappe.enqueue( - "erpnext.regional.doctype.gst_settings.gst_settings.send_gstin_reminder_to_all_parties" - ) - frappe.msgprint(_("Email Reminders will be sent to all parties with email contacts")) - - -def send_gstin_reminder_to_all_parties(): - parties = [] - for address_name in frappe.db.sql( - """select name - from tabAddress where country = "India" and ifnull(gstin, '')='' """ - ): - address = frappe.get_doc("Address", address_name[0]) - for link in address.links: - party = frappe.get_doc(link.link_doctype, link.link_name) - if link.link_doctype in ("Customer", "Supplier"): - t = (link.link_doctype, link.link_name, address.email_id) - if not t in parties: - parties.append(t) - - sent_to = [] - for party in parties: - # get email from default contact - try: - email_id = _send_gstin_reminder(party[0], party[1], party[2], sent_to) - sent_to.append(email_id) - except EmailMissing: - pass - - -@frappe.whitelist() -def send_gstin_reminder(party_type, party): - """Send GSTIN reminder to one party (called from Customer, Supplier form)""" - frappe.has_permission(party_type, throw=True) - email = _send_gstin_reminder(party_type, party) - if email: - frappe.msgprint(_("Reminder to update GSTIN Sent"), title="Reminder sent", indicator="green") - - -def _send_gstin_reminder(party_type, party, default_email_id=None, sent_to=None): - """Send GST Reminder email""" - email_id = frappe.db.get_value("Contact", get_default_contact(party_type, party), "email_id") - if not email_id: - # get email from address - email_id = default_email_id - - if not email_id: - frappe.throw(_("Email not found in default contact"), exc=EmailMissing) - - if sent_to and email_id in sent_to: - return - - frappe.sendmail( - subject="Please update your GSTIN", - recipients=email_id, - message=""" -

Hello,

-

Please help us send you GST Ready Invoices.

-

- - Click here to update your GSTIN Number in our system - -

-

- Get your GST Ready ERP system at https://erpnext.com -
- ERPNext is a free and open source ERP system. -

- """.format( - os.path.join(get_url(), "/regional/india/update-gstin"), party - ), - ) - - return email_id diff --git a/erpnext/regional/doctype/gst_settings/test_gst_settings.py b/erpnext/regional/doctype/gst_settings/test_gst_settings.py deleted file mode 100644 index 5c7d2b4602..0000000000 --- a/erpnext/regional/doctype/gst_settings/test_gst_settings.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import unittest - - -class TestGSTSettings(unittest.TestCase): - pass diff --git a/erpnext/regional/doctype/gstr_3b_report/__init__.py b/erpnext/regional/doctype/gstr_3b_report/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html deleted file mode 100644 index f3fc60fdb6..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.html +++ /dev/null @@ -1,297 +0,0 @@ - -
-

{{ __("GSTR3B-Form")}}

-
{{__("GSTIN")}}:   {{ data.gstin }}
-
{{__("Period")}}:   {{ data.ret_period }}
-
- -
3.1  {{__("Details of Outward Supplies and inward supplies liable to reverse charge")}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{__("Nature Of Supplies")}}{{__("Total Taxable value")}}{{__("Integrated Tax")}}{{__("Central Tax")}}{{__("State/UT Tax")}}{{__("Cess")}}
(a) {{__("Outward taxable supplies(other than zero rated, nil rated and exempted)")}}{{ flt(data.sup_details.osup_det.txval, 2) }}{{ flt(data.sup_details.osup_det.iamt, 2) }}{{ flt(data.sup_details.osup_det.camt, 2) }}{{ flt(data.sup_details.osup_det.samt, 2) }}{{ flt(data.sup_details.osup_det.csamt, 2) }}
(b) {{__("Outward taxable supplies(zero rated)")}}{{ flt(data.sup_details.osup_zero.txval, 2) }}{{ flt(data.sup_details.osup_zero.iamt, 2) }}{{ flt(data.sup_details.osup_zero.csamt, 2) }}
(b) {{__("Other outward supplies(Nil rated,Exempted)")}}{{ data.sup_details.osup_nil_exmp.txval }}
(d) {{__("Inward Supplies(liable to reverse charge)")}}{{ flt(data.sup_details.isup_rev.txval, 2) }}{{ flt(data.sup_details.isup_rev.iamt, 2) }}{{ flt(data.sup_details.isup_rev.camt, 2) }}{{ flt(data.sup_details.isup_rev.samt, 2) }}{{ flt(data.sup_details.isup_rev.csamt,2) }}
(e) {{__("Non-GST outward supplies")}}{{ data.sup_details.osup_nongst.txval }}
- -
- 3.2  {{__("Of the supplies shown in 3.1 (a) above, details of inter-State supplies made to unregisterd - persons, composition taxable persons and UIN holders")}} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{__("Place Of Supply (State/UT)")}}{{__("Total Taxable Value")}}{{__("Amount of Integrated Tax")}}
{{__("Supplies made to Unregistered Persons")}} - {% for row in data.inter_sup.unreg_details %} - {% if row %} - {{ row.pos }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.unreg_details %} - {% if row %} - {{ flt(row.txval, 2) }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.unreg_details %} - {% if row %} - {{ flt(row.iamt, 2) }}
- {% endif %} - {% endfor %} -
{{__("Supplies made to Composition Taxable Persons")}} - {% for row in data.inter_sup.comp_details %} - {% if row %} - {{ row.pos }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.comp_details %} - {% if row %} - {{ flt(row.txval, 2) }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.comp_details %} - {% if row %} - {{ flt(row.iamt, 2) }}
- {% endif %} - {% endfor %} -
{{__("Supplies made to UIN holders")}} - {% for row in data.inter_sup.uin_details %} - {% if row %} - {{ row.pos }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.uin_details %} - {% if row %} - {{ flt(row.txval, 2) }}
- {% endif %} - {% endfor %} -
- {% for row in data.inter_sup.uin_details %} - {% if row %} - {{ flt(row.iamt, 2) }}
- {% endif %} - {% endfor %} -
- -
4.   {{__("Eligible ITC")}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DetailsIntegrated TaxCentral TaxState/UT taxCess
(A) {{__("ITC Available (whether in full or part)")}}
  (1) {{__("Import of goods")}} {{ flt(data.itc_elg.itc_avl[0].iamt, 2) }}{{ flt(data.itc_elg.itc_avl[0].camt, 2) }}{{ flt(data.itc_elg.itc_avl[0].samt, 2) }}{{ flt(data.itc_elg.itc_avl[0].csamt, 2) }}
  (2) {{__("Import of services")}}{{ flt(data.itc_elg.itc_avl[1].iamt, 2) }}{{ flt(data.itc_elg.itc_avl[1].camt, 2) }}{{ flt(data.itc_elg.itc_avl[1].samt, 2) }}{{ flt(data.itc_elg.itc_avl[1].csamt, 2) }}
  (3) {{__("Inward supplies liable to reverse charge (other than 1 & 2 above)")}}{{ flt(data.itc_elg.itc_avl[2].iamt, 2) }}{{ flt(data.itc_elg.itc_avl[2].camt, 2) }}{{ flt(data.itc_elg.itc_avl[2].samt, 2) }}{{ flt(data.itc_elg.itc_avl[2].csamt, 2) }}
  (4) {{__("Inward supplies from ISD")}}{{ flt(data.itc_elg.itc_avl[3].iamt, 2) }}{{ flt(data.itc_elg.itc_avl[3].camt, 2) }}{{ flt(data.itc_elg.itc_avl[3].samt, 2) }}{{ flt(data.itc_elg.itc_avl[3].csamt, 2) }}
  (5) {{__("All other ITC")}}{{ flt(data.itc_elg.itc_avl[4].iamt, 2) }}{{ flt(data.itc_elg.itc_avl[4].camt, 2) }}{{ flt(data.itc_elg.itc_avl[4].samt, 2) }}{{ flt(data.itc_elg.itc_avl[4].csamt, 2) }}
(B) {{__("ITC Reversed")}}
  (1) {{__("As per rules 42 & 43 of CGST Rules")}}{{ flt(data.itc_elg.itc_rev[0].iamt, 2) }}{{ flt(data.itc_elg.itc_rev[0].camt, 2) }}{{ flt(data.itc_elg.itc_rev[0].samt, 2) }}{{ flt(data.itc_elg.itc_rev[0].csamt, 2) }}
  (2) {{__("Others")}}{{ flt(data.itc_elg.itc_rev[1].iamt, 2) }}{{ flt(data.itc_elg.itc_rev[1].camt, 2) }}{{ flt(data.itc_elg.itc_rev[1].samt, 2) }}{{ flt(data.itc_elg.itc_rev[1].csamt, 2) }}
(C) {{__("Net ITC Available(A) - (B)")}}{{ flt(data.itc_elg.itc_net.iamt, 2) }}{{ flt(data.itc_elg.itc_net.camt, 2) }}{{ flt(data.itc_elg.itc_net.samt, 2) }}{{ flt(data.itc_elg.itc_net.csamt, 2) }}
(D) {{__("Ineligible ITC")}}
  (1) {{__("As per section 17(5)")}}{{ flt(data.itc_elg.itc_inelg[0].iamt, 2) }}{{ flt(data.itc_elg.itc_inelg[0].camt, 2) }}{{ flt(data.itc_elg.itc_inelg[0].samt, 2) }}{{ flt(data.itc_elg.itc_inelg[0].csamt, 2) }}
  (2) {{__("Others")}}{{ flt(data.itc_elg.itc_inelg[1].iamt, 2) }}{{ flt(data.itc_elg.itc_inelg[1].camt, 2) }}{{ flt(data.itc_elg.itc_inelg[1].samt, 2) }}{{ flt(data.itc_elg.itc_inelg[1].csamt, 2) }}
- -
5.    {{__("Values of exempt, nil rated and non-GST inward supplies")}}
- - - - - - - - - - - - - - - - - - - - -
{{__("Nature of Supplies")}}{{__("Inter-State Supplies")}}{{__("Intra-State Supplies")}}
{{__("From a supplier under composition scheme, Exempt and Nil rated")}}{{ flt(data.inward_sup.isup_details[0].inter, 2) }}{{ flt(data.inward_sup.isup_details[0].intra, 2) }}
{{__("Non GST Inward Supplies")}}{{ flt(data.inward_sup.isup_details[1].inter, 2) }}{{ flt(data.inward_sup.isup_details[1].intra, 2) }}
- - diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js deleted file mode 100644 index c7442667c2..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('GSTR 3B Report', { - refresh : function(frm) { - frm.doc.__unsaved = 1; - if(!frm.is_new()) { - frm.set_intro(__("Please save the report again to rebuild or update")); - frm.add_custom_button(__('Download JSON'), function() { - var w = window.open( - frappe.urllib.get_full_url( - "/api/method/erpnext.regional.doctype.gstr_3b_report.gstr_3b_report.make_json?" - +"name="+encodeURIComponent(frm.doc.name))); - - if(!w) { - frappe.msgprint(__("Please enable pop-ups")); return; - } - }); - frm.add_custom_button(__('View Form'), function() { - frappe.call({ - "method" : "erpnext.regional.doctype.gstr_3b_report.gstr_3b_report.view_report", - "args" : { - name : frm.doc.name, - }, - "callback" : function(r){ - - let data = r.message; - - frappe.ui.get_print_settings(false, print_settings => { - - frappe.render_grid({ - template: 'gstr_3b_report', - title: __(this.doctype), - print_settings: print_settings, - data: data, - columns:[] - }); - }); - } - }); - }); - } - - let current_year = new Date().getFullYear(); - let options = [current_year, current_year-1, current_year-2]; - frm.set_df_property('year', 'options', options); - }, - - setup: function(frm) { - frm.set_query('company_address', function(doc) { - if(!doc.company) { - frappe.throw(__('Please set Company')); - } - - return { - query: 'frappe.contacts.doctype.address.address.address_query', - filters: { - link_doctype: 'Company', - link_name: doc.company - } - }; - }); - }, -}); diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json deleted file mode 100644 index 1f208df1f2..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "actions": [], - "autoname": "format:GSTR3B-{month}-{year}-{company_address}", - "creation": "2019-02-04 11:35:55.964639", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "company", - "company_address", - "year", - "month", - "json_output", - "missing_field_invoices" - ], - "fields": [ - { - "fieldname": "company", - "fieldtype": "Link", - "label": "Company", - "options": "Company" - }, - { - "fieldname": "company_address", - "fieldtype": "Link", - "label": "Company Address", - "options": "Address" - }, - { - "fieldname": "year", - "fieldtype": "Select", - "label": "Year" - }, - { - "fieldname": "month", - "fieldtype": "Select", - "label": "Month", - "options": "January\nFebruary\nMarch\nApril\nMay\nJune\nJuly\nAugust\nSeptember\nOctober\nNovember\nDecember" - }, - { - "fieldname": "json_output", - "fieldtype": "Code", - "label": "JSON Output" - }, - { - "fieldname": "missing_field_invoices", - "fieldtype": "Small Text", - "label": "Invoices with no Place Of Supply", - "read_only": 1 - } - ], - "links": [], - "modified": "2020-04-04 19:32:30.772908", - "modified_by": "Administrator", - "module": "Regional", - "name": "GSTR 3B Report", - "owner": "Administrator", - "permissions": [], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 -} \ No newline at end of file diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py deleted file mode 100644 index d6210abf80..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ /dev/null @@ -1,529 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json -import os - -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.utils import cstr, flt - -from erpnext.regional.india import state_numbers - - -class GSTR3BReport(Document): - def validate(self): - self.get_data() - - def get_data(self): - self.report_dict = json.loads(get_json("gstr_3b_report_template")) - - self.gst_details = self.get_company_gst_details() - self.report_dict["gstin"] = self.gst_details.get("gstin") - self.report_dict["ret_period"] = get_period(self.month, self.year) - self.month_no = get_period(self.month) - self.account_heads = self.get_account_heads() - - self.get_outward_supply_details("Sales Invoice") - self.set_outward_taxable_supplies() - - self.get_outward_supply_details("Purchase Invoice", reverse_charge=True) - self.set_supplies_liable_to_reverse_charge() - - itc_details = self.get_itc_details() - self.set_itc_details(itc_details) - self.get_itc_reversal_entries() - inward_nil_exempt = self.get_inward_nil_exempt(self.gst_details.get("gst_state")) - self.set_inward_nil_exempt(inward_nil_exempt) - - self.missing_field_invoices = self.get_missing_field_invoices() - self.json_output = frappe.as_json(self.report_dict) - - def set_inward_nil_exempt(self, inward_nil_exempt): - self.report_dict["inward_sup"]["isup_details"][0]["inter"] = flt( - inward_nil_exempt.get("gst").get("inter"), 2 - ) - self.report_dict["inward_sup"]["isup_details"][0]["intra"] = flt( - inward_nil_exempt.get("gst").get("intra"), 2 - ) - self.report_dict["inward_sup"]["isup_details"][1]["inter"] = flt( - inward_nil_exempt.get("non_gst").get("inter"), 2 - ) - self.report_dict["inward_sup"]["isup_details"][1]["intra"] = flt( - inward_nil_exempt.get("non_gst").get("intra"), 2 - ) - - def set_itc_details(self, itc_details): - itc_eligible_type_map = { - "IMPG": "Import Of Capital Goods", - "IMPS": "Import Of Service", - "ISRC": "ITC on Reverse Charge", - "ISD": "Input Service Distributor", - "OTH": "All Other ITC", - } - - itc_ineligible_map = {"RUL": "Ineligible As Per Section 17(5)", "OTH": "Ineligible Others"} - - net_itc = self.report_dict["itc_elg"]["itc_net"] - - for d in self.report_dict["itc_elg"]["itc_avl"]: - itc_type = itc_eligible_type_map.get(d["ty"]) - for key in ["iamt", "camt", "samt", "csamt"]: - d[key] = flt(itc_details.get(itc_type, {}).get(key)) - net_itc[key] += flt(d[key], 2) - - for d in self.report_dict["itc_elg"]["itc_inelg"]: - itc_type = itc_ineligible_map.get(d["ty"]) - for key in ["iamt", "camt", "samt", "csamt"]: - d[key] = flt(itc_details.get(itc_type, {}).get(key)) - - def get_itc_reversal_entries(self): - reversal_entries = frappe.db.sql( - """ - SELECT ja.account, j.reversal_type, sum(credit_in_account_currency) as amount - FROM `tabJournal Entry` j, `tabJournal Entry Account` ja - where j.docstatus = 1 - and j.is_opening = 'No' - and ja.parent = j.name - and j.voucher_type = 'Reversal Of ITC' - and month(j.posting_date) = %s and year(j.posting_date) = %s - and j.company = %s and j.company_gstin = %s - GROUP BY ja.account, j.reversal_type""", - (self.month_no, self.year, self.company, self.gst_details.get("gstin")), - as_dict=1, - ) - - net_itc = self.report_dict["itc_elg"]["itc_net"] - - for entry in reversal_entries: - if entry.reversal_type == "As per rules 42 & 43 of CGST Rules": - index = 0 - else: - index = 1 - - for key in ["camt", "samt", "iamt", "csamt"]: - if entry.account in self.account_heads.get(key): - self.report_dict["itc_elg"]["itc_rev"][index][key] += flt(entry.amount) - net_itc[key] -= flt(entry.amount) - - def get_itc_details(self): - itc_amounts = frappe.db.sql( - """ - SELECT eligibility_for_itc, sum(itc_integrated_tax) as itc_integrated_tax, - sum(itc_central_tax) as itc_central_tax, - sum(itc_state_tax) as itc_state_tax, - sum(itc_cess_amount) as itc_cess_amount - FROM `tabPurchase Invoice` - WHERE docstatus = 1 - and is_opening = 'No' - and month(posting_date) = %s and year(posting_date) = %s and company = %s - and company_gstin = %s - GROUP BY eligibility_for_itc - """, - (self.month_no, self.year, self.company, self.gst_details.get("gstin")), - as_dict=1, - ) - - itc_details = {} - for d in itc_amounts: - itc_details.setdefault( - d.eligibility_for_itc, - { - "iamt": d.itc_integrated_tax, - "camt": d.itc_central_tax, - "samt": d.itc_state_tax, - "csamt": d.itc_cess_amount, - }, - ) - - return itc_details - - def get_inward_nil_exempt(self, state): - inward_nil_exempt = frappe.db.sql( - """ - SELECT p.place_of_supply, p.supplier_address, - i.base_amount, i.is_nil_exempt, i.is_non_gst - FROM `tabPurchase Invoice` p , `tabPurchase Invoice Item` i - WHERE p.docstatus = 1 and p.name = i.parent - and p.is_opening = 'No' - and p.gst_category != 'Registered Composition' - and (i.is_nil_exempt = 1 or i.is_non_gst = 1 or p.gst_category = 'Registered Composition') and - month(p.posting_date) = %s and year(p.posting_date) = %s - and p.company = %s and p.company_gstin = %s - """, - (self.month_no, self.year, self.company, self.gst_details.get("gstin")), - as_dict=1, - ) - - inward_nil_exempt_details = { - "gst": {"intra": 0.0, "inter": 0.0}, - "non_gst": {"intra": 0.0, "inter": 0.0}, - } - - address_state_map = get_address_state_map() - - for d in inward_nil_exempt: - if not d.place_of_supply: - d.place_of_supply = "00-" + cstr(state) - - supplier_state = address_state_map.get(d.supplier_address) or state - - if (d.is_nil_exempt == 1 or d.get("gst_category") == "Registered Composition") and cstr( - supplier_state - ) == cstr(d.place_of_supply.split("-")[1]): - inward_nil_exempt_details["gst"]["intra"] += d.base_amount - elif (d.is_nil_exempt == 1 or d.get("gst_category") == "Registered Composition") and cstr( - supplier_state - ) != cstr(d.place_of_supply.split("-")[1]): - inward_nil_exempt_details["gst"]["inter"] += d.base_amount - elif d.is_non_gst == 1 and cstr(supplier_state) == cstr(d.place_of_supply.split("-")[1]): - inward_nil_exempt_details["non_gst"]["intra"] += d.base_amount - elif d.is_non_gst == 1 and cstr(supplier_state) != cstr(d.place_of_supply.split("-")[1]): - inward_nil_exempt_details["non_gst"]["inter"] += d.base_amount - - return inward_nil_exempt_details - - def get_outward_supply_details(self, doctype, reverse_charge=None): - self.get_outward_tax_invoices(doctype, reverse_charge=reverse_charge) - self.get_outward_items(doctype) - self.get_outward_tax_details(doctype) - - def get_outward_tax_invoices(self, doctype, reverse_charge=None): - self.invoices = [] - self.invoice_detail_map = {} - condition = "" - - if reverse_charge: - condition += "AND reverse_charge = 'Y'" - - invoice_details = frappe.db.sql( - """ - SELECT - name, gst_category, export_type, place_of_supply - FROM - `tab{doctype}` - WHERE - docstatus = 1 - AND month(posting_date) = %s - AND year(posting_date) = %s - AND company = %s - AND company_gstin = %s - AND is_opening = 'No' - {reverse_charge} - ORDER BY name - """.format( - doctype=doctype, reverse_charge=condition - ), - (self.month_no, self.year, self.company, self.gst_details.get("gstin")), - as_dict=1, - ) - - for d in invoice_details: - self.invoice_detail_map.setdefault(d.name, d) - self.invoices.append(d.name) - - def get_outward_items(self, doctype): - self.invoice_items = frappe._dict() - self.is_nil_exempt = [] - self.is_non_gst = [] - - if self.get("invoices"): - item_details = frappe.db.sql( - """ - SELECT - item_code, parent, taxable_value, base_net_amount, item_tax_rate, - is_nil_exempt, is_non_gst - FROM - `tab%s Item` - WHERE parent in (%s) - """ - % (doctype, ", ".join(["%s"] * len(self.invoices))), - tuple(self.invoices), - as_dict=1, - ) - - for d in item_details: - if d.item_code not in self.invoice_items.get(d.parent, {}): - self.invoice_items.setdefault(d.parent, {}).setdefault(d.item_code, 0.0) - self.invoice_items[d.parent][d.item_code] += d.get("taxable_value", 0) or d.get( - "base_net_amount", 0 - ) - - if d.is_nil_exempt and d.item_code not in self.is_nil_exempt: - self.is_nil_exempt.append(d.item_code) - - if d.is_non_gst and d.item_code not in self.is_non_gst: - self.is_non_gst.append(d.item_code) - - def get_outward_tax_details(self, doctype): - if doctype == "Sales Invoice": - tax_template = "Sales Taxes and Charges" - elif doctype == "Purchase Invoice": - tax_template = "Purchase Taxes and Charges" - - self.items_based_on_tax_rate = {} - self.invoice_cess = frappe._dict() - self.cgst_sgst_invoices = [] - - if self.get("invoices"): - tax_details = frappe.db.sql( - """ - SELECT - parent, account_head, item_wise_tax_detail, base_tax_amount_after_discount_amount - FROM `tab%s` - WHERE - parenttype = %s and docstatus = 1 - and parent in (%s) - ORDER BY account_head - """ - % (tax_template, "%s", ", ".join(["%s"] * len(self.invoices))), - tuple([doctype] + list(self.invoices)), - ) - - for parent, account, item_wise_tax_detail, tax_amount in tax_details: - if account in self.account_heads.get("csamt"): - self.invoice_cess.setdefault(parent, tax_amount) - else: - if item_wise_tax_detail: - try: - item_wise_tax_detail = json.loads(item_wise_tax_detail) - cgst_or_sgst = False - if account in self.account_heads.get("camt") or account in self.account_heads.get("samt"): - cgst_or_sgst = True - - for item_code, tax_amounts in item_wise_tax_detail.items(): - if not ( - cgst_or_sgst - or account in self.account_heads.get("iamt") - or (item_code in self.is_non_gst + self.is_nil_exempt) - ): - continue - - tax_rate = tax_amounts[0] - if tax_rate: - if cgst_or_sgst: - tax_rate *= 2 - if parent not in self.cgst_sgst_invoices: - self.cgst_sgst_invoices.append(parent) - - rate_based_dict = self.items_based_on_tax_rate.setdefault(parent, {}).setdefault( - tax_rate, [] - ) - if item_code not in rate_based_dict: - rate_based_dict.append(item_code) - except ValueError: - continue - - if self.get("invoice_items"): - # Build itemised tax for export invoices, nil and exempted where tax table is blank - for invoice, items in self.invoice_items.items(): - if ( - invoice not in self.items_based_on_tax_rate - and self.invoice_detail_map.get(invoice, {}).get("export_type") == "Without Payment of Tax" - and self.invoice_detail_map.get(invoice, {}).get("gst_category") == "Overseas" - ): - self.items_based_on_tax_rate.setdefault(invoice, {}).setdefault(0, items.keys()) - else: - for item in items.keys(): - if ( - item in self.is_nil_exempt + self.is_non_gst - and item not in self.items_based_on_tax_rate.get(invoice, {}).get(0, []) - ): - self.items_based_on_tax_rate.setdefault(invoice, {}).setdefault(0, []) - self.items_based_on_tax_rate[invoice][0].append(item) - - def set_outward_taxable_supplies(self): - inter_state_supply_details = {} - - for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): - gst_category = self.invoice_detail_map.get(inv, {}).get("gst_category") - place_of_supply = ( - self.invoice_detail_map.get(inv, {}).get("place_of_supply") or "00-Other Territory" - ) - export_type = self.invoice_detail_map.get(inv, {}).get("export_type") - - for rate, items in items_based_on_rate.items(): - for item_code, taxable_value in self.invoice_items.get(inv).items(): - if item_code in items: - if item_code in self.is_nil_exempt: - self.report_dict["sup_details"]["osup_nil_exmp"]["txval"] += taxable_value - elif item_code in self.is_non_gst: - self.report_dict["sup_details"]["osup_nongst"]["txval"] += taxable_value - elif rate == 0 or (gst_category == "Overseas" and export_type == "Without Payment of Tax"): - self.report_dict["sup_details"]["osup_zero"]["txval"] += taxable_value - else: - if inv in self.cgst_sgst_invoices: - tax_rate = rate / 2 - self.report_dict["sup_details"]["osup_det"]["camt"] += taxable_value * tax_rate / 100 - self.report_dict["sup_details"]["osup_det"]["samt"] += taxable_value * tax_rate / 100 - self.report_dict["sup_details"]["osup_det"]["txval"] += taxable_value - else: - self.report_dict["sup_details"]["osup_det"]["iamt"] += taxable_value * rate / 100 - self.report_dict["sup_details"]["osup_det"]["txval"] += taxable_value - - if ( - gst_category in ["Unregistered", "Registered Composition", "UIN Holders"] - and self.gst_details.get("gst_state") != place_of_supply.split("-")[1] - ): - inter_state_supply_details.setdefault( - (gst_category, place_of_supply), - {"txval": 0.0, "pos": place_of_supply.split("-")[0], "iamt": 0.0}, - ) - inter_state_supply_details[(gst_category, place_of_supply)]["txval"] += taxable_value - inter_state_supply_details[(gst_category, place_of_supply)]["iamt"] += ( - taxable_value * rate / 100 - ) - - if self.invoice_cess.get(inv): - self.report_dict["sup_details"]["osup_det"]["csamt"] += flt(self.invoice_cess.get(inv), 2) - - self.set_inter_state_supply(inter_state_supply_details) - - def set_supplies_liable_to_reverse_charge(self): - for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): - for rate, items in items_based_on_rate.items(): - for item_code, taxable_value in self.invoice_items.get(inv).items(): - if item_code in items: - if inv in self.cgst_sgst_invoices: - tax_rate = rate / 2 - self.report_dict["sup_details"]["isup_rev"]["camt"] += taxable_value * tax_rate / 100 - self.report_dict["sup_details"]["isup_rev"]["samt"] += taxable_value * tax_rate / 100 - self.report_dict["sup_details"]["isup_rev"]["txval"] += taxable_value - else: - self.report_dict["sup_details"]["isup_rev"]["iamt"] += taxable_value * rate / 100 - self.report_dict["sup_details"]["isup_rev"]["txval"] += taxable_value - - def set_inter_state_supply(self, inter_state_supply): - for key, value in inter_state_supply.items(): - if key[0] == "Unregistered": - self.report_dict["inter_sup"]["unreg_details"].append(value) - - if key[0] == "Registered Composition": - self.report_dict["inter_sup"]["comp_details"].append(value) - - if key[0] == "UIN Holders": - self.report_dict["inter_sup"]["uin_details"].append(value) - - def get_company_gst_details(self): - gst_details = frappe.get_all( - "Address", - fields=["gstin", "gst_state", "gst_state_number"], - filters={"name": self.company_address}, - ) - - if gst_details: - return gst_details[0] - else: - frappe.throw( - _("Please enter GSTIN and state for the Company Address {0}").format(self.company_address) - ) - - def get_account_heads(self): - account_map = { - "sgst_account": "samt", - "cess_account": "csamt", - "cgst_account": "camt", - "igst_account": "iamt", - } - - account_heads = {} - gst_settings_accounts = frappe.get_all( - "GST Account", - filters={"company": self.company, "is_reverse_charge_account": 0}, - fields=["cgst_account", "sgst_account", "igst_account", "cess_account"], - ) - - if not gst_settings_accounts: - frappe.throw(_("Please set GST Accounts in GST Settings")) - - for d in gst_settings_accounts: - for acc, val in d.items(): - account_heads.setdefault(account_map.get(acc), []).append(val) - - return account_heads - - def get_missing_field_invoices(self): - missing_field_invoices = [] - - for doctype in ["Sales Invoice", "Purchase Invoice"]: - - if doctype == "Sales Invoice": - party_type = "Customer" - party = "customer" - else: - party_type = "Supplier" - party = "supplier" - - docnames = frappe.db.sql( - """ - SELECT t1.name FROM `tab{doctype}` t1, `tab{party_type}` t2 - WHERE t1.docstatus = 1 and t1.is_opening = 'No' - and month(t1.posting_date) = %s and year(t1.posting_date) = %s - and t1.company = %s and t1.place_of_supply IS NULL and t1.{party} = t2.name and - t2.gst_category != 'Overseas' - """.format( - doctype=doctype, party_type=party_type, party=party - ), - (self.month_no, self.year, self.company), - as_dict=1, - ) # nosec - - for d in docnames: - missing_field_invoices.append(d.name) - - return ",".join(missing_field_invoices) - - -def get_address_state_map(): - return frappe._dict(frappe.get_all("Address", fields=["name", "gst_state"], as_list=1)) - - -def get_json(template): - file_path = os.path.join(os.path.dirname(__file__), "{template}.json".format(template=template)) - with open(file_path, "r") as f: - return cstr(f.read()) - - -def get_state_code(state): - state_code = state_numbers.get(state) - - return state_code - - -def get_period(month, year=None): - month_no = { - "January": 1, - "February": 2, - "March": 3, - "April": 4, - "May": 5, - "June": 6, - "July": 7, - "August": 8, - "September": 9, - "October": 10, - "November": 11, - "December": 12, - }.get(month) - - if year: - return str(month_no).zfill(2) + str(year) - else: - return month_no - - -@frappe.whitelist() -def view_report(name): - json_data = frappe.get_value("GSTR 3B Report", name, "json_output") - return json.loads(json_data) - - -@frappe.whitelist() -def make_json(name): - json_data = frappe.get_value("GSTR 3B Report", name, "json_output") - file_name = "GST3B.json" - frappe.local.response.filename = file_name - frappe.local.response.filecontent = json_data - frappe.local.response.type = "download" diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report_template.json b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report_template.json deleted file mode 100644 index a68bd6a6e5..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report_template.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "gstin": "", - "ret_period": "", - "inward_sup": { - "isup_details": [ - { - "ty": "GST", - "intra": 0, - "inter": 0 - }, - { - "ty": "NONGST", - "inter": 0, - "intra": 0 - } - ] - }, - "sup_details": { - "osup_zero": { - "csamt": 0, - "txval": 0, - "iamt": 0 - }, - "osup_nil_exmp": { - "txval": 0 - }, - "osup_det": { - "samt": 0, - "csamt": 0, - "txval": 0, - "camt": 0, - "iamt": 0 - }, - "isup_rev": { - "samt": 0, - "csamt": 0, - "txval": 0, - "camt": 0, - "iamt": 0 - }, - "osup_nongst": { - "txval": 0 - } - }, - "inter_sup": { - "unreg_details": [], - "comp_details": [], - "uin_details": [] - }, - "itc_elg": { - "itc_avl": [ - { - "csamt": 0, - "samt": 0, - "ty": "IMPG", - "camt": 0, - "iamt": 0 - }, - { - "csamt": 0, - "samt": 0, - "ty": "IMPS", - "camt": 0, - "iamt": 0 - }, - { - "samt": 0, - "csamt": 0, - "ty": "ISRC", - "camt": 0, - "iamt": 0 - }, - { - "ty": "ISD", - "iamt": 0, - "camt": 0, - "samt": 0, - "csamt": 0 - }, - { - "samt": 0, - "csamt": 0, - "ty": "OTH", - "camt": 0, - "iamt": 0 - } - ], - "itc_rev": [ - { - "ty": "RUL", - "iamt": 0, - "camt": 0, - "samt": 0, - "csamt": 0 - }, - { - "ty": "OTH", - "iamt": 0, - "camt": 0, - "samt": 0, - "csamt": 0 - } - ], - "itc_net": { - "samt": 0, - "csamt": 0, - "camt": 0, - "iamt": 0 - }, - "itc_inelg": [ - { - "ty": "RUL", - "iamt": 0, - "camt": 0, - "samt": 0, - "csamt": 0 - }, - { - "ty": "OTH", - "iamt": 0, - "camt": 0, - "samt": 0, - "csamt": 0 - } - ] - } -} \ No newline at end of file diff --git a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py deleted file mode 100644 index 3862c62530..0000000000 --- a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py +++ /dev/null @@ -1,534 +0,0 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - -import json -import unittest - -import frappe -from frappe.utils import getdate - -from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice -from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice -from erpnext.stock.doctype.item.test_item import make_item - -test_dependencies = ["Territory", "Customer Group", "Supplier Group", "Item"] - - -class TestGSTR3BReport(unittest.TestCase): - def setUp(self): - frappe.set_user("Administrator") - - frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company GST'") - frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company GST'") - frappe.db.sql("delete from `tabGSTR 3B Report` where company='_Test Company GST'") - - make_company() - make_item("Milk", properties={"is_nil_exempt": 1, "standard_rate": 0.000000}) - set_account_heads() - make_customers() - make_suppliers() - - def test_gstr_3b_report(self): - month_number_mapping = { - 1: "January", - 2: "February", - 3: "March", - 4: "April", - 5: "May", - 6: "June", - 7: "July", - 8: "August", - 9: "September", - 10: "October", - 11: "November", - 12: "December", - } - - make_sales_invoice() - create_purchase_invoices() - - if frappe.db.exists("GSTR 3B Report", "GSTR3B-March-2019-_Test Address GST-Billing"): - report = frappe.get_doc("GSTR 3B Report", "GSTR3B-March-2019-_Test Address GST-Billing") - report.save() - else: - report = frappe.get_doc( - { - "doctype": "GSTR 3B Report", - "company": "_Test Company GST", - "company_address": "_Test Address GST-Billing", - "year": getdate().year, - "month": month_number_mapping.get(getdate().month), - } - ).insert() - - output = json.loads(report.json_output) - - self.assertEqual(output["sup_details"]["osup_det"]["iamt"], 54) - self.assertEqual(output["inter_sup"]["unreg_details"][0]["iamt"], 18), - self.assertEqual(output["sup_details"]["osup_nil_exmp"]["txval"], 100), - self.assertEqual(output["inward_sup"]["isup_details"][0]["intra"], 250) - self.assertEqual(output["itc_elg"]["itc_avl"][4]["samt"], 22.50) - self.assertEqual(output["itc_elg"]["itc_avl"][4]["camt"], 22.50) - - def test_gst_rounding(self): - gst_settings = frappe.get_doc("GST Settings") - gst_settings.round_off_gst_values = 1 - gst_settings.save() - - current_country = frappe.flags.country - frappe.flags.country = "India" - - si = create_sales_invoice( - company="_Test Company GST", - customer="_Test GST Customer", - currency="INR", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - rate=216, - do_not_save=1, - ) - - si.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax IGST - _GST", - "cost_center": "Main - _GST", - "description": "IGST @ 18.0", - "rate": 18, - }, - ) - - si.save() - # Check for 39 instead of 38.88 - self.assertEqual(si.taxes[0].base_tax_amount_after_discount_amount, 39) - - frappe.flags.country = current_country - gst_settings.round_off_gst_values = 1 - gst_settings.save() - - def test_gst_category_auto_update(self): - if not frappe.db.exists("Customer", "_Test GST Customer With GSTIN"): - customer = frappe.get_doc( - { - "customer_group": "_Test Customer Group", - "customer_name": "_Test GST Customer With GSTIN", - "customer_type": "Individual", - "doctype": "Customer", - "territory": "_Test Territory", - } - ).insert() - - self.assertEqual(customer.gst_category, "Unregistered") - - if not frappe.db.exists("Address", "_Test GST Category-1-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test GST Category-1", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gstin": "29AZWPS7135H1ZG", - "gst_state": "Karnataka", - "gst_state_number": "29", - } - ).insert() - - address.append( - "links", {"link_doctype": "Customer", "link_name": "_Test GST Customer With GSTIN"} - ) - - address.save() - - customer.load_from_db() - self.assertEqual(customer.gst_category, "Registered Regular") - - -def make_sales_invoice(): - si = create_sales_invoice( - company="_Test Company GST", - customer="_Test GST Customer", - currency="INR", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - do_not_save=1, - ) - - si.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax IGST - _GST", - "cost_center": "Main - _GST", - "description": "IGST @ 18.0", - "rate": 18, - }, - ) - - si.submit() - - si1 = create_sales_invoice( - company="_Test Company GST", - customer="_Test GST SEZ Customer", - currency="INR", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - do_not_save=1, - ) - - si1.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax IGST - _GST", - "cost_center": "Main - _GST", - "description": "IGST @ 18.0", - "rate": 18, - }, - ) - - si1.submit() - - si2 = create_sales_invoice( - company="_Test Company GST", - customer="_Test Unregistered Customer", - currency="INR", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - do_not_save=1, - ) - - si2.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax IGST - _GST", - "cost_center": "Main - _GST", - "description": "IGST @ 18.0", - "rate": 18, - }, - ) - - si2.submit() - - si3 = create_sales_invoice( - company="_Test Company GST", - customer="_Test GST Customer", - currency="INR", - item="Milk", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - do_not_save=1, - ) - si3.submit() - - -def create_purchase_invoices(): - pi = make_purchase_invoice( - company="_Test Company GST", - supplier="_Test Registered Supplier", - currency="INR", - warehouse="Finished Goods - _GST", - cost_center="Main - _GST", - expense_account="Cost of Goods Sold - _GST", - do_not_save=1, - ) - - pi.eligibility_for_itc = "All Other ITC" - - pi.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Input Tax CGST - _GST", - "cost_center": "Main - _GST", - "description": "CGST @ 9.0", - "rate": 9, - }, - ) - - pi.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Input Tax SGST - _GST", - "cost_center": "Main - _GST", - "description": "SGST @ 9.0", - "rate": 9, - }, - ) - - pi.submit() - - pi1 = make_purchase_invoice( - company="_Test Company GST", - supplier="_Test Registered Supplier", - currency="INR", - warehouse="Finished Goods - _GST", - cost_center="Main - _GST", - expense_account="Cost of Goods Sold - _GST", - item="Milk", - do_not_save=1, - ) - - pi1.shipping_address = "_Test Supplier GST-1-Billing" - pi1.save() - - pi1.submit() - - pi2 = make_purchase_invoice( - company="_Test Company GST", - customer="_Test Registered Supplier", - currency="INR", - item="Milk", - warehouse="Finished Goods - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - rate=250, - qty=1, - do_not_save=1, - ) - pi2.submit() - - -def make_suppliers(): - if not frappe.db.exists("Supplier", "_Test Registered Supplier"): - frappe.get_doc( - { - "supplier_group": "_Test Supplier Group", - "supplier_name": "_Test Registered Supplier", - "gst_category": "Registered Regular", - "supplier_type": "Individual", - "doctype": "Supplier", - } - ).insert() - - if not frappe.db.exists("Supplier", "_Test Unregistered Supplier"): - frappe.get_doc( - { - "supplier_group": "_Test Supplier Group", - "supplier_name": "_Test Unregistered Supplier", - "gst_category": "Unregistered", - "supplier_type": "Individual", - "doctype": "Supplier", - } - ).insert() - - if not frappe.db.exists("Address", "_Test Supplier GST-1-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test Supplier GST-1", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gstin": "29AACCV0498C1Z9", - "gst_state": "Karnataka", - } - ).insert() - - address.append("links", {"link_doctype": "Supplier", "link_name": "_Test Registered Supplier"}) - - address.is_shipping_address = 1 - address.save() - - if not frappe.db.exists("Address", "_Test Supplier GST-2-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test Supplier GST-2", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gst_state": "Karnataka", - } - ).insert() - - address.append("links", {"link_doctype": "Supplier", "link_name": "_Test Unregistered Supplier"}) - - address.save() - - -def make_customers(): - if not frappe.db.exists("Customer", "_Test GST Customer"): - frappe.get_doc( - { - "customer_group": "_Test Customer Group", - "customer_name": "_Test GST Customer", - "gst_category": "Registered Regular", - "customer_type": "Individual", - "doctype": "Customer", - "territory": "_Test Territory", - } - ).insert() - - if not frappe.db.exists("Customer", "_Test GST SEZ Customer"): - frappe.get_doc( - { - "customer_group": "_Test Customer Group", - "customer_name": "_Test GST SEZ Customer", - "gst_category": "SEZ", - "customer_type": "Individual", - "doctype": "Customer", - "territory": "_Test Territory", - } - ).insert() - - if not frappe.db.exists("Customer", "_Test Unregistered Customer"): - frappe.get_doc( - { - "customer_group": "_Test Customer Group", - "customer_name": "_Test Unregistered Customer", - "gst_category": "Unregistered", - "customer_type": "Individual", - "doctype": "Customer", - "territory": "_Test Territory", - } - ).insert() - - if not frappe.db.exists("Address", "_Test GST-1-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test GST-1", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gstin": "29AZWPS7135H1ZG", - "gst_state": "Karnataka", - "gst_state_number": "29", - } - ).insert() - - address.append("links", {"link_doctype": "Customer", "link_name": "_Test GST Customer"}) - - address.save() - - if not frappe.db.exists("Address", "_Test GST-2-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test GST-2", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gst_state": "Haryana", - } - ).insert() - - address.append("links", {"link_doctype": "Customer", "link_name": "_Test Unregistered Customer"}) - - address.save() - - if not frappe.db.exists("Address", "_Test GST-3-Billing"): - address = frappe.get_doc( - { - "address_line1": "_Test Address Line 1", - "address_title": "_Test GST-3", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gst_state": "Gujarat", - } - ).insert() - - address.append("links", {"link_doctype": "Customer", "link_name": "_Test GST SEZ Customer"}) - - address.save() - - -def make_company(): - if frappe.db.exists("Company", "_Test Company GST"): - return - - company = frappe.new_doc("Company") - company.company_name = "_Test Company GST" - company.abbr = "_GST" - company.default_currency = "INR" - company.country = "India" - company.insert() - - if not frappe.db.exists("Address", "_Test Address GST-Billing"): - address = frappe.get_doc( - { - "address_title": "_Test Address GST", - "address_line1": "_Test Address Line 1", - "address_type": "Billing", - "city": "_Test City", - "state": "Test State", - "country": "India", - "doctype": "Address", - "is_primary_address": 1, - "phone": "+91 0000000000", - "gstin": "27AAECE4835E1ZR", - "gst_state": "Maharashtra", - "gst_state_number": "27", - } - ).insert() - - address.append("links", {"link_doctype": "Company", "link_name": "_Test Company GST"}) - - address.save() - - -def set_account_heads(): - gst_settings = frappe.get_doc("GST Settings") - - gst_account = frappe.get_all( - "GST Account", - fields=["cgst_account", "sgst_account", "igst_account"], - filters={"company": "_Test Company GST"}, - ) - - if not gst_account: - gst_settings.append( - "gst_accounts", - { - "company": "_Test Company GST", - "cgst_account": "Output Tax CGST - _GST", - "sgst_account": "Output Tax SGST - _GST", - "igst_account": "Output Tax IGST - _GST", - }, - ) - - gst_settings.save() diff --git a/erpnext/regional/india/__init__.py b/erpnext/regional/india/__init__.py deleted file mode 100644 index 2e98a036cb..0000000000 --- a/erpnext/regional/india/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -states = [ - "", - "Andaman and Nicobar Islands", - "Andhra Pradesh", - "Arunachal Pradesh", - "Assam", - "Bihar", - "Chandigarh", - "Chhattisgarh", - "Dadra and Nagar Haveli and Daman and Diu", - "Delhi", - "Goa", - "Gujarat", - "Haryana", - "Himachal Pradesh", - "Jammu and Kashmir", - "Jharkhand", - "Karnataka", - "Kerala", - "Ladakh", - "Lakshadweep Islands", - "Madhya Pradesh", - "Maharashtra", - "Manipur", - "Meghalaya", - "Mizoram", - "Nagaland", - "Odisha", - "Other Territory", - "Pondicherry", - "Punjab", - "Rajasthan", - "Sikkim", - "Tamil Nadu", - "Telangana", - "Tripura", - "Uttar Pradesh", - "Uttarakhand", - "West Bengal", -] - -state_numbers = { - "Andaman and Nicobar Islands": "35", - "Andhra Pradesh": "37", - "Arunachal Pradesh": "12", - "Assam": "18", - "Bihar": "10", - "Chandigarh": "04", - "Chhattisgarh": "22", - "Dadra and Nagar Haveli and Daman and Diu": "26", - "Delhi": "07", - "Goa": "30", - "Gujarat": "24", - "Haryana": "06", - "Himachal Pradesh": "02", - "Jammu and Kashmir": "01", - "Jharkhand": "20", - "Karnataka": "29", - "Kerala": "32", - "Ladakh": "38", - "Lakshadweep Islands": "31", - "Madhya Pradesh": "23", - "Maharashtra": "27", - "Manipur": "14", - "Meghalaya": "17", - "Mizoram": "15", - "Nagaland": "13", - "Odisha": "21", - "Other Territory": "97", - "Pondicherry": "34", - "Punjab": "03", - "Rajasthan": "08", - "Sikkim": "11", - "Tamil Nadu": "33", - "Telangana": "36", - "Tripura": "16", - "Uttar Pradesh": "09", - "Uttarakhand": "05", - "West Bengal": "19", -} - -number_state_mapping = {v: k for k, v in state_numbers.items()} diff --git a/erpnext/regional/india/e_invoice/__init__.py b/erpnext/regional/india/e_invoice/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/india/e_invoice/einv_item_template.json b/erpnext/regional/india/e_invoice/einv_item_template.json deleted file mode 100644 index 2c04c6dcf4..0000000000 --- a/erpnext/regional/india/e_invoice/einv_item_template.json +++ /dev/null @@ -1,27 +0,0 @@ -{{ - "SlNo": "{item.sr_no}", - "PrdDesc": "{item.description}", - "IsServc": "{item.is_service_item}", - "HsnCd": "{item.gst_hsn_code}", - "Barcde": "{item.barcode}", - "Unit": "{item.uom}", - "Qty": "{item.qty}", - "FreeQty": "{item.free_qty}", - "UnitPrice": "{item.unit_rate}", - "TotAmt": "{item.gross_amount}", - "Discount": "{item.discount_amount}", - "AssAmt": "{item.taxable_value}", - "PrdSlNo": "{item.serial_no}", - "GstRt": "{item.tax_rate}", - "IgstAmt": "{item.igst_amount}", - "CgstAmt": "{item.cgst_amount}", - "SgstAmt": "{item.sgst_amount}", - "CesRt": "{item.cess_rate}", - "CesAmt": "{item.cess_amount}", - "CesNonAdvlAmt": "{item.cess_nadv_amount}", - "StateCesRt": "{item.state_cess_rate}", - "StateCesAmt": "{item.state_cess_amount}", - "StateCesNonAdvlAmt": "{item.state_cess_nadv_amount}", - "OthChrg": "{item.other_charges}", - "TotItemVal": "{item.total_value}" -}} \ No newline at end of file diff --git a/erpnext/regional/india/e_invoice/einv_template.json b/erpnext/regional/india/e_invoice/einv_template.json deleted file mode 100644 index c2a28f2049..0000000000 --- a/erpnext/regional/india/e_invoice/einv_template.json +++ /dev/null @@ -1,110 +0,0 @@ -{{ - "Version": "1.1", - "TranDtls": {{ - "TaxSch": "{transaction_details.tax_scheme}", - "SupTyp": "{transaction_details.supply_type}", - "RegRev": "{transaction_details.reverse_charge}", - "EcmGstin": "{transaction_details.ecom_gstin}", - "IgstOnIntra": "{transaction_details.igst_on_intra}" - }}, - "DocDtls": {{ - "Typ": "{doc_details.invoice_type}", - "No": "{doc_details.invoice_name}", - "Dt": "{doc_details.invoice_date}" - }}, - "SellerDtls": {{ - "Gstin": "{seller_details.gstin}", - "LglNm": "{seller_details.legal_name}", - "TrdNm": "{seller_details.trade_name}", - "Loc": "{seller_details.location}", - "Pin": "{seller_details.pincode}", - "Stcd": "{seller_details.state_code}", - "Addr1": "{seller_details.address_line1}", - "Addr2": "{seller_details.address_line2}", - "Ph": "{seller_details.phone}", - "Em": "{seller_details.email}" - }}, - "BuyerDtls": {{ - "Gstin": "{buyer_details.gstin}", - "LglNm": "{buyer_details.legal_name}", - "TrdNm": "{buyer_details.trade_name}", - "Addr1": "{buyer_details.address_line1}", - "Addr2": "{buyer_details.address_line2}", - "Loc": "{buyer_details.location}", - "Pin": "{buyer_details.pincode}", - "Stcd": "{buyer_details.state_code}", - "Ph": "{buyer_details.phone}", - "Em": "{buyer_details.email}", - "Pos": "{buyer_details.place_of_supply}" - }}, - "DispDtls": {{ - "Nm": "{dispatch_details.legal_name}", - "Addr1": "{dispatch_details.address_line1}", - "Addr2": "{dispatch_details.address_line2}", - "Loc": "{dispatch_details.location}", - "Pin": "{dispatch_details.pincode}", - "Stcd": "{dispatch_details.state_code}" - }}, - "ShipDtls": {{ - "Gstin": "{shipping_details.gstin}", - "LglNm": "{shipping_details.legal_name}", - "TrdNm": "{shipping_details.trader_name}", - "Addr1": "{shipping_details.address_line1}", - "Addr2": "{shipping_details.address_line2}", - "Loc": "{shipping_details.location}", - "Pin": "{shipping_details.pincode}", - "Stcd": "{shipping_details.state_code}" - }}, - "ItemList": [ - {item_list} - ], - "ValDtls": {{ - "AssVal": "{invoice_value_details.base_total}", - "CgstVal": "{invoice_value_details.total_cgst_amt}", - "SgstVal": "{invoice_value_details.total_sgst_amt}", - "IgstVal": "{invoice_value_details.total_igst_amt}", - "CesVal": "{invoice_value_details.total_cess_amt}", - "Discount": "{invoice_value_details.invoice_discount_amt}", - "RndOffAmt": "{invoice_value_details.round_off}", - "OthChrg": "{invoice_value_details.total_other_charges}", - "TotInvVal": "{invoice_value_details.base_grand_total}", - "TotInvValFc": "{invoice_value_details.grand_total}" - }}, - "PayDtls": {{ - "Nm": "{payment_details.payee_name}", - "AccDet": "{payment_details.account_no}", - "Mode": "{payment_details.mode_of_payment}", - "FinInsBr": "{payment_details.ifsc_code}", - "PayTerm": "{payment_details.terms}", - "PaidAmt": "{payment_details.paid_amount}", - "PaymtDue": "{payment_details.outstanding_amount}" - }}, - "RefDtls": {{ - "DocPerdDtls": {{ - "InvStDt": "{period_details.start_date}", - "InvEndDt": "{period_details.end_date}" - }}, - "PrecDocDtls": [{{ - "InvNo": "{prev_doc_details.invoice_name}", - "InvDt": "{prev_doc_details.invoice_date}" - }}] - }}, - "ExpDtls": {{ - "ShipBNo": "{export_details.bill_no}", - "ShipBDt": "{export_details.bill_date}", - "Port": "{export_details.port}", - "ForCur": "{export_details.foreign_curr_code}", - "CntCode": "{export_details.country_code}", - "ExpDuty": "{export_details.export_duty}" - }}, - "EwbDtls": {{ - "TransId": "{eway_bill_details.gstin}", - "TransName": "{eway_bill_details.name}", - "TransMode": "{eway_bill_details.mode_of_transport}", - "Distance": "{eway_bill_details.distance}", - "TransDocNo": "{eway_bill_details.document_name}", - "TransDocDt": "{eway_bill_details.document_date}", - "VehNo": "{eway_bill_details.vehicle_no}", - "VehType": "{eway_bill_details.vehicle_type}" - }} -}} \ No newline at end of file diff --git a/erpnext/regional/india/e_invoice/einv_validation.json b/erpnext/regional/india/e_invoice/einv_validation.json deleted file mode 100644 index f4a3542a60..0000000000 --- a/erpnext/regional/india/e_invoice/einv_validation.json +++ /dev/null @@ -1,957 +0,0 @@ -{ - "Version": { - "type": "string", - "minLength": 1, - "maxLength": 6, - "description": "Version of the schema" - }, - "Irn": { - "type": "string", - "minLength": 64, - "maxLength": 64, - "description": "Invoice Reference Number" - }, - "TranDtls": { - "type": "object", - "properties": { - "TaxSch": { - "type": "string", - "minLength": 3, - "maxLength": 10, - "enum": ["GST"], - "description": "GST- Goods and Services Tax Scheme" - }, - "SupTyp": { - "type": "string", - "minLength": 3, - "maxLength": 10, - "enum": ["B2B", "SEZWP", "SEZWOP", "EXPWP", "EXPWOP", "DEXP"], - "description": "Type of Supply: B2B-Business to Business, SEZWP - SEZ with payment, SEZWOP - SEZ without payment, EXPWP - Export with Payment, EXPWOP - Export without payment,DEXP - Deemed Export" - }, - "RegRev": { - "type": "string", - "minLength": 1, - "maxLength": 1, - "enum": ["Y", "N"], - "description": "Y- whether the tax liability is payable under reverse charge" - }, - "EcmGstin": { - "type": "string", - "minLength": 15, - "maxLength": 15, - "pattern": "([0-9]{2}[0-9A-Z]{13})", - "description": "E-Commerce GSTIN", - "validationMsg": "E-Commerce GSTIN is invalid" - }, - "IgstOnIntra": { - "type": "string", - "minLength": 1, - "maxLength": 1, - "enum": ["Y", "N"], - "description": "Y- indicates the supply is intra state but chargeable to IGST" - } - }, - "required": ["TaxSch", "SupTyp"] - }, - "DocDtls": { - "type": "object", - "properties": { - "Typ": { - "type": "string", - "minLength": 3, - "maxLength": 3, - "enum": ["INV", "CRN", "DBN"], - "description": "Document Type" - }, - "No": { - "type": "string", - "minLength": 1, - "maxLength": 16, - "pattern": "^([A-Z1-9]{1}[A-Z0-9/-]{0,15})$", - "description": "Document Number", - "validationMsg": "Document Number should not be starting with 0, / and -" - }, - "Dt": { - "type": "string", - "minLength": 10, - "maxLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Document Date" - } - }, - "required": ["Typ", "No", "Dt"] - }, - "SellerDtls": { - "type": "object", - "properties": { - "Gstin": { - "type": "string", - "minLength": 15, - "maxLength": 15, - "pattern": "([0-9]{2}[0-9A-Z]{13})", - "description": "Supplier GSTIN", - "validationMsg": "Company GSTIN is invalid" - }, - "LglNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Legal Name" - }, - "TrdNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Tradename" - }, - "Addr1": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Address Line 1" - }, - "Addr2": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Address Line 2" - }, - "Loc": { - "type": "string", - "minLength": 3, - "maxLength": 50, - "description": "Location" - }, - "Pin": { - "type": "number", - "minimum": 100000, - "maximum": 999999, - "description": "Pincode" - }, - "Stcd": { - "type": "string", - "minLength": 1, - "maxLength": 2, - "description": "Supplier State Code" - }, - "Ph": { - "type": "string", - "minLength": 6, - "maxLength": 12, - "description": "Phone" - }, - "Em": { - "type": "string", - "minLength": 6, - "maxLength": 100, - "description": "Email-Id" - } - }, - "required": ["Gstin", "LglNm", "Addr1", "Loc", "Pin", "Stcd"] - }, - "BuyerDtls": { - "type": "object", - "properties": { - "Gstin": { - "type": "string", - "minLength": 3, - "maxLength": 15, - "pattern": "^(([0-9]{2}[0-9A-Z]{13})|URP)$", - "description": "Buyer GSTIN", - "validationMsg": "Customer GSTIN is invalid" - }, - "LglNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Legal Name" - }, - "TrdNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Trade Name" - }, - "Pos": { - "type": "string", - "minLength": 1, - "maxLength": 2, - "description": "Place of Supply State code" - }, - "Addr1": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Address Line 1" - }, - "Addr2": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Address Line 2" - }, - "Loc": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Location" - }, - "Pin": { - "type": "number", - "minimum": 100000, - "maximum": 999999, - "description": "Pincode" - }, - "Stcd": { - "type": "string", - "minLength": 1, - "maxLength": 2, - "description": "Buyer State Code" - }, - "Ph": { - "type": "string", - "minLength": 6, - "maxLength": 12, - "description": "Phone" - }, - "Em": { - "type": "string", - "minLength": 6, - "maxLength": 100, - "description": "Email-Id" - } - }, - "required": ["Gstin", "LglNm", "Pos", "Addr1", "Loc", "Stcd"] - }, - "DispDtls": { - "type": "object", - "properties": { - "Nm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Dispatch Address Name" - }, - "Addr1": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Address Line 1" - }, - "Addr2": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Address Line 2" - }, - "Loc": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Location" - }, - "Pin": { - "type": "number", - "minimum": 100000, - "maximum": 999999, - "description": "Pincode" - }, - "Stcd": { - "type": "string", - "minLength": 1, - "maxLength": 2, - "description": "State Code" - } - }, - "required": ["Nm", "Addr1", "Loc", "Pin", "Stcd"] - }, - "ShipDtls": { - "type": "object", - "properties": { - "Gstin": { - "type": "string", - "maxLength": 15, - "minLength": 3, - "pattern": "^(([0-9]{2}[0-9A-Z]{13})|URP)$", - "description": "Shipping Address GSTIN", - "validationMsg": "Shipping Address GSTIN is invalid" - }, - "LglNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Legal Name" - }, - "TrdNm": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Trade Name" - }, - "Addr1": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Address Line 1" - }, - "Addr2": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Address Line 2" - }, - "Loc": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Location" - }, - "Pin": { - "type": "number", - "minimum": 100000, - "maximum": 999999, - "description": "Pincode" - }, - "Stcd": { - "type": "string", - "minLength": 1, - "maxLength": 2, - "description": "State Code" - } - }, - "required": ["LglNm", "Addr1", "Loc", "Pin", "Stcd"] - }, - "ItemList": { - "type": "Array", - "properties": { - "SlNo": { - "type": "string", - "minLength": 1, - "maxLength": 6, - "description": "Serial No. of Item" - }, - "PrdDesc": { - "type": "string", - "minLength": 3, - "maxLength": 300, - "description": "Item Name" - }, - "IsServc": { - "type": "string", - "minLength": 1, - "maxLength": 1, - "enum": ["Y", "N"], - "description": "Is Service Item" - }, - "HsnCd": { - "type": "string", - "minLength": 4, - "maxLength": 8, - "description": "HSN Code" - }, - "Barcde": { - "type": "string", - "minLength": 3, - "maxLength": 30, - "description": "Barcode" - }, - "Qty": { - "type": "number", - "minimum": 0, - "maximum": 9999999999.999, - "description": "Quantity" - }, - "FreeQty": { - "type": "number", - "minimum": 0, - "maximum": 9999999999.999, - "description": "Free Quantity" - }, - "Unit": { - "type": "string", - "minLength": 3, - "maxLength": 8, - "description": "UOM" - }, - "UnitPrice": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.999, - "description": "Rate" - }, - "TotAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Gross Amount" - }, - "Discount": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Discount" - }, - "PreTaxVal": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Pre tax value" - }, - "AssAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Taxable Value" - }, - "GstRt": { - "type": "number", - "minimum": 0, - "maximum": 999.999, - "description": "GST Rate" - }, - "IgstAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "IGST Amount" - }, - "CgstAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "CGST Amount" - }, - "SgstAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "SGST Amount" - }, - "CesRt": { - "type": "number", - "minimum": 0, - "maximum": 999.999, - "description": "Cess Rate" - }, - "CesAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Cess Amount (Advalorem)" - }, - "CesNonAdvlAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Cess Amount (Non-Advalorem)" - }, - "StateCesRt": { - "type": "number", - "minimum": 0, - "maximum": 999.999, - "description": "State CESS Rate" - }, - "StateCesAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "State CESS Amount" - }, - "StateCesNonAdvlAmt": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "State CESS Amount (Non Advalorem)" - }, - "OthChrg": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Other Charges" - }, - "TotItemVal": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Total Item Value" - }, - "OrdLineRef": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "description": "Order line reference" - }, - "OrgCntry": { - "type": "string", - "minLength": 2, - "maxLength": 2, - "description": "Origin Country" - }, - "PrdSlNo": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "description": "Serial number" - }, - "BchDtls": { - "type": "object", - "properties": { - "Nm": { - "type": "string", - "minLength": 3, - "maxLength": 20, - "description": "Batch number" - }, - "ExpDt": { - "type": "string", - "maxLength": 10, - "minLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Batch Expiry Date" - }, - "WrDt": { - "type": "string", - "maxLength": 10, - "minLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Warranty Date" - } - }, - "required": ["Nm"] - }, - "AttribDtls": { - "type": "Array", - "Attribute": { - "type": "object", - "properties": { - "Nm": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Attribute name of the item" - }, - "Val": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Attribute value of the item" - } - } - } - } - }, - "required": [ - "SlNo", - "IsServc", - "HsnCd", - "UnitPrice", - "TotAmt", - "AssAmt", - "GstRt", - "TotItemVal" - ] - }, - "ValDtls": { - "type": "object", - "properties": { - "AssVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Total Assessable value of all items" - }, - "CgstVal": { - "type": "number", - "maximum": 99999999999999.99, - "minimum": 0, - "description": "Total CGST value of all items" - }, - "SgstVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Total SGST value of all items" - }, - "IgstVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Total IGST value of all items" - }, - "CesVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Total CESS value of all items" - }, - "StCesVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Total State CESS value of all items" - }, - "Discount": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Invoice Discount" - }, - "OthChrg": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Other Charges" - }, - "RndOffAmt": { - "type": "number", - "minimum": -99.99, - "maximum": 99.99, - "description": "Rounded off Amount" - }, - "TotInvVal": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Final Invoice Value " - }, - "TotInvValFc": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Final Invoice value in Foreign Currency" - } - }, - "required": ["AssVal", "TotInvVal"] - }, - "PayDtls": { - "type": "object", - "properties": { - "Nm": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Payee Name" - }, - "AccDet": { - "type": "string", - "minLength": 1, - "maxLength": 18, - "description": "Bank Account Number of Payee" - }, - "Mode": { - "type": "string", - "minLength": 1, - "maxLength": 18, - "description": "Mode of Payment" - }, - "FinInsBr": { - "type": "string", - "minLength": 1, - "maxLength": 11, - "description": "Branch or IFSC code" - }, - "PayTerm": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Terms of Payment" - }, - "PayInstr": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Payment Instruction" - }, - "CrTrn": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Credit Transfer" - }, - "DirDr": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Direct Debit" - }, - "CrDay": { - "type": "number", - "minimum": 0, - "maximum": 9999, - "description": "Credit Days" - }, - "PaidAmt": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Advance Amount" - }, - "PaymtDue": { - "type": "number", - "minimum": 0, - "maximum": 99999999999999.99, - "description": "Outstanding Amount" - } - } - }, - "RefDtls": { - "type": "object", - "properties": { - "InvRm": { - "type": "string", - "maxLength": 100, - "minLength": 3, - "pattern": "^[0-9A-Za-z/-]{3,100}$", - "description": "Remarks/Note" - }, - "DocPerdDtls": { - "type": "object", - "properties": { - "InvStDt": { - "type": "string", - "maxLength": 10, - "minLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Invoice Period Start Date" - }, - "InvEndDt": { - "type": "string", - "maxLength": 10, - "minLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Invoice Period End Date" - } - }, - "required": ["InvStDt ", "InvEndDt "] - }, - "PrecDocDtls": { - "type": "object", - "properties": { - "InvNo": { - "type": "string", - "minLength": 1, - "maxLength": 16, - "pattern": "^[1-9A-Z]{1}[0-9A-Z/-]{1,15}$", - "description": "Reference of Original Invoice" - }, - "InvDt": { - "type": "string", - "maxLength": 10, - "minLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Date of Orginal Invoice" - }, - "OthRefNo": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "description": "Other Reference" - } - } - }, - "required": ["InvNo", "InvDt"], - "ContrDtls": { - "type": "object", - "properties": { - "RecAdvRefr": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "pattern": "^([0-9A-Za-z/-]){1,20}$", - "description": "Receipt Advice No." - }, - "RecAdvDt": { - "type": "string", - "minLength": 10, - "maxLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Date of receipt advice" - }, - "TendRefr": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "pattern": "^([0-9A-Za-z/-]){1,20}$", - "description": "Lot/Batch Reference No." - }, - "ContrRefr": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "pattern": "^([0-9A-Za-z/-]){1,20}$", - "description": "Contract Reference Number" - }, - "ExtRefr": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "pattern": "^([0-9A-Za-z/-]){1,20}$", - "description": "Any other reference" - }, - "ProjRefr": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "pattern": "^([0-9A-Za-z/-]){1,20}$", - "description": "Project Reference Number" - }, - "PORefr": { - "type": "string", - "minLength": 1, - "maxLength": 16, - "pattern": "^([0-9A-Za-z/-]){1,16}$", - "description": "PO Reference Number" - }, - "PORefDt": { - "type": "string", - "minLength": 10, - "maxLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "PO Reference date" - } - } - } - } - }, - "AddlDocDtls": { - "type": "Array", - "properties": { - "Url": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Supporting document URL" - }, - "Docs": { - "type": "string", - "minLength": 3, - "maxLength": 1000, - "description": "Supporting document in Base64 Format" - }, - "Info": { - "type": "string", - "minLength": 3, - "maxLength": 1000, - "description": "Any additional information" - } - } - }, - - "ExpDtls": { - "type": "object", - "properties": { - "ShipBNo": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "description": "Shipping Bill No." - }, - "ShipBDt": { - "type": "string", - "minLength": 10, - "maxLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Shipping Bill Date" - }, - "Port": { - "type": "string", - "minLength": 2, - "maxLength": 10, - "pattern": "^[0-9A-Za-z]{2,10}$", - "description": "Port Code. Refer the master" - }, - "RefClm": { - "type": "string", - "minLength": 1, - "maxLength": 1, - "description": "Claiming Refund. Y/N" - }, - "ForCur": { - "type": "string", - "minLength": 3, - "maxLength": 16, - "description": "Additional Currency Code. Refer the master" - }, - "CntCode": { - "type": "string", - "minLength": 2, - "maxLength": 2, - "description": "Country Code. Refer the master" - }, - "ExpDuty": { - "type": "number", - "minimum": 0, - "maximum": 999999999999.99, - "description": "Export Duty" - } - } - }, - "EwbDtls": { - "type": "object", - "properties": { - "TransId": { - "type": "string", - "minLength": 15, - "maxLength": 15, - "description": "Transporter GSTIN" - }, - "TransName": { - "type": "string", - "minLength": 3, - "maxLength": 100, - "description": "Transporter Name" - }, - "TransMode": { - "type": "string", - "maxLength": 1, - "minLength": 1, - "enum": ["1", "2", "3", "4"], - "description": "Mode of Transport" - }, - "Distance": { - "type": "number", - "minimum": 1, - "maximum": 9999, - "description": "Distance" - }, - "TransDocNo": { - "type": "string", - "minLength": 1, - "maxLength": 15, - "pattern": "^([0-9A-Z/-]){1,15}$", - "description": "Tranport Document Number", - "validationMsg": "Transport Receipt No is invalid" - }, - "TransDocDt": { - "type": "string", - "minLength": 10, - "maxLength": 10, - "pattern": "[0-3][0-9]/[0-1][0-9]/[2][0][1-2][0-9]", - "description": "Transport Document Date" - }, - "VehNo": { - "type": "string", - "minLength": 4, - "maxLength": 20, - "description": "Vehicle Number" - }, - "VehType": { - "type": "string", - "minLength": 1, - "maxLength": 1, - "enum": ["O", "R"], - "description": "Vehicle Type" - } - }, - "required": ["Distance"] - }, - "required": [ - "Version", - "TranDtls", - "DocDtls", - "SellerDtls", - "BuyerDtls", - "ItemList", - "ValDtls" - ] -} diff --git a/erpnext/regional/india/e_invoice/einvoice.js b/erpnext/regional/india/e_invoice/einvoice.js deleted file mode 100644 index 763e65784a..0000000000 --- a/erpnext/regional/india/e_invoice/einvoice.js +++ /dev/null @@ -1,361 +0,0 @@ -erpnext.setup_einvoice_actions = (doctype) => { - frappe.ui.form.on(doctype, { - async refresh(frm) { - if (frm.doc.docstatus == 2) return; - - const res = await frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.validate_eligibility', - args: { doc: frm.doc } - }); - const invoice_eligible = res.message; - - if (!invoice_eligible) return; - - const { doctype, irn, irn_cancelled, ewaybill, eway_bill_cancelled, name, __unsaved } = frm.doc; - - const add_custom_button = (label, action) => { - if (!frm.custom_buttons[label]) { - frm.add_custom_button(label, action, __('E Invoicing')); - } - }; - - if (!irn && !__unsaved) { - const action = () => { - if (frm.doc.__unsaved) { - frappe.throw(__('Please save the document to generate IRN.')); - } - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.get_einvoice', - args: { doctype, docname: name }, - freeze: true, - callback: (res) => { - const einvoice = res.message; - show_einvoice_preview(frm, einvoice); - } - }); - }; - - add_custom_button(__("Generate IRN"), action); - } - - if (irn && !irn_cancelled && !ewaybill) { - const fields = [ - { - "label": "Reason", - "fieldname": "reason", - "fieldtype": "Select", - "reqd": 1, - "default": "1-Duplicate", - "options": ["1-Duplicate", "2-Data Entry Error", "3-Order Cancelled", "4-Other"] - }, - { - "label": "Remark", - "fieldname": "remark", - "fieldtype": "Data", - "reqd": 1 - } - ]; - const action = () => { - const d = new frappe.ui.Dialog({ - title: __("Cancel IRN"), - fields: fields, - primary_action: function() { - const data = d.get_values(); - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.cancel_irn', - args: { - doctype, - docname: name, - irn: irn, - reason: data.reason.split('-')[0], - remark: data.remark - }, - freeze: true, - callback: () => frm.reload_doc() || d.hide(), - error: () => d.hide() - }); - }, - primary_action_label: __('Submit') - }); - d.show(); - }; - add_custom_button(__("Cancel IRN"), action); - } - - if (irn && !irn_cancelled && !ewaybill) { - const action = () => { - const d = new frappe.ui.Dialog({ - title: __('Generate E-Way Bill'), - size: "large", - fields: get_ewaybill_fields(frm), - primary_action: function() { - const data = d.get_values(); - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.generate_eway_bill', - args: { - doctype, - docname: name, - irn, - ...data - }, - freeze: true, - callback: () => { - frappe.show_alert({ - message: __('E-Way Bill Generated successfully'), - indicator: 'green' - }, 7); - frm.reload_doc(); - d.hide(); - }, - error: () => { - frappe.show_alert({ - message: __('E-Way Bill was not Generated'), - indicator: 'red' - }, 7); - d.hide(); - } - }); - }, - primary_action_label: __('Submit') - }); - d.fields_dict.transporter.df.onchange = function () { - const transporter = d.fields_dict.transporter.value; - if (transporter) { - frappe.db.get_value('Supplier', transporter, ['gst_transporter_id', 'supplier_name']) - .then(({ message }) => { - d.set_value('gst_transporter_id', message.gst_transporter_id); - d.set_value('transporter_name', message.supplier_name); - }); - } else { - d.set_value('gst_transporter_id', ''); - d.set_value('transporter_name', ''); - } - }; - d.fields_dict.driver.df.onchange = function () { - const driver = d.fields_dict.driver.value; - if (driver) { - frappe.db.get_value('Driver', driver, ['full_name']) - .then(({ message }) => { - d.set_value('driver_name', message.full_name); - }); - } else { - d.set_value('driver_name', ''); - } - }; - d.show(); - }; - - add_custom_button(__("Generate E-Way Bill"), action); - } - - if (irn && ewaybill && !irn_cancelled && !eway_bill_cancelled) { - const fields = [ - { - "label": "Reason", - "fieldname": "reason", - "fieldtype": "Select", - "reqd": 1, - "default": "1-Duplicate", - "options": ["1-Duplicate", "2-Data Entry Error", "3-Order Cancelled", "4-Other"] - }, - { - "label": "Remark", - "fieldname": "remark", - "fieldtype": "Data", - "reqd": 1 - } - ]; - const action = () => { - const d = new frappe.ui.Dialog({ - title: __('Cancel E-Way Bill'), - fields: fields, - primary_action: function() { - const data = d.get_values(); - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.cancel_eway_bill', - args: { - doctype, - docname: name, - eway_bill: ewaybill, - reason: data.reason.split('-')[0], - remark: data.remark - }, - freeze: true, - callback: () => { - frappe.show_alert({ - message: __('E-Way Bill Cancelled successfully'), - indicator: 'green' - }, 7); - frm.reload_doc(); - d.hide(); - }, - error: () => { - frappe.show_alert({ - message: __('E-Way Bill was not Cancelled'), - indicator: 'red' - }, 7); - d.hide(); - } - }); - }, - primary_action_label: __('Submit') - }); - d.show(); - }; - add_custom_button(__("Cancel E-Way Bill"), action); - } - } - }); -}; - -const get_ewaybill_fields = (frm) => { - return [ - { - 'fieldname': 'transporter', - 'label': 'Transporter', - 'fieldtype': 'Link', - 'options': 'Supplier', - 'default': frm.doc.transporter - }, - { - 'fieldname': 'gst_transporter_id', - 'label': 'GST Transporter ID', - 'fieldtype': 'Data', - 'default': frm.doc.gst_transporter_id - }, - { - 'fieldname': 'driver', - 'label': 'Driver', - 'fieldtype': 'Link', - 'options': 'Driver', - 'default': frm.doc.driver - }, - { - 'fieldname': 'lr_no', - 'label': 'Transport Receipt No', - 'fieldtype': 'Data', - 'default': frm.doc.lr_no - }, - { - 'fieldname': 'vehicle_no', - 'label': 'Vehicle No', - 'fieldtype': 'Data', - 'default': frm.doc.vehicle_no - }, - { - 'fieldname': 'distance', - 'label': 'Distance (in km)', - 'fieldtype': 'Float', - 'default': frm.doc.distance, - 'description': 'Set as zero to auto calculate distance using pin codes', - }, - { - 'fieldname': 'transporter_col_break', - 'fieldtype': 'Column Break', - }, - { - 'fieldname': 'transporter_name', - 'label': 'Transporter Name', - 'fieldtype': 'Data', - 'read_only': 1, - 'default': frm.doc.transporter_name, - 'depends_on': 'transporter' - }, - { - 'fieldname': 'mode_of_transport', - 'label': 'Mode of Transport', - 'fieldtype': 'Select', - 'options': `\nRoad\nAir\nRail\nShip`, - 'default': frm.doc.mode_of_transport - }, - { - 'fieldname': 'driver_name', - 'label': 'Driver Name', - 'fieldtype': 'Data', - 'fetch_from': 'driver.full_name', - 'read_only': 1, - 'default': frm.doc.driver_name, - 'depends_on': 'driver' - }, - { - 'fieldname': 'lr_date', - 'label': 'Transport Receipt Date', - 'fieldtype': 'Date', - 'default': frm.doc.lr_date - }, - { - 'fieldname': 'gst_vehicle_type', - 'label': 'GST Vehicle Type', - 'fieldtype': 'Select', - 'options': `Regular\nOver Dimensional Cargo (ODC)`, - 'depends_on': 'eval:(doc.mode_of_transport === "Road")', - 'default': frm.doc.gst_vehicle_type - } - ]; -}; - -const request_irn_generation = (frm) => { - frappe.call({ - method: 'erpnext.regional.india.e_invoice.utils.generate_irn', - args: { doctype: frm.doc.doctype, docname: frm.doc.name }, - freeze: true, - callback: () => frm.reload_doc() - }); -}; - -const get_preview_dialog = (frm, action) => { - const dialog = new frappe.ui.Dialog({ - title: __("Preview"), - size: "large", - fields: [ - { - "label": "Preview", - "fieldname": "preview_html", - "fieldtype": "HTML" - } - ], - primary_action: () => action(frm) || dialog.hide(), - primary_action_label: __('Generate IRN') - }); - return dialog; -}; - -const show_einvoice_preview = (frm, einvoice) => { - const preview_dialog = get_preview_dialog(frm, request_irn_generation); - - // initialize e-invoice fields - einvoice["Irn"] = einvoice["AckNo"] = ''; einvoice["AckDt"] = frappe.datetime.nowdate(); - frm.doc.signed_einvoice = JSON.stringify(einvoice); - - // initialize preview wrapper - const $preview_wrapper = preview_dialog.get_field("preview_html").$wrapper; - $preview_wrapper.html( - `
- -
-
` - ); - - frappe.call({ - method: "frappe.www.printview.get_html_and_style", - args: { - doc: frm.doc, - print_format: "GST E-Invoice", - no_letterhead: 1 - }, - callback: function (r) { - if (!r.exc) { - $preview_wrapper.find(".print-format").html(r.message.html); - const style = ` - .print-format { box-shadow: 0px 0px 5px rgba(0,0,0,0.2); padding: 0.30in; min-height: 80vh; } - .print-preview { min-height: 0px; } - .modal-dialog { width: 720px; }`; - - frappe.dom.set_style(style, "custom-print-style"); - preview_dialog.show(); - } - } - }); -}; diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py deleted file mode 100644 index 53d3211d3b..0000000000 --- a/erpnext/regional/india/e_invoice/utils.py +++ /dev/null @@ -1,1426 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import base64 -import io -import json -import os -import re -import sys -import traceback - -import frappe -import jwt -import requests -from frappe import _, bold -from frappe.core.page.background_jobs.background_jobs import get_info -from frappe.integrations.utils import make_get_request, make_post_request -from frappe.utils.background_jobs import enqueue -from frappe.utils.data import ( - add_to_date, - cint, - cstr, - flt, - format_date, - get_link_to_form, - getdate, - now_datetime, - time_diff_in_hours, - time_diff_in_seconds, -) -from frappe.utils.scheduler import is_scheduler_inactive -from pyqrcode import create as qrcreate - -from erpnext.regional.india.utils import get_gst_accounts, get_place_of_supply - - -@frappe.whitelist() -def validate_eligibility(doc): - if isinstance(doc, str): - doc = json.loads(doc) - - invalid_doctype = doc.get("doctype") != "Sales Invoice" - if invalid_doctype: - return False - - einvoicing_enabled = cint(frappe.db.get_single_value("E Invoice Settings", "enable")) - if not einvoicing_enabled: - return False - - einvoicing_eligible_from = ( - frappe.db.get_single_value("E Invoice Settings", "applicable_from") or "2021-04-01" - ) - if getdate(doc.get("posting_date")) < getdate(einvoicing_eligible_from): - return False - - invalid_company = not frappe.db.get_value("E Invoice User", {"company": doc.get("company")}) - invalid_supply_type = doc.get("gst_category") not in [ - "Registered Regular", - "Registered Composition", - "SEZ", - "Overseas", - "Deemed Export", - ] - company_transaction = doc.get("billing_address_gstin") == doc.get("company_gstin") - - # if export invoice, then taxes can be empty - # invoice can only be ineligible if no taxes applied and is not an export invoice - no_taxes_applied = not doc.get("taxes") and not doc.get("gst_category") == "Overseas" - has_non_gst_item = any(d for d in doc.get("items", []) if d.get("is_non_gst")) - - if ( - invalid_company - or invalid_supply_type - or company_transaction - or no_taxes_applied - or has_non_gst_item - ): - return False - - return True - - -def validate_einvoice_fields(doc): - invoice_eligible = validate_eligibility(doc) - - if not invoice_eligible: - return - - if doc.docstatus == 0 and doc._action == "save": - if doc.irn: - frappe.throw(_("You cannot edit the invoice after generating IRN"), title=_("Edit Not Allowed")) - if len(doc.name) > 16: - raise_document_name_too_long_error() - - doc.einvoice_status = "Pending" - - elif doc.docstatus == 1 and doc._action == "submit" and not doc.irn: - frappe.throw(_("You must generate IRN before submitting the document."), title=_("Missing IRN")) - - elif doc.irn and doc.docstatus == 2 and doc._action == "cancel" and not doc.irn_cancelled: - frappe.throw( - _("You must cancel IRN before cancelling the document."), title=_("Cancel Not Allowed") - ) - - -def raise_document_name_too_long_error(): - title = _("Document ID Too Long") - msg = _("As you have E-Invoicing enabled, to be able to generate IRN for this invoice") - msg += ", " - msg += _("document id {} exceed 16 letters.").format(bold(_("should not"))) - msg += "

" - msg += _("You must {} your {} in order to have document id of {} length 16.").format( - bold(_("modify")), bold(_("naming series")), bold(_("maximum")) - ) - msg += _("Please account for ammended documents too.") - frappe.throw(msg, title=title) - - -def read_json(name): - file_path = os.path.join(os.path.dirname(__file__), "{name}.json".format(name=name)) - with open(file_path, "r") as f: - return cstr(f.read()) - - -def get_transaction_details(invoice): - supply_type = "" - if ( - invoice.gst_category == "Registered Regular" or invoice.gst_category == "Registered Composition" - ): - supply_type = "B2B" - elif invoice.gst_category == "SEZ": - if invoice.export_type == "Without Payment of Tax": - supply_type = "SEZWOP" - else: - supply_type = "SEZWP" - elif invoice.gst_category == "Overseas": - if invoice.export_type == "Without Payment of Tax": - supply_type = "EXPWOP" - else: - supply_type = "EXPWP" - elif invoice.gst_category == "Deemed Export": - supply_type = "DEXP" - - if not supply_type: - rr, rc, sez, overseas, export = ( - bold("Registered Regular"), - bold("Registered Composition"), - bold("SEZ"), - bold("Overseas"), - bold("Deemed Export"), - ) - frappe.throw( - _("GST category should be one of {}, {}, {}, {}, {}").format(rr, rc, sez, overseas, export), - title=_("Invalid Supply Type"), - ) - - return frappe._dict( - dict(tax_scheme="GST", supply_type=supply_type, reverse_charge=invoice.reverse_charge) - ) - - -def get_doc_details(invoice): - if getdate(invoice.posting_date) < getdate("2021-01-01"): - frappe.throw( - _("IRN generation is not allowed for invoices dated before 1st Jan 2021"), - title=_("Not Allowed"), - ) - - invoice_type = "CRN" if invoice.is_return else "INV" - - invoice_name = invoice.name - invoice_date = format_date(invoice.posting_date, "dd/mm/yyyy") - - return frappe._dict( - dict(invoice_type=invoice_type, invoice_name=invoice_name, invoice_date=invoice_date) - ) - - -def validate_address_fields(address, skip_gstin_validation): - if ( - (not address.gstin and not skip_gstin_validation) - or not address.city - or not address.pincode - or not address.address_title - or not address.address_line1 - or not address.gst_state_number - ): - - frappe.throw( - msg=_( - "Address Lines, City, Pincode, GSTIN are mandatory for address {}. Please set them and try again." - ).format(address.name), - title=_("Missing Address Fields"), - ) - - if address.address_line2 and len(address.address_line2) < 2: - # to prevent "The field Address 2 must be a string with a minimum length of 3 and a maximum length of 100" - address.address_line2 = "" - - -def get_party_details(address_name, skip_gstin_validation=False): - addr = frappe.get_doc("Address", address_name) - - validate_address_fields(addr, skip_gstin_validation) - - if addr.gst_state_number == 97: - # according to einvoice standard - addr.pincode = 999999 - - party_address_details = frappe._dict( - dict( - legal_name=sanitize_for_json(addr.address_title), - location=sanitize_for_json(addr.city), - pincode=addr.pincode, - gstin=addr.gstin, - state_code=addr.gst_state_number, - address_line1=sanitize_for_json(addr.address_line1), - address_line2=sanitize_for_json(addr.address_line2), - ) - ) - - return party_address_details - - -def get_overseas_address_details(address_name): - address_title, address_line1, address_line2, city = frappe.db.get_value( - "Address", address_name, ["address_title", "address_line1", "address_line2", "city"] - ) - - if not address_title or not address_line1 or not city: - frappe.throw( - msg=_( - "Address lines and city is mandatory for address {}. Please set them and try again." - ).format(get_link_to_form("Address", address_name)), - title=_("Missing Address Fields"), - ) - - return frappe._dict( - dict( - gstin="URP", - legal_name=sanitize_for_json(address_title), - location=city, - address_line1=sanitize_for_json(address_line1), - address_line2=sanitize_for_json(address_line2), - pincode=999999, - state_code=96, - place_of_supply=96, - ) - ) - - -def get_item_list(invoice): - item_list = [] - - for d in invoice.items: - einvoice_item_schema = read_json("einv_item_template") - item = frappe._dict({}) - item.update(d.as_dict()) - - item.sr_no = d.idx - item.description = sanitize_for_json(d.item_name) - - item.qty = abs(item.qty) - if flt(item.qty) != 0.0: - item.unit_rate = abs(item.taxable_value / item.qty) - else: - item.unit_rate = abs(item.taxable_value) - item.gross_amount = abs(item.taxable_value) - item.taxable_value = abs(item.taxable_value) - item.discount_amount = 0 - - item.is_service_item = "Y" if item.gst_hsn_code and item.gst_hsn_code[:2] == "99" else "N" - item.serial_no = "" - - item = update_item_taxes(invoice, item) - - item.total_value = abs( - item.taxable_value - + item.igst_amount - + item.sgst_amount - + item.cgst_amount - + item.cess_amount - + item.cess_nadv_amount - + item.other_charges - ) - einv_item = einvoice_item_schema.format(item=item) - item_list.append(einv_item) - - return ", ".join(item_list) - - -def update_item_taxes(invoice, item): - gst_accounts = get_gst_accounts(invoice.company) - gst_accounts_list = [d for accounts in gst_accounts.values() for d in accounts if d] - - for attr in [ - "tax_rate", - "cess_rate", - "cess_nadv_amount", - "cgst_amount", - "sgst_amount", - "igst_amount", - "cess_amount", - "cess_nadv_amount", - "other_charges", - ]: - item[attr] = 0 - - for t in invoice.taxes: - is_applicable = t.tax_amount and t.account_head in gst_accounts_list - if is_applicable: - # this contains item wise tax rate & tax amount (incl. discount) - item_tax_detail = json.loads(t.item_wise_tax_detail).get(item.item_code or item.item_name) - - item_tax_rate = item_tax_detail[0] - # item tax amount excluding discount amount - item_tax_amount = (item_tax_rate / 100) * item.taxable_value - - if t.account_head in gst_accounts.cess_account: - item_tax_amount_after_discount = item_tax_detail[1] - if t.charge_type == "On Item Quantity": - item.cess_nadv_amount += abs(item_tax_amount_after_discount) - else: - item.cess_rate += item_tax_rate - item.cess_amount += abs(item_tax_amount_after_discount) - - for tax_type in ["igst", "cgst", "sgst", "utgst"]: - if t.account_head in gst_accounts[f"{tax_type}_account"]: - item.tax_rate += item_tax_rate - if tax_type == "utgst": - # utgst taxes are reported same as sgst tax - item["sgst_amount"] += abs(item_tax_amount) - else: - item[f"{tax_type}_amount"] += abs(item_tax_amount) - else: - # TODO: other charges per item - pass - - return item - - -def get_invoice_value_details(invoice): - invoice_value_details = frappe._dict(dict()) - invoice_value_details.base_total = abs(sum([i.taxable_value for i in invoice.get("items")])) - invoice_value_details.invoice_discount_amt = 0 - - invoice_value_details.round_off = invoice.base_rounding_adjustment - invoice_value_details.base_grand_total = abs(invoice.base_rounded_total) or abs( - invoice.base_grand_total - ) - invoice_value_details.grand_total = abs(invoice.rounded_total) or abs(invoice.grand_total) - - invoice_value_details = update_invoice_taxes(invoice, invoice_value_details) - - return invoice_value_details - - -def update_invoice_taxes(invoice, invoice_value_details): - gst_accounts = get_gst_accounts(invoice.company) - gst_accounts_list = [d for accounts in gst_accounts.values() for d in accounts if d] - - invoice_value_details.total_cgst_amt = 0 - invoice_value_details.total_sgst_amt = 0 - invoice_value_details.total_igst_amt = 0 - invoice_value_details.total_cess_amt = 0 - invoice_value_details.total_other_charges = 0 - considered_rows = [] - - for t in invoice.taxes: - tax_amount = t.base_tax_amount_after_discount_amount - if t.account_head in gst_accounts_list: - if t.account_head in gst_accounts.cess_account: - # using after discount amt since item also uses after discount amt for cess calc - invoice_value_details.total_cess_amt += abs(t.base_tax_amount_after_discount_amount) - - for tax_type in ["igst", "cgst", "sgst", "utgst"]: - if t.account_head in gst_accounts[f"{tax_type}_account"]: - if tax_type == "utgst": - invoice_value_details["total_sgst_amt"] += abs(tax_amount) - else: - invoice_value_details[f"total_{tax_type}_amt"] += abs(tax_amount) - - update_other_charges(t, invoice_value_details, gst_accounts_list, invoice, considered_rows) - - else: - invoice_value_details.total_other_charges += abs(tax_amount) - - return invoice_value_details - - -def update_other_charges( - tax_row, invoice_value_details, gst_accounts_list, invoice, considered_rows -): - prev_row_id = cint(tax_row.row_id) - 1 - if tax_row.account_head in gst_accounts_list and prev_row_id not in considered_rows: - if tax_row.charge_type == "On Previous Row Amount": - amount = invoice.get("taxes")[prev_row_id].tax_amount_after_discount_amount - invoice_value_details.total_other_charges -= abs(amount) - considered_rows.append(prev_row_id) - if tax_row.charge_type == "On Previous Row Total": - amount = invoice.get("taxes")[prev_row_id].base_total - invoice.base_net_total - invoice_value_details.total_other_charges -= abs(amount) - considered_rows.append(prev_row_id) - - -def get_payment_details(invoice): - payee_name = invoice.company - mode_of_payment = "" - paid_amount = invoice.base_paid_amount - outstanding_amount = invoice.outstanding_amount - - return frappe._dict( - dict( - payee_name=payee_name, - mode_of_payment=mode_of_payment, - paid_amount=paid_amount, - outstanding_amount=outstanding_amount, - ) - ) - - -def get_return_doc_reference(invoice): - invoice_date = frappe.db.get_value("Sales Invoice", invoice.return_against, "posting_date") - return frappe._dict( - dict(invoice_name=invoice.return_against, invoice_date=format_date(invoice_date, "dd/mm/yyyy")) - ) - - -def get_eway_bill_details(invoice): - if invoice.is_return: - frappe.throw( - _( - "E-Way Bill cannot be generated for Credit Notes & Debit Notes. Please clear fields in the Transporter Section of the invoice." - ), - title=_("Invalid Fields"), - ) - - mode_of_transport = {"": "", "Road": "1", "Air": "2", "Rail": "3", "Ship": "4"} - vehicle_type = {"Regular": "R", "Over Dimensional Cargo (ODC)": "O"} - - return frappe._dict( - dict( - gstin=invoice.gst_transporter_id, - name=invoice.transporter_name, - mode_of_transport=mode_of_transport[invoice.mode_of_transport or ""] or None, - distance=invoice.distance or 0, - document_name=invoice.lr_no, - document_date=format_date(invoice.lr_date, "dd/mm/yyyy"), - vehicle_no=invoice.vehicle_no, - vehicle_type=vehicle_type[invoice.gst_vehicle_type], - ) - ) - - -def validate_mandatory_fields(invoice): - if not invoice.company_address: - frappe.throw( - _( - "Company Address is mandatory to fetch company GSTIN details. Please set Company Address and try again." - ), - title=_("Missing Fields"), - ) - if not invoice.customer_address: - frappe.throw( - _( - "Customer Address is mandatory to fetch customer GSTIN details. Please set Company Address and try again." - ), - title=_("Missing Fields"), - ) - if not frappe.db.get_value("Address", invoice.company_address, "gstin"): - frappe.throw( - _( - "GSTIN is mandatory to fetch company GSTIN details. Please enter GSTIN in selected company address." - ), - title=_("Missing Fields"), - ) - if invoice.gst_category != "Overseas" and not frappe.db.get_value( - "Address", invoice.customer_address, "gstin" - ): - frappe.throw( - _( - "GSTIN is mandatory to fetch customer GSTIN details. Please enter GSTIN in selected customer address." - ), - title=_("Missing Fields"), - ) - - -def validate_totals(einvoice): - item_list = einvoice["ItemList"] - value_details = einvoice["ValDtls"] - - total_item_ass_value = 0 - total_item_cgst_value = 0 - total_item_sgst_value = 0 - total_item_igst_value = 0 - total_item_value = 0 - for item in item_list: - total_item_ass_value += flt(item["AssAmt"]) - total_item_cgst_value += flt(item["CgstAmt"]) - total_item_sgst_value += flt(item["SgstAmt"]) - total_item_igst_value += flt(item["IgstAmt"]) - total_item_value += flt(item["TotItemVal"]) - - if ( - abs(flt(item["AssAmt"]) * flt(item["GstRt"]) / 100) - - (flt(item["CgstAmt"]) + flt(item["SgstAmt"]) + flt(item["IgstAmt"])) - > 1 - ): - frappe.throw( - _( - "Row #{}: GST rate is invalid. Please remove tax rows with zero tax amount from taxes table." - ).format(item.idx) - ) - - if abs(flt(value_details["AssVal"]) - total_item_ass_value) > 1: - frappe.throw( - _( - "Total Taxable Value of the items is not equal to the Invoice Net Total. Please check item taxes / discounts for any correction." - ) - ) - - if ( - abs( - flt(value_details["CgstVal"]) - + flt(value_details["SgstVal"]) - - total_item_cgst_value - - total_item_sgst_value - ) - > 1 - ): - frappe.throw( - _( - "CGST + SGST value of the items is not equal to total CGST + SGST value. Please review taxes for any correction." - ) - ) - - if abs(flt(value_details["IgstVal"]) - total_item_igst_value) > 1: - frappe.throw( - _( - "IGST value of all items is not equal to total IGST value. Please review taxes for any correction." - ) - ) - - if ( - abs( - flt(value_details["TotInvVal"]) - + flt(value_details["Discount"]) - - flt(value_details["OthChrg"]) - - flt(value_details["RndOffAmt"]) - - total_item_value - ) - > 1 - ): - frappe.throw( - _( - "Total Value of the items is not equal to the Invoice Grand Total. Please check item taxes / discounts for any correction." - ) - ) - - calculated_invoice_value = ( - flt(value_details["AssVal"]) - + flt(value_details["CgstVal"]) - + flt(value_details["SgstVal"]) - + flt(value_details["IgstVal"]) - + flt(value_details["CesVal"]) - + flt(value_details["OthChrg"]) - + flt(value_details["RndOffAmt"]) - - flt(value_details["Discount"]) - ) - - if abs(flt(value_details["TotInvVal"]) - calculated_invoice_value) > 1: - frappe.throw( - _( - "Total Item Value + Taxes - Discount is not equal to the Invoice Grand Total. Please check taxes / discounts for any correction." - ) - ) - - -def make_einvoice(invoice): - validate_mandatory_fields(invoice) - - schema = read_json("einv_template") - - transaction_details = get_transaction_details(invoice) - item_list = get_item_list(invoice) - doc_details = get_doc_details(invoice) - invoice_value_details = get_invoice_value_details(invoice) - seller_details = get_party_details(invoice.company_address) - - if invoice.gst_category == "Overseas": - buyer_details = get_overseas_address_details(invoice.customer_address) - else: - buyer_details = get_party_details(invoice.customer_address) - place_of_supply = get_place_of_supply(invoice, invoice.doctype) - if place_of_supply: - place_of_supply = place_of_supply.split("-")[0] - else: - place_of_supply = sanitize_for_json(invoice.billing_address_gstin)[:2] - buyer_details.update(dict(place_of_supply=place_of_supply)) - - seller_details.update(dict(legal_name=invoice.company)) - buyer_details.update(dict(legal_name=invoice.customer_name or invoice.customer)) - - shipping_details = payment_details = prev_doc_details = eway_bill_details = frappe._dict({}) - if invoice.shipping_address_name and invoice.customer_address != invoice.shipping_address_name: - if invoice.gst_category == "Overseas": - shipping_details = get_overseas_address_details(invoice.shipping_address_name) - else: - shipping_details = get_party_details(invoice.shipping_address_name, skip_gstin_validation=True) - - dispatch_details = frappe._dict({}) - if invoice.dispatch_address_name: - dispatch_details = get_party_details(invoice.dispatch_address_name, skip_gstin_validation=True) - - if invoice.is_pos and invoice.base_paid_amount: - payment_details = get_payment_details(invoice) - - if invoice.is_return and invoice.return_against: - prev_doc_details = get_return_doc_reference(invoice) - - if invoice.transporter and not invoice.is_return: - eway_bill_details = get_eway_bill_details(invoice) - - # not yet implemented - period_details = export_details = frappe._dict({}) - - einvoice = schema.format( - transaction_details=transaction_details, - doc_details=doc_details, - dispatch_details=dispatch_details, - seller_details=seller_details, - buyer_details=buyer_details, - shipping_details=shipping_details, - item_list=item_list, - invoice_value_details=invoice_value_details, - payment_details=payment_details, - period_details=period_details, - prev_doc_details=prev_doc_details, - export_details=export_details, - eway_bill_details=eway_bill_details, - ) - - try: - einvoice = safe_json_load(einvoice) - einvoice = santize_einvoice_fields(einvoice) - except Exception: - show_link_to_error_log(invoice, einvoice) - - try: - validate_totals(einvoice) - except Exception: - log_error(einvoice) - raise - - return einvoice - - -def show_link_to_error_log(invoice, einvoice): - err_log = log_error(einvoice) - link_to_error_log = get_link_to_form("Error Log", err_log.name, "Error Log") - frappe.throw( - _( - "An error occurred while creating e-invoice for {}. Please check {} for more information." - ).format(invoice.name, link_to_error_log), - title=_("E Invoice Creation Failed"), - ) - - -def log_error(data=None): - if isinstance(data, str): - data = json.loads(data) - - seperator = "--" * 50 - err_tb = traceback.format_exc() - err_msg = str(sys.exc_info()[1]) - data = json.dumps(data, indent=4) - - message = "\n".join(["Error", err_msg, seperator, "Data:", data, seperator, "Exception:", err_tb]) - return frappe.log_error(title=_("E Invoice Request Failed"), message=message) - - -def santize_einvoice_fields(einvoice): - int_fields = ["Pin", "Distance", "CrDay"] - float_fields = [ - "Qty", - "FreeQty", - "UnitPrice", - "TotAmt", - "Discount", - "PreTaxVal", - "AssAmt", - "GstRt", - "IgstAmt", - "CgstAmt", - "SgstAmt", - "CesRt", - "CesAmt", - "CesNonAdvlAmt", - "StateCesRt", - "StateCesAmt", - "StateCesNonAdvlAmt", - "OthChrg", - "TotItemVal", - "AssVal", - "CgstVal", - "SgstVal", - "IgstVal", - "CesVal", - "StCesVal", - "Discount", - "OthChrg", - "RndOffAmt", - "TotInvVal", - "TotInvValFc", - "PaidAmt", - "PaymtDue", - "ExpDuty", - ] - copy = einvoice.copy() - for key, value in copy.items(): - if isinstance(value, list): - for idx, d in enumerate(value): - santized_dict = santize_einvoice_fields(d) - if santized_dict: - einvoice[key][idx] = santized_dict - else: - einvoice[key].pop(idx) - - if not einvoice[key]: - einvoice.pop(key, None) - - elif isinstance(value, dict): - santized_dict = santize_einvoice_fields(value) - if santized_dict: - einvoice[key] = santized_dict - else: - einvoice.pop(key, None) - - elif not value or value == "None": - einvoice.pop(key, None) - - elif key in float_fields: - einvoice[key] = flt(value, 2) - - elif key in int_fields: - einvoice[key] = cint(value) - - return einvoice - - -def safe_json_load(json_string): - try: - return json.loads(json_string) - except json.JSONDecodeError as e: - # print a snippet of 40 characters around the location where error occured - pos = e.pos - start, end = max(0, pos - 20), min(len(json_string) - 1, pos + 20) - snippet = json_string[start:end] - frappe.throw( - _( - "Error in input data. Please check for any special characters near following input:
{}" - ).format(snippet) - ) - - -class RequestFailed(Exception): - pass - - -class CancellationNotAllowed(Exception): - pass - - -class GSPConnector: - def __init__(self, doctype=None, docname=None): - self.doctype = doctype - self.docname = docname - - self.set_invoice() - self.set_credentials() - - # authenticate url is same for sandbox & live - self.authenticate_url = "https://gsp.adaequare.com/gsp/authenticate?grant_type=token" - self.base_url = ( - "https://gsp.adaequare.com" - if not self.e_invoice_settings.sandbox_mode - else "https://gsp.adaequare.com/test" - ) - - self.cancel_irn_url = self.base_url + "/enriched/ei/api/invoice/cancel" - self.irn_details_url = self.base_url + "/enriched/ei/api/invoice/irn" - self.generate_irn_url = self.base_url + "/enriched/ei/api/invoice" - self.gstin_details_url = self.base_url + "/enriched/ei/api/master/gstin" - self.cancel_ewaybill_url = self.base_url + "/enriched/ei/api/ewayapi" - self.generate_ewaybill_url = self.base_url + "/enriched/ei/api/ewaybill" - - def set_invoice(self): - self.invoice = None - if self.doctype and self.docname: - self.invoice = frappe.get_cached_doc(self.doctype, self.docname) - - def set_credentials(self): - self.e_invoice_settings = frappe.get_cached_doc("E Invoice Settings") - - if not self.e_invoice_settings.enable: - frappe.throw( - _("E-Invoicing is disabled. Please enable it from {} to generate e-invoices.").format( - get_link_to_form("E Invoice Settings", "E Invoice Settings") - ) - ) - - if self.invoice: - gstin = self.get_seller_gstin() - credentials_for_gstin = [d for d in self.e_invoice_settings.credentials if d.gstin == gstin] - if credentials_for_gstin: - self.credentials = credentials_for_gstin[0] - else: - frappe.throw( - _( - "Cannot find e-invoicing credentials for selected Company GSTIN. Please check E-Invoice Settings" - ) - ) - else: - self.credentials = ( - self.e_invoice_settings.credentials[0] if self.e_invoice_settings.credentials else None - ) - - def get_seller_gstin(self): - gstin = frappe.db.get_value("Address", self.invoice.company_address, "gstin") - if not gstin: - frappe.throw( - _("Cannot retrieve Company GSTIN. Please select company address with valid GSTIN.") - ) - return gstin - - def get_auth_token(self): - if time_diff_in_seconds(self.e_invoice_settings.token_expiry, now_datetime()) < 150.0: - self.fetch_auth_token() - - return self.e_invoice_settings.auth_token - - def make_request(self, request_type, url, headers=None, data=None): - try: - if request_type == "post": - res = make_post_request(url, headers=headers, data=data) - else: - res = make_get_request(url, headers=headers, data=data) - - except requests.exceptions.HTTPError as e: - if e.response.status_code in [401, 403] and not hasattr(self, "token_auto_refreshed"): - self.auto_refresh_token() - headers = self.get_headers() - return self.make_request(request_type, url, headers, data) - - self.log_request(url, headers, data, res) - return res - - def auto_refresh_token(self): - self.fetch_auth_token() - self.token_auto_refreshed = True - - def log_request(self, url, headers, data, res): - headers.update({"password": self.credentials.password}) - request_log = frappe.get_doc( - { - "doctype": "E Invoice Request Log", - "user": frappe.session.user, - "reference_invoice": self.invoice.name if self.invoice else None, - "url": url, - "headers": json.dumps(headers, indent=4) if headers else None, - "data": json.dumps(data, indent=4) if isinstance(data, dict) else data, - "response": json.dumps(res, indent=4) if res else None, - } - ) - request_log.save(ignore_permissions=True) - frappe.db.commit() - - def get_client_credentials(self): - if self.e_invoice_settings.client_id and self.e_invoice_settings.client_secret: - return self.e_invoice_settings.client_id, self.e_invoice_settings.get_password("client_secret") - - return frappe.conf.einvoice_client_id, frappe.conf.einvoice_client_secret - - def fetch_auth_token(self): - client_id, client_secret = self.get_client_credentials() - headers = {"gspappid": client_id, "gspappsecret": client_secret} - res = {} - try: - res = self.make_request("post", self.authenticate_url, headers) - self.e_invoice_settings.auth_token = "{} {}".format( - res.get("token_type"), res.get("access_token") - ) - self.e_invoice_settings.token_expiry = add_to_date(None, seconds=res.get("expires_in")) - self.e_invoice_settings.save(ignore_permissions=True) - self.e_invoice_settings.reload() - - except Exception: - log_error(res) - self.raise_error(True) - - def get_headers(self): - return { - "content-type": "application/json", - "user_name": self.credentials.username, - "password": self.credentials.get_password(), - "gstin": self.credentials.gstin, - "authorization": self.get_auth_token(), - "requestid": str(base64.b64encode(os.urandom(18))), - } - - def fetch_gstin_details(self, gstin): - headers = self.get_headers() - - try: - params = "?gstin={gstin}".format(gstin=gstin) - res = self.make_request("get", self.gstin_details_url + params, headers) - if res.get("success"): - return res.get("result") - else: - log_error(res) - raise RequestFailed - - except RequestFailed: - self.raise_error() - - except Exception: - log_error() - self.raise_error(True) - - @staticmethod - def get_gstin_details(gstin): - """fetch and cache GSTIN details""" - if not hasattr(frappe.local, "gstin_cache"): - frappe.local.gstin_cache = {} - - key = gstin - gsp_connector = GSPConnector() - details = gsp_connector.fetch_gstin_details(gstin) - - frappe.local.gstin_cache[key] = details - frappe.cache().hset("gstin_cache", key, details) - return details - - def generate_irn(self): - data = {} - try: - headers = self.get_headers() - einvoice = make_einvoice(self.invoice) - data = json.dumps(einvoice, indent=4) - res = self.make_request("post", self.generate_irn_url, headers, data) - - if res.get("success"): - self.set_einvoice_data(res.get("result")) - - elif "2150" in res.get("message"): - # IRN already generated but not updated in invoice - # Extract the IRN from the response description and fetch irn details - irn = res.get("result")[0].get("Desc").get("Irn") - irn_details = self.get_irn_details(irn) - if irn_details: - self.set_einvoice_data(irn_details) - else: - raise RequestFailed( - "IRN has already been generated for the invoice but cannot fetch details for the it. \ - Contact ERPNext support to resolve the issue." - ) - - else: - raise RequestFailed - - except RequestFailed: - errors = self.sanitize_error_message(res.get("message")) - self.set_failed_status(errors=errors) - self.raise_error(errors=errors) - - except Exception as e: - self.set_failed_status(errors=str(e)) - log_error(data) - self.raise_error(True) - - @staticmethod - def bulk_generate_irn(invoices): - gsp_connector = GSPConnector() - gsp_connector.doctype = "Sales Invoice" - - failed = [] - - for invoice in invoices: - try: - gsp_connector.docname = invoice - gsp_connector.set_invoice() - gsp_connector.set_credentials() - gsp_connector.generate_irn() - - except Exception as e: - failed.append({"docname": invoice, "message": str(e)}) - - return failed - - def get_irn_details(self, irn): - headers = self.get_headers() - - try: - params = "?irn={irn}".format(irn=irn) - res = self.make_request("get", self.irn_details_url + params, headers) - if res.get("success"): - return res.get("result") - else: - raise RequestFailed - - except RequestFailed: - errors = self.sanitize_error_message(res.get("message")) - self.raise_error(errors=errors) - - except Exception: - log_error() - self.raise_error(True) - - def cancel_irn(self, irn, reason, remark): - data, res = {}, {} - try: - # validate cancellation - if time_diff_in_hours(now_datetime(), self.invoice.ack_date) > 24: - frappe.throw( - _("E-Invoice cannot be cancelled after 24 hours of IRN generation."), - title=_("Not Allowed"), - exc=CancellationNotAllowed, - ) - if not irn: - frappe.throw( - _("IRN not found. You must generate IRN before cancelling."), - title=_("Not Allowed"), - exc=CancellationNotAllowed, - ) - - headers = self.get_headers() - data = json.dumps({"Irn": irn, "Cnlrsn": reason, "Cnlrem": remark}, indent=4) - - res = self.make_request("post", self.cancel_irn_url, headers, data) - if res.get("success") or "9999" in res.get("message"): - self.invoice.irn_cancelled = 1 - self.invoice.irn_cancel_date = res.get("result")["CancelDate"] if res.get("result") else "" - self.invoice.einvoice_status = "Cancelled" - self.invoice.flags.updater_reference = { - "doctype": self.invoice.doctype, - "docname": self.invoice.name, - "label": _("IRN Cancelled - {}").format(remark), - } - self.update_invoice() - - else: - raise RequestFailed - - except RequestFailed: - errors = self.sanitize_error_message(res.get("message")) - self.set_failed_status(errors=errors) - self.raise_error(errors=errors) - - except CancellationNotAllowed as e: - self.set_failed_status(errors=str(e)) - self.raise_error(errors=str(e)) - - except Exception as e: - self.set_failed_status(errors=str(e)) - log_error(data) - self.raise_error(True) - - @staticmethod - def bulk_cancel_irn(invoices, reason, remark): - gsp_connector = GSPConnector() - gsp_connector.doctype = "Sales Invoice" - - failed = [] - - for invoice in invoices: - try: - gsp_connector.docname = invoice - gsp_connector.set_invoice() - gsp_connector.set_credentials() - irn = gsp_connector.invoice.irn - gsp_connector.cancel_irn(irn, reason, remark) - - except Exception as e: - failed.append({"docname": invoice, "message": str(e)}) - - return failed - - def generate_eway_bill(self, **kwargs): - args = frappe._dict(kwargs) - - headers = self.get_headers() - eway_bill_details = get_eway_bill_details(args) - data = json.dumps( - { - "Irn": args.irn, - "Distance": cint(eway_bill_details.distance), - "TransMode": eway_bill_details.mode_of_transport, - "TransId": eway_bill_details.gstin, - "TransName": eway_bill_details.name, - "TrnDocDt": eway_bill_details.document_date, - "TrnDocNo": eway_bill_details.document_name, - "VehNo": eway_bill_details.vehicle_no, - "VehType": eway_bill_details.vehicle_type, - }, - indent=4, - ) - - try: - res = self.make_request("post", self.generate_ewaybill_url, headers, data) - if res.get("success"): - self.invoice.ewaybill = res.get("result").get("EwbNo") - self.invoice.eway_bill_validity = res.get("result").get("EwbValidTill") - self.invoice.eway_bill_cancelled = 0 - self.invoice.update(args) - if res.get("info"): - info = res.get("info") - # when we have more features (responses) in eway bill, we can add them using below forloop. - for msg in info: - if msg.get("InfCd") == "EWBPPD": - pin_to_pin_distance = int(re.search(r"\d+", msg.get("Desc")).group()) - frappe.msgprint( - _("Auto Calculated Distance is {} KM.").format(str(pin_to_pin_distance)), - title="Notification", - indicator="green", - alert=True, - ) - self.invoice.distance = flt(pin_to_pin_distance) - self.invoice.flags.updater_reference = { - "doctype": self.invoice.doctype, - "docname": self.invoice.name, - "label": _("E-Way Bill Generated"), - } - self.update_invoice() - - else: - raise RequestFailed - - except RequestFailed: - errors = self.sanitize_error_message(res.get("message")) - self.raise_error(errors=errors) - - except Exception: - log_error(data) - self.raise_error(True) - - def cancel_eway_bill(self, eway_bill, reason, remark): - headers = self.get_headers() - data = json.dumps({"ewbNo": eway_bill, "cancelRsnCode": reason, "cancelRmrk": remark}, indent=4) - headers["username"] = headers["user_name"] - try: - res = self.make_request("post", self.cancel_ewaybill_url, headers, data) - if res.get("success"): - self.invoice.ewaybill = "" - self.invoice.eway_bill_cancelled = 1 - self.invoice.flags.updater_reference = { - "doctype": self.invoice.doctype, - "docname": self.invoice.name, - "label": _("E-Way Bill Cancelled - {}").format(remark), - } - self.update_invoice() - - else: - raise RequestFailed - - except RequestFailed: - errors = self.sanitize_error_message(res.get("message")) - self.raise_error(errors=errors) - - except Exception: - log_error(data) - self.raise_error(True) - - def sanitize_error_message(self, message): - """ - On validation errors, response message looks something like this: - message = '2174 : For inter-state transaction, CGST and SGST amounts are not applicable; only IGST amount is applicable, - 3095 : Supplier GSTIN is inactive' - we search for string between ':' to extract the error messages - errors = [ - ': For inter-state transaction, CGST and SGST amounts are not applicable; only IGST amount is applicable, 3095 ', - ': Test' - ] - then we trim down the message by looping over errors - """ - if not message: - return [] - - errors = re.findall(": [^:]+", message) - for idx, e in enumerate(errors): - # remove colons - errors[idx] = errors[idx].replace(":", "").strip() - # if not last - if idx != len(errors) - 1: - # remove last 7 chars eg: ', 3095 ' - errors[idx] = errors[idx][:-6] - - return errors - - def raise_error(self, raise_exception=False, errors=None): - if errors is None: - errors = [] - title = _("E Invoice Request Failed") - if errors: - frappe.throw(errors, title=title, as_list=1) - else: - link_to_error_list = 'Error Log' - frappe.msgprint( - _( - "An error occurred while making e-invoicing request. Please check {} for more information." - ).format(link_to_error_list), - title=title, - raise_exception=raise_exception, - indicator="red", - ) - - def set_einvoice_data(self, res): - enc_signed_invoice = res.get("SignedInvoice") - dec_signed_invoice = jwt.decode(enc_signed_invoice, options={"verify_signature": False})["data"] - - self.invoice.irn = res.get("Irn") - self.invoice.ewaybill = res.get("EwbNo") - self.invoice.eway_bill_validity = res.get("EwbValidTill") - self.invoice.ack_no = res.get("AckNo") - self.invoice.ack_date = res.get("AckDt") - self.invoice.signed_einvoice = dec_signed_invoice - self.invoice.ack_no = res.get("AckNo") - self.invoice.ack_date = res.get("AckDt") - self.invoice.signed_qr_code = res.get("SignedQRCode") - self.invoice.einvoice_status = "Generated" - - self.attach_qrcode_image() - - self.invoice.flags.updater_reference = { - "doctype": self.invoice.doctype, - "docname": self.invoice.name, - "label": _("IRN Generated"), - } - self.update_invoice() - - def attach_qrcode_image(self): - qrcode = self.invoice.signed_qr_code - doctype = self.invoice.doctype - docname = self.invoice.name - filename = "QRCode_{}.png".format(docname).replace(os.path.sep, "__") - - qr_image = io.BytesIO() - url = qrcreate(qrcode, error="L") - url.png(qr_image, scale=2, quiet_zone=1) - _file = frappe.get_doc( - { - "doctype": "File", - "file_name": filename, - "attached_to_doctype": doctype, - "attached_to_name": docname, - "attached_to_field": "qrcode_image", - "is_private": 0, - "content": qr_image.getvalue(), - } - ) - _file.save() - frappe.db.commit() - self.invoice.qrcode_image = _file.file_url - - def update_invoice(self): - self.invoice.flags.ignore_validate_update_after_submit = True - self.invoice.flags.ignore_validate = True - self.invoice.save() - - def set_failed_status(self, errors=None): - frappe.db.rollback() - self.invoice.einvoice_status = "Failed" - self.invoice.failure_description = self.get_failure_message(errors) if errors else "" - self.update_invoice() - frappe.db.commit() - - def get_failure_message(self, errors): - if isinstance(errors, list): - errors = ", ".join(errors) - return errors - - -def sanitize_for_json(string): - """Escape JSON specific characters from a string.""" - - # json.dumps adds double-quotes to the string. Indexing to remove them. - return json.dumps(string)[1:-1] - - -@frappe.whitelist() -def get_einvoice(doctype, docname): - invoice = frappe.get_doc(doctype, docname) - return make_einvoice(invoice) - - -@frappe.whitelist() -def generate_irn(doctype, docname): - gsp_connector = GSPConnector(doctype, docname) - gsp_connector.generate_irn() - - -@frappe.whitelist() -def cancel_irn(doctype, docname, irn, reason, remark): - gsp_connector = GSPConnector(doctype, docname) - gsp_connector.cancel_irn(irn, reason, remark) - - -@frappe.whitelist() -def generate_eway_bill(doctype, docname, **kwargs): - gsp_connector = GSPConnector(doctype, docname) - gsp_connector.generate_eway_bill(**kwargs) - - -@frappe.whitelist() -def cancel_eway_bill(doctype, docname, eway_bill, reason, remark): - gsp_connector = GSPConnector(doctype, docname) - gsp_connector.cancel_eway_bill(eway_bill, reason, remark) - - -@frappe.whitelist() -def generate_einvoices(docnames): - docnames = json.loads(docnames) or [] - - if len(docnames) < 10: - failures = GSPConnector.bulk_generate_irn(docnames) - frappe.local.message_log = [] - - if failures: - show_bulk_action_failure_message(failures) - - success = len(docnames) - len(failures) - frappe.msgprint( - _("{} e-invoices generated successfully").format(success), - title=_("Bulk E-Invoice Generation Complete"), - ) - - else: - enqueue_bulk_action(schedule_bulk_generate_irn, docnames=docnames) - - -def schedule_bulk_generate_irn(docnames): - failures = GSPConnector.bulk_generate_irn(docnames) - frappe.local.message_log = [] - - frappe.publish_realtime( - "bulk_einvoice_generation_complete", - {"user": frappe.session.user, "failures": failures, "invoices": docnames}, - ) - - -def show_bulk_action_failure_message(failures): - for doc in failures: - docname = '{0}'.format(doc.get("docname")) - message = doc.get("message").replace("'", '"') - if message[0] == "[": - errors = json.loads(message) - error_list = "".join(["
  • {}
  • ".format(err) for err in errors]) - message = """{} has following errors:
    -
      {}
    """.format( - docname, error_list - ) - else: - message = "{} - {}".format(docname, message) - - frappe.msgprint(message, title=_("Bulk E-Invoice Generation Complete"), indicator="red") - - -@frappe.whitelist() -def cancel_irns(docnames, reason, remark): - docnames = json.loads(docnames) or [] - - if len(docnames) < 10: - failures = GSPConnector.bulk_cancel_irn(docnames, reason, remark) - frappe.local.message_log = [] - - if failures: - show_bulk_action_failure_message(failures) - - success = len(docnames) - len(failures) - frappe.msgprint( - _("{} e-invoices cancelled successfully").format(success), - title=_("Bulk E-Invoice Cancellation Complete"), - ) - else: - enqueue_bulk_action(schedule_bulk_cancel_irn, docnames=docnames, reason=reason, remark=remark) - - -def schedule_bulk_cancel_irn(docnames, reason, remark): - failures = GSPConnector.bulk_cancel_irn(docnames, reason, remark) - frappe.local.message_log = [] - - frappe.publish_realtime( - "bulk_einvoice_cancellation_complete", - {"user": frappe.session.user, "failures": failures, "invoices": docnames}, - ) - - -def enqueue_bulk_action(job, **kwargs): - check_scheduler_status() - - enqueue( - job, - **kwargs, - queue="long", - timeout=10000, - event="processing_bulk_einvoice_action", - now=frappe.conf.developer_mode or frappe.flags.in_test, - ) - - if job == schedule_bulk_generate_irn: - msg = _("E-Invoices will be generated in a background process.") - else: - msg = _("E-Invoices will be cancelled in a background process.") - - frappe.msgprint(msg, alert=1) - - -def check_scheduler_status(): - if is_scheduler_inactive() and not frappe.flags.in_test: - frappe.throw(_("Scheduler is inactive. Cannot enqueue job."), title=_("Scheduler Inactive")) - - -def job_already_enqueued(job_name): - enqueued_jobs = [d.get("job_name") for d in get_info()] - if job_name in enqueued_jobs: - return True diff --git a/erpnext/regional/india/gst_state_code_data.json b/erpnext/regional/india/gst_state_code_data.json deleted file mode 100644 index 8481c27972..0000000000 --- a/erpnext/regional/india/gst_state_code_data.json +++ /dev/null @@ -1,177 +0,0 @@ -[ - { - "state_number": "33", - "state_code": "TN", - "state_name": "Tamil Nadu" - }, - { - "state_number": "35", - "state_code": "UP", - "state_name": "Uttar Pradesh" - }, - { - "state_number": "05", - "state_code": "UT", - "state_name": "Uttarakhand" - }, - { - "state_number": "19", - "state_code": "WB", - "state_name": "West Bengal" - }, - { - "state_number": "16", - "state_code": "TR", - "state_name": "Tripura" - }, - { - "state_number": "36", - "state_code": "TS", - "state_name": "Telangana" - }, - { - "state_number": "11", - "state_code": "SK", - "state_name": "Sikkim" - }, - { - "state_number": "08", - "state_code": "RJ", - "state_name": "Rajasthan" - }, - { - "state_number": "03", - "state_code": "PB", - "state_name": "Punjab" - }, - { - "state_number": "34", - "state_code": "PY", - "state_name": "Pondicherry" - }, - { - "state_number": "21", - "state_code": "OR", - "state_name": "Odisha" - }, - { - "state_number": "13", - "state_code": "NL", - "state_name": "Nagaland" - }, - { - "state_number": "15", - "state_code": "MI", - "state_name": "Mizoram" - }, - { - "state_number": "17", - "state_code": "ME", - "state_name": "Meghalaya" - }, - { - "state_number": "14", - "state_code": "MN", - "state_name": "Manipur" - }, - { - "state_number": "27", - "state_code": "MH", - "state_name": "Maharashtra" - }, - { - "state_number": "23", - "state_code": "MP", - "state_name": "Madhya Pradesh" - }, - { - "state_number": "31", - "state_code": "LD", - "state_name": "Lakshadweep Islands" - }, - { - "state_number": "32", - "state_code": "KL", - "state_name": "Kerala" - }, - { - "state_number": "29", - "state_code": "KA", - "state_name": "Karnataka" - }, - { - "state_number": "20", - "state_code": "JH", - "state_name": "Jharkhand" - }, - { - "state_number": "01", - "state_code": "JK", - "state_name": "Jammu and Kashmir" - }, - { - "state_number": "02", - "state_code": "HP", - "state_name": "Himachal Pradesh" - }, - { - "state_number": "06", - "state_code": "HR", - "state_name": "Haryana" - }, - { - "state_number": "24", - "state_code": "GJ", - "state_name": "Gujarat" - }, - { - "state_number": "30", - "state_code": "GA", - "state_name": "Goa" - }, - { - "state_number": "07", - "state_code": "DL", - "state_name": "Delhi" - }, - { - "state_number": "26", - "state_code": "DN", - "state_name": "Dadra and Nagar Haveli and Daman and Diu" - }, - { - "state_number": "22", - "state_code": "CT", - "state_name": "Chhattisgarh" - }, - { - "state_number": "04", - "state_code": "CH", - "state_name": "Chandigarh" - }, - { - "state_number": "10", - "state_code": "BH", - "state_name": "Bihar" - }, - { - "state_number": "18", - "state_code": "AS", - "state_name": "Assam" - }, - { - "state_number": "12", - "state_code": "AR", - "state_name": "Arunachal Pradesh" - }, - { - "state_number": "37", - "state_code": "AD", - "state_name": "Andhra Pradesh (New)" - }, - { - "state_number": "38", - "state_code": "LA", - "state_name": "Ladakh" - } -] diff --git a/erpnext/regional/india/hsn_code_data.json b/erpnext/regional/india/hsn_code_data.json deleted file mode 100644 index 172773b596..0000000000 --- a/erpnext/regional/india/hsn_code_data.json +++ /dev/null @@ -1,55378 +0,0 @@ -[ - { - "description": "LIVE ANIMALS", - "hsn_code": "01" - }, - { - "description": "MEAT AND EDIBLE MEAT OFFAL", - "hsn_code": "02" - }, - { - "description": "FISH AND CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES", - "hsn_code": "03" - }, - { - "description": "DAIRY PRODUCE; BIRDS’ EGGS; NATURAL HONEY; EDIBLE PRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "04" - }, - { - "description": "ANIMAL ORIGINATED PRODUCTS; NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "05" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES", - "hsn_code": "0101" - }, - { - "description": "LIVE BOVINE ANIMALS", - "hsn_code": "0102" - }, - { - "description": "LIVE SWINE", - "hsn_code": "0103" - }, - { - "description": "LIVE SHEEP AND GOATS", - "hsn_code": "0104" - }, - { - "description": "LIVE POULTRY, THAT IS TO SAY, FOWLS OF THE SPECIES GALLUS DOMESTICUS, DUCKS, GEESE, TURKEYS AND GUINEA FOWLS", - "hsn_code": "0105" - }, - { - "description": "OTHER LIVE ANIMALS", - "hsn_code": "0106" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FRESH AND CHILLED", - "hsn_code": "0201" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FROZEN", - "hsn_code": "0202" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN", - "hsn_code": "0203" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN", - "hsn_code": "0204" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN", - "hsn_code": "0205" - }, - { - "description": "EDIBLE OFFAL OF BOVINE ANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES, FRESH, CHILLED OR FROZEN", - "hsn_code": "0206" - }, - { - "description": "MEAT AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN", - "hsn_code": "0207" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN", - "hsn_code": "0208" - }, - { - "description": "PIG FAT, FREE OF LEAN MEAT AND POULTRY FAT, NOT RENDERED OR OTHERWISE EXTRACTED, FRESH, CHILLED, FROZEN, SALTED, IN BRINE, DRIED OR SMOKED", - "hsn_code": "0209" - }, - { - "description": "MEAT AND EDIBLE MEAT OFFAL, SALTED, IN BRINE, DRIED OR SMOKED; EDIBLE FLOURS AND MEALS OF MEAT OR MEAT OFFAL", - "hsn_code": "0210" - }, - { - "description": "LIVE FISH", - "hsn_code": "0301" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304", - "hsn_code": "0302" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304", - "hsn_code": "0303" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT (WHETHER OR NOT MINCED), FRESH, CHILLED OR FROZEN", - "hsn_code": "0304" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKED FISH, WHETHER OR NOT COOKED BEFORE OR DURING THE SMOKING PROCESS; FLOURS, MEALS AND PELLETS, OF FISH FIT FOR HUMAN CONSUMPTION", - "hsn_code": "0305" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN PERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR DRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED", - "hsn_code": "0305" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT, LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTED OR IN BRINE; SMOKED CRUSTACEANS, WHETHER IN SHELL OR NOT, WHETHER OR NOT COOKED BEFORE OR DURING THE SMOKING PROCESS; CRUSTACEANS, IN SHELL, COOKED BY STEAMING OR BY BOILING IN WATER, WHETHER OR NOT CHILLED, FROZEN, DRIED, SALTED OR IN BRINE; FLOURS, MEALS AND PELLETS OF CRUSTACEANS, FIT FOR HUMAN CONSUMPTION", - "hsn_code": "0306" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTED OR IN BRINE; SMOKED MOLLUSCS, WHETHER IN SHELL OR NOT, WHETHER OR NOT COOKED BEFORE OR DURING THE SMOKING PROCESS; FLOURS, MEALS AND PELLETS OF MOLLUSCS, FIT FOR HUMAN CONSUMPTION", - "hsn_code": "0307" - }, - { - "description": "AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR IN BRINE; SMOKED AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, WHETHER OR NOT COOKED BEFORE OR DURING THE SMOKING PROCESS; FLOURS, MEALS AND PELLETS OF AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, FIT FOR HUMAN CONSUMPTION", - "hsn_code": "0308" - }, - { - "description": "MILK AND CREAM, NOT CONCENTRATED NOR CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "0401" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "0402" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID, NOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006", - "hsn_code": "0402" - }, - { - "description": "BUTTERMILK, CURDLED MILK AND CREAM, YOGURT, KEFIR AND OTHER FERMENTED OR ACIDIFIED MILK AND CREAM, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR FLAVOURED OR CONTAINING ADDED FRUIT, NUTS OR COCOA", - "hsn_code": "0403" - }, - { - "description": "WHEY, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER; PRODUCTS CONSISTING OF NATURAL MILK CONSTITUENTS, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "0404" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS", - "hsn_code": "0405" - }, - { - "description": "CHEESE AND CURD", - "hsn_code": "0406" - }, - { - "description": "BIRDS\u2019 EGGS, IN SHELL, FRESH, PRESERVED OR COOKED", - "hsn_code": "0407" - }, - { - "description": "BIRDS EGGS, NOT IN SHELL, AND EGG YOLKS, FRESH, DRIED, COOKED BY STEAMING OR BY BOILING IN WATER, MOULDED, FROZEN OR OTHERWISE PRESERVED, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "0408" - }, - { - "description": "EDIBLE PRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "0410" - }, - { - "description": "HUMAN HAIR, UNWORKED, WHETHER OR NOT WASHED OR SCOURED; WASTE OF HUMAN HAIR", - "hsn_code": "0501" - }, - { - "description": "PIGS, HOGS OR BOARS BRISTLES AND HAIR; BADGER HAIR AND OTHER BRUSH MAKING HAIR; WASTE OF SUCH BRISTLES OR HAIR", - "hsn_code": "0502" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS (OTHER THAN FISH), WHOLE AND PIECES THEREOF, FRESH, CHILLED, FROZEN, SALTED, IN BRINE, DRIED OR SMOKED", - "hsn_code": "0504" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR FEATHERS OR DOWN, FEATHERS AND PARTS OF FEATHERS (WHETHER OR NOT WITH TRIMMED EDGES) AND DOWN, NOT FURTHER WORKED THAN CLEANED, DISINFECTED OR TREATED FOR PRESERVATION; POWDER AND WASTE OF FEATHERS OR PARTS OF FEATHERS", - "hsn_code": "0505" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO SHAPE), TREATED WITH ACID OR DEGELATINISED POWDER AND WASTE OF THESE PRODUCTS", - "hsn_code": "0506" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND WHALE-BONE HAIR, HORNS, ANTLERS, HOOVES, NAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY PREPARED BUT NOT CUT TO SHAPE; POWDER AND WASTE OF THESE PRODUCTS", - "hsn_code": "0507" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED OR SIMPLY PREPARED BUT NOT OTHERWISE WORKED; SHELLS OF MOLLUSCS, CRUSTACEANS OR ECHINODERMS AND CUTTLE-BONE, UNWORKED OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, POWDER AND WASTE THEREOF", - "hsn_code": "0508" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; CANTHARIDES; BILE, WHETHER OR NOT DRIED; GLANDS AND OTHER ANIMAL PRODUCTS USED IN THE PREPARATION OF PHARMACEUTICAL PRODUCTS, FRESH, CHILLED, FROZEN OR OTHERWISE PROVISIONALLY PRESERVED", - "hsn_code": "0510" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED; DEAD ANIMALS OF CHAPTER 1 OR 3, UNFIT FOR HUMAN CONSUMPTION", - "hsn_code": "0511" - }, - { - "description": "Vegetable Products", - "hsn_code": "06-15" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH OR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212", - "hsn_code": "0601" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN", - "hsn_code": "0602" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL PURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED", - "hsn_code": "0603" - }, - { - "description": "FOLIAGE, BRANCHES AND OTHER PARTS OF PLANTS, WITHOUT FLOWERS OR FLOWER BUDS, AND GRASSES, MOSSES AND LICHENS, BEING GOODS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL PURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED", - "hsn_code": "0604" - }, - { - "description": "POTATOES, FRESH OR CHILLED", - "hsn_code": "0701" - }, - { - "description": "Tomatoes, fresh or chilled", - "hsn_code": "0702" - }, - { - "description": "ONIONS, SHALLOTS, GARLIC, LEEKS AND OTHER Alliaceous VEGETABLES, FRESH OR CHILLED", - "hsn_code": "0703" - }, - { - "description": "LETTUCE (LACTUCASATIVA) AND CHICORY (CICHORIUM SPP.), FRESH OR CHILLED LETTUCE", - "hsn_code": "0705" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY, CELERIAC, RADISHES AND SIMILAR EDIBLE ROOTS, FRESH OR CHILLED", - "hsn_code": "0706" - }, - { - "description": "Cucumbers or gherkins, fresh or chilled", - "hsn_code": "0707" - }, - { - "description": "LEGUMINOUS VEGETABLES, SHELLED OR UNSHELLED, FRESH OR CHILLED", - "hsn_code": "0708" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED", - "hsn_code": "0709" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BY STEAMING OR BOILING IN WATER), FROZEN", - "hsn_code": "0710" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED (FOR EXAMPLE, BY SULPHUR DIOXIDE GAS, IN BRINE, IN SULPHUR WATER OR IN OTHER PRESERVATIVE SOLUTIONS), BUT UNSUITABLE IN THAT STATE FOR IMMEDIATE CONSUMPTION", - "hsn_code": "0711" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED, BROKEN OR IN POWDER, BUT NOT FURTHER PREPARED", - "hsn_code": "0712" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED, WHETHER OR NOT SKINNED OR SPLIT", - "hsn_code": "0713" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEM ARTICHOKES, SWEET POTATOES AND SIMILAR ROOTS AND TUBERS WITH HIGH STARCH OR INULIN CONTENT, FRESH, CHILLED, FROZEN OR DRIED, WHETHER OR NOT SLICED OR IN THE FORM OF PELLETS; SAGO PITH", - "hsn_code": "0714" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED", - "hsn_code": "0801" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED", - "hsn_code": "0802" - }, - { - "description": "BANANAS, INCLUDING PLANTAINS, FRESH OR DRIED", - "hsn_code": "0803" - }, - { - "description": "Dates, figs, pineapples, avocados, guavas, mangoes and mangosteens; fresh or dried", - "hsn_code": "0804" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED", - "hsn_code": "0805" - }, - { - "description": "GRAPES, FRESH OR DRIED", - "hsn_code": "0806" - }, - { - "description": "MELONS (INCLUDING WATERMELONS) AND PAPAWS (PAPAYAS), FRESH", - "hsn_code": "0807" - }, - { - "description": "APPLES, PEARS AND QUINCES, FRESH", - "hsn_code": "0808" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDING NECTARINES), PLUMS AND SOLES, FRESH", - "hsn_code": "0809" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS, MANGOES, AND MANGOSTEENS, FRESH OR DRIED", - "hsn_code": "0810" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BY STEAMING OR BOILING IN WATER, FROZEN, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "0811" - }, - { - "description": "FRUIT AND NUTS PROVISIONALLY PRESERVED (FOR EXAMPLE, BY SULPHUR DIOXIDE GAS, IN BRINE, IN SULPHUR WATER OR IN OTHER PRESERVATIVE SOLUTIONS), BUT UNSUITABLE IN THAT STATE FOR IMMEDIATE CONSUMPTION", - "hsn_code": "0812" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS 0801 TO 0806; MIXTURES OF NUTS OR DRIED FRUITS OF THIS CHAPTER", - "hsn_code": "0813" - }, - { - "description": "Peel of citrus fruit or melons (including watermelons), fresh, frozen, dried or provisionally preserved in brine, in sulphur water or in other preservative solutions", - "hsn_code": "0814" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DECAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE SUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION", - "hsn_code": "0901" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED", - "hsn_code": "0902" - }, - { - "description": "Mate", - "hsn_code": "0903" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS PIMENTA", - "hsn_code": "0904" - }, - { - "description": "VANILLA", - "hsn_code": "0905" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS", - "hsn_code": "0906" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS)", - "hsn_code": "0907" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS", - "hsn_code": "0908" - }, - { - "description": "SEEDS OF ANISE, BADIAN, FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES", - "hsn_code": "0909" - }, - { - "description": "OTHER FRUIT, FRESH", - "hsn_code": "0909" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES", - "hsn_code": "0910" - }, - { - "description": "SEEDS OF ANISE, BADIAN, FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES", - "hsn_code": "0910" - }, - { - "description": "WHEAT AND MESLIN", - "hsn_code": "1001" - }, - { - "description": "RYE", - "hsn_code": "1002" - }, - { - "description": "BARLEY", - "hsn_code": "1003" - }, - { - "description": "OATS", - "hsn_code": "1004" - }, - { - "description": "MAIZE (CORN)", - "hsn_code": "1005" - }, - { - "description": "RICE", - "hsn_code": "1006" - }, - { - "description": "GRAIN SORGHUM", - "hsn_code": "1007" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEEDS; OTHER CEREALS", - "hsn_code": "1008" - }, - { - "description": "Wheat or meslin flour", - "hsn_code": "1101" - }, - { - "description": "CEREAL FLOURS OTHER THAN THAT OF WHEAT OR MESLIN", - "hsn_code": "1102" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS", - "hsn_code": "1103" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED, SLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED, FLAKED OR GROUND", - "hsn_code": "1104" - }, - { - "description": "FLOUR, MEAL, POWDER, FLAKES, GRANULES AND PELLETS OF POTATOES", - "hsn_code": "1105" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF SAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8", - "hsn_code": "1106" - }, - { - "description": "MALT, WHETHER OR NOT ROASTED", - "hsn_code": "1107" - }, - { - "description": "STARCHES; INULIN", - "hsn_code": "1108" - }, - { - "description": "Wheat gluten, whether or not dried", - "hsn_code": "1109" - }, - { - "description": "SOYA BEANS, WHETHER OR NOT BROKEN", - "hsn_code": "1201" - }, - { - "description": "GROUND-NUT, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR BROKEN", - "hsn_code": "1202" - }, - { - "description": "Copra", - "hsn_code": "1203" - }, - { - "description": "LINSEED, WHETHER OR NOT BROKEN", - "hsn_code": "1204" - }, - { - "description": "RAPE OR COLZA SEEDS, WHETHER OR NOT BROKEN", - "hsn_code": "1205" - }, - { - "description": "SUNFLOWER SEEDS, WHETHER OR NOT BROKEN", - "hsn_code": "1206" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN", - "hsn_code": "1207" - }, - { - "description": "FLOURS AND MEALS OF OIL SEEDS OR OLEAGINOUS FRUITS, OTHER THAN THOSE OF MUSTARD", - "hsn_code": "1208" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING", - "hsn_code": "1209" - }, - { - "description": "HOP CONES, FRESH OR DRIED, WHETHER OR NOT GROUND, POWDERED OR IN THE FORM OF PELLETS; LUPULIN", - "hsn_code": "1210" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN PERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR DRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED", - "hsn_code": "1211" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS PIMENTA", - "hsn_code": "1211" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED, FROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER VEGETABLE PRODUCTS (INCLUDING roasted CHICORY ROOTS OF THE VARIETY Ci-chorium intybus sativum) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "1212" - }, - { - "description": "Cereal straw and husks, unprepared, whether or not chopped, ground, pressed or in the form of pellets", - "hsn_code": "1213" - }, - { - "description": "SWEDES, MANGOLDS, FODDER ROOTS, HAY, LUCERNE (alfalfa), CLOVER, SAINFOIN, FORAGE KALE, LUPINES, VETCHES AND SIMILAR FORAGE PRODUCTS, WHETHER OR NOT IN THE FORM OF PELLETS", - "hsn_code": "1214" - }, - { - "description": "LAC;NATURAL GUMS, RESINS,GUM-RESINS AND OLEORESINS (FOR EXAMPLE,BALSAMS)", - "hsn_code": "1301" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, TEA OR MATE AND PREPARATIONS WITH A BASIS OF THESE PRODUCTS OR WITH A BASIS OF COFFEE, TEA OR MATE; ROASTED CHICORY & OTHER ROASTED COFFEE SUBSTITUTES, AND EXTRACTS, ESSENCES AND CONCENTRATES THEREOF", - "hsn_code": "1302" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY FOR PLAITING (FOR EXAMPLE, BAMBOOS, RATTANS, REEDS, RUSHES, OSIER, RAFFIA, CLEANED, BLEACHED OR DYED CEREAL STRAW, AND LIME BARK)", - "hsn_code": "1401" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "1404" - }, - { - "description": "PIG FAT (INCLUDING LARD) AND POULTRY FAT,OTHER THAN THAT OF HEADING 0209 OR 1503", - "hsn_code": "1501" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503", - "hsn_code": "1502" - }, - { - "description": "Lard Stearin, Lard Oil, Oleostearin, Oleo-Oil and Tallow Oil, not emulsified or mixed or otherwise prepared", - "hsn_code": "1503" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1504" - }, - { - "description": "WOOL GREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN)", - "hsn_code": "1505" - }, - { - "description": "OTHER ANIMAL FATS AND OILS AND THEIR FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1506" - }, - { - "description": "SOYA-BEAN OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1507" - }, - { - "description": "GROUNDNUT OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1508" - }, - { - "description": "OLIVE OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1509" - }, - { - "description": "OTHER OILS AND THEIR FRACTIONS OBTAINED SOLELY FROM OLIVES, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED, INCLUDING BLENDS OF THESE OILS OR FRACTIONS WITH OILS OR FRACTIONS OF HEADING 1509", - "hsn_code": "1510" - }, - { - "description": "PALM OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1511" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND THEIR FRACTIONS THEREOF, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1512" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1513" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND ITS FRACTIONS THEREOF, WHETHER OR NOT REFINED , BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1514" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1515" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED", - "hsn_code": "1518" - }, - { - "description": "Glycerol, crude; glycerol waters and glycerol lyes", - "hsn_code": "1520" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES),BEESWAX, OTHER INSECT WAXES AND SPERMACETI, WHETHER OR NOT REFINED OR COLOURED", - "hsn_code": "1521" - }, - { - "description": "DEGRAS: RESIDUES RESULTING FROM THE TREATMENT OF FATTY SUBSTANCES OR ANIMAL OR VEGETABLE WAXES", - "hsn_code": "1522" - }, - { - "description": "Sausages and similar products, of meat, meat offal or blood; food preparations based on these products", - "hsn_code": "1601" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD", - "hsn_code": "1602" - }, - { - "description": "EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC INVERTEBRATES", - "hsn_code": "1603" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS", - "hsn_code": "1604" - }, - { - "description": "Foodstuffs", - "hsn_code": "16-24" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED", - "hsn_code": "1605" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM", - "hsn_code": "1701" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE, IN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING MATTER, ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL", - "hsn_code": "1702" - }, - { - "description": "MOLASSES RESULTING FROM THE EXTRACTION OR REFINING OF SUGAR", - "hsn_code": "1703" - }, - { - "description": "SUGAR CONFECTIONERY (INCLUDING WHITE CHOCOLATE), NOT CONTAINING COCOA", - "hsn_code": "1704" - }, - { - "description": "Cocoa beans, whole or broken, raw or roasted", - "hsn_code": "1801" - }, - { - "description": "Cocoa shells, husks, skins and other cocoa waste", - "hsn_code": "1802" - }, - { - "description": "COCOA PASTE, WHETHER OR NOT DEFATTED", - "hsn_code": "1803" - }, - { - "description": "Cocoa butter, fat and oil", - "hsn_code": "1804" - }, - { - "description": "Cocoa powder, not containing added sugar or other sweetening matter", - "hsn_code": "1805" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA", - "hsn_code": "1806" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT, NOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD PREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR CONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED BASIS NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "1901" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR OTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI, RAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED", - "hsn_code": "1902" - }, - { - "description": "Tapioca and substitutes therefore prepared from starch, in the form of flakes, grains, pearls, shifting or in similar forms", - "hsn_code": "1903" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL PRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS (OTHER THAN MAIZE (CORN) ) IN GRAIN FORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND MEAL), PRE-COOKED, OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "1904" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING COCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL USE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS", - "hsn_code": "1905" - }, - { - "description": "VEGETABLES, FRUIT, NUTS AND OTHER EDIBLE PARTS OF PLANTS, PREPARED OR PRESERVED BY VINEGAR OR ACETIC ACID", - "hsn_code": "2001" - }, - { - "description": "TOMATOES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID", - "hsn_code": "2002" - }, - { - "description": "MUSHROOMS AND TRUFFLES, PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID", - "hsn_code": "2003" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID, FROZEN, OTHER THAN PRODUCTS OF HEADING 2006", - "hsn_code": "2004" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID, NOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006", - "hsn_code": "2005" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADE, FRUIT OR NUT PUREE AND FRUIT OR NUT PASTES, OBTAINED BY COOKING, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "2007" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OF PLANTS, OTHERWISE PREPARED OR PRESERVED, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR SPIRIT, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "2008" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) AND VEGETABLE JUICES, UNFERMENTED AND NOT CONTAINING ADDED SPIRIT, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "2009" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, TEA OR MATE AND PREPARATIONS WITH A BASIS OF THESE PRODUCTS OR WITH A BASIS OF COFFEE, TEA OR MATE; ROASTED CHICORY & OTHER ROASTED COFFEE SUBSTITUTES, AND EXTRACTS, ESSENCES AND CONCENTRATES THEREOF", - "hsn_code": "2101" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLE CELL MICRO-ORGANISMS, DEAD (BUT NOT INCLUDING VACCINES OF HEADING 3002); PREPARED BAKING POWDERS", - "hsn_code": "2102" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR; MIXED CONDIMENTS AND MIXED SEASONINGS; MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD", - "hsn_code": "2103" - }, - { - "description": "SOUPS AND BROTHS AND PREPARATIONS THEREFOR; HOMOGENIZED COMPOSITE FOOD PREPARATIONS", - "hsn_code": "2104" - }, - { - "description": "FOOD PREPARATIONS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "2106" - }, - { - "description": "Waters, including natural or artificial mineral waters and aerated waters, not containing added sugar or other sweetening matter nor flavoured; ice and snow", - "hsn_code": "2201" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS AND AERATED WATERS, CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR FLAVOURED, AND OTHER NON-ALCOHOLIC BEVERAGES, NOT INCLUDING FRUIT OR VEGETABLE JUICES OF HEADING 2009", - "hsn_code": "2202" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS AND AERATED WATERS, CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR FLAVOURED, AND OTHER NON-ALCOHOLIC BEVERAGES, NOT INCLUDING FRUIT OR VEGETABLE JUICES OF HEADING 2009", - "hsn_code": "2203" - }, - { - "description": "WINE OF FRESH GRAPES, INCLUDING FORTIFIED WINES; GRAPE MUST OTHER THAN THAT OF HEADING 2009", - "hsn_code": "2204" - }, - { - "description": "VERMOUTH AND OTHER WINE OF FRESH GRAPES FLAVOURED WITH PLANTS OR AROMATIC SUBSTANCES", - "hsn_code": "2205" - }, - { - "description": "UNDENATURED ETHYL ALCOHOL OF AN ALCOHOLIC STRENGTH BY VOLUME OF 80% VOL. OR HIGHER; ETHYL ALCOHOL AND OTHER SPIRITS, DENATURED, OF ANY STRENGTH", - "hsn_code": "2207" - }, - { - "description": "UNDENATURED ETHYL ALCOHOL OF AN ALCOHOLIC STRENGTH BY VOLUME OF LESS THAN 80% VOL.; SPIRIT, LIQUEURS AND OTHER SPIRITNOUS BEVERAGES", - "hsn_code": "2208" - }, - { - "description": "VINEGAR AND SUBSTITUTES FOR VINEGAR OBTAINED FROM ACETIC ACID", - "hsn_code": "2209" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEAT OR MEAT OFFAL, OF FISH OR OF CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES", - "hsn_code": "2301" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHER OR NOT IN THE FORM OF PELLETS, DERIVED FROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS", - "hsn_code": "2302" - }, - { - "description": "RESIDUES OF STARCH MANUFACTURE AND SIMILAR RESIDUES, BEET-PULP, BAGASSE AND OTHER WASTE OF SUGAR MANUFACTURE, BREWING OR DISTILLING DREGS AND WASTE, WHETHER OR NOT IN THE FORM OF PELLETS", - "hsn_code": "2303" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION OF SOYABEAN OIL", - "hsn_code": "2304" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION OF GROUND-NUT OIL", - "hsn_code": "2305" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION OF VEGETABLE FATS OR OILS, OTHER THAN THOSE OF HEADING 2304 OR 2305", - "hsn_code": "2306" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION OF VEGETABLE FATS OR OILS, OTHER THAN THOSE OF HEADING 2304 OR 2305", - "hsn_code": "2307" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION OF VEGETABLE FATS OR OILS, OTHER THAN THOSE OF HEADING 2304 OR 2305", - "hsn_code": "2308" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING", - "hsn_code": "2309" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE", - "hsn_code": "2401" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES", - "hsn_code": "2402" - }, - { - "description": "OTHER MANUFACTURE TOBACCO AND MANUFACTURED TOBACCO SUBSTITUTES; HOMOGENIZED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND ESSENCES", - "hsn_code": "2403" - }, - { - "description": "Mineral Products", - "hsn_code": "25-27" - }, - { - "description": "SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM CHLORIDE, WHETHER OR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR FREE FLOWING AGENTS; SEA WATER", - "hsn_code": "2501" - }, - { - "description": "Unroasted iron pyrites", - "hsn_code": "2502" - }, - { - "description": "SULPHUR OF ALL KINDS, OTHER THAN SUBLIMED SULPHUR, PRECIPATED SULPHUR AND COLLODIAL SULPHUR", - "hsn_code": "2503" - }, - { - "description": "NATURAL GRAPHITE", - "hsn_code": "2504" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING SANDS OF CHAPTER 26", - "hsn_code": "2505" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE", - "hsn_code": "2506" - }, - { - "description": "KAOLIN AND OTHER KAOLINIC CLAYS, WHETHER OR NOT CALCINED", - "hsn_code": "2507" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE AND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS", - "hsn_code": "2508" - }, - { - "description": "Chalk", - "hsn_code": "2509" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND PHOSPHATIC CHALK", - "hsn_code": "2510" - }, - { - "description": "NATURAL BARIUM SULPHATE (BARYTES); NATURAL BARIUM CARBONATE (WITHERITE), WHETHER OR NOT CALCINED, OTHER THAN BARIUM OXIDE OF HEADING 2816", - "hsn_code": "2511" - }, - { - "description": "SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND SIMILAR SILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY OF 1 OR LESS", - "hsn_code": "2512" - }, - { - "description": "PUMICE STONES; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL ABRASIVES, WHETHER OR NOT HEAT-TREATED", - "hsn_code": "2513" - }, - { - "description": "PUMICE STONES; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL ABRASIVES, WHETHER OR NOT HEAT-TREATED", - "hsn_code": "2514" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING STONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE", - "hsn_code": "2515" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE", - "hsn_code": "2516" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE AGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND FLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL WASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE HEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING 2515 OR 2516, WHETHER OR NOT HEAT-TREATED", - "hsn_code": "2517" - }, - { - "description": "DOLOMITE, WHETHER OR NOT CALCINED OR SINTERED, INCLUDING DOLOMITE ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)SHAPE; DOLOMITE RAMMING MIX", - "hsn_code": "2518" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED (SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES ADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE", - "hsn_code": "2519" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE) WHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATES OR RETARDERS", - "hsn_code": "2520" - }, - { - "description": "LIMESTONE FLUX; LIMESTONE AND OTHER CALCAREOUS STONES, OF A KIND USED FOR THE MANUFACTURE OF LIME OR CEMENT", - "hsn_code": "2521" - }, - { - "description": "QUICKLIME, SLAKED LIME AND HYDRAULIC LIME, OTHER THAN CALCIUM OXIDE AND HYDROXIDE OF HEADING 2825", - "hsn_code": "2522" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND SIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS", - "hsn_code": "2523" - }, - { - "description": "ASBESTOS", - "hsn_code": "2524" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE", - "hsn_code": "2525" - }, - { - "description": "NATURAL STEATITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE; TALC", - "hsn_code": "2526" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT INCLUDING BORATES SEPARATED FROM NATURAL BRINE; NATURAL BORIC ACID CONTAINING NOT MORE THAN 85% OF H3BO3 CALCULATED ON THE DRY WEIGHT", - "hsn_code": "2528" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; NFLUORSPAR", - "hsn_code": "2529" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "2530" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES", - "hsn_code": "2601" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY WEIGHT", - "hsn_code": "2602" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY WEIGHT", - "hsn_code": "2603" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY WEIGHT", - "hsn_code": "2604" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY WEIGHT", - "hsn_code": "2605" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES", - "hsn_code": "2606" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES", - "hsn_code": "2607" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES", - "hsn_code": "2608" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES", - "hsn_code": "2609" - }, - { - "description": "CHROMIUN ORES AND CONCENTRATES", - "hsn_code": "2610" - }, - { - "description": "CHROMIUN ORES AND CONCENTRATES", - "hsn_code": "2611" - }, - { - "description": "URANIUM OR THORIUM ORES AND CONCENTRATES", - "hsn_code": "2612" - }, - { - "description": "MOLYBDENUM ORES AND CONCENTRATES", - "hsn_code": "2613" - }, - { - "description": "TITANIUM ORES AND CONCENTRATES", - "hsn_code": "2614" - }, - { - "description": "NIOBIUM, TANTALUM, VANADIUM OR ZIRCONIUM ORES AND CONCENTRATES", - "hsn_code": "2615" - }, - { - "description": "PRECIOUS METAL ORES AND CONCENTRATES", - "hsn_code": "2616" - }, - { - "description": "OTHER ORES AND CONCENTRATES", - "hsn_code": "2617" - }, - { - "description": "OTHER ORES AND CONCENTRATES", - "hsn_code": "2618" - }, - { - "description": "SLAG, DROSS (OTHER THAN GRANULATED SLAG), SCALINGS AND OTHER WASTE FROM THE MANUFACTURE OF IRON OR STEEL", - "hsn_code": "2619" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL), CONTAINING ARSENIC, METALS OR THEIR COMPOUNDS", - "hsn_code": "2620" - }, - { - "description": "OTHER SLAG AND ASH, INLCUDING SEAWEED ASH (KELP); ASH AND RESIDUES FROM THE ICINERATION OF MUNICIPAL WASTE", - "hsn_code": "2621" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL", - "hsn_code": "2701" - }, - { - "description": "LIGNITE, WHETHER OR NOT AGGLOMERATED, EXCLUDING JET", - "hsn_code": "2702" - }, - { - "description": "PEAT (INCLUDING PEAT LITTER), WHETHER OR NOT AGGLOMERATED", - "hsn_code": "2703" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED; RETORT CARBON", - "hsn_code": "2704" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED; RETORT CARBON", - "hsn_code": "2705" - }, - { - "description": "TAR DISTILLED FROM COAL, FROM LIGNITE OR FROM PEAT AND OTHER MINERAL TARS, WHETHER OR NOT DEHYDRATED OR PARTIALLY DISTILLED, INCLUDING RECONSTITUTED TARS", - "hsn_code": "2706" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR, SIMILAR PRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE NON-AROMATIC CONSTITUENTS", - "hsn_code": "2707" - }, - { - "description": "PITCH AND PITCH COKE, OBTAINED FROM COAL TAR OR FROM OTHER MINERAL TARS", - "hsn_code": "2708" - }, - { - "description": "PITCH AND PITCH COKE, OBTAINED FROM COAL TAR OR FROM OTHER MINERAL TARS", - "hsn_code": "2709" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC CONSTITUENTS OF THE PREPARATIONS OTHER THAN THOSE CONTAINING BIODIESEL AND OTHER THAN WASTE OILS", - "hsn_code": "2710" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS", - "hsn_code": "2711" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCYSTALLINE PETROLEUM WAX, SLACK WAX, OZOKERITE, LIGNITE WAX, PETA WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS OBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED", - "hsn_code": "2712" - }, - { - "description": "PETROLEUM COKE, PETROLEUM BITUMEN AND OTHER RESIDUES OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "2713" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES AND ASPHALTIC ROCKS", - "hsn_code": "2714" - }, - { - "description": "BITUMINOUS MIXTURES BASED ON NATURAL ASPHALT, ON NATURAL BITUMEN, ON PETROLEUM BITUMEN, ON MINERAL TAR OR ON MINERAL TAR PITCH (FOR EXAMPLE, BITUMINOUS MASTICS, CUT BACKS)", - "hsn_code": "2715" - }, - { - "description": "Electrical Energy", - "hsn_code": "2716" - }, - { - "description": "Chemicals & Allied Industries", - "hsn_code": "28-38" - }, - { - "description": "FLUORINE, CHLORINE, BROMINE AND IODINE", - "hsn_code": "2801" - }, - { - "description": "SULPHUR, SUBLIMED OR PRECIPITATED; COLLOIDAL SULPHUR", - "hsn_code": "2802" - }, - { - "description": "CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE SPECIFIED OR INCLUDED)", - "hsn_code": "2803" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS", - "hsn_code": "2804" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM, WHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY", - "hsn_code": "2805" - }, - { - "description": "HYDROGEN CHLORIDE (HYDROCHLORIC ACID); CHLOROSULPHURIC ACID", - "hsn_code": "2806" - }, - { - "description": "SULPHURIC ACID; OLEUM", - "hsn_code": "2807" - }, - { - "description": "NITRIC ACID; SULPHONITRIC ACIDS", - "hsn_code": "2808" - }, - { - "description": "DIPHOSPHORUS PENTAOXIDE; PHOSPHORIC ACID; POLYPHOSPHORIC ACIDS WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "2809" - }, - { - "description": "OXIDES OF BORON; BORIC ACIDS", - "hsn_code": "2810" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER IN-ORGANIC OXYGEN COMPOUNDS OF NON-METALS", - "hsn_code": "2811" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS", - "hsn_code": "2812" - }, - { - "description": "SULPHIDES OF NON-METALS; COMMERCIAL PHOSPHORUS TRISULPHIDE", - "hsn_code": "2813" - }, - { - "description": "AMMONIA, ANHYDROUS OR IN AQUEOUS SOLUTION", - "hsn_code": "2814" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES OF SODIUM OR POTASSIUM", - "hsn_code": "2815" - }, - { - "description": "HYDROXIDE AND PEROXIDE OF MAGNESIUM; OXIDES, HYDROXIDES AND PEROXIDES, OF STRONTIUM OR BARIUM", - "hsn_code": "2816" - }, - { - "description": "ZINC OXIDE; ZINC PEROXIDE", - "hsn_code": "2817" - }, - { - "description": "ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED; ALUMINIUM OXIDE; ALUMINIUM HYDROXIDE", - "hsn_code": "2818" - }, - { - "description": "CHROMIUM OXIDES AND HYDROXIDES", - "hsn_code": "2819" - }, - { - "description": "MANGANESE OXIDES", - "hsn_code": "2820" - }, - { - "description": "IRON OXIDES AND HYDROXIDES; EARTH COLOURS CONTAINING 70% OR MORE BY WEIGHT OF COMBINED IRON EVALUATED AS FE2O3", - "hsn_code": "2821" - }, - { - "description": "COBALT OXIDES AND HYDROXIDES; COMMERCIAL COBALT OXIDES", - "hsn_code": "2822" - }, - { - "description": "TITANIUM OXIDES", - "hsn_code": "2823" - }, - { - "description": "LEAD OXIDES; RED LEAD AND ORANGE LEAD", - "hsn_code": "2824" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES; OTHER METAL OXIDES, HYDROXIDES AND PEROXIDES", - "hsn_code": "2825" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS", - "hsn_code": "2826" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES; IODIDES AND IODIDE OXIDES", - "hsn_code": "2827" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES", - "hsn_code": "2828" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES", - "hsn_code": "2829" - }, - { - "description": "SULPHIDES; POLYSULPHIDES WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "2830" - }, - { - "description": "DITHIONITES AND SULPHOXYLATES", - "hsn_code": "2831" - }, - { - "description": "SULPHITES; THIOSULPHATES", - "hsn_code": "2832" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES)", - "hsn_code": "2833" - }, - { - "description": "NITRITES; NITRATES", - "hsn_code": "2834" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES; POLYPHOSPHATES WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "2835" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM CARBONATE CONTAINING AMMONIUM CARBAMATE", - "hsn_code": "2836" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES", - "hsn_code": "2837" - }, - { - "description": "Silicates; commercial alkali metal silicates", - "hsn_code": "2839" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES)", - "hsn_code": "2840" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS", - "hsn_code": "2841" - }, - { - "description": "OTHER SALTS OF INORGANIC ACIDS OR PEROXOACIDS,(INCLUDING ALUMINOSILICATES, WHETHER OR NOT CHEMICALLY DEFINED), OTHER THAN AZIDES", - "hsn_code": "2842" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS, WHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS", - "hsn_code": "2843" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR FERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND RESIDUES CONTAINING THESE PRODUCTS", - "hsn_code": "2844" - }, - { - "description": "ISOTOPES OTHER THAN THOSE OF HEADING 2844; COMPOUNDS, INORGANIC OR ORGANIC, OF SUCH ISOTOPES, WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "2845" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF SCANDIUM OR OF MIXTURES OF THESE METALS", - "hsn_code": "2846" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF SCANDIUM OR OF MIXTURES OF THESE METALS", - "hsn_code": "2847" - }, - { - "description": "PHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS", - "hsn_code": "2848" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES", - "hsn_code": "2849" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849", - "hsn_code": "2850" - }, - { - "description": "Inorganic or organic compounds of mercury, whether or not chemically defined, excluding amalgams", - "hsn_code": "2852" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED); COMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS", - "hsn_code": "2853" - }, - { - "description": "ACYCLIC HYDROCARBONS", - "hsn_code": "2901" - }, - { - "description": "CYCLIC HYDROCARBONS", - "hsn_code": "2902" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS", - "hsn_code": "2903" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR NOT HALOGENATED", - "hsn_code": "2904" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2905" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2906" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS", - "hsn_code": "2907" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR PHENOL-ALCOHOLS", - "hsn_code": "2908" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHER-ALCOHOL-PHENOLS, ALCOHOL PEROXIDES, ETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2909" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED RING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2910" - }, - { - "description": "ACETALS AND HEMIACETALS, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2911" - }, - { - "description": "Adelaide\u2019s, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OFALDEHYDES; PARAFORMALDEHYDE", - "hsn_code": "2912" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PRODUCTS OF HEADING 2912", - "hsn_code": "2913" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2914" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2915" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2916" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2917" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2918" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2919" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN HALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "2920" - }, - { - "description": "AMINE FUNCTION COMPOUNDS", - "hsn_code": "2921" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS", - "hsn_code": "2922" - }, - { - "description": "QUATERNARY AMMONIUM SALTS AND HYDROXIDE; LECITHINS AND OTHER PHOSPHOAMINOLIPIDS, WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "2923" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID", - "hsn_code": "2924" - }, - { - "description": "Carboxyimide-function compounds (including saccharin and its salts) and imine-function compounds", - "hsn_code": "2925" - }, - { - "description": "NITRILE-FUNCTION COMPOUNDS", - "hsn_code": "2936" - }, - { - "description": "DIAZO-, AZO- OR AZOXY- COMPOUNDS", - "hsn_code": "2927" - }, - { - "description": "ORGANIC DERIVATIVES OF HYDRAZINE OR OF HYDROXYLAMINE", - "hsn_code": "2928" - }, - { - "description": "COMPOUNDS WITH OTHER NITROGEN FUNCTION", - "hsn_code": "2929" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS", - "hsn_code": "2930" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS", - "hsn_code": "2931" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY", - "hsn_code": "2932" - }, - { - "description": "Heterocyclic compounds with nitrogen hetero-atom(s) only", - "hsn_code": "2933" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS;WHETHER OR NOT CHEMICALLY DEFINED; OTHER HETEROCYCLIC COMPOUNDS", - "hsn_code": "2934" - }, - { - "description": "SULPHONAMIDES", - "hsn_code": "2935" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCTED BY SYNTHESIS (INCLUDING NATURAL CONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES OF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT", - "hsn_code": "2936" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR REPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING CHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES", - "hsn_code": "2937" - }, - { - "description": "GLYCOSIDES, NATURAL OR REPRODUCED BY SYNTHESIS AND THEIR SALTS, ETHERS, ESTERS AND OTHER DERIVATIVES", - "hsn_code": "2938" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS, ESTERS AND OTHER DERIVATIVES", - "hsn_code": "2939" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS, ESTERS AND OTHER DERIVATIVES", - "hsn_code": "2940" - }, - { - "description": "ANTIBIOTICS", - "hsn_code": "2941" - }, - { - "description": "OTHER ORGANIC COMPOUNDS", - "hsn_code": "2942" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT POWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO-THERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES PREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOTELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3001" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC USES; ANTISERA AND OTHER BLOOD FRACTIONS AND IMMUNOLOGICAL PRODUCTS, WHETHER OR NOT MODIFIED OR OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES, TOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS", - "hsn_code": "3002" - }, - { - "description": "MEDICAMENTS(EXCLUDING GOODS OF HEADING 3002,3005 OR 3006) CONSISTING OF TWO OR MORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL SALE", - "hsn_code": "3003" - }, - { - "description": "MEDICAMENTS(EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED OR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED DOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN FORMS OR PACKINGS FOR RETAIL SALE", - "hsn_code": "3004" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE PLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR PUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY PURPOSES", - "hsn_code": "3005" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER", - "hsn_code": "3006" - }, - { - "description": "ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED TOGETHER OR CHEMICALLY TREATED; FERTILISERS PRODUCED BY THE MIXING OR CHEMICAL TREATMENT OF ANIMAL OR VEGETABLE PRODUCTS", - "hsn_code": "3101" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS", - "hsn_code": "3102" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, PHOSPHATIC", - "hsn_code": "3103" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, POTASSIC", - "hsn_code": "3104" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS CONTAINING TWO OR THREE OF THE FERTILISING ELEMENTS NITROGEN, PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS; GOODS OF THIS CHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT EXCEEDING 10 KG", - "hsn_code": "3105" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND OTHER DERIVATIVES", - "hsn_code": "3201" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING PREPARATIONS,WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC PREPARATIONS FOR PRE-TANNING", - "hsn_code": "3202" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN", - "hsn_code": "3203" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC COLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT BRIGHTENING Agens OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED. SYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED IN NOTE 3 TO THIS CHAPTER:", - "hsn_code": "3204" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC COLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT BRIGHTENING Agens OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED. SYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED IN NOTE 3 TO THIS CHAPTER:", - "hsn_code": "3205" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER THAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "3206" - }, - { - "description": "PREPARED PIGMENTS, PREPARATED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS AND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED IN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE FORM OF POWDER, GRANULES OR FLAKES", - "hsn_code": "3207" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC POLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A NON-AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER", - "hsn_code": "3208" - }, - { - "description": "Paints and varnishes (including enamels and lacquers) based on synthetic or chemically modified natural polymers, dispersed or dissolved in an aqueous medium", - "hsn_code": "3209" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER", - "hsn_code": "3210" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER", - "hsn_code": "3211" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON-AQUEOUS MEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS (INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN FORMS OR PACKINGS FOR RETAIL SALE", - "hsn_code": "3212" - }, - { - "description": "ARTISTS, STUDENTS, SIGNBOARD PAINTERS COLOURS, MODIFYING TINTS, AMUSEMENT COLOURS AND THE LIKE, IN TABLETS, TUBES, JARS, BOTTLES, PANS OR IN SIMILAR FORMS OR PACKINGS", - "hsn_code": "3213" - }, - { - "description": "GLAZIERS PUTTY, GRAFTING PUTTY, RESIN CEMENTS, CAULKING COMPOUNDS AND OTHER MASTICS; PAINTERS\u2019 FILLINGS; NON-REFRACTORY SURFACING PREPARATIONS FOR FACADES, INDOOR WALLS, FLOORS, CEILINGS OR THE LIKE", - "hsn_code": "3214" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED OR SOLID", - "hsn_code": "3215" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS; EXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES OR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE DETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF ESSENTIAL OILS", - "hsn_code": "3301" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS) WITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN INDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR THE MANUFACTURE OF BEVERAGES", - "hsn_code": "3302" - }, - { - "description": "PERFUMES AND TOILET WATERS", - "hsn_code": "3303" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER THAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR PEDICURE PREPARATIONS", - "hsn_code": "3304" - }, - { - "description": "Preparations for use on the hair", - "hsn_code": "3305" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND POWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL PACKAGES", - "hsn_code": "3306" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH PREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS, NOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT PERFUMED OR HAVING DISINFECTANT PROPERTIES", - "hsn_code": "3307" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE FORM OF BARS, CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP; ORGANIC SURFACE ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE FORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING SOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH SOAP OR DETERGENT", - "hsn_code": "3401" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS, WASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING PREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401", - "hsn_code": "3402" - }, - { - "description": "LUBRICATING PREPARATIONS (INCLUDING CUTTING-OIL PREPARATIONS, BOLT OR NUT RELEASE PREPARATIONS, ANTI-RUST OR ANTI-CORROSION PREPARATIONS AND MOULD RELEASE PREPARATIONS, BASED ON LUBRICANTS) AND PREPARATIONS OF A KIND USED FOR THE OIL OR GREASE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS, BUT EXCLUDING PREPARATIONS CONTAINING, AS BASIC CONSTITUENTS, 70 % OR MORE BY WEIGHT OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "3403" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES", - "hsn_code": "3404" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE,FLOORS, COACHWORK, GLASS OR METAL, SCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE FORM OF PAPER, WADDING, FELT, NONWOVENS, CELLULAR PLASTICS OR CELLULAR RUBBER, IMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF HEADING 3404", - "hsn_code": "3405" - }, - { - "description": "CANDLES, TAPERS AND THE LIKE", - "hsn_code": "3406" - }, - { - "description": "MODELLING PASTES, INCLUDING THOSE PUT UP FOR CHILDREN\u2019S AMUSEMENT; PREPARATIONS KNOWN AS \u201cDENTAL WAX\u201d OR AS \u201cDENTAL IMPRESSION COMPOUNDS\u201d, PUT UP IN SETS, IN PACKINGS FOR RETAIL SALE OR IN PLATES, HORSESHOE SHAPES, STICKS OR SIMILAR FORMS; OTHER PREPARATIONS FOR USE IN DENTISTRY, WITH A BASIS OF PLASTER (OF CALCINED GYPSUM OR CALCIUM SULPHATE)", - "hsn_code": "3407" - }, - { - "description": "CASEIN, CASEINATES AND OTHER CASEIN DERIVATIVES; CASEIN GLUES", - "hsn_code": "3501" - }, - { - "description": "albumin\u2019s (INCLUDING CONCENTRATES OF TWO OR MORE WHEY PROTEINS, CONTAINING BY WEIGHT MORE THAN 80% WHEY PROTEINS, CALCULATED ON THE DRY MATTER), ALBUMINATES AND OTHER ALBUMIN DERIVATIVES", - "hsn_code": "3502" - }, - { - "description": "GELATIN [INCLUDING GELATIN IN RECTANGULAR (INCLUDING SQUARE) SHEETS, WHETHER OR NOT SURFACE-WORKED OR COLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES OF ANIMAL ORIGIN, EXCLUDING CASEIN GLUES OF HEADING 3501", - "hsn_code": "3503" - }, - { - "description": "PEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED", - "hsn_code": "3504" - }, - { - "description": "DEXTRINS AND OTHER MODIFIED STARCHES (FOR EXAMPLE, PREGELATINISED OR ESTERIFIED STARCHES); GLUES BASED ON STARCHES, OR ON DEXTRINS OR OTHER MODIFIED STARCHES", - "hsn_code": "3505" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED; PRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR ADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG", - "hsn_code": "3506" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3507" - }, - { - "description": "PROPELLANT POWDERS", - "hsn_code": "3601" - }, - { - "description": "PREPARED EXPLOSIVES, OTHER THAN PROPELLANT POWDERS", - "hsn_code": "3602" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC DETENATORS", - "hsn_code": "3603" - }, - { - "description": "FIREWORKS, SIGNALLING FLARES, RAIN ROCKETS, FOG SIGNALS AND OTHER PYROTECHNIC ARTICLES", - "hsn_code": "3604" - }, - { - "description": "MATCHES; OTHER THAN PYROTECHNIC ARTICLES OF HEADING 3604", - "hsn_code": "3605" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE MATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER", - "hsn_code": "3606" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED, UNEXPOSED, WHETHER OR NOT IN PACKS", - "hsn_code": "3701" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED", - "hsn_code": "3702" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPER BOARD AND TEXTILES SENSITISED, UNEXPOSED", - "hsn_code": "3703" - }, - { - "description": "PHOTOGRAPHIC PLATES, FILM, PAPER, PAPER BOARD AND TEXTILES, EXPOSED BUT NOT DEVELOPED", - "hsn_code": "3704" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM, EXPOSED AND DEVELOPED,OTHER THAN CINEMATOGRAPHIC FILM", - "hsn_code": "3705" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING SOUND TRACK OR CONSISTING ONLY OF SOUND TRACK", - "hsn_code": "3706" - }, - { - "description": "CHEMICAL PREPARATIONS FOR PHOTOGRAPHIC USES (OTHER THAN VARNISHES, GLUES, ADHESIVES AND SIMILAR PREPARATIONS); UNMIXED PRODUCTS FOR PHOTOGRAPHIC USES, PUT UP IN MEASURED PORTIONS OR PUT UP FOR RETAIL SALE IN A FORM READY FOR USE", - "hsn_code": "3707" - }, - { - "description": "ARTIFICIAL GRAPHITE; COLLOIDAL OR SEMI-COLLOIDAL GRAPHITE;PREPARATIONS BASED ON GRAPHITE OR OTHER CARBON IN THE FORM OF PASTES, BLOCKS, PLATES OR OTHER SEMI-MANUFACTURES", - "hsn_code": "3801" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING SPENT ANIMAL BLACK", - "hsn_code": "3802" - }, - { - "description": "Tall oil, whether or not refined", - "hsn_code": "3803" - }, - { - "description": "RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR NOT CONCENTRATED, DESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN SULPHONATES, BUT EXCLUDING TALL OIL OF HEADING 3803", - "hsn_code": "3804" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE DISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE TURPENTINE AND OTHER CRUDE PARACYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS THE MAIN CONSTITUENT", - "hsn_code": "3805" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN GUMS", - "hsn_code": "3806" - }, - { - "description": "WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE; WOOD NAPHTHA; VEGETABLE PITCH; BREWERS\u2019 PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE PITCH", - "hsn_code": "3807" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR PACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR-TREATED BANDS,WICKS AND CANDLES, AND FLY-PAPERS)", - "hsn_code": "3808" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND OTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND USED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3809" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS FOR SOLDERING, BRAZING OR WELDING;SOLDERING, BRAZING OR WELDING POWDERS AND PASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS CORES OR COATINGS FOR WELDING ELECTRODES OR RODS", - "hsn_code": "3810" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS, ANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS (INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL OILS", - "hsn_code": "3811" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND STABILISERS FOR RUBBER OR PLASTICS", - "hsn_code": "3812" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND STABILISERS FOR RUBBER OR PLASTICS", - "hsn_code": "3813" - }, - { - "description": "ORGANIC COMPOSITE SOLVENTS AND THINNERS, NOT ELSEWHERE SPECIFIED OR INCLUDED; PREPARED PAINT OR VARNISH REMOVERS", - "hsn_code": "3814" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3815" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3816" - }, - { - "description": "MIXED Alkylbenzenes AND MIXED Alkylnaphthalenes, OTHER THAN THOSE OF HEADING 2707 OR 2902", - "hsn_code": "3817" - }, - { - "description": "CHEMICAL ELEMENTS DOPED FOR USE IN ELECTRONICS, IN THE FORM OF DISCS, WAFERS OR SIMILAR FORMS; CHEMICAL COMPOUNDS DOPED FOR USE IN ELECTRONICS", - "hsn_code": "3818" - }, - { - "description": "HYDRAULIC BRAKE FLUIDS AND OTHER PREPARED LIQUIDS FOR HYDRAULIC TRANSMISSION, NOT CONTAINING OR CONTAINING LESS THAN 70% BY WEIGHT OF PETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "3819" - }, - { - "description": "HYDRAULIC BRAKE FLUIDS AND OTHER PREPARED LIQUIDS FOR HYDRAULIC TRANSMISSION, NOT CONTAINING OR CONTAINING LESS THAN 70% BY WEIGHT OF PETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "3820" - }, - { - "description": "HYDRAULIC BRAKE FLUIDS AND OTHER PREPARED LIQUIDS FOR HYDRAULIC TRANSMISSION, NOT CONTAINING OR CONTAINING LESS THAN 70% BY WEIGHT OF PETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "3821" - }, - { - "description": "DIAGNOSTIC OR LABORATORY REAGENTS ON A BACKING, PREPARED DIAGNOSTIC OR LABORATORY REAGENTS WHETHER OR NOT ON A BACKING, OTHER THAN THOSE OF HEADING 3002 OR 3006; CERTIFIED REFERENCE MATERIALS", - "hsn_code": "3822" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY ALCOHOLS", - "hsn_code": "3823" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND PREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF MIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3824" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR INCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS CHAPTER", - "hsn_code": "3825" - }, - { - "description": "Biodiesel and mixtures thereof; not containing or containing less than 70% by weight of petroleum oils or oils obtained from bituminous minerals", - "hsn_code": "3826" - }, - { - "description": "Plastics / Rubbers", - "hsn_code": "39-40" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS", - "hsn_code": "3901" - }, - { - "description": "POLYMERS OF PROPYLENE OR OF OTHER OLEFINS, IN PRIMARY FORMS", - "hsn_code": "3902" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS", - "hsn_code": "3903" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS", - "hsn_code": "3904" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS", - "hsn_code": "3905" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES", - "hsn_code": "3906" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS; POLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY FORMS", - "hsn_code": "3907" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS", - "hsn_code": "3908" - }, - { - "description": "AMINO-RESINS,PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS", - "hsn_code": "3909" - }, - { - "description": "SILICONES IN PRIMARY FORMS", - "hsn_code": "3910" - }, - { - "description": "PETROLEUM RESINS, COUMARONE-INDENE RESINS, POLYTERPENES, POLYSULPHIDES, POLYSULPHONES AND OTHER PRODUCTS SPECIFIED IN NOTE 3 TO THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS", - "hsn_code": "3911" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS", - "hsn_code": "3912" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, Alginic ACID) AND MODIFIED NATURAL POLYMERS (FOR EXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT ELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS", - "hsn_code": "3913" - }, - { - "description": "ION\u2013EXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS", - "hsn_code": "3914" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS", - "hsn_code": "3915" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS-SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS AND PROFILE SHAPES, WHETHER OR NOT SURFACE-WORKED BUT NOT OTHERWISE WORKED, OF PLASTICS", - "hsn_code": "3916" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES), OF PLASTICS", - "hsn_code": "3917" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF-ADHESIVE, IN ROLLS OR IN THE FORM OF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER", - "hsn_code": "3918" - }, - { - "description": "SELF-ADHESIVE PLATES, SHEETS, FILM, FOIL, TAPE, STRIP AND OTHER FLAT SHAPES, OF PLASTICS, WHETHER OR NOT IN ROLLS", - "hsn_code": "3919" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON-CELLULAR AND NOT REINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS", - "hsn_code": "3920" - }, - { - "description": "OTHER PLATES, SHEETS FILM , FOIL AND STRIP, OF PLASTICS", - "hsn_code": "3921" - }, - { - "description": "BATHS, SHOWER-BATHS, SINKS, WASH-BASINS, BIDETS, LAVATORY PANS, SEATS AND COVERS, FLUSHING CISTERNS AND SIMILAR SANITARY WARE, OF PLASTICS", - "hsn_code": "3922" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS OF PLASTICS; STOPPERS, LIDS, CAPS AND OTHER CLOSURES, OF PLASTICS", - "hsn_code": "3923" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES, OF PLASTICS", - "hsn_code": "3924" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "3925" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS3901 TO 3914", - "hsn_code": "3926" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP", - "hsn_code": "4001" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FORM OILS, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS HEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP", - "hsn_code": "4002" - }, - { - "description": "Reclaimed rubber in primary forms or in plates, sheets or strip", - "hsn_code": "4003" - }, - { - "description": "Waste, parings and scrap of rubber (other than hard rubber) and powders and granules obtained therefrom", - "hsn_code": "4004" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP", - "hsn_code": "4005" - }, - { - "description": "OTHER FORMS (FOR EXAMPLE, RODS, TUBES AND PROFILE SHAPES) AND ARTICLES (FOR EXAMPLE, DISCS AND RINGS), OF UNVULCANISED RUBBER", - "hsn_code": "4006" - }, - { - "description": "VULCANISED RUBBER THREAD AND CORD", - "hsn_code": "4007" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER", - "hsn_code": "4008" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR WITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES)", - "hsn_code": "4009" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR WITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES)", - "hsn_code": "4009" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER", - "hsn_code": "4010" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER", - "hsn_code": "4011" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS AND TYRE FLAPS, OF RUBBER", - "hsn_code": "4012" - }, - { - "description": "INNER TUBES, OF RUBBER", - "hsn_code": "4013" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER", - "hsn_code": "4014" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS) FOR ALL PURPOSES, OR VULCANISED RUBBER OTHER THAN HARD RUBBER", - "hsn_code": "4015" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER", - "hsn_code": "4016" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER", - "hsn_code": "4017" - }, - { - "description": "Raw Hides, Skins, Leather, & Furs", - "hsn_code": "41-43" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO)OR EQUINE ANIMALS (FRESH OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT", - "hsn_code": "4101" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR NOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(c) TO THIS CHAPTER", - "hsn_code": "4102" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(b) OR 1(c) TO THIS CHAPTER", - "hsn_code": "4103" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON, WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED", - "hsn_code": "4104" - }, - { - "description": "TANNED OR CRUST SKINS OF SHEEP OR LAMBS, WITHOUT WOOL ON,WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED", - "hsn_code": "4105" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED", - "hsn_code": "4106" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED LEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON, WHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114", - "hsn_code": "4107" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED LEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON, WHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114", - "hsn_code": "4112" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED LEATHER, OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114", - "hsn_code": "4113" - }, - { - "description": "CHAMOIS (INCLUDING COMBINATION CHAMOIS) LEATHER; PATENT LEATHER AND PATENT LAMINATED LEATHER ; METALLISED LEATHER", - "hsn_code": "4114" - }, - { - "description": "COMPOSITION LEATHER WITH A BASIS OF LEATHER OR LEATHER FIBER, IN SLABS, SHEETS OR STRIP, WHETHER OR NOT IN ROLLS; PARINGS AND OTHER WASTE OF LEATHER OR OF COMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES; LEATHER DUST, POWDER AND FLOUR", - "hsn_code": "4115" - }, - { - "description": "COMPOSITION LEATHER WITH A BASIS OF LEATHER OR LEATHER FIBER, IN SLABS, SHEETS OR STRIP, WHETHER OR NOT IN ROLLS; PARINGS AND OTHER WASTE OF LEATHER OR OF COMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES; LEATHER DUST, POWDER AND FLOUR", - "hsn_code": "4201" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVE-CASES, BRIEF-CASES, SCHOOL SATCHELS, SPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN CASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR BEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES, MAP-CASES, CIGARETTE-CASES, TOBACCO-POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE CASES, JEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR OF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED FIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH PAPER", - "hsn_code": "4202" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER", - "hsn_code": "4203" - }, - { - "description": "OTHER ARTICLES OF LEATHER OR OF COMPOSITION LEATHER", - "hsn_code": "4205" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATER\u2019S SKIN, OF BLADDERS OR OF TENDONS", - "hsn_code": "4206" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE FOR FURRIERS\u2019 USE), OTHER THAN RAW HIDES AND SKINS OF HEADINGS 4101, 4102 OR 4103", - "hsn_code": "4301" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS) OTHER THAN THOSE OF HEADING 4303", - "hsn_code": "4302" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN", - "hsn_code": "4303" - }, - { - "description": "ARTIFICIAL FUR AND ARTICLES THEREOF", - "hsn_code": "4304" - }, - { - "description": "Wood & Wood Products", - "hsn_code": "44-49" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN CHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT AGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS.", - "hsn_code": "4401" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY SQUARED", - "hsn_code": "4403" - }, - { - "description": "HOOPWOOD; SPLIT POLES; PILES, PICKETS AND STAKES OF WOOD, POINTED BUT NOT SAWN LENGTHWISE; WOODEN STICKS, ROUGHLY TRIMMED BUT NOT TURNED, BENT OR OTHERWISE WORKED, SUITABLE FOR THE MANUFACTURE OF WALKING STICKS, UMBRELLAS, TOOL HANDLES OR THE LIKE; CHIPWOOD AND THE LIKE", - "hsn_code": "4404" - }, - { - "description": "Wood wool; wood flour", - "hsn_code": "4405" - }, - { - "description": "RAILWAY OR TRAMWAY SLEEPERS (CROSSTIES) OF WOOD", - "hsn_code": "4406" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED, SANDED OR END-JOINTED, OF A THICKNESS EXCEEDING 6 MM", - "hsn_code": "4407" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR PLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS NOT EXCEEDING 6 MM", - "hsn_code": "4408" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED) CONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED, MOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT PLANED, SANDED OR END-JOINTED", - "hsn_code": "4409" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE, WAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED WITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES", - "hsn_code": "4410" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH RESINS OR OTHER ORGANIC SUBSTANCES", - "hsn_code": "4411" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD", - "hsn_code": "4412" - }, - { - "description": "Densified wood, in blocks, plates, strips, or profile shapes", - "hsn_code": "4413" - }, - { - "description": "Wooden frames for paintings, photographs, mirrors or similar objects", - "hsn_code": "4414" - }, - { - "description": "PACKING CASES, BOXES, CRATES, DRUMS AND SIMILAR PACKINGS, OF WOOD ; CABLE-DRUMS OF WOOD ; PALLETS, BOX PALLETS AND OTHER LOAD BOARDS, OF WOOD; PALLET COLLARS OF WOOD", - "hsn_code": "4415" - }, - { - "description": "CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS\u2019 PRODUCTS AND PARTS THEREOF, OF WOOD, INCLUDING STAVES", - "hsn_code": "4416" - }, - { - "description": "Tools, tool bodies, tool handles, broom or brush bodies and handles, of wood ; boot or shoe lasts and trees , of wood", - "hsn_code": "4417" - }, - { - "description": "BUILDERS\u2019 JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS, ASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES", - "hsn_code": "4418" - }, - { - "description": "TABLEWARE AND KITCHENWARE, OF WOOD", - "hsn_code": "4419" - }, - { - "description": "WOOD MAREQUETRY AND INLAID WOOD; CASKETS AND CASES FOR JEWELLERY OR CUTLERY, AND SIMILAR ARTICLES, OF WOOD; STATUETTES AND OTHER ORNAMENTS, OF WOOD; WOODEN ARTICLES OF FURNITURE NOT FALLING IN CHAPTER 94", - "hsn_code": "4420" - }, - { - "description": "OTHER ARTICLES OF WOOD", - "hsn_code": "4421" - }, - { - "description": "NATURAL CORK, RAW OR SIMPLY SDF KSDF JKLSD PREPARED; WASTE CORK; CRUSHED, GRANULATED OR GROUND CORK", - "hsn_code": "4501" - }, - { - "description": "NATURAL CORK, RAW OR SIMPLY SDF KSDF JKLSD PREPARED; WASTE CORK; CRUSHED, GRANULATED OR GROUND CORK", - "hsn_code": "4502" - }, - { - "description": "Natural cork, debacked or roughly squared, or in rectangular (including square) blocks, plates, sheets or strip (including sharp-edged blanks for corks or stoppers)", - "hsn_code": "4502" - }, - { - "description": "ARTICLES OF NATURAL CORK", - "hsn_code": "4503" - }, - { - "description": "AGGLOMERATED CORK (WITH OR WITHOUT A BINDING SUBSTANCE) AND ARTICLES OF AGGLOMERATED CORK", - "hsn_code": "4504" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO STRIPS; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND TOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING FINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS)", - "hsn_code": "4601" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING MATERIALS OR MADE UP FROM GOODS OF HEADING 4601; ARTICLES OF LOOFAH", - "hsn_code": "4602" - }, - { - "description": "Mechanical wood pulp", - "hsn_code": "4701" - }, - { - "description": "Chemical wood pulp, dissolving grades", - "hsn_code": "4702" - }, - { - "description": "CHEMICAL WOOD PULP, SODA OR SULPHATE, OTHER THAN DISSOLVING GRADES", - "hsn_code": "4703" - }, - { - "description": "CHEMICAL WOOD PULP, SULPHITE, OTHER THAN DISSOLVING GRADES", - "hsn_code": "4704" - }, - { - "description": "Wood pulp obtained by a combination of mechanical and chemical pulping processes", - "hsn_code": "4705" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR OF OTHER FIBROUS CELLULOSIC MATERIAL", - "hsn_code": "4706" - }, - { - "description": "RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD", - "hsn_code": "4707" - }, - { - "description": "NEWSPRINT, IN ROLLS OR SHEETS", - "hsn_code": "4801" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER , IN ROLLS OR RECTANGULAR (INCLUDING SQUARE)SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING 4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD", - "hsn_code": "4802" - }, - { - "description": "TOILET OR FACIAL TISSUE STOCK, TOWEL OR NAPKIN STOCK AND SIMILAR PAPER OF A KIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, WHETHER OR NOT CREPED, CRINKLED, EMBOSSED, PERFORATED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR SHEETS", - "hsn_code": "4803" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF HEADING 4802 OR 4803", - "hsn_code": "4804" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR PROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER", - "hsn_code": "4805" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER GLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS", - "hsn_code": "4806" - }, - { - "description": "COMPOSITE PAPER AND PAPERBOARD (MADE BY STICKING FLAT LAYERS OF PAPER OR PAPERBOARD TOGETHER WITH AN ADHESIVE), NOT SURFACE-COATED OR IMPREGNATED, WHETHER OR NOT INTERNALLY REINFORCED, IN ROLLS OR SHEETS", - "hsn_code": "4807" - }, - { - "description": "PAPER AND PAPERBOARD, CORRUGATED (WITH OR WITHOUT GLUED FLAT SURFACE SHEETS), CREPED, CRINKLED, EMBOSSED OR PERFORATED, IN ROLLS OR SHEETS, OTHER THAN PAPER OF THE KIND DESCRIBED IN HEADING 4803", - "hsn_code": "4808" - }, - { - "description": "CARBON PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (INCLUDING COATED OR IMPREGNATED PAPER FOR DUPLICATOR STENCILS OR OFFSET PLATES), WHETHER OR NOT PRINTED, IN ROLLS OR SHEETS", - "hsn_code": "4809" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR OTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING, WHETHER OR NOT SURFACE \u2013 COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE", - "hsn_code": "4810" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADING AND WEBS OF CELLULOSE FIBRES, COATED, IMPREGNATED, COVERED, SURFACE \u2013 COLOURED , SURFACE-DECORATED OR PRINTED, IN ROLLS OR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE KIND DESCRIBED IN HEADING 4803, 4809 OR 4810", - "hsn_code": "4811" - }, - { - "description": "Filter blocks, slabs and plates, of paper pulp", - "hsn_code": "4812" - }, - { - "description": "CIGARETTE PAPER, WHETHER OR NOT CUT TO SIZE OR IN THE FORM OF BOOKLETS OR TUBES", - "hsn_code": "4813" - }, - { - "description": "WALLPAPER AND SIMILAR WALL COVERINGS; WINDOW TRANSPARENCIES OF PAPER", - "hsn_code": "4814" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN THOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR NOT PUT UP IN BOXES", - "hsn_code": "4816" - }, - { - "description": "ENVELOPES, LETTER CARDS, PLAIN POSTCARDS AND CORRESPONDENCE CARDS, OF PAPER OR PAPERBOARD; BOXES, POUCHES, WALLETS AND WRITING COMPENDIUMS, OF PAPER OR PAPERBOARD, CONTAINING AN ASSORTMENT OF PAPER STATIONERY", - "hsn_code": "4817" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A KIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36 CM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS, SERVIETTES, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY OR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP, PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES", - "hsn_code": "4818" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR ARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE", - "hsn_code": "4819" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS, MEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS, BINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS, INTER LEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD; ALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD", - "hsn_code": "4820" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED", - "hsn_code": "4821" - }, - { - "description": "BOBBINS, SPOOLS, COPS AND SIMILAR SUPPORTS OF PAPER PULP, PAPER OR PAPERBOARD (WHETHER OR NOT PERFORATED OR HARDENED)", - "hsn_code": "4822" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO SIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES", - "hsn_code": "4823" - }, - { - "description": "PRINTED BOOKS, BROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER, WHETHER OR NOT IN SINGLE SHEETS", - "hsn_code": "4901" - }, - { - "description": "NEWSPAPERS, JOURNALS AND PERIODICALS, WHETHER OR NOT ILLUSTRATED OR CONTAINING ADVERTISING MATERIAL", - "hsn_code": "4902" - }, - { - "description": "CHILDREN\u2019S PICTURE, DRAWING OR COLOURING BOOKS", - "hsn_code": "4903" - }, - { - "description": "Music, printed or in manuscript, whether or not bound or illustrated", - "hsn_code": "4904" - }, - { - "description": "MAPS AND HYDROGRAPHIC OR SIMILAR CHARTS OF ALL KINDS, INCLUDING ATLASES, WALL MAPS, TOPOGRAPHICAL PLANS AND GLOBES, PRINTED", - "hsn_code": "4905" - }, - { - "description": "Plans and drawings for architectural, engineering, industrial, commercial, topographical or similar purposes, being originals drawn by hand; hand-written texts; photographic reproductions on sensitised paper and carbon copies of the foregoing", - "hsn_code": "4906" - }, - { - "description": "UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY IN WHICH THEY HAVE, OR WILL HAVE, A RECOGNIZED FACE VALUE; STAMP-IMPRESSED PAPER; BANK NOTES; CHEQUE FORMS; STOCK, SHARE OR BOND CERTIFICATES AND SIMILAR DOCUMENTS OF TITLE", - "hsn_code": "4907" - }, - { - "description": "TRANSFERS (DECALCOMANIAS)", - "hsn_code": "4908" - }, - { - "description": "PRINTED OR ILLUSTRATED POSTCARDS; PRINTED CARDS BEARING PERSONAL GREETINGS, MESSAGES OR ANNOUNCEMENTS, WHETHER OR NOT ILLUSTRATED, WITH OR WITHOUT ENVELOPES OR TRIMMINGS", - "hsn_code": "4909" - }, - { - "description": "CALENDARS OF ANY KIND, PRINTED, INCLUDING CALENDAR BLOCKS", - "hsn_code": "4910" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS", - "hsn_code": "4911" - }, - { - "description": "Textiles", - "hsn_code": "50-63" - }, - { - "description": "Silk worm cocoons suitable for reeling", - "hsn_code": "5001" - }, - { - "description": "RAW SILK (NOT THROWN)", - "hsn_code": "5002" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS AND UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5003" - }, - { - "description": "SILK YARN (OTHER THAN YARN SPUN FROM SILK WASTE) NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5004" - }, - { - "description": "YARN SPUN FROM SILK WASTE, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5005" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT", - "hsn_code": "5006" - }, - { - "description": "WOVEN FABRICS OF SILK OR OF SILK WASTE", - "hsn_code": "5007" - }, - { - "description": "WOOL, NOT CARDED OR COMBED:", - "hsn_code": "5101" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED", - "hsn_code": "5102" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT EXCLUDING GARNETTED STOCK", - "hsn_code": "5103" - }, - { - "description": "GARNETTED STOCK OF WOOL OR OF FINE OR COARSE ANIMAL HAIR", - "hsn_code": "5104" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL IN FRAGMENTS)", - "hsn_code": "5105" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5106" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5107" - }, - { - "description": "YARN OF FINE ANIMAL HAIR (CARDED OR COMBED), NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5108" - }, - { - "description": "YARN OF WOOL OR FINE ANIMAL HAIR, PUT UP FOR RETAIL SALE", - "hsn_code": "5109" - }, - { - "description": "YARN OF COARSE ANIMAL HAIR OR OF HORSE HAIR (INCLUDING GIMPED HORSEHAIR YARN), WHETHER OR NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5110" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR", - "hsn_code": "5111" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR", - "hsn_code": "5112" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR", - "hsn_code": "5113" - }, - { - "description": "COTTON, NOT CARDED OR COMBED", - "hsn_code": "5201" - }, - { - "description": "COTTON WASTE (INCLUDING YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5202" - }, - { - "description": "Cotton, carded or combed", - "hsn_code": "5203" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5204" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF COTTON, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5205" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5206" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD) PUT UP FOR RETAIL SALE", - "hsn_code": "5207" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING NOT MORE THAN 200 G/M2", - "hsn_code": "5208" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING MORE THAN 200 G/M2", - "hsn_code": "5209" - }, - { - "description": "Woven fabrics of cotton, containing less than 85% by weight of cotton, mixed mainly or solely with man-made fibres, weighing not more than 200 g/m2", - "hsn_code": "5210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED MAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2", - "hsn_code": "5211" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON", - "hsn_code": "5212" - }, - { - "description": "FLAX, RAW OR PROCESSED BUT NOT SPUN; FLAX TOW AND WASTE (INCLUDING YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5301" - }, - { - "description": "TRUE HEMP (CANNABIS SATIVA L ), RAW OR PROCESSED BUT NOT SPUN; TOW AND WASTE OF TRUE HEMP (INCLUDING YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5302" - }, - { - "description": "JUTE AND OTHER TEXTILE BAST FIBRES (EXCLUDING FLAX, TRUE HEMP AND RAMIE), RAW OR PROCESSED BUT NOT SPUN; TOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5303" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE TEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN; TOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)", - "hsn_code": "5305" - }, - { - "description": "FLAX YARN", - "hsn_code": "5306" - }, - { - "description": "YARN OF JUTE OR OF OTHER TEXTILE BAST FIBRES OF HEADING 5303", - "hsn_code": "5307" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN", - "hsn_code": "5308" - }, - { - "description": "WOVEN FABRICS OF FLAX", - "hsn_code": "5309" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303", - "hsn_code": "5310" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN", - "hsn_code": "5311" - }, - { - "description": "SEWING THREAD OF MAN-MADE FILAMENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5401" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE, INCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX", - "hsn_code": "5402" - }, - { - "description": "ARTIFICAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE, INCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX", - "hsn_code": "5403" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL DIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF SYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM", - "hsn_code": "5404" - }, - { - "description": "Artificial monofilament of 67 decitex or more and of which no cross-sectional dimension exceeds 1 mm; strip and the like (for example, artificial straw) of artificial textile materials of an apparent width not exceeding 5 mm", - "hsn_code": "5405" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL DIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF SYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM", - "hsn_code": "5406" - }, - { - "description": "Woven fabrics of synthetic filament yarn, including woven fabrics obtained from materials of heading 5404", - "hsn_code": "5407" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM MATERIALS OF HEADING 5405", - "hsn_code": "5408" - }, - { - "description": "WOOL, NOT CARDED OR COMBED", - "hsn_code": "5501" - }, - { - "description": "ARTIFICIAL FILAMENT TOW", - "hsn_code": "5502" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING", - "hsn_code": "5503" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING", - "hsn_code": "5504" - }, - { - "description": "WASTE (INCLUDING NOILS, YARN WASTE AND GARNETTED STOCK) OF MAN-MADE FIBRES", - "hsn_code": "5505" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING", - "hsn_code": "5506" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING", - "hsn_code": "5507" - }, - { - "description": "SEWING THREAD OF MAN-MADE STAPLE FIBRES, WHETHER OR NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5508" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5509" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL SALE", - "hsn_code": "5510" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF MAN-MADE STAPLE FIBRES, PUT UP FOR RETAIL SALE", - "hsn_code": "5511" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES", - "hsn_code": "5512" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF SUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170G/M2", - "hsn_code": "5513" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF SUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2", - "hsn_code": "5514" - }, - { - "description": "Woven fabrics of synthetic staple fibres, n.e.c. in chapter 55", - "hsn_code": "5515" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES", - "hsn_code": "5516" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5 MM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS", - "hsn_code": "5601" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED", - "hsn_code": "5602" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED", - "hsn_code": "5603" - }, - { - "description": "RUBBER THREAD & CORD, TEXTILE COVERED; TEXTILE YARN, AND STRIP AND THE LIKE OF HEADING 5404 OR 5405, IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS", - "hsn_code": "5604" - }, - { - "description": "METALLISED YARN, WHETHER OR NOT GIMPED BEING TEXTILE YARN, OR STRIP OR THE LIKE OF HEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM OF THREAD, STRIP OR POWDER OR COVERED WITH METAL", - "hsn_code": "5605" - }, - { - "description": "Yarn and strip and the like of heading no. 5404 or 5405, gimped (other than those of heading no. 5606 and gimped horsehair yarn); chenille yarn (including flock chenille yarn); loop wale-yarn", - "hsn_code": "5606" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER OR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS", - "hsn_code": "5607" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE UP NETS, OF TEXTILE MATERIALS", - "hsn_code": "5608" - }, - { - "description": "ARTICLES OF YARN, STRIP OR THE LIKE OF HEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR CABLES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "5609" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, KNOTTED, WHETHER OR NOT MADE UP", - "hsn_code": "5701" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER OR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND-WOVEN RUGS", - "hsn_code": "5702" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP", - "hsn_code": "5703" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, OF FELT, NOT TUFTED OR FLOCKED, WHETHER OR NOT MADE UP", - "hsn_code": "5704" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS , WHETHER OR NOT MADE UP", - "hsn_code": "5705" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806", - "hsn_code": "5801" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF HEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703", - "hsn_code": "5802" - }, - { - "description": "Gauze; other than narrow fabrics of heading no. 5806", - "hsn_code": "5803" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS; LACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADING 6002 TO 6006.", - "hsn_code": "5804" - }, - { - "description": "HAND-WOVEN TAPESTRIES OF THE TYPE GOBELINS, FLANDERS, AUBUSSON, BEAUVAIS AND THE LIKE, AND NEEDLE-WORKED TAPESTRIES (FOR EXAMPLE, PETIT POINT, CROSS STITCH), WHETHER OR NOT MADE UP", - "hsn_code": "5805" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS CONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)", - "hsn_code": "5806" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT TO SHAPE OR SIZE NOT EMBROIDERED", - "hsn_code": "5807" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER THAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES", - "hsn_code": "5808" - }, - { - "description": "WOVEN FABRICS OF METAL THREAD AND WOVEN FABRICS OF METALLISED YARN OF HEADING 5605, OF A KIND USED IN APPAREL, AS FURNISHING FABRICS OR FOR SIMILAR PURPOSES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "5809" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS", - "hsn_code": "5810" - }, - { - "description": "QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF ONE OR MORE LAYERS OF TEXTILE MATERIALS ASSEMBLED WITH PADDING BY STITCHING OR OTHERWISE, OTHER THAN EMBROIDERY OF HEADING 5810", - "hsn_code": "5811" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE OUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS; BUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS", - "hsn_code": "5901" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR VISCOSE RAYON", - "hsn_code": "5902" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER THAN THOSE OF HEADING 5902", - "hsn_code": "5903" - }, - { - "description": "LINOLEUM, WHETHER OR NOT CUT TO SHAPE; FLOOR COVERINGS CONSISTING OF A COATING OR COVERING APPLIED ON A TEXTILE BACKING, WHETHER OR NOT CUT TO SHAPE", - "hsn_code": "5904" - }, - { - "description": "TEXTILE WALL COVERINGS", - "hsn_code": "5905" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902", - "hsn_code": "5906" - }, - { - "description": "Textile fabrics; otherwise impregnated, coated or covered; painted canvas being theatrical scenery, studio back-cloths or the like", - "hsn_code": "5907" - }, - { - "description": "TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS, STOVES, LIGHTERS, CANDLES OR THE LIKE; INCANDESCENT GAS MANTLES AND TUBULAR KNITTED GAS MANTLE FABRIC THEREFOR, WHETHER OR NOT IMPREGNATED", - "hsn_code": "5908" - }, - { - "description": "TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH OR WITHOUT LINING, ARMOUR OR ACCESSORIES OF OTHER MATERIALS", - "hsn_code": "5909" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL", - "hsn_code": "5910" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER", - "hsn_code": "5911" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED", - "hsn_code": "6001" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, CONTAINING BY WEIGHT 5% OR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING 6001", - "hsn_code": "6002" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF HEADING 6001 OR 6002", - "hsn_code": "6003" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH EXCEEDING 30 CM, CONTAINING BY WEIGHT 5% OR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING 6001", - "hsn_code": "6004" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER THAN THOSE OF HEADINGS 6001 TO 6004", - "hsn_code": "6005" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS", - "hsn_code": "6006" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN THOSE OF HEADING 6103", - "hsn_code": "6101" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN THOSE OF HEADING 6104", - "hsn_code": "6102" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 SUITS,ENSEMBLES, JACKETS, BLAZERS, TROUSERS,BIB AND BRACE OVERALLS, BREECHES AND SHORTS(OTHER THAN SWIM WEAR), KNITTED OR CROCHETED", - "hsn_code": "6103" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS, TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED", - "hsn_code": "6104" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 SHIRTS, KNITTED OR CROCHETED", - "hsn_code": "6105" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED", - "hsn_code": "6106" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED", - "hsn_code": "6107" - }, - { - "description": "Slips, petticoats, briefs, panties, nightdresses, pyjamas, negligees, bathrobes, dressing gowns and similar articles; women\u2019s or girls\u2019, knitted or crocheted", - "hsn_code": "6108" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED", - "hsn_code": "6109" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR CROCHETED", - "hsn_code": "6110" - }, - { - "description": "Jerseys, pullovers, cardigans, waistcoats and similar articles; knitted or crocheted", - "hsn_code": "6110" - }, - { - "description": "BABIES\u2019 GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED", - "hsn_code": "6111" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED", - "hsn_code": "6112" - }, - { - "description": "Garments, made up of knitted or crocheted fabrics of heading 5903, 5906 or 5907", - "hsn_code": "6113" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED", - "hsn_code": "6114" - }, - { - "description": "PANTYHOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING GRADUATED COMPRESSION HOSIERY (FOR EXAMPLE, STOCKINGS FOR VARICOSE VEINS) AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED", - "hsn_code": "6115" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED", - "hsn_code": "6116" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED PARTS OF GARMENTS OR OF CLOTHING ACCESSORIES", - "hsn_code": "6117" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS), WIND-CHEATERS, WIND JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203", - "hsn_code": "6201" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF HEADING 6204", - "hsn_code": "6202" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR)", - "hsn_code": "6203" - }, - { - "description": "Suits, ensembles, jackets, dresses, skirts, divided skirts, trousers, bib and brace overalls, breeches and shorts (other than swimwear); women\u2019s or girls\u2019 (not knitted or crocheted)", - "hsn_code": "6204" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 SHIRTS", - "hsn_code": "6205" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 BLOUSES, SHIRTS AND SHIRT-BLOUSES", - "hsn_code": "6206" - }, - { - "description": "MEN\u2019S OR BOYS\u2019 SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES", - "hsn_code": "6207" - }, - { - "description": "WOMEN\u2019S OR GIRLS\u2019 SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES", - "hsn_code": "6208" - }, - { - "description": "BABIES\u2019 GARMENTS AND CLOTHING ACCESSORIES", - "hsn_code": "6209" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907", - "hsn_code": "6210" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS", - "hsn_code": "6211" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND PARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED", - "hsn_code": "6212" - }, - { - "description": "HANDKERCHIEFS", - "hsn_code": "6213" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE", - "hsn_code": "6214" - }, - { - "description": "TIES, BOW TIES AND CRAVATS", - "hsn_code": "6215" - }, - { - "description": "GLOVES, MITTENS AND MITTS", - "hsn_code": "6216" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING ACCESSORIES, OTHER THAN THOSE OF HEADING 6212", - "hsn_code": "6217" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS", - "hsn_code": "6301" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN", - "hsn_code": "6302" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS: CURTAIN OR BED VALANCES", - "hsn_code": "6303" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404", - "hsn_code": "6304" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS", - "hsn_code": "6305" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR LANDCRAFT; CAMPING GOODS", - "hsn_code": "6306" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS", - "hsn_code": "6307" - }, - { - "description": "Sets consisting of woven fabric and yarn, whether or not with accessories, for making up into rugs, tapestries, embroidered table cloths or serviettes, or similar textile articles, put up in packings for retail sale", - "hsn_code": "6308" - }, - { - "description": "Worn clothing and other worn articles", - "hsn_code": "6309" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF TWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS", - "hsn_code": "6310" - }, - { - "description": "Footwear / Headgear", - "hsn_code": "64-67" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE UPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING, NAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES", - "hsn_code": "6401" - }, - { - "description": "HATS AND OTHER HEADGEAR, KNITTED OR CROCHETED, OR MADE UP FROM LACE, FELT OR OTHER TEXTILE FABRIC, IN THE PIECE (BUT NOT IN STRIPS), WHETHER OR NOT LINED OR TRIMMED; HAIR-NETS OF ANY MATERIAL, WHETHER OR NOT LINED OR TRIMMED", - "hsn_code": "6505" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED", - "hsn_code": "6506" - }, - { - "description": "Head-bands, linings, covers, hat foundations, hat frames, peaks and chinstraps, for headgear", - "hsn_code": "6507" - }, - { - "description": "UMBRELLAS AND SUN UMBRELLAS (INCLUDING WALKING-STICK UMBRELLAS, GARDEN UMBRELLAS AND SIMILAR UMBRELLAS)", - "hsn_code": "6601" - }, - { - "description": "Walking-sticks, seat-sticks, whips, riding-crops and the like", - "hsn_code": "6602" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602", - "hsn_code": "6603" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS WITH THEIR FEATHERS OR DOWN, FEATHERS, PARTS OF FEATHERS, DOWN AND ARTICLES THEREOF (OTHER THAN GOODS OF HEADING 0505 AND WORKED QUILLS AND SCAPES)", - "hsn_code": "6701" - }, - { - "description": "ARTIFICIAL FLOWERS, FOLIAGE AND FRUIT AND PARTS THEREOF; ARTICLES MADE OF ARTIFICIAL FLOWERS, FOLIAGE OR FRUIT", - "hsn_code": "6702" - }, - { - "description": "HUMAN HAIR, DRESSED, THINNED, BLEACHED OR OTHERWISE WORKED; WOOL OR OTHER ANIMAL HAIR OR OTHER TEXTILE MATERIALS, PREPARED FOR USE IN MAKING WIGS OR THE LIKE", - "hsn_code": "6703" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR ANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "6704" - }, - { - "description": "Stone / Glass", - "hsn_code": "68-71" - }, - { - "description": "Sets, curbstones and flagstones, of natural stone (except slate)", - "hsn_code": "6801" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER THAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE (INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES, CHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE)", - "hsn_code": "6802" - }, - { - "description": "Worked slate and articles of slate or of agglomerated slate", - "hsn_code": "6803" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING, WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR GRINDING, SHARPENING, POLISHING TRUEING OR CUTTING, HAND SHARPENING OR POLISHING STONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR ARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS", - "hsn_code": "6804" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF PAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN OR OTHERWISE MADE UP", - "hsn_code": "6805" - }, - { - "description": "SLAG WOOL, ROCK WOOL AND SIMILAR MINERAL WOOLS; EXFOLIATED VERMICULATE, EXPANDED CLAYS, FOAMED SLAG AND SIMILAR EXPANDED MINERAL MATERIALS; MIXTURES AND ARTICLES OF HEAT INSULATING, SOUND-INSULATING OR SOUND-ABSORBING MINERAL MATERIALS, OTHER THAN THOSE OF HEADING 6811 OR 6812 OR OF CHAPTER 69", - "hsn_code": "6806" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR COAL TAR PITCH)", - "hsn_code": "6807" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR COAL TAR PITCH)", - "hsn_code": "6808" - }, - { - "description": "ARTICLES OF PLASTER OR OF COMPOSITIONS BASED ON PLASTER", - "hsn_code": "6809" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED", - "hsn_code": "6810" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRE-CEMENT OR THE LIKE", - "hsn_code": "6811" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF ASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR EXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEAD-GEAR, FOOTWEAR, GASKETS), WHETHER OR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813", - "hsn_code": "6812" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS, DISCS, WASHERS, PADS ), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A BASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT COMBINED WITH TEXTILE OR OTHER MATERIALS", - "hsn_code": "6813" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA, WHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS", - "hsn_code": "6814" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES OF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "6815" - }, - { - "description": "BRICKS, BLOCKS, TILES AND OTHER CERAMIC GOODS, OF SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS", - "hsn_code": "6901" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL GOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS", - "hsn_code": "6902" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES, NOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS", - "hsn_code": "6903" - }, - { - "description": "CERAMIC BUILDING BRICKS, FLOORING BLOCKS, SUPPORT OR FILLER TILES AND THE LIKE", - "hsn_code": "6904" - }, - { - "description": "ROOFING TILES, CHIMNEY-POTS, COWLS, CHIMNEY LINERS, ARCHITECTURAL ORNAMENTS AND OTHER CERAMIC CONSTRUCTIONAL GOODS", - "hsn_code": "6905" - }, - { - "description": "Ceramic pipes, conduits, guttering and pipe fittings", - "hsn_code": "6906" - }, - { - "description": "UNGLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; UNGLAZED CERAMIC MOSAIC CUBES AND THE LIKE, WHETHER OR NOT ON A BACKING", - "hsn_code": "6907" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC CUBES AND THE LIKE, WHETHER OR NOT ON A BACKING", - "hsn_code": "6908" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC TROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS, JARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS", - "hsn_code": "6909" - }, - { - "description": "CERAMIC SINKS, WASH BASINS, WASH BASIN PEDESTALS, BATHS, BIDETS, WATER CLOSET PANS, FLUSHING CISTERNS, URINALS AND SIMILAR SANITARY FIXTURES", - "hsn_code": "6910" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF PORCELAIN OR CHINA", - "hsn_code": "6911" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA", - "hsn_code": "6912" - }, - { - "description": "STATUETTES AND OTHER ORNAMENTAL CERAMIC ARTICLES", - "hsn_code": "6913" - }, - { - "description": "OTHER CERAMIC ARTICLES", - "hsn_code": "6914" - }, - { - "description": "CULLET AND OTHER WASTE AND SCRAP OF GLASS; GLASS IN THE MASS", - "hsn_code": "7001" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED", - "hsn_code": "7002" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED", - "hsn_code": "7003" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER BUT NOT OTHERWISE WORKED", - "hsn_code": "7004" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED", - "hsn_code": "7005" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS", - "hsn_code": "7007" - }, - { - "description": "MULTIPLE-WALLED INSULATING UNITS OF GLASS", - "hsn_code": "7008" - }, - { - "description": "GLASS MIRRORS, WHETHER OR NOT FRAMED, INCLUDING REAR-VIEW MIRRORS", - "hsn_code": "7009" - }, - { - "description": "CARBOYS, BOTTLES, FLASKS, JARS, POTS, PHIALS, AMPOULES AND OTHER CONTAINERS, OF GLASS, OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS; PRESERVING JARS OF GLASS; STOPPERS, LIDS AND OTHER CLOSURES, OF GLASS", - "hsn_code": "7010" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF, WITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE", - "hsn_code": "7011" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR SIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018)", - "hsn_code": "7013" - }, - { - "description": "SIGNALLING GLASSWARE AND OPTICAL ELEMENTS OF GLASS (OTHER THAN THOSE OF HEADING 7015), NOT OPTICALLY WORKED", - "hsn_code": "7014" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, FOR NON-CORRECTIVE OR CORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED; HOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES", - "hsn_code": "7015" - }, - { - "description": "PAVING BLOCKS, SLABS, BRICKS, SQUARES, TILES AND OTHER ARTICLES OF PRESSED OR MOULDED GLASS, WHETHER OR NOT WIRED, OF A KIND USED FOR BUILDING OR CONSTRUCTION PURPOSES; GLASS CUBES AND OTHER GLASS SMALL WARES, WHETHER OR NOT ON A BACKING, FOR MOSAICS OR SIMILAR DECORATIVE PURPOSES; LEADED LIGHTS AND THE LIKE; MULTI-CELLULAR OR FOAM GLASS IN BLOCKS, PANELS, PLATES, SHELLS OR SIMILAR FORMS", - "hsn_code": "7016" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR CALIBRATED", - "hsn_code": "7017" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND SIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY; GLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF LAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT EXCEEDING 1 MM IN DIAMETER", - "hsn_code": "7018" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN FABRICS)", - "hsn_code": "7019" - }, - { - "description": "OTHER ARTICLES OF GLASS", - "hsn_code": "7020" - }, - { - "description": "PEARLS, NATURAL OR CULTURED, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; PEARLS, NATURAL OR CULTURED, TEMPORARILY STRUNG FOR CONVENIENCE OF TRANSPORT", - "hsn_code": "7101" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET", - "hsn_code": "7102" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR CONVENIENCE OF TRANSPORT", - "hsn_code": "7103" - }, - { - "description": "SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR CONVENIENCE OF TRANSPORT", - "hsn_code": "7104" - }, - { - "description": "DUST AND POWDER OF NATURAL OR SYNTHETIC PRECIOUS OR SEMI-PRECIOUS STONES", - "hsn_code": "7105" - }, - { - "description": "SILVER (INCLUDING SILVER PLATED WITH GOLD OR PLATINUM), UNWROUGHT OR IN SEMI-MANUFACTURED FORMS, OR IN POWDER FORM", - "hsn_code": "7106" - }, - { - "description": "Base metals clad with silver, not further worked than semi-manufactured", - "hsn_code": "7107" - }, - { - "description": "GOLD (INCLUDING GOLD PLATED WITH PLATINUM) UNWROUGHT OR IN SEMI-MANUFACTURED FORMS, OR IN POWDER FORM", - "hsn_code": "7108" - }, - { - "description": "Base metals or silver, clad with gold, not further worked than semi-manufactured", - "hsn_code": "7109" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI- MANUFACTURED FORM, OR IN POWDER FORM", - "hsn_code": "7110" - }, - { - "description": "Base metals, silver or gold, clad with platinum, not further worked than semi-manufactured", - "hsn_code": "7111" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER WASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A KIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL", - "hsn_code": "7112" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "7113" - }, - { - "description": "ARTICLES OF GOLDSMITHS\u2019 OR SILVERSMITHS\u2019 WARES AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "7114" - }, - { - "description": "OTHER ARTICLES OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "7115" - }, - { - "description": "ARTICLES OF NATURAL OR CULTURED PEARLS, PRECIOUS OR SEMI-PRECIOUS STONES (NATURAL, SYNTHETIC OR RECONSTRUCTED)", - "hsn_code": "7116" - }, - { - "description": "IMITATION JEWELLERY", - "hsn_code": "7117" - }, - { - "description": "COIN", - "hsn_code": "7118" - }, - { - "description": "Metals", - "hsn_code": "72-83" - }, - { - "description": "PIG IRON AND SPIEGELEISEN IN PIGS, BLOCKS OR OTHER PRIMARY FORMS", - "hsn_code": "7201" - }, - { - "description": "FERRO-ALLOYS", - "hsn_code": "7202" - }, - { - "description": "FERROUS PRODUCTS OBTAINED BY DIRECT REDUCTION OF IRON ORE AND OTHER SPONGY FERROUS PRODUCTS, IN LUMPS, PELLETS OR SIMILAR FORMS; IRON HAVING MINIMUM PURITY BY WEIGHT OF 99.94%, IN LUMPS, PELLETS OR SIMILAR FORMS", - "hsn_code": "7203" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL", - "hsn_code": "7204" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL", - "hsn_code": "7205" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OTHER PRIMARY FORMS (EXCLUDING IRON OF HEADING 7203)", - "hsn_code": "7206" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL", - "hsn_code": "7207" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE, HOT-ROLLED, NOT CLAD, PLATED OR COATED", - "hsn_code": "7208" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE, COLD-ROLLED (COLD-REDUCED), NOT CLAD, PLATED OR COATED", - "hsn_code": "7209" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE, CLAD, PLATED OR COATED", - "hsn_code": "7210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM, NOT CLAD, PLATED OR COATED", - "hsn_code": "7211" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM, CLAD, PLATED OR COATED", - "hsn_code": "7212" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL", - "hsn_code": "7213" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED, HOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER ROLLING", - "hsn_code": "7214" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL", - "hsn_code": "7215" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL", - "hsn_code": "7216" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL", - "hsn_code": "7217" - }, - { - "description": "STAINLESS STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF STAINLESS STEEL", - "hsn_code": "7218" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE", - "hsn_code": "7219" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM", - "hsn_code": "7220" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL", - "hsn_code": "7221" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS STEEL", - "hsn_code": "7222" - }, - { - "description": "WIRE OF STAINLESS STEEL", - "hsn_code": "7223" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF OTHER ALLOY STEEL", - "hsn_code": "7224" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE", - "hsn_code": "7225" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM", - "hsn_code": "7226" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL", - "hsn_code": "7227" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER ALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL", - "hsn_code": "7228" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL", - "hsn_code": "7229" - }, - { - "description": "SHEET PILING OF IRON OR STEEL, WHETHER OR NOT DRILLED, PUNCHED OR MADE FROM ASSEMBLED ELEMENTS; WELDED ANGLES, SHAPES AND SECTIONS, OF IRON OR STEEL", - "hsn_code": "7301" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING: RAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND OTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH-PLATES, CHAIRS, CHAIR WEDGES, SOLE PLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR JOINTING OR FIXING RAILS", - "hsn_code": "7302" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, OF CAST IRON", - "hsn_code": "7303" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL", - "hsn_code": "7304" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING CIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON OR STEEL", - "hsn_code": "7305" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED OR SIMILARLY CLOSED), OF IRON OR STEEL", - "hsn_code": "7306" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL", - "hsn_code": "7307" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE MASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND THRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR STEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES OF IRON OR STEEL", - "hsn_code": "7308" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT", - "hsn_code": "7309" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT", - "hsn_code": "7310" - }, - { - "description": "CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL", - "hsn_code": "7311" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL, NOT ELECTRICALLY INSULATED", - "hsn_code": "7312" - }, - { - "description": "BARBED WIRE OF IRON OR STEEL; TWISTED HOOP OR SINGLE FLAT WIRE, BARBED OR NOT, AND LOOSELY TWISTED DOUBLE WIRE, OF A KIND USED FOR FENCING, OF IRON OR STEEL", - "hsn_code": "7313" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE; EXPANDED METAL OF IRON OR STEEL", - "hsn_code": "7314" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL", - "hsn_code": "7315" - }, - { - "description": "ANCHORS, GRAPNELS AND PARTS THEREOF, OF IRON OR STEEL", - "hsn_code": "7316" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER", - "hsn_code": "7317" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS, WASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL", - "hsn_code": "7318" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS AND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER PINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "7319" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL", - "hsn_code": "7320" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR CENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON-ELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL", - "hsn_code": "7321" - }, - { - "description": "Radiators for central heating, not electrically heated and parts thereof, of iron or steel; air heaters, hot air distributors not electrically heated, with motor fan or blower", - "hsn_code": "7322" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL; IRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF IRON OR STEEL", - "hsn_code": "7323" - }, - { - "description": "SANITARY WARE AND PARTS THEREOF, OF IRON OR STEEL", - "hsn_code": "7324" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL", - "hsn_code": "7325" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL", - "hsn_code": "7326" - }, - { - "description": "COPPER MATTES; CEMENT COPPER (PRECIPITATED COPPER)", - "hsn_code": "7401" - }, - { - "description": "UNREFINED COPPER; COPPER ANODES FOR ELECTROLYTIC REFINING", - "hsn_code": "7402" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT", - "hsn_code": "7403" - }, - { - "description": "COPPER WASTE AND SCRAP", - "hsn_code": "7404" - }, - { - "description": "Master alloys of copper", - "hsn_code": "7405" - }, - { - "description": "COPPER POWDERS AND FLAKES", - "hsn_code": "7406" - }, - { - "description": "COPPER BARS, RODS AND PROFILES", - "hsn_code": "7407" - }, - { - "description": "COPPER WIRE", - "hsn_code": "7408" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM", - "hsn_code": "7409" - }, - { - "description": "COPPER FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING 0.15 MM", - "hsn_code": "7410" - }, - { - "description": "COPPER TUBES AND PIPES", - "hsn_code": "7411" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)", - "hsn_code": "7412" - }, - { - "description": "Stranded wire, cables, plated bands and the like, of copper, not electrically insulated", - "hsn_code": "7413" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR ARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS, WASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF COPPER", - "hsn_code": "7415" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY WARE AND PARTS THEREOF, OF COPPER", - "hsn_code": "7418" - }, - { - "description": "OTHER ARTICLES OF COPPER", - "hsn_code": "7419" - }, - { - "description": "NICKEL MATTES, NICKEL OXIDE SINTERS AND OTHER INTERMEDIATE PRODUCTS OF NICKEL METALLURGY", - "hsn_code": "7501" - }, - { - "description": "UNWROUGHT NICKEL", - "hsn_code": "7502" - }, - { - "description": "NICKEL WASTE AND SCRAP", - "hsn_code": "7503" - }, - { - "description": "Nickel powders and flakes", - "hsn_code": "7504" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE", - "hsn_code": "7505" - }, - { - "description": "NICKEL PLATES, SHEETS, STRIP AND FOIL", - "hsn_code": "7506" - }, - { - "description": "NICKEL TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)", - "hsn_code": "7507" - }, - { - "description": "OTHER ARTICLES OF NICKEL", - "hsn_code": "7508" - }, - { - "description": "UNWROUGHT ALUMINIUM", - "hsn_code": "7601" - }, - { - "description": "ALUMINIUM WASTE AND SCRAP", - "hsn_code": "7602" - }, - { - "description": "ALUMINIUM POWDERS AND FLAKES", - "hsn_code": "7603" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES", - "hsn_code": "7604" - }, - { - "description": "ALUMINIUM WIRE", - "hsn_code": "7605" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM", - "hsn_code": "7606" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING 0.2MM", - "hsn_code": "7607" - }, - { - "description": "ALUMINIUM TUBES AND PIPES", - "hsn_code": "7608" - }, - { - "description": "Aluminium tube or pipe fittings (for example, couplings, elbows, sleeves)", - "hsn_code": "7609" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE MASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND THRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS, PROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES", - "hsn_code": "7610" - }, - { - "description": "Aluminium reservoirs, tanks, vats and similar containers, for any material (other than compressed or liquefied gas), of a capacity exceeding 300L, whether or not lined or heat-insulated, but not fitted with mechanical or thermal equipment", - "hsn_code": "7611" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR COLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT", - "hsn_code": "7612" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS", - "hsn_code": "7613" - }, - { - "description": "STRANDED WIRE, CABLES, PLAITED BANDS AND THE LIKE, OF ALUMINIUM, NOT ELECTRICALLY INSULATED", - "hsn_code": "7614" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF ALUMINIUM; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF ALUMINIUM; SANITARY WARE AND PARTS THEREOF, OF ALUMINIUM", - "hsn_code": "7615" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM", - "hsn_code": "7616" - }, - { - "description": "UNWROUGHT LEAD", - "hsn_code": "7801" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES", - "hsn_code": "7804" - }, - { - "description": "OTHER ARTICLES OF LEAD", - "hsn_code": "7806" - }, - { - "description": "UNWROUGHT ZINC", - "hsn_code": "7901" - }, - { - "description": "ZINC WASTE AND SCRAP", - "hsn_code": "7902" - }, - { - "description": "ZINC DUST, POWDERS AND FLAKES", - "hsn_code": "7903" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE", - "hsn_code": "7904" - }, - { - "description": "ZINC PLATES, SHEETS, STRIP AND FOIL", - "hsn_code": "7905" - }, - { - "description": "OTHER ARTICLES OF ZINC", - "hsn_code": "7907" - }, - { - "description": "UNWROUGHT TIN", - "hsn_code": "8001" - }, - { - "description": "TIN WASTE AND SCRAP", - "hsn_code": "8002" - }, - { - "description": "Tin bars, rods, profiles and wire", - "hsn_code": "8003" - }, - { - "description": "OTHER ARTICLES OF TIN", - "hsn_code": "8007" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8101" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8102" - }, - { - "description": "TANTALUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8103" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8104" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8105" - }, - { - "description": "BISMUTH AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8106" - }, - { - "description": "CADMIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8107" - }, - { - "description": "TITANIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8108" - }, - { - "description": "ZIRCONIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8109" - }, - { - "description": "ANTIMONY AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8110" - }, - { - "description": "MAGANESE AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8111" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM (COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE AND SCRAP", - "hsn_code": "8112" - }, - { - "description": "CERMETS AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP", - "hsn_code": "8113" - }, - { - "description": "HAND TOOLS, THE FOLLOWING: SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES; AXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND; SCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND USED IN AGRICULTURE, HORTICULTURE OR FORESTRY", - "hsn_code": "8201" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS SAW BLADES)", - "hsn_code": "8202" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING SHEARS, PIPE-CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS", - "hsn_code": "8203" - }, - { - "description": "HAND-OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT NOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT HANDLES", - "hsn_code": "8204" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED; BLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF, MACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND-OR PEDAL-OPERATED GRINDING WHEELS WITH FRAMEWORKS", - "hsn_code": "8205" - }, - { - "description": "TOOLS OF TWO OR MORE OF THE HEADINGS 8202 TO 8205, PUT UP IN SETS FOR RETAIL SALE", - "hsn_code": "8206" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER-OPERATED, OR FOR MACHINE \u2013 TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING, DRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR DRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS", - "hsn_code": "8207" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES", - "hsn_code": "8208" - }, - { - "description": "PLATES, STICKS, TIPS AND THE LIKE FOR TOOLS, UNMOUNTED, OF CERMETS", - "hsn_code": "8209" - }, - { - "description": "Hand-operated mechanical appliances, weighing 10 kg or less, used in the preparation, conditioning or serving of food or drink", - "hsn_code": "8210" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN KNIVES OF HEADING 8208, AND BLADES THEREFOR", - "hsn_code": "8211" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADES BLANKS IN STRIPS)", - "hsn_code": "8212" - }, - { - "description": "Scissors, tailors\u2019 shears and similar shears, and blades therefor", - "hsn_code": "8213" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS\u2019 OR KITCHEN CLEAVERS, CHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND INSTRUMENTS (INCLUDING NAIL FILES)", - "hsn_code": "8214" - }, - { - "description": "SPOONS, FORKS, LADLES, SKIMMERS, CAKE-SERVERS, FISH-KNIVES, BUTTER-KNIVES, SUGAR TONGS AND SIMILAR KITCHEN OR TABLEWARE", - "hsn_code": "8215" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL; CLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF THE FOREGOING ARTICLES, OF BASE METAL", - "hsn_code": "8301" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS, STAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE LIKE; BASE METAL HAT-RACKS, HAT-PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH MOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSURES OF BASE METAL", - "hsn_code": "8302" - }, - { - "description": "Armoured or reinforced safes, strong-boxes and doors and safe deposit lockers for strong rooms, cash or deed boxes and the like, of base metal", - "hsn_code": "8303" - }, - { - "description": "Filing, cabinets, card-index cabinets, paper trays, paper rests, pen trays, office-stamp stands and similar office or desk equipment, of base metal, other than office furniture of heading 9403", - "hsn_code": "8304" - }, - { - "description": "Stationery; fittings for loose-leaf binders or files, letter clips, letter corners, paper clips, indexing tags and the like, staples in strips (for offices, upholstery, packaging), of base metal", - "hsn_code": "8305" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER ORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL; MIRRORS OF BASE METAL", - "hsn_code": "8306" - }, - { - "description": "FLEXIBLE TUBING OF BASE METAL, WITH OR WITHOUT FITTINGS", - "hsn_code": "8307" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE, OF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL GOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL; BEADS AND SPANGLES, OF BASE METALS", - "hsn_code": "8308" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS), CAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING ACCESSORIES, OF BASE METAL", - "hsn_code": "8309" - }, - { - "description": "SIGN-PLATES, NAME-PLATES, ADDRESS-PLATES AND SIMILAR PLATES, NUMBERS, LETTERS AND OTHER SYMBOLS, OF BASE METAL, EXCLUDING THOSE OF HEADING 9405", - "hsn_code": "8310" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF METAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING, BRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF AGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING", - "hsn_code": "8311" - }, - { - "description": "Machinery / Electrical", - "hsn_code": "84-85" - }, - { - "description": "NUCLEAR REACTORS; FUEL ELEMENTS (CARTRIDGES), NON-IRRADIATED, FOR NUCLEAR REACTORS, MACHINERY AND APPARATUS FOR ISOTOPIC SEPARATION", - "hsn_code": "8401" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER BOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM): SUPER-HEATED WATER BOILERS", - "hsn_code": "8402" - }, - { - "description": "CENTRAL HEATING BOILERS OTHER THAN THOSE OF HEADING 8402", - "hsn_code": "8403" - }, - { - "description": "AUXILIARY PLANT FOR USE WITH BOILERS OF HEADING 8402 OR 8403 (FOR EXAMPLE, ECONOMISERS, SUPER-HEATERS, SOOT REMOVERS, GAS RECOVERS); CONDENSERS FOR STEAM OR OTHER VAPOUR POWER UNITS", - "hsn_code": "8404" - }, - { - "description": "PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS; ACETYLENE GAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS", - "hsn_code": "8405" - }, - { - "description": "STEAM TURBINES AND OTHER VAPOUR TURBINES", - "hsn_code": "8406" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES", - "hsn_code": "8407" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL ENGINES)", - "hsn_code": "8408" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR 8408", - "hsn_code": "8409" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS AND REGULATORS THEREFOR HYDRAULIC TURBINS AND WATER WHEELS", - "hsn_code": "8410" - }, - { - "description": "Turbo-jets, turbo-propellers and other gas turbines", - "hsn_code": "8411" - }, - { - "description": "OTHER ENGINES AND MOTORS", - "hsn_code": "8412" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID ELEVATORS", - "hsn_code": "8413" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR RECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS", - "hsn_code": "8414" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTOR DRIVEN FAN AND ELEMENTS FOR CHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE HUMIDITY CANNOT BE SEPARATELY REGULATED.", - "hsn_code": "8415" - }, - { - "description": "FURNACE BURNERS FOR LIQUID FUEL, FOR PULVERISED SOLID FUEL OR FOR GAS; MECHANICAL STOKERS, INCLUDING THEIR MECHANICAL GRATES, MECHANICAL ASH DISCHARGERS AND SIMILAR APPLIANCES", - "hsn_code": "8416" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON-ELECTRIC", - "hsn_code": "8417" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC OR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415", - "hsn_code": "8418" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED,(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE TREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS HEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING PASTEURISING, STEAMING, DRYING, EVAPORATING, VAPOURISING, CONDENSING OR COOLING, OTHER THAN MACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES", - "hsn_code": "8419" - }, - { - "description": "CALENDERING OR OTHER ROLLING MACHINES, OTHER THAN FOR METALS OR GLASS, AND CYLINDERS THEREFOR", - "hsn_code": "8420" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND APPARATUS, FOR LIQUIDS OR GASES", - "hsn_code": "8421" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER CONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANES, BOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES JARS, TUBES AND SIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK WRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES", - "hsn_code": "8422" - }, - { - "description": "WEIGHTING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR BETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING MACHINE WEIGHTS OF ALL KINDS", - "hsn_code": "8423" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HAND-OPERATED) FOR PROJECTING, DISPERSING OR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY GUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET PROJECTING MACHINES", - "hsn_code": "8424" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS", - "hsn_code": "8425" - }, - { - "description": "SHIP\u2019S DERRICKS; CRANES, INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE CARRIERS AND WORKS TRUCKS FITTED WITH A CRANE", - "hsn_code": "8426" - }, - { - "description": "FORK-LIFT TRUCKS; OTHER WORKS TRUCKS FITTED WITH LIFTING OR HANDLING EQUIPMENT", - "hsn_code": "8427" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY ( FOR EXAMPLE, LIFTS, ESCALATORS, CONVEYORS, TELEFERICS)", - "hsn_code": "8428" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL SHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS", - "hsn_code": "8429" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPPING, EXCAVATING, TAMPING, COMPACTING, EXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILE-DRIVERS AND PILE-EXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS", - "hsn_code": "8430" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO 8430", - "hsn_code": "8431" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY OF SOIL PREPARATION OR CULTIVATION; LAWN OR SPORTS-GROUND ROLLERS", - "hsn_code": "8432" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR HAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER AGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437", - "hsn_code": "8433" - }, - { - "description": "MILKING MACHINES AND DAIRY MACHINERY", - "hsn_code": "8434" - }, - { - "description": "PRESSES, CRUSHERS & SIMILAR MACHINERY USED IN THE MANUFACTURE OF WINE, CIDER, FRUIT JUICES OR SIMILAR BEVERAGES", - "hsn_code": "8435" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING MACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT; POULTRY INCUBATORS AND BROODERS", - "hsn_code": "8436" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS VEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS OR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY", - "hsn_code": "8437" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL PREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE EXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS", - "hsn_code": "8438" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR FINISHING PAPER OR PAPERBOARD", - "hsn_code": "8439" - }, - { - "description": "BOOK-BINDING MACHINERY, INCLUDING BOOK-SEWING MACHINES", - "hsn_code": "8440" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPER BOARD, INCLUDING CUTTING MACHINES OF ALL KINDS", - "hsn_code": "8441" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS 8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHO GRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED)", - "hsn_code": "8442" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES AND FACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF", - "hsn_code": "8443" - }, - { - "description": "MACHINES FOR EXTRUDING, DRAWING, TEXTURING OR CUTTING MAN-MADE TEXTILE MATERIALS", - "hsn_code": "8444" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES AND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING (INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR USE ON THE MACHINES OF HEADING 8446 OR 8447", - "hsn_code": "8445" - }, - { - "description": "WEAVING MACHINES (LOOMS)", - "hsn_code": "8446" - }, - { - "description": "WEAVING MACHINES (LOOMS)", - "hsn_code": "8447" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADINGS 8444, 8445, 8446 OR 8447 (FOR EXAMPLE, DOBBIES, JACQUAARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING MECHANISMS); PARTS & ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF THIS HEADING OR OF HEADINGS 8444, 8445, 8446 OR 8447 (FOR EXAMPLE, SPINDLES & SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES SHUTTLES, HEALDS & HEALD FRAME, HOSIERY NEEDLES)", - "hsn_code": "8448" - }, - { - "description": "MACHINERY FOR THE MANUFACTURE OR FINISHING OF FELT OR NONWOVENS IN THE PIECE OR IN SHAPES, INCLUDING MACHINERY FOR MAKING FELT HATS; BLOCKS FOR MAKING HATS", - "hsn_code": "8449" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH WASH AND DRY", - "hsn_code": "8450" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING, WRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING, DRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP TEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER SUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES FOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS", - "hsn_code": "8451" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE, BASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES", - "hsn_code": "8452" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR MAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER THAN SEWING MACHINES", - "hsn_code": "8453" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN METALLURGY OR IN METAL FOUNDRIES", - "hsn_code": "8454" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR", - "hsn_code": "8455" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR OTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTRO-CHEMICAL, ELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESS; WATER-JET CUTTING MACHINES:", - "hsn_code": "8456" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION TRANSFER MACHINES FOR WORKING METAL", - "hsn_code": "8457" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL", - "hsn_code": "8458" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING, MILLING, TREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING TURNING CENTRES) OF HEADING 8458", - "hsn_code": "8459" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR OTHERWISE FINISHING METAL OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR POLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING MACHINES OF HEADING 8461", - "hsn_code": "8460" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING BY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "8461" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR DIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING, FOLDING STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR WORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE", - "hsn_code": "8462" - }, - { - "description": "OTHER MACHINE TOOLS FOR WORKING METAL OR CERMETS WITHOUT REMOVING MATERIAL", - "hsn_code": "8463" - }, - { - "description": "MACHINE TOOLS FOR WORKING STONE, CERAMICS, CONCRETE, ASBESTOS CEMENT OR LIKE MINERAL MATERIALS OR FOR COLD WORKING GLASS", - "hsn_code": "8464" - }, - { - "description": "MACHINE-TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE ASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR HARD MATERIALS", - "hsn_code": "8465" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS, DIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS FOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND", - "hsn_code": "8466" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED ELECTRIC OR NON-ELECTRIC MOTOR", - "hsn_code": "8467" - }, - { - "description": "MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING WHETHER OR NOT CAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8415; GAS-OPERATED SURFACE TEMPERING MACHINES AND APPLIANCES", - "hsn_code": "8468" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8443; WORD-PROCESSING MACHINES", - "hsn_code": "8469" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING MACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING MACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A CALCULATING DEVICE; CASH REGISTERS", - "hsn_code": "8470" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL READERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND MACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "8471" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES, ADDRESSING MACHINES, AUTOMATIC BANK NOTE DISPENSERS, COIN SORTING MACHINES, COIN COUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR STAPLING MACHINE)", - "hsn_code": "8472" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472", - "hsn_code": "8473" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING OR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING POWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID MINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER MINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY MOULDS OF SAND", - "hsn_code": "8474" - }, - { - "description": "MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES OR FLASH-BULBS, IN GLASS ENVELOPES; MACHINES OF MANUFACTURING OR HOT WORKING GLASS OR GLASSWARE", - "hsn_code": "8475" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD OR BEVERAGE MACHINES), INCLUDING MONEY-CHANGING MACHINES", - "hsn_code": "8476" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS FROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8477" - }, - { - "description": "MACHINERY FOR PREPARING OR MAKING UP TOBACCO, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8478" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8479" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR METAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER OR PLASTICS", - "hsn_code": "8480" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE LIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES", - "hsn_code": "8481" - }, - { - "description": "BALL OR ROLLER BEARINGS", - "hsn_code": "8482" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARINGS HOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR BOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND PULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING UNIVERSAL JOINTS)", - "hsn_code": "8483" - }, - { - "description": "GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH OTHER MATERIAL OR OF TWO OR MORE LAYERS OF METAL; SETS OR ASSORTMENTS OF GASKETS AND SIMILAR JOINTS, DISSIMILAR IN COMPOSITION, PUT UP IN POUCHES, ENVELOPES OR SIMILAR PACKINGS; MECHANICAL SEALS", - "hsn_code": "8484" - }, - { - "description": "MACHINES AND APPARATUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE OF SEMICONDUCTOR BOULES OR WAFERS, SEMICONDUCTOR DEVICES, ELECTRONIC INTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARATUS SPECIFIED IN NOTE 9 (C) TO THIS CHAPTER; PARTS AND ACCESSORIES", - "hsn_code": "8486" - }, - { - "description": "MACHINE PARTS, NOT CONTAINING ELECTRICAL CONNECTORS, INSULATORS, COILS, CONTACTS OR OTHER ELECTRICAL FEATURES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8487" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS)", - "hsn_code": "8501" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS", - "hsn_code": "8502" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING 8501 OR 8502", - "hsn_code": "8503" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS", - "hsn_code": "8504" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT MAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS, CLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND BRAKES; ELECTRO-MAGNETIC LIFTING HEADS", - "hsn_code": "8505" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES", - "hsn_code": "8506" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT RECTANGULAR (INCLUDING SQUARE)", - "hsn_code": "8507" - }, - { - "description": "VACCUM CLEANERS", - "hsn_code": "8508" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR, OTHER THAN VACUUM CLEANERS OF HEADING 8508", - "hsn_code": "8509" - }, - { - "description": "SHAVERS, HAIR CLIPPERS AND HAIR-REMOVING APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR", - "hsn_code": "8510" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR COMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION MAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS, STARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUT-OUTS OF A KIND USED IN CONJUNCTION WITH SUCH ENGINES", - "hsn_code": "8511" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539), WINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR VEHICLES", - "hsn_code": "8512" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT OF HEADING 8512", - "hsn_code": "8513" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE FUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY EQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS", - "hsn_code": "8514" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM, ULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR WELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC MACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS", - "hsn_code": "8515" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC SPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTRO-THERMIC HAIR-DRESSING APPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND DRYERS, ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED FOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING 8545", - "hsn_code": "8516" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR RECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528.", - "hsn_code": "8517" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN THEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A MICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS; AUDIO-FREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SETS", - "hsn_code": "8518" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "8519" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO TUNER", - "hsn_code": "8521" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8519 OR 8521", - "hsn_code": "8522" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR MAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS, FUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS AND OTHER CONNECTORS, JUNCTION BOXES), FOR A VOLTAGE NOT EXCEEDING 1,000 VOLTS: CONNECTORS FOR OPTICAL FIBRES, OPTICAL FIBRE BUNDLES OR CABLES", - "hsn_code": "8523" - }, - { - "description": "Transmission apparatus for radio-broadcasting or television, whether or not incorporating reception apparatus or sound recording or reproducing apparatus; television cameras, digital cameras and video camera recorders", - "hsn_code": "8525" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL APPARATUS", - "hsn_code": "8526" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING WHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK", - "hsn_code": "8527" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS, RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "8528" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO 8528", - "hsn_code": "8529" - }, - { - "description": "ELECTRICAL SIGNALING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAYS, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATIONS OR AIRFIELDS (OTHER THAN THOSE OF HEADING 8608)", - "hsn_code": "8530" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR PANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530", - "hsn_code": "8531" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET)", - "hsn_code": "8532" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING RESISTORS", - "hsn_code": "8533" - }, - { - "description": "Printed circuits", - "hsn_code": "8534" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR MAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS AND OTHER CONNECTORS, JUNCTION BOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS", - "hsn_code": "8535" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR MAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS, FUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS AND OTHER CONNECTORS, JUNCTION BOXES), FOR A VOLTAGE NOT EXCEEDING 1,000 VOLTS: CONNECTORS FOR OPTICAL FIBRES, OPTICAL FIBRE BUNDLES OR CABLES", - "hsn_code": "8536" - }, - { - "description": "BOARDS, PANELS, CONSOLES DESKS, CABINETS AND OTHER BASES, EQUIPPED WITH TWO OR MORE APPARATUS OF HEADING 8535 OR 8536, FOR ELECTRIC CONTROL OR THE DISTRIBUTION OF ELECTRICITY, INCLUDING THOSE INCORPORATING INSTRUMENTS OR APPARATUS OF CHAPTER 90, AND NUMERICAL CONTROL APPARATUS, OTHER THAN SWITCHING APPARATUS OF HEADING 8517", - "hsn_code": "8537" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8535, 8536 OR 8537", - "hsn_code": "8538" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA-VIOLET OR INFRA-RED LAMPS; ARC-LAMPS", - "hsn_code": "8539" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE, VACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES AND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES)", - "hsn_code": "8540" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI-CONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN MODULES OR MADE-UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC CRYSTAL", - "hsn_code": "8541" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS", - "hsn_code": "8542" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8543" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE) AND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS; OPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT ASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS", - "hsn_code": "8544" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER ARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR ELECTRICAL PURPOSES", - "hsn_code": "8545" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL", - "hsn_code": "8546" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING FITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF METAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR THE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL CONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL", - "hsn_code": "8547" - }, - { - "description": "WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC ACCUMULATORS; SPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC ACCUMULATORS; ELECTRICAL PARTS OF MACHINERY OR APPARATUS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "8548" - }, - { - "description": "Transportation", - "hsn_code": "86-89" - }, - { - "description": "RAIL LOCOMOTIVES POWERED FROM AN EXTERNAL SOURCE OF ELECTRICITY OR BY ELECTRIC ACCUMULATORS", - "hsn_code": "8601" - }, - { - "description": "OTHER RAIL LOCOMOTIVES; LOCOMOTIVE TENDERS", - "hsn_code": "8602" - }, - { - "description": "SELF-PROPELLED RAILWAY OR TRAMWAY COACHES, VANS AND TRUCKS, OTHER THAN THOSE OF HEADING 8604", - "hsn_code": "8603" - }, - { - "description": "Railway or tramway maintenance or service vehicles whether or not self-propelled (for example, workshops, cranes, ballast tampers, track-liners, testing coaches and track inspection vehicles)", - "hsn_code": "8604" - }, - { - "description": "Railway or tramway passenger coaches, not self-propelled; luggage vans, post office coaches and other special purpose railway or tramway coaches, not self-propelled (excluding those of heading 8604)", - "hsn_code": "8605" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED", - "hsn_code": "8606" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK", - "hsn_code": "8607" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTRO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY, TRAMWAYS, RAODS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING", - "hsn_code": "8608" - }, - { - "description": "Containers (including containers for the transport of fluids) specially designed and equipped for carriage by one or more modes of transport", - "hsn_code": "8609" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OF HEADING 8709)", - "hsn_code": "8701" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER", - "hsn_code": "8702" - }, - { - "description": "Motor cars and other motor vehicles; principally designed for the transport of persons (other than those of heading no. 8702), including station wagons and racing cars", - "hsn_code": "8703" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS", - "hsn_code": "8704" - }, - { - "description": "SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE TRANSPORT OR PERSONS OR GOODS (FOR EXAMPLE BREAKDOWN LORRIES, CRANE LORRIES, FIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE WORKSHOPS, MOBILE RADIOLOGICAL UNITS)", - "hsn_code": "8705" - }, - { - "description": "CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705", - "hsn_code": "8706" - }, - { - "description": "BODIES (INCLUDING CABS), FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705", - "hsn_code": "8707" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705", - "hsn_code": "8708" - }, - { - "description": "WORKS TRUCKS, SELF-PROPELLED, NOT FITTED WITH LIFTING OR HANDLING EQUIPMENT, OF THE TYPE USED IN FACTORIES, WAREHOUSES, DOCK AREAS OR AIRPORTS FOR SHORT DISTANCE TRANSPORT OF GOODS; TRACTORS OF THE TYPE USED ON RAILWAY STATION PLATFORMS; PARTS OF THE FOREGOING VEHICLES", - "hsn_code": "8709" - }, - { - "description": "Tanks and other armoured fighting vehicles, motorised, whether or not fitted with weapons, and parts of such vehicles", - "hsn_code": "8710" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH OR WITHOUT SIDE-CARS", - "hsn_code": "8711" - }, - { - "description": "BICYCLES AND OTHER CYCLES (INCLUDING DELIVERY TRICYCLES), NOT MOTORISED", - "hsn_code": "8712" - }, - { - "description": "CARRIAGES FOR DISABLED PERSONS, WHETHER OR NOT MOTORISED OR OTHERWISE MECHANICALLY PROPELLED", - "hsn_code": "8713" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711 TO 8713", - "hsn_code": "8714" - }, - { - "description": "BABY CARRIAGES AND PARTS THEREOF", - "hsn_code": "8715" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS THEREOF", - "hsn_code": "8716" - }, - { - "description": "BALLOONS AND DIRIGIBLES, GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT", - "hsn_code": "8801" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTORS, AEROPLANES); SPACECRAFT (INCLUDING SATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES", - "hsn_code": "8802" - }, - { - "description": "PARTS OF GOODS OF HEADING NUMBER 8801 OR 8802", - "hsn_code": "8803" - }, - { - "description": "PARACHUTES (INCLUDING DIRIGIBLE PARACHUTES AND PARAGLIDERS) AND ROTOCHUTES; PARTS THEREOF AND ACCESSORIES THERETO", - "hsn_code": "8804" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS; PARTS OF THE FOREGOING ARTICLES", - "hsn_code": "8805" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS, FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS FOR THE TRANSPORT OF PERSONS OR GOODS", - "hsn_code": "8901" - }, - { - "description": "FISHING VESSELS; FACTORY SHIPS AND OTHER VESSELS FOR PROCESSING OR PRESERVING FISHERY PRODUCTS", - "hsn_code": "8902" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES", - "hsn_code": "8903" - }, - { - "description": "Tugs and Pusher craft", - "hsn_code": "8904" - }, - { - "description": "LIGHT-VESSELS, FIRE-FLOATS, DREDGERS, FLOATING CRANES, AND OTHER VESSELS THE NAVIGABILITY OF WHICH IS SUBSIDIARY TO THEIR MAIN FUNCTION; FLOATING DOCKS; FLOATING OR SUBMERSIBLE DRILLING OR PRODUCTION PLATFORMS", - "hsn_code": "8905" - }, - { - "description": "OTHER VESSELS, INCLUDING WARSHIPS AND LIFEBOATS OTHER THAN ROWING BOATS", - "hsn_code": "8906" - }, - { - "description": "Boats, floating structures, other (for e.g. rafts, tanks, coffer-dams, landing stages, buoys and beacons)", - "hsn_code": "8907" - }, - { - "description": "Vessels and other floating structures; for breaking up", - "hsn_code": "8908" - }, - { - "description": "Miscellaneous", - "hsn_code": "90-97" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF HEADING NO 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT LENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED, OTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED", - "hsn_code": "9001" - }, - { - "description": "LENSES, PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, MOUNTED, BEING PARTS OF OR FITTINGS FOR INSTRUMENTS OR APPARATUS, OTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED", - "hsn_code": "9002" - }, - { - "description": "FRAMES AND MOUNTINGS FOR SPECTACLES, GOGGLES OR THE LIKE, AND PARTS THEREOF", - "hsn_code": "9003" - }, - { - "description": "SPECTACLES, GOGGLES AND THE LIKE, CORRECTIVE, PROTECTIVE OR OTHER", - "hsn_code": "9004" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES AND MOUNTINGS THEREFOR; OTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING INSTRUMENTS FOR RADIO-ASTRONOMY", - "hsn_code": "9005" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT APPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539", - "hsn_code": "9006" - }, - { - "description": "CINEMATOGRAPHIC CAMERAS AND PROJECTORS WHETHER OR NOT INCORPORATING SOUND RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "9007" - }, - { - "description": "IMAGE PROJECTORS, OTHER THAN CINEMATOGRAPHIC; PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) ENLARGERS AND REDUCERS", - "hsn_code": "9008" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC) LABORATORIES NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS", - "hsn_code": "9010" - }, - { - "description": "COMPOUND OPTICAL MICROSCOPES, INCLUDING THOSE FOR PHOTOMICRO-GRAPHY, CINEPHOTOMICROGRAPHY OR MICROPROJECTION", - "hsn_code": "9011" - }, - { - "description": "MICROSCOPES OTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS", - "hsn_code": "9012" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN OTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND INSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER", - "hsn_code": "9013" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES", - "hsn_code": "9014" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC OCEANOGRAPHIC, HYDROLOGICAL, METEROLOGICAL OR GEO-PHYSCIAL INSTRUMENTS AND APPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS", - "hsn_code": "9015" - }, - { - "description": "BALANCES OF A SENSITIVITY OF 5cg OR BETTER, WITH OR WITHOUT WEIGHTS", - "hsn_code": "9016" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE, DRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC CALCULATORS); INSTRUMENTS FOR MEASURING LENGTH FOR USE IN THE HAND (FOR EXAMPLE, MEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER", - "hsn_code": "9017" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY SCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND SIGHT-TESTING INSTRUMENTS", - "hsn_code": "9018" - }, - { - "description": "MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING APPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION OR OTHER THERAPEUTIC RESPIRATION APPARATUS", - "hsn_code": "9019" - }, - { - "description": "Other breathing appliances and gas masks, excluding protective masks having neither mechanical parts nor replaceable filters", - "hsn_code": "9020" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSES; SPLINTS AND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER APPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE FOR A DEFECT OR DISABILITY", - "hsn_code": "9021" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS, WHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING RADIOGRAPHY OR RADIO-THERAPY APPRATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS, HIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR TREATMENT TABLES, CHAIRS AND THE LIKE;", - "hsn_code": "9022" - }, - { - "description": "INSTRUMENTS, APPARATUS AND MODELS, DESIGNED FOR DEMONSTRATIONAL PURPOSES (FOR EXAMPLE, IN EDUCATION OR EXHIBITIONS), UNSUITABLE FOR OTHER USES", - "hsn_code": "9023" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY, ELEASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS, WOOD, TEXTILES, PAPER, PLASTICS)", - "hsn_code": "9024" - }, - { - "description": "HYDROMETERS, AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS, BAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY COMBINATION OF THESE INSTRUMENTS", - "hsn_code": "9025" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE OR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES, MANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014, 9015, 9028 OR 9032", - "hsn_code": "9026" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE, POLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS); INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY, EXPANSION, SURFACE TENSION OR THE LIKE\u2019 INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS); MICROTOMES", - "hsn_code": "9027" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING METERS THEREFOR", - "hsn_code": "9028" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILO METERS, PEDOMETERS AND THE LIKE; SPEED INDICATORS AND TACHO METERS, OTHER THAN THOSE OF HEADING 9014 OR 9015; STROBOSCOPES", - "hsn_code": "9029" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028; INSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY COSMIC OR OTHER IONISING RADIATIONS", - "hsn_code": "9030" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS", - "hsn_code": "9031" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLIING INSTRUMENTS AND APPARATUS", - "hsn_code": "9032" - }, - { - "description": "Parts and accessories (not specified or included elsewhere in this Chapter) for machines, appliances, instruments or apparatus of Chapter 90", - "hsn_code": "9033" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH CASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "9101" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER THAN THOSE OF HEADING 9101", - "hsn_code": "9102" - }, - { - "description": "CLOCKS WITH WATCH MOVEMENTS, EXCLUDING CLOCKS OF HEADING 9104", - "hsn_code": "9103" - }, - { - "description": "Instrument panel clocks and clocks of a similar type for vehicles, aircraft, spacecraft or vessels", - "hsn_code": "9104" - }, - { - "description": "OTHER CLOCKS", - "hsn_code": "9105" - }, - { - "description": "TIME OF DAY RECORDING APPARATUS AND APPARATUS FOR MEASURING, RECORDING OR OTHERWISE INDICATING INTERVALS OF TIME, WITH CLOCK OR WATCH MOVEMENT OR WITH SYNCHRONOUS MOTOR (FOR EXAMPLE, TIME-REGISTERS, TIME-RECORDERS)", - "hsn_code": "9106" - }, - { - "description": "Time switches with clock or watch movement or with synchronous motor", - "hsn_code": "9107" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED", - "hsn_code": "9108" - }, - { - "description": "CLOCK MOVEMENTS, COMPLETE AND ASSEMBLED", - "hsn_code": "9109" - }, - { - "description": "COMPLETE WATCH OR CLOCK MOVEMENTS, UNASSEMBLED OR PARTLY ASSEMBLED (MOVEMENT SETS); INCOMPLETE WATCH OR CLOCK MOVEMENTS, ASSEMBLED; ROUGH WATCH OR CLOCK MOVEMENTS", - "hsn_code": "9110" - }, - { - "description": "WATCH CASES AND PARTS THEREOF", - "hsn_code": "9111" - }, - { - "description": "CLOCK CASES AND CASES OF A SIMILAR TYPE FOR OTHER GOODS OF THIS CHAPTER, AND PARTS THEREOF", - "hsn_code": "9112" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF", - "hsn_code": "9113" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS", - "hsn_code": "9114" - }, - { - "description": "PIANOS, INCLUDING AUTOMATIC PIANOS; HARPSI-CHORDS AND OTHER KEYBOARD STRINGED INSTRUMENTS", - "hsn_code": "9201" - }, - { - "description": "OTHER STRING MUSICAL INSTRUMENTS (FOR EXAMPLE, GUITARS, VIOLINS, HARPS)", - "hsn_code": "9202" - }, - { - "description": "WIND MUSICAL INSTRUMENTS (FOR EXAMPLE, KEYBOARD PIPE ORGANS, ACCORDIONS, CLARINETS, TRUMPETS, BAGPIPES) OTHER THAN FAIRGROUND ORGANS AND MECHANICAL STREET ORGANS", - "hsn_code": "9205" - }, - { - "description": "Percussion musical instruments (for example, drums, xylophones, cymbols, castanets, maracas)", - "hsn_code": "9206" - }, - { - "description": "MUSICAL INSTRUMENTS, THE SOUND OF WHICH IS PRODUCED, OR MUST BE AMPLIFIED, ELECTRICALLY (FOR EXAMPLE, ORGANS, GUITARS, ACCORDIONS)", - "hsn_code": "9207" - }, - { - "description": "MUSICAL BOXES, FAIRGROUND ORGANS, MECHANICAL STREET ORGANS, MECHANICAL SINGING BIRDS, MUSICAL SAWS AND OTHER MUSICAL INSTRUMENTS NOT FALLING WITHIN ANY OTHER HEADING OF THIS CHAPTER; DECOY CALLS OF ALL KINDS; WHISTLES, CALL HORNS AND OTHER MOUTH-BLOWN SOUND SIGNALLING INSTRUMENTS", - "hsn_code": "9208" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE, CARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS; METRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS", - "hsn_code": "9209" - }, - { - "description": "MILITARY WEAPONS, OTHER THAN REVOLVERS, PISTOLS AND THE ARMS OF HEADING 9307", - "hsn_code": "9301" - }, - { - "description": "Revolvers and Pistols, other than those of heading 9303 or 9304", - "hsn_code": "9302" - }, - { - "description": "OTHER FIREARMS AND SIMILAR DEVICES WHICH OPERATE BY THE FIRING OF AN EXPLOSIVE CHARGE (FOR EXAMPLE, SPORTING SHORTGUNS AND RIFLES, MUZZLE-LOADING FIREARMS, VERY PISTOLS AND OTHER DEVICES DESIGNED TO PROJECT ONLY SIGNAL FLARES, PISTOLS AND REVOLVERS FOR FIRING BLANK AMMUNITION, CAPTIVE-BOLT HUMANE KILLERS, LINE-THROWING GUNS)", - "hsn_code": "9303" - }, - { - "description": "Other Arms (for example, spring, air or gas guns and pistols,truncheons), excluding those ofheading 9307", - "hsn_code": "9304" - }, - { - "description": "PARTS AND ACCESSORIES OF ARTICLES OF HEADINGS 9301 TO 9304", - "hsn_code": "9305" - }, - { - "description": "BOMBS, GRENADES, TORPEDOES, MINES, MISSILES AND SIMILAR MUNITIONS OF WAR AND PARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS THEREOF, INCLUDING SHOT AND CARTRIDGE WADS", - "hsn_code": "9306" - }, - { - "description": "SWORDS, CUT LASSES, BAYONETS, LANCES AND SIMILAR ARMS AND PARTS THEREOF AND SCABBARDS AND SHEATHS THEREOF", - "hsn_code": "9307" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS, AND PARTS THEREOF", - "hsn_code": "9401" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES, EXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS\u2019 CHAIRS); BARBERS\u2019 CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND ELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES", - "hsn_code": "9402" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF", - "hsn_code": "9403" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE, MATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS OR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR PLASTICS, WHETHER OR NOT COVERED", - "hsn_code": "9404" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS THEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME-PLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "9405" - }, - { - "description": "PREFABRICATED BUILDINGS", - "hsn_code": "9406" - }, - { - "description": "TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR WHEELED TOYS; DOLLS\u2019 CARRIAGES; DOLLS; OTHER TOYS; REDUCED-SIZE (SCALE) MODELS AND SIMILAR RECREATIONAL MODELS, WORKING OR NOT; PUZZLES OF ALL KINDS.", - "hsn_code": "9503" - }, - { - "description": "VIDEO GAME CONSOLES AND MACHINES, ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL TABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT", - "hsn_code": "9504" - }, - { - "description": "FESTIVE, CARNIVAL OR OTHER ENTERTAINMENT ARTICLES, INCLUDING CONJURING TRICKS AND NOVELTY JOKES", - "hsn_code": "9505" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER SPORTS (INCLUDING TABLE-TENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS", - "hsn_code": "9506" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY NETS AND SIMILAR NETS; DECOY \u201cBIRDS\u201d (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND SIMILAR HUNTING OR SHOOTING REQUISITES", - "hsn_code": "9507" - }, - { - "description": "ROUNDABOUTS, SWINGS, SHOOTING GALLERIES AND OTHER FAIRGROUND AMUSEMENTS; TRAVELING CIRCUSES, TRAVELING MENAGERIES AND TRAVELING THEATRES", - "hsn_code": "9508" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND OTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES OBTAINED BY MOULDING)", - "hsn_code": "9601" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS MOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS OR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE SPECIFIED OR INLCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503) AND ARTICLES OF UNHARDENED GELATIN", - "hsn_code": "9602" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR VEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND FEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS AND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES)", - "hsn_code": "9603" - }, - { - "description": "Hand sieves and hand riddles", - "hsn_code": "9604" - }, - { - "description": "TRAVEL SETS FOR PERSONAL TOILET, SEWING OR SHOE OR CLOTHES CLEANING", - "hsn_code": "9605" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESS-STUDS, BUTTON MOULDS AND OTHER PARTS OF THESE ARTICLES; BUTTON BLANKS", - "hsn_code": "9606" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF", - "hsn_code": "9607" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN PENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING PENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND CLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609", - "hsn_code": "9608" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608), CRAYONS, PENCIL LEADS, PASTELS, DRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS\u2019 CHALKS", - "hsn_code": "9609" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608), CRAYONS, PENCIL LEADS, PASTELS, DRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS\u2019 CHALKS", - "hsn_code": "9610" - }, - { - "description": "Slates and Boards, with writing or drawing surfaces, whether or not framed", - "hsn_code": "9610" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608), CRAYONS, PENCIL LEADS, PASTELS, DRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS\u2019 CHALKS", - "hsn_code": "9611" - }, - { - "description": "Date, sealing or numbering stamps, and the like (including devices for printing or embossing labels), designed for operating in the hand; hand-operated composing sticks and hand printing sets incorporating such composing sticks", - "hsn_code": "9611" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHER WISE PREPARED FOR GIVING IMPRESIONS, WHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH OR WITHOUT BOXES", - "hsn_code": "9612" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL AND PARTS THEREOF OTHER THAN FLINTS AND WICKS", - "hsn_code": "9613" - }, - { - "description": "Smoking pipes (including pipe bowls) and cigar or cigarette holders and parts thereof", - "hsn_code": "9614" - }, - { - "description": "COMBS, HAIR-SLIDES AND THE LIKE, HAIRPINS, CURLING PINS, CURLING GRIPS, HAIR-CURLERS AND THE LIKE, OTHER THAN THOSE OF HEADING 8516, AND PARTS THEREOF", - "hsn_code": "9615" - }, - { - "description": "SCENT SPRAYS AND SIMILAR TOILET SPRAYS, AND MOUNTS AND HEADS THEREFOR; POWDER-PUFFS AND PADS FOR THE APPLICATION OF COSMETICS OR TOILET PREPARATIONS", - "hsn_code": "9616" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF OTHER THAN GLASS INNERS", - "hsn_code": "9617" - }, - { - "description": "Tailors\u2019 dummies and other lay figures; automata and other animated displays, used for shop window dressing", - "hsn_code": "9618" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN PENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING PENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND CLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609", - "hsn_code": "9619" - }, - { - "description": "PAINTINGS, DRAWINGS AND PASTELS, EXECUTED ENTIRELY BY HAND, OTHER THAN DRAWINGS OF HEADING 4906 AND OTHER THAN HAND-PAINTED OR HAND-DECORATED MANUFACTURED ARTICLES; COLLAGES AND SIMILAR DECORATIVE PLAQUES", - "hsn_code": "9701" - }, - { - "description": "Original engravings, prints and lithographs", - "hsn_code": "9702" - }, - { - "description": "ORIGINAL SCULPTURES AND STATUARY, IN ANY MATERIAL", - "hsn_code": "9703" - }, - { - "description": "POSTAGE OR REVENUE STAMPS, STAMP-POST MARKS, FIRST-DAY COVERS, POSTAL STATIONERY (STAMPED PAPER), AND THE LIKE, USED OR UNUSED, OTHER THAN THOSE OF HEADING 4907", - "hsn_code": "9704" - }, - { - "description": "COLLECTIONS AND COLLECTORS\u2019 PIECES OF ZOOLOGICAL, BOTANICAL, MINERALOGICAL, ANATOMICAL, HISTORICAL, ARCHAEOLOGICAL, PALAEONTOLOGICAL, ETHNOGRAPHIC OR NUMISMATIC INTEREST:", - "hsn_code": "9705" - }, - { - "description": "Antiques of an age exceeding one hundred years", - "hsn_code": "9706" - }, - { - "description": "ALL ITEMS OF MACHINERY INCLUDING PRIME MOVERS, INSTRUMENTS, APPARATUS AND APPLIANCES, CONTROL GEAR AND TRANSMISSION EQUIPMENT, AUXILLIARY EQUIPMENT (INCLUDING THOSE REQUIRED FOR RESEARCH AND DEVELOPMENT PURPOSES, TESTING AND QUALITY CONTROL), AS WELL AS ALL COMPONENTS (WHETHER FINISHED OR NOT) OR RAW MATERIALS FOR THE MANUFACTURE OF THE AFORESAID ITEMS AND THEIR COMPONENTS, REQUIRED FOR THE INITIAL SETTING UP OF A UNIT, OR THE SUBSTANTIAL EXPANSION OF AN EXISTING UNIT, OF A SPECIFIED: (1) INDUSTRIAL PLANT, (2) IRRIGATION PROJECT, (3) POWER PROJECT, (4) MINING PROJECT, (5) PROJECT FOR THE EXPLORATION FOR OIL OR OTHER MINERALS, AND (6) SUCH OTHER PROJECTS AS THE CENTRAL GOVERNMENT MAY, HAVING REGARD TO THE ECONOMIC DEVELOPMENT OF THE COUNTRY NOTIFY IN THE OFFICIAL GAZETTE IN THIS BEHALF; AND SPARE PARTS, OTHER RAW MATERIALS (INCLUDING SEMI-FINISHED MATERIAL) OR CONSUMABLE STORES NOT EXCEEDING 10% OF THE VALUE OF THE GOODS SPECIFIED ABOVE PROVIDED THAT SUCH SPARE PARTS, RAW MATERIALS OR C", - "hsn_code": "9801" - }, - { - "description": "Laboratory Chemicals", - "hsn_code": "9802" - }, - { - "description": "All dutiable articles, imported by a passenger or a member of a crew in his baggage", - "hsn_code": "9803" - }, - { - "description": "ALL DUTIABLE ARTICLES, INTENDED FOR PERSONAL USE, IMPORTED BY POST OR AIR, AND EXEMPTED FROM ANY PROHIBITION IN RESPECT OF THE IMPORTS THEREOF UNDER THE FOREIGN TRADE (DEVELOPMENT & REGULATION) ACT, 1992 BUT EXCLUDING ARTICLES FALLING UNDER HEADING 9803", - "hsn_code": "9804" - }, - { - "description": "THE FOLLOWING ARTICLES OF STORES ON BOARD OF A VESSEL OR AIRCRAFT ON WHICH DUTY IS LEVIABLE UNDER THE CUSTOMS ACT, 1962 (52 OF 1962) NAMELY:", - "hsn_code": "9805" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES PURE-BRED BREEDING ANIMALS HORSES", - "hsn_code": "1011010" - }, - { - "description": "LIVE HORSES, ASSES, MULESANDHINNIES PURE-BRED BREEDING ANIMALS ASSES", - "hsn_code": "1011020" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES PURE-BRED BREEDING ANIMAL S OTHER", - "hsn_code": "1011090" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES - OTHER - HORSES FOR POLO", - "hsn_code": "1019010" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES - OTHER - ASSES, MULES AND HINNIES AS LIVE STOCK", - "hsn_code": "1019020" - }, - { - "description": "LIVE HORSES, ASSES, MULES AND HINNIES - OTHER - OTHER", - "hsn_code": "1019090" - }, - { - "description": "LIVE BOVINE ANIMALS - BULLS - PURE-BRED BREEDING ANIMALS : ADULT", - "hsn_code": "1021010" - }, - { - "description": "LIVE BOVINE ANIMALS - BULLS - PURE-BRED BREEDING ANIMALS COWS, ADULT", - "hsn_code": "1021020" - }, - { - "description": "LIVE BOVINE ANIMALS- BULLS - PURE-BRED BREEDING ANIMALS BUFFALOES, ADULT AND\nCALVES", - "hsn_code": "1021030" - }, - { - "description": "LIVE BOVINE ANIMALS - BULLS - PURE-BRED BREEDING ANIMALS OTHER", - "hsn_code": "1021090" - }, - { - "description": "LIVE BOVINE ANIMALS - OTHER - BULLS - ADULT", - "hsn_code": "1029010" - }, - { - "description": "LIVE BOVINE ANIMALS - OTHER - BUFFALOES, ADULT AND CALVES", - "hsn_code": "1029020" - }, - { - "description": "LIVE BOVINE ANIMALS - OTHER - OTHER", - "hsn_code": "1029090" - }, - { - "description": "LIVE SWINE PURE-BRED BREEDING ANIMALS", - "hsn_code": "1031000" - }, - { - "description": "LIVE SWINE - OTHER - WEIGHING LESS THAN 50 KG.", - "hsn_code": "1039100" - }, - { - "description": "LIVE SWINE- OTHER WEIGHING 50KG. OR MORE", - "hsn_code": "1039200" - }, - { - "description": "LIVE SHEEP AND GOATS - SHEEP : SHEEP INCLUDING LAMB FOR BREEDING PURPOSE", - "hsn_code": "1041010" - }, - { - "description": "LIVE SHEEP A ND GOATS SHEEP OTHER", - "hsn_code": "1041090" - }, - { - "description": "LIVE SHEEP AND GOATS GOATS", - "hsn_code": "1042000" - }, - { - "description": "SPECIES GALLU SDOMESTICUS, DUCKS, GEESE, TURKEYS AND GUINEA FOWLS WEIGHING NOT\nMORE THAN 185G : FOWLSOFTHESPECIESGALLUSDOMESTICUS", - "hsn_code": "1051100" - }, - { - "description": "SPECIES GALLU SDOMESTICUS, DUCKS, GEESE, TURKEYS AND GUINEA FOWLS WEIGHING NOT\nMORE THAN 185G : TURKEYS", - "hsn_code": "1051200" - }, - { - "description": "SPECIES GALLU SDOMESTICUS, DUCKS, GEESE, TURKEYS AND GUINEA FOWLS WEIGHING NOT\nMORE THAN 185G : OTHER", - "hsn_code": "1051900" - }, - { - "description": "LIVE POULTRY, THAT IS TO SAY, FOWLS OF THE SPECIES GALLUS DOMESTICUS, DUCKS, GEESE,\nTURKEYS AND GUINEAFOWLS - OTHER - FOWLS OF THE SPECIES GALLUS DOMESTICUS\nWEIGHING NOT MORE THAN 2000G", - "hsn_code": "1059200" - }, - { - "description": "LIVE POULTRY, THAT IS TO SAY, FOWLS OF THE SPECIES GALLUS DOMESTICUS, DUCKS, GEESE,\nTURKEYS AND GUINEAFOWLS - OTHER - FOWLS OF THE SPECIES GALLUSDOMESTICUS WEIGHING\nMORE THAN 2000G,", - "hsn_code": "1059300" - }, - { - "description": "LIVE POULTRY, THAT IS TO SAY, FOWLS OF THE SPECIES GALLUS DOMESTICUS, DUCKS, GEESE,\nTURKEYS AND GUINEAFOWLS - OTHER - FOWLS OF THE SPECIES GALLUS DOMESTICUS", - "hsn_code": "1059400" - }, - { - "description": "SPECIES GALLUSDOMESTICUS, DUCKS, GEESE,TURKEYS AND GUINEA FOWLS - OTHER - OTHER", - "hsn_code": "1059900" - }, - { - "description": "OTHER LIVE ANIMALS MAMMALS : PRIMATES", - "hsn_code": "1061100" - }, - { - "description": "OTHER LIVE ANIMALS MAMMALS WHALES,DOLPHINS AND PORPOISES (MAMMALS OF THE\nORDER CETACEA); MANATEES AND DUGONGS(MAMMALS OF THE ORDER SIRENIA)", - "hsn_code": "1061200" - }, - { - "description": "OTHER LIVE ANIMALS MAMMALS OTHER", - "hsn_code": "1061900" - }, - { - "description": "OTHER LIVE ANIMALS REPTILES (INCLUDING SNAKES AND TURTLES)", - "hsn_code": "1062000" - }, - { - "description": "OTHER LIVE ANIMALS BIRDS : BIRDS OF PREY", - "hsn_code": "1063100" - }, - { - "description": "OTHER LIVE ANIMALS BIRDS PSITTACIFORMES(INCLUDING PARROTS, PARAKEETS,MACAWS AND\nCOCKATOOS)", - "hsn_code": "1063200" - }, - { - "description": "OTHER LIVE ANIMALS BIRDS OTHER", - "hsn_code": "1063900" - }, - { - "description": "OTHERLIVE ANIMALS- OTHER - BEESANDOTHERINSECTS,NOTELSEWHEREINCLUDEDORSPECIFIED", - "hsn_code": "1069010" - }, - { - "description": "OTHER LIVE ANIMALS - OTHER - PURE LINE STOCK", - "hsn_code": "1069020" - }, - { - "description": "OTHER LIVE ANIMALS - OTHER - OTHER", - "hsn_code": "1069090" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FRESH AND CHILLED CARCASSES AND HALF CARCASSES", - "hsn_code": "2011000" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FRESH AND CHILLED OTHER CUTS WITH BONE IN", - "hsn_code": "2012000" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FRESH AND CHILLED BONELESS", - "hsn_code": "2013000" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FROZEN CARCASSES AND HALF-CARCASSES", - "hsn_code": "2021000" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FROZEN OTHER CUTS WITH BONE IN", - "hsn_code": "2022000" - }, - { - "description": "MEAT OF BOVINE ANIMALS, FROZEN BONELESS", - "hsn_code": "2023000" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN FRESH OR CHILLED : CARCASSES AND HALF\nCARCASSES", - "hsn_code": "2031100" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN HAMS, SHOULDERS AND CUTS THERE OF, WITH\nBONE IN", - "hsn_code": "2031200" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN HAMS, SHOULDERS AND CUTS THERE OF, WITH\nBONE INOTHER", - "hsn_code": "2031900" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN FROZEN : CARCASSES AND HALF-CARCASSES", - "hsn_code": "2032100" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN FROZEN : HAMS, SHOULDERS AND CUTS THERE\nOF, WITH BONE IN", - "hsn_code": "2032200" - }, - { - "description": "MEAT OF SWINE, FRESH, CHILLED OR FROZEN FROZEN OTHER", - "hsn_code": "2032900" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN CARCASSES AND HALF CARCASSES OF\nLAMB, FRESH OR CHILLED", - "hsn_code": "2041000" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHER MEAT OF SHEEP, FRESH OR\nCHILLED : CARCASSES AND HALF CARCASSES", - "hsn_code": "2042100" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHERMEAT OF SHEEP, FRESH OR\nCHILLED : OTHER CUTS WITH BONE IN", - "hsn_code": "2042200" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHER MEAT OF SHEEP, FRESH OR\nCHILLED : BONELESS", - "hsn_code": "2042300" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN CARCASSES AND HALFCARCASSES OF\nLAMB, FROZEN", - "hsn_code": "2043000" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHERMEAT OF SHEEP, FROZEN :\nCARCASSES AND HALF-CARCASSES", - "hsn_code": "2044100" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHER MEAT OF SHEEP, FROZEN :\nOTHER CUTS WITH BONE IN", - "hsn_code": "2044200" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN OTHER MEAT OF SHEEP, FROZEN :\nBONELESS", - "hsn_code": "2044300" - }, - { - "description": "MEAT OF SHEEP OR GOATS, FRESH, CHILLED OR FROZEN MEAT OF GOATS", - "hsn_code": "2045000" - }, - { - "description": "MEAT OF HORSES, ASSES, MULES OR HINNIES, FRESH, CHILLED OR FROZEN", - "hsn_code": "2050000" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF BOVINE ANIMALS, FRESH OR CHILLED", - "hsn_code": "2061000" - }, - { - "description": "EDIBLE OFFAL OF BOVINE ANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF BOVINE ANIMALS, FROZEN : TONGUES", - "hsn_code": "2062100" - }, - { - "description": "EDIBLE OFFAL OF BOVINE ANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHI LLED OR FROZEN OF BOVINE ANIMALS, FROZEN : LIVERS", - "hsn_code": "2062200" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF BOVINE ANIMALS, FROZEN : OTHER", - "hsn_code": "2062900" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF SWINE, FRESH OR CHILLED", - "hsn_code": "2063000" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF SWINE, FROZEN : LIVERS", - "hsn_code": "2064100" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OF SWINE, FROZEN : OTHER", - "hsn_code": "2064900" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OTHER, FRESH OR CHILLED OF SHEEP OR GOATS", - "hsn_code": "2068010" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OTHER, FRESH OR CHILLED OTHER", - "hsn_code": "2068090" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OTHER, FROZEN : OF SHEEP OR GOATS", - "hsn_code": "2069010" - }, - { - "description": "EDIBLE OFFAL OF BOVINEANIMALS, SWINE, SHEEP, GOATS, HORSES, ASSES, MULES OR HINNIES,\nFRESH, CHILLED OR FROZEN OTHER, FROZEN : OTHER", - "hsn_code": "2069090" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nFOWLS OF THE SPECIES GALLUSDOMESTICUS : NOT CUT IN PIECES, FRESH OR CHILLED", - "hsn_code": "2071100" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nFOWLS OF THE SPECIES GALLUSDOMESTICUS : NOT CUT IN PIECES, FROZEN", - "hsn_code": "2071200" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nFOWLS OF THE SPECIES GALLUSDOMESTICUS : CUTS AND OFFAL, FRESH OR CHILLED", - "hsn_code": "2071300" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nFOWLS OF THE SPECIES GALLUSDOMESTICUS : CUTS AND OFFAL, FROZEN", - "hsn_code": "2071400" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nTURKEYS NOT CUT IN PIECES, FRESH OR CHILLED", - "hsn_code": "2072400" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN OF\nTURKEYS NOT CUT IN PIECES, FROZEN", - "hsn_code": "2072500" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THEPOULTRY OF HEADING0105, FRESH, CHILLED OR FROZEN CUTS\nAND OFFAL, FRESH OR CHILLED", - "hsn_code": "2072600" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nDUCKS --NOT CUT IN PIECES, FRESH OR CHILLED", - "hsn_code": "2074100" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nDUCKES -- NOT CUT IN PIECES, FROZEN", - "hsn_code": "2074200" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nDUCKS -- FATTY LIVERS, FRESH OR CHILLED", - "hsn_code": "2074300" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN-OF\nDUCKS -- OTHER, FRESH OR CHILLED", - "hsn_code": "2074400" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nDUCKS --OTHER, FROZEN", - "hsn_code": "2074500" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nGEESE -- NOT CUT IN PIECES, FRESH OR CHILLED", - "hsn_code": "2075100" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nGEESE -- NOT CUT IN PIECES, FROZEN", - "hsn_code": "2075200" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nGEESE -- FATTY LIVERS, FRESH OR CHILLED", - "hsn_code": "2075300" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN-OF\nGEESE --OTHER, FRESH OR CHILLED", - "hsn_code": "2075400" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN-OF\nGEESE -- OTHER, FROZEN", - "hsn_code": "2075500" - }, - { - "description": "MEAT, AND EDIBLE OFFAL, OF THE POULTRY OF HEADING 0105, FRESH, CHILLED OR FROZEN- OF\nGEESE - OF GUINEA FOWLS", - "hsn_code": "2076000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OF RABBITS OR HARES", - "hsn_code": "2081000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN FROGR LEGS", - "hsn_code": "2082000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OF PRIMATES", - "hsn_code": "2083000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OF WHALES, DOLPHINS\nAND P OR POISES(MAMMALS OF THE OR DER CATACEA); OF MANATEES AND\nDUGONGS(MAMMALS OF THE OR DER SIRENIA)", - "hsn_code": "2084000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OF REPTILES(INCLUDING\nSNAKES AND TURTLES)", - "hsn_code": "2085000" - }, - { - "description": "Of whales, dolphins and porpoises (mammalsof the order cetacea); of manatees and dugongs\n(mammals of the order sirenia)- of camels and other camelids (Camelidae)", - "hsn_code": "2086000" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OTHER : OF WILD ANIMALS", - "hsn_code": "2089010" - }, - { - "description": "OTHER MEAT AND EDIBLE MEAT OFFAL, FRESH, CHILLED OR FROZEN OTHER : OTHER", - "hsn_code": "2089090" - }, - { - "description": "PIG FAT, FREE OF LEAN MEAT, AND POULTRY FAT, NOT RENDERED OR OTHERWSE EXTRACTED,\nFRESH, CHILLED, FROZEN, SALTED, IN BRINE, DRIED OR SMOKED - OF PIGS", - "hsn_code": "2091000" - }, - { - "description": "PIG FAT, FREE OF LEAN MEAT, AND POULTRY FAT, NOT RENDERED OR OTHERWSE EXTRACTED,\nFRESH, CHILLED, FROZEN, SALTED, IN BRINE, DRIED OR SMOKED - OTHER", - "hsn_code": "2099000" - }, - { - "description": "MEAT AND EDIBLEMEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLEFLOURS AND\nMEALS OF MEAT OR MEAT OFFALMEAT OF SWINE : HAMS, SHOULDERS AND CUTS THERE OF,\nWITH BONE IN", - "hsn_code": "2101100" - }, - { - "description": "MEAT AND EDIBLEMEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLEFLOURS AND\nMEALS OF MEAT OR MEAT OFFALMEAT OF SWINE : BELLIES(STREAKY) AND CUTS THERE OF", - "hsn_code": "2101200" - }, - { - "description": "MEAT AND EDIBLEMEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLEFLOURS AND\nMEALS OF MEAT OR MEAT OFFALMEAT OF SWINE : OTHER", - "hsn_code": "2101900" - }, - { - "description": "MEAT AND EDIBLEMEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLEFLOURS AND\nMEALS OF MEAT OR MEAT OFFALMEAT OF BOVINE ANIMALS", - "hsn_code": "2102000" - }, - { - "description": "MEAT AND EDIBLE MEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLE FLOURS AND\nMEALS OF MEAT OR MEAT OFFAL-OTHER, INCLUDING EDIBLE FLOURS AND MEALS OF MEAT OR\nMEAT OFFAL : OF PRIMATES", - "hsn_code": "2109100" - }, - { - "description": "MEAT AND EDIBLEMEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLE FLOURS AND\nMEALS OF MEAT OR MEAT OFFAL-OTHER, INCLUDING EDIBLE FLOURS AND MEALS OF MEAT OR\nMEAT OFFAL : OF WHALES, DOLPHINS AND PORPOISES(MAMMALS OF THE ORDER CATECEA); OF\nMANATEES AND DUGONGS(MAMMALS OF THE ORDER SIRENIA)", - "hsn_code": "2109200" - }, - { - "description": "MEAT AND EDIBLE MEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLE FLOURS AND\nMEALS OF MEAT OR MEAT OFFAL-OTHER, INCLUDING EDIBLE FLOURS AND MEALS OF MEAT OR\nMEAT OFFAL : OF REPTILES(INCLUDING SNAKES AND TURTLES)", - "hsn_code": "2109300" - }, - { - "description": "MEAT AND EDIBLE MEAT OFFAL, SALTED, INBRINE, DRIED OR SMOKED;EDIBLE FLOURS AND\nMEALS OF MEAT OR MEAT OFFAL-OTHER, INCLUDING EDIBLE FLOURS AND MEALS OF MEAT OR\nMEAT OFFAL -- OTHER", - "hsn_code": "2109900" - }, - { - "description": "LIVE FISH -ORNAMENTAL FISH--FRESHWATER", - "hsn_code": "3011100" - }, - { - "description": "LIVE FISH -ORNAMENTAL FISH--OTHER", - "hsn_code": "3011900" - }, - { - "description": "LIVE FISHOTHER LIVE FISH TROUT (SALMO TRUTTA, ONCORHYNCHUS MYKISS, ONCORHYNCHUS\nCLARKI, ONCORHYNCHUSAGUABONITA, ONCORHYNCHUS GILAE,ONCORHYNCHUS APACHE AND\nONCORHYNCHUSCHRYSOGASTER", - "hsn_code": "3019100" - }, - { - "description": "LIVE FISHOTHER LIVE FISH EELS (ANGUILLA SPP.)", - "hsn_code": "3019200" - }, - { - "description": "LIVE FISH-OTHER LIVE FISH-- BLUEFIN TUNAS (THUNNUS THYNNUS)", - "hsn_code": "3019400" - }, - { - "description": "LIVE FISH-OTHER LIVE FISH--SOUTHERN BLUEFIN TUNAS (THUNNUS MACCOYII)", - "hsn_code": "3019500" - }, - { - "description": "LIVE FISHOTHER LIVE FISH OTHER", - "hsn_code": "3019900" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304SALMONIDAE, EXCLUDING LIVERS AND ROES : TROUT (SALMO TRUTTA, ONCORHYNCHUS\nMYKISS, ONCORHYNCHUS CLARKI, ONCORHYNCHUSAGUABONITA, ONCORHYNCHUS\nGILAE,ONCORHYNCHUS APACHE AND ONCORHYNCHUSCHRYSOGASTER)", - "hsn_code": "3021100" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304-\nSALMONIDAE, EXCLUDING LIVERS AND ROES : --PACIFIC SALMON (ONCORHYNCHUS NERKA,\nONCORHYNCHUS GORBUSCHA, ONCORHYNCHUSKETA, ONCORHYNCHUS\nTSCHAWYTSCHA,ONCORHYNCHUS KISUTCH, ONCORHYNCHUSMASOU AND ONCORHYNCHUS\nRHODURUS)", - "hsn_code": "3021300" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304-\nSALMONIDAE, EXCLUDING LIVERS AND ROES : --ATLANTIC SALMON (SALMO SALAR) AND\nDANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3021400" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304SALMONIDAE, EXCLUDING LIVERS AND ROES : OTHER", - "hsn_code": "3021900" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304FLAT\nFISH (PLEUTRONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : HALIBUT (REINHARDTIUS HIPPOGLOSSOIDES,\nHIPPOGLOSSUS HIPPOGLOSSUS, HIPPOGLOSSUSSTENOLEPIS)", - "hsn_code": "3022100" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304FLAT\nFISH (PLEUTRONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : PLAICE (PLEURONECTES PLATESSA)", - "hsn_code": "3022200" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304FLAT\nFISH (PLEUTRONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : SOLE (SOLEA SPP.)", - "hsn_code": "3022300" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304FLAT\nFISH (PLEUTRONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : OTHER", - "hsn_code": "3022900" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : ALBACORE OR LONGFINNED TUNAS", - "hsn_code": "3023100" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : YELLOWFIN TUNAS (THUNNUS\nALBACARES)", - "hsn_code": "3023200" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : SKIPJACK OR STRIPE BELLIED BONITO", - "hsn_code": "3023300" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : BIGEYE TUNAS (THUNNUS OBESUS)", - "hsn_code": "3023400" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : BLUEFIN TUNAS (THUNNUS THYNNUS)", - "hsn_code": "3023500" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : SOUTHERN BLUEFIN TUNAS\n(THUNNUS MACCOYII)", - "hsn_code": "3023600" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE?BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS], EXCLUDING LIVERS AND ROES : OTHER", - "hsn_code": "3023900" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304HERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII) EXCLUDING LIVERS AND ROES", - "hsn_code": "3024000" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:-- HERRINGS\n(CLUPEA HARENGUS, CLUPEA PALLASII)", - "hsn_code": "3024100" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:--\nANCHOVIESB(ENGRAULIS SPP.)", - "hsn_code": "3024200" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:-- SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS)", - "hsn_code": "3024300" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:-- MACKEREL\n(SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS, SCOMBER JAPONICUS)", - "hsn_code": "3024400" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:-- JACK AND\nORSE MACKEREL (TRACHURUS SPP.)", - "hsn_code": "3024500" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND HORSE MACKEREL (TRACHURUS SPP.), COBIA\n(RACHYCENTRON CANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND\nROES:-- COBIA (RACHYCENTRON CANADUM)", - "hsn_code": "3024600" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nHERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII), ANCHOVIES (ENGRAULIS SPP.), SARDINES\n(SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR\nSPRATS(SPRATTUS SPRATTUS) , MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS), JACK AND ORSE MACKEREL (TRACHURUS SPP.), COBIA (RACHYCENTRON\nCANADUM) AND SWORDFISH (XIPHIAS GLADIUS), EXCLUDING LIVERS AND ROES:-- SWORDFISH\n(XIPHIAS GLADIUS)", - "hsn_code": "3024700" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304COD\n(GADUS MORHUA, GADUS OGAC, GADUS MACROCEPHALUS), EXCLUDING LIVERS AND ROES", - "hsn_code": "3025000" - }, - { - "description": "COD (GADUS MORHUA, GADUS OGAS, GADUS MACROCEPHALUS)", - "hsn_code": "3025100" - }, - { - "description": "HADDOCK (MELANOGRAMMUS AEGLEFINUS)", - "hsn_code": "3025200" - }, - { - "description": "COALFISH (POLLACHIUS VIRENS)", - "hsn_code": "3025300" - }, - { - "description": "HAKE (MERLUCCIUS SPP., UROPHYCIS SPP.)", - "hsn_code": "3025400" - }, - { - "description": "ALASKA POLLACK(THERAGRA CHALCORRAMMA)", - "hsn_code": "3025500" - }, - { - "description": "BLUE WHITINGS (MICROMEISITIUS POTASSOU, MICROMEISITIUS AUSTRALIS)", - "hsn_code": "3025600" - }, - { - "description": "OTHER", - "hsn_code": "3025900" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES : SARDINES (SARDINA PILCHARDUS, SARDINOPS\nSPP.), SARDINELLA (SARDINELLA SPP.) BRISLING OR SPRATS(SPRATTUS SPRATTUS)", - "hsn_code": "3026100" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES HADDOCK (MELANOGRAMMUS AEGLEFINUS)", - "hsn_code": "3026200" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES COALFISH (POLLACHIUS VIRENS)", - "hsn_code": "3026300" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES MACKEREL (SCOMBER SCOMBRUS, SCOMBER\nAUSTRALASICUS, SCOMBER JAPONICUS)", - "hsn_code": "3026400" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES DOGFISH AND OTHER SHARKS", - "hsn_code": "3026500" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nOTHER FISH, EXCLUDING LIVERS AND ROES:-- EELS (ANGUILLA SPP.)", - "hsn_code": "3026600" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nOTHER FISH, EXCLUDING LIVERS AND ROES:-- SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3026700" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISH FILLETS AND OTHER FISH MEAT OF HEADING 0304-\nOTHER FISH, EXCLUDING LIVERS AND ROES:-- TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3026800" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES OTHER : HILSA", - "hsn_code": "3026910" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES OTHER DARA", - "hsn_code": "3026920" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES OTHER POMFRET", - "hsn_code": "3026930" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING 0304\nOTHER FISH, EXCLUDING LIVERS AND ROES OTHER OTHER", - "hsn_code": "3026990" - }, - { - "description": "FISH, FRESH OR CHILLED, EXCLUDING FISHFILLETS AND OTHER FISH MEAT OF HEADING\n0304LIVERS AND ROES", - "hsn_code": "3027000" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP.P", - "hsn_code": "3027100" - }, - { - "description": "CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP., ICTALURUS SPP.)", - "hsn_code": "3027200" - }, - { - "description": "CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CLENPHARYNGADON IDELLUS, HYPOTASPP.,\nMYLOPHARYNGODON PICEUS)LMICHTHYS SPP., CIRRHINUS", - "hsn_code": "3027300" - }, - { - "description": "EELS (ANGUILLA SPP.)", - "hsn_code": "3027400" - }, - { - "description": "OTHER", - "hsn_code": "3027900" - }, - { - "description": "DOGFISH AND OTHER SHARKS", - "hsn_code": "3028100" - }, - { - "description": "RAYS AND SKATES (RAJIDAE)", - "hsn_code": "3028200" - }, - { - "description": "TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3028300" - }, - { - "description": "SEA BASS (DICENTRARCHUS SPP.)", - "hsn_code": "3028400" - }, - { - "description": "SEABREAM(SPARIDAE)", - "hsn_code": "3028500" - }, - { - "description": "HILSA", - "hsn_code": "3028910" - }, - { - "description": "DARA", - "hsn_code": "3028920" - }, - { - "description": "POMFRET", - "hsn_code": "3028930" - }, - { - "description": "OTHER", - "hsn_code": "3028990" - }, - { - "description": "LIVERS AND ROES", - "hsn_code": "3029000" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 PACIFIC\nSALMON (ONCORHYNCHUS NERKA,ONCORHYNCHUS GORBUSCHA, ONCORHYNCHUSKETA,\nONCORHYNCHUS TSCHAWYTSCHA,ONCORHYNCHUS KISUTCH, ONCORHYNCHUSMASOU AND\nONCORHYNCHUS RHODURUS),EXCLUDING LIVERS AND ROES : SOCKEYE SALMON (RED-SALMON)\n(ONCORHYNCHUS NERKA)", - "hsn_code": "3031100" - }, - { - "description": "OTHER PACIFIC NSALMON(ONCORHYNCHUS GORBUSCHA, ONCORHYNCHUSKETA,\nONCORHYNCHUS TSCHAWYTSCHA,ONCORHYNCHUS KISUTCH, ONCORHYNCHUSMASOU AND\nONCORHYNCHUS RHODURUS),", - "hsn_code": "3031200" - }, - { - "description": "ATLANTIC SALMON (SALMO SALAR) AND DANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3031300" - }, - { - "description": "TROUT (SALMO TRUTTA, ONCORHYNCHUS MYKISS, ONCORHYNCHUS CLARKI,ONCORHYNCHUS\nAGUABONITA,ONCORHYNCHUS GILAE, ONCORHYNCHUS APACHE ANDONCORHYNCHUS\nCHRYSOGASTER)", - "hsn_code": "3031400" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304? PACIFIC\nSALMON (ONCORHYNCHUS NERKA,ONCORHYNCHUS GORBUSCHA, ONCORHYNCHUSKETA,\nONCORHYNCHUS TSCHAWYTSCHA,ONCORHYNCHUS KISUTCH, ONCORHYNCHUSMASOU AND\nONCORHYNCHUS RHODURUS),EXCLUDING LIVERS AND ROES : OTHER", - "hsn_code": "3031900" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER\nSALMONIDAE, EXCLUDING LIVERS AND ROES TROUT (SALMO TRUTTA, ONCORHYNCHUS\nMYKISS, ONCORHYNCHUS CLARKI,ONCORHYNCHUS AGUABONITA,ONCORHYNCHUS GILAE,\nONCORHYNCHUS APACHE ANDONCORHYNCHUS CHRYSOGASTER)", - "hsn_code": "3032100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER\nSALMONIDAE, EXCLUDING LIVERS AND ROES ATLANTIC SALMON (SALMO SALAR) AND\nDANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3032200" - }, - { - "description": "tilapias(preochromia spp.)", - "hsn_code": "3032300" - }, - { - "description": "CATFISH (PANGASIUS SPP., SILURUS SPP., CLARIAS SPP., ICTALURUS SPP.)", - "hsn_code": "3032400" - }, - { - "description": "CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CLENPHARYNGADON IDELLUS,\nHYPOPHTHALMICTHYS SPP. CIRRHINUS SPP.", - "hsn_code": "3032500" - }, - { - "description": "EELS (ANGUILLA SPP.)", - "hsn_code": "3032600" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER\nSALMONIDAE, EXCLUDING LIVERS AND ROES OTHER", - "hsn_code": "3032900" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 FLAT FISH\n(PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : HALIBUT (REINHARDTIUS HIPPOGLOSSOIDES,\nHIPPOGLOSSUS HIPPOGLOSSUS, HIPPOGLOSSUSSTENOLEPIS)", - "hsn_code": "3033100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304FLAT FISH\n(PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : PLAICE (PLEURONECTES PLATESSA)", - "hsn_code": "3033200" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304FLAT FISH\n(PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : SOLE (SOLEA SPP.)", - "hsn_code": "3033300" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 FLAT FISH\n(PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE), EXCLUDING LIVERS AND ROES : OTHER", - "hsn_code": "3033900" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : FLAT FISH ALBACORE OR LONGFINNED TUNAS\n(THUNNUS ALALUNGA)", - "hsn_code": "3034100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : YELLOWFIN TUNAS (THUNNUS ALBACARES)", - "hsn_code": "3034200" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : SKIPJACK OR STRIPE-BELLIED BONITO", - "hsn_code": "3034300" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : BIGEYE TUNAS (THUNNUS OBESUS)", - "hsn_code": "3034400" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : BLUEFIN TUNAS (THUNNUS THYNNUS)", - "hsn_code": "3034500" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : SOUTHERN BLUEFIN TUNAS (THUNNUS MACCOYII)", - "hsn_code": "3034600" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304TUNAS (OF THE\nGENUS THUNNUS), SKIPJACKOR STRIPE?BELLIED BONITO [EUTHYNNUS(KATSUWONUS)\nPELAMIS], EXCLUDING LIVERSAND ROES : OTHER", - "hsn_code": "3034900" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304HERRINGS\n(CLUPEA HARENGUS, CLUPEA PALLASII), EXCLUDING LIVERS AND ROES", - "hsn_code": "3035000" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 -HERRINGS\n(CLUPEA HARENGUS, CLUPEA PALLASII) AND COD (GADUS MORHUA, GADUS OGAC, GADUS\nMACROCEPHALUS) EXCLUDING LIVERS AND ROES: --HERRINGS (CLUPEA HARENGUS, CLUPEA\nPALLASII)", - "hsn_code": "3035100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 -HERRINGS\n(CLUPEA HARENGUS, CLUPEA PALLASII) AND COD (GADUS MORHUA, GADUS OGAC, GADUS\nMACROCEPHALUS) EXCLUDING LIVERS AND ROES: -- COD (GADUS MORHUA, GADUS OGAC,\nGADUS MACROCEPHALUS)", - "hsn_code": "3035200" - }, - { - "description": "SARDINES (SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA (SARDINELLA SPP.) BRISLING\nOR SPRATS(SPRATTUS SPRATTUS)", - "hsn_code": "3035300" - }, - { - "description": "MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS, SCOMBER JAPONICUS),", - "hsn_code": "3035400" - }, - { - "description": "ACK AND ORSE MACKEREL (TRACHURUS SPP.)", - "hsn_code": "3035500" - }, - { - "description": "COBIA (RACHYCENTRON CANADUM)", - "hsn_code": "3035600" - }, - { - "description": "SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3035700" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 COD (GADUS\nMORHUA, GADUS OGAC, GADUS MACROCEPHALUS), EXCLUDING LIVERS AND ROES", - "hsn_code": "3036000" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 -\nSWORDFISH(XIPHIA GLADIUS) AND TOOTHFISH (DISSOSTICHUS SPP.) EXCLUDING LIVERS AND\nROES: -- SWORDFISH(XIPHIA GLADIUS)", - "hsn_code": "3036100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 -\nSWORDFISH(XIPHIA GLADIUS) AND TOOTHFISH (DISSOSTICHUS SPP.) EXCLUDING LIVERS AND\nROES: -- TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3036200" - }, - { - "description": "COD (GADUS MORHUA, GADUS OGAS, GADUS MACROCEPHALUS)", - "hsn_code": "3036300" - }, - { - "description": "COALFISH (POLLACHIUS VIRENS)", - "hsn_code": "3036500" - }, - { - "description": "HAKE (MERLUCCIUS SPP., UROPHYCIS SPP.)", - "hsn_code": "3036600" - }, - { - "description": "ALASKA POLLACK(THERAGRA CHALCORRAMMA)", - "hsn_code": "3036700" - }, - { - "description": "BLUE WHITINGS (MICROMEISITIUS POTASSOU, MICROMEISITIUS AUSTRALIS)", - "hsn_code": "3036800" - }, - { - "description": "other", - "hsn_code": "3036900" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : SARDINES (SARDINA PILCHARDUS, SARDINOPS SPP.), SARDINELLA\n(SARDINELLA SPP.), BRISLING OR SPRATS(SPRATTUS SPRATTUS)", - "hsn_code": "3037100" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : HADDOCK (MELANOGRAMMUS AEGLEFINUS)", - "hsn_code": "3037200" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : COALFISH (POLLACHIUS VIRENS)", - "hsn_code": "3037300" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : MACKEREL (SCOMBER SCOMBRUS, SCOMBER AUSTRALASICUS,\nSCOMBER JAPONICUS)", - "hsn_code": "3037400" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : DOGFISH AND OTHER SHARKS", - "hsn_code": "3037500" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : EELS (ANGUILLA SPP.)", - "hsn_code": "3037600" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : SEA BASS (DICENTRARCHUS LABRAX, DICENTRARCHUS\nPUNCTATUS)", - "hsn_code": "3037700" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER FISH,\nEXCLUDING LIVERS AND ROES : HAKE (MERLUCCIUS SPP., UROPHYCIS SPP.)", - "hsn_code": "3037800" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER : HILSA", - "hsn_code": "3037910" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER : DARA", - "hsn_code": "3037920" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nRIBBON FISH", - "hsn_code": "3037930" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER : SEER", - "hsn_code": "3037940" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nPOMFRET (WHITE OR SILVER OR BLACK)", - "hsn_code": "3037950" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nGHOLE", - "hsn_code": "3037960" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nTHREADFIN", - "hsn_code": "3037970" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nCROACKER, GROUPER, HOUNDER", - "hsn_code": "3037980" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nEDIBLE FISHMAWS OF WILD LIFE", - "hsn_code": "3037991" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nEDIBLE SHARK FINS OF WILD LIFE", - "hsn_code": "3037992" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304 OTHER :\nOTHER", - "hsn_code": "3037999" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304LIVERS AND\nROES EGG OR EGG YOLK OF FISH INCLUDING SHRIMPS", - "hsn_code": "3038010" - }, - { - "description": "FISH, FROZEN, EXCLUDING FISH FILLETS ANDOTHER FISH MEAT OF HEADING 0304LIVERS AND\nROES OTHER", - "hsn_code": "3038090" - }, - { - "description": "DOGFISH", - "hsn_code": "3038110" - }, - { - "description": "OTHER SHARKS", - "hsn_code": "3038190" - }, - { - "description": "RAYS AND SKATES (RAJIDAE)", - "hsn_code": "3038200" - }, - { - "description": "TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3038300" - }, - { - "description": "SEA BASS (DICENTRARCHUS SPP.)", - "hsn_code": "3038400" - }, - { - "description": "HILSA", - "hsn_code": "3038910" - }, - { - "description": "DARA", - "hsn_code": "3038920" - }, - { - "description": "RIBBON FISH", - "hsn_code": "3038930" - }, - { - "description": "SEER", - "hsn_code": "3038940" - }, - { - "description": "POMFRET (WHITE OR SILVER OR BLACK)", - "hsn_code": "3038950" - }, - { - "description": "GHOLE", - "hsn_code": "3038960" - }, - { - "description": "THR3ADFIN", - "hsn_code": "3038970" - }, - { - "description": "CROACKERS GROUPERS, FLOUNDERS", - "hsn_code": "3038980" - }, - { - "description": "EDIBLE FISHMAWS OF WILD LIFE", - "hsn_code": "3038991" - }, - { - "description": "EDIBLE SHARK FINS OF WILD LIFE", - "hsn_code": "3038992" - }, - { - "description": "OTHER", - "hsn_code": "3038999" - }, - { - "description": "EGG OR EGG YOLK OF FISH", - "hsn_code": "3039010" - }, - { - "description": "OTHER", - "hsn_code": "3039090" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFRESH OR CHILLED", - "hsn_code": "3041000" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN -\nFRESH OR CHILLED: -- SWORDFISH (XIPHIA GLADIUS)", - "hsn_code": "3041100" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFRESH OR CHILLED: -- TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3041200" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN -\nFRESH OR CHILLED: -- OTHER", - "hsn_code": "3041900" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS HILSA", - "hsn_code": "3042010" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS SHARK", - "hsn_code": "3042020" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS SEER", - "hsn_code": "3042030" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS TUNA", - "hsn_code": "3042040" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS CUTTLEFISH", - "hsn_code": "3042050" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS OTHER", - "hsn_code": "3042090" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3042100" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3042200" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS:-- OTHER: --- HILSA", - "hsn_code": "3042910" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: --OTHER: --- SHARK", - "hsn_code": "3042920" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: --OTHER:--- SEER", - "hsn_code": "3042930" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: --OTHER --- TUNA", - "hsn_code": "3042940" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN -\nFROZEN FILLETS: --OTHER: --- CUTTLEFISH", - "hsn_code": "3042950" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nFROZEN FILLETS: --OTHER: --- OTHER", - "hsn_code": "3042990" - }, - { - "description": "TILAPIAS(OREOCHROMIS SPP.P", - "hsn_code": "3043100" - }, - { - "description": "CATFISH (PANGASIUS SPP., SILURUS SPP., CLARIAS SPP., ICTALURUS SPP.)", - "hsn_code": "3043200" - }, - { - "description": "NILE PERCH (LATES NILOTICUS)", - "hsn_code": "3043300" - }, - { - "description": "OTHER", - "hsn_code": "3043900" - }, - { - "description": "PACIFIC SALMON(ONCORHYNCHUS NERKA, ONCORHYNCHUS GORBUSCHA,\nONCORHYNCHUSKETA, ONCORHYNCHUS TSCHAWYTSCHA,ONCORHYNCHUS KISUTCH,\nONCORHYNCHUSMASOU AND ONCORHYNCHUS RHODURUS),ATLANTIC SALMON (SALMO SALAR)\nAND DANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3044100" - }, - { - "description": "TROUT (SALMO TRUTTA, ONCORHYNCHUS MYKISS, ONCORHYNCHUS CLARKI,ONCORHYNCHUS\nAGUABONITA,ONCORHYNCHUS GILAE, ONCORHYNCHUS APACHE ANDONCORHYNCHUS\nCHRYSOGASTER)", - "hsn_code": "3044200" - }, - { - "description": "FLAT FISH (PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE),", - "hsn_code": "3044300" - }, - { - "description": "FISH OF THE FAMILIES BREGMACEROLIDAE, EUCLICHTHYIDAE, GADIDAE, MACROURIDAE,\nMELANONIDAE, MERLUCCIIDAE, MORIDAE AND MURAENOLEPIDIDAE", - "hsn_code": "3044400" - }, - { - "description": "SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3044500" - }, - { - "description": "TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3044600" - }, - { - "description": "HILSA", - "hsn_code": "3044910" - }, - { - "description": "SHARK", - "hsn_code": "3044920" - }, - { - "description": "SEER", - "hsn_code": "3044930" - }, - { - "description": "TUNA", - "hsn_code": "3044940" - }, - { - "description": "OTHER", - "hsn_code": "3044990" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP) ,CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP.,\nICTALURUS SPP.) CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CTENPHARYNGODON\nIDELLUS, HYPOPHTHALMICHTHYS SPP., CIRRHINUS, MYLOPHARYNGODON PICEUS) ,\nEELS(ANGUILLA SPP.),NILE PERCH,(LATES NILOTICUS) AND SNAKEHEADS(CHANNA SPP.)", - "hsn_code": "3045100" - }, - { - "description": "SALMONIDAE", - "hsn_code": "3045200" - }, - { - "description": "FISH OF THE FAMILIES BREGMACEROLIDAE, EUCLICHTHYIDAE, GADIDAE, MACROURIDAE,\nMELANONIDAE, MERLUCCIIDAE, MORIDAE AND MURAENOLEPIDIDAE", - "hsn_code": "3045300" - }, - { - "description": "SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3045400" - }, - { - "description": "TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3045500" - }, - { - "description": "HILSA", - "hsn_code": "3045910" - }, - { - "description": "SHARK", - "hsn_code": "3045920" - }, - { - "description": "SEER", - "hsn_code": "3045930" - }, - { - "description": "TUNA", - "hsn_code": "3045940" - }, - { - "description": "OTHER", - "hsn_code": "3045990" - }, - { - "description": "tilapias(Oreochromia spp.)", - "hsn_code": "3046100" - }, - { - "description": "CATFISH (PANGASIUS SPP., SILURUS SPP., CLARIAS SPP., ICTALURUS SPP.)", - "hsn_code": "3046200" - }, - { - "description": "NILE PERCH (LATES NILOTICUS)", - "hsn_code": "3046300" - }, - { - "description": "OTHER", - "hsn_code": "3046900" - }, - { - "description": "COD (GADUS MORHUA, GADUS OGAS, GADUS MACROCEPHALUS)", - "hsn_code": "3047100" - }, - { - "description": "HADDOCK (MELANOGRAMMUS AEGLEFINUS)", - "hsn_code": "3047200" - }, - { - "description": "COALFISH (POLLACHIUS VIRENS)", - "hsn_code": "3047300" - }, - { - "description": "HAKE (MERLUCCIUS SPP., UROPHYCIS SPP.)", - "hsn_code": "3047400" - }, - { - "description": "ALASKA POLLACK(THERAGRA CHALCORRAMMA)", - "hsn_code": "3047500" - }, - { - "description": "OTHER", - "hsn_code": "3047900" - }, - { - "description": "PACIFIC SALMON(ONCORHYNCHUS NERKA, ONCORHYNCHUS GORBUSCHA,\nONCORHYNCHUSKETA, ONCORHYNCHUS TSCHAWYTSCHA,ONCORHYNCHUS KISUTCH,\nONCORHYNCHUSMASOU AND ONCORHYNCHUS RHODURUS),ATLANTIC SALMON (SALMO SALAR)\nAND DANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3048100" - }, - { - "description": "TROUT (SALMO TRUTTA, ONCORHYNCHUS MYKISS, ONCORHYNCHUS CLARKI,ONCORHYNCHUS\nAGUABONITA,ONCORHYNCHUS GILAE, ONCORHYNCHUS APACHE ANDONCORHYNCHUS\nCHRYSOGASTER)", - "hsn_code": "3048200" - }, - { - "description": "FLAT FISH (PLEURONECTIDAE, BOTHIDAE,CYNOGLOSSIDAE, SOLEIDAE, SCOPHTHALMIDAEAND\nCITHARIDAE),", - "hsn_code": "3048300" - }, - { - "description": "SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3048400" - }, - { - "description": "TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3048500" - }, - { - "description": "HERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII)", - "hsn_code": "3048600" - }, - { - "description": "TUNAS (OF THE GENUS THUNNUS), SKIPJACK ORSTRIPE-BELLIED BONITO [EUTHYNNUS\n(KATSUWONUS)PELAMIS],", - "hsn_code": "3048700" - }, - { - "description": "HILSA", - "hsn_code": "3048910" - }, - { - "description": "SHARK", - "hsn_code": "3048920" - }, - { - "description": "SEER", - "hsn_code": "3048930" - }, - { - "description": "OTHER", - "hsn_code": "3048990" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nOTHER", - "hsn_code": "3049000" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nOTHER: --SWORDFISH (XIPHIAS GLADIUS)", - "hsn_code": "3049100" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nOTHER: --TOOTHFISH (DISSOSTICHUS SPP.)", - "hsn_code": "3049200" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP) ,CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP.,\nICTALURUS SPP.) CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CTENPHARYNGODON\nIDELLUS, HYPOPHTHALMICHTHYS SPP., CIRRHINUS, MYLOPHARYNGODON PICEUS) ,\nEELS(ANGUILLA SPP.),NILE PERCH,(LATES NILOTICUS) AND SNAKEHEADS(CHANNA SPP.)", - "hsn_code": "3049300" - }, - { - "description": "ALASKA POLLACK(THERAGRA CHALCORRAMMA)", - "hsn_code": "3049400" - }, - { - "description": "FISH OF THE FAMILIES BREGMACEROLIDAE, EUCLICHTHYIDAE, GADIDAE, MACROURIDAE,\nMELANONIDAE, MERLUCCIIDAE, MORIDAE AND MURAENOLEPIDIDAE , OTHER THAN ALASKA\nPOLLACK(THERAGRA CHALCORRAMMA)", - "hsn_code": "3049500" - }, - { - "description": "FISH FILLETS AND OTHER FISH MEAT(WHETHER OR NOT MINCED), FRESH,CHILLED OR FROZEN\nOTHER : -- OTHER", - "hsn_code": "3049900" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR\nHUMANCONSUMPTIONFLOURS, MEALS AND PELLETS, OF FISH FIT FOR HUMAN CONSUMPTION", - "hsn_code": "3051000" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nLIVERS AND ROES OF FISH, DRIED, SMOKED, SALTED OR IN BRINE", - "hsn_code": "3052000" - }, - { - "description": "FISH FILLETS, DRIED, SALTED OR IN BRINE, BUT NOT SMOKED", - "hsn_code": "3053000" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP) ,CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP.,\nICTALURUS SPP.) CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CTENPHARYNGODON\nIDELLUS, HYPOPHTHALMICHTHYS SPP., CIRRHINUS, MYLOPHARYNGODON PICEUS) ,\nEELS(ANGUILLA SPP.),NILE PERCH,(LATES NILOTICUS) AND SNAKEHEADS(CHANNA SPP.)", - "hsn_code": "3053100" - }, - { - "description": "FISH OF THE FAMILIES BREGMACEROLIDAE, EUCLICHTHYIDAE, GADIDAE, MACROURIDAE,\nMELANONIDAE, MERLUCCIIDAE, MORIDAE AND MURAENOLEPIDIDAE", - "hsn_code": "3053200" - }, - { - "description": "OTHER", - "hsn_code": "3053900" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nSMOKED FISH, INCLUDING FILLETS : PACIFIC SALMON (ONCORHYNCHUS NERKA,\nONCORHYNCHUS GORBUSCHA, ONCORHYNCHUSKETA, ONCORHYNCHUS\nTSCHAWYTSCHA,ONCORHYNCHUS KISUTCH, ONCORHYNCHUSMASOU AND ONCORHYNCHUS\nRHODURUS),ATLANTIC SALMON (SALMO SALAR)AND DANUBE SALMON (HUCHO HUCHO)", - "hsn_code": "3054100" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nSMOKED FISH, INCLUDING FILLETS : HERRINGS (CLUPEA HARENGUS, CLUPEA PALLASII )", - "hsn_code": "3054200" - }, - { - "description": "TROUT (SALMO TRUTTA, ONCORHYNCHUS MYKISS, ONCORHYNCHUS CLARKI,ONCORHYNCHUS\nAGUABONITA,ONCORHYNCHUS GILAE, ONCORHYNCHUS APACHE ANDONCORHYNCHUS\nCHRYSOGASTER)", - "hsn_code": "3054300" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP) ,CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP.,\nICTALURUS SPP.) CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CTENPHARYNGODON\nIDELLUS, HYPOPHTHALMICHTHYS SPP., CIRRHINUS, MYLOPHARYNGODON PICEUS) ,\nEELS(ANGUILLA SPP.),NILE PERCH,(LATES NILOTICUS) AND SNAKEHEADS(CHANNA SPP.)", - "hsn_code": "3054400" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nSMOKED FISH, INCLUDING FILLETS : OTHER", - "hsn_code": "3054900" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nDRIED FISH, WHETHER OR NOT SALTED BUT NOTSMOKED : COD (GADUS MORHUA, GADUS\nOGAC, GADUS MACROCEPHALUS)", - "hsn_code": "3055100" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nDRIED FISH, WHETHER OR NOT SALTED BUT NOTSMOKED : OTHER : MUMBAI DUCK", - "hsn_code": "3055910" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nDRIED FISH, WHETHER OR NOT SALTED BUT NOTSMOKED : OTHER : SEER WITHOUT HEAD", - "hsn_code": "3055920" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nDRIED FISH, WHETHER OR NOT SALTED BUT NOTSMOKED : OTHER : SPRATS", - "hsn_code": "3055930" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nDRIED FISH, WHETHER OR NOT SALTED BUT NOTSMOKED : OTHER : OTHER", - "hsn_code": "3055990" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nFISH, SALTED BUT NOT DRIED OR SMOKED ANDFISH IN BRINE : HERRINGS (CLUPEA HARENGUS,\nCLUPEA PALLASII )", - "hsn_code": "3056100" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nFISH, SALTED BUT NOT DRIED OR SMOKED ANDFISH IN BRINE : COD (GADUS MORHUA, GADUS\nOGAC, GADUS MACROCEPHALUS)", - "hsn_code": "3056200" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nFISH, SALTED BUT NOT DRIED OR SMOKED ANDFISH IN BRINE : ANCHOVIES (ENGRAULIS SPP. )", - "hsn_code": "3056300" - }, - { - "description": "TILAPIAS (OREOCHROMIS SPP) ,CATFISH (PANGALASIUS SPP.,SILURUS SPP.,CLARIAS SPP.,\nICTALURUS SPP.) CARP(CYPRINUS CARPIO, CARASSIUS CARASSIUS, CTENPHARYNGODON\nIDELLUS, HYPOPHTHALMICHTHYS SPP., CIRRHINUS, MYLOPHARYNGODON PICEUS) ,\nEELS(ANGUILLA SPP.),NILE PERCH,(LATES NILOTICUS) AND SNAKEHEADS(CHANNA SPP.)", - "hsn_code": "3056400" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nOTHER : MUMBAI DUCK", - "hsn_code": "3056910" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nOTHER : SEER WITHOUT HEAD", - "hsn_code": "3056920" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nOTHER : SPRATS", - "hsn_code": "3056930" - }, - { - "description": "FISH, DRIED, SALTED OR IN BRINE; SMOKEDFISH, WHETHER OR NOT COOKED BEFORE ORDURING\nTHE SMOKING PROCESS; FLOURS,MEALS AND PELLETS, OF FISH FIT FOR HUMANCONSUMPTION\nOTHER : OTHER", - "hsn_code": "3056990" - }, - { - "description": "SHARK FINS", - "hsn_code": "3057100" - }, - { - "description": "FISH HEADS,TAILS AND MAWS", - "hsn_code": "3057200" - }, - { - "description": "OTHER", - "hsn_code": "3057900" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTION FROZEN : ROCK LOBSTER AND OTHER SEA CRAW\nFISH(PALINURUS SPP., PANULIRUS SPP., JASUS SPP.)", - "hsn_code": "3061100" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONFROZEN : LOBSTERS (HOMARUS SPP.) WHOLE,\nCOOKED", - "hsn_code": "3061210" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONFROZEN LOBSTERS (HOMARUS SPP.) OTHER", - "hsn_code": "3061290" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONFROZEN : CRABS", - "hsn_code": "3061400" - }, - { - "description": "NORWAY LOBSTERS(NEPHOPS NORVEGICUS)", - "hsn_code": "3061500" - }, - { - "description": "ACCELERATED FREEZE DRIED(AFD)", - "hsn_code": "3061610" - }, - { - "description": "OTHER", - "hsn_code": "3061690" - }, - { - "description": "ACCELERATED FREEZE DRIED(AFD)", - "hsn_code": "3061711" - }, - { - "description": "OTHER", - "hsn_code": "3061719" - }, - { - "description": "OTHER", - "hsn_code": "3061790" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONFROZEN : OTHER, INCLUDING FLOURS, MEALS\nAND PELLETS, OF CRUSTACEANS, FIT FOR HUMAN CONSUMPTION", - "hsn_code": "3061900" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONNOT FROZEN : ROCK LOBSTER AND OTHER SEA\nCRAW FISH(PALINURUS SPP., PANULIRUS SPP., JASUS SPP.)", - "hsn_code": "3062100" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONNOT FROZEN : LOBSTERS (HOMARUS SPP.)", - "hsn_code": "3062200" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONNOT FROZEN : CRABS", - "hsn_code": "3062400" - }, - { - "description": "NORWAY LOBSTERS(NEPHOPS NORVEGICUS)", - "hsn_code": "3062500" - }, - { - "description": "COLD-WATER SHRIMPS AND PRAWNS (PANDALUS SPP, CRANGON CRANGON)", - "hsn_code": "3062600" - }, - { - "description": "POWDERED", - "hsn_code": "3062710" - }, - { - "description": "OTHER", - "hsn_code": "3062790" - }, - { - "description": "CRUSTACEANS, WHETHER IN SHELL OR NOT,LIVE, FRESH, CHILLED, FROZEN, DRIED, SALTEDOR IN\nBRINE; CRUSTACEANS, IN SHELL, COOKEDBY STEAMING OR BY BOILING IN WATER,WHETHER OR\nNOT CHILLED, FROZEN, DRIED,SALTED OR IN BRINE; FLOURS, MEALS ANDPELLETS, OF\nCRUSTACEANS, FIT FOR HUMANCONSUMPTIONNOT FROZEN : OTHER, INCLUDING FLOURS,\nMEALS AND PELLETS, OF CRUSTACEANS, FIT FOR HUMAN CONSUMPTION", - "hsn_code": "3062900" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3071100" - }, - { - "description": "OTHER", - "hsn_code": "3071900" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THANCRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION\nSCALLOPS, INCLUDING QUEEN SCALLOPS, OF THEGENERA PECTEN, CHLAMYS OR PLACOPECTEN\nLIVE, FRESH OR CHILLED", - "hsn_code": "3072100" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION\nSCALLOPS, INCLUDING QUEEN SCALLOPS, OF THEGENERA PECTEN, CHLAMYS OR PLACOPECTEN\nOTHER", - "hsn_code": "3072900" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONMUSSELS\n(MYTILUS SPP., PERNA SPP.) LIVE, FRESH OR CHILLED", - "hsn_code": "3073100" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONOTHER :\nCLAMS, CLAM MEAT (BIVALVES-VICTORITA, SPP., MERTRIX SPP. AND KATALYSIA SPP.)", - "hsn_code": "3073910" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONOTHER :\nOTHER", - "hsn_code": "3073990" - }, - { - "description": "MOLLUSCS, WHETHER IN SHELL OR NOT, LIVE,FRESH, CHILLED, FROZEN, DRIED, SALTED OR\nINBRINE; AQUATIC INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE,\nFRESH,CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE\nFISH (SEPIA OFFICINALIS, ROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES\nSPP., LOLIGO SPP., NOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED CUTTLE\nFISH", - "hsn_code": "3074110" - }, - { - "description": "INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE, FRESH,CHILLED, FROZEN,\nDRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF AQUATICINVERTEBRATES OTHER\nTHAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE FISH (SEPIA OFFICINALIS,\nROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES SPP., LOLIGO SPP.,\nNOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED SQUID", - "hsn_code": "3074120" - }, - { - "description": "INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE, FRESH,CHILLED, FROZEN,\nDRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF AQUATICINVERTEBRATES OTHER\nTHAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE FISH (SEPIA OFFICINALIS,\nROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES SPP., LOLIGO SPP.,\nNOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED OTHER : SQUID TUBES,\nFROZEN", - "hsn_code": "3074910" - }, - { - "description": "INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE, FRESH,CHILLED, FROZEN,\nDRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF AQUATICINVERTEBRATES OTHER\nTHAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE FISH (SEPIA OFFICINALIS,\nROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES SPP., LOLIGO SPP.,\nNOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED OTHER : WHOLE SQUIDS,\nFROZEN", - "hsn_code": "3074920" - }, - { - "description": "INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE, FRESH,CHILLED, FROZEN,\nDRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF AQUATICINVERTEBRATES OTHER\nTHAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE FISH (SEPIA OFFICINALIS,\nROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES SPP., LOLIGO SPP.,\nNOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED OTHER : DRIED SQUIDS", - "hsn_code": "3074930" - }, - { - "description": "INVERTEBRATES OTHER THAN CRUSTACEANS AND MOLLUSCS, LIVE, FRESH,CHILLED, FROZEN,\nDRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF AQUATICINVERTEBRATES OTHER\nTHAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONCUTTLE FISH (SEPIA OFFICINALIS,\nROSSIAMACROSOMA, SEPTIOLA SPP.) AND SQUID(OMMASTREPHES SPP., LOLIGO SPP.,\nNOTOTODARUSSPP., SEPIOTEUTHIS SPP.) : LIVE, FRESH AND CHILLED OTHER : OTHER", - "hsn_code": "3074990" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONOCTOPUS\n(OCTOPUS SPP.) LIVE, FRESH OR CHILLED", - "hsn_code": "3075100" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONOCTOPUS\n(OCTOPUS SPP.) OTHER", - "hsn_code": "3075900" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION SNAILS,\nOTHER THAN SEA SNAILS", - "hsn_code": "3076000" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3077100" - }, - { - "description": "OTHER", - "hsn_code": "3077900" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3078100" - }, - { - "description": "OTHER", - "hsn_code": "3078900" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTIONOTHER,\nINCLUDING FLOURS, MEALS AND PELLETS,OF AQUATIC INVERTEBRATES OTHER\nTHANCRUSTACEANS, FIT FOR HUMAN CONSUMPTION : LIVE, FRESH OR CHILLED", - "hsn_code": "3079100" - }, - { - "description": "OTHER", - "hsn_code": "3079900" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION OTHER :\nSEA SHELL FLESH", - "hsn_code": "3079910" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION OTHER :\nJELLY FISH (RHOPELINA SPP.), DRIED SALTED OR FROZEN", - "hsn_code": "3079920" - }, - { - "description": "CHILLED, FROZEN, DRIED, SALTED OR IN BRINE;FLOURS, MEALS AND PELLETS OF\nAQUATICINVERTEBRATES OTHER THAN CRUSTACEANS,FIT FOR HUMAN CONSUMPTION OTHER :\nOTHER", - "hsn_code": "3079990" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3081100" - }, - { - "description": "OTHER", - "hsn_code": "3081900" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3082100" - }, - { - "description": "OTHER", - "hsn_code": "3082900" - }, - { - "description": "LIVE, FRESH OR CHILLED", - "hsn_code": "3083010" - }, - { - "description": "DRIED, SALTED OR FROZEN", - "hsn_code": "3083020" - }, - { - "description": "OTHER", - "hsn_code": "3089000" - }, - { - "description": "MILK AND CREAM-FAT CONTENT, BY WEIGHT, <= 1%", - "hsn_code": "4011000" - }, - { - "description": "MILK AND CREAM-FAT CONTENT, BY WEIGHT >1% <= 6%", - "hsn_code": "4012000" - }, - { - "description": "Milk and cream, not concentrated nor containing added sugar or other sweetening matter - Of a\nfat content, by weight, exceeding 6% but not exceeding 10%", - "hsn_code": "4014000" - }, - { - "description": "Milk and cream, not concentrated nor containing added sugar or other sweetening matter - Of a\nfat content, by weight, exceeding 10%", - "hsn_code": "4015000" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER SKIMMED IN POWDER, GRANULES OR OTHER SOLID FORMS, OF A FAT CONTENT, BY\nWEIGHT NOT EXCEEDING 1.5% : SKIMMED MILK", - "hsn_code": "4021010" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER IN POWDER, GRANULES OR OTHER SOLID FORMS, OF A FAT CONTENT, BY WEIGHT NOT\nEXCEEDING 1.5% : MILK FOOD FOR BABIES", - "hsn_code": "4021020" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER IN POWDER, GRANULES OR OTHER SOLID FORMS, OF A FAT CONTENT, BY WEIGHT NOT\nEXCEEDING 1.5% : OTHER", - "hsn_code": "4021090" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER IN POWDER, GRANULES OR OTHER SOLID FORMS, OF A FAT CONTENT, BY WEIGHT\nEXCEEDING 1.5% : NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER.", - "hsn_code": "4022100" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER WHOLE MILK", - "hsn_code": "4022910" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER MILK FOR BABIES", - "hsn_code": "4022920" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER", - "hsn_code": "4022990" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER : NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER :\nCONDENSED MILK", - "hsn_code": "4029110" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER : NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER : OTHER", - "hsn_code": "4029190" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER : OTHER : WHOLE MILK", - "hsn_code": "4029910" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER : OTHER : CONDENSED MILK", - "hsn_code": "4029920" - }, - { - "description": "MILK AND CREAM, CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER SWEETENING\nMATTER OTHER : OTHER : OTHER", - "hsn_code": "4029990" - }, - { - "description": "BUTTERMILK, CURDLED MILK AND CREAM, YOGURT, KEPHIR AND OTHER FERMENTED OR\nACIDIFIED MILK AND CREAM, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED\nSUGAR OR OTHER SWEETENING MATTER OR FLAVOURED OR CONTAINING ADDED FRUIT, NUTS\nOR COCOA YOGURT", - "hsn_code": "4031000" - }, - { - "description": "BUTTERMILK, CURDLED MILK AND CREAM, YOGURT, KEPHIR AND OTHER FERMENTED OR\nACIDIFIED MILK AND CREAM, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED\nSUGAR OR OTHER SWEETENING MATTER OR FLAVOURED OR CONTAINING ADDED FRUIT, NUTS\nOR COCOA OTHER BUTTER MILK", - "hsn_code": "4039010" - }, - { - "description": "BUTTERMILK, CURDLED MILK AND CREAM, YOGURT, KEPHIR AND OTHER FERMENTED OR\nACIDIFIED MILK AND CREAM, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED\nSUGAR OR OTHER SWEETENING MATTER OR FLAVOURED OR CONTAINING ADDED FRUIT, NUTS\nOR COCOA OTHER OTHER", - "hsn_code": "4039090" - }, - { - "description": "WHEY, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER; PRODUCTS CONSISTING OF NATURAL MILK CONSTITUENTS, WHETHER\nOR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER, NOT ELSEWHERE\nSPECIFIED OR INCLUDED WHEY AND MODIFIED WHEY, WHETHER OR NOT CONCENTRATED OR\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER : WHEY, CONCENTRATED,\nEVAPORATED OR CONDENSED, LIQUID OR SEMI?SOLID", - "hsn_code": "4041010" - }, - { - "description": "WHEY, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER; PRODUCTS CONSISTING OF NATURAL MILK CONSTITUENTS, WHETHER\nOR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER, NOT ELSEWHERE\nSPECIFIED OR INCLUDED WHEY AND MODIFIED WHEY, WHETHER OR NOT CONCENTRATED OR\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER : WHEY, DRY, BLOCKS AND\nPOWDERED", - "hsn_code": "4041020" - }, - { - "description": "WHEY, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER; PRODUCTS CONSISTING OF NATURAL MILK CONSTITUENTS, WHETHER\nOR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER, NOT ELSEWHERE\nSPECIFIED OR INCLUDED WHEY AND MODIFIED WHEY, WHETHER OR NOT CONCENTRATED OR\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER : OTHER", - "hsn_code": "4041090" - }, - { - "description": "WHEY, WHETHER OR NOT CONCENTRATED OR CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER; PRODUCTS CONSISTING OF NATURAL MILK CONSTITUENTS, WHETHER\nOR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER, NOT ELSEWHERE\nSPECIFIED OR INCLUDED WHEY AND MODIFIED WHEY, WHETHER OR NOT CONCENTRATED OR\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER : OTHER", - "hsn_code": "4049000" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS BUTTER", - "hsn_code": "4051000" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS DAIRY SPREADS", - "hsn_code": "4052000" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS OTHER : BUTTER OIL", - "hsn_code": "4059010" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS OTHER GHEE", - "hsn_code": "4059020" - }, - { - "description": "BUTTER AND OTHER FATS AND OILS DERIVED FROM MILK; DAIRY SPREADS OTHER OTHER", - "hsn_code": "4059090" - }, - { - "description": "CHEESE AND CURD FRESH (UNRIPENED OR UNCURED) CHEESE, INCLUDING WHEY CHEESE AND\nCURD", - "hsn_code": "4061000" - }, - { - "description": "CHEESE AND CURD GRATED OR POWDERED CHEESE, OF ALL KINDS", - "hsn_code": "4062000" - }, - { - "description": "CHEESE AND CURD PROCESSED CHEESE NOT GRATED OR POWDERED", - "hsn_code": "4063000" - }, - { - "description": "CHEESE AND CURD BLUE-VEINED CHEESE AND OTHER CHEESE CONTAINING VEINS PRODUCED BY\nPENICILLIUM ROQUEFORTI", - "hsn_code": "4064000" - }, - { - "description": "CHEESE AND CURD OTHER CHEESE", - "hsn_code": "4069000" - }, - { - "description": "BIRDS EGGS, NOT IN SHELL, AND EGG YOLKS, FRESH, DRIED, COOKED BY STEAMING OR BY\nBOILING IN WATER, MOULDED, FROZEN OR OTHERWISE PRESERVED, WHETHER OR NOT\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER EGG YOLKS : DRIED", - "hsn_code": "4081100" - }, - { - "description": "BIRDS EGGS, NOT IN SHELL, AND EGG YOLKS, FRESH, DRIED, COOKED BY STEAMING OR BY\nBOILING IN WATER, MOULDED, FROZEN OR OTHERWISE PRESERVED, WHETHER OR NOT\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER EGG YOLKS : OTHER", - "hsn_code": "4081900" - }, - { - "description": "BIRDS EGGS, NOT IN SHELL, AND EGG YOLKS, FRESH, DRIED, COOKED BY STEAMING OR BY\nBOILING IN WATER, MOULDED, FROZEN OR OTHERWISE PRESERVED, WHETHER OR NOT\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OTHER : DRIED", - "hsn_code": "4089100" - }, - { - "description": "BIRDS EGGS, NOT IN SHELL, AND EGG YOLKS, FRESH, DRIED, COOKED BY STEAMING OR BY\nBOILING IN WATER, MOULDED, FROZEN OR OTHERWISE PRESERVED, WHETHER OR NOT\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OTHER : OTHER", - "hsn_code": "4089900" - }, - { - "description": "NATURAL HONEY", - "hsn_code": "4090000" - }, - { - "description": "EDIBLE PRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED EDIBLE\nPRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED : OF WILD ANIMALS", - "hsn_code": "4100010" - }, - { - "description": "EDIBLE PRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED EDIBLE\nPRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED : OF WILD ANIMALS\nTURTLE EGGS AND SALANGANES NESTS (BIRDS NESTS)", - "hsn_code": "4100020" - }, - { - "description": "EDIBLE PRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED EDIBLE\nPRODUCTS OF ANIMAL ORIGIN, NOT ELSEWHERE SPECIFIED OR INCLUDED : OTHER", - "hsn_code": "4100090" - }, - { - "description": "HUMAN HAIR, UNWORKED, WHETHER OR - NOT WASHED OR SCOURED; WASTE OF - HUMAN\nHAIR - HUMAN HAIR, UNWORKED, WHETHER OR NOT WASHED OR SCOURED; WASTE OF\nHUMAN HAIR : - HUMAN HAIR, UNWORKED,WHETHER OR NOT WASHED OR SCOURED", - "hsn_code": "5010010" - }, - { - "description": "HUMAN HAIR, UNWORKED, WHETHER OR - NOT WASHED OR SCOURED; WASTE OF - HUMAN\nHAIR - HUMAN HAIR, UNWORKED, WHETHER OR NOT WASHED OR SCOURED; WASTE OF\nHUMAN HAIR : - WASTE OF HUMAN HAIR", - "hsn_code": "5010020" - }, - { - "description": "PIGS, HOGSOR BOARSBRISTLES AND HAIR;BADGER HAIR AND OTHER BRUSH MAKINGHAIR;\nWASTE OF SUCH BRISTLES OR HAIR - PIGS, HOGS OR BOARS BRISTLES AND HAIR AND - WASTE\nTHEREOF : - PIGS, HOGS OR BOARS BRISTLES AND HAIR", - "hsn_code": "5021010" - }, - { - "description": "PIGS, HOGS OR BOARS BRISTLES AND HAIR;BADGER HAIR ANDOTHER BRUSH MAKING - HAIR;\nWASTE OF SUCH BRISTLES OR HAIR - PIGS, HOGS OR BOARS BRISTLES AND HAIR AND WASTE\nTHEREOF : - WASTE OF PIGS, HOGS OR BOARS BRISTLES AND HAIR", - "hsn_code": "5021020" - }, - { - "description": "PIGS, HOGS OR BOARS BRISTLES AND HAIR; - BADGER HAIR AND OTHER BRUSH MAKING - HAIR;\nWASTE OF SUCH BRISTLES OR HAIR - OTHER : - BADGER HAIR AND OTHER BRUSH MAKING HAIR", - "hsn_code": "5029010" - }, - { - "description": "PIGS, HOGS OR BOARS BRISTLES AND HAIR; - BADGER HAIR AND OTHER BRUSH MAKING - HAIR;\nWASTE OF SUCH BRISTLES OR HAIR - OTHER : - YAK TAIL HAIR", - "hsn_code": "5029020" - }, - { - "description": "PIGS, HOGS OR BOARS BRISTLES AND HAIR; - BADGER HAIR AND OTHER BRUSH MAKING - HAIR;\nWASTE OF SUCH BRISTLES OR HAIR - OTHER : - OTHER", - "hsn_code": "5029090" - }, - { - "description": "HORSEHAIR AND HORSEHAIR WASTE, WHETHER OR NOT PUT UP AS A LAYER WITH OR WITHOUT\nSUPPORTING MATERIAL", - "hsn_code": "5030000" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : - GUTS OF CATTLE FOR NATURAL\nFOOD CASINGS", - "hsn_code": "5040010" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : - GUTS OF SHEEP AND GOATS FOR\nNATURAL FOOD CASINGS", - "hsn_code": "5040020" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : GUTS OF OTHER ANIMALS FOR\nNATURAL - FOOD CASINGS : - OF WILD ANIMALS", - "hsn_code": "5040031" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : GUTS OF OTHER ANIMALS FOR\nNATURAL - FOOD CASINGS : - OTHER", - "hsn_code": "5040039" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : - GUTS OTHER THAN FOR NATURAL\nFOOD CASTINGS : - OF WILD ANIMALS", - "hsn_code": "5040041" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : GUTS OTHER THAN FOR NATURAL\nFOOD CASTINGS : - OTHER", - "hsn_code": "5040049" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : BLADDERS AND STOMACHS : - OF\nWILD ANIMALS", - "hsn_code": "5040051" - }, - { - "description": "GUTS, BLADDERS AND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES -\nTHEREOF, FRESH, CHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED - GUTS, BLADDERS\nAND STOMACHS OF ANIMALS - (OTHER THAN FISH), WHOLE AND PIECES - THEREOF, FRESH,\nCHILLED, FROZEN, SALTED, - IN BRINE, DRIED OR SMOKED : BLADDERS AND STOMACHS : - OTHER", - "hsn_code": "5040059" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - FEATHERS OF A KIND USED FOR STUFFING;\nDOWN : - OF WILD BIRDS", - "hsn_code": "5051010" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - FEATHERS OF A KIND USED FOR STUFFING;\nDOWN : - OTHER", - "hsn_code": "5051090" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - PEACOCK TAIL AND WING FEATHER\n(TRIMMED OR NOT)", - "hsn_code": "5059010" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - OTHER FEATHER (EXCLUDING FOR\nSTUFFING - PURPOSE) : - OF WILD BIRDS", - "hsn_code": "5059021" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - OTHER FEATHER (EXCLUDING FOR\nSTUFFING - PURPOSE) : - OTHER", - "hsn_code": "5059029" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - POWDER AND WASTE OF FEATHERS\nOR PARTS OF FEATHERS : - OF WILD BIRDS", - "hsn_code": "5059031" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - POWDER AND WASTE OF FEATHERS\nOR PARTS OF - FEATHERS : - OTHER", - "hsn_code": "5059039" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - SKINS AND OTHER PARTS : OF WILD\nBIRDS", - "hsn_code": "5059091" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS, WITH THEIR - FEATHERS OR DOWN, FEATHERS AND PARTS\nOF - FEATHERS (WHETHER OR NOT WITH TRIMMED - EDGES) AND DOWN, NOT FURTHER\nWORKED THAN - CLEANED, DISINFECTED OR TREATED FOR - PRESERVATION; POWDER AND\nWASTE OF - FEATHERS OR PARTS OF FEATHERS - OTHER : - SKINS AND OTHER PARTS : OTHER", - "hsn_code": "5059099" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : BONES, INCLUDING HORN-CORES, CRUSHED : - - OF\nWILD ANIMALS", - "hsn_code": "5061011" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - - BONES, INCLUDING HORN-CORES, CRUSHED : -\nOTHER", - "hsn_code": "5061019" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - BONE GRIST : OF WILD ANIMALS", - "hsn_code": "5061021" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - BONE GRIST : OTHER", - "hsn_code": "5061029" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - OSSEIN - OF WILD ANIMALS", - "hsn_code": "5061031" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - OSSEIN - OTHER", - "hsn_code": "5061039" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - BONES, HORN-CONES AND PARTS THEREOF, NOT -\nCRUSHED : - OF WILD ANIMALS", - "hsn_code": "5061041" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOSSEIN AND BONES TREATED WITH ACID : - BONES, HORN-CONES AND PARTS THEREOF, NOT -\nCRUSHED : - OTHER", - "hsn_code": "5061049" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOTHER : BONE MEAL : - OF WILD ANIMALS", - "hsn_code": "5069011" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOTHER - BONE MEAL : - : OTHER", - "hsn_code": "5069019" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOTHER : OTHER : OF WILD ANIMALS", - "hsn_code": "5069091" - }, - { - "description": "BONES AND HORN-CORES, UNWORKED, - DEFATTED, SIMPLY PREPARED (BUT NOT CUT TO -\nSHAPE), TREATED WITH ACID OR DEGELATINISED - POWDER AND WASTE OF THESE PRODUCTS -\nOTHER : OTHER : OTHER", - "hsn_code": "5069099" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - IVORY; IVORY POWDER AND WASTE : - IVORY", - "hsn_code": "5071010" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - IVORY; IVORY POWDER AND WASTE : - IVORY\nPOWDER AND WASTE", - "hsn_code": "5071020" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : HOOF MEAL", - "hsn_code": "5079010" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : HORN MEAL", - "hsn_code": "5079020" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : HOOVES, CLAWS, NAILS AND BEAKS", - "hsn_code": "5079030" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : ANTLERS", - "hsn_code": "5079040" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : BUFFALO HORNS", - "hsn_code": "5079050" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : TORTOISE- SHELL", - "hsn_code": "5079060" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : CLAWS AND WASTE OF TORTOISE SHELL", - "hsn_code": "5079070" - }, - { - "description": "IVORY, TORTOISE-SHELL, WHALEBONE AND - WHALEBONE HAIR, HORNS, ANTLERS, HOOVES, -\nNAILS, CLAWS AND BEAKS, UNWORKED OR SIMPLY - PREPARED BUT NOT CUT TO SHAPE;\nPOWDER AND - WASTE OF THESE PRODUCTS - OTHER : OTHER", - "hsn_code": "5079090" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nCORAL", - "hsn_code": "5080010" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nCHANKS", - "hsn_code": "5080020" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nCOWRIES", - "hsn_code": "5080030" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nCUTTLEFISH BONES", - "hsn_code": "5080040" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nSHELLS", - "hsn_code": "5080050" - }, - { - "description": "CORAL AND SIMILAR MATERIALS, UNWORKED - OR SIMPLY PREPARED BUT NOT OTHERWISE -\nWORKED; SHELLS OF MOLLUSCS, CRUSTACEANS - OR ECHINODERMS AND CUTTLE-BONE, -\nUNWORKED OR SIMPLY PREPARED BUT NOT - CUT TO SHAPE, POWDER AND WASTE THEREOF -\nCORAL AND SIMILAR MATERIALS, UNWORKED OR - SIMPLY PREPARED BUT NOT OTHERWISE\nWORKED; - SHELLS OF MOLLUSCS, CRUSTACEANS OR - ECHINODERMS AND CUTTLE-BONE,\nUNWORKED - OR SIMPLY PREPARED BUT NOT CUT TO SHAPE, - POWDER AND WASTE THEREOF : -\nOTHER", - "hsn_code": "5080090" - }, - { - "description": "NATURAL SPONGES OF ANIMAL ORIGIN - NATURAL SPONGES OF ANIMAL ORIGIN : - OF WILD\nLIFE", - "hsn_code": "5090010" - }, - { - "description": "NATURAL SPONGES OF ANIMAL ORIGIN - NATURAL SPONGES OF ANIMAL ORIGIN : - OTHER", - "hsn_code": "5090090" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED -\nAMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED : - BEZOAR,\nCOW (GOOLOCHAN)", - "hsn_code": "5100010" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED -\nAMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED : - OX\nGALLSTONE", - "hsn_code": "5100020" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED -\nAMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED : -\nPLACENTA, FROZEN", - "hsn_code": "5100030" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED -\nAMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED : - OTHER :\nOF WILD ANIMALS", - "hsn_code": "5100091" - }, - { - "description": "AMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED -\nAMBERGRIS, CASTOREUM, CIVET AND MUSK; - CANTHARIDES; BILE, WHETHER OR NOT DRIED; -\nGLANDS AND OTHER ANIMAL PRODUCTS USED - IN THE PREPARATION OF PHARMACEUTICAL -\nPRODUCTS, FRESH, CHILLED, FROZEN OR - OTHERWISE PROVISIONALLY PRESERVED : - OTHER :\nOTHER", - "hsn_code": "5100099" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - BOVINE SEMEN", - "hsn_code": "5111000" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : - PRODUCTS OF FISH OR CRUSTACEANS,\nMOLLUSCS - OR OTHER AQUATIC INVERTEBRATES; DEAD ANIMALS - OF CHAPTER 3 : - FISH NAILS", - "hsn_code": "5119110" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : - PRODUCTS OF FISH OR CRUSTACEANS,\nMOLLUSCS - OR OTHER AQUATIC INVERTEBRATES; DEAD ANIMALS - OF CHAPTER 3 : - FISH TAILS", - "hsn_code": "5119120" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : - PRODUCTS OF FISH OR CRUSTACEANS,\nMOLLUSCS - OR OTHER AQUATIC INVERTEBRATES; DEAD ANIMALS - OF CHAPTER 3 : - OTHER\nFISH WASTE", - "hsn_code": "5119130" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : - PRODUCTS OF FISH OR CRUSTACEANS,\nMOLLUSCS - OR OTHER AQUATIC INVERTEBRATES; DEAD ANIMALS - OF CHAPTER 3 : - OTHER", - "hsn_code": "5119190" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - SILKWORM PUPAE : - ARTEMIA", - "hsn_code": "5119911" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - SILKWORM PUPAE : - OTHER", - "hsn_code": "5119919" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - SINEWS AND TENDONS : - OF\nWILD LIFE", - "hsn_code": "5119921" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - SINEWS AND TENDONS : - OTHER", - "hsn_code": "5119929" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - OTHER : - FROZEN SEMEN,\nOTHER THAN BOVINE; BOVINE EMBRYO", - "hsn_code": "5119991" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - OTHER : - OF WILD LIFE", - "hsn_code": "5119992" - }, - { - "description": "ANIMAL PRODUCTS NOT ELSEWHERE SPECIFIED - OR INCLUDED; DEAD ANIMALS OF CHAPTER 1\nOR 3, - UNFIT FOR HUMAN CONSUMPTION - OTHER : OTHER : - OTHER : - OTHER", - "hsn_code": "5119999" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH\nOR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212 BULBS,\nTUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT", - "hsn_code": "6011000" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH\nOR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212 BULBS,\nTUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, IN GROWTH OR IN FLOWER;\nCHICORY PLANTS AND ROOTS : BULBS, HORTICULTURAL", - "hsn_code": "6012010" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH\nOR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212 BULBS,\nTUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, IN GROWTH OR IN FLOWER;\nCHICORY PLANTS AND ROOTS : CHICORY PLANTS AND ROOTS : PLANTS", - "hsn_code": "6012021" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH\nOR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212 BULBS,\nTUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, IN GROWTH OR IN FLOWER;\nCHICORY PLANTS AND ROOTS : CHICORY PLANTS AND ROOTS : ROOTS", - "hsn_code": "6012022" - }, - { - "description": "BULBS, TUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, DORMANT, IN GROWTH\nOR IN FLOWER; CHICORY PLANTS AND ROOTS OTHER THAN ROOTS OF HEADING 1212 BULBS,\nTUBERS, TUBEROUS ROOTS, CORMS, CROWNS AND RHIZOMES, IN GROWTH OR IN FLOWER;\nCHICORY PLANTS AND ROOTS : OTHER", - "hsn_code": "6012090" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nUNROOTED CUTTINGS AND SLIPS", - "hsn_code": "6021000" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nTREES, SHRUBS AND BUSHES, GRAFTED OR NOT, OF KINDS, WHICH BEAR EDIBLE FRUITS OR\nNUTS : EDIBLE FRUIT OR NUT TREES, GRAFTED OR NOT", - "hsn_code": "6022010" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nTREES, SHRUBS AND BUSHES, GRAFTED OR NOT, OF KINDS, WHICH BEAR EDIBLE FRUITS OR\nNUTS : CACTUS", - "hsn_code": "6022020" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nTREES, SHRUBS AND BUSHES, GRAFTED OR NOT, OF KINDS, WHICH BEAR EDIBLE FRUITS OR\nNUTS : OTHER", - "hsn_code": "6022090" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nRHODODENDRONS AND AZALEAS, GRAFTED OR NOT", - "hsn_code": "6023000" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nROSES, GRAFTED OR NOT", - "hsn_code": "6024000" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nOTHER : MUSHROOM SPAWN", - "hsn_code": "6029010" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nOTHER : FLOWERING PLANTS (EXCLUDING ROSES AND RHODODENDRONS)", - "hsn_code": "6029020" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nOTHER : TISSUE CULTURE PLANT", - "hsn_code": "6029030" - }, - { - "description": "OTHER LIVE PLANTS (INCLUDING THEIR ROOTS), CUTTINGS AND SLIPS; MUSHROOM SPAWN\nOTHER : OTHER", - "hsn_code": "6029090" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED FRESH", - "hsn_code": "6031000" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED -FRESH: --\nROSES", - "hsn_code": "6031100" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED -FRESH: --\nCARNATIONS", - "hsn_code": "6031200" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED -FRESH: --\nCHRYSANTHEMUMS", - "hsn_code": "6031300" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED -FRESH: --\nCHRYSANTHEMUMS", - "hsn_code": "6031400" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED -FRESH: --\nOTHER", - "hsn_code": "6031900" - }, - { - "description": "CUT FLOWERS AND FLOWER BUDS OF A KIND SUITABLE FOR BOUQUETS OR FOR ORNAMENTAL\nPURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE PREPARED OTHER", - "hsn_code": "6039000" - }, - { - "description": "FOLIAGE, BRANCHES AND OTHER PARTS OF PLANTS, WITHOUT FLOWERS OR FLOWER BUDS,\nAND GRASSES, MOSSES AND LICHENS, BEING GOODS OF A KIND SUITABLE FOR BOUQUETS OR\nFOR ORNAMENTAL PURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE\nPREPARED MOSSES AND LICHENS", - "hsn_code": "6041000" - }, - { - "description": "FOLIAGE, BRANCHES AND OTHER PARTS OF PLANTS, WITHOUT FLOWERS OR FLOWER BUDS,\nAND GRASSES, MOSSES AND LICHENS, BEING GOODS OF A KIND SUITABLE FOR BOUQUETS OR\nFOR ORNAMENTAL PURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE\nPREPARED OTHER : FRESH", - "hsn_code": "6049100" - }, - { - "description": "FOLIAGE, BRANCHES AND OTHER PARTS OF PLANTS, WITHOUT FLOWERS OR FLOWER BUDS,\nAND GRASSES, MOSSES AND LICHENS, BEING GOODS OF A KIND SUITABLE FOR BOUQUETS OR\nFOR ORNAMENTAL PURPOSES, FRESH, DRIED, DYED, BLEACHED, IMPREGNATED OR OTHERWISE\nPREPARED OTHER : OTHER", - "hsn_code": "6049900" - }, - { - "description": "POTATOES, FRESH OR CHILLED SEED", - "hsn_code": "7011000" - }, - { - "description": "POTATOES, FRESH OR CHILLED OTHER", - "hsn_code": "7019000" - }, - { - "description": "TOMATOES, FRESH OR CHILLED", - "hsn_code": "7020000" - }, - { - "description": "ONIONS, SHALLOTS, GARLIC, LEEKS AND OTHERALLIACEOUS VEGETABLES, FRESH OR CHILLED\nONIONS AND SHALLOTS ONIONS", - "hsn_code": "7031010" - }, - { - "description": "ONIONS, SHALLOTS, GARLIC, LEEKS AND OTHERALLIACEOUS VEGETABLES, FRESH OR CHILLED\nONIONS AND SHALLOTS SHALLOTS", - "hsn_code": "7031020" - }, - { - "description": "ONIONS, SHALLOTS, GARLIC, LEEKS AND OTHERALLIACEOUS VEGETABLES, FRESH OR CHILLED\nGARLIC", - "hsn_code": "7032000" - }, - { - "description": "ONIONS, SHALLOTS, GARLIC, LEEKS AND OTHERALLIACEOUS VEGETABLES, FRESH OR CHILLED\nLEEKS AND OTHER ALLIACEOUS VEGETABLES", - "hsn_code": "7039000" - }, - { - "description": "CABBAGES, CAULIFLOWERS, KOHLRABI, KALEAND SIMILAR EDIBLE BRASSICAS, FRESH ORCHILLED\nCAULIFLOWERS AND HEADED BROCCOLI", - "hsn_code": "7041000" - }, - { - "description": "CABBAGES, CAULIFLOWERS, KOHLRABI, KALEAND SIMILAR EDIBLE BRASSICAS, FRESH ORCHILLED\nBRUSSELS SPROUTS", - "hsn_code": "7042000" - }, - { - "description": "CABBAGES, CAULIFLOWERS, KOHLRABI, KALEAND SIMILAR EDIBLE BRASSICAS, FRESH ORCHILLED\nOTHER", - "hsn_code": "7049000" - }, - { - "description": "LETTUCE (LACTUCASATIVA) AND CHICORY(CICHORIUM SPP. ), FRESH OR CHILLED LETTUCE :\nCABBAGE LETTUCE (HEAD LETTUCE)", - "hsn_code": "7051100" - }, - { - "description": "LETTUCE (LACTUCASATIVA) AND CHICORY(CICHORIUM SPP. ), FRESH OR CHILLED LETTUCE :\nOTHER", - "hsn_code": "7051900" - }, - { - "description": "LETTUCE (LACTUCASATIVA) AND CHICORY(CICHORIUM SPP. ), FRESH OR CHILLED CHICORY\nWITLOOF CHICORY (CICHORIUM INTYBUS VAR. FOLIOSUM)", - "hsn_code": "7052100" - }, - { - "description": "LETTUCE (LACTUCASATIVA) AND CHICORY(CICHORIUM SPP. ), FRESH OR CHILLEDCHICORY OTHER", - "hsn_code": "7052900" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY,CELERIAC, RADISHES AND SIMILAR EDIBLEROOTS,\nFRESH OR CHILLEDCARROTS AND TURNIPS", - "hsn_code": "7061000" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY,CELERIAC, RADISHES AND SIMILAR EDIBLEROOTS,\nFRESH OR CHILLED OTHER : HORSE RADISH", - "hsn_code": "7069010" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY,CELERIAC, RADISHES AND SIMILAR EDIBLEROOTS,\nFRESH OR CHILLED OTHER OTHER RADISH", - "hsn_code": "7069020" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY,CELERIAC, RADISHES AND SIMILAR EDIBLEROOTS,\nFRESH OR CHILLED OTHER SALAD BEETROOT", - "hsn_code": "7069030" - }, - { - "description": "CARROTS, TURNIPS, SALAD BEETROOT, SALSIFY,CELERIAC, RADISHES AND SIMILAR EDIBLEROOTS,\nFRESH OR CHILLED OTHER OTHER", - "hsn_code": "7069090" - }, - { - "description": "CUCUMBERS OR GHERKINS, FRESH OR CHILLED", - "hsn_code": "7070000" - }, - { - "description": "LEGUMINOUS VEGETABLES, SHELLED ORUNSHELLED, FRESH OR CHILLED PEAS (PISUM SATIVUM)", - "hsn_code": "7081000" - }, - { - "description": "LEGUMINOUS VEGETABLES, SHELLED ORUNSHELLED, FRESH OR CHILLED BEANS (VIGNA SPP.,\nPHASEOLUS SPP.)", - "hsn_code": "7082000" - }, - { - "description": "LEGUMINOUS VEGETABLES, SHELLED ORUNSHELLED, FRESH OR CHILLED OTHER LEGUMINOUS\nVEGETABLES", - "hsn_code": "7089000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED GLOBE ARTICHOKES", - "hsn_code": "7091000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED ASPARAGUS", - "hsn_code": "7092000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED AUBERGINES (EGG PLANTS)", - "hsn_code": "7093000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED CELERY OTHER THAN CELERIAC", - "hsn_code": "7094000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED MUSHROOMS AND TRUFFLES MUSHROOMS OF THE\nGENUS AGARICUS", - "hsn_code": "7095100" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED MUSHROOMS AND TRUFFLES TRUFFLES", - "hsn_code": "7095200" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED MUSHROOMS AND TRUFFLES OTHER", - "hsn_code": "7095900" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED FRUITS OF THE GENUS CAPSICUM OR OF THEGENUS\nPIMENTA : GREEN CHILLY", - "hsn_code": "7096010" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED FRUITS OF THE GENUS CAPSICUM OR OF THEGENUS\nPIMENTA : OTHER", - "hsn_code": "7096090" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED SPINACH, NEW ZEALAND SPINACH AND ORACHE\nSPINACH (GARDEN SPINACH)", - "hsn_code": "7097000" - }, - { - "description": "OTHER VEGETABLES, FRESH OR CHILLED OTHER : OTHER", - "hsn_code": "7099090" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --GLOBE ARTICHOKES", - "hsn_code": "7099100" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --OLIVES", - "hsn_code": "7099200" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --PUMPKINS,SQUASH AND GOURDS\n(CUCURBITA SPP.)", - "hsn_code": "7099300" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --OTHER---GREEN PEPPER", - "hsn_code": "7099910" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --OTHER---MIXED VEGETABLES", - "hsn_code": "7099920" - }, - { - "description": "OTHER VEGETABLES,FRESH OR CHILLED - OTHER --OTHER---OTHER", - "hsn_code": "7099990" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN POTATOES", - "hsn_code": "7101000" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN\nLEGUMINOUS VEGETABLES, SHELLED OR UNSHELLED : PEAS (PISUM SATIVUM)", - "hsn_code": "7102100" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN\nLEGUMINOUS VEGETABLES, SHELLED OR UNSHELLED BEANS (VIGNA SPP., PHASEOLUS SPP.)", - "hsn_code": "7102200" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN\nLEGUMINOUS VEGETABLES, SHELLED OR UNSHELLED OTHER", - "hsn_code": "7102900" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN SPINACH,\nNEW ZEALAND SPINACH AND ORACHE SPINACH (GARDEN SPINACH)", - "hsn_code": "7103000" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN SWEET\nCORN", - "hsn_code": "7104000" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN OTHER\nVEGETABLES TERRAGON", - "hsn_code": "7108010" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN OTHER\nVEGETABLES OTHER", - "hsn_code": "7108090" - }, - { - "description": "VEGETABLES (UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER), FROZEN MIXTURES\nOF VEGETABLES", - "hsn_code": "7109000" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS, BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION OLIVES", - "hsn_code": "7112000" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION CAPERS", - "hsn_code": "7113000" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTIONCUCUMBERS AND GHERKINS", - "hsn_code": "7114000" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION MUSHROOMS AND TRUFFLES MUSHROOMS OF THE GENSUS\nAGARICUS", - "hsn_code": "7115100" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION MUSHROOMS AND TRUFFLES OTHER", - "hsn_code": "7115900" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION OTHER VEGETABLES; MIXTURES OF VEGETABLES : GREEN PEPPER IN\nBRINE", - "hsn_code": "7119010" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION OTHER VEGETABLES; MIXTURES OF VEGETABLES : ASSORTED\nCANNED VEGETABLES", - "hsn_code": "7119020" - }, - { - "description": "VEGETABLES PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN BRINE, IN\nSULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT STATE FOR\nIMMEDIATE CONSUMPTION OTHER VEGETABLES; MIXTURES OF VEGETABLES : OTHER", - "hsn_code": "7119090" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED ONIONS", - "hsn_code": "7122000" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED MUSHROOMS, WOOD EARS (AURICULARIA SPP.),JELLY FUNGI (TREMELLA SPP.) AND\nTRUFFLES : MUSHROOMS OF THE GENUS LGARICUS", - "hsn_code": "7123100" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED MUSHROOMS, WOOD EARS (AURICULARIA SPP.),JELLY FUNGI (TREMELLA SPP.) AND\nTRUFFLES : WOOD EARS (AURICULARIA SPP.)", - "hsn_code": "7123200" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED ?MUSHROOMS, WOOD EARS (AURICULARIA SPP.),JELLY FUNGI (TREMELLA SPP.) AND\nTRUFFLES : JELLY FUNGI (TREMELLA SPP.)", - "hsn_code": "7123300" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED ? MUSHROOMS, WOOD EARS (AURICULARIA SPP.),JELLY FUNGI (TREMELLA SPP.) AND\nTRUFFLES : OTHER", - "hsn_code": "7123900" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : ASPARAGUS", - "hsn_code": "7129010" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : DEHYDRATED GARLIC POWDER", - "hsn_code": "7129020" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : DEHYDRATED GARLIC FLAKES", - "hsn_code": "7129030" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : DRIED GARLIC", - "hsn_code": "7129040" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : MARJORAM, OREGANO", - "hsn_code": "7129050" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : POTATOES", - "hsn_code": "7129060" - }, - { - "description": "DRIED VEGETABLES, WHOLE, CUT, SLICED,BROKEN OR IN POWDER, BUT NOT FURTHER\nPREPARED OTHER VEGETABLES; MIXTURES OF VEGETABLES : OTHER", - "hsn_code": "7129090" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT PEAS (PISUM\nSATIVUM)", - "hsn_code": "7131000" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT CHICKPEAS\n(GARBANZOS) BEANS (VIGNA SPP., PHASEOLUS SPP.) :", - "hsn_code": "7132000" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BEANS (VIGNA\nSPP., PHASEOLUS SPP.) : BEANS OF THE SPECIES VIGNA MUNGO (L.) HEPPER OR VIGNA RADIATA\n(L.) WILCZEK", - "hsn_code": "7133100" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BEANS (VIGNA\nSPP., PHASEOLUS SPP.) : SMALL RED (ADZUKI) BEANS (PHASEOLUS OR VIGNA ANGULARIS)", - "hsn_code": "7133200" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BEANS (VIGNA\nSPP., PHASEOLUS SPP.) : KIDNEY BEANS, INCLUDING WHITE PEA BEANS", - "hsn_code": "7133300" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT - BEANS --\nBAMBARA BEANS (VIGNA SUBTERRANEA OR VOANDZEIA SUBTERRANEA)", - "hsn_code": "7133400" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT - BEANS --\nCOW PEAS (VIGNA UNGUICULATA)", - "hsn_code": "7133500" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BEANS (VIGNA\nSPP., PHASEOLUS SPP.) : OTHER : GUAR SEEDS", - "hsn_code": "7133910" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BEANS (VIGNA\nSPP., PHASEOLUS SPP.) : OTHER : OTHER", - "hsn_code": "7133990" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT LENTILS", - "hsn_code": "7134000" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT BROAD BEANS\n(VICIA FABA VAR MAJOR) AND HORSE BEANS (VICIA FABA VAR EQUINA, VICIA FABAVAR MINOR)", - "hsn_code": "7135000" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT - PIGEON\nPEAS (CAJANUS CAJAN)", - "hsn_code": "7136000" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT -OTHER ---\nSPLIT", - "hsn_code": "7139010" - }, - { - "description": "DRIED LEGUMINOUS VEGETABLES, SHELLED,WHETHER OR NOT SKINNED OR SPLIT - OTHER---\nOTHER", - "hsn_code": "7139090" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH MANIOC (CASSAVA)", - "hsn_code": "7141000" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH SWEET POTATOES", - "hsn_code": "7142000" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH-YAMS (DIOSCOREA SPP.)", - "hsn_code": "7143000" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH- TARO (COLOCASIA SPP.)", - "hsn_code": "7144000" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH-YAUTIA (XANTHOSOMA SPP.)", - "hsn_code": "7145000" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH OTHER : SAGO PITH", - "hsn_code": "7149010" - }, - { - "description": "MANIOC, ARROWROOT, SALEP, JERUSALEMARTICHOKES, SWEET POTATOES AND SIMILARROOTS\nAND TUBERS WITH HIGH STARCH ORINULIN CONTENT, FRESH, CHILLED, FROZEN ORDRIED,\nWHETHER OR NOT SLICED OR IN THEFORM OF PELLETS; SAGO PITH OTHER : OTHER", - "hsn_code": "7149090" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED COCONUTS : DESICCATED", - "hsn_code": "8011100" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED COCONUTS --IN THE INNER SHELL (ENDOCARP): ---FRESH", - "hsn_code": "8011210" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED COCONUTS --IN THE INNER SHELL ---DRIED", - "hsn_code": "8011220" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED COCONUTS --IN THE INNER SHELL (ENDOCARP)---OTHER", - "hsn_code": "8011290" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED OTHER : FRESH", - "hsn_code": "8011910" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED OTHER : DRIED", - "hsn_code": "8011920" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELED OTHER : OTHER", - "hsn_code": "8011990" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELEDBRAZIL NUTS : IN SHELL", - "hsn_code": "8012100" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELEDBRAZIL NUTS : SHELLED", - "hsn_code": "8012200" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELEDCASHEW NUTS SHELLED CASHEW KERNEL, BROKEN", - "hsn_code": "8013210" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELEDCASHEW NUTS SHELLED SHELLED : CASHEW KERNEL, WHOLE", - "hsn_code": "8013220" - }, - { - "description": "COCONUTS, BRAZIL NUTS AND CASHEW NUTS,FRESH OR DRIED, WHETHER OR NOT SHELLEDOR\nPEELEDCASHEW NUTS SHELLED OTHER", - "hsn_code": "8013290" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEELEDALMONDS : IN SHELL", - "hsn_code": "8021100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEELEDALMONDS : SHELLED", - "hsn_code": "8021200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEE HAZELNUTS OR FILBERTS\n(CORYLUS SPP.) : IN SHELL", - "hsn_code": "8022100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEE HAZELNUTS OR FILBERTS\n(CORYLUS SPP.) : SHELLED", - "hsn_code": "8022200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEELED WALNUTS : IN SHELL", - "hsn_code": "8023100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHEROR NOT SHELLED OR PEELED WALNUTS : SHELLED", - "hsn_code": "8023200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - CHESTNUTS (CASTANEA\nSPP.) : -- IN SHELL", - "hsn_code": "8024100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - CHESTNUTS (CASTANEA\nSPP.) : -- SHELLED", - "hsn_code": "8024200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - PISTACHIOS -- IN SHELL", - "hsn_code": "8025100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - PISTACHIOS --SHELLED", - "hsn_code": "8025200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - MACADEMIA NUTS --\nIN SHELL", - "hsn_code": "8026100" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - MACADEMIA NUTS --\nSHELLED", - "hsn_code": "8026200" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - KOLA NUTS (COLA SPP.)", - "hsn_code": "8027000" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - ARECA NUTS ---WHOLE", - "hsn_code": "8028010" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - ARECA NUTS ---SPLIT", - "hsn_code": "8028020" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - ARECA NUTS ---\nGROUND", - "hsn_code": "8028030" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - ARECA NUTS ---OTHER", - "hsn_code": "8028090" - }, - { - "description": "OTHER NUTS, FRESH OR DRIED, WHETHER OR NOT SHELLED OR PEELED - OTHER", - "hsn_code": "8029000" - }, - { - "description": "BANANAS, INCLUDING PLANTAINS, FRESH OR DRIED - PLANTAINS --- CURRY PLANTAIN", - "hsn_code": "8031010" - }, - { - "description": "BANANAS, INCLUDING PLANTAINS, FRESH OR DRIED - PLANTAINS --- OTHER", - "hsn_code": "8031090" - }, - { - "description": "BANANAS, INCLUDING PLANTAINS, FRESH OR DRIED - OTHER --- BANANAS, FRESH", - "hsn_code": "8039010" - }, - { - "description": "BANANAS, INCLUDING PLANTAINS, FRESH OR DRIED - OTHER --- OTHER", - "hsn_code": "8039090" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDDATES : FRESH (EXCLUDING WET DATES)", - "hsn_code": "8041010" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDDATES : SOFT (KHAYZUR OR WET DATES)", - "hsn_code": "8041020" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDDATES : HARD (CHHOHARA OR KHAREK)", - "hsn_code": "8041030" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDDATES : OTHER", - "hsn_code": "8041090" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDFIGS : FRESH", - "hsn_code": "8042010" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDFIGS : OTHER", - "hsn_code": "8042090" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIED PINEAPPLES", - "hsn_code": "8043000" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDAVOCADOS", - "hsn_code": "8044000" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDGUAVAS, MANGOES AND MANGOSTEENS : GUAVAS, FRESH OR DRIED", - "hsn_code": "8045010" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDGUAVAS, MANGOES AND MANGOSTEENS : MANGOES, FRESH", - "hsn_code": "8045020" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDGUAVAS, MANGOES AND MANGOSTEENS : MANGOES, SLICED DRIED", - "hsn_code": "8045030" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIEDGUAVAS, MANGOES AND MANGOSTEENS : MANGO PULP", - "hsn_code": "8045040" - }, - { - "description": "DATES, FIGS, PINEAPPLES, AVOCADOS, GUAVAS,MANGOES, AND MANGOSTEENS, FRESH OR\nDRIED GUAVAS, MANGOES AND MANGOSTEENS : OTHER", - "hsn_code": "8045090" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED ORANGES", - "hsn_code": "8051000" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED MANDARINS (INCLUDING TANGERINES AND SATSUMAS);\nCLEMENTINES, WILKINGS AND SIMILAR CITRUS HYBRIDS", - "hsn_code": "8052000" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED - GRAPE FRUIT, INCLUDING POMELOS", - "hsn_code": "8054000" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED LEMON (CITRUS LIMON, CITRUS LIMONUM) AND LIMES (CITRUS\nAURANTIFOLIA, CITRUS LATIFOLIA)", - "hsn_code": "8055000" - }, - { - "description": "CITRUS FRUIT, FRESH OR DRIED OTHER", - "hsn_code": "8059000" - }, - { - "description": "GRAPES, FRESH OR DRIED FRESH", - "hsn_code": "8061000" - }, - { - "description": "GRAPES, FRESH OR DRIED DRIED : RAISINS", - "hsn_code": "8062010" - }, - { - "description": "GRAPES, FRESH OR DRIED DRIED : OTHER", - "hsn_code": "8062090" - }, - { - "description": "MELONS (INCLUDING WATERMELONS) ANDPAPAWS (PAPAYAS), FRESH MELONS (INCLUDING\nWATERMELONS) : WATER MELONS", - "hsn_code": "8071100" - }, - { - "description": "MELONS (INCLUDING WATERMELONS) ANDPAPAWS (PAPAYAS), FRESH MELONS (INCLUDING\nWATERMELONS) : OTHER", - "hsn_code": "8071900" - }, - { - "description": "MELONS (INCLUDING WATERMELONS) ANDPAPAWS (PAPAYAS), FRESHPAPAWS (PAPAYAS)", - "hsn_code": "8072000" - }, - { - "description": "APPLES, PEARS AND QUINCES, FRESHAPPLES", - "hsn_code": "8081000" - }, - { - "description": "APPLES, PEARS AND QUINCES, FRESH - PEARS", - "hsn_code": "8083000" - }, - { - "description": "APPLES, PEARS AND QUINCES, FRESH - QUINCES", - "hsn_code": "8084000" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDINGNECTARINES), PLUMS AND SOLES, FRESH APRICOTS", - "hsn_code": "8091000" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDING NECTARINES), PLUMS AND SOLES, FRESH - CHERRIES\n-- SOUR CHERRIES (PRUNUS CERASUS)", - "hsn_code": "8092100" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDING NECTARINES), PLUMS AND SOLES, FRESH - CHERRIES\n-- OTHER", - "hsn_code": "8092900" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDINGNECTARINES), PLUMS AND SOLES, FRESH PEACHES,\nINCLUDING NECTARINE", - "hsn_code": "8093000" - }, - { - "description": "APRICOTS, CHERRIES, PEACHES (INCLUDINGNECTARINES), PLUMS AND SOLES, FRESHPLUMS AND\nSLOES", - "hsn_code": "8094000" - }, - { - "description": "OTHER FRUIT, FRESH STRAWBERRIES", - "hsn_code": "8101000" - }, - { - "description": "OTHER FRUIT, FRESH RASPBERRIES, BLACKBERRIES, MULBERRIES AND LOGANBERRIES", - "hsn_code": "8102000" - }, - { - "description": "OTHER FRUIT, FRESH BLACK, WHITE OR RED CURRANTS AND GOOSEBERRIES", - "hsn_code": "8103000" - }, - { - "description": "OTHER FRUIT, FRESH CRANBERRIES, BILBERRIES AND OTHER FRUITS OF THE GENUS VACCINIUM", - "hsn_code": "8104000" - }, - { - "description": "OTHER FRUIT, FRESH KIWI FRUIT", - "hsn_code": "8105000" - }, - { - "description": "OTHER FRUIT, FRESH DURIANS", - "hsn_code": "8106000" - }, - { - "description": "OTHER FRUIT, FRESH - PERSIMMONS", - "hsn_code": "8107000" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : POMEGRANATES", - "hsn_code": "8109010" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : TAMARIND, FRESH", - "hsn_code": "8109020" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : SAPOTA (CHICO)", - "hsn_code": "8109030" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : CUSTARD-APPLE (ATA)", - "hsn_code": "8109040" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : BORE", - "hsn_code": "8109050" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : LICHI", - "hsn_code": "8109060" - }, - { - "description": "OTHER FRUIT, FRESH OTHER : OTHER", - "hsn_code": "8109090" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nSTRAWBERRIES : CONTAINING ADDED SUGAR", - "hsn_code": "8111010" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nSTRAWBERRIES : NOT CONTAINING ADDED SUGAR", - "hsn_code": "8111020" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nSTRAWBERRIES : OTHER", - "hsn_code": "8111090" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nRASPBERRIES, BLACKBERRIES, MULBERRIES,LOGANBERRIES, BLACK, WHITE OR RED\nCURRANTSAND GOOSEBERRIES : CONTAINING ADDED SUGAR", - "hsn_code": "8112010" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nRASPBERRIES, BLACKBERRIES, MULBERRIES,LOGANBERRIES, BLACK, WHITE OR RED\nCURRANTSAND GOOSEBERRIES : NOT CONTAINING ADDED SUGAR", - "hsn_code": "8112020" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nRASPBERRIES, BLACKBERRIES, MULBERRIES,LOGANBERRIES, BLACK, WHITE OR RED\nCURRANTSAND GOOSEBERRIES : OTHER", - "hsn_code": "8112090" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nOTHER : CONTAINING ADDED SUGAR", - "hsn_code": "8119010" - }, - { - "description": "FRUIT AND NUTS, UNCOOKED OR COOKED BYSTEAMING OR BOILING IN WATER,\nFROZEN,WHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER\nOTHER OTHER", - "hsn_code": "8119090" - }, - { - "description": "FRUIT AND NUTS PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN\nBRINE, IN SULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT\nSTATE FOR IMMEDIATE CONSUMPTIONCHERRIES", - "hsn_code": "8121000" - }, - { - "description": "FRUIT AND NUTS PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN\nBRINE, IN SULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT\nSTATE FOR IMMEDIATE CONSUMPTION OTHER : MANGO SLICES IN BRINE", - "hsn_code": "8129010" - }, - { - "description": "FRUIT AND NUTS PROVISIONALLY PRESERVED(FOR EXAMPLE, BY SULPHUR DIOXIDE GAS,IN\nBRINE, IN SULPHUR WATER OR IN OTHERPRESERVATIVE SOLUTIONS), BUT UNSUITABLEIN THAT\nSTATE FOR IMMEDIATE CONSUMPTIONOTHER : OTHER", - "hsn_code": "8129090" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTER APRICOTS", - "hsn_code": "8131000" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTER PRUNES", - "hsn_code": "8132000" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTER APPLES", - "hsn_code": "8133000" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTEROTHER FRUIT : TAMARIND, DRIED", - "hsn_code": "8134010" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTEROTHER FRUIT : SINGODA WHOLE (WATER NUT)", - "hsn_code": "8134020" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTEROTHER FRUIT : OTHER", - "hsn_code": "8134090" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTER MIXTURES OF NUTS", - "hsn_code": "8135010" - }, - { - "description": "FRUIT, DRIED, OTHER THAN THAT OF HEADINGS0801 TO 0806; MIXTURES OF NUTS OR\nDRIEDFRUITS OF THIS CHAPTER MIXTURES OF DRIED FRUITS", - "hsn_code": "8135020" - }, - { - "description": "PEEL OF CITRUS FRUIT OR MELONS (INCLUDING WATERMELONS), FRESH, FROZEN, DRIED\nORPROVISIONALLY PRESERVED IN BRINE, INSULPHUR WATER OR IN OTHER\nPRESERVATIVESOLUTIONS", - "hsn_code": "8140000" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica plantation : A Grade", - "hsn_code": "9011111" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica plantation : B Grade", - "hsn_code": "9011112" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica plantation : C Grade", - "hsn_code": "9011113" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica plantation : Other", - "hsn_code": "9011119" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica cherry : AB Grade", - "hsn_code": "9011121" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica cherry : PB Grade", - "hsn_code": "9011122" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica cherry : C Grade", - "hsn_code": "9011123" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica cherry : B/B/B Grade", - "hsn_code": "9011124" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Arabica cherry : Other", - "hsn_code": "9011129" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob Parchment : AB Grade", - "hsn_code": "9011131" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob Parchment : PB Grade", - "hsn_code": "9011132" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob Parchment : C Grade", - "hsn_code": "9011133" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob Parchment : Other", - "hsn_code": "9011139" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : AB Grade", - "hsn_code": "9011141" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : PB Grade", - "hsn_code": "9011142" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : C Grade", - "hsn_code": "9011143" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : B/B/B Grade", - "hsn_code": "9011144" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : Bulk", - "hsn_code": "9011145" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Rob cherry : Other", - "hsn_code": "9011149" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Not decaffeinated\n: Other", - "hsn_code": "9011190" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, not roasted : Decaffeinated", - "hsn_code": "9011200" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, roasted : Not decaffeinated : In\nbulk packing", - "hsn_code": "9012110" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, roasted : Not decaffeinated :\nOther", - "hsn_code": "9012190" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, roasted : Decaffeinated : In bulk\npacking", - "hsn_code": "9012210" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Coffee, roasted : Decaffeinated : Other", - "hsn_code": "9012290" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Other : Coffee husks and skins", - "hsn_code": "9019010" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Other : Coffee substitutes containing\ncoffee", - "hsn_code": "9019020" - }, - { - "description": "COFFEE, WHETHER OR NOT ROASTED OR DACAFFEINATED; COFFEE HUSKS AND SKINS; COFFEE\nSUBSTITUTES CONTAINING COFFEE IN ANY PROPORTION Other : Other", - "hsn_code": "9019090" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED GREEN TEA (NOT FERMENTED) IN IMMEDIATE PACKINGS OF\nA CONTENT NOT EXCEEDING 3 KG : CONTENT NOT EXCEEDING 25 G .", - "hsn_code": "9021010" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED GREEN TEA (NOT FERMENTED) IN IMMEDIATE PACKINGS OF\nA CONTENT NOT EXCEEDING 3 KG : CONTENT EXCEEDING 25 G. BUT NOT EXCEEDING 1 KG.", - "hsn_code": "9021020" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED GREEN TEA (NOT FERMENTED) IN IMMEDIATE PACKINGS OF\nA CONTENT NOT EXCEEDING 3 KG : CONTENT EXCEEDING 1 KG. BUT NOT EXCEEDING 3 KG.", - "hsn_code": "9021030" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED GREEN TEA (NOT FERMENTED) IN IMMEDIATE PACKINGS OF\nA CONTENT NOT EXCEEDING 3 KG : OTHER", - "hsn_code": "9021090" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER GREEN TEA (NOT FERMENTED) : GREEN TEA IN\nPACKETS WITH CONTENTS EXCEEDING 3 KG BUT NOT EXCEEDING 20 KG", - "hsn_code": "9022010" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER GREEN TEA (NOT FERMENTED) : GREEN TEA IN BULK", - "hsn_code": "9022020" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER GREEN TEA (NOT FERMENTED) : GREEN TEA\nAGGLOMERATED IN FORMS SUCH AS BALL,BRICK AND TABLETS", - "hsn_code": "9022030" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER GREEN TEA (NOT FERMENTED) : GREEN TEA WASTE", - "hsn_code": "9022040" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER GREEN TEA (NOT FERMENTED) : OTHER", - "hsn_code": "9022090" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED BLACK TEA (FERMENTED) AND PARTLY FERMENTED TEA, IN\nIMMEDIATE PACKINGS OF A CONTENT NOT EXCEEDING 3 KG. : CONTENT NOT EXCEEDING 25 G.", - "hsn_code": "9023010" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED BLACK TEA (FERMENTED) AND PARTLY FERMENTED TEA, IN\nIMMEDIATE PACKINGS OF A CONTENT NOT EXCEEDING 3 KG. : CONTENT EXCEEDING 25 G. BUT\nNOT EXCEEDING 1 KG.", - "hsn_code": "9023020" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED BLACK TEA (FERMENTED) AND PARTLY FERMENTED TEA, IN\nIMMEDIATE PACKINGS OF A CONTENT NOT EXCEEDING 3 KG. : CONTENT EXCEEDING 1 KG. BUT\nNOT EXCEEDING 3 KG.", - "hsn_code": "9023030" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED BLACK TEA (FERMENTED) AND PARTLY FERMENTED TEA, IN\nIMMEDIATE PACKINGS OF A CONTENT NOT EXCEEDING 3 KG. : OTHER", - "hsn_code": "9023090" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : CONTENT EXCEEDING 3 KG. BUT NOT EXCEEDING 20 KG.", - "hsn_code": "9024010" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : BLACK TEA, LEAF IN BULK", - "hsn_code": "9024020" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : BLACK TEA, DUST IN BULK", - "hsn_code": "9024030" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : TEA BAGS", - "hsn_code": "9024040" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : BLACK TEA, AGGLOMERATED IN FORMS SUCH AS BALL, BRICK AND TABLETS", - "hsn_code": "9024050" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : BLACK TEA, WASTE", - "hsn_code": "9024060" - }, - { - "description": "TEA, WHETHER OR NOT FLAVOURED OTHER BLACK TEA (FERMENTED) AND OTHER PARTLY\nFERMENTED TEA : OTHER", - "hsn_code": "9024090" - }, - { - "description": "MATE", - "hsn_code": "9030000" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Pepper, long", - "hsn_code": "9041110" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Light black\npepper", - "hsn_code": "9041120" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Black pepper,\ngarbled", - "hsn_code": "9041130" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Black pepper\nungarbled", - "hsn_code": "9041140" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHEDOR GROUND FRUITS OF THE GENUS\nCAPSICUM OROF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Green pepper,\ndehydrated", - "hsn_code": "9041150" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Pepper pinheads", - "hsn_code": "9041160" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Green pepper,\nfrozen or dried", - "hsn_code": "9041170" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Pepper other\nthan green, frozen", - "hsn_code": "9041180" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Neither crushed nor ground : Other", - "hsn_code": "9041190" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OR OF THE GENUS PIMENTA Pepper : Crushed or ground", - "hsn_code": "9041200" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- DRIED NEITHER CRUSHED NOR GROUND ---OF GENUS CAPSICUM", - "hsn_code": "9042110" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- DRIED NEITHER CRUSHED NOR GROUND ---OF GENUS PIMENTA", - "hsn_code": "9042120" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- CRUSHED OR GROUND --- OF GENUS CAPSICUM ---CHILLY POWDER", - "hsn_code": "9042211" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- CRUSHED OR GROUND --- OF GENUS CAPSICUM---- CHILLY SEEDS", - "hsn_code": "9042212" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- CRUSHED OR GROUND --- OF GENUS CAPSICUM----OTHER", - "hsn_code": "9042219" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- CRUSHED OR GROUND --- OF GENUS PIMENTA ---- POWDER", - "hsn_code": "9042221" - }, - { - "description": "PEPPER OF THE GENUS PIPER; DRIED OR CRUSHED OR GROUND FRUITS OF THE GENUS\nCAPSICUM OF THE GENUS PIMENTA - FRUITS OF THE GENUS CAPSICUM OR OF THE GENUS\nPIMENTA -- CRUSHED OR GROUND --- OF GENUS PIMENTA ----OTHER", - "hsn_code": "9042229" - }, - { - "description": "VANILLA - NEITHER CRUSHED NOR GROUND", - "hsn_code": "9051000" - }, - { - "description": "VANILLA - CRUSHED OR GROUND", - "hsn_code": "9052000" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS NEITHER CRUSHED NOR GROUND : CASSIA", - "hsn_code": "9061010" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS NEITHER CRUSHED NOR GROUND : CINNAMON\nBARK", - "hsn_code": "9061020" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS NEITHER CRUSHED NOR GROUND : CINNAMON\nTREE FLOWERS", - "hsn_code": "9061030" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS NEITHER CRUSHED NOR GROUND : OTHER", - "hsn_code": "9061090" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS - NEITHER CRUSHED NOR GROUND :-- CINNAMON\n(CINNAMOMUM ZEYLANICUM BLUME): --- CINNAMON BARK", - "hsn_code": "9061110" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS - NEITHER CRUSHED NOR GROUND :-- CINNAMON\n(CINNAMOMUM ZEYLANICUM BLUME): --- CINNAMON TREE FLOWERS", - "hsn_code": "9061120" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS - NEITHER CRUSHED NOR GROUND :-- CINNAMON\n(CINNAMOMUM ZEYLANICUM BLUME): --- OTHER", - "hsn_code": "9061190" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS - NEITHER CRUSHED NOR GROUND :-- OTHER ---\nCASSIA", - "hsn_code": "9061910" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS - NEITHER CRUSHED NOR GROUND :-- OTHER : ---\nOTHER", - "hsn_code": "9061990" - }, - { - "description": "CINNAMON AND CINNAMON-TREE FLOWERS Crushed or ground", - "hsn_code": "9062000" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS) - NEITHER CRUSHED NOR GROUND --- EXTRACTED", - "hsn_code": "9071010" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS) - NEITHER CRUSHED NOR GROUND --- NOT\nEXTRACTED (OTHER THAN STEM)", - "hsn_code": "9071020" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS) - NEITHER CRUSHED NOR GROUND ---STEM", - "hsn_code": "9071030" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS) - NEITHER CRUSHED NOR GROUND --- OTHER", - "hsn_code": "9071090" - }, - { - "description": "CLOVES (WHOLE FRUIT, CLOVES AND STEMS) - CRUSHED OR GROUND", - "hsn_code": "9072000" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - NUTMEG -- NEITHER CRUSHED NOR GROUND --- IN SHELL", - "hsn_code": "9081110" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - NUTMEG -- NEITHER CRUSHED NOR GROUND---SHELLED", - "hsn_code": "9081120" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - NUTMEG -- CRUSHED OR GROUND", - "hsn_code": "9081200" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - MACE--NEITHER CRUSHED NOR GROUND", - "hsn_code": "9082100" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - MACE--CRUSHED OR GROUND", - "hsn_code": "9082200" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nLARGE (AMOMUM)", - "hsn_code": "9083110" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nSMALL (ELLETTARIA), ALLEPPEY GREEN", - "hsn_code": "9083120" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nSMALL , COORG GREEN", - "hsn_code": "9083130" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nSMALL , BLEACHED, HALF BLEACHED OR BLEACHABLE", - "hsn_code": "9083140" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nSMALL , MIXED", - "hsn_code": "9083150" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- NEITHER CRUSHED NOR GROUND ---\nOTHER", - "hsn_code": "9083190" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- CRUSHED OR GROUND ---POWDER", - "hsn_code": "9083210" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- CRUSHED OR GROUND ---SMALL\nCARDAMOM SEEDS", - "hsn_code": "9083220" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- CRUSHED OR GROUND ---CARDAMOM\nHUSK", - "hsn_code": "9083230" - }, - { - "description": "NUTMEG, MACE AND CARDAMOMS - CARDAMOMS -- CRUSHED OR GROUND ---OTHER", - "hsn_code": "9083290" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CORIANDER-- NEITHER CRUSED NOR GROUND---OF SEED QUALITY", - "hsn_code": "9092110" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CORIANDER-- NEITHER CRUSED NOR GROUND---OTHER", - "hsn_code": "9092190" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CORIANDER-- CRUSED OR GROUND", - "hsn_code": "9092200" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CUMIN-- NEITHER CRUSHED NOR GROUND---CUMIN, OTHER THAN BLACK----OF SEED\nQUALITY", - "hsn_code": "9093111" - }, - { - "description": "EEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS OF\nCUMIN--NEITHER CRUSHED NOR GROUND---CUMIN,OTHER THAN BLACK----OF SEED QUALITY", - "hsn_code": "9093121" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CUMIN--NEITHER CRUSHED NOR GROUND---CUMIN,OTHER THAN BLACK----OTHER", - "hsn_code": "9093129" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF CUMIN-- CRUSHED OR GROUND", - "hsn_code": "9093200" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF ANISE----OF SEED QUALITY", - "hsn_code": "9096111" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF ANISE----OTHER", - "hsn_code": "9096119" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE,BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF BADIAN----OF SEED QUALITY", - "hsn_code": "9096121" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF BADIAN----OTHER", - "hsn_code": "9096129" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE,BADIAN, CARAWAY OR FENNEL;JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF CARAWAY OR FENNEL ---- OF SEED QUALITY", - "hsn_code": "9096131" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nSEEDS OF CARAWAY OR FENNEL----OTHER", - "hsn_code": "9096139" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nJUNIPER BERRIES----OF SEED QUALITY", - "hsn_code": "9096141" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--NEITHER CRUSHED NOR GROUND---\nJUNIPER BERRIES----OTHER", - "hsn_code": "9096149" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--CRUSHED OR GROUND---ANISE", - "hsn_code": "9096210" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--CRUSHED OR GROUND---BADIAN", - "hsn_code": "9096220" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--CRUSHED OR GROUND---CARAWAY\nOR FENNEL", - "hsn_code": "9096230" - }, - { - "description": "SEEDS OF ANISE,BADIAN,FENNEL, CORIANDER, CUMIN OR CARAWAY; JUNIPER BERRIES-SEEDS\nOF ANISE, BADIAN, CARAWAY OR FENNEL; JUNIPER BERRIES--CRUSHED OR GROUND---JUNIPER\nBERRIES", - "hsn_code": "9096240" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--NEITHER CRUSHED NOR GROUND---FRESH", - "hsn_code": "9101110" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--NEITHER CRUSHED NOR GROUND---DRIED, UNBLEACHED", - "hsn_code": "9101120" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--NEITHER CRUSHED NOR GROUND---DRIED, BLEACHED", - "hsn_code": "9101130" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--NEITHER CRUSHED NOR GROUND---OTHER", - "hsn_code": "9101190" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--CRUSHED OR GROUND---POWDER", - "hsn_code": "9101210" - }, - { - "description": "GINGER, SAFFRON, TURMERIC(CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nGINGER--CRUSHED OR GROUND---OTHER", - "hsn_code": "9101290" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nSaffron : Saffron stigma", - "hsn_code": "9102010" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nSaffron : Saffron stamen", - "hsn_code": "9102020" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nSaffron : Other", - "hsn_code": "9102090" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTurmeric (Curcuma) : Fresh", - "hsn_code": "9103010" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTurmeric (Curcuma) : Dried", - "hsn_code": "9103020" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTurmeric (Curcuma) : Powder", - "hsn_code": "9103030" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTurmeric (Curcuma) : Other", - "hsn_code": "9103090" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTHYME; BAY `LEAVES : TEJPAT (LEAVES OF CASSIA LIGNEA)", - "hsn_code": "9104010" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTHYME; BAY LEAVES : THYMES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "9104020" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nTHYME; BAY LEAVES : BAY LEAVES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "9104030" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nCURRY", - "hsn_code": "9105000" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Mixtures referred to in Note 1(b) to this Chapter", - "hsn_code": "9109100" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Celery", - "hsn_code": "9109911" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Fenugreek", - "hsn_code": "9109912" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Dill", - "hsn_code": "9109913" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Ajwain", - "hsn_code": "9109914" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Cassia torea", - "hsn_code": "9109915" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Seed : Other", - "hsn_code": "9109919" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Cassia", - "hsn_code": "9109921" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Celery", - "hsn_code": "9109923" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Fenugreek", - "hsn_code": "9109924" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Dill", - "hsn_code": "9109925" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Poppy", - "hsn_code": "9109926" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Mustard", - "hsn_code": "9109927" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Powder : Other", - "hsn_code": "9109929" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Husk : Other", - "hsn_code": "9109939" - }, - { - "description": "GINGER, SAFFRON, TURMERIC (CURCUMA), THYME, BAY LEAVES, CURRY AND OTHER SPICES\nOther spices : Other : Other", - "hsn_code": "9109990" - }, - { - "description": "WHEAT AND MESLIN DURUM WHEAT : OF SEED QUALITY", - "hsn_code": "10011010" - }, - { - "description": "WHEAT AND MESLIN DURUM WHEAT : OTHER", - "hsn_code": "10011090" - }, - { - "description": "WHEAT AND MESLIN OTHER : WHEAT OF SEED QUALITY", - "hsn_code": "10019010" - }, - { - "description": "WHEAT AND MESLIN OTHER : OTHER WHEAT", - "hsn_code": "10019020" - }, - { - "description": "WHEAT AND MESLIN OTHER : MESLIN : OF SEED QUALITY", - "hsn_code": "10019031" - }, - { - "description": "WHEAT AND MESLIN OTHER : MESLIN : OTHER", - "hsn_code": "10019039" - }, - { - "description": "RYE RYE : OF SEED QUALITY", - "hsn_code": "10020010" - }, - { - "description": "RYE RYE : OTHER", - "hsn_code": "10020090" - }, - { - "description": "BARLEY BARLEY : OF SEED QUALITY", - "hsn_code": "10030010" - }, - { - "description": "BARLEY BARLEY : OTHER", - "hsn_code": "10030090" - }, - { - "description": "OATS OATS : OF SEED QUALITY", - "hsn_code": "10040010" - }, - { - "description": "OATS OATS : OTHER", - "hsn_code": "10040090" - }, - { - "description": "MAIZE (CORN) SEED", - "hsn_code": "10051000" - }, - { - "description": "MAIZE (CORN)OTHER", - "hsn_code": "10059000" - }, - { - "description": "RICE RICE IN THE HUSK (PADDY OR ROUGH) : OF SEED QUALITY", - "hsn_code": "10061010" - }, - { - "description": "RICE RICE IN THE HUSK (PADDY OR ROUGH) : OTHER", - "hsn_code": "10061090" - }, - { - "description": "RICE HUSKED (BROWN) RICE", - "hsn_code": "10062000" - }, - { - "description": "RICE SEM-MILLED OR WHOLLY-MILLED RICE, WHETHER OR NOT POLISHED OR GLAZED : RICE,\nPARBOILED", - "hsn_code": "10063010" - }, - { - "description": "RICE SEMI-MILLED OR WHOLLY-MILLED RICE, WHETHER OR NOT POLISHED OR GLAZED :\nBASMATI RICE", - "hsn_code": "10063020" - }, - { - "description": "RICE SEMI-MILLED OR WHOLLY-MILLED RICE, WHETHER OR NOT POLISHED OR GLAZED : OTHER", - "hsn_code": "10063090" - }, - { - "description": "RICE BROKEN RICE", - "hsn_code": "10064000" - }, - { - "description": "GRAIN SORGHUM GRAIN SORGHUM : OF SEED QUALITY", - "hsn_code": "10070010" - }, - { - "description": "GRAIN SORGHUM GRAIN SORGHUM : OTHER", - "hsn_code": "10070090" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS BUCKWHEAT : OF SEED QUALITY", - "hsn_code": "10081010" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS BUCKWHEAT : OTHER", - "hsn_code": "10081090" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : JAWAR : OF SEED QUALITY", - "hsn_code": "10082011" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : JAWAR : OTHER", - "hsn_code": "10082019" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : BAJRA : OF SEED QUALITY", - "hsn_code": "10082021" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : BAJRA : OTHER", - "hsn_code": "10082029" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : RAGI (FINGER MILLET) : OF\nSEED QUALITY", - "hsn_code": "10082031" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS MILLET : RAGI (FINGER MILLET) :\nOTHER", - "hsn_code": "10082039" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS CANARY SEED : OF SEED QUALITY", - "hsn_code": "10083010" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS CANARY SEED : OTHER", - "hsn_code": "10083090" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS OTHER CEREALS : OF SEED QUALITY", - "hsn_code": "10089010" - }, - { - "description": "BUCKWHEAT, MILLET AND CANARY SEED; OTHER CEREALS OTHER CEREALS : OTHER", - "hsn_code": "10089090" - }, - { - "description": "other", - "hsn_code": "10091090" - }, - { - "description": "WHEAT OR MESLIN FLOUR", - "hsn_code": "11010000" - }, - { - "description": "CEREAL FLOURS OTHER THAN THAT OF WHEAT OR MESLIN RYE FLOUR", - "hsn_code": "11021000" - }, - { - "description": "CEREAL FLOURS OTHER THAN THAT OF WHEAT OR MESLIN MAIZE (CORN) FLOUR", - "hsn_code": "11022000" - }, - { - "description": "CEREAL FLOURS OTHER THAN THAT OF WHEAT OR MESLIN RICE FLOUR", - "hsn_code": "11023000" - }, - { - "description": "CEREAL FLOURS OTHER THAN THAT OF WHEAT OR MESLIN OTHER", - "hsn_code": "11029000" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS GROATS AND MEAL : OF WHEAT : GROAT", - "hsn_code": "11031110" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS GROATS AND MEAL : OF WHEAT : MEAL", - "hsn_code": "11031120" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS GROATS AND MEAL : OF MAIZE (CORN)", - "hsn_code": "11031300" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS GROATS AND MEAL : OF OTHER CEREALS", - "hsn_code": "11031900" - }, - { - "description": "CEREAL GROATS, MEAL AND PELLETS PELLETS", - "hsn_code": "11032000" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND ROLLED OR FLAKED GRAINS : OF OATS", - "hsn_code": "11041200" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND ROLLED OR FLAKED GRAINS : OF OTHER CEREALS", - "hsn_code": "11041900" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND OTHER WORKED GRAINS (FOR EXAMPLE, HULLED, PEARLED, SLICED OR\nKIBBLED) : OF OATS", - "hsn_code": "11042200" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND OTHER WORKED GRAINS (FOR EXAMPLE, HULLED, PEARLED, SLICED OR\nKIBBLED) : OF MAIZE (CORN)", - "hsn_code": "11042300" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND OTHER WORKED GRAINS (FOR EXAMPLE, HULLED, PEARLED, SLICED OR\nKIBBLED) : OF OTHER CEREALS", - "hsn_code": "11042900" - }, - { - "description": "CEREAL GRAINS OTHERWISE WORKED (FOR EXAMPLE, HULLED, ROLLED, FLAKED, PEARLED,\nSLICED, OR KIBBLED), EXCEPT RICE OF HEADING 1006; GERM OF CEREALS, WHOLE, ROLLED,\nFLAKED OR GROUND GERM OF CEREALS, WHOLE, ROLLED, FLAKED OR GROUND", - "hsn_code": "11043000" - }, - { - "description": "FLOUR, MEAL, POWDER, FLAKES, GRANULES AND PELLETS OF POTATOES FLOUR, MEAL AND\nPOWDER", - "hsn_code": "11051000" - }, - { - "description": "FLOUR, MEAL, POWDER, FLAKES, GRANULES AND PELLETS OF POTATOES FLAKES, GRANULES\nAND PELLETS", - "hsn_code": "11052000" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF THE\nDRIED LEGUMINOUS VEGETABLES OF HEADING 0713", - "hsn_code": "11061000" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 : OF SAGO", - "hsn_code": "11062010" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 : OF MANIOC (CASSAVA)", - "hsn_code": "11062020" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 : OF OTHER ROOTS AND TUBERS", - "hsn_code": "11062090" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF THE\nPRODUCTS OF CHAPTER 8 : OF TAMARIND", - "hsn_code": "11063010" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF THE\nPRODUCTS OF CHAPTER 8 : OF SINGODA", - "hsn_code": "11063020" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF THE\nPRODUCTS OF CHAPTER 8 : MANGO FLOUR", - "hsn_code": "11063030" - }, - { - "description": "FLOUR, MEAL AND POWDER OF THE DRIED LEGUMINOUS VEGETABLES OF HEADING 0713, OF\nSAGO OR OF ROOTS OR TUBERS OF HEADING 0714 OR OF THE PRODUCTS OF CHAPTER 8 OF THE\nPRODUCTS OF CHAPTER 8 : OTHER", - "hsn_code": "11063090" - }, - { - "description": "MALT, WHETHER OR NOT ROASTED NOT ROASTED", - "hsn_code": "11071000" - }, - { - "description": "MALT, WHETHER OR NOT ROASTED ROASTED", - "hsn_code": "11072000" - }, - { - "description": "STARCHES; INULIN STARCHES : WHEAT STARCH", - "hsn_code": "11081100" - }, - { - "description": "STARCHES; INULIN STARCHES : MAIZE (CORN) STARCH", - "hsn_code": "11081200" - }, - { - "description": "STARCHES; INULIN STARCHES : POTATO STARCH", - "hsn_code": "11081300" - }, - { - "description": "STARCHES; INULIN STARCHES : MANIOC (CASSAVA) STARCH", - "hsn_code": "11081400" - }, - { - "description": "STARCHES; INULIN STARCHES : OTHER : SAGO", - "hsn_code": "11081910" - }, - { - "description": "STARCHES; INULIN STARCHES : OTHER : OTHER", - "hsn_code": "11081990" - }, - { - "description": "STARCHES; INULIN INSULIN", - "hsn_code": "11082000" - }, - { - "description": "WHEAT GLUTEN, WHETHER OR NOT DRIED", - "hsn_code": "11090000" - }, - { - "description": "SOYA BEANS, WHETHER OR NOT BROKEN SOYA BEANS, WHETHER OR NOT BROKEN : OF SEED\nQUALITY", - "hsn_code": "12010010" - }, - { - "description": "SOYA BEANS, WHETHER OR NOT BROKEN SOYA BEANS, WHETHER OR NOT BROKEN : OTHER", - "hsn_code": "12010090" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN IN SHELL : H.P.S : OF SEED QUALITY", - "hsn_code": "12021011" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN IN SHELL : H.P.S : OTHER", - "hsn_code": "12021019" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN IN SHELL : OTHER : OF SEED QUALITY", - "hsn_code": "12021091" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN IN SHELL : OTHER : OTHER", - "hsn_code": "12021099" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN SHELLED, WHETHER OR NOT BROKEN : KERNELS, H.P.S.", - "hsn_code": "12022010" - }, - { - "description": "GROUND?NUTS, NOT ROASTED OR OTHERWISE COOKED, WHETHER OR NOT SHELLED OR\nBROKEN SHELLED, WHETHER OR NOT BROKEN : OTHER", - "hsn_code": "12022090" - }, - { - "description": "COPRA", - "hsn_code": "12030000" - }, - { - "description": "LINSEED, WHETHER OR NOT BROKEN LINSEED, WHETHER OR NOT BROKEN : OF SEED QUALITY", - "hsn_code": "12040010" - }, - { - "description": "LINSEED, WHETHER OR NOT BROKEN LINSEED, WHETHER OR NOT BROKEN : OTHER", - "hsn_code": "12040090" - }, - { - "description": "RAPE OR COLZA SEEDS, WHETHER OR NOT BROKEN LOW ERUCIC ACID RAPE OR COLZA SEEDS", - "hsn_code": "12051000" - }, - { - "description": "RAPE OR COLZA SEEDS, WHETHER OR NOT BROKEN OTHER", - "hsn_code": "12059000" - }, - { - "description": "SUNFLOWER SEEDS, WHETHER OR NOT BROKEN SUNFLOWER SEEDS, WHETHER OR NOT\nBROKEN : OF SEED QUALITY", - "hsn_code": "12060010" - }, - { - "description": "SUNFLOWER SEEDS, WHETHER OR NOT BROKEN SUNFLOWER SEEDS, WHETHER OR NOT\nBROKEN : OTHER", - "hsn_code": "12060090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN PALM NUTS AND\nKERNELS : OF SEED QUALITY", - "hsn_code": "12071010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN PALM NUTS AND\nKERNELS : OTHER", - "hsn_code": "12071090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN COTTON SEEDS : OF\nSEED QUALITY", - "hsn_code": "12072010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN COTTON SEEDS :\nOTHER", - "hsn_code": "12072090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN CASTOR OIL SEEDS : OF\nSEED QUALITY", - "hsn_code": "12073010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN CASTOR OIL SEEDS :\nOTHER", - "hsn_code": "12073090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN SESAMUM SEEDS : OF\nSEED QUALITY", - "hsn_code": "12074010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN SESAMUM SEEDS :\nOTHER", - "hsn_code": "12074090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN MUSTARD SEEDS : OF\nSEED QUALITY", - "hsn_code": "12075010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN MUSTARD SEEDS :\nOTHER", - "hsn_code": "12075090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN SAFFLOWER SEEDS : OF\nSEED QUALITY", - "hsn_code": "12076010" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN SAFFLOWER SEEDS :\nOTHER", - "hsn_code": "12076090" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN OTHER : POPPY SEEDS", - "hsn_code": "12079100" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN OTHER : OTHER :\nAJAMS", - "hsn_code": "12079910" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN OTHER : OTHER :\nMANGO KERNEL", - "hsn_code": "12079920" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINO FRUITS, WHETHER OR NOT BROKEN OTHER : OTHER : NIGER\nSEED", - "hsn_code": "12079930" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN OTHER : OTHER :\nKOKAM", - "hsn_code": "12079940" - }, - { - "description": "OTHER OIL SEEDS AND OLEAGINOUS FRUITS, WHETHER OR NOT BROKEN OTHER : OTHER :\nOTHER", - "hsn_code": "12079990" - }, - { - "description": "FLOURS AND MEALS OF OIL SEEDS OR OLEAGINOUS FRUITS, OTHER THAN THOSE OF MUSTARD\nOF SOYA BEANS", - "hsn_code": "12081000" - }, - { - "description": "FLOURS AND MEALS OF OIL SEEDS OR OLEAGINOUS FRUITS, OTHER THAN THOSE OF MUSTARD\nOTHER", - "hsn_code": "12089000" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SUGAR BEET SEED", - "hsn_code": "12091000" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : LUCERNE\n(ALFALFA) SEED", - "hsn_code": "12092100" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : CLOVER\n(TRIFOLIUM SPP.) SEED", - "hsn_code": "12092200" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : FESCUE\nSEED", - "hsn_code": "12092300" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS :\nKENTUCKY BLUE GRASS (POA PRATENSIS L.) SEED", - "hsn_code": "12092400" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : RYE\nGRASS (LOLIUM MULTIFLORUM LAM., LOLIUM PERENNE L.) SEED", - "hsn_code": "12092500" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : TIMOTHY\nGRASS SEED", - "hsn_code": "12092600" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : OTHER :\nAUSTRALIAN LUPIN SEEDS", - "hsn_code": "12092910" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF FORAGE PLANTS : OTHER :\nOTHER", - "hsn_code": "12092990" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING SEEDS OF HERBACEOUS PLANTS\nCULTIVATED PRINCIPALLY FOR THEIR FLOWERS", - "hsn_code": "12093000" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OF\nCABBAGE", - "hsn_code": "12099110" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS OF\nCAULIFLOWER", - "hsn_code": "12099120" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OF\nONION", - "hsn_code": "12099130" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OF PEA", - "hsn_code": "12099140" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OF\nRADISH", - "hsn_code": "12099150" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OF\nTOMATO", - "hsn_code": "12099160" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : VEGETABLE SEEDS : OTHER", - "hsn_code": "12099190" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : OTHER : FRUIT SEEDS FOR\nPLANTING OR SOWING", - "hsn_code": "12099910" - }, - { - "description": "SEEDS, FRUIT AND SPORES, OF A KIND USED FOR SOWING OTHER : OTHER : OTHER", - "hsn_code": "12099990" - }, - { - "description": "HOP CONES, FRESH OR DRIED, WHETHER OR NOT GROUND, POWDERED OR IN THE FORM OF\nPELLETS; LUPULIN HOP CONES, NEITHER GROUND NOR POWDERED NOR IN THE FORM OF\nPELLETS", - "hsn_code": "12101000" - }, - { - "description": "HOP CONES, FRESH OR DRIED, WHETHER OR NOT GROUND, POWDERED OR IN THE FORM OF\nPELLETS; LUPULIN HOP CONES, GROUND, POWDERED OR IN THE FORM OF PELLETS; LUPULIN", - "hsn_code": "12102000" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED LIQUORICE ROOTS", - "hsn_code": "12111000" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED GINSENG ROOTS", - "hsn_code": "12112000" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED COCA LEAF", - "hsn_code": "12113000" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED POPPY STRAW", - "hsn_code": "12114000" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : AMBRETTE SEEDS", - "hsn_code": "12119011" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : NUXVOMICA, DRIED\nRIPE SEEDS", - "hsn_code": "12119012" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : PSYLLIUM SEED\n(ISOBGUL)", - "hsn_code": "12119013" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : NEEM SEED", - "hsn_code": "12119014" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : JOJOBA SEED", - "hsn_code": "12119015" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SEEDS : OTHER", - "hsn_code": "12119019" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : BELLADONA LEAVES", - "hsn_code": "12119021" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : SENNA LEAVES AND PODS", - "hsn_code": "12119022" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : NEEM LEAVES, POWDER", - "hsn_code": "12119023" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : GYMNEMA POWDER", - "hsn_code": "12119024" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : CUBEB POWDER", - "hsn_code": "12119025" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : PYRETHRUM", - "hsn_code": "12119026" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : LEAVES, POWDER, FLOWERS\nAND PODS : OTHER", - "hsn_code": "12119029" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : BARK, HUSK AND RIND :\nCASCARA SAGRADA BARK", - "hsn_code": "12119031" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : BARK, HUSK AND RIND :\nPSYLLIUM HUSK (ISOBGUL HUSK)", - "hsn_code": "12119032" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : BARK, HUSK AND RIND :\nGAMBOGE FRUIT RIND", - "hsn_code": "12119033" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : BARK, HUSK AND RIND :\nOTHER", - "hsn_code": "12119039" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nBELLADONA ROOTS", - "hsn_code": "12119041" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nGALANGAL RHIZOMES AND ROOTS", - "hsn_code": "12119042" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nIPECAC DRIED RHIZOME AND ROOTS", - "hsn_code": "12119043" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nSERPENTINA ROOTS (ROWWALFIA SERPENTINA AND OTHER SPECIES OF ROWWALFIAS)", - "hsn_code": "12119044" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nZEDOVARY ROOTS", - "hsn_code": "12119045" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nKUTH ROOT", - "hsn_code": "12119046" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nSARASAPARILLA ROOTS", - "hsn_code": "12119047" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nSWEET FLAG RHIZOMES", - "hsn_code": "12119048" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : ROOTS AND RHIZOMES :\nOTHER", - "hsn_code": "12119049" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : SANDALWOOD CHIPS AND\nDUST", - "hsn_code": "12119050" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : VINCA ROSEA HERBS", - "hsn_code": "12119060" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : MINT INCLUDING LEAVES (ALL\nSPECIES)", - "hsn_code": "12119070" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : AGARWOOD", - "hsn_code": "12119080" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : CHIRATA", - "hsn_code": "12119091" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : TUKMARIA", - "hsn_code": "12119092" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : UNAB (INDIAN\nJUJUBA OR CHINESE DATES)", - "hsn_code": "12119093" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : BASIL, HYSSOP,\nROSEMARY, SAGE AND SAVORY", - "hsn_code": "12119094" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : LOVAGE", - "hsn_code": "12119095" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : GARCENIA", - "hsn_code": "12119096" - }, - { - "description": "PLANTS AND PARTS OF PLANTS (INCLUDING SEEDS AND FRUITS), OF A KIND USED PRIMARILY IN\nPERFUMERY, IN PHARMACY OR FOR INSECTICIDAL, FUNGICIDAL OR SIMILAR PURPOSE, FRESH OR\nDRIED, WHETHER OR NOT CUT, CRUSHED OR POWDERED OTHER : OTHER : OTHER", - "hsn_code": "12119099" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED LOCUST BEANS, INCLUDING LOCUST BEAN SEEDS : OF SEED QUALITY", - "hsn_code": "12121010" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED LOCUST BEANS, INCLUDING LOCUST BEAN SEEDS : OTHER", - "hsn_code": "12121090" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED SEAWEEDS AND OTHER ALGAE : SEAWEEDS", - "hsn_code": "12122010" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED SEAWEEDS AND OTHER ALGAE : OTHER ALGAE", - "hsn_code": "12122090" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED APRICOT, PEACH (INCLUDING NECTARINE) OR PLUM STONES AND\nKERNELS : APRICOT KERNELS", - "hsn_code": "12123010" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED APRICOT, PEACH (INCLUDING NECTARINE) OR PLUM STONES AND\nKERNELS : OTHER", - "hsn_code": "12123090" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED OTHER : SUGAR BEET", - "hsn_code": "12129100" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED OTHER : OTHER : KOKAM (COCUM) FLOWERS", - "hsn_code": "12129910" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED OTHER : OTHER : MOHUA FLOWERS", - "hsn_code": "12129920" - }, - { - "description": "LOCUST BEANS, SEAWEEDS AND OTHER ALGAE, SUGAR BEET AND SUGARCANE, FRESH, CHILLED,\nFROZEN OR DRIED, WHETHER OR NOT GROUND; FRUIT STONES AND KERNELS AND OTHER\nVEGETABLE PRODUCTS (INCLUDING UNROASTED CHICORY ROOTS OF THE VARIETY CI-CHORIUM\nINTYBUS SATIVUM) OF A KIND USED PRIMARILY FOR HUMAN CONSUMPTION, NOT ELSEWHERE\nSPECIFIED OR INCLUDED OTHER : OTHER : OTHER", - "hsn_code": "12129990" - }, - { - "description": "CEREAL STRAW AND HUSKS, UNPREPARED, WHETHER OR NOT CHOPPED, GROUND, PRESSEDOR\nIN THE FORM OF PELLETS", - "hsn_code": "12130000" - }, - { - "description": "SWEDES, MANGOLDS, FODDER ROOTS, HAY, LUCERNE (ALFALFA), CLOVER, SAINFOIN, FORAGE\nKALE, LUPINES, VETCHES AND SIMILAR FORAGE PRODUCTS, WHETHER OR NOT IN THE FORM OF\nPELLETS LUCERNE (ALFALFA) MEAL AND PELLETS", - "hsn_code": "12141000" - }, - { - "description": "SWEDES, MANGOLDS, FODDER ROOTS, HAY, LUCERNE (ALFALFA), CLOVER, SAINFOIN, FORAGE\nKALE, LUPINES, VETCHES AND SIMILAR FORAGE PRODUCTS, WHETHER OR NOT IN THE FORM OF\nPELLETS OTHER", - "hsn_code": "12149000" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nSHELLAC", - "hsn_code": "13011010" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nSEED LAC", - "hsn_code": "13011020" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nSTICK LAC", - "hsn_code": "13011030" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nDEWAXED AND DECOLOURISED LAC", - "hsn_code": "13011040" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nBLEACHED LAC", - "hsn_code": "13011050" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nGASKET LAC", - "hsn_code": "13011060" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nBUTTON LAC", - "hsn_code": "13011070" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nGARNET LAC", - "hsn_code": "13011080" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) LAC :\nOTHER", - "hsn_code": "13011090" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) GUM\nARABIC", - "hsn_code": "13012000" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : ASIAN GUM", - "hsn_code": "13019011" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : AFRICAN GUM", - "hsn_code": "13019012" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: NATURAL GUMS : ASAFOETIDA", - "hsn_code": "13019013" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : BENJAMIN RAS", - "hsn_code": "13019014" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: NATURAL GUMS : BENJAMIN COWRIE", - "hsn_code": "13019015" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : KARAYA GUM (INDIAN TRAGACANTH) HASTAB", - "hsn_code": "13019016" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: NATURAL GUMS : TRAGACANTH (ADRAGANTH)", - "hsn_code": "13019017" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : STORAX", - "hsn_code": "13019018" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nNATURAL GUMS : OTHER", - "hsn_code": "13019019" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nRESINS : COPAL", - "hsn_code": "13019021" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: RESINS : DAMMAR BATU", - "hsn_code": "13019022" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: RESINS : OTHER", - "hsn_code": "13019029" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: GUM RESINS : MYRRH", - "hsn_code": "13019031" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: GUM RESINS : OILBANUM OR FRANKINCENSE", - "hsn_code": "13019032" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: GUM RESINS : MASTIC GUM", - "hsn_code": "13019033" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: GUM RESINS : XANTHIUM GUM", - "hsn_code": "13019034" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: GUM RESINS : OTHER", - "hsn_code": "13019039" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER\n: OLEORESINS : OF SEEDS", - "hsn_code": "13019041" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OF FRUITS", - "hsn_code": "13019042" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OF LEAVES", - "hsn_code": "13019043" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OF SPICES", - "hsn_code": "13019044" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OF FLOWERS", - "hsn_code": "13019045" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OF ROOTS", - "hsn_code": "13019046" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS)OTHER :\nOLEORESINS : OTHER", - "hsn_code": "13019049" - }, - { - "description": "LAC; NATURAL GUMS, RESINS, GUM-RESINS AND OLEORESINS (FOR EXAMPLE, BALSAMS) -OTHER\n: --- OTHER: ---- OTHER", - "hsn_code": "13019099" - }, - { - "description": "-", - "hsn_code": "13021100" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR\nAGAR AND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OF LIQUORICE", - "hsn_code": "13021200" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OF HOPS", - "hsn_code": "13021300" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OF PYRETHRUM OR OF THE ROOTS OF\nPLANTS CONTAINING ROTENONE", - "hsn_code": "13021400" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF BELLADONA", - "hsn_code": "13021911" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF CASCARA\nSAGRADA", - "hsn_code": "13021912" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF NUXVOMICA", - "hsn_code": "13021913" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF GINSENG\n(INCLUDING POWDER)", - "hsn_code": "13021914" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF AGAROSE", - "hsn_code": "13021915" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF NEEM", - "hsn_code": "13021916" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF GYMNEMA", - "hsn_code": "13021917" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OF GARACENIA\nOR GAMBODGE", - "hsn_code": "13021918" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : EXTRACTS : OTHER", - "hsn_code": "13021919" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : CASHEW SHELL LIQUID\n(CNSL), CRUDE", - "hsn_code": "13021920" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR\nAGAR AND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : PURIFIED AND DISTILLED CNSL\n(CARDANOL)", - "hsn_code": "13021930" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR\nAGAR AND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS VEGETABLE SAPS AND EXTRACTS : OTHER : OTHER", - "hsn_code": "13021990" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS PECTIC SUBSTANCES, PECTINATES AND PECTATES", - "hsn_code": "13022000" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR\nAGAR AND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : AGAR-AGAR", - "hsn_code": "13023100" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED,\nDERIVED FROM LOCUST BEANS, LOCUST BEAN SEEDS OR GUAR SEEDS : GUAR MEAL", - "hsn_code": "13023210" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED,\nDERIVED FROM LOCUST BEANS, LOCUST BEAN SEEDS OR GUAR SEEDS : GUARGUM REFINED\nSPLIT", - "hsn_code": "13023220" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED,\nDERIVED FROM LOCUST BEANS, LOCUST BEAN SEEDS OR GUAR SEEDS : GUARGUM TREATED\nAND PULVERISED", - "hsn_code": "13023230" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED,\nDERIVED FROM LOCUST BEANS, LOCUST BEAN SEEDS OR GUAR SEEDS : KAPPA CARRAGEENAN", - "hsn_code": "13023240" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED,\nDERIVED FROM LOCUST BEANS, LOCUST BEAN SEEDS OR GUAR SEEDS : OTHER", - "hsn_code": "13023290" - }, - { - "description": "VEGETABLE SAPS AND EXTRACTS; PECTIC SUBSTANCES, PECTINATES AND PECTATES; AGAR-AGAR\nAND OTHER MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED FROM\nVEGETABLE PRODUCTS MUCILAGES AND THICKENERS, WHETHER OR NOT MODIFIED, DERIVED\nFROM VEGETABLE PRODUCTS : OTHER", - "hsn_code": "13023900" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY FOR PLAITING (FOR EXAMPLE, BAMBOOS,\nRATTANS, REEDS, RUSHES, OSIER, RAFFIA, CLEANED, BLEACHED OR DYED CEREAL STRAW, AND\nLIME BARK)BAMBOOS", - "hsn_code": "14011000" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY FOR PLAITING (FOR EXAMPLE, BAMBOOS,\nRATTANS, REEDS, RUSHES, OSIER, RAFFIA, CLEANED, BLEACHED OR DYED CEREAL STRAW, AND\nLIME BARK)RATTANS", - "hsn_code": "14012000" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY FOR PLAITING (FOR EXAMPLE, BAMBOOS,\nRATTANS, REEDS, RUSHES, OSIER, RAFFIA, CLEANED, BLEACHED OR DYED CEREAL STRAW, AND\nLIME BARK)OTHER : CANES", - "hsn_code": "14019010" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY FOR PLAITING (FOR EXAMPLE, BAMBOOS,\nRATTANS, REEDS, RUSHES, OSIER, RAFFIA, CLEANED, BLEACHED OR DYED CEREAL STRAW, AND\nLIME BARK)OTHER : OTHER", - "hsn_code": "14019090" - }, - { - "description": "VEGETABLE MATERIALS OF A KIND USED PRIMARILY AS STUFFING OR AS PADDING (FOR\nEXAMPLE, KAPOK, VEGETABLE HAIR AND EEL?GRASS), WHETHER OR NOT PUT UP AS A LAYER\nWITH OR WITHOUT SUPPORTING MATERIAL", - "hsn_code": "14020000" - }, - { - "description": "VEGETABLE MATERIAL OF A KIND USED PRIMARILY IN BROOMS OR IN BRUSHES (FOR EXAMPLE,\nBROOM-CORN, PIASSAVA, COUCH-GRASS AND ISTLE), WHETHER OR NOT IN HANKS OR BUNDLES\nVEGETABLE MATERIAL OF A KIND USED PRIMARILY IN BROOMS OR IN BRUSHES (FOR EXAMPLE,\nBROOM-CORN,PIASSAVA, COUCH-GRASS AND ISTLE), WHETHER OR NOT IN HANKS OR BUNDLES\n: PALM FIBRES FOR BRUSHES", - "hsn_code": "14030010" - }, - { - "description": "VEGETABLE MATERIAL OF A KIND USED PRIMARILY IN BROOMS OR IN BRUSHES (FOR EXAMPLE,\nBROOM-CORN, PIASSAVA, COUCH-GRASS AND ISTLE), WHETHER OR NOT IN HANKS OR BUNDLES\nVEGETABLE MATERIAL OF A KIND USED PRIMARILY IN BROOMS OR IN BRUSHES (FOR EXAMPLE,\nBROOM-CORN,PIASSAVA, COUCH-GRASS AND ISTLE), WHETHER OR NOT IN HANKS OR BUNDLES\n: OTHER", - "hsn_code": "14030090" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : HENNA : HENNA LEAVES", - "hsn_code": "14041011" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : HENNA : HENNA POWDER", - "hsn_code": "14041019" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : RED SANDALWOOD POWDER", - "hsn_code": "14041020" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : SAFFLOWER (INCLUDING BASTARD\nSAFFRON)", - "hsn_code": "14041030" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : DYEING SUBSTANCES, EXCLUDING\nTURMERIC", - "hsn_code": "14041040" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : GALLNUTS", - "hsn_code": "14041050" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : MYROBALANS : AMLA (EMBELICA LINN)", - "hsn_code": "14041061" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : MYROBALANS : OTHER", - "hsn_code": "14041069" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : WATTLE BARK (MIMOSA BARK)", - "hsn_code": "14041070" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED RAW VEGETABLE MATERIALS\nOF A KIND USED PRIMARILY IN DYEING OR TANNING : OTHER TANNING SUBSTANCES", - "hsn_code": "14041090" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED COTTON LINTERS", - "hsn_code": "14042000" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : BIDI WRAPPER\nLEAVES (TENDU)", - "hsn_code": "14049010" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : SOAP-NUTS :\nPOWDER", - "hsn_code": "14049021" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : SOAP-NUTS : OTHER", - "hsn_code": "14049029" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : HARD SEEDS, PIPS,\nHULLS AND NUTS, OF A KIND USED PRIMARILY FOR CARVING", - "hsn_code": "14049030" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : BETEL LEAVES", - "hsn_code": "14049040" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : INDIAN KATHA", - "hsn_code": "14049050" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : COCONUT SHELL,\nUNWORKED", - "hsn_code": "14049060" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : RUDRAKSHA SEEDS", - "hsn_code": "14049070" - }, - { - "description": "VEGETABLE PRODUCTS NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER : OTHER", - "hsn_code": "14049090" - }, - { - "description": "PIG FAT (INCLUDING LARD) AND POULTRY FAT, OTHER THAN THAT OF HEADING 0209 OR 1503 -\nLARD", - "hsn_code": "15011000" - }, - { - "description": "PIG FAT (INCLUDING LARD) AND POULTRY FAT, OTHER THAN THAT OF HEADING 0209 OR 1503-\nOTHER PIG FAT", - "hsn_code": "15012000" - }, - { - "description": "PIG FAT (INCLUDING LARD) AND POULTRY FAT, OTHER THAN THAT OF HEADING 0209 OR 1503-\nOTHER", - "hsn_code": "15019000" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503-TALLOW---\nMUTTON TALLOW", - "hsn_code": "15021010" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503-TALLOW---\nOTHER THAN MUTTON TALLOW", - "hsn_code": "15021090" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503-OTHER---\nUNRENDERED FATS", - "hsn_code": "15029010" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503-OTHER---\nRENDERED FATS OR SOLVENT EXTRACTION FATS", - "hsn_code": "15029020" - }, - { - "description": "FATS OF BOVINE ANIMALS, SHEEP OR GOATS, OTHER THAN THOSE OF HEADING 1503-OTHER---\nOTHER", - "hsn_code": "15029090" - }, - { - "description": "LARD STEARIN, LARD OIL, OLEOSTEARIN, OLEO?OIL AND TALLOW OIL, NOT EMULSIFIED OR\nMIXED OR OTHERWISE PREPARED", - "hsn_code": "15030000" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FISH LIVER OILS AND THEIR FRACTIONS : COD LIVER\nOIL", - "hsn_code": "15041010" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FISH LIVER OILS AND THEIR FRACTIONS : OTHER :\nSQUID LIVER OIL", - "hsn_code": "15041091" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FISH LIVER OILS AND THEIR FRACTIONS : OTHER :\nOTHER", - "hsn_code": "15041099" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FATS AND OILS AND THEIR FRACTIONS OF FISH,\nOTHER THAN LIVER OILS : FISH BODY OIL", - "hsn_code": "15042010" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FATS AND OILS AND THEIR FRACTIONS OF FISH,\nOTHER THAN LIVER OILS : FISH LIPID OIL", - "hsn_code": "15042020" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FATS AND OILS AND THEIR FRACTIONS OF FISH,\nOTHER THAN LIVER OILS : SPERM OIL", - "hsn_code": "15042030" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FATS AND OILS AND THEIR FRACTIONS OF FISH,\nOTHER THAN LIVER OILS : OTHER", - "hsn_code": "15042090" - }, - { - "description": "FATS AND OILS AND THEIR FRACTIONS, OF FISH OR MARINE MAMMALS, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED FATS AND OILS AND THEIR FRACTIONS, OF MARINE\nMAMMALS", - "hsn_code": "15043000" - }, - { - "description": "WOOL GREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) WOOL\nGREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) : WOOL ALCOHOL\n(INCLUDING LANOLIN ALCOHOL)", - "hsn_code": "15050010" - }, - { - "description": "WOOL GREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) WOOL\nGREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) : WOOL GREASE,\nCRUDE", - "hsn_code": "15050020" - }, - { - "description": "WOOL GREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) WOOL\nGREASE AND FATTY SUBSTANCES DERIVED THEREFROM (INCLUDING LANOLIN) : OTHER", - "hsn_code": "15050090" - }, - { - "description": "OTHER ANIMAL FATS AND OILS AND THEIR FRACTIONS, WHETHER OR NOT REFINED, BUT NOT\nCHEMICALLY MODIFIED OTHER ANIMAL FATS AND OILS AND THEIR FRACTIONS, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED : NEATS FOOT OIL AND FATS FROM BONE OR\nWASTE", - "hsn_code": "15060010" - }, - { - "description": "OTHER ANIMAL FATS AND OILS AND THEIR FRACTIONS, WHETHER OR NOT REFINED, BUT NOT\nCHEMICALLY MODIFIED OTHER ANIMAL FATS AND OILS AND THEIR FRACTIONS, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED : OTHER", - "hsn_code": "15060090" - }, - { - "description": "SOYA-BEAN OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED CRUDE OIL, WHETHER OR NOT DEGUMMED", - "hsn_code": "15071000" - }, - { - "description": "SOYA-BEAN OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED OTHER : EDIBLE GRADE", - "hsn_code": "15079010" - }, - { - "description": "SOYA-BEAN OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED OTHER : OTHER", - "hsn_code": "15079090" - }, - { - "description": "GROUND-NUT OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED CRUDE OIL", - "hsn_code": "15081000" - }, - { - "description": "GROUND-NUT OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED OTHER : DEODORIZED (SALAD OIL)", - "hsn_code": "15089010" - }, - { - "description": "GROUND-NUT OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED OTHER : OTHER : EDIBLE GRADE", - "hsn_code": "15089091" - }, - { - "description": "GROUND-NUT OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY\nMODIFIED OTHER : OTHER : OTHER", - "hsn_code": "15089099" - }, - { - "description": "OLIVE OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nVIRGIN", - "hsn_code": "15091000" - }, - { - "description": "OLIVE OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nOTHER : EDIBLE GRADE", - "hsn_code": "15099010" - }, - { - "description": "OLIVE OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nOTHER : OTHER", - "hsn_code": "15099090" - }, - { - "description": "OTHER OILS AND THEIR FRACTIONS OBTAINED SOLELY FROM OLIVES, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED, INCLUDING BLENDS OF THESE OILS OR FRACTIONS\nWITH OILS OR FRACTIONS OF HEADING 1509OTHER OILS AND THEIR FRACTIONS OBTAINED\nSOLELY FROM OLIVES, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED,\nINCLUDING BLENDS OF THESE OILS OR FRACTIONS WITH OILS OR FRACTIONS OF HEADING 1509 :\nCRUDE OIL", - "hsn_code": "15100010" - }, - { - "description": "OTHER OILS AND THEIR FRACTIONS OBTAINED SOLELY FROM OLIVES, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED, INCLUDING BLENDS OF THESE OILS OR FRACTIONS\nWITH OILS OR FRACTIONS OF HEADING 1509 OTHER OILS AND THEIR FRACTIONS OBTAINED\nSOLELY FROM OLIVES, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED,\nINCLUDING BLENDS OF THESE OILS OR FRACTIONS WITH OILS OR FRACTIONS OF HEADING 1509 :\nOTHER : EDIBLE GRADE", - "hsn_code": "15100091" - }, - { - "description": "OTHER OILS AND THEIR FRACTIONS OBTAINED SOLELY FROM OLIVES, WHETHER OR NOT\nREFINED, BUT NOT CHEMICALLY MODIFIED, INCLUDING BLENDS OF THESE OILS OR FRACTIONS\nWITH OILS OR FRACTIONS OF HEADING 1509 OTHER OILS AND THEIR FRACTIONS OBTAINED\nSOLELY FROM OLIVES, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED,\nINCLUDING BLENDS OF THESE OILS OR FRACTIONS WITH OILS OR FRACTIONS OF HEADING 1509 :\nOTHER : OTHER", - "hsn_code": "15100099" - }, - { - "description": "PALM OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nCRUDE OIL", - "hsn_code": "15111000" - }, - { - "description": "PALM OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nOTHER : REFINED BLEACHED DEODORISED PALM OIL", - "hsn_code": "15119010" - }, - { - "description": "PALM OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nOTHER : REFINED BLEACHED DEODORISED PALMOLEIN", - "hsn_code": "15119020" - }, - { - "description": "PALM OIL AND ITS FRACTIONS, WHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED\nOTHER : OTHER", - "hsn_code": "15119090" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : CRUDE OIL : SUNFLOWER SEED OIL", - "hsn_code": "15121110" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : CRUDE OIL : SAFFLOWER SEED OIL (KARDI SEED OIL)", - "hsn_code": "15121120" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : OTHER : SUNFLOWER OIL, EDIBLE GRADE", - "hsn_code": "15121910" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : OTHER : SUNFLOWER OIL, NON-EDIBLE GRADE (OTHER THAN CRUDE OIL)", - "hsn_code": "15121920" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : OTHER : SAFFOLA OIL, EDIBLE GRADE", - "hsn_code": "15121930" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : OTHER : SAFFOLA OIL, NON-EDIBLE GRADE", - "hsn_code": "15121940" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED SUNFLOWER SEED OR SAFFLOWER OIL AND\nFRACTIONS THEREOF : OTHER : OTHER", - "hsn_code": "15121990" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED COTTON-SEED OIL AND ITS FRACTIONS : CRUDE\nOIL, WHETHER OR NOT GOSSYPOL HAS BEEN REMOVED", - "hsn_code": "15122100" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED COTTON-SEED OIL AND ITS FRACTIONS : OTHER :\nEDIBLE GRADE", - "hsn_code": "15122910" - }, - { - "description": "SUNFLOWER SEED, SAFFLOWER OR COTTON SEED OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED COTTON-SEED OIL AND ITS FRACTIONS : OTHER :\nOTHER", - "hsn_code": "15122990" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED COCONUT (COPRA) OIL AND ITS FRACTIONS :\nCRUDE OIL", - "hsn_code": "15131100" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED COCONUT (COPRA) OIL AND ITS FRACTIONS :\nOTHER", - "hsn_code": "15131900" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : CRUDE OIL : PALM KERNEL OIL", - "hsn_code": "15132110" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : CRUDE OIL : BABASSU OIL", - "hsn_code": "15132120" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : OTHER : PALM KERNEL OIL AND ITS FRACTIONS", - "hsn_code": "15132910" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : OTHER : BABASSU OIL AND ITS FRACTIONS EDIBLE GRADE", - "hsn_code": "15132920" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : OTHER : BABASSU OIL AND ITS FRACTIONS, OTHER THAN EDIBLE GRADE", - "hsn_code": "15132930" - }, - { - "description": "COCONUT (COPRA), PALM KERNEL OR BABASSU OIL AND FRACTIONS THEREOF, WHETHER OR\nNOT REFINED, BUT NOT CHEMICALLY MODIFIED PALM KERNEL OR BABASSU OIL AND FRACTIONS\nTHEREOF : OTHER : OTHER", - "hsn_code": "15132990" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : CRUDE OIL :\nCOLZA OIL", - "hsn_code": "15141110" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : CRUDE OIL :\nRAPE OIL", - "hsn_code": "15141120" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : CRUDE OIL :\nOTHER", - "hsn_code": "15141190" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : OTHER :\nREFINED COLZA OIL OF EDIBLE GRADE", - "hsn_code": "15141910" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : OTHER :\nREFINED RAPESEED OIL OF EDIBLE GRADE", - "hsn_code": "15141920" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED LOW ERUCIC ACID RAPE OR COLZA OIL AND ITS FRACTIONS : OTHER :\nOTHER", - "hsn_code": "15141990" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : CRUDE OIL : COLZA OIL", - "hsn_code": "15149110" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : CRUDE OIL : MUSTARD OIL", - "hsn_code": "15149120" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : CRUDE OIL : RAPESEED OIL", - "hsn_code": "15149190" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : OTHER : REFINED COLZA OIL OF EDIBLE GRADE", - "hsn_code": "15149910" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : OTHER : REFINED MUSTARD OIL OF EDIBLE GRADE", - "hsn_code": "15149920" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : OTHER : REFINED RAPESEED OIL OF EDIBLE GRADE", - "hsn_code": "15149930" - }, - { - "description": "RAPE, COLZA OR MUSTARD OIL AND THEIR FRACTIONS, WHETHER OR NOT REFINED , BUT NOT\nCHEMICALLY MODIFIED OTHER : OTHER : OTHER", - "hsn_code": "15149990" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED LINSEED OIL AND ITS FRACTIONS :\nCRUDE OIL", - "hsn_code": "15151100" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED LINSEED OIL AND ITS FRACTIONS :\nOTHER : EDIBLE GRADE", - "hsn_code": "15151910" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED LINSEED OIL AND ITS FRACTIONS :\nOTHER : OTHER", - "hsn_code": "15151990" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED MAIZE (CORN) OIL AND ITS\nFRACTIONS : CRUDE OIL", - "hsn_code": "15152100" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED MAIZE (CORN) OIL AND ITS\nFRACTIONS : OTHER : EDIBLE GRADE", - "hsn_code": "15152910" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED MAIZE (CORN) OIL AND ITS\nFRACTIONS : OTHER : OTHER", - "hsn_code": "15152990" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED CASTOR OIL AND ITS FRACTIONS :\nEDIBLE GRADE", - "hsn_code": "15153010" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED CASTOR OIL AND ITS FRACTIONS :\nOTHER", - "hsn_code": "15153090" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED - TUNG OIL AND ITS FRACTIONS", - "hsn_code": "15154000" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED SEASAME OIL AND ITS FRACTIONS\n: CRUDE OIL", - "hsn_code": "15155010" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED SEASAME OIL AND ITS FRACTIONS\n: OTHER : EDIBLE GRADE", - "hsn_code": "15155091" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED SEASAME OIL AND ITS FRACTIONS\n: OTHER : OTHER", - "hsn_code": "15155099" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : FIXED VEGETABLE OILS,\nNAMELY THE FOLLOWING : CHUL MOOGRA OIL, MAWRA OIL, KOKAM OIL,TOBACCO SEED OIL,\nSAL OIL", - "hsn_code": "15159010" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : FIXED VEGETABLE OILS,\nNAMELY THE FOLLOWING : NEEM SEED OIL, KARANJ OIL, SILK COTTON SEED OIL,KHAKHON OIL,\nWATER MELON OIL, KUSUM OIL, RUBBERSEED OIL, DHUP OIL, UNDI OIL, MAROTI OIL, PISA\nOIL,NAHAR OIL", - "hsn_code": "15159020" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : FIXED VEGETABLE OILS,\nNAMELY THE FOLLOWING : CARDAMOM OIL, CHILLIES OR CAPSICUM OIL, TURMERICOIL, AJWAIN\nSEED OIL, NIGER SEED OIL, GARLIC OIL", - "hsn_code": "15159030" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : FIXED VEGETABLE OILS\nOF EDIBLE GRADE NAMELY THE FOLLOWING : MANGO KERNEL OIL, MAHUA OIL, RICE BRAN OIL", - "hsn_code": "15159040" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : OTHER : EDIBLE GRADE", - "hsn_code": "15159091" - }, - { - "description": "OTHER FIXED VEGETABLE FATS AND OILS (INCLUDING JOJOBA OIL) AND THEIR FRACTIONS,\nWHETHER OR NOT REFINED, BUT NOT CHEMICALLY MODIFIED OTHER : OTHER : OTHER", - "hsn_code": "15159099" - }, - { - "description": "ANIMAL FATS AND OILS AND THEIR FRACTIONS", - "hsn_code": "15161000" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nCOTTON SEED OIL : EDIBLE GRADE", - "hsn_code": "15162011" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nCOTTON SEED OIL : OTHER", - "hsn_code": "15162019" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nGROUNDNUT OIL : EDIBLE GRADE", - "hsn_code": "15162021" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nGROUNDNUT OIL : OTHER", - "hsn_code": "15162029" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nHYDROGENATED CASTOR OIL (OPAL-WAX) : EDIBLE GRADE", - "hsn_code": "15162031" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nHYDROGENATED CASTOR OIL (OPAL-WAX) : OTHER", - "hsn_code": "15162039" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nOTHER : EDIBLE GRADE", - "hsn_code": "15162091" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, PARTLY OR WHOLLY\nHYDROGENATED, INTER-ESTERIFIED, RE-ESTERIFIED OR ELAIDINISED, WHETHER OR NOT\nREFINED, BUT NOT FURTHER PREPARED VEGETABLE FATS AND OILS AND THEIR FRACTIONS :\nOTHER : OTHER", - "hsn_code": "15162099" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 MARGARINE, EXCLUDING LIQUID MARGARINE : OF\nANIMAL ORIGIN", - "hsn_code": "15171010" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 MARGARINE, EXCLUDING LIQUID MARGARINE : OF\nVEGETABLE ORIGIN : EDIBLE GRADE", - "hsn_code": "15171021" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 MARGARINE, EXCLUDING LIQUID MARGARINE : OF\nVEGETABLE ORIGIN : LINOXYN", - "hsn_code": "15171022" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 MARGARINE, EXCLUDING LIQUID MARGARINE : OF\nVEGETABLE ORIGIN : OTHER", - "hsn_code": "15171029" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 OTHER : SAL FAT (PROCESSED OR REFINED)", - "hsn_code": "15179010" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 OTHER : IMITATION LARD OF ANIMAL ORIGIN", - "hsn_code": "15179030" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 OTHER : IMITATION LARD OF VEGETABLE ORIGIN", - "hsn_code": "15179040" - }, - { - "description": "MARGARINE; EDIBLE MIXTURE OR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR\nOF FRACTIONS OF DIFFERENT FATS OR OILS OF THIS CHAPTER, OTHER THAN EDIBLE FATS OR\nOILS OR THEIR FRACTIONS OF HEADING 1516 OTHER : OTHER", - "hsn_code": "15179090" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : LINSEED OIL : EDIBLE\nGRADE", - "hsn_code": "15180011" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : LINSEED OIL : OTHER", - "hsn_code": "15180019" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ? ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : CASTOR OIL,\nDEHYDRATED : EDIBLE GRADE", - "hsn_code": "15180021" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ? ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : CASTOR OIL,\nDEHYDRATED : OTHER", - "hsn_code": "15180029" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ? ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : OTHER VEGETABLE OIL\nAND ITS FATS : EDIBLE GRADE", - "hsn_code": "15180031" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ? ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : OTHER VEGETABLE OIL\nAND ITS FATS : OTHER", - "hsn_code": "15180039" - }, - { - "description": "ANIMAL OR VEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDISED,\nDEHYDRATED, SULPHURISED, BLOWN, POLYMERISED BY HEAT IN VACUUM OR IN INERT GAS OR\nOTHERWISE CHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516 ; INEDIBLE MIXTURES\nOR PREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT\nFATS OR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED ANIMAL OR\nVEGETABLE FATS AND OILS AND THEIR FRACTIONS, BOILED, OXIDIZED, DEHYDRATED,\nSULPHURISED, BLOWN, POLYMERIZED BY HEAT IN VACUUM OR IN INERT GAS OR OTHERWISE\nCHEMICALLY MODIFIED, EXCLUDING THOSE OF HEADING 1516; INEDIBLE MIXTURES OR\nPREPARATIONS OF ANIMAL OR VEGETABLE FATS OR OILS OR OF FRACTIONS OF DIFFERENT FATS\nOR OILS OF THIS CHAPTER, NOT ELSEWHERE SPECIFIED OR INCLUDED : OTHER", - "hsn_code": "15180040" - }, - { - "description": "GLYCEROL, CRUDE; GLYCEROL WATERS AND GLYCEROL LYES", - "hsn_code": "15200000" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED VEGETABLE WAXES : CARNAUBA\nWAXES : EDIBLE WAX FOR WAXING FRESH FRUITS AND VEGETABLES", - "hsn_code": "15211011" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED VEGETABLE WAXES : CARNAUBA\nWAXES : OTHER", - "hsn_code": "15211019" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED VEGETABLE WAXES : OTHER", - "hsn_code": "15211090" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED OTHER : BEEWAX WHETHER OR NOT\nCOLOURED", - "hsn_code": "15219010" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED OTHER : SHELLAC WAX WHETHER OR\nNOT COLOURED", - "hsn_code": "15219020" - }, - { - "description": "VEGETABLE WAXES (OTHER THAN TRIGLYCERIDES), BEESWAX, OTHER INSECT WAXES AND\nSPERMACETI, WHETHER OR NOT REFINED OR COLOURED OTHER : OTHER", - "hsn_code": "15219090" - }, - { - "description": "DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY SUBSTANCES OR ANIMAL OR\nVEGETABLE WAXES DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY\nSUBSTANCES OR ANIMAL OR VEGETABLE WAXES : DEGRAS", - "hsn_code": "15220010" - }, - { - "description": "DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY SUBSTANCES OR ANIMAL OR\nVEGETABLE WAXES DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY\nSUBSTANCES OR ANIMAL OR VEGETABLE WAXES : SOAP STOCKS", - "hsn_code": "15220020" - }, - { - "description": "DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY SUBSTANCES OR ANIMAL OR\nVEGETABLE WAXES DEGRAS : RESIDUES RESULTING FROM THE TREATMENT OF FATTY\nSUBSTANCES OR ANIMAL OR VEGETABLE WAXES : OTHER", - "hsn_code": "15220090" - }, - { - "description": "SAUSAGES AND SIMILAR PRODUCTS, OF MEAT,", - "hsn_code": "16010000" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD HOMOGENISED\nPREPARATIONS", - "hsn_code": "16021000" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF LIVER OF ANY ANIMAL", - "hsn_code": "16022000" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF POULTRY OF HEADING\n0105 : OF TURKEYS", - "hsn_code": "16023100" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF POULTRY OF HEADING\n0105 : OF FOWLS OF THE SPECIES GALLUS DOMESTICUS", - "hsn_code": "16023200" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF POULTRY OF HEADING\n0105 : OTHER", - "hsn_code": "16023900" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF SWINE : HAMS AND CUTS\nTHEREOF", - "hsn_code": "16024100" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF SWINE : SHOULDERS AND\nCUTS THEREOF", - "hsn_code": "16024200" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF SWINE : OTHER,\nINCLUDING MIXTURES", - "hsn_code": "16024900" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OF BOVINE ANIMALS", - "hsn_code": "16025000" - }, - { - "description": "OTHER PREPARED OR PRESERVED MEAT, MEAT OFFAL OR BLOOD OTHER, INCLUDING\nPREPARATIONS OF BLOOD OF ANY ANIMAL", - "hsn_code": "16029000" - }, - { - "description": "EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATES EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER\nAQUATIC INVERTEBRATES : EXTRACTS AND JUICES OF MEAT", - "hsn_code": "16030010" - }, - { - "description": "EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATES EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER\nAQUATIC INVERTEBRATES : EXTRACTS OF FISH", - "hsn_code": "16030020" - }, - { - "description": "EXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATESEXTRACTS AND JUICES OF MEAT, FISH OR CRUSTACEANS, MOLLUSCS OR OTHER\nAQUATIC INVERTEBRATES : OTHER", - "hsn_code": "16030090" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : SALMON", - "hsn_code": "16041100" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : HERRINGS : PICKLED", - "hsn_code": "16041210" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : HERRINGS : OTHER", - "hsn_code": "16041290" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : SARDINES, SARDINELLA AND BRISLING OR\nSPRATS : SARDINES, SARDINELLA AND BRISLING", - "hsn_code": "16041310" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : SARDINES, SARDINELLA AND BRISLING OR\nSPRATS : SPRATS", - "hsn_code": "16041320" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : TUNAS, SKIPJACK AND BONITO (SARDA SPP.) :\nTUNAS", - "hsn_code": "16041410" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : TUNAS, SKIPJACK AND BONITO (SARDA SPP.) :\nOTHER", - "hsn_code": "16041490" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : MACKEREL", - "hsn_code": "16041500" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : ANCHOVIES", - "hsn_code": "16041600" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS--\nEels", - "hsn_code": "16041700" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nFISH, WHOLE OR IN PIECES, BUT NOT MINCED : OTHER", - "hsn_code": "16041900" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nOTHER PREPARED OR PRESERVED FISH", - "hsn_code": "16042000" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nCAVIAR AND CAVIAR SUBSTITUTES -- CAVIAR", - "hsn_code": "16043100" - }, - { - "description": "PREPARED OR PRESERVED FISH; CAVIAR AND CAVIAR SUBSTITUTES PREPARED FROM FISH EGGS\nCAVIAR AND CAVIAR SUBSTITUTES -- CAVIAR SUBSTITUTES", - "hsn_code": "16043200" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nCRAB", - "hsn_code": "16051000" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nSHRIMPS - SHRIMPS AND PRAWNS --NOT IN AIRTIGHT CONTAINER", - "hsn_code": "16052100" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nSHRIMPS AND PRAWNS-SHRIMPTS AND PRAWNS -- OTHER", - "hsn_code": "16052900" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nLOBSTER", - "hsn_code": "16053000" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nOTHER CRUSTACEANS", - "hsn_code": "16054000" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS -- OYSTERS", - "hsn_code": "16055100" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS-- SCALLOPS, INCLUDING QUEEN SCALLOPS", - "hsn_code": "16055200" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS--MUSSELS", - "hsn_code": "16055300" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS--CUTTLE FISH AND SQUID", - "hsn_code": "16055400" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS- OCTOPUS", - "hsn_code": "16055500" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS-CLAMS, COCKLES AND ARKSHELLS", - "hsn_code": "16055600" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS--ABALONE", - "hsn_code": "16055700" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS--SNAILS, OTHER THAN SEA SNAILS", - "hsn_code": "16055800" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nMOLLUSCS--OTHER", - "hsn_code": "16055900" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nOTHER AQUATIC INVERTEBRATES--SEA CUCUMBERS", - "hsn_code": "16056100" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nOTHER AQUATIC INVERTEBRATES-- SEA URCHINS", - "hsn_code": "16056200" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nOTHER AQUATIC INVERTEBRATES--JELLYFISH", - "hsn_code": "16056300" - }, - { - "description": "CRUSTACEANS, MOLLUSCS AND OTHER AQUATIC INVERTEBRATES, PREPARED OR PRESERVED\nOTHER AQUATIC INVERTEBRATES--OTHER", - "hsn_code": "16056900" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - RAW SUGAR NOT\nCONTAINING ADDED FLAVOURING OR COLOURING MATTER : BEET SUGAR", - "hsn_code": "17011200" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring matter --CANE SUGAR SPECIFIED IN SUB-HEADING\nNOTE 2 TO THIS CHAPTER---CANE JAGGERY", - "hsn_code": "17011310" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring matter --CANE SUGAR SPECIFIED IN SUB-HEADING\nNOTE 2 TO THIS CHAPTER---KHANDSARI SUGAR", - "hsn_code": "17011320" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring matter --CANE SUGAR SPECIFIED IN SUB-HEADING\nNOTE 2 TO THIS CHAPTER---OTHER", - "hsn_code": "17011390" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring matter --OTHER CANE SUGAR--- CANE JAGGERY", - "hsn_code": "17011410" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring matter --OTHER CANE SUGAR ---KHANDSARI SUGAR", - "hsn_code": "17011420" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - Raw sugar not\ncontaining added flavouring or colouring mater--OTHER CANE SUGAR --- OTHER", - "hsn_code": "17011490" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - OTHER : REFINED\nSUGAR CONTAINING ADDED FLAVOURING OR COLOURING MATTER", - "hsn_code": "17019100" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - OTHER : OTHER :\nSUGAR CUBES", - "hsn_code": "17019910" - }, - { - "description": "CANE OR BEET SUGAR AND CHEMICALLY PURE SUCROSE, IN SOLID FORM - OTHER : OTHER :\nSUGAR CUBES", - "hsn_code": "17019990" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nLACTOSE AND LACTOSE SYRUP : - CONTAINING BY WEIGHT 99% OR MORE LACTOSE, EXPRESSED\nAS ANHYDROUS LACTOSE, CALCULATED ON THE DRY MATTER : IN SOLID FORM", - "hsn_code": "17021110" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nLACTOSE AND LACTOSE SYRUP : - CONTAINING BY WEIGHT 99% OR MORE LACTOSE, EXPRESSED\nAS ANHYDROUS LACTOSE, CALCULATED ON THE DRY MATTER : OTHER", - "hsn_code": "17021190" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nLACTOSE AND LACTOSE SYRUP : OTHER : IN SOLID FORM", - "hsn_code": "17021910" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nLACTOSE AND LACTOSE SYRUP : OTHER : OTHER", - "hsn_code": "17021990" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nMAPLE SUGAR AND MAPLE SYRUP : IN SOLID FORM", - "hsn_code": "17022010" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nMAPLE SUGAR AND MAPLE SYRUP : OTHER", - "hsn_code": "17022090" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, NOT CONTAINING FRUCTOSE OR CONTAINING IN THE DRY\nSTATE LESS THAN 20% BY WEIGHT OF FRUCTOSE : GLUCOSE, LIQUID", - "hsn_code": "17023010" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, NOT CONTAINING FRUCTOSE OR CONTAINING IN THE DRY\nSTATE LESS THAN 20% BY WEIGHT OF FRUCTOSE : GLUCOSE, SOLID", - "hsn_code": "17023020" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, NOT CONTAINING FRUCTOSE OR CONTAINING IN THE DRY\nSTATE LESS THAN 20% BY WEIGHT OF FRUCTOSE : - DEXTROSE : IN SOLID FORM", - "hsn_code": "17023031" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, NOT CONTAINING FRUCTOSE OR CONTAINING IN THE DRY\nSTATE LESS THAN 20% BY WEIGHT OF FRUCTOSE : - DEXTROSE : OTHER", - "hsn_code": "17023039" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, CONTAINING IN THE DRY STATE AT LEAST 20% BUT LESS THAN\n50% BY WEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : GLUCOSE, LIQUID", - "hsn_code": "17024010" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, CONTAINING IN THE DRY STATE AT LEAST 20% BUT LESS THAN\n50% BY WEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : GLUCOSE, SOLID", - "hsn_code": "17024020" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, CONTAINING IN THE DRY STATE AT LEAST 20% BUT LESS THAN\n50% BY WEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : DEXTROSE : IN SOLID FORM", - "hsn_code": "17024031" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nGLUCOSE AND GLUCOSE SYRUP, CONTAINING IN THE DRY STATE AT LEAST 20% BUT LESS THAN\n50% BY WEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : DEXTROSE : OTHER", - "hsn_code": "17024039" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nCHEMICALLY PURE FRUCTOSE", - "hsn_code": "17025000" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : IN SOLID FORM", - "hsn_code": "17026010" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER", - "hsn_code": "17026090" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : PALMYRA SUGAR", - "hsn_code": "17029010" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : CHEMICALLY PURE MALTOSE", - "hsn_code": "17029020" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY", - "hsn_code": "17029030" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : CARAMEL", - "hsn_code": "17029040" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : INSULIN SYRUP", - "hsn_code": "17029050" - }, - { - "description": "OTHER SUGARS, INCLUDING CHEMICALLY PURE LACTOSE, MALTOSE, GLUCOSE AND FRUCTOSE,\nIN SOLID FORM; SUGAR SYRUPS NOT CONTAINING ADDED FLAVOURING OR COLOURING\nMATTER; ARTIFICIAL HONEY, WHETHER OR NOT MIXED WITH NATURAL HONEY; CARAMEL -\nOTHER FRUCTOSE AND FRUCTOSE SYRUP, CONTAINING IN THE DRY STATE MORE THAN 50% BY\nWEIGHT OF FRUCTOSE, EXCLUDING INVERT SUGAR : OTHER, INCLUDING INVERT SUGAR AND\nOTHER SUGAR AND SUGAR SYRUP BLENDS CONTAINING IN THE DRY STATE 50% BY WEIGHT OF\nFRUCTOSE : OTHER", - "hsn_code": "17029090" - }, - { - "description": "MOLASSES RESULTING FROM THE EXTRACTION OR REFINING OF SUGAR - CANE MOLASSES", - "hsn_code": "17031000" - }, - { - "description": "MOLASSES RESULTING FROM THE EXTRACTION OR REFINING OF SUGAR - OTHER : MOLASSES,\nEDIBLE", - "hsn_code": "17039010" - }, - { - "description": "MOLASSES RESULTING FROM THE EXTRACTION OR REFINING OF SUGAR - OTHER : MOLASSES,\nEDIBLE", - "hsn_code": "17039090" - }, - { - "description": "SUGAR CONFECTIONERY (INCLUDING WHITE CHOCOLATE), NOT CONTAINIG COCOA - CHEWING\nGUM, WHETHER OR NOT SUGAR COATED", - "hsn_code": "17041000" - }, - { - "description": "SUGAR CONFECTIONARY (INCLUDING WHITE CHOCOLATE), NOT CONTAINING COCOA - OTHER :\nJELLY CONFECTIONARY", - "hsn_code": "17049010" - }, - { - "description": "SUGAR CONFECTIONARY (INCLUDING WHITE CHOCOLATE), NOT CONTAINING COCOA - OTHER :\nBOILED SWEETS, WHETHER OR NOT FILLED", - "hsn_code": "17049020" - }, - { - "description": "SUGAR CONFECTIONARY (INCLUDING WHITE CHOCOLATE), NOT CONTAINING COCOA - OTHER :\nTOFFEES, CARAMELS AND SIMILAR SWEETS", - "hsn_code": "17049030" - }, - { - "description": "SUGAR CONFECTIONARY (INCLUDING WHITE CHOCOLATE), NOT CONTAINING COCOA - OTHER :\nOTHER", - "hsn_code": "17049090" - }, - { - "description": "COCOA BEANS, WHOLE OR BROKEN, RAW OR ROASTED", - "hsn_code": "18010000" - }, - { - "description": "COCOA SHELLS, HUSKS, SKINS AND OTHER COCOA WASTE", - "hsn_code": "18020000" - }, - { - "description": "COCOA PASTE, WHETHER OR NOT DEFATTED NOT DEFATTED", - "hsn_code": "18031000" - }, - { - "description": "COCOA PASTE, WHETHER OR NOT DEFATTED WHOLLY OR PARTLY DEFATTED", - "hsn_code": "18032000" - }, - { - "description": "COCOA BUTTER, FAT AND OIL", - "hsn_code": "18040000" - }, - { - "description": "COCOA POWDER, NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "18050000" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - COCOA POWDER,\nCONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER", - "hsn_code": "18061000" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER PREPARATIONS IN\nBLOCKS, SLABS OR BARS WEIGHING MORE THAN 2 KG OR IN LIQUID, PASTE, POWDER,\nGRANULAR OR OTHER BULK FORM IN CONTAINERS OR IMMEDIATE PACKINGS, OF A CONTENT\nEXCEEDING 2 KG", - "hsn_code": "18062000" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER, IN BLOCKS, SLABS\nOR BARS : FILLED", - "hsn_code": "18063100" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER, IN BLOCKS, SLABS\nOR BARS : NOT FILLED", - "hsn_code": "18063200" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER : CHOCOLATE AND\nCHOCOLATE PRODUCTS", - "hsn_code": "18069010" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER : SUGAR\nCONFECTIONARY CONTAINING COCOA", - "hsn_code": "18069020" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER : SPREADS\nCONTAINING COCOA", - "hsn_code": "18069030" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER : PREPARATIONS\nCONTAINING COCOA FOR MAKING BEVERAGES", - "hsn_code": "18069040" - }, - { - "description": "CHOCOLATE AND OTHER FOOD PREPARATIONS CONTAINING COCOA - OTHER : OTHER", - "hsn_code": "18069090" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT,\nNOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED\nON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD\nPREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR\nCONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED\nBASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED - PREPARATIONS FOR INFANT USE, PUT UP FOR\nRETAIL SALE : MALTED MILK (INCLUDING POWDER)", - "hsn_code": "19011010" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT,\nNOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED\nON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD\nPREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR\nCONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED\nBASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED - PREPARATIONS FOR INFANT USE, PUT UP FOR\nRETAIL SALE : OTHER", - "hsn_code": "19011090" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT,\nNOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED\nON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD\nPREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR\nCONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED\nBASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED - MIXES AND DOUGHS FOR THE PREPARATION\nOF BAKERS WARES OF HEADING 1905", - "hsn_code": "19012000" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT,\nNOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED\nON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD\nPREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR\nCONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED\nBASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : MALT EXTRACT", - "hsn_code": "19019010" - }, - { - "description": "MALT EXTRACT; FOOD PREPARATIONS OF FLOUR, GROATS, MEAL, STARCH OR MALT EXTRACT,\nNOT CONTAINING COCOA OR CONTAINING LESS THAN 40% BY WEIGHT OF COCOA CALCULATED\nON A TOTALLY DEFATTED BASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED; FOOD\nPREPARATIONS OF GOODS OF HEADINGS 0401 TO 0404, NOT CONTAINING COCOA OR\nCONTAINING LESS THAN 5% BY WEIGHT OF COCOA CALCULATED ON A TOTALLY DEFATTED\nBASIS, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OTHER", - "hsn_code": "19019090" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - UNCOOKED PASTA, NOT\nSTUFFED OR OTHERWISE PREPARED : CONTAINING EGGS", - "hsn_code": "19021100" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - UNCOOKED PASTA, NOT\nSTUFFED OR OTHERWISE PREPARED : OTHER", - "hsn_code": "19021900" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - STUFFED PASTA, WHETHER\nOR NOT COOKED OR OTHERWISE PREPARED : COOKED", - "hsn_code": "19022010" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - STUFFED PASTA, WHETHER\nOR NOT COOKED OR OTHERWISE PREPARED : OTHER", - "hsn_code": "19022090" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - OTHER PASTA : DRIED", - "hsn_code": "19023010" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - OTHER PASTA : OTHER", - "hsn_code": "19023090" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - COUSCOUS : UNPREPARED", - "hsn_code": "19024010" - }, - { - "description": "PASTA, WHETHER OR NOT COOKED OR STUFFED (WITH MEAT OR OTHER SUBSTANCES) OR\nOTHERWISE PREPARED, SUCH AS SPAGHETTI, MACARONI, NOODLES, LASAGNE, GNOCCHI,\nRAVIOLI, CANNELLONI; COUSCOUS, WHETHER OR NOT PREPARED - COUSCOUS : OTHER", - "hsn_code": "19024090" - }, - { - "description": "TAPIOCA AND SUBSTITUTES THEREFOR PREPARED FROM STARCH, IN THE FORM OF FLAKES,\nGRAINS, PEARLS, SIFTINGS OR IN SIMILAR FORMS", - "hsn_code": "19030000" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED -\nPREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS : CORN FLAKES", - "hsn_code": "19041010" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED -\nPREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS : PAWS, MUDI AND THE LIKE", - "hsn_code": "19041020" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED -\nPREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS : BULGUR WHEAT", - "hsn_code": "19041030" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED -\nPREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS : OTHER", - "hsn_code": "19041090" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED\nPREPARED FOODS OBTAINED FROM UNROASTED CEREAL FLAKES OR FROM MIXTURES OF\nUNROASTED CEREAL FLAKES AND ROASTED CEREAL FLAKES OR SWELLED CEREALS", - "hsn_code": "19042000" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED\nBULGUR WHEAT", - "hsn_code": "19043000" - }, - { - "description": "PREPARED FOODS OBTAINED BY THE SWELLING OR ROASTING OF CEREALS OR CEREAL\nPRODUCTS (FOR EXAMPLE, CORN FLAKES); CEREALS [OTHER THAN MAIZE (CORN) ] IN GRAIN\nFORM OR IN THE FORM OF FLAKES OR OTHER WORKED GRAINS (EXCEPT FLOUR, GROATS AND\nMEAL), PRE - COOKED OR OTHERWISE PREPARED, NOT ELSEWHERE SPECIFIED OR INCLUDED\nOTHER", - "hsn_code": "19049000" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS -CRISPBREAD", - "hsn_code": "19051000" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS-GINGERBREAD AND THE LIKE", - "hsn_code": "19052000" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERR WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS- SWEET BISCUITS; WAFFLES AND\nWAFERS--SWEET BISCUITS", - "hsn_code": "19053100" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - - SWEET BISCUITS; WAFFLES AND\nWAFERS-- WAFFLES AND WAFERS : --- COMMUNION WAFERS : COATED WITH CHOCOLATE OR\nCONTAINING CHOCOLATE", - "hsn_code": "19053211" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - - SWEET BISCUITS; WAFFLES AND\nWAFERS --WAFFLES AND WAFERS : - COMMUNION WAFERS : OTHER", - "hsn_code": "19053219" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - SWEET BISCUITS; WAFFLES AND\nWAFERS --WAFFLES AND WAFERS : OTHER", - "hsn_code": "19053290" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - RUSKS, TOASTED BREAD AND\nSIMILAR TOASTED PRODUCTS", - "hsn_code": "19054000" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - OTHER : PASTRIES AND CAKES", - "hsn_code": "19059010" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - OTHER : BISCUITS NOT\nELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "19059020" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - OTHER : EXTRUDED OR EXPANDED\nPRODUCTS, SAVOURY OR SALTED", - "hsn_code": "19059030" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - OTHER : PAPAD", - "hsn_code": "19059040" - }, - { - "description": "BREAD, PASTRY, CAKES, BISCUITS AND OTHER BAKERS WARES, WHETHER OR NOT CONTAINING\nCOCOA; COMMUNION WAFERS, EMPTY CACHETS OF A KIND SUITABLE FOR PHARMACEUTICAL\nUSE, SEALING WAFERS, RICE PAPER AND SIMILAR PRODUCTS - OTHER : OTHER", - "hsn_code": "19059090" - }, - { - "description": "VEGETABLES, FRUIT, NUTS AND OTHER EDIBLEPARTS OF PLANTS, PREPARED OR PRESERVEDBY\nVINEGAR OR ACETIC ACID CUCUMBERS AND GHERKINS", - "hsn_code": "20011000" - }, - { - "description": "VEGETABLES, FRUIT, NUTS AND OTHER EDIBLEPARTS OF PLANTS, PREPARED OR PRESERVEDBY\nVINEGAR OR ACETIC ACID OTHER", - "hsn_code": "20019000" - }, - { - "description": "TOMATOES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID\nTOMATOES, WHOLE OR IN PIECES", - "hsn_code": "20021000" - }, - { - "description": "TOMATOES PREPARED OR PRESERVED OTHERWISETHAN BY VINEGAR OR ACETIC ACID OTHER", - "hsn_code": "20029000" - }, - { - "description": "MUSHROOMS AND TRUFFLES, PREPARED ORPRESERVED OTHERWISE THAN BY VINEGAR\nORACETIC ACID MUSHROOMS OF THE GENUS AGARICUS", - "hsn_code": "20031000" - }, - { - "description": "MUSHROOMS AND TRUFFLES, PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR\nACETIC ACID-OTHER---TRUFFLES", - "hsn_code": "20039010" - }, - { - "description": "MUSHROOMS AND TRUFFLES, PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR\nACETIC ACID-OTHER---OTHER", - "hsn_code": "20039090" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nFROZEN, OTHER THAN PRODUCTS OF HEADING 2006 POTATOES", - "hsn_code": "20041000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nFROZEN, OTHER THAN PRODUCTS OF HEADING 2006 OTHER VEGETABLES AND MIXTURES OF\nVEGETABLES", - "hsn_code": "20049000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 HOMOGENISED VEGETABLES", - "hsn_code": "20051000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 POTATOES", - "hsn_code": "20052000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 PEAS (PISUM, SATIVUM)", - "hsn_code": "20054000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 - BEANS (VIGNA SPP., PHASEOLUS\nSPP.) : BEANS, SHELLED", - "hsn_code": "20055100" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 - BEANS (VIGNA SPP., PHASEOLUS\nSPP.) : OTHER", - "hsn_code": "20055900" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 ASPARAGUS", - "hsn_code": "20056000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 OLIVES", - "hsn_code": "20057000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 SWEET CORN (ZEA MAYS VAR.\nSACCHARATA)", - "hsn_code": "20058000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 OTHER VEGETABLES AND MIXTURES\nOF VEGETABLES", - "hsn_code": "20059000" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVEDOTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 -OTHER VEGETABLES AND MIXTURES\nOF VEGETABLES: -- BAMBOO SHOOTS", - "hsn_code": "20059100" - }, - { - "description": "OTHER VEGETABLES PREPARED OR PRESERVED OTHERWISE THAN BY VINEGAR OR ACETIC ACID,\nNOT FROZEN, OTHER THAN PRODUCTS OF HEADING 2006 -OTHER VEGETABLES AND MIXTURES\nOF VEGETABLES: -- OTHER", - "hsn_code": "20059900" - }, - { - "description": "VEGETABLES, FRUITS, NUTS, FRUIT-PEEL AND OTHER PARTS OF PLANTS, PRESERVED BY\nSUGAR(DRAINED, GLACE OR CRYSTALLISED)", - "hsn_code": "20060000" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER HOMOGENISED PREPARATIONS", - "hsn_code": "20071000" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : CITRUS FRUIT", - "hsn_code": "20079100" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : OTHER : MANGO", - "hsn_code": "20079910" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : OTHER : GUAVA", - "hsn_code": "20079920" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : OTHER : PINE APPLE", - "hsn_code": "20079930" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : OTHER : APPLE", - "hsn_code": "20079940" - }, - { - "description": "JAMS, FRUIT JELLIES, MARMALADES, FRUIT ORNUT PUREE AND FRUIT OR NUT PASTES,\nOBTAINEDBY COOKING, WHETHER OR NOT CONTAININGADDED SUGAR OR OTHER SWEETENING\nMATTER - OTHER : OTHER : OTHER", - "hsn_code": "20079990" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : GROUND-NUTS", - "hsn_code": "20081100" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : OTHER, INCLUDING MIXTURES : CASHEW NUT, ROASTED,\nSALTED OR ROASTED AND SALTED", - "hsn_code": "20081910" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : OTHER, INCLUDING MIXTURES : OTHER ROASTED NUTS\nAND SEEDS", - "hsn_code": "20081920" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : OTHER, INCLUDING MIXTURES : OTHER NUTS,\nOTHERWISE PREPARED OR PRESERVED", - "hsn_code": "20081930" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : OTHER, INCLUDING MIXTURES : OTHER ROASTED AND\nFRIED VEGETABLE PRODUCTS", - "hsn_code": "20081940" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - NUTS, GROUND - NUTS AND OTHER SEEDS,\nWHETHER OR NOT MIXED TOGETHER : OTHER, INCLUDING MIXTURES : OTHER", - "hsn_code": "20081990" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED PINEAPPLES", - "hsn_code": "20082000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - CITRUS FRUIT : ORANGE", - "hsn_code": "20083010" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - CITRUS FRUIT : OTHER", - "hsn_code": "20083090" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - PEARS", - "hsn_code": "20084000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - APRICOTS", - "hsn_code": "20085000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED -CHERRIES", - "hsn_code": "20086000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - PEACHES, INCLUDING NECTARINES", - "hsn_code": "20087000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - STRAWBERRIES", - "hsn_code": "20088000" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : PALM HEARTS", - "hsn_code": "20089100" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OF PLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR SPIRIT,\nNOT ELSEWHERE SPECIFIED OR INCLUDED-Other, including mixtures other than those of sub\nheading 2008 19 --CRANBERRIES(VACCINIUM MACROCARPON, VACCINIUM OXYCOCCOS\nVACCINIUM VITIS-IDAEA)", - "hsn_code": "20089300" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OF PLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER SWEETENING MATTER OR SPIRIT,\nNOT ELSEWHERE SPECIFIED OR INCLUDED-Other, including mixtures other than those of sub\nheading 2008 19 --MIXTURES", - "hsn_code": "20089700" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : SQUASH : MANGO", - "hsn_code": "20089911" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : SQUASH : LEMON", - "hsn_code": "20089912" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : SQUASH : ORANGE", - "hsn_code": "20089913" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : SQUASH : PINEAPPLE", - "hsn_code": "20089914" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED -- OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADIN", - "hsn_code": "20089919" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : OTHER : FRUIT COCKTAIL", - "hsn_code": "20089991" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : OTHER : GRAPES", - "hsn_code": "20089992" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : OTHER : APPLES", - "hsn_code": "20089993" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED - - OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADING 2008 19 : OTHER : OTHER : GUAVA", - "hsn_code": "20089994" - }, - { - "description": "FRUIT, NUTS AND OTHER EDIBLE PARTS OFPLANTS, OTHERWISE PREPARED OR PRESERVED,\nWHETHER OR NOT CONTAINING ADDED SUGAR OROTHER SWEETENING MATTER OR SPIRIT,\nNOTELSEWHERE SPECIFIED OR INCLUDED -- OTHER, INCLUDING MIXTURES OTHER THAN THOSE\nOF SUB-HEADIN", - "hsn_code": "20089999" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - ORANGE JUICE : FROZEN", - "hsn_code": "20091100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - ORANGE JUICE : NOT FROZEN, OF A BRIX VALUE NOT\nEXCEEDING 20", - "hsn_code": "20091200" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - ORANGE JUICE : OTHER", - "hsn_code": "20091900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - GRAPEFRUIT (INCLUDING POMELO)JUICE :-- OF A BRIX VALUE\nNOT EXCEEDING 20", - "hsn_code": "20092100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - GRAPEFRUIT (INCLUDING POMELO) JUICE : -- OTHER", - "hsn_code": "20092900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - JUICE OF ANY OTHER SINGLE CITRUS FRUIT : OF A BRIX VALUE\nNOT EXCEEDING 20", - "hsn_code": "20093100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - JUICE OF ANY OTHER SINGLE CITRUS FRUIT : OTHER", - "hsn_code": "20093900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - PINEAPPLE JUICE : OF A BRIX VALUE NOT EXCEEDING 20", - "hsn_code": "20094100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - PINEAPPLE JUICE : OTHER", - "hsn_code": "20094900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER TOMATO JUICE", - "hsn_code": "20095000" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - GRAPE JUICE (INCLUDING GRAPE MUST) : OF A BRIX VALUE NOT\nEXCEEDING 30", - "hsn_code": "20096100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - GRAPE JUICE (INCLUDING GRAPE MUST) : OTHER", - "hsn_code": "20096900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - APPLE JUICE : OF A BRIX VALUE NOT EXCEEDING 20", - "hsn_code": "20097100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) ANDVEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER - APPLE JUICE : OTHER", - "hsn_code": "20097900" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) AND VEGETABLE JUICES, UNFERMENTED AND NOT\nCONTAINING ADDED SPIRIT, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER-JUICE OF ANY OTHER SINGLE FRUIT OR VEGETABLE--CRANBERRY\n(VACCINIUM MACROCARPON,VACCINIUM OXYCOCCOS VACCINIUM VITIS-IDAEA) JUICE", - "hsn_code": "20098100" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) AND VEGETABLE JUICES, UNFERMENTED AND NOT\nCONTAINING ADDED SPIRIT, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER-JUICE OF ANY OTHER SINGLE FRUIT OR VEGETABLE--OTHER ---MANGO\nJUICE", - "hsn_code": "20098910" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) AND VEGETABLE JUICES, UNFERMENTED AND NOT\nCONTAINING ADDED SPIRIT, WHETHER OR NOT CONTAINING ADDED SUGAR OR OTHER\nSWEETENING MATTER-JUICE OF ANY OTHER SINGLE FRUIT OR VEGETABLE--OTHER ---OTHER", - "hsn_code": "20098990" - }, - { - "description": "FRUIT JUICES (INCLUDING GRAPE MUST) AND VEGETABLE JUICES, UNFERMENTED AND\nNOTCONTAINING ADDED SPIRIT, WHETHER OR NOTCONTAINING ADDED SUGAR OR\nOTHERSWEETENING MATTER MIXTURES OF JUICES", - "hsn_code": "20099000" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, AND PREPARATIONS WITH A\nBASIS OF THESE EXTRACTS, ESSENCES OR CONCENTRATES OR WITHA BASIS OF COFFEE :\nEXTRACTS, ESSENCES AND CONCENTRATES : INSTANT COFFEE, FLAVOURED", - "hsn_code": "21011110" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, AND PREPARATIONS WITH A\nBASIS OF THESE EXTRACTS, ESSENCES OR CONCENTRATES OR WITHA BASIS OF COFFEE :\nEXTRACTS, ESSENCES AND CONCENTRATES : INSTANT COFFEE, NOT FLOVERED", - "hsn_code": "21011120" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, AND PREPARATIONS WITH A\nBASIS OF THESE EXTRACTS, ESSENCES OR CONCENTRATES OR WITHA BASIS OF COFFEE :\nEXTRACTS, ESSENCES AND CONCENTRATES : COFFEE AROMA", - "hsn_code": "21011130" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, AND PREPARATIONS WITH A\nBASIS OF THESE EXTRACTS, ESSENCES OR CONCENTRATES OR WITHA BASIS OF COFFEE :\nEXTRACTS, ESSENCES AND CONCENTRATES : OTHER", - "hsn_code": "21011190" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES OF COFFEE, AND PREPARATIONS WITH A\nBASIS OF THESE EXTRACTS, ESSENCES OR CONCENTRATES OR WITHA BASIS OF COFFEE :\nPREPARATIONS WITH BASIS OF EXTRACTS, ESSENCES, CONCENTRATES OR WITH A BASIS OF\nCOFFEE", - "hsn_code": "21011200" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES, OF TEAOR MATE, AND PREPARATIONS\nWITH A BASIS OFTHESE EXTRACTS, ESSENCES OR CONCENTRATES ORWITH A BASIS OF TEA OR\nMATE : INSTANT TEA", - "hsn_code": "21012010" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES, OF TEAOR MATE, AND PREPARATIONS\nWITH A BASIS OFTHESE EXTRACTS, ESSENCES OR CONCENTRATES ORWITH A BASIS OF TEA OR\nMATE : QUICK BREWING BLACK TEA", - "hsn_code": "21012020" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES, OF TEAOR MATE, AND PREPARATIONS\nWITH A BASIS OFTHESE EXTRACTS, ESSENCES OR CONCENTRATES ORWITH A BASIS OF TEA OR\nMATE : TEA AROMA", - "hsn_code": "21012030" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - EXTRACTS, ESSENCES AND CONCENTRATES, OF TEAOR MATE, AND PREPARATIONS\nWITH A BASIS OFTHESE EXTRACTS, ESSENCES OR CONCENTRATES ORWITH A BASIS OF TEA OR\nMATE : OTHER", - "hsn_code": "21012090" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - ROASTED CHICORY AND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS,\nESSENCES ANDCONCENTRATES THEREOF : ROASTED CHICORY", - "hsn_code": "21013010" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - ROASTED CHICORY AND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS,\nESSENCES ANDCONCENTRATES THEREOF : ROASTED COFFEE SUBSTITUTES", - "hsn_code": "21013020" - }, - { - "description": "EXTRACTS, ESSENCES AND CONCENTRATES, OF COFFEE, TEA OR MATE AND PREPARATIONSWITH\nA BASIS OF THESE PRODUCTS OR WITH ABASIS OF COFFEE, TEA OR MATE; ROASTEDCHICORY\nAND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS, ESSENCESAND CONCENTRATES\nTHEREOF - ROASTED CHICORY AND OTHER ROASTED COFFEESUBSTITUTES, AND EXTRACTS,\nESSENCES ANDCONCENTRATES THEREOF : OTHER", - "hsn_code": "21013090" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLECELL MICRO - ORGANISMS, DEAD (BUT\nNOTINCLUDING VACCINES OF HEADING 3002);PREPARED BAKING POWDERS - ACTIVE YEASTS :\nCULTURE YEAST", - "hsn_code": "21021010" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLECELL MICRO - ORGANISMS, DEAD (BUT\nNOTINCLUDING VACCINES OF HEADING 3002);PREPARED BAKING POWDERS - ACTIVE YEASTS :\nBAKERS YEAST", - "hsn_code": "21021020" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLECELL MICRO - ORGANISMS, DEAD (BUT\nNOTINCLUDING VACCINES OF HEADING 3002);PREPARED BAKING POWDERS - ACTIVE YEASTS :\nOTHER", - "hsn_code": "21021090" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLECELL MICRO - ORGANISMS, DEAD (BUT\nNOTINCLUDING VACCINES OF HEADING 3002);PREPARED BAKING POWDERS - INACTIVE YEASTS,\nOTHER SINGLE-CELL MICRO-ORGANISMS, DEAD", - "hsn_code": "21022000" - }, - { - "description": "YEASTS (ACTIVE OR INACTIVE); OTHER SINGLECELL MICRO - ORGANISMS, DEAD (BUT\nNOTINCLUDING VACCINES OF HEADING 3002);PREPARED BAKING POWDERS - PREPARED BAKING\nPOWDERS", - "hsn_code": "21023000" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - SOYA SAUCE", - "hsn_code": "21031000" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - TOMATO KETCHUP AND\nOTHER TOMATO SAUCES", - "hsn_code": "21032000" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - MUSTARD FLOUR AND\nMEAL AND PREPARED MUSTARD", - "hsn_code": "21033000" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - OTHER : CURRY PASTE", - "hsn_code": "21039010" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - OTHER : CHILLI SAUCE", - "hsn_code": "21039020" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - OTHER : MAJONNAISE\nAND SALAD DRESSINGS", - "hsn_code": "21039030" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - OTHER : MIXED,\nCONDIMENTS AND MIXED SEASONING", - "hsn_code": "21039040" - }, - { - "description": "SAUCES AND PREPARATIONS THEREFOR, MIXEDCONDIMENTS AND MIXED\nSEASONINGS;MUSTARD FLOUR AND MEAL AND PREPARED MUSTARD - OTHER : OTHER", - "hsn_code": "21039090" - }, - { - "description": "SOUPS AND BROTHS AND PREPARATIONSTHEREFOR; HOMOGENISED COMPOSITE FOOD\nPREPARATIONS - SOUPS AND BROTHS AND PREPARATIONS THEREFOR : DRIED", - "hsn_code": "21041010" - }, - { - "description": "SOUPS AND BROTHS AND PREPARATIONSTHEREFOR; HOMOGENISED COMPOSITE FOOD\nPREPARATIONS - SOUPS AND BROTHS AND PREPARATIONS THEREFOR : OTHER", - "hsn_code": "21041090" - }, - { - "description": "SOUPS AND BROTHS AND PREPARATIONSTHEREFOR; HOMOGENISED COMPOSITE FOOD\nPREPARATIONS HOMOGENISED COMPOSITE FOOD PREPARATIONS", - "hsn_code": "21042000" - }, - { - "description": "ICECREAM AND OTHER EDIBLE ICE, WHETHER OR NOT CONTAINING COCOA", - "hsn_code": "21050000" - }, - { - "description": "PROTEIN CONCENTRATES AND TEXTURED PROTEIN SUBSTANCES", - "hsn_code": "21061000" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : SOFT DRINK\nCONCENTRATES : SHARBAT", - "hsn_code": "21069011" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : SOFT DRINK\nCONCENTRATES : OTHER", - "hsn_code": "21069019" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : PAN MASALA", - "hsn_code": "21069020" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : BETEL NUT PRODUCT\nKNOWN AS SUPARI", - "hsn_code": "21069030" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : SUGAR-SYRUPS\nCONTAINING ADDED FLAVOURING OR COLOURING MATTER, NOT ELSEWHERE SPECIFIED\nORINCLUDED; LACTOSE SYRUP; GLUCOSE SYRUP ANDMALTO DEXTRINE SYRUP", - "hsn_code": "21069040" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : COMPOUND\nPREPARATIONS FOR MAKING NON-ALCOHOLIC BEVERAGES", - "hsn_code": "21069050" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : FOOD FLAVOURING\nMATERIAL", - "hsn_code": "21069060" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : CHURNA FOR PAN", - "hsn_code": "21069070" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : CUSTARD POWDER", - "hsn_code": "21069080" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OTHER : DIABETIC\nFOODS", - "hsn_code": "21069091" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OTHER : STERILIZED\nOR PASTEURIZED MILTONE", - "hsn_code": "21069092" - }, - { - "description": "FOOD PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OTHER : OTHER", - "hsn_code": "21069099" - }, - { - "description": "WATERS, INCLUDING NATURAL OR ARTIFICIALMINERAL WATERS AND AERATED WATERS,\nNOTCONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER NOR FLAVOURED; ICEAND\nSNOW - MINERAL WATERS AND AERATED WATERS : MINERAL WATERS", - "hsn_code": "22011010" - }, - { - "description": "WATERS, INCLUDING NATURAL OR ARTIFICIALMINERAL WATERS AND AERATED WATERS,\nNOTCONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER NOR FLAVOURED; ICEAND\nSNOW - MINERAL WATERS AND AERATED WATERS : AERATED WATERS", - "hsn_code": "22011020" - }, - { - "description": "WATERS, INCLUDING NATURAL OR ARTIFICIALMINERAL WATERS AND AERATED WATERS,\nNOTCONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER NOR FLAVOURED; ICEAND\nSNOW - OTHER : ICE AND SNOW", - "hsn_code": "22019010" - }, - { - "description": "WATERS, INCLUDING NATURAL OR ARTIFICIALMINERAL WATERS AND AERATED WATERS,\nNOTCONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER NOR FLAVOURED; ICEAND\nSNOW - OTHER : OTHER", - "hsn_code": "22019090" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - WATERS, INCLUDING MINERAL\nWATERS AND AERATEDWATERS, CONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER\nOR FLAVOURED : AERATED WATERS", - "hsn_code": "22021010" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - WATERS, INCLUDING MINERAL\nWATERS AND AERATEDWATERS, CONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER\nOR FLAVOURED : LEMONADE", - "hsn_code": "22021020" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - WATERS, INCLUDING MINERAL\nWATERS AND AERATEDWATERS, CONTAINING ADDED SUGAR OR OTHERSWEETENING MATTER\nOR FLAVOURED : OTHER", - "hsn_code": "22021090" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - OTHER : SOYA MILK DRINKS,\nWHETHER OR NOT SWEETENDED OR FLAVOURED", - "hsn_code": "22029010" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - OTHER : FRUIT PULP OR FRUIT\nJUICE BASED DRINKS", - "hsn_code": "22029020" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - OTHER : BEVERAGES\nCONTAINING MILK", - "hsn_code": "22029030" - }, - { - "description": "WATERS, INCLUDING MINERAL WATERS ANDAERATED WATERS, CONTAINING ADDED SUGAROR\nOTHER SWEETENING MATTER OR FLAVOURED,AND OTHER NON - ALCOHOLIC BEVERAGES,\nNOTINCLUDING FRUIT OR VEGETABLE JUICES OFHEADING 2009 - OTHER : OTHER", - "hsn_code": "22029090" - }, - { - "description": "-", - "hsn_code": "22030000" - }, - { - "description": "-", - "hsn_code": "22041000" - }, - { - "description": "-", - "hsn_code": "22042110" - }, - { - "description": "-", - "hsn_code": "22042120" - }, - { - "description": "-", - "hsn_code": "22042190" - }, - { - "description": "-", - "hsn_code": "22042910" - }, - { - "description": "-", - "hsn_code": "22042920" - }, - { - "description": "-", - "hsn_code": "22042990" - }, - { - "description": "-", - "hsn_code": "22043000" - }, - { - "description": "-", - "hsn_code": "22051000" - }, - { - "description": "-", - "hsn_code": "22059000" - }, - { - "description": "-", - "hsn_code": "22060000" - }, - { - "description": "-", - "hsn_code": "22071011" - }, - { - "description": "-", - "hsn_code": "22071019" - }, - { - "description": "-", - "hsn_code": "22071090" - }, - { - "description": "ETHYL ALCOHOL AND OTHER SPIRITS, DENATURED, OF ANY STRENGTH ETHYL ALCOHOL AND\nOTHER SPIRITS, DENATURED, OF ANY STRENGTH", - "hsn_code": "22072000" - }, - { - "description": "-", - "hsn_code": "22082010" - }, - { - "description": "-", - "hsn_code": "22082011" - }, - { - "description": "-", - "hsn_code": "22082012" - }, - { - "description": "-", - "hsn_code": "22082019" - }, - { - "description": "-", - "hsn_code": "22082020" - }, - { - "description": "-", - "hsn_code": "22082090" - }, - { - "description": "-", - "hsn_code": "22082091" - }, - { - "description": "-", - "hsn_code": "22082092" - }, - { - "description": "-", - "hsn_code": "22082099" - }, - { - "description": "-", - "hsn_code": "22083010" - }, - { - "description": "-", - "hsn_code": "22083011" - }, - { - "description": "-", - "hsn_code": "22083012" - }, - { - "description": "-", - "hsn_code": "22083013" - }, - { - "description": "-", - "hsn_code": "22083019" - }, - { - "description": "-", - "hsn_code": "22083020" - }, - { - "description": "-", - "hsn_code": "22083030" - }, - { - "description": "-", - "hsn_code": "22083090" - }, - { - "description": "-", - "hsn_code": "22083091" - }, - { - "description": "-", - "hsn_code": "22083092" - }, - { - "description": "-", - "hsn_code": "22083093" - }, - { - "description": "-", - "hsn_code": "22083099" - }, - { - "description": "-", - "hsn_code": "22084010" - }, - { - "description": "-", - "hsn_code": "22084011" - }, - { - "description": "-", - "hsn_code": "22084012" - }, - { - "description": "-", - "hsn_code": "22084020" - }, - { - "description": "-", - "hsn_code": "22084091" - }, - { - "description": "-", - "hsn_code": "22084092" - }, - { - "description": "-", - "hsn_code": "22085010" - }, - { - "description": "-", - "hsn_code": "22085011" - }, - { - "description": "-", - "hsn_code": "22085012" - }, - { - "description": "-", - "hsn_code": "22085013" - }, - { - "description": "-", - "hsn_code": "22085020" - }, - { - "description": "-", - "hsn_code": "22085091" - }, - { - "description": "-", - "hsn_code": "22085092" - }, - { - "description": "-", - "hsn_code": "22085093" - }, - { - "description": "-", - "hsn_code": "22086000" - }, - { - "description": "-", - "hsn_code": "22087010" - }, - { - "description": "-", - "hsn_code": "22087011" - }, - { - "description": "-", - "hsn_code": "22087012" - }, - { - "description": "-", - "hsn_code": "22087020" - }, - { - "description": "-", - "hsn_code": "22087091" - }, - { - "description": "-", - "hsn_code": "22087092" - }, - { - "description": "-", - "hsn_code": "22089010" - }, - { - "description": "-", - "hsn_code": "22089011" - }, - { - "description": "-", - "hsn_code": "22089012" - }, - { - "description": "-", - "hsn_code": "22089019" - }, - { - "description": "-", - "hsn_code": "22089020" - }, - { - "description": "-", - "hsn_code": "22089090" - }, - { - "description": "-", - "hsn_code": "22089091" - }, - { - "description": "-", - "hsn_code": "22089092" - }, - { - "description": "-", - "hsn_code": "22089099" - }, - { - "description": "VINEGAR AND SUBSTITUTES FOR VINEGAROBTAINED FROM ACETIC ACID - VINEGAR AND\nSUBSTITUTES FOR VINEGAR OBTAINED FROM ACETIC ACID : BREWED VINEGAR", - "hsn_code": "22090010" - }, - { - "description": "VINEGAR AND SUBSTITUTES FOR VINEGAROBTAINED FROM ACETIC ACID - VINEGAR AND\nSUBSTITUTES FOR VINEGAR OBTAINED FROM ACETIC ACID : SYNTHETIC VINEGAR", - "hsn_code": "22090020" - }, - { - "description": "VINEGAR AND SUBSTITUTES FOR VINEGAROBTAINED FROM ACETIC ACID - VINEGAR AND\nSUBSTITUTES FOR VINEGAR OBTAINED FROM ACETIC ACID : OTHER", - "hsn_code": "22090090" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEATOR MEAT OFFAL, OF FISH OR OFCRUSTACEANS,\nMOLLUSCS OR OTHERAQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES -\nFLOURS, MEALS AND PELLETS, OF MEAT OR MEAT OFFAL; GREAVES : MEAT MEALS AND PELLETS\n(INCLUDING TANKAGE)", - "hsn_code": "23011010" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEATOR MEAT OFFAL, OF FISH OR OFCRUSTACEANS,\nMOLLUSCS OR OTHERAQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES -\nFLOURS, MEALS AND PELLETS, OF MEAT OR MEAT OFFAL; GREAVES : OTHER (INCLUDING\nGREAVES)", - "hsn_code": "23011090" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEATOR MEAT OFFAL, OF FISH OR OFCRUSTACEANS,\nMOLLUSCS OR OTHERAQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES -\nFLOURS, MEALS AND PELLETS, OF FISH OR OF CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATES : FISH MEAL, UNFIT FOR HUMAN CONSUMPTION : IN POWDER FORM", - "hsn_code": "23012011" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEATOR MEAT OFFAL, OF FISH OR OFCRUSTACEANS,\nMOLLUSCS OR OTHERAQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES -\nFLOURS, MEALS AND PELLETS, OF FISH OR OF CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATES : FISH MEAL, UNFIT FOR HUMAN CONSUMPTION : OTHER", - "hsn_code": "23012019" - }, - { - "description": "FLOURS, MEALS AND PELLETS, OF MEATOR MEAT OFFAL, OF FISH OR OFCRUSTACEANS,\nMOLLUSCS OR OTHERAQUATIC INVERTEBRATES, UNFIT FOR HUMAN CONSUMPTION; GREAVES -\nFLOURS, MEALS AND PELLETS, OF FISH OR OF CRUSTACEANS, MOLLUSCS OR OTHER AQUATIC\nINVERTEBRATES : OTHER", - "hsn_code": "23012090" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF MAIZE (CORN) : MAIZE BRAN", - "hsn_code": "23021010" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF MAIZE (CORN) : OTHER", - "hsn_code": "23021090" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF RICE : DE-OILED RICE BRAN", - "hsn_code": "23022010" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF RICE : RICE BRAN, RAW", - "hsn_code": "23022020" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF RICE : OTHER", - "hsn_code": "23022090" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF WHEAT", - "hsn_code": "23023000" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF OTHER CEREALS", - "hsn_code": "23024000" - }, - { - "description": "BRAN, SHARPS AND OTHER RESIDUES, WHETHEROR NOT IN THE FORM OF PELLETS, DERIVED\nFROM THE SIFTING, MILLING OR OTHER WORKING OF CEREALS OR OF LEGUMINOUS PLANTS -\nOF LEGUMINOUS PLANTS", - "hsn_code": "23025000" - }, - { - "description": "RESIDUES OF STARCH MANUFACTURE AND SIMILARRESIDUES, BEET-PULP, BAGASSE AND\nOTHERWASTE OF SUGAR MANUFACTURE, BREWING ORDISTILLING DREGS AND WASTE,\nWHETHER ORNOT IN THE FORM OF PELLETS RESIDUES OF STARCH MANUFACTURE AND SIMILAR\nRESIDUES", - "hsn_code": "23031000" - }, - { - "description": "RESIDUES OF STARCH MANUFACTURE AND SIMILARRESIDUES, BEET-PULP, BAGASSE AND\nOTHERWASTE OF SUGAR MANUFACTURE, BREWING ORDISTILLING DREGS AND WASTE,\nWHETHER ORNOT IN THE FORM OF PELLETS BEET-PULP, BAGASSE AND OTHER WASTE OF SUGAR\nMANUFACTURE", - "hsn_code": "23032000" - }, - { - "description": "RESIDUES OF STARCH MANUFACTURE AND SIMILARRESIDUES, BEET-PULP, BAGASSE AND\nOTHERWASTE OF SUGAR MANUFACTURE, BREWING ORDISTILLING DREGS AND WASTE,\nWHETHER ORNOT IN THE FORM OF PELLETS BREWING OR DISTILLING DREGS AND WASTE", - "hsn_code": "23033000" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES WHETHEROR NOT GROUND OR IN THE FORM OF PELLETS,\nRESULTING FROM THE EXTRACTION OFSOYABEAN OIL - OIL-CAKE AND OTHER SOLID RESIDUES\nWHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION\nOF SOYABEAN OIL : OIL-CAKE AND OIL-CAKE MEAL OF SOYABEAN, EXPELLER VARIETY", - "hsn_code": "23040010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES WHETHEROR NOT GROUND OR IN THE FORM OF PELLETS,\nRESULTING FROM THE EXTRACTION OFSOYABEAN OIL - OIL-CAKE AND OTHER SOLID RESIDUES\nWHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION\nOF SOYABEAN OIL : OIL-CAKE OF SOYABEAN, SOLVENT EXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23040020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES WHETHEROR NOT GROUND OR IN THE FORM OF PELLETS,\nRESULTING FROM THE EXTRACTION OFSOYABEAN OIL - OIL-CAKE AND OTHER SOLID RESIDUES\nWHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION\nOF SOYABEAN OIL : MEAL OF SOYABEAN, SOLVENT EXTRACTED (DEFATTED)", - "hsn_code": "23040030" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES WHETHEROR NOT GROUND OR IN THE FORM OF PELLETS,\nRESULTING FROM THE EXTRACTION OFSOYABEAN OIL - OIL-CAKE AND OTHER SOLID RESIDUES\nWHETHER OR NOT GROUND OR IN THE FORM OF PELLETS, RESULTING FROM THE EXTRACTION\nOF SOYABEAN OIL : OTHER", - "hsn_code": "23040090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHEROR NOT GROUND OR IN THE FORM OF\nPELLETS, RESULTING FROM THE EXTRACTION OFGROUND-NUT OIL - OIL-CAKE AND OTHER SOLID\nRESIDUES, WHETHER ORNOT GROUND OR IN THE FORM OF PELLETS, RESULTINGFROM THE\nEXTRACTION OF GROUND-NUT OIL : OIL-CAKE AND OIL-CAKE MEAL OF GROUND-NUT, EXPELLER\nVARIETY", - "hsn_code": "23050010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHEROR NOT GROUND OR IN THE FORM OF\nPELLETS, RESULTING FROM THE EXTRACTION OFGROUND-NUT OIL - OIL-CAKE AND OTHER SOLID\nRESIDUES, WHETHER ORNOT GROUND OR IN THE FORM OF PELLETS, RESULTINGFROM THE\nEXTRACTION OF GROUND-NUT OIL : OIL-CAKE AND OIL-CAKE MEAL OF GROUND-NUT, SOLVENT\nEXTRACTED VARIETY (DEFATTED)", - "hsn_code": "23050020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHEROR NOT GROUND OR IN THE FORM OF\nPELLETS, RESULTING FROM THE EXTRACTION OFGROUND-NUT OIL - OIL-CAKE AND OTHER SOLID\nRESIDUES, WHETHER ORNOT GROUND OR IN THE FORM OF PELLETS, RESULTINGFROM THE\nEXTRACTION OF GROUND-NUT OIL : OTHER", - "hsn_code": "23050090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COTTON SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nDECORTICATED EXPELLER VARIETY", - "hsn_code": "23061010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COTTON SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nDECORTICATED, SOLVENT EXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23061020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COTTON SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nUNDECORTICATED, EXPELLER VARIETY", - "hsn_code": "23061030" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COTTON SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nUNDECORTICATED, SOLVENT EXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23061040" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COTTON SEEDS : OTHER", - "hsn_code": "23061090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF LINSEED : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER\nVARIETY", - "hsn_code": "23062010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF LINSEED : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23062020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF LINSEED : OTHER", - "hsn_code": "23062090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF SUNFLOWER SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nEXPELLER VARIETY", - "hsn_code": "23063010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF SUNFLOWER SEEDS : OIL-CAKE AND OIL-CAKE MEAL,\nSOLVENT EXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23063020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF SUNFLOWER SEEDS : OTHER", - "hsn_code": "23063090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF RAPE OR COLZA SEEDS : OF LOW ERUCIC ACID RAPE OR\nCOLZA SEEDS", - "hsn_code": "23064100" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF RAPE OR COLZA SEEDS : OTHER", - "hsn_code": "23064900" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COCONUT OR COPRA : OIL-CAKE AND OIL-CAKE MEAL,\nEXPELLER VARIETY", - "hsn_code": "23065010" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COCONUT OR COPRA : OIL-CAKE AND OIL-CAKE MEAL,\nSOLVENT EXTRACTED (DEFATTED) VARIETY", - "hsn_code": "23065020" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OF COCONUT OR COPRA : OTHER", - "hsn_code": "23065090" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 OF PALM NUTS OR KERNELS", - "hsn_code": "23066000" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 OF MAIZE (CORN) GERM", - "hsn_code": "23067000" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF MOWRA SEEDS", - "hsn_code": "23069011" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF MUSTARD SEEDS", - "hsn_code": "23069012" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF NIGER SEEDS", - "hsn_code": "23069013" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF SEASAMUM SEEDS", - "hsn_code": "23069014" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF MANGO KERNEL", - "hsn_code": "23069015" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF SAL (DE-OILED)", - "hsn_code": "23069016" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF CASTOR SEEDS", - "hsn_code": "23069017" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF NEEM SEEDS", - "hsn_code": "23069018" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, EXPELLER VARIETY :\nOF OTHER SEEDS", - "hsn_code": "23069019" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF MUSTARD SEEDS", - "hsn_code": "23069021" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF NIGER SEEDS", - "hsn_code": "23069022" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF CARDI SEEDS", - "hsn_code": "23069023" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF SEASAMUM SEEDS", - "hsn_code": "23069024" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF MANGO KERNEL", - "hsn_code": "23069025" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF SAL (DE-OILED)", - "hsn_code": "23069026" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF CASTOR SEEDS", - "hsn_code": "23069027" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF NEEM SEEDS", - "hsn_code": "23069028" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OIL-CAKE AND OIL-CAKE MEAL, SOLVENT\nEXTRACTED (DEFATTED) VARIETY : OF OTHER SEEDS", - "hsn_code": "23069029" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : RESIDUES BABOOL SEED EXTRACTION", - "hsn_code": "23069030" - }, - { - "description": "OIL-CAKE AND OTHER SOLID RESIDUES, WHETHER OR NOT GROUND OR IN THE FORM\nOFPELLETS, RESULTING FROM THE EXTRACTION OFVEGETABLE FATS OR OILS, OTHER THAN\nTHOSEOF HEADING 2304 OR 2305 - OTHER : OTHER", - "hsn_code": "23069090" - }, - { - "description": "WINE LEES; ARGOL", - "hsn_code": "23070000" - }, - { - "description": "VEGETABLE MATERIALS AND VEGETABLE WASTE, VEGETABLE RESIDUES AND BY-PRODUCTS,\nWHETHER OR NOT IN THE FORM OF PELLETS, OFA KIND USED IN ANIMAL FEEDING,\nNOTELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "23080000" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING DOG OR CAT FOOD, PUT UP FOR RETAIL\nSALE", - "hsn_code": "23091000" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : COMPOUNDED ANIMAL FEED", - "hsn_code": "23099010" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : CONCENTRATES FOR\nCOMPOUND ANIMAL FEED", - "hsn_code": "23099020" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : FEEDS FOR FISH (PRAWN, ETC.) :\nPRAWN AND SHRIMPS FEED", - "hsn_code": "23099031" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : FEEDS FOR FISH (PRAWN, ETC.) :\nFISH MEAL IN POWDERED FORM", - "hsn_code": "23099032" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : FEEDS FOR FISH (PRAWN, ETC.) :\nOTHER", - "hsn_code": "23099039" - }, - { - "description": "PREPARATIONS OF A KIND USED IN ANIMAL FEEDING - OTHER : OTHER", - "hsn_code": "23099090" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nFLUE CURED VIRGINIA TOBACCO", - "hsn_code": "24011010" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nSUN CURED COUNTRY (NATU) TOBACCO", - "hsn_code": "24011020" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nSUN CURED VIRGINIA TOBACCO", - "hsn_code": "24011030" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nBURLEY TOBACCO", - "hsn_code": "24011040" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nTOBACCO FOR MANUFACTURE OF BIRIS, NOT STEMMED", - "hsn_code": "24011050" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nTOBACCO FOR MANUFACTURE OF CHEWING TOBACCO", - "hsn_code": "24011060" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nTOBACCO FOR MANUFACTURE OF CIGAR AND CHEROOT", - "hsn_code": "24011070" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nTOBACCO FOR MANUFACTURE OF HOOKAH TOBACCO", - "hsn_code": "24011080" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, NOT STEMMED OR STRIPPED :\nOTHER", - "hsn_code": "24011090" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : FLUE CURED VIRGINIA TOBACCO", - "hsn_code": "24012010" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : SUN CURED COUNTRY (NATU) TOBACCO", - "hsn_code": "24012020" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : SUN CURED VIRGINIA TOBACCO", - "hsn_code": "24012030" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : BURLEY TOBACCO", - "hsn_code": "24012040" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : TOBACCO FOR MANUFACTURE OF BIRIS", - "hsn_code": "24012050" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : TOBACCO FOR MANUFACTURE OF CHEWING TOBACCO", - "hsn_code": "24012060" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : TOBACCO FOR MANUFACTURE OF CIGAR AND CHEROOT", - "hsn_code": "24012070" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : TOBACCO FOR MANUFACTURE OF HOOKAH TOBACCO", - "hsn_code": "24012080" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO, PARTLY OR WHOLLY STEMMED\nOR STRIPPED : OTHER", - "hsn_code": "24012090" - }, - { - "description": "UNMANUFACTURED TOBACCO; TOBACCO REFUSE - TOBACCO REFUSE", - "hsn_code": "24013000" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARS, CHEROOTS AND CIGARILLOS, CONTAINING TOBACCO : CIGAR AND CHEROOTS", - "hsn_code": "24021010" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARS, CHEROOTS AND CIGARILLOS, CONTAINING TOBACCO : CIGARILLOS", - "hsn_code": "24021020" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARS, CHEROOTS AND CIGARILLOS, CONTAINING TOBACCO : CIGAR AND CHEROOTS", - "hsn_code": "24022010" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARS, CHEROOTS AND CIGARILLOS, CONTAINING TOBACCO : CIGARILLOS", - "hsn_code": "24022020" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARETTES, CONTAINING TOBACCO : FILTER CIGARETTES OF LENGTH (INCLUDING THE LENGTH\nOF THE FILTER, THE LENGTH OF FILTER BEING 11 MILLIMETRES OR ITS ACTUAL LENGTH,\nWHICHEVER IS MORE) NOT EXCEEDING 60 MILLIMETRES", - "hsn_code": "24022030" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARETTES, CONTAINING TOBACCO : FILTER CIGARETTES OF LENGTH (INCLUDING THE LENGTH\nOF THE FILTER, THE LENGTH OF FILTER BEING 11 MILLIMETRES OR ITS ACTUAL LENGTH,\nWHICHEVER IS MORE) EXCEEDING 60 MILLIMETRES BUT NOT EXCEEDING 70 MILLIMETRES", - "hsn_code": "24022040" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARETTES, CONTAINING TOBACCO : FILTER CIGARETTES OF LENGTH (INCLUDING THE LENGTH\nOF THE FILTER, THE LENGTH OF FILTER BEING 11 MILLIMETRES OR ITS ACTUAL LENGTH,\nWHICHEVER IS MORE) EXCEEDING 70 MILLIMETRES BUT NOT EXCEEDING 75 MILLIMETRES", - "hsn_code": "24022050" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nCIGARETTES, CONTAINING TOBACCO : OTHER", - "hsn_code": "24022090" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nOTHER : CIGARETTES OF TOBACCO SUBSTITUTES", - "hsn_code": "24029010" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nOTHER : CIGARILLOS OF TOBACCO SUBSTITUTES", - "hsn_code": "24029020" - }, - { - "description": "CIGARS, CHEROOTS, CIGARILLOS AND CIGARETTES, OF TOBACCO OR OF TOBACCO SUBSTITUTES -\nOTHER : OTHER", - "hsn_code": "24029090" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--WATER PIPE TOBACCO SPECIFIED IN SUB-HEADING NOTE TO THIS CHAPTER---\nHUKKAH OR GUDAKU TOBACCO", - "hsn_code": "24031110" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--WATER PIPE TOBACCO SPECIFIED IN SUB-HEADING NOTE TO THIS CHAPTER---\nOTHER", - "hsn_code": "24031190" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--OTHER---SMOKING MIXTURES FOR PIPES AND CIGARETTES", - "hsn_code": "24031910" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--OTHER---BIRIS---OTHER THAN PAPER ROLLED BIRIS, MANUFACTURED WITHOUT\nTHE AID OF TOBACCO", - "hsn_code": "24031921" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--OTHER---BIRIS----OTHER", - "hsn_code": "24031929" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;\"HOMOGENISED\" OR \"RECONSTITUTED\" TOBACCO;TOBACCO EXTRACTS AND\nESSENCES-SMOKING TOBACCO, WHETHER OR NTO CONTAINING TOBACCO SUBSTITUTES IN ANY\nPROPORTION--OTHER---OTHER", - "hsn_code": "24031990" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : HOMOGENISED OR RECONSTITUTED TOBACCO", - "hsn_code": "24039100" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : CHEWING TOBACCO", - "hsn_code": "24039910" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : PREPARATIONS CONTAINING CHEWING TOBACCO", - "hsn_code": "24039920" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : JARDA SCENTED TOBACCO", - "hsn_code": "24039930" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : SNUFF", - "hsn_code": "24039940" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : PREPARATIONS CONTAINING SNUFF", - "hsn_code": "24039950" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : TOBACCO EXTRACTS AND ESSENCE", - "hsn_code": "24039960" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : CUT-TOBACCO", - "hsn_code": "24039970" - }, - { - "description": "OTHER MANUFACTURED TOBACCO AND MANUFACTURED TOBACCO\nSUBSTITUTES;HOMOGENISED OR RECONSTITUTED TOBACCO; TOBACCO EXTRACTS AND\nESSENCES - OTHER : OTHER : OTHER", - "hsn_code": "24039990" - }, - { - "description": "SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM CHLORIDE, WHETHER\nOR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR FREE FLOWING\nAGENTS; SEA WATER - SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM\nCHLORIDE, WHETHER OR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR\nFREE FLOWING AGENTS; SEA WATER: COMMON SALT (INCLUDING IODISED SALT)", - "hsn_code": "25010010" - }, - { - "description": "SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM CHLORIDE, WHETHER\nOR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR FREE FLOWING\nAGENTS; SEA WATER - SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM\nCHLORIDE, WHETHER OR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR\nFREE FLOWING AGENTS; SEA WATER: ROCK SALT", - "hsn_code": "25010020" - }, - { - "description": "SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM CHLORIDE, WHETHER\nOR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR FREE FLOWING\nAGENTS; SEA WATER - SALT (INCLUDING TABLE SALT AND DENATURED SALT) AND PURE SODIUM\nCHLORIDE, WHETHER OR NOT IN AQUEOUS SOLUTION OR CONTAINING ADDED ANTI-CAKING OR\nFREE FLOWING AGENTS; SEA WATER: OTHER", - "hsn_code": "25010090" - }, - { - "description": "UNROASTED IRON PYRITES", - "hsn_code": "25020000" - }, - { - "description": "SULPHUR OF ALL KINDS, OTHER THAN SUBLIMED SULPHUR, PRECIPITATED SULPHUR AND\nCOLLODIAL SULPHUR - SULPHUR OF ALL KINDS, OTHER THAN SUBLIMED SULPHUR,\nPRECIPITATED SULPHUR AND COLLODIAL SULPHUR: SULPHUR RECOVERED AS BY-PRODUCT IN\nREFINING OF CRUDE OIL", - "hsn_code": "25030010" - }, - { - "description": "SULPHUR OF ALL KINDS, OTHER THAN SUBLIMED SULPHUR, PRECIPITATED SULPHUR AND\nCOLLODIAL SULPHUR - SULPHUR OF ALL KINDS, OTHER THAN SUBLIMED SULPHUR,\nPRECIPITATED SULPHUR AND COLLODIAL SULPHUR: OTHER", - "hsn_code": "25030090" - }, - { - "description": "NATURAL GRAPHITE - IN POWDER OR IN FLAKES:GRAPHITE, CRYSTALLINE", - "hsn_code": "25041010" - }, - { - "description": "NATURAL GRAPHITE - IN POWDER OR IN FLAKES:GRAPHITE, AMORPHOUS", - "hsn_code": "25041020" - }, - { - "description": "NATURAL GRAPHITE - IN POWDER OR IN FLAKES:OTHER", - "hsn_code": "25041090" - }, - { - "description": "NATURAL GRAPHITE - OTHER: GRAPHITE, MICRONISED", - "hsn_code": "25049010" - }, - { - "description": "NATURAL GRAPHITE - OTHER: OTHER", - "hsn_code": "25049090" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING\nSANDS OF CHAPTER 26 - SILICA SANDS AND QUARTZ SANDS: SILICA SANDS: PROCESSED (WHITE)", - "hsn_code": "25051011" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING\nSANDS OF CHAPTER 26 - SILICA SANDS AND QUARTZ SANDS: SILICA SANDS: PROCESSED\n(BROWN)", - "hsn_code": "25051012" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING\nSANDS OF CHAPTER 26 - SILICA SANDS AND QUARTZ SANDS: SILICA SANDS: OTHER", - "hsn_code": "25051019" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING\nSANDS OF CHAPTER 26 - SILICA SANDS AND QUARTZ SANDS: QUARTZ SANDS", - "hsn_code": "25051020" - }, - { - "description": "NATURAL SANDS OF ALL KINDS, WHETHER OR NOT COLOURED, OTHER THAN METAL-BEARING\nSANDS OF CHAPTER 26 OTHER", - "hsn_code": "25059000" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZ: IN LUMPS", - "hsn_code": "25061010" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZ: IN POWDER", - "hsn_code": "25061020" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE --- IN LUMPS", - "hsn_code": "25062010" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE --- IN POWDER", - "hsn_code": "25062020" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE --- OTHER", - "hsn_code": "25062090" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE : CRUDE OR ROUGHLY TRIMMED: IN LUMPS", - "hsn_code": "25062110" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE : CRUDE OR ROUGHLY TRIMMED: IN POWDER", - "hsn_code": "25062120" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE : CRUDE OR ROUGHLY TRIMMED: OTHER", - "hsn_code": "25062190" - }, - { - "description": "QUARTZ (OTHER THAN NATURAL SANDS); QUARTZITE, WHETHER OR NOT ROUGHLY TRIMMED\nOR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR\n(INCLUDING SQUARE) SHAPE - QUARTZITE : OTHER", - "hsn_code": "25062900" - }, - { - "description": "KAOLIN AND OTHER KAOLINIC CLAYS, WHETHER OR NOT CALCINED - KAOLIN AND OTHER\nKAOLINIC CLAYS, WHETHER OR NOT CALCINED: CRUDE", - "hsn_code": "25070010" - }, - { - "description": "KAOLIN AND OTHER KAOLINIC CLAYS, WHETHER OR NOT CALCINED - KAOLIN AND OTHER\nKAOLINIC CLAYS, WHETHER OR NOT CALCINED: OTHER: PHARMACEUTICAL GRADE", - "hsn_code": "25070021" - }, - { - "description": "KAOLIN AND OTHER KAOLINIC CLAYS, WHETHER OR NOT CALCINED - KAOLIN AND OTHER\nKAOLINIC CLAYS, WHETHER OR NOT CALCINED: OTHER: CERAMIC GRADE", - "hsn_code": "25070022" - }, - { - "description": "KAOLIN AND OTHER KAOLINIC CLAYS, WHETHER OR NOT CALCINED - KAOLIN AND OTHER\nKAOLINIC CLAYS, WHETHER OR NOT CALCINED: OTHER: OTHER", - "hsn_code": "25070029" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nBENTONITE: CRUDE", - "hsn_code": "25081010" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nBENTONITE: OTHER (INCLUDES PROCESSED AND GROUND)", - "hsn_code": "25081090" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nDECOLOURISING EARTHS AND FULLERS EARTH: PROCESSED (INCLUDING ACTIVATED)", - "hsn_code": "25082010" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nDECOLOURISING EARTHS AND FULLERS EARTH: OTHER", - "hsn_code": "25082090" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS - FIRE\nCLAY: NON-PLASTIC", - "hsn_code": "25083010" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS - FIRE\nCLAY: SEMI-PLASTIC", - "hsn_code": "25083020" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS - FIRE\nCLAY: PLASTIC", - "hsn_code": "25083030" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS - FIRE\nCLAY: OTHER", - "hsn_code": "25083090" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nOTHER CLAYS: BALL CLAY", - "hsn_code": "25084010" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nOTHER CLAYS: EARTH CLAY", - "hsn_code": "25084020" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nOTHER CLAYS: OTHER", - "hsn_code": "25084090" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: ANDALUSITE", - "hsn_code": "25085010" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: KYANITE: CRUDE, OTHER THAN CALCINED", - "hsn_code": "25085021" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: KYANITE: PROCESSED, OTHER THAN CALCINED\n(WASHED OR GROUND OR SCREENED OR BENEFICIATED)", - "hsn_code": "25085022" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: KYANITE: CALCINED", - "hsn_code": "25085023" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: SILLIMANITE: LUMPS", - "hsn_code": "25085031" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: SILLIMANITE: FINES (INCLUDING SAND)", - "hsn_code": "25085032" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nANDALUSITE, KYANITE AND SILLIMANITE: SILLIMANITE: OTHER", - "hsn_code": "25085039" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nMULLITE", - "hsn_code": "25086000" - }, - { - "description": "OTHER CLAYS (NOT INCLUDING EXPANDED CLAYS OF HEADING 6806), ANDALUSITE, KYANITE\nAND SILLIMANITE, WHETHER OR NOT CALCINED; MULLITE; CHAMOTTE OR DINAS EARTHS -\nCHAMOTTE OR DINAS EARTHS", - "hsn_code": "25087000" - }, - { - "description": "CHALK", - "hsn_code": "25090000" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - UNGROUND: NATURAL CALCIUM PHOSPHATE", - "hsn_code": "25101010" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - UNGROUND: NATURAL ALUMINIUM CALCIUM PHOSPHATE", - "hsn_code": "25101020" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - UNGROUND: NATURAL CALCIUM PHOSPHATE APATITE", - "hsn_code": "25101030" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - UNGROUND: OTHER", - "hsn_code": "25101090" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - GROUND: NATURAL CALCIUM PHOSPHATES", - "hsn_code": "25102010" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - GROUND: NATURAL ALUMINIUM CALCIUM PHOSPHATE", - "hsn_code": "25102020" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - GROUND: NATURAL CALCIUM PHOSPHATES APATITE", - "hsn_code": "25102030" - }, - { - "description": "NATURAL CALCIUM PHOSPHATES, NATURAL ALUMINIUM CALCIUM PHOSPHATES AND\nPHOSPHATIC CHALK - GROUND: OTHER", - "hsn_code": "25102090" - }, - { - "description": "NATURAL BARIUM SULPHATE (BARYTES); NATURAL BARIUM CARBONATE (WITHERITE),\nWHETHER OR NOT CALCINED, OTHER THAN BARIUM OXIDE OF HEADING 2816 - NATURAL\nBARIUM SULPHATE (BARYTES): LUMPS", - "hsn_code": "25111010" - }, - { - "description": "NATURAL BARIUM SULPHATE (BARYTES); NATURAL BARIUM CARBONATE (WITHERITE),\nWHETHER OR NOT CALCINED, OTHER THAN BARIUM OXIDE OF HEADING 2816 - NATURAL\nBARIUM SULPHATE (BARYTES): POWDER", - "hsn_code": "25111020" - }, - { - "description": "NATURAL BARIUM SULPHATE (BARYTES); NATURAL BARIUM CARBONATE (WITHERITE),\nWHETHER OR NOT CALCINED, OTHER THAN BARIUM OXIDE OF HEADING 2816 - NATURAL\nBARIUM SULPHATE (BARYTES): OTHER", - "hsn_code": "25111090" - }, - { - "description": "NATURAL BARIUM SULPHATE (BARYTES); NATURAL BARIUM CARBONATE (WITHERITE),\nWHETHER OR NOT CALCINED, OTHER THAN BARIUM OXIDE OF HEADING 2816 - NATURAL\nBARIUM CARBONATE (WITHERITE)", - "hsn_code": "25112000" - }, - { - "description": "SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND SIMILAR\nSILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY OF 1 OR\nLESS - SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND\nSIMILAR SILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY\nOF 1 OR LESS: KIESELGUHR", - "hsn_code": "25120010" - }, - { - "description": "SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND SIMILAR\nSILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY OF 1 OR\nLESS - SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND\nSIMILAR SILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY\nOF 1 OR LESS: TRIPOLITE", - "hsn_code": "25120020" - }, - { - "description": "SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND SIMILAR\nSILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY OF 1 OR\nLESS - SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND\nSIMILAR SILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY\nOF 1 OR LESS: DIATOMITE", - "hsn_code": "25120030" - }, - { - "description": "SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND SIMILAR\nSILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY OF 1 OR\nLESS - SILICEOUS FOSSIL MEALS (FOR EXAMPLE, KIESELGUHR, TRIPOLITE AND DIATOMITE) AND\nSIMILAR SILICEOUS EARTHS, WHETHER OR NOT CALCINED, OF AN APPARENT SPECIFIC GRAVITY\nOF 1 OR LESS: OTHER", - "hsn_code": "25120090" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - PUMICE STONE", - "hsn_code": "25131000" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - PUMICE STONE: CRUDE OR IN IRREGULAR\nPIECES, INCLUDING CRUSHED PUMICE (BIMSKIES)", - "hsn_code": "25131100" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - PUMICE STONE: OTHER", - "hsn_code": "25131900" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - EMERY, NATURAL CORUNDUM, NATURAL\nGARNETAND OTHER NATURAL ABRASIVES: EMERY", - "hsn_code": "25132010" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - EMERY, NATURAL CORUNDUM, NATURAL\nGARNETAND OTHER NATURAL ABRASIVES: NATURAL CORUNDUM", - "hsn_code": "25132020" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - EMERY, NATURAL CORUNDUM, NATURAL\nGARNETAND OTHER NATURAL ABRASIVES: NATURAL GARNET", - "hsn_code": "25132030" - }, - { - "description": "PUMICE STONE; EMERY; NATURAL CORUNDUM, NATURAL GARNET AND OTHER NATURAL\nABRASIVES, WHETHER OR NOT HEAT-TREATED - EMERY, NATURAL CORUNDUM, NATURAL\nGARNETAND OTHER NATURAL ABRASIVES: OTHER", - "hsn_code": "25132090" - }, - { - "description": "SLATE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE,\nINTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE", - "hsn_code": "25140000" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - MARBLE AND TRAVERTINE: CRUDE OR\nROUGHLY TRIMMED", - "hsn_code": "25151100" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - MARBLE AND TRAVERTINE: MERELY CUT, BY\nSAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)\nSHAPE: BLOCKS", - "hsn_code": "25151210" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - MARBLE AND TRAVERTINE: MERELY CUT, BY\nSAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)\nSHAPE: SLABS", - "hsn_code": "25151220" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - MARBLE AND TRAVERTINE: MERELY CUT, BY\nSAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)\nSHAPE: OTHER", - "hsn_code": "25151290" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - ECAUSSINE AND OTHER CALCAREOUS\nMONUMENTAL OR BUILDING STONE; ALABASTER: ALABASTER", - "hsn_code": "25152010" - }, - { - "description": "MARBLE, TRAVERTINE, ECAUSSINE AND OTHER CALCAREOUS MONUMENTAL OR BUILDING\nSTONE OF AN APPARENT SPECIFIC GRAVITY OF 2.5 OR MORE, AND ALABASTER, WHETHER OR\nNOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS\nOF A RECTANGULAR (INCLUDING SQUARE) SHAPE - ECAUSSINE AND OTHER CALCAREOUS\nMONUMENTAL OR BUILDING STONE; ALABASTER: OTHER", - "hsn_code": "25152090" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - GRANITE : CRUDE OR\nROUGHLY TRIMMED", - "hsn_code": "25161100" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - GRANITE : MERELY CUT, BY\nSAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)\nSHAPE", - "hsn_code": "25161200" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - SANDSTONE", - "hsn_code": "25162000" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - SANDSTONE: CRUDE OR\nROUGHLY TRIMMED", - "hsn_code": "25162100" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - SANDSTONE: MERELY CUT,\nBY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE)\nSHAPE", - "hsn_code": "25162200" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - OTHER MONUMENTAL OR\nBUILDING STONE: PAKUR STONE", - "hsn_code": "25169010" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - OTHER MONUMENTAL OR\nBUILDING STONE: STONE BOULDERS", - "hsn_code": "25169020" - }, - { - "description": "GRANITE, PORPHYRY, BASALT, SANDSTONE AND OTHER MONUMENTAL OR BUILDING STONE,\nWHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO\nBLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE - OTHER MONUMENTAL OR\nBUILDING STONE: OTHER", - "hsn_code": "25169090" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED - PEBBLES, GRAVEL, BROKEN OR CRUSHED\nSTONE, OF A KIND COMMONLY USED FOR CONCRETE AGGREGATES, FOR ROAD METALLING OR\nFOR RAILWAY OR OTHER BALLAST, SHINGLE AND FLINT, WHETHER OR NOT HEAT-TREATED:\nPAKUR STONE, CRUSHED OR BROKEN", - "hsn_code": "25171010" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED PEBBLES, GRAVEL, BROKEN OR CRUSHED\nSTONE, OF A KIND COMMONLY USED FOR CONCRETE AGGREGATES, FOR ROAD METALLING OR\nFOR RAILWAY OR OTHER BALLAST, SHINGLE AND FLINT, WHETHER OR NOT HEAT-TREATED:\nFLINT", - "hsn_code": "25171020" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED PEBBLES, GRAVEL, BROKEN OR CRUSHED\nSTONE, OF A KIND COMMONLY USED FOR CONCRETE AGGREGATES, FOR ROAD METALLING OR\nFOR RAILWAY OR OTHER BALLAST, SHINGLE AND FLINT, WHETHER OR NOT HEAT-TREATED:\nOTHER", - "hsn_code": "25171090" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED -MACADAM OF SLAG, DROSS OR SIMILAR\nINDUSTRIAL WASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN SUB\nHEADING 2517 10", - "hsn_code": "25172000" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED TARRED MACADAM", - "hsn_code": "25173000" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED - GRANULES, CHIPPINGS AND POWDER, OF\nSTONE OF HEADING 2515 OR 2516, WHETHER OR NOT HEAT-TREATED: OF MARBLE", - "hsn_code": "25174100" - }, - { - "description": "PEBBLES, GRAVEL, BROKEN OR CRUSHED STONE, OF A KIND COMMONLY USED FOR CONCRETE\nAGGREGATES, FOR ROAD METALLING OR FOR RAILWAY OR OTHER BALLAST, SHINGLE AND\nFLINT, WHETHER OR NOT HEAT-TREATED; MACADAM OF SLAG, DROSS OR SIMILAR INDUSTRIAL\nWASTE, WHETHER OR NOT INCORPORATING THE MATERIALS CITED IN THE FIRST PART OF THE\nHEADING; TARRED MACADAM; GRANULES, CHIPPINGS AND POWDER, OF STONES OF HEADING\n2515 OR 2516, WHETHER OR NOT HEAT-TREATED - GRANULES, CHIPPINGS AND POWDER, OF\nSTONE OF HEADING 2515 OR 2516, WHETHER OR NOT HEAT-TREATED: OTHER", - "hsn_code": "25174900" - }, - { - "description": "DOLOMITE, WHETHER OR NOT CALCINED OR SINTERED, INCLUDING DOLOMITE ROUGHLY\nTRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A\nRECTANGULAR (INCLUDING SQUARE) SHAPE; DOLOMITE RAMMING MIX -DOLOMITE NOT\nCALCINED OR SINTERED", - "hsn_code": "25181000" - }, - { - "description": "DOLOMITE, WHETHER OR NOT CALCINED OR SINTERED, INCLUDING DOLOMITE ROUGHLY\nTRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A\nRECTANGULAR (INCLUDING SQUARE) SHAPE; DOLOMITE RAMMING MIX -CALCINED OR\nSINTERED DOLOMITE", - "hsn_code": "25182000" - }, - { - "description": "DOLOMITE, WHETHER OR NOT CALCINED OR SINTERED, INCLUDING DOLOMITE ROUGHLY\nTRIMMED OR MERELY CUT, BY SAWING OR OTHERWISE, INTO BLOCKS OR SLABS OF A\nRECTANGULAR (INCLUDING SQUARE) SHAPE; DOLOMITE RAMMING MIX -DOLOMITE RAMMING\nMIX", - "hsn_code": "25183000" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - NATURAL\nMAGNESIUM CARBONATE (MAGNESITE)", - "hsn_code": "25191000" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - OTHER:\nFUSED MAGNESIA (NATURAL)", - "hsn_code": "25199010" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - OTHER: DEAD\nBURNT (SINTERED) MAGNESIA", - "hsn_code": "25199020" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - OTHER:\nMAGNESIUM CALCINED (OTHER THAN DEAD-BURNT) NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "25199030" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - OTHER:\nMAGNESIUM OXIDE", - "hsn_code": "25199040" - }, - { - "description": "NATURAL MAGNESIUM CARBONATE (MAGNESITE); FUSED MAGNESIA; DEAD-BURNED\n(SINTERED) MAGNESIA, WHETHER OR NOT CONTAINING SMALL QUANTITIES OF OTHER OXIDES\nADDED BEFORE SINTERING; OTHER MAGNESIUM OXIDE, WHETHER OR NOT PURE - OTHER:\nOTHER", - "hsn_code": "25199090" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE)\nWHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATORS OR\nRETARDERS - GYPSUM; ANHYDRITE: NATURAL", - "hsn_code": "25201010" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE)\nWHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATORS OR\nRETARDERS - GYPSUM; ANHYDRITE: MARINE", - "hsn_code": "25201020" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE)\nWHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATORS OR\nRETARDERS - GYPSUM; ANHYDRITE: OTHER", - "hsn_code": "25201090" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE)\nWHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATORS OR\nRETARDERS - PLASTERS: CALCINED", - "hsn_code": "25202010" - }, - { - "description": "GYPSUM; ANHYDRITE; PLASTERS (CONSISTING OF CALCINED GYPSUM OR CALCIUM SULPHATE)\nWHETHER OR NOT COLOURED, WITH OR WITHOUT SMALL QUANTITIES OF ACCELERATORS OR\nRETARDERS - PLASTERS: OTHER", - "hsn_code": "25202090" - }, - { - "description": "LIMESTONE FLUX; LIMESTONE AND OTHER CALCAREOUS STONES, OF A KIND USED FOR THE\nMANUFACTURE OF LIME OR CEMENT - LIMESTONE FLUX; LIMESTONE AND OTHER CALCAREOUS\nSTONES, OF A KIND USED FOR THE MANUFACTURE OF LIME OR CEMENT: LIMESTONE FLUX (L.D.,\nBELOW 1% SIO2)", - "hsn_code": "25210010" - }, - { - "description": "LIMESTONE FLUX; LIMESTONE AND OTHER CALCAREOUS STONES, OF A KIND USED FOR THE\nMANUFACTURE OF LIME OR CEMENT - LIMESTONE FLUX; LIMESTONE AND OTHER CALCAREOUS\nSTONES, OF A KIND USED FOR THE MANUFACTURE OF LIME OR CEMENT: OTHER", - "hsn_code": "25210090" - }, - { - "description": "QUICKLIME, SLAKED LIME AND HYDRAULIC LIME, OTHER THAN CALCIUM OXIDE AND HYDROXIDE\nOF HEADING 2825 QUICKLIME", - "hsn_code": "25221000" - }, - { - "description": "QUICKLIME, SLAKED LIME AND HYDRAULIC LIME, OTHER THAN CALCIUM OXIDE AND HYDROXIDE\nOF HEADING 2825 SLAKED LIME", - "hsn_code": "25222000" - }, - { - "description": "QUICKLIME, SLAKED LIME AND HYDRAULIC LIME, OTHER THAN CALCIUM OXIDE AND HYDROXIDE\nOF HEADING 2825 HYDRAULIC LIME", - "hsn_code": "25223000" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS\nCEMENT CLINKERS", - "hsn_code": "25231000" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: WHITE CEMENT, WHETHER OR NOT ARTIFICIALLY COLOURED", - "hsn_code": "25232100" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: OTHER: ORDINARY PORTLAND CEMENT, DRY", - "hsn_code": "25232910" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: OTHER: ORDINARY PORTLAND CEMENT, COLOURED", - "hsn_code": "25232920" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: OTHER: PORTLAND POZZOLANA CEMENT", - "hsn_code": "25232930" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: OTHER: PORTLAND SLAG CEMENT", - "hsn_code": "25232940" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nPORTLAND CEMENT: OTHER: OTHER", - "hsn_code": "25232990" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nALUMINOUS CEMENT", - "hsn_code": "25233000" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nOTHER HYDRAULIC CEMENTS: SAGOL; ASHMOH", - "hsn_code": "25239010" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nOTHER HYDRAULIC CEMENTS: HIGH ALUMINA REFRACTORY CEMENT", - "hsn_code": "25239020" - }, - { - "description": "PORTLAND CEMENT, ALUMINOUS CEMENT, SLAG CEMENT, SUPERSULPHATE CEMENT AND\nSIMILAR HYDRAULIC CEMENTS, WHETHER OR NOT COLOURED OR IN THE FORM OF CLINKERS -\nOTHER HYDRAULIC CEMENTS: OTHER", - "hsn_code": "25239090" - }, - { - "description": "ASBESTOS - ASBESTOS: ASBESTOS IN ROCK FORM: CHRYSOTILE", - "hsn_code": "25240011" - }, - { - "description": "ASBESTOS - ASBESTOS: ASBESTOS IN ROCK FORM: AMPHIBOLE", - "hsn_code": "25240012" - }, - { - "description": "ASBESTOS - ASBESTOS: ASBESTOS IN ROCK FORM: OTHER", - "hsn_code": "25240019" - }, - { - "description": "ASBESTOS - ASBESTOS: FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH : CHRYSOLITE", - "hsn_code": "25240021" - }, - { - "description": "ASBESTOS - ASBESTOS: FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH : AMOSITE", - "hsn_code": "25240022" - }, - { - "description": "ASBESTOS - ASBESTOS: FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH : OTHER", - "hsn_code": "25240029" - }, - { - "description": "ASBESTOS - ASBESTOS: FLAKES OR POWDER: AMOSITE", - "hsn_code": "25240031" - }, - { - "description": "ASBESTOS - ASBESTOS: FLAKES OR POWDER: OTHER", - "hsn_code": "25240039" - }, - { - "description": "ASBESTOS - ASBESTOS: OTHER: WASTE", - "hsn_code": "25240091" - }, - { - "description": "ASBESTOS - ASBESTOS: OTHER: OTHER", - "hsn_code": "25240099" - }, - { - "description": "ASBESTOS - CROCIDOLITE", - "hsn_code": "25241000" - }, - { - "description": "ASBESTOS - OTHER --- IN ROCK FORM ---- CHRYSOTILE", - "hsn_code": "25249011" - }, - { - "description": "ASBESTOS - OTHER --- IN ROCK FORM ---- AMPHIBOLE", - "hsn_code": "25249012" - }, - { - "description": "ASBESTOS - OTHER --- IN ROCK FORM ---- CRYSOLITE", - "hsn_code": "25249013" - }, - { - "description": "ASBESTOS - OTHER --- IN ROCK FORM ---- AMOSITE", - "hsn_code": "25249014" - }, - { - "description": "ASBESTOS - OTHER --- IN ROCK FORM ---- OTHER", - "hsn_code": "25249019" - }, - { - "description": "ASBESTOS - OTHER --- FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH ---- CHRYSOTILE", - "hsn_code": "25249021" - }, - { - "description": "ASBESTOS - OTHER --- FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH ---- AMPHIBOLE", - "hsn_code": "25249022" - }, - { - "description": "ASBESTOS - OTHER --- FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH ---- CRYSOLITE", - "hsn_code": "25249023" - }, - { - "description": "ASBESTOS - OTHER --- FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH ---- AMOSITE", - "hsn_code": "25249024" - }, - { - "description": "ASBESTOS - OTHER --- FIBRE RAW, BEATEN OR WASHED OR GRADED TO LENGTH ---- OTHER", - "hsn_code": "25249029" - }, - { - "description": "ASBESTOS - OTHER --- FLAKES OR POWDER ---- CHRYSOTILE", - "hsn_code": "25249031" - }, - { - "description": "ASBESTOS - OTHER --- FLAKES OR POWDER ---- AMPHIBOLE", - "hsn_code": "25249032" - }, - { - "description": "ASBESTOS - OTHER --- FLAKES OR POWDER ---- CRYSOLITE", - "hsn_code": "25249033" - }, - { - "description": "ASBESTOS - OTHER --- FLAKES OR POWDER ---- AMOSITE", - "hsn_code": "25249034" - }, - { - "description": "ASBESTOS - OTHER --- FLAKES OR POWDER ---- OTHER", - "hsn_code": "25249039" - }, - { - "description": "ASBESTOS - OTHER --- OTHER ---- WASTE", - "hsn_code": "25249091" - }, - { - "description": "ASBESTOS - OTHER --- OTHER ---- OTHER", - "hsn_code": "25249099" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - CRUDE MICA AND MICA RIFTED INTO SHEETS OR\nSPLITTINGS: MICA BLOCKS", - "hsn_code": "25251010" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - CRUDE MICA AND MICA RIFTED INTO SHEETS OR\nSPLITTINGS: CONDENSOR FILMS TRIMMED BUT NOT CUT TO SHAPE", - "hsn_code": "25251020" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - CRUDE MICA AND MICA RIFTED INTO SHEETS OR\nSPLITTINGS: MICA SPLITTINGS, BOOK FORM", - "hsn_code": "25251030" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - CRUDE MICA AND MICA RIFTED INTO SHEETS OR\nSPLITTINGS: MICA SPLITTINGS, LOOSE", - "hsn_code": "25251040" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - CRUDE MICA AND MICA RIFTED INTO SHEETS OR\nSPLITTINGS: OTHER", - "hsn_code": "25251090" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: MICA FLAKES, 2.20 MESH", - "hsn_code": "25252010" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: MICA POWDER, DRY GROUND", - "hsn_code": "25252020" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: MICA POWDER, MICRONISED", - "hsn_code": "25252030" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: MICA POWDER, WET GROUND", - "hsn_code": "25252040" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: MICA POWDER, CALCINED", - "hsn_code": "25252050" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA POWDER: OTHER", - "hsn_code": "25252090" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA WASTE: MICA MINE SCRAP AND WASTE", - "hsn_code": "25253010" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA WASTE: MICA FACTORY SCRAP", - "hsn_code": "25253020" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA WASTE: MICA CUTTINGS BOOK FORM", - "hsn_code": "25253030" - }, - { - "description": "MICA, INCLUDING SPLITTINGS; MICA WASTE - MICA WASTE: OTHER", - "hsn_code": "25253090" - }, - { - "description": "NATURAL STEATITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR\nOTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE; TALC -\nNOT CRUSHED, NOT POWDERED: STEATITE (SOAP STONE, ETC.) BLOCK", - "hsn_code": "25261010" - }, - { - "description": "NATURAL STEATITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR\nOTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE; TALC -\nNOT CRUSHED, NOT POWDERED: STEATITE (SOAP STONE, ETC.) LUMPS", - "hsn_code": "25261020" - }, - { - "description": "NATURAL STEATITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR\nOTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE; TALC -\nNOT CRUSHED, NOT POWDERED: OTHER", - "hsn_code": "25261090" - }, - { - "description": "NATURAL STEATITE, WHETHER OR NOT ROUGHLY TRIMMED OR MERELY CUT, BY SAWING OR\nOTHERWISE, INTO BLOCKS OR SLABS OF A RECTANGULAR (INCLUDING SQUARE) SHAPE; TALC\nCRUSHED OR POWDERED", - "hsn_code": "25262000" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT\nINCLUDING BORATES SEPARATED FROM NATURAL BRINE;NATURAL BORIC ACID CONTAINING\nNOT MORE THAN 85% OF H2BO3 CALCULATED ON THE DRY WEIGHT---NATURAL SODIUM\nBORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED)", - "hsn_code": "25280010" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT\nINCLUDING BORATES SEPARATED FROM NATURAL BRINE;NATURAL BORIC ACID CONTAINING\nNOT MORE THAN 85% OF H2BO3 CALCULATED ON THE DRY WEIGHT---NATURAL BORIC ACID\n(CONTAINING NOT MORE THAN 85% OF H2BO3)", - "hsn_code": "25280020" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT\nINCLUDING BORATES SEPARATED FROM NATURAL BRINE;NATURAL BORIC ACID CONTAINING\nNOT MORE THAN 85% OF H2BO3 CALCULATED ON THE DRY WEIGHT---NATURAL CALCIUM\nBORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED)", - "hsn_code": "25280030" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT\nINCLUDING BORATES SEPARATED FROM NATURAL BRINE;NATURAL BORIC ACID CONTAINING\nNOT MORE THAN 85% OF H2BO3 CALCULATED ON THE DRY WEIGHT---OTHER", - "hsn_code": "25280090" - }, - { - "description": "NATURAL BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED), BUT NOT\nINCLUDING BORATES SEPARATED FROM NATURAL BRINE; NATURAL BORIC ACID CONTAINING\nNOT MORE THAN 85% OF H3BO3 CALCULATED ON THE DRY WEIGHT- OTHER: NATURAL\nCALCIUM BORATES AND CONCENTRATES THEREOF (WHETHER OR NOT CALCINED)", - "hsn_code": "25289020" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; FLUORSPAR - FELDSPAR: LUMPS", - "hsn_code": "25291010" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; FLUORSPAR - FELDSPAR: POWDER", - "hsn_code": "25291020" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; FLUORSPAR - FLUORSPAR:\nCONTAINING BY WEIGHT 97% OR LESS OF CALCIUM FLUORIDE", - "hsn_code": "25292100" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; FLUORSPAR - FLUORSPAR:\nCONTAINING BY WEIGHT MORE THAN 97% OF CALCIUM FLUORIDE", - "hsn_code": "25292200" - }, - { - "description": "FELDSPAR; LEUCITE; NEPHELINE AND NEPHELINE SYENITE; FLUORSPAR - LEUCITE; NEPHELINE\nAND NEPHELINE SYENITE", - "hsn_code": "25293000" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - VERMICULITE, PERLITE AND\nCHLORITES, UNEXPANDED: VERMICULITE", - "hsn_code": "25301010" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - VERMICULITE, PERLITE AND\nCHLORITES, UNEXPANDED: PERLITE", - "hsn_code": "25301020" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - VERMICULITE, PERLITE AND\nCHLORITES, UNEXPANDED: OTHERS (INCLUDING POWDER)", - "hsn_code": "25301090" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED KIESERITE, EPSOMITE\n(NATURAL MAGNESIUM SULPHATES)", - "hsn_code": "25302000" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: MEERSCHAUM\n(WHETHER OR NOT IN POLISHED PIECES) AND AMBER AGGLOMERATED; MEERACHAUM AND\nAGGLOMERATED AMBER IN PLATES, RODS, ETC., NOT WORKED AFTER MOULDING JET", - "hsn_code": "25309010" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: NATURAL ARSENIC\nSULPHIDES (SUCH AS ORPIMENT)", - "hsn_code": "25309020" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: CALCITE", - "hsn_code": "25309030" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: ORES AND\nCONCENTRATES OF RARE EARTH METALS", - "hsn_code": "25309040" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: WOLLASTONITE", - "hsn_code": "25309050" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: EARTH COLOUR\nOCHRE, CRUDE", - "hsn_code": "25309060" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER: OTHER PROCESSED\nEARTH COLOUR OCHRE", - "hsn_code": "25309070" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER:OTHER: STRONTIUM\nSULPHATE (NATURAL ORE)", - "hsn_code": "25309091" - }, - { - "description": "MINERAL SUBSTANCES NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER:OTHER: OTHER", - "hsn_code": "25309099" - }, - { - "description": "---Iron ore lumps (60% Fe or more)---60% Fe or more but below 62% Fe", - "hsn_code": "26011111" - }, - { - "description": "---Iron ore lumps (60% Fe or more)---62% Fe or more but below 62% Fe", - "hsn_code": "26011112" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- above 65% Fe", - "hsn_code": "26011119" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- below 55% Fe", - "hsn_code": "26011121" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 55% Fe or more but below 58% Fe", - "hsn_code": "26011122" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 58% Fe or more but below 60% Fe", - "hsn_code": "26011129" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 62% Fe or more but below 65% Fe", - "hsn_code": "26011131" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- above 65% Fe", - "hsn_code": "26011139" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- below 55% Fe", - "hsn_code": "26011141" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 55% Fe or more but below 58% Fe", - "hsn_code": "26011142" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 58% Fe or more but below 60% Fe", - "hsn_code": "26011143" - }, - { - "description": "---Iron ore lumps (60% Fe or more)--- 58% Fe or more but below 62% Fe", - "hsn_code": "26011149" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES - IRON ORES AND\nCONCENTRATES, OTHER THAN ROASTED IRON PYRITES : NON-AGGLOMERATED : IRON ORE\nCONCENTRATES", - "hsn_code": "26011150" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES - IRON ORES AND\nCONCENTRATES, OTHER THAN ROASTED IRON PYRITES : NON-AGGLOMERATED : OTHER", - "hsn_code": "26011190" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES - IRON ORES AND\nCONCENTRATES, OTHER THAN ROASTED IRON PYRITES : AGGLOMERATED : IRON ORE PELLETS", - "hsn_code": "26011210" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES - IRON ORES AND\nCONCENTRATES, OTHER THAN ROASTED IRON PYRITES : AGGLOMERATED : OTHER", - "hsn_code": "26011290" - }, - { - "description": "IRON ORES AND CONCENTRATES, INCLUDING ROASTED IRON PYRITES ROASTED IRON PYRITES", - "hsn_code": "26012000" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE (46% OR MORE)", - "hsn_code": "26020010" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE (44% OR MORE BUT BELOW 46%)", - "hsn_code": "26020020" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE (40% OR MORE BUT BELOW 44%)", - "hsn_code": "26020030" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE (35% OR MORE BUT BELOW 40%)", - "hsn_code": "26020040" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE (30% OR MORE BUT BELOW 35%)", - "hsn_code": "26020050" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: FERRUGINOUS (10% OR MORE BUT BELOW 30%)", - "hsn_code": "26020060" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: MANGANESE ORE SINTERS, AGGLOMERATED", - "hsn_code": "26020070" - }, - { - "description": "MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE ORES AND\nCONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON THE DRY\nWEIGHT - MANGANESE ORES AND CONCENTRATES, INCLUDING FERRUGINOUS MANGANESE\nORES AND CONCENTRATES WITH A MANGANESE CONTENT OF 20% OR MORE, CALCULATED ON\nTHE DRY WEIGHT: OTHER", - "hsn_code": "26020090" - }, - { - "description": "COPPER ORES AND CONCERTRATES", - "hsn_code": "26030000" - }, - { - "description": "NICKEL ORES AND CONCENTRATES", - "hsn_code": "26040000" - }, - { - "description": "COBALT ORES AND CONCENTRATES", - "hsn_code": "26050000" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES - ALUMINIUM ORES AND CONCENTRATES: BAUXITE\n(NATURAL), NOT CALCINED", - "hsn_code": "26060010" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES - ALUMINIUM ORES AND CONCENTRATES: BAUXITE\n(NATURAL), CALCINED", - "hsn_code": "26060020" - }, - { - "description": "ALUMINIUM ORES AND CONCENTRATES - ALUMINIUM ORES AND CONCENTRATES: OTHER\nALUMINIUM ORES AND CONCENTRATES", - "hsn_code": "26060090" - }, - { - "description": "LEAD ORES AND CONCENTRATES", - "hsn_code": "26070000" - }, - { - "description": "ZINC ORES AND CONCENTRATES", - "hsn_code": "26080000" - }, - { - "description": "TIN ORES AND CONCENTRATES", - "hsn_code": "26090000" - }, - { - "description": "CHROMIUM ORES AND CONCENTRATES - CHROMIUM ORES AND CONCENTRATES: CHROME ORE\nLUMPS, CONTAINING 47% CR2O3 AND ABOVE", - "hsn_code": "26100010" - }, - { - "description": "CHROMIUM ORES AND CONCENTRATES - CHROMIUM ORES AND CONCENTRATES: CHROME ORE\nLUMPS, CONTAINING 40% OR MORE BUT LESS THAN 47% CR2O3", - "hsn_code": "26100020" - }, - { - "description": "CHROMIUM ORES AND CONCENTRATES - CHROMIUM ORES AND CONCENTRATES: CHROME ORE\nLUMPS BELOW 40% CR2O3", - "hsn_code": "26100030" - }, - { - "description": "CHROMIUM ORES AND CONCENTRATES - CHROMIUM ORES AND CONCENTRATES: CHROME ORE\nFRIABLE AND CONCENTRATES FIXES CONTAINING 47% CR2O3 AND ABOVE", - "hsn_code": "26100040" - }, - { - "description": "CHROMIUM ORES AND CONCENTRATES - CHROMIUM ORES AND CONCENTRATES: OTHER", - "hsn_code": "26100090" - }, - { - "description": "TUNGSTEN ORES AND CONCENTRATES", - "hsn_code": "26110000" - }, - { - "description": "URANIUM OR THORIUM ORES AND CONCENTRATES - URANIUM ORES AND CONCENTRATES", - "hsn_code": "26121000" - }, - { - "description": "URANIUM OR THORIUM ORES AND CONCENTRATES - THORIUM ORES AND CONCENTRATES", - "hsn_code": "26122000" - }, - { - "description": "MOLYBDENUM ORES AND CONCENTRATES - ROASTED", - "hsn_code": "26131000" - }, - { - "description": "MOLYBDENUM ORES AND CONCENTRATES - OTHER", - "hsn_code": "26139000" - }, - { - "description": "TITANIUM ORES AND CONCEN TRATES - TITANIUM ORES AND CONCENTRATES: LIMENITE,\nUNPROCESSED", - "hsn_code": "26140010" - }, - { - "description": "TITANIUM ORES AND CONCEN TRATES - TITANIUM ORES AND CONCENTRATES: LIMENITE,\nUPGRADED (BENEFICIATED LIMENITE INCLUDING LIMENITE GROUND)", - "hsn_code": "26140020" - }, - { - "description": "TITANIUM ORES AND CONCEN TRATES - TITANIUM ORES AND CONCENTRATES: RUTILE : RARE\nEARTH OXIDES INCLUDING RUTILE SAND", - "hsn_code": "26140031" - }, - { - "description": "TITANIUM ORES AND CONCEN TRATES - TITANIUM ORES AND CONCENTRATES: RUTILE : OTHER", - "hsn_code": "26140039" - }, - { - "description": "TITANIUM ORES AND CONCEN TRATES - TITANIUM ORES AND CONCENTRATES: OTHER", - "hsn_code": "26140090" - }, - { - "description": "NIOBIUM, TANTALUM, VANADIUM OR ZIRCONIUM ORES AND CONCENTRATES ZIRCONIUM ORES\nAND CONCENTRATES", - "hsn_code": "26151000" - }, - { - "description": "NIOBIUM, TANTALUM, VANADIUM OR ZIRCONIUM ORES AND CONCENTRATES - OTHER :\nVANADIUM ORES AND CONCENTRATES", - "hsn_code": "26159010" - }, - { - "description": "NIOBIUM, TANTALUM, VANADIUM OR ZIRCONIUM ORES AND CONCENTRATES - OTHER :\nNIOBIUM OR TANTALUM ORES AND CONCENTRATES", - "hsn_code": "26159020" - }, - { - "description": "PRECIOUS METAL ORES AND CONCENTRATES SILVER ORES AND CONCENTRATES", - "hsn_code": "26161000" - }, - { - "description": "PRECIOUS METAL ORES AND CONCENTRATES - OTHER : GOLD ORES AND CONCENTRATES", - "hsn_code": "26169010" - }, - { - "description": "PRECIOUS METAL ORES AND CONCENTRATES - OTHER : OTHER", - "hsn_code": "26169090" - }, - { - "description": "OTHER ORES AND CONCENTRATES - ANTIMONY ORES AND CONCENTRATES", - "hsn_code": "26171000" - }, - { - "description": "OTHER ORES AND CONCENTRATES - OTHER", - "hsn_code": "26179000" - }, - { - "description": "GRANULATED SLAG (SLAG SAND) FROM THE MANUFACTURE OF IRON OR STEEL", - "hsn_code": "26180000" - }, - { - "description": "SLAG, DROSS (OTHER THAN GRANULATED SLAG), SCALINGS AND OTHER WASTE FROM THE\nMANUFACTURE OF IRON OR STEEL - SLAG, DROSS (OTHER THAN GRANULATED SLAG), SCALINGS\nAND OTHER WASTE FROM THE MANUFACTURE OF IRON OR STEEL: CONVERTED SLAG (SCULL) OF\nBLAST FURNACE", - "hsn_code": "26190010" - }, - { - "description": "SLAG, DROSS (OTHER THAN GRANULATED SLAG), SCALINGS AND OTHER WASTE FROM THE\nMANUFACTURE OF IRON OR STEEL - SLAG, DROSS (OTHER THAN GRANULATED SLAG), SCALINGS\nAND OTHER WASTE FROM THE MANUFACTURE OF IRON OR STEEL: OTHER", - "hsn_code": "26190090" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY ZINC : HARD\nZINC SPELTER", - "hsn_code": "26201100" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY ZINC : OTHER", - "hsn_code": "26201900" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY LEAD: LEADED\nGASOLINE SLUDGES AND LEADED ANTI-KNOCK COMPOUND SLUDGES", - "hsn_code": "26202100" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY LEAD: OTHER", - "hsn_code": "26202900" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY COPPER : BRASS\nDROSS", - "hsn_code": "26203010" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY COPPER : OTHER", - "hsn_code": "26203090" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY ALUMINIUM:\nALUMINIUM DROSS", - "hsn_code": "26204010" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - CONTAINING MAINLY ALUMINIUM:\nOTHER", - "hsn_code": "26204090" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS -CONTAINING ARSENIC, MERCURY,\nTHALLIUM OR THEIR MIXTURES, OF A KIND USED FOR THE EXTRACTION OF ARSENIC OR THOSE\nMETALS OR FOR THE MANUFACTURE OF THEIR CHEMICAL COMPOUNDS", - "hsn_code": "26206000" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - OTHER: CONTAINING ANTIMONY ,\nBERYLLIUM, CADMIUM, CHROMIUM OR THEIR MIXTURES", - "hsn_code": "26209100" - }, - { - "description": "SLAG, ASH AND RESIDUES (OTHER THAN FROM THE MANUFACTURE OF IRON OR STEEL),\nCONTAINING ARSENIC, METALS OR THEIR COMPOUNDS - OTHER: OTHER", - "hsn_code": "26209900" - }, - { - "description": "OTHER SLAG AND ASH, INLCUDING SEAWEED ASH (KELP); ASH AND RESIDUES FROM THE\nINCINERATION OF MUNICIPAL WASTE - ASH AND RESIDUES FROM THE INCINERATION OF\nMUNICIPAL WASTE", - "hsn_code": "26211000" - }, - { - "description": "OTHER SLAG AND ASH, INLCUDING SEAWEED ASH (KELP); ASH AND RESIDUES FROM THE\nINCINERATION OF MUNICIPAL WASTE - OTHER", - "hsn_code": "26219000" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL - COAL,\nWHETHER OR NOT PULVERISED, BUT NOT AGGLOMERATED: ANTHRACITE", - "hsn_code": "27011100" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL - COAL,\nWHETHER OR NOT PULVERISED, BUT NOT AGGLOMERATED: BITUMINOUS COAL", - "hsn_code": "27011200" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL - COAL,\nWHETHER OR NOT PULVERISED, BUT NOT AGGLOMERATED: - OTHER COAL: COKING COAL", - "hsn_code": "27011910" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL - COAL,\nWHETHER OR NOT PULVERISED, BUT NOT AGGLOMERATED: - OTHER COAL: STEAM COAL", - "hsn_code": "27011920" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL - COAL,\nWHETHER OR NOT PULVERISED, BUT NOT AGGLOMERATED: - OTHER COAL: OTHER", - "hsn_code": "27011990" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL -\nBRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL: ANTHRACITE\nAGGLOMERATED", - "hsn_code": "27012010" - }, - { - "description": "COAL; BRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL -\nBRIQUETTES, OVOIDS AND SIMILAR SOLID FUELS MANUFACTURED FROM COAL: OTHER", - "hsn_code": "27012090" - }, - { - "description": "LIGNITE, WHETHER OR NOT AGGLOMERATED, EXCLUDING JET - LIGNITE, WHETHER OR NOT\nPULVERISED, BUT NOT AGGLOMERATED", - "hsn_code": "27021000" - }, - { - "description": "LIGNITE, WHETHER OR NOT AGGLOMERATED, EXCLUDING JET - AGGLOMERATED LIGNITE", - "hsn_code": "27022000" - }, - { - "description": "PEAT (INCLUDING PEAT LITTER), WHETHER OR NOT AGGLOMERATED - PEAT (INCLUDING PEAT\nLITTER), WHETHER OR NOT AGGLOMERATED: PEAT WHETHER OR NOT COMPRESSED INTO\nBALES, BUT NOT AGGLOMERATED", - "hsn_code": "27030010" - }, - { - "description": "PEAT (INCLUDING PEAT LITTER), WHETHER OR NOT AGGLOMERATED - PEAT (INCLUDING PEAT\nLITTER), WHETHER OR NOT AGGLOMERATED: OTHER", - "hsn_code": "27030090" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED;\nRETORT CARBON - COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT\nAGGLOMERATED; RETORT CARBON: RETORT CARBON (GAS CARBON)", - "hsn_code": "27040010" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED;\nRETORT CARBON - COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT\nAGGLOMERATED; RETORT CARBON: COKE AND SEMI-COKE OF LIGNITE OR OF PEAT", - "hsn_code": "27040020" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED;\nRETORT CARBON - COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT\nAGGLOMERATED; RETORT CARBON: HARD COKE OF COAL", - "hsn_code": "27040030" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED;\nRETORT CARBON - COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT\nAGGLOMERATED; RETORT CARBON: SOFT COKE OF COAL", - "hsn_code": "27040040" - }, - { - "description": "COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT AGGLOMERATED;\nRETORT CARBON - COKE AND SEMI-COKE OF COAL, OF LIGNITE OR OF PEAT, WHETHER OR NOT\nAGGLOMERATED; RETORT CARBON: OTHER", - "hsn_code": "27040090" - }, - { - "description": "COAL GAS, WATER GAS, PRODUCER GAS AND SIMILAR GASES, OTHER THAN PETROLEUM GASES\nAND OTHER GASEOUS HYDROCARBONS", - "hsn_code": "27050000" - }, - { - "description": "TAR DISTILLED FROM COAL, FROM LIGNITE OR FROM PEAT AND OTHER MINERAL TARS,\nWHETHER OR NOT DEHYDRATED OR PARTIALLY DISTILLED, INCLUDING RECONSTITUTED TARS -\nTAR DISTILLED FROM COAL, FROM LIGNITE OR FROM PEAT AND OTHER MINERAL TARS,\nWHETHER OR NOT DEHYDRATED OR PARTIALLY DISTILLED, INCLUDING RECONSTITUTED TARS:\nCOAL TAR", - "hsn_code": "27060010" - }, - { - "description": "TAR DISTILLED FROM COAL, FROM LIGNITE OR FROM PEAT AND OTHER MINERAL TARS,\nWHETHER OR NOT DEHYDRATED OR PARTIALLY DISTILLED, INCLUDING RECONSTITUTED TARS -\nTAR DISTILLED FROM COAL, FROM LIGNITE OR FROM PEAT AND OTHER MINERAL TARS,\nWHETHER OR NOT DEHYDRATED OR PARTIALLY DISTILLED, INCLUDING RECONSTITUTED TARS:\nOTHER", - "hsn_code": "27060090" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS BENZOL (BENZENE)", - "hsn_code": "27071000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS TOLUOL (TOLUENE)", - "hsn_code": "27072000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS XYLOL (XYLENES)", - "hsn_code": "27073000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS NAPHTHELENE", - "hsn_code": "27074000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS OTHER AROMATIC HYDROCARBON MIXTURES OF WHICH 65%\nOR MORE BY VOLUME (INCLUDING LOSSES) DISTILS AT 250OC BY THE ASTM D 86 METHOD", - "hsn_code": "27075000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS PHENOLS", - "hsn_code": "27076000" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS - OTHER: CREOSOTE OILS", - "hsn_code": "27079100" - }, - { - "description": "OILS AND OTHER PRODUCTS OF THE DISTILLATION OF HIGH TEMPERATURE COAL TAR SIMILAR\nPRODUCTS IN WHICH THE WEIGHT OF THE AROMATIC CONSTITUENTS EXCEEDS THAT OF THE\nNON-AROMATIC CONSTITUENTS - OTHER: OTHER", - "hsn_code": "27079900" - }, - { - "description": "PITCH AND PITCH COKE, OBTAINED FROM COAL TAR OR FROM OTHER MINERAL TARS - PITCH:\nOBTAINED BY BLENDING WITH CREOSOTE OIL OR OTHER COAL TAR DISTILLATES", - "hsn_code": "27081010" - }, - { - "description": "PITCH AND PITCH COKE, OBTAINED FROM COAL TAR OR FROM OTHER MINERAL TARS - PITCH:\nOTHER", - "hsn_code": "27081090" - }, - { - "description": "PITCH AND PITCH COKE, OBTAINED FROM COAL TAR OR FROM OTHER MINERAL TARS - PITCH\nCOKE", - "hsn_code": "27082000" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, CRUDE", - "hsn_code": "27090000" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---MOTOR SPIRIT----SPECIAL BOILING POINT SPIRITS (OTHER THAN BENZENE,\nTOLUOL) WITH NOMINAL BOILING POINT RANGE 55-115 DEGREES CENTIGRADE", - "hsn_code": "27101211" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---MOTOR SPIRIT----SPECIAL BOILING POINT SPIRITS (OTHER THAN\nBENZENE,BENZOL,TOLUENE AND TOLUOL) WITH NOMINAL BOILING POINT RANGE 63-70\nDEGREES CENTIGRADE", - "hsn_code": "27101212" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---MOTOR SPIRIT----OTHER SPECIAL BOILING POINT SPIRITS (OTHER THAN\nBENZENE, BENZOL, TOLUENE AND TOLUOL)", - "hsn_code": "27101213" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---MOTOR SPIRIT----OTHER", - "hsn_code": "27101219" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---NATURAL GASOLINE LIQUID (NCL)", - "hsn_code": "27101220" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINIGN BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS--LIGHT OILS AND\nPREPARATIONS---OTHER", - "hsn_code": "27101290" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: SUPERIOR\nKEROSINE OIL (SKO)", - "hsn_code": "27101910" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: AVIATION\nTURBINE FUEL (ATF)", - "hsn_code": "27101920" - }, - { - "description": "HIGH SPEED DIESEL OIL", - "hsn_code": "27101930" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: LIGHT DIESEL OIL\n(LDO)", - "hsn_code": "27101940" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: FUEL OIL", - "hsn_code": "27101950" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: BASE OIL", - "hsn_code": "27101960" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: JUTE BATCHING\nOIL AND TEXTILE OIL", - "hsn_code": "27101970" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: LUBRICATING OIL", - "hsn_code": "27101980" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - PETROLEUM OILS AND\nOILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE) AND PREPARATIONS NOT\nELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR MORE OF PETROLEUM\nOILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS BEING THE BASIC\nCONSTITUENTS OF THE PREPARATIONS, OTHER THAN WASTE OILS: - OTHER: OTHER", - "hsn_code": "27101990" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS (OTHER THAN CRUDE)\nAND PREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70%\nOR MORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE\nOILS BEING THE BASIC CONSTITUENTS OF THE PREPARATIONS, CONTAINING BIO-DIESEL, OTHER\nTHAN WASTE OILS", - "hsn_code": "27102000" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS - WASTE OIL:\nCONTAINING POLYCHLORINATED BIPHENYLS (PCBS), POLYCHLORINATED TERPHENYLS (PCTS) OR\nPOLYBROMINATED BIPHENYLS (PBBS)", - "hsn_code": "27109100" - }, - { - "description": "PETROLEUM OILS AND OILS OBTAINED FROM BITUMINOUS MINERALS, OTHER THAN CRUDE;\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED, CONTAINING BY WEIGHT 70% OR\nMORE OF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS, THESE OILS\nBEING THE BASIC CONSTITUENTS OF THE PREPARATIONS; WASTE OILS -OTHER", - "hsn_code": "27109900" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - LIQUIFIED: NATURAL GAS", - "hsn_code": "27111100" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - LIQUIFIED: PROPANE", - "hsn_code": "27111200" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - LIQUIFIED: BUTANE", - "hsn_code": "27111300" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - LIQUIFIED: ETHYLENE, PROPYLENE,\nBUTYLENE AND BUTADIENE", - "hsn_code": "27111400" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - LIQUIFIED: OTHER", - "hsn_code": "27111900" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - IN GASEOUS STATE: NATURAL GAS", - "hsn_code": "27112100" - }, - { - "description": "PETROLEUM GASES AND OTHER GASEOUS HYDROCARBONS - IN GASEOUS STATE: OTHER", - "hsn_code": "27112900" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED -\nPETROLEUM JELLY: CRUDE", - "hsn_code": "27121010" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED -\nPETROLEUM JELLY: OTHER", - "hsn_code": "27121090" - }, - { - "description": "PARAFFIN WAX CONTAINING BY WEIGHT LESS THAN .75 PERCENT OF OIL", - "hsn_code": "27122000" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED - PARAFFIN\nWAX CONTAINING BY WEIGHT LESS THAN 0.75 % OF OIL: CHLORINATED PARAFFIN WAX", - "hsn_code": "27122010" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED - PARAFFIN\nWAX CONTAINING BY WEIGHT LESS THAN 0.75 % OF OIL: OTHER", - "hsn_code": "27122090" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED- OTHER:\nMICRO-CRYSTALLINE PETROLEUM WAX", - "hsn_code": "27129010" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED- OTHER:\nLIGNITE WAX", - "hsn_code": "27129020" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED- OTHER:\nSLACK WAX", - "hsn_code": "27129030" - }, - { - "description": "PARAFFIN WAX CONTAINING BY WEIGHT 0.75 PERCENT OR MORE OF OIL", - "hsn_code": "27129040" - }, - { - "description": "PETROLEUM JELLY, PARAFFIN WAX, MICROCRYSTALLINE PETROLEUM WAX, SLACK WAX,\nOZOKERITE, LIGNITE WAX, PEAT WAX, OTHER MINERAL WAXES, AND SIMILAR PRODUCTS\nOBTAINED BY SYNTHESIS OR BY OTHER PROCESSES, WHETHER OR NOT COLOURED- OTHER:\nOTHER", - "hsn_code": "27129090" - }, - { - "description": "PETROLEUM COKE, PETROLEUM BITUMEN AND OTHER RESIDUES OF PETROLEUM OILS OR OF\nOILS OBTAINED FROM BITUMINOUS MINERALS - PETROLEUM COKE: NOT CALCINED", - "hsn_code": "27131100" - }, - { - "description": "PETROLEUM COKE, PETROLEUM BITUMEN AND OTHER RESIDUES OF PETROLEUM OILS OR OF\nOILS OBTAINED FROM BITUMINOUS MINERALS - PETROLEUM COKE: CALCINED", - "hsn_code": "27131200" - }, - { - "description": "PETROLEUM COKE, PETROLEUM BITUMEN AND OTHER RESIDUES OF PETROLEUM OILS OR OF\nOILS OBTAINED FROM BITUMINOUS MINERALS - PETROLEUM BITUMEN", - "hsn_code": "27132000" - }, - { - "description": "PETROLEUM COKE, PETROLEUM BITUMEN AND OTHER RESIDUES OF PETROLEUM OILS OR OF\nOILS OBTAINED FROM BITUMINOUS MINERALS - OTHER RESIDUES OF PETROLEUM OILS OR OF\nOILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "27139000" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL; BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES\nAND ASPHALTIC ROCKS -BITUMINOUS OR OIL SHALE AND TAR SANDS", - "hsn_code": "27141000" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL; BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES\nAND ASPHALTIC ROCKS - OTHER: ASPHALT, NATURAL", - "hsn_code": "27149010" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL; BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES\nAND ASPHALTIC ROCKS - OTHER: BITUMEN, NATURAL", - "hsn_code": "27149020" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL; BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES\nAND ASPHALTIC ROCKS - OTHER: GILSONETE", - "hsn_code": "27149030" - }, - { - "description": "BITUMEN AND ASPHALT, NATURAL; BITUMINOUS OR OIL SHALE AND TAR SANDS; ASPHALTITES\nAND ASPHALTIC ROCKS - OTHER: OTHER", - "hsn_code": "27149090" - }, - { - "description": "BITUMINOUS MIXTURES BASED ON NATURAL ASPHALT, ON NATURAL BITUMEN, ON\nPETROLEUM BITUMEN, ON MINERAL TAR OR ON MINERAL TAR PITCH (FOR EXAMPLE,\nBITUMINOUS MASTICS, CUT BACKS) - BITUMINOUS MIXTURES BASED ON NATURAL ASPHALT,\nON NATURAL BITUMEN, ON PETROLEUM BITUMEN, ON MINERAL TAR OR ON MINERAL TAR\nPITCH (FOR EXAMPLE, BITUMINOUS MASTICS, CUT BACKS): CUT BACKS, BITUMINOUS OR\nASPHALT", - "hsn_code": "27150010" - }, - { - "description": "BITUMINOUS MIXTURES BASED ON NATURAL ASPHALT, ON NATURAL BITUMEN, ON\nPETROLEUM BITUMEN, ON MINERAL TAR OR ON MINERAL TAR PITCH (FOR EXAMPLE,\nBITUMINOUS MASTICS, CUT BACKS) - BITUMINOUS MIXTURES BASED ON NATURAL ASPHALT,\nON NATURAL BITUMEN, ON PETROLEUM BITUMEN, ON MINERAL TAR OR ON MINERAL TAR\nPITCH (FOR EXAMPLE, BITUMINOUS MASTICS, CUT BACKS): OTHER", - "hsn_code": "27150090" - }, - { - "description": "ELECTRICAL ENERGY", - "hsn_code": "27160000" - }, - { - "description": "FLUORINE, CHLORINE, BROMINE AND IODINE - CHLORINE", - "hsn_code": "28011000" - }, - { - "description": "FLUORINE, CHLORINE, BROMINE AND IODINE - IODINE", - "hsn_code": "28012000" - }, - { - "description": "FLUORINE, CHLORINE, BROMINE AND IODINE - FLUORINE; BROMINE : FLUORINE", - "hsn_code": "28013010" - }, - { - "description": "FLUORINE, CHLORINE, BROMINE AND IODINE - FLUORINE; BROMINE : BROMINE", - "hsn_code": "28013020" - }, - { - "description": "SULPHUR, SUBLIMED OR PRECIPITATED; COLLOIDAL SULPHUR - SULPHUR, SUBLIMED OR\nPRECIPITATED; COLLOIDAL SULPHUR : SUBLIMED SULPHUR", - "hsn_code": "28020010" - }, - { - "description": "SULPHUR, SUBLIMED OR PRECIPITATED; COLLOIDAL SULPHUR - SULPHUR, SUBLIMED OR\nPRECIPITATED; COLLOIDAL SULPHUR : PRECIPITATED SULPHUR", - "hsn_code": "28020020" - }, - { - "description": "SULPHUR, SUBLIMED OR PRECIPITATED; COLLOIDAL SULPHUR - SULPHUR, SUBLIMED OR\nPRECIPITATED; COLLOIDAL SULPHUR : COLLOIDAL SULPHUR", - "hsn_code": "28020030" - }, - { - "description": "CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE SPECIFIED OR\nINCLUDED) - CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE\nSPECIFIED OR INCLUDED) : CARBON BLACKS", - "hsn_code": "28030010" - }, - { - "description": "CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE SPECIFIED OR\nINCLUDED) - CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE\nSPECIFIED OR INCLUDED) : ACETYLENE BLACK", - "hsn_code": "28030020" - }, - { - "description": "CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE SPECIFIED OR\nINCLUDED) - CARBON (CARBON BLACKS AND OTHER FORMS OF CARBON NOT ELSEWHERE\nSPECIFIED OR INCLUDED) : OTHER", - "hsn_code": "28030090" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - HYDROGEN", - "hsn_code": "28041000" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - RARE GASES : ARGON", - "hsn_code": "28042100" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - RARE GASES : - OTHER : HELIUM", - "hsn_code": "28042910" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - RARE GASES : - OTHER : OTHER", - "hsn_code": "28042990" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - NITROGEN", - "hsn_code": "28043000" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - OXYGEN :MEDICINAL GRADE", - "hsn_code": "28044010" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - OXYGEN :OTHER", - "hsn_code": "28044090" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - BORON; TELLURIUM : BORON", - "hsn_code": "28045010" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - BORON; TELLURIUM : TELLURIUM", - "hsn_code": "28045020" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - SILICON : CONTAINING BY WEIGHT NOT\nLESS THAN 99.99% OF SILICON", - "hsn_code": "28046100" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - SILICON : OTHER", - "hsn_code": "28046900" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - PHOSPHORUS : PHOSPHORUS, BLACK", - "hsn_code": "28047010" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - PHOSPHORUS : PHOSPHORUS, RED", - "hsn_code": "28047020" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS - PHOSPHORUS : PHOSPHORUS, WHITE OR\nYELLOW", - "hsn_code": "28047030" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS- ARSENIC", - "hsn_code": "28048000" - }, - { - "description": "HYDROGEN, RARE GASES AND OTHER NON-METALS- SELENIUM", - "hsn_code": "28049000" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM,\nWHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY - ALKALI OR ALKALINE-EARTH\nMETALS : SODIUM", - "hsn_code": "28051100" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM,\nWHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY - ALKALI OR ALKALINE-EARTH\nMETALS : CALCIUM", - "hsn_code": "28051200" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM,\nWHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY - ALKALI OR ALKALINE-EARTH\nMETALS : OTHER", - "hsn_code": "28051900" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM,\nWHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY - RARE-EARTH METALS,\nSCANDIUM AND YTTRIUM, WHETHER OR NOT INTERMIXED OR INTERALLOYED", - "hsn_code": "28053000" - }, - { - "description": "ALKALI OR ALKALINE-EARTH METALS; RARE-EARTH METALS, SCANDIUM AND YTTRIUM,\nWHETHER OR NOT INTERMIXED OR INTERALLOYED; MERCURY - MERCURY", - "hsn_code": "28054000" - }, - { - "description": "HYDROGEN CHLORIDE (HYDROCHLORIC ACID); CHLOROSULPHURIC ACID - HYDROGEN CHLORIDE\n(HYDROCHLORIC ACID)", - "hsn_code": "28061000" - }, - { - "description": "HYDROGEN CHLORIDE (HYDROCHLORIC ACID); CHLOROSULPHURIC ACID - CHLOROSULPHURIC\nACID", - "hsn_code": "28062000" - }, - { - "description": "SULPHURIC ACID; OLEUM SULPHURIC ACID; OLEUM : SULPHURIC ACID", - "hsn_code": "28070010" - }, - { - "description": "SULPHURIC ACID; OLEUM SULPHURIC ACID; OLEUM : OLEUM", - "hsn_code": "28070020" - }, - { - "description": "NITRIC ACID; SULPHONITRIC ACIDS - NITRIC ACID; SULPHONITRIC ACIDS : NITRIC ACID", - "hsn_code": "28080010" - }, - { - "description": "NITRIC ACID; SULPHONITRIC ACIDS - NITRIC ACID; SULPHONITRIC ACIDS : SULPHONITRIC ACIDS", - "hsn_code": "28080020" - }, - { - "description": "DIPHOSPHORUS PENTAOXIDE; PHOSPHORIC ACID; POLYPHOSPHORIC ACIDS, WHETHER OR NOT\nCHEMICALLY DEFINED - DIPHOSPHORUS PENTAOXIDE", - "hsn_code": "28091000" - }, - { - "description": "DIPHOSPHORUS PENTAOXIDE; PHOSPHORIC ACID; POLYPHOSPHORIC ACIDS, WHETHER OR NOT\nCHEMICALLY DEFINED - PHOSPHORIC ACID AND POLYPHOSPHORIC ACIDS : PHOSPORIC ACID", - "hsn_code": "28092010" - }, - { - "description": "DIPHOSPHORUS PENTAOXIDE; PHOSPHORIC ACID; POLYPHOSPHORIC ACIDS, WHETHER OR NOT\nCHEMICALLY DEFINED - PHOSPHORIC ACID AND POLYPHOSPHORIC ACIDS : POLYPHOSPHORIC\nACIDS", - "hsn_code": "28092020" - }, - { - "description": "OXIDES OF BORON; BORIC ACIDS - OXIDES OF BORON; BORIC ACIDS : OXIDES OF BORON", - "hsn_code": "28100010" - }, - { - "description": "OXIDES OF BORON; BORIC ACIDS - OXIDES OF BORON; BORIC ACIDS : BORIC ACIDS", - "hsn_code": "28100020" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : HYDROGEN FLUORIDE (HYDROFLUORIC ACID)", - "hsn_code": "28111100" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : - OTHER : HYDROCYANIC ACID (HYDROGEN CYANIDE, PRUSSIC ACID)", - "hsn_code": "28111910" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : - OTHER : HYPOPHOSPHORUS ACID (PHOSPHINIC ACID)", - "hsn_code": "28111920" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : - OTHER : ACIDS OF ARSENIC", - "hsn_code": "28111930" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : - OTHER : SULPHONIC ACID", - "hsn_code": "28111940" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC ACIDS : - OTHER : OTHER", - "hsn_code": "28111990" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - CARBON DIOXIDE : DRY ICE", - "hsn_code": "28112110" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - CARBON DIOXIDE : OTHER", - "hsn_code": "28112190" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : SILICON DIOXIDE", - "hsn_code": "28112200" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : SULPHUR DIOXIDE", - "hsn_code": "28112300" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : ARSENIC PENTAOXIDE", - "hsn_code": "28112910" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : ARSENIC TRIOXIDE", - "hsn_code": "28112920" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : NITROUS OXIDE", - "hsn_code": "28112930" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : CARBON MONOXIDE", - "hsn_code": "28112940" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : SULPHUR TRIOXIDE\n(SULPHURIC ANHYDRIDE)", - "hsn_code": "28112950" - }, - { - "description": "OTHER INORGANIC ACIDS AND OTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS -\nOTHER INORGANIC OXYGEN COMPOUNDS OF NON-METALS : - OTHER : OTHER", - "hsn_code": "28112990" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES : PHOSGENE\n(CARBONYL CHLORIDE, CARBON OXY-CHLORIDE, CHLOROFORMYL CHLORIDE)", - "hsn_code": "28121010" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES :\nPHOSPHORUS TRICHLORIDE", - "hsn_code": "28121020" - }, - { - "description": "PHOSPHORUS TRICHLORIDE", - "hsn_code": "28121021" - }, - { - "description": "PHOSPHORUS PENTACHLORIDE", - "hsn_code": "28121022" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES :\nPHOSPHORUS OXYCHLORIDE", - "hsn_code": "28121030" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES : SULPHUR\nOXYCHLORIDE, THIONYL CHLORIDE", - "hsn_code": "28121040" - }, - { - "description": "SULPHUR OXYCHLORIDE", - "hsn_code": "28121041" - }, - { - "description": "SULPHUR MONOCHLORIDE", - "hsn_code": "28121042" - }, - { - "description": "SULPHUR DICHLORIDE", - "hsn_code": "28121043" - }, - { - "description": "THIONYL CHLORIDE", - "hsn_code": "28121047" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES : SILICON\nTETRACHLORIDE", - "hsn_code": "28121050" - }, - { - "description": "ARSENOUS TRICHLORIDE", - "hsn_code": "28121060" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - CHLORIDES AND CHLORIDE OXIDES : OTHER", - "hsn_code": "28121090" - }, - { - "description": "HALIDES AND HALIDE OXIDES OF NON-METALS - OTHER", - "hsn_code": "28129000" - }, - { - "description": "SULPHIDES OF NON-METALS; COMMERCIAL PHOSPHORUS TRISULPHIDE -CARBON DISULPHIDE", - "hsn_code": "28131000" - }, - { - "description": "SULPHIDES OF NON-METALS; COMMERCIAL PHOSPHORUS TRISULPHIDE - OTHER : ARSENIC\nDISULPHIDE (ARTIFICIAL)", - "hsn_code": "28139010" - }, - { - "description": "SULPHIDES OF NON-METALS; COMMERCIAL PHOSPHORUS TRISULPHIDE - OTHER : COMMERCIAL\nPHOSPHORUS TRISULPHIDE", - "hsn_code": "28139020" - }, - { - "description": "SULPHIDES OF NON-METALS; COMMERCIAL PHOSPHORUS TRISULPHIDE - OTHER : OTHER", - "hsn_code": "28139090" - }, - { - "description": "AMMONIA, ANHYDROUS OR IN AQUEOUS SOLUTION - ANHYDROUS AMMONIA", - "hsn_code": "28141000" - }, - { - "description": "AMMONIA, ANHYDROUS OR IN AQUEOUS SOLUTION - AMMONIA IN AQUEOUS SOLUTION", - "hsn_code": "28142000" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES\nOF SODIUM OR POTASSIUM - SODIUM HYDROXIDE (CAUSTIC SODA) : - SOLID : FLAKES", - "hsn_code": "28151110" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES\nOF SODIUM OR POTASSIUM - SODIUM HYDROXIDE (CAUSTIC SODA) : - SOLID : OTHER", - "hsn_code": "28151190" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES\nOF SODIUM OR POTASSIUM - SODIUM HYDROXIDE (CAUSTIC SODA) : IN AQUEOUS SOLUTION\n(SODA LYE OR LIQUID SODA)", - "hsn_code": "28151200" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES\nOF SODIUM OR POTASSIUM - POTASSIUM HYDROXIDE (CAUSTIC POTASH)", - "hsn_code": "28152000" - }, - { - "description": "SODIUM HYDROXIDE (CAUSTIC SODA); POTASSIUM HYDROXIDE (CAUSTIC POTASH); PEROXIDES\nOF SODIUM OR POTASSIUM - PEROXIDES OF SODIUM OR POTASSIUM", - "hsn_code": "28153000" - }, - { - "description": "HYDROXIDE AND PEROXIDE OF MAGNESIUM; OXIDES, HYDROXIDES AND PEROXIDES, OF\nSTRONTIUM OR BARIUM - HYDROXIDE AND PEROXIDE OF MAGNESIUM : HYDROXIDE OF\nMAGNESIUM", - "hsn_code": "28161010" - }, - { - "description": "HYDROXIDE AND PEROXIDE OF MAGNESIUM; OXIDES, HYDROXIDES AND PEROXIDES, OF\nSTRONTIUM OR BARIUM - HYDROXIDE AND PEROXIDE OF MAGNESIUM : PEROXIDE OF\nMAGNESIUM", - "hsn_code": "28161020" - }, - { - "description": "HYDROXIDE AND PEROXIDE OF MAGNESIUM; OXIDES, HYDROXIDES AND PEROXIDES, OF\nSTRONTIUM OR BARIUM - OXIDES, HYDROXIDES AND PEROXIDES, OF STRONTIUM OR BARIUM", - "hsn_code": "28164000" - }, - { - "description": "ZINC OXIDE; ZINC PEROXIDE - ZINC OXIDE; ZINC PEROXIDE : ZINC OXIDE", - "hsn_code": "28170010" - }, - { - "description": "ZINC OXIDE; ZINC PEROXIDE - ZINC OXIDE; ZINC PEROXIDE : ZINC PEROXIDE", - "hsn_code": "28170020" - }, - { - "description": "ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED; ALUMINIUM OXIDE;\nALUMINIUM HYDROXIDE ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "28181000" - }, - { - "description": "ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED; ALUMINIUM OXIDE;\nALUMINIUM HYDROXIDE - ALUMINIUM OXIDE, OTHER THAN ARTIFICIAL CORUNDUM :\nALUMINA, CALCINED", - "hsn_code": "28182010" - }, - { - "description": "ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED; ALUMINIUM OXIDE;\nALUMINIUM HYDROXIDE - ALUMINIUM OXIDE, OTHER THAN ARTIFICIAL CORUNDUM : OTHER", - "hsn_code": "28182090" - }, - { - "description": "ARTIFICIAL CORUNDUM, WHETHER OR NOT CHEMICALLY DEFINED; ALUMINIUM OXIDE;\nALUMINIUM HYDROXIDE -ALUMINIUM HYDROXIDE", - "hsn_code": "28183000" - }, - { - "description": "CHROMIUM OXIDES AND HYDROXIDES - CHROMIUM TRIOXIDE", - "hsn_code": "28191000" - }, - { - "description": "CHROMIUM OXIDES AND HYDROXIDES - OTHER", - "hsn_code": "28199000" - }, - { - "description": "MANGANESE OXIDES - MANGANESE DIOXIDE", - "hsn_code": "28201000" - }, - { - "description": "MANGANESE OXIDES - OTHER", - "hsn_code": "28209000" - }, - { - "description": "IRON OXIDES AND HYDROXIDES; EARTH COLOURS CONTAINING 70% OR MORE BY WEIGHT OF\nCOMBINED IRON EVALUATED AS Fe2O3 - IRON OXIDES AND HYDROXIDES : IRON OXIDES", - "hsn_code": "28211010" - }, - { - "description": "IRON OXIDES AND HYDROXIDES; EARTH COLOURS CONTAINING 70% OR MORE BY WEIGHT OF\nCOMBINED IRON EVALUATED AS Fe2O3 - IRON OXIDES AND HYDROXIDES : IRON HYDROXIDES", - "hsn_code": "28211020" - }, - { - "description": "IRON OXIDES AND HYDROXIDES; EARTH COLOURS CONTAINING 70% OR MORE BY WEIGHT OF\nCOMBINED IRON EVALUATED AS Fe2O3 - EARTH COLOURS", - "hsn_code": "28212000" - }, - { - "description": "COBALT OXIDES AND HYDROXIDES; COMMERCIAL COBALT OXIDES - COBALT OXIDES AND\nHYDROXIDES; COMMERCIAL COBALT OXIDES : COBALT OXIDES", - "hsn_code": "28220010" - }, - { - "description": "COBALT OXIDES AND HYDROXIDES; COMMERCIAL COBALT OXIDES - COBALT OXIDES AND\nHYDROXIDES; COMMERCIAL COBALT OXIDES : COBALT HYDROXIDES", - "hsn_code": "28220020" - }, - { - "description": "COBALT OXIDES AND HYDROXIDES; COMMERCIAL COBALT OXIDES - COBALT OXIDES AND\nHYDROXIDES; COMMERCIAL COBALT OXIDES : COMMERCIAL COBALT OXIDES", - "hsn_code": "28220030" - }, - { - "description": "TITANIUM OXIDES - TITANIUM OXIDES : TITANIUM DIOXIDE", - "hsn_code": "28230010" - }, - { - "description": "TITANIUM OXIDES - TITANIUM OXIDES : OTHER", - "hsn_code": "28230090" - }, - { - "description": "LEAD OXIDES; RED LEAD AND ORANGE LEAD - LEAD MONOXIDE (LITHARGE, MASSICOT) :\nLITHARGE", - "hsn_code": "28241010" - }, - { - "description": "LEAD OXIDES; RED LEAD AND ORANGE LEAD - LEAD MONOXIDE (LITHARGE, MASSICOT) :\nMASSICOT", - "hsn_code": "28241020" - }, - { - "description": "LEAD OXIDES; RED LEAD AND ORANGE LEAD -RED LEAD AND ORANGE LEAD", - "hsn_code": "28242000" - }, - { - "description": "LEAD OXIDES; RED LEAD AND ORANGE LEAD - OTHER", - "hsn_code": "28249000" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - HYDRAZINE AND HYDROXYLAMINE AND\nTHEIR INORGANIC SALTS : HYDRAZINE ANHYDROUS", - "hsn_code": "28251010" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - HYDRAZINE AND HYDROXYLAMINE AND\nTHEIR INORGANIC SALTS : HYDRAZINE HYDRATE", - "hsn_code": "28251020" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - HYDRAZINE AND HYDROXYLAMINE AND\nTHEIR INORGANIC SALTS : HYDRAZINE SULPHATE", - "hsn_code": "28251030" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - HYDRAZINE AND HYDROXYLAMINE AND\nTHEIR INORGANIC SALTS : HYDROXYLAMINE SULPHATE", - "hsn_code": "28251040" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - HYDRAZINE AND HYDROXYLAMINE AND\nTHEIR INORGANIC SALTS : OTHER", - "hsn_code": "28251090" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - LITHIUM OXIDE AND HYDROXIDE", - "hsn_code": "28252000" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - VANADIUM OXIDES AND HYDROXIDES :\nVANADIUM PENTAOXIDE FLAKES", - "hsn_code": "28253010" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES VANADIUM OXIDES AND HYDROXIDES :\nOTHER", - "hsn_code": "28253090" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - NICKEL OXIDES AND HYDROXIDES", - "hsn_code": "28254000" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - COPPER OXIDES AND HYDROXIDES", - "hsn_code": "28255000" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - GERMANIUM OXIDES AND ZIRCONIUM\nDIOXIDE : GERMANIUM OXIDES", - "hsn_code": "28256010" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - GERMANIUM OXIDES AND ZIRCONIUM\nDIOXIDE : ZIRCONIUM DIOXIDE", - "hsn_code": "28256020" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - MOLYBDENUM OXIDES AND HYDROXIDES\n: MOLYBDENUM TRIOXIDE", - "hsn_code": "28257010" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - MOLYBDENUM OXIDES AND HYDROXIDES\n: MOLYBDIC ACID", - "hsn_code": "28257020" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - MOLYBDENUM OXIDES AND HYDROXIDES\n: OTHER", - "hsn_code": "28257090" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES ANTIMONY OXIDES", - "hsn_code": "28258000" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : TIN OXIDE", - "hsn_code": "28259010" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : CADMIUM OXIDE", - "hsn_code": "28259020" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : MERCURY OXIDES (MERCURIC\nOXIDE)", - "hsn_code": "28259030" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : CALCIUM HYDROXIDE", - "hsn_code": "28259040" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : AMMONIUM HYDROXIDE", - "hsn_code": "28259050" - }, - { - "description": "HYDRAZINE AND HYDROXYLAMINE AND THEIR INORGANIC SALTS; OTHER INORGANIC BASES;\nOTHER METAL OXIDES, HYDROXIDES AND PEROXIDES - OTHER : OTHER", - "hsn_code": "28259090" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUORIDES : - OF AMMONIUM OR OF SODIUM : AMMONIUM FLUORIDES", - "hsn_code": "28261110" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUORIDES : - OF AMMONIUM OR OF SODIUM : SODIUM FLUORIDES", - "hsn_code": "28261120" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUORIDES : OF ALUMINIUM", - "hsn_code": "28261200" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUORIDES : - OTHER : MAGNESIUM FLUORIDE", - "hsn_code": "28261910" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUORIDES : - OTHER : OTHER", - "hsn_code": "28261990" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUOROSILICATES OF SODIUM OR OF POTASSIUM : FLUOROSILICATES OF SODIUM", - "hsn_code": "28262010" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nFLUOROSILICATES OF SODIUM OR OF POTASSIUM : FLUOROSILICATES OF POTASSIUM", - "hsn_code": "28262020" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nSODIUM HEXAFLUOROALUMINATE (SYNTHETIC CRYOLITE)", - "hsn_code": "28263000" - }, - { - "description": "FLUORIDES; FLUOROSILICATES, FLUOROALUMINATES AND OTHER COMPLEX FLUORINE SALTS -\nOTHER", - "hsn_code": "28269000" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - AMMONIUM CHLORIDE", - "hsn_code": "28271000" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - CALCIUM CHLORIDE", - "hsn_code": "28272000" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF MAGNESIUM", - "hsn_code": "28273100" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF ALUMINIUM", - "hsn_code": "28273200" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF IRON", - "hsn_code": "28273300" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF COBALT", - "hsn_code": "28273400" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF NICKEL", - "hsn_code": "28273500" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : OF ZINC", - "hsn_code": "28273600" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : - OTHER : MERCURIC CHLORIDE", - "hsn_code": "28273910" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : - OTHER : MERCUROUS CHLORIDE", - "hsn_code": "28273920" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : - OTHER : STRONTIUM CHLORIDE", - "hsn_code": "28273930" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : - OTHER : CUPROUS CHLORIDE", - "hsn_code": "28273940" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - OTHER CHLORIDES : - OTHER : OTHER", - "hsn_code": "28273990" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - CHLORIDE OXIDES AND CHLORIDE HYDROXIDES : - OF COPPER :\nCOPPER OXYCHLORIDE", - "hsn_code": "28274110" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - CHLORIDE OXIDES AND CHLORIDE HYDROXIDES : - OF COPPER :\nOTHER", - "hsn_code": "28274190" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - CHLORIDE OXIDES AND CHLORIDE HYDROXIDES : OTHER", - "hsn_code": "28274900" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - BROMIDES AND BROMIDE OXIDES - BROMIDES OF SODIUM OR OF\nPOTASSIUM : BROMIDES OF SODIUM", - "hsn_code": "28275110" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - BROMIDES AND BROMIDE OXIDES - BROMIDES OF SODIUM OR OF\nPOTASSIUM : BROMIDES OF POTASSIUM", - "hsn_code": "28275120" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - BROMIDES AND BROMIDE OXIDES - OTHER : MAGNESIUM\nBROMIDE", - "hsn_code": "28275910" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - BROMIDES AND BROMIDE OXIDES - OTHER : OTHER", - "hsn_code": "28275990" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - IODIDES AND IODIDE OXIDES - POTASSIUM IODIDE", - "hsn_code": "28276010" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - IODIDES AND IODIDE OXIDES - SODIUM IODIDE", - "hsn_code": "28276020" - }, - { - "description": "CHLORIDES, CHLORIDE OXIDES AND CHLORIDE HYDROXIDES; BROMIDES AND BROMIDE OXIDES;\nIODIDES AND IODIDE OXIDES - IODIDES AND IODIDE OXIDES - OTHER", - "hsn_code": "28276090" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nCOMMERCIAL CALCIUM HYPOCHLORITE AND OTHER CALCIUM HYPOCHLORITES : COMMERCIAL\nCALCIUM HYPOCHLORITE (BLEACHING PASTE OR POWDER)", - "hsn_code": "28281010" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nCOMMERCIAL CALCIUM HYPOCHLORITE AND OTHER CALCIUM HYPOCHLORITES : OTHER", - "hsn_code": "28281090" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : - SODIUM HYPOCHLORITES : BLEACHING PASTE OR POWDER", - "hsn_code": "28289011" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : - SODIUM HYPOCHLORITES : OTHER", - "hsn_code": "28289019" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : POTASSIUM HYPOCHLORITES", - "hsn_code": "28289020" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : SODIUM CHLORITE", - "hsn_code": "28289030" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : ALUMINIUM CHLORITE", - "hsn_code": "28289040" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : HYPOBROMITES", - "hsn_code": "28289050" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : BLEACHING PASTE OR POWDER OF OTHER HYPOCHLORITES", - "hsn_code": "28289060" - }, - { - "description": "HYPOCHLORITES; COMMERCIAL CALCIUM HYPOCHLORITES; CHLORITES; HYPOBROMITES -\nOTHER : OTHER", - "hsn_code": "28289090" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nCHLORATES : OF SODIUM", - "hsn_code": "28291100" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nCHLORATES : - OTHER : BARIUM CHLORATE", - "hsn_code": "28291910" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nCHLORATES : - OTHER : POTASSIUM CHLORATE", - "hsn_code": "28291920" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nCHLORATES : - OTHER : MAGNESIUM CHLORATE", - "hsn_code": "28291930" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nCHLORATES : - OTHER : OTHER", - "hsn_code": "28291990" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nOTHER : PERCHLORATES", - "hsn_code": "28299010" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nOTHER : BROMATES AND PERBROMATES", - "hsn_code": "28299020" - }, - { - "description": "CHLORATES AND PERCHLORATES; BROMATES AND PERBROMATES; IODATES AND PERIODATES -\nOTHER : IODATES AND PERIODATES", - "hsn_code": "28299030" - }, - { - "description": "SULPHIDES; POLYSULPHIDES, WHETHER OR NOT CHEMICALLY DEFINED - SODIUM SULPHIDES", - "hsn_code": "28301000" - }, - { - "description": "SULPHIDES; POLYSULPHIDES, WHETHER OR NOT CHEMICALLY DEFINED - ZINC SULPHIDE", - "hsn_code": "28302000" - }, - { - "description": "SULPHIDES; POLYSULPHIDES, WHETHER OR NOT CHEMICALLY DEFINED - CADMIUM SULPHIDE", - "hsn_code": "28303000" - }, - { - "description": "SULPHIDES; POLYSULPHIDES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER - SULPHIDES", - "hsn_code": "28309010" - }, - { - "description": "SULPHIDES; POLYSULPHIDES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER -\nPOLYSULPHIDES", - "hsn_code": "28309020" - }, - { - "description": "DITHIONITES AND SULPHOXYLATES - OF SODIUM : SODIUM DITHIONITES (SODIUM\nHYDROSULPHITE)", - "hsn_code": "28311010" - }, - { - "description": "DITHIONITES AND SULPHOXYLATES - OF SODIUM : SODIUM SULPHOXYLATES (INCLUDING\nSODIUM FORMALDEHYDE SULPHOXYLATE)", - "hsn_code": "28311020" - }, - { - "description": "DITHIONITES AND SULPHOXYLATES - OTHER : DITHIONITES", - "hsn_code": "28319010" - }, - { - "description": "DITHIONITES AND SULPHOXYLATES - OTHER : SULPHOXYLATES", - "hsn_code": "28319020" - }, - { - "description": "SULPHITES; THIOSULPHATES - SODIUM SULPHITES : SODIUM BISULPHITE", - "hsn_code": "28321010" - }, - { - "description": "SULPHITES; THIOSULPHATES - SODIUM SULPHITES : SODIUM HYDROSULPHITE", - "hsn_code": "28321020" - }, - { - "description": "SULPHITES; THIOSULPHATES - SODIUM SULPHITES : OTHER", - "hsn_code": "28321090" - }, - { - "description": "SULPHITES; THIOSULPHATES - OTHER SULPHITES: POTASSIUM METABISULPHITE", - "hsn_code": "28322010" - }, - { - "description": "SULPHITES; THIOSULPHATES - OTHER SULPHITES: MAGNESIUM SULPHITE", - "hsn_code": "28322020" - }, - { - "description": "SULPHITES; THIOSULPHATES - OTHER SULPHITES: OTHER", - "hsn_code": "28322090" - }, - { - "description": "SULPHITES; THIOSULPHATES - THIOSULPHATES : SODIUM THIOSULPHATE (HYPO)", - "hsn_code": "28323010" - }, - { - "description": "SULPHITES; THIOSULPHATES - THIOSULPHATES : MAGNESIUM THIOSULPHATE", - "hsn_code": "28323020" - }, - { - "description": "SULPHITES; THIOSULPHATES - THIOSULPHATES : OTHER", - "hsn_code": "28323090" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - SODIUM SULPHATES : DISODIUM\nSULPHATE", - "hsn_code": "28331100" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - SODIUM SULPHATES : - OTHER :\nSODIUM HYDROGEN SULPHATE (ACID SULPHATE)", - "hsn_code": "28331910" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - SODIUM SULPHATES : - OTHER :\nSODIUM PYROSULPHATE", - "hsn_code": "28331920" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - SODIUM SULPHATES : - OTHER :\nOTHER", - "hsn_code": "28331990" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : OF\nMAGNESIUM", - "hsn_code": "28332100" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OF\nALUMINIUM : ALUMINIUM SULPHATE (IRON FREE)", - "hsn_code": "28332210" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OF\nALUMINIUM : OTHER", - "hsn_code": "28332290" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : OF CHROMIUM", - "hsn_code": "28332300" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : OF NICKEL", - "hsn_code": "28332400" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : OF COPPER", - "hsn_code": "28332500" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OF ZINC :\nAGRICULTURAL GRADE ZINC SULPHATE ORDINARILY USED AS MICRONUTRIENT", - "hsn_code": "28332610" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OF ZINC :\nOTHER", - "hsn_code": "28332690" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : OF BARIUM", - "hsn_code": "28332700" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nFERROUS SULPHATE", - "hsn_code": "28332910" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nMERCURIC SULPHATE", - "hsn_code": "28332920" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nQUINIDINE SULPHATE", - "hsn_code": "28332930" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nMANGANESE SULPHATE", - "hsn_code": "28332940" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nSTRONTIUM SULPHATE", - "hsn_code": "28332950" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - OTHER SULPHATES : - OTHER :\nOTHER", - "hsn_code": "28332990" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - ALUMS: AMMONIUM ALUM", - "hsn_code": "28333010" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - ALUMS: FERRIC AMMONIUM ALUM", - "hsn_code": "28333020" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - ALUMS: POTASH ALUM", - "hsn_code": "28333030" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - ALUMS: OTHER", - "hsn_code": "28333090" - }, - { - "description": "SULPHATES; ALUMS; PEROXOSULPHATES (PERSULPHATES) - PEROXOSULPHATES\n(PERSULPHATES)", - "hsn_code": "28334000" - }, - { - "description": "NITRITES; NITRATES - NITRITES : SODIUM NITRITE", - "hsn_code": "28341010" - }, - { - "description": "NITRITES; NITRATES - NITRITES : OTHER", - "hsn_code": "28341090" - }, - { - "description": "NITRITES; NITRATES - NITRATES: OF POTASSIUM", - "hsn_code": "28342100" - }, - { - "description": "NITRITES; NITRATES - NITRATES: - OTHER : STRONTIUM NITRATE", - "hsn_code": "28342910" - }, - { - "description": "NITRITES; NITRATES - NITRATES: - OTHER : MAGNESIUM NITRATE", - "hsn_code": "28342920" - }, - { - "description": "NITRITES; NITRATES - NITRATES: - OTHER : BARIUM NITRATE", - "hsn_code": "28342930" - }, - { - "description": "NITRITES; NITRATES - NITRATES: - OTHER : OTHER", - "hsn_code": "28342990" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED PHOSPHINATES\n(HYPOPHOSPHITES) AND PHOSPHONATES (PHOSPHITES) : CALCIUM HYPOPHOSPHITE", - "hsn_code": "28351010" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED PHOSPHINATES\n(HYPOPHOSPHITES) AND PHOSPHONATES (PHOSPHITES) : MAGNESIUM HYPOPHOSPHITE", - "hsn_code": "28351020" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED PHOSPHINATES\n(HYPOPHOSPHITES) AND PHOSPHONATES (PHOSPHITES) :OTHER", - "hsn_code": "28351090" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : OF MONO-OR\nDISODIUM", - "hsn_code": "28352200" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : OF TRISODIUM", - "hsn_code": "28352300" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : OF POTASSIUM", - "hsn_code": "28352400" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : CALCIUM\nHYDROGENORTHOPHOSPHATE (\"DICALCIUM PHOSPHATE\")", - "hsn_code": "28352500" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER\nPHOSPHATES OF CALCIUM : CALCIUM MONOBASIC PHOSPHATE", - "hsn_code": "28352610" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER\nPHOSPHATES OF CALCIUM : CALCIUM TRIBASIC PHOSPHATE", - "hsn_code": "28352620" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER\nPHOSPHATES OF CALCIUM : OTHER", - "hsn_code": "28352690" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER :\nMAGNESIUM PHOSPHATE, MONOBASIC", - "hsn_code": "28352910" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER :\nMAGNESIUM PHOSPHATE, DIBASIC", - "hsn_code": "28352920" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER :\nMAGNESIUM PHOSPHATE, TRIBASIC", - "hsn_code": "28352930" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER : SODIUM\nHEXAMETAPHOSPHATE", - "hsn_code": "28352940" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - PHOSPHATES : - OTHER : OTHER", - "hsn_code": "28352990" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - POLYPHOSPHATES : SODIUM\nTRIPHOSPHATE (SODIUM TRIPOLY- PHOSPHATE)", - "hsn_code": "28353100" - }, - { - "description": "PHOSPHINATES (HYPOPHOSPHITES), PHOSPHONATES (PHOSPHITES) AND PHOSPHATES;\nPOLYPHOSPHATES, WHETHER OR NOT CHEMICALLY DEFINED - POLYPHOSPHATES : OTHER", - "hsn_code": "28353900" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE COMMERCIAL AMMONIUM CARBONATE\nAND OTHER AMMONIUM CARBONATES", - "hsn_code": "28361000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - DISODIUM CARBONATE : DISODIUM\nCARBONATE, DENSE", - "hsn_code": "28362010" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - DISODIUM CARBONATE : DISODIUM\nCARBONATE, LIGHT", - "hsn_code": "28362020" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - DISODIUM CARBONATE : OTHER", - "hsn_code": "28362090" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE SODIUM HYDROGENCARBONATE (SODIUM\nBICARBONATE)", - "hsn_code": "28363000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE POTASSIUM CARBONATES", - "hsn_code": "28364000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE CALCIUM CARBONATE", - "hsn_code": "28365000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE BARIUM CARBONATE", - "hsn_code": "28366000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE LEAD CARBONATE", - "hsn_code": "28367000" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : LITHIUM CARBONATES", - "hsn_code": "28369100" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : STRONTIUM CARBONATE", - "hsn_code": "28369200" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : - OTHER : PERCARBONATES", - "hsn_code": "28369910" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : - OTHER : MAGNESIUM\nCARBONATE", - "hsn_code": "28369920" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : - OTHER : ALUMINIUM\nBICARBONATE", - "hsn_code": "28369930" - }, - { - "description": "CARBONATES; PEROXOCARBONATES (PERCARBONATES); COMMERCIAL AMMONIUM\nCARBONATE CONTAINING AMMONIUM CARBAMATE - OTHER : - OTHER : OTHER", - "hsn_code": "28369990" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - CYANIDES AND CYANIDE OXIDES : OF\nSODIUM", - "hsn_code": "28371100" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - CYANIDES AND CYANIDE OXIDES : -\nOTHER : POTASSIUM CYANIDE", - "hsn_code": "28371910" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - CYANIDES AND CYANIDE OXIDES : -\nOTHER : DOUBLE CYANIDE OF POTASSIUM AND SODIUM", - "hsn_code": "28371920" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - CYANIDES AND CYANIDE OXIDES : -\nOTHER : OTHER", - "hsn_code": "28371990" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : AMMONIUM\nSULPHOCYANIDE", - "hsn_code": "28372010" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : POTASSIUM\nFERRICYANIDE", - "hsn_code": "28372020" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : POTASSIUM\nFERROCYANIDE", - "hsn_code": "28372030" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : SODIUM\nFERROCYANIDE", - "hsn_code": "28372040" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : SODIUM\nNITROPRUSSIDE (SODIUM NITROFERRICYANIDE)", - "hsn_code": "28372050" - }, - { - "description": "CYANIDES, CYANIDE OXIDES AND COMPLEX CYANIDES - COMPLEX CYANIDES : OTHER", - "hsn_code": "28372090" - }, - { - "description": "FULMINATES, CYANATES AND THIOCYANATES - FULMINATES, CYANATES AND THIOCYANATES :\nFULMINATES", - "hsn_code": "28380010" - }, - { - "description": "FULMINATES, CYANATES AND THIOCYANATES - FULMINATES, CYANATES AND THIOCYANATES :\nCYANATES", - "hsn_code": "28380020" - }, - { - "description": "FULMINATES, CYANATES AND THIOCYANATES - FULMINATES, CYANATES AND THIOCYANATES :\nTHIOCYANATES", - "hsn_code": "28380030" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES - OF SODIUM : SODIUM METASILICATES", - "hsn_code": "28391100" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES - OF SODIUM : OTHER", - "hsn_code": "28391900" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES - OF POTASSIUM", - "hsn_code": "28392000" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES - OTHER : MAGNESIUM TRISILICATE", - "hsn_code": "28399010" - }, - { - "description": "SILICATES; COMMERCIAL ALKALI METAL SILICATES - OTHER : OTHER", - "hsn_code": "28399090" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES) - DISODIUM TETRABORATE (REFINED BORAX) :\nANHYDROUS", - "hsn_code": "28401100" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES) - DISODIUM TETRABORATE (REFINED BORAX) :\nOTHER", - "hsn_code": "28401900" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES) - OTHER BORATES : MAGNESIUM BORATE", - "hsn_code": "28402010" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES) - OTHER BORATES : OTHER", - "hsn_code": "28402090" - }, - { - "description": "BORATES; PEROXOBORATES (PERBORATES) PEROXOBORATES (PERBORATES)", - "hsn_code": "28403000" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - ALUMINATES : SODIUM ALUMINATE", - "hsn_code": "28411010" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - ALUMINATES : OTHER", - "hsn_code": "28411090" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - CHROMATES OF ZINC OR OF LEAD :\nCHROMATES OF ZINC", - "hsn_code": "28412010" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - CHROMATES OF ZINC OR OF LEAD :\nCHROMATES OF LEAD", - "hsn_code": "28412020" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS SODIUM DICHROMATE", - "hsn_code": "28413000" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - OTHER CHROMATES AND DICHROMATES;\nPEROXOCHROMATES : SODIUM CHROMATE", - "hsn_code": "28415010" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - OTHER CHROMATES AND DICHROMATES;\nPEROXOCHROMATES : OTHER", - "hsn_code": "28415090" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - MANGANITES, MANGANATES AND\nPERMANGANATES : POTASSIUM PERMANGANATE", - "hsn_code": "28416100" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - MANGANITES, MANGANATES AND\nPERMANGANATES : OTHER", - "hsn_code": "28416900" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - MOLYBDATES : ALUMINIUM MOLYBDATE", - "hsn_code": "28417010" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - MOLYBDATES : SODIUM MOLYBDATE", - "hsn_code": "28417020" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - MOLYBDATES : OTHER", - "hsn_code": "28417090" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - TUNGSTATES (WOLFRAMATES) : SODIUM\nTUNGSTATE", - "hsn_code": "28418010" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - TUNGSTATES (WOLFRAMATES) :\nMAGNESIUM TUNGSTATE", - "hsn_code": "28418020" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - TUNGSTATES (WOLFRAMATES) : OTHER", - "hsn_code": "28418090" - }, - { - "description": "SALTS OF OXOMETALLIC OR PEROXOMETALLIC ACIDS - OTHER", - "hsn_code": "28419000" - }, - { - "description": "OTHER SALTS OF INORGANIC ACIDS OR PEROXOACIDS, (INCLUDING ALUMINOSILICATES,\nWHETHER OR NOT CHEMICALLY DEFINED), OTHER THAN AZIDES -DOUBLE OR COMPLEX\nSILICATES, INCLUDING ALUMINOSILICATES, WHETHER OR NOT CHEMICALLY DEFINED", - "hsn_code": "28421000" - }, - { - "description": "OTHER SALTS OF INORGANIC ACIDS OR PEROXOACIDS, (INCLUDING ALUMINOSILICATES,\nWHETHER OR NOT CHEMICALLY DEFINED), OTHER THAN AZIDES - OTHER : ARSENITES AND\nARSENATES", - "hsn_code": "28429010" - }, - { - "description": "OTHER SALTS OF INORGANIC ACIDS OR PEROXOACIDS, (INCLUDING ALUMINOSILICATES,\nWHETHER OR NOT CHEMICALLY DEFINED), OTHER THAN AZIDES - OTHER : BICHROMATES AND\nDICHROMATES", - "hsn_code": "28429020" - }, - { - "description": "OTHER SALTS OF INORGANIC ACIDS OR PEROXOACIDS, (INCLUDING ALUMINOSILICATES,\nWHETHER OR NOT CHEMICALLY DEFINED), OTHER THAN AZIDES - OTHER : OTHER", - "hsn_code": "28429090" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - COLLOIDAL\nPRECIOUS METALS : OF GOLD", - "hsn_code": "28431010" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - COLLOIDAL\nPRECIOUS METALS : OF SILVER", - "hsn_code": "28431020" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - COLLOIDAL\nPRECIOUS METALS : OTHER", - "hsn_code": "28431090" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - SILVER\nCOMPOUNDS : SILVER NITRATE", - "hsn_code": "28432100" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - SILVER\nCOMPOUNDS : OTHER", - "hsn_code": "28432900" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - GOLD\nCOMPOUNDS", - "hsn_code": "28433000" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - OTHER\nCOMPOUNDS; AMALGAMS : - OTHER COMPOUNDS : SODIUM AUROUS THIOSULPHATE", - "hsn_code": "28439011" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - OTHER\nCOMPOUNDS; AMALGAMS : - OTHER COMPOUNDS : NOBLE METAL SOLUTIONS OF PLATINUM,\nRHODIUM AND PALLADIUM", - "hsn_code": "28439012" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - OTHER\nCOMPOUNDS; AMALGAMS : - OTHER COMPOUNDS : OTHER", - "hsn_code": "28439019" - }, - { - "description": "COLLOIDAL PRECIOUS METALS; INORGANIC OR ORGANIC COMPOUNDS OF PRECIOUS METALS,\nWHETHER OR NOT CHEMICALLY DEFINED; AMALGAMS OF PRECIOUS METALS - OTHER\nCOMPOUNDS; AMALGAMS : AMALGAMS", - "hsn_code": "28439020" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - NATURAL URANIUM AND ITS COMPOUNDS; ALLOYS,\nDISPERSIONS (INCLUDING CERMETS), CERAMIC PRODUCTS AND MIXTURES CONTAINING\nNATURAL URANIUM OR NATURAL URANIUM COMPOUNDS", - "hsn_code": "28441000" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM ENRICHED IN U235 AND ITS COMPOUNDS;\nPLUTONIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM ENRICHED IN U235, PLUTONIUM OR\nCOMPOUNDS OF THESE PRODUCTS", - "hsn_code": "28442000" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : URANIUM DEPLETED IN U235 AND THORIUM AND THEIR\nALLOYS, UNWROUGHT OR WROUGHT AND COMPOUNDS THEREOF", - "hsn_code": "28443010" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : - COMPOUNDS OF THORIUM OR OF URANIUM DEPLETED IN\nU235 : THORIUM OXIDE", - "hsn_code": "28443021" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : - COMPOUNDS OF THORIUM OR OF URANIUM DEPLETED IN\nU235 : THORIUM HYDROXIDE", - "hsn_code": "28443022" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : - COMPOUNDS OF THORIUM OR OF URANIUM DEPLETED IN\nU235 : THORIUM NITRATE", - "hsn_code": "28443023" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : - COMPOUNDS OF THORIUM OR OF URANIUM DEPLETED IN\nU235 : OTHER", - "hsn_code": "28443029" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : WASTE AND SCRAP OF URANIUM DEPLETED IN U235 OR OF\nTHORIUM", - "hsn_code": "28443030" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - URANIUM DEPLETED IN U235 AND ITS COMPOUNDS;\nTHORIUM AND ITS COMPOUNDS; ALLOYS, DISPERSIONS (INCLUDING CERMETS), CERAMIC\nPRODUCTS AND MIXTURES CONTAINING URANIUM DEPLETED IN U235, THORIUM OR\nCOMPOUNDS OF THESE PRODUCTS : OTHER", - "hsn_code": "28443090" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - RADIOACTIVE ELEMENTS AND ISOTOPES AND\nCOMPOUNDS OTHER THAN THOSE OF SUBHEADINGS 2844 10, 2844 20 OR 2844 30; ALLOYS,\nDISPERSIONS (INCLUDING CERMETS), CERAMIC PRODUCTS AND MIXTURES CONTAINING THESE\nELEMENTS, ISOTOPES OR COMPOUNDS; RADIOACTIVE RESIDUES", - "hsn_code": "28444000" - }, - { - "description": "RADIOACTIVE CHEMICAL ELEMENTS AND RADIOACTIVE ISOTOPES (INCLUDING THE FISSILE OR\nFERTILE CHEMICAL ELEMENTS AND ISOTOPES) AND THEIR COMPOUNDS; MIXTURES AND\nRESIDUES CONTAINING THESE PRODUCTS - SPENT (IRRADIATED) FUEL ELEMENTS (CARTRIDGES)\nOF NUCLEAR REACTORS", - "hsn_code": "28445000" - }, - { - "description": "ISOTOPES OTHER THAN THOSE OF HEADING 2844; COMPOUNDS, INORGANIC OR ORGANIC, OF\nSUCH ISOTOPES, WHETHER OR NOT CHEMICALLY DEFINED -HEAVY WATER (DEUTERIUM OXIDE)", - "hsn_code": "28451000" - }, - { - "description": "ISOTOPES OTHER THAN THOSE OF HEADING 2844; COMPOUNDS, INORGANIC OR ORGANIC, OF\nSUCH ISOTOPES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER : NUCLEAR FUELS NOT\nELSEWHERE INCLUDED OR SPECIFIED", - "hsn_code": "28459010" - }, - { - "description": "ISOTOPES OTHER THAN THOSE OF HEADING 2844; COMPOUNDS, INORGANIC OR ORGANIC, OF\nSUCH ISOTOPES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER : OTHER", - "hsn_code": "28459090" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - CERIUM COMPOUNDS : CERIUM OXIDES", - "hsn_code": "28461010" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - CERIUM COMPOUNDS : OTHER", - "hsn_code": "28461090" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - OTHER : RARE-EARTH OXIDES NOT ELSEWHERE\nINCLUDED OR SPECIFIED", - "hsn_code": "28469010" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - OTHER : RARE-EARTH FLUORIDES NOT\nELSEWHERE INCLUDED OR SPECIFIED", - "hsn_code": "28469020" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - OTHER : RARE-EARTH CHLORIDES NOT\nELSEWHERE INCLUDED OR SPECIFIED", - "hsn_code": "28469030" - }, - { - "description": "COMPOUNDS, INORGANIC OR ORGANIC, OF RARE-EARTH METALS, OF YTTRIUM OR OF\nSCANDIUM OR OF MIXTURES OF THESE METALS - OTHER : OTHER", - "hsn_code": "28469090" - }, - { - "description": "HYDROGEN PEROXIDE, WHETHER OR NOT SOLIDIFIED WITH UREA", - "hsn_code": "28470000" - }, - { - "description": "PHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS -\nPHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS : OF\nCOPPER (PHOSPHOR COPPER), CONTAINING MORE THAN 15% BY WEIGHT OF PHOSPHORUS", - "hsn_code": "28480010" - }, - { - "description": "PHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS -\nPHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS : OF\nZINC", - "hsn_code": "28480020" - }, - { - "description": "PHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS -\nPHOSPHIDES, WHETHER OR NOT CHEMICALLY DEFINED, EXCLUDING FERROPHOSPHORUS :\nOTHER", - "hsn_code": "28480090" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OF CALCIUM", - "hsn_code": "28491000" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OF SILICON : CARBORUNDUM", - "hsn_code": "28492010" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OF SILICON : OTHER", - "hsn_code": "28492090" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER :BORON CARBIDE", - "hsn_code": "28499010" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER :TUNGSTEN CARBIDE", - "hsn_code": "28499020" - }, - { - "description": "CARBIDES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER :OTHER", - "hsn_code": "28499090" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : HYDRIDES", - "hsn_code": "28500010" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : NITRIDES", - "hsn_code": "28500020" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : AZIDES", - "hsn_code": "28500030" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : - SILICIDES : OF CALCIUM", - "hsn_code": "28500041" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : - SILICIDES : OTHER", - "hsn_code": "28500049" - }, - { - "description": "HYDRIDES, NITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED,\nOTHER THAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 - HYDRIDES,\nNITRIDES, AZIDES, SILICIDES AND BORIDES, WHETHER OR NOT CHEMICALLY DEFINED, OTHER\nTHAN COMPOUNDS WHICH ARE ALSO CARBIDES OF HEADING 2849 : BORIDES", - "hsn_code": "28500050" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : DISTILLED OR\nCONDUCTIVITY WATER AND WATER OF SIMILAR PURITY", - "hsn_code": "28510010" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : LIQUID AIR,\nWHETHER OR NOT ANY FRACTION OF RARE GASES HAS BEEN REMOVED", - "hsn_code": "28510020" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : COMPRESSED\nAIR", - "hsn_code": "28510030" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS", - "hsn_code": "28510040" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : OTHER", - "hsn_code": "28510090" - }, - { - "description": "CYNOGEN CHLORIDE", - "hsn_code": "28510091" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: OTHER", - "hsn_code": "28510099" - }, - { - "description": "INORGANIC OR ORGANIC COMPOUNDS OF MERCURY, WHETHER OR NOT CHEMICALLY DEFINED,\nEXCLUDING AMALGAMS;-CHEMICALLY DEFINED", - "hsn_code": "28521000" - }, - { - "description": "INORGANIC OR ORGANIC COMPOUNDS OF MERCURY, WHETHER OR NOT CHEMICALLY DEFINED,\nEXCLUDING AMALGAMS;-OTHER", - "hsn_code": "28529000" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY", - "hsn_code": "28530010" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- LIQUID AIR, WHETHER OR NOT ANY FRACTION OF RARE\nGASES HAS BEEN REMOVED", - "hsn_code": "28530020" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- COMPRESSED AIR", - "hsn_code": "28530030" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- AMALGAMS, OTHER THAN OF PRECIOUS METALS", - "hsn_code": "28530040" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- OTHER ---- CYANOGEN CHLORIDE [(CN) CL]", - "hsn_code": "28530091" - }, - { - "description": "OTHER INORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER\nOF SIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS: - OTHER\nINORGANIC COMPOUNDS (INCLUDING DISTILLED OR CONDUCTIVITY WATER AND WATER OF\nSIMILAR PURITY); LIQUID AIR (WHETHER OR NOT RARE GASES HAVE BEEN REMOVED);\nCOMPRESSED AIR; AMALGAMS, OTHER THAN AMALGAMS OF PRECIOUS METALS : AMALGAMS,\nOTHER THAN OF PRECIOUS METALS --- OTHER ---- OTHER", - "hsn_code": "28530099" - }, - { - "description": "ACYCLIC HYDROCARBONS - SATURATED", - "hsn_code": "29011000" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED : ETHYLENE", - "hsn_code": "29012100" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED : PROPENE (PROPYLENE)", - "hsn_code": "29012200" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED : BUTENE (BUTYLENE) AND ISOMERS THEREOF", - "hsn_code": "29012300" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED : BUTA-1,3-DIENE AND ISOPRENE", - "hsn_code": "29012400" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED :-OTHER : ACETYLENE, WHETHER OR NOT IN\nDISSOLVED CONDITION", - "hsn_code": "29012910" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED :-OTHER : HEPTENE (HEPTYLENE)", - "hsn_code": "29012920" - }, - { - "description": "ACYCLIC HYDROCARBONS - UNSATURATED :-OTHER : OTHER", - "hsn_code": "29012990" - }, - { - "description": "CYCLIC HYDROCARBONS - CYCLANES, CYCLENES AND CYCLOTERPENES : CYCLOHEXANE", - "hsn_code": "29021100" - }, - { - "description": "CYCLIC HYDROCARBONS - CYCLANES, CYCLENES AND CYCLOTERPENES : OTHER", - "hsn_code": "29021900" - }, - { - "description": "CYCLIC HYDROCARBONS- BENZENE", - "hsn_code": "29022000" - }, - { - "description": "CYCLIC HYDROCARBONS -TOLUENE", - "hsn_code": "29023000" - }, - { - "description": "CYCLIC HYDROCARBONS - XYLENES : O-XYLENE", - "hsn_code": "29024100" - }, - { - "description": "CYCLIC HYDROCARBONS - XYLENES : M-XYLENE", - "hsn_code": "29024200" - }, - { - "description": "CYCLIC HYDROCARBONS - XYLENES : P-XYLENE", - "hsn_code": "29024300" - }, - { - "description": "CYCLIC HYDROCARBONS - XYLENES : MIXED XYLENE ISOMERS", - "hsn_code": "29024400" - }, - { - "description": "CYCLIC HYDROCARBONS - STYRENE", - "hsn_code": "29025000" - }, - { - "description": "CYCLIC HYDROCARBONS - ETHYLBENZENE", - "hsn_code": "29026000" - }, - { - "description": "CYCLIC HYDROCARBONS - CUMENE", - "hsn_code": "29027000" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :DIPENTENE", - "hsn_code": "29029010" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :DIPHENYL METHANE", - "hsn_code": "29029020" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :DODECYCLIC BENZENES (EXCLUDING MIXED ALKYLARENES)", - "hsn_code": "29029030" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :NAPTHALENE, PURE", - "hsn_code": "29029040" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :ISOBUTYL BENZENE", - "hsn_code": "29029050" - }, - { - "description": "CYCLIC HYDROCARBONS - OTHER :OTHER", - "hsn_code": "29029090" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS :-CHLOROMETHANE (METHYL CHLORIDE) AND CHLOROETHANE (ETHYL\nCHLORIDE) : CHLOROMETHANE (METHYL CHLORIDE)", - "hsn_code": "29031110" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS :-CHLOROMETHANE (METHYL CHLORIDE) AND CHLOROETHANE (ETHYL\nCHLORIDE) : CHLOROETHANE (ETHYL CHLORIDE)", - "hsn_code": "29031120" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS : DICHLOROMETHANE (METHYLENE CHLORIDE)", - "hsn_code": "29031200" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS : CHLOROFORM (TRICHLORO METHANE)", - "hsn_code": "29031300" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS : CARBON TETRACHLORIDE", - "hsn_code": "29031400" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS -- ETHYLENE DICHLORIDE (ISO) (1,2-DICHLOROETHANE)", - "hsn_code": "29031500" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS :-OTHER : TETRACHLOROETHANE", - "hsn_code": "29031910" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS :-OTHER : TRICHLOROETHANE", - "hsn_code": "29031920" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - SATURATED CHLORINATED DERIVATIVES OF\nACYCLIC HYDROCARBONS :-OTHER : OTHER", - "hsn_code": "29031990" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - UNSATURATED CHLORINATED DERIVATIVES\nOF ACYCLIC HYDROCARBONS : VINYL CHLORIDE (CHLOROETHYLENE)", - "hsn_code": "29032100" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - UNSATURATED CHLORINATED DERIVATIVES\nOF ACYCLIC HYDROCARBONS : TRICHLOROETHYLENE", - "hsn_code": "29032200" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - UNSATURATED CHLORINATED DERIVATIVES\nOF ACYCLIC HYDROCARBONS : TETRACHLOROETHYLENE (PERCHLOROETHYLENE)", - "hsn_code": "29032300" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - UNSATURATED CHLORINATED DERIVATIVES\nOF ACYCLIC HYDROCARBONS : OTHER", - "hsn_code": "29032900" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS : FLUORINATED DERIVATIVES", - "hsn_code": "29033010" - }, - { - "description": "1-PROPENDE, 1,1,3,3,3,-PENTAFLUORO-2(TRIFLUOROMETHYL(PFIB)", - "hsn_code": "29033011" - }, - { - "description": "FLUORINATED DERIVATIVES - OTHERS", - "hsn_code": "29033019" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS : BROMINATED DERIVATIVES", - "hsn_code": "29033020" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS : IODINATED DERIVATIVES", - "hsn_code": "29033030" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- ETHYLENE DIBROMIDE (ISO) (1,2-\nDIBROMOETHANE)", - "hsn_code": "29033100" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- OTHER --- FLUORINATED DERIVATIVES ---- 1-\nPROPENE, 1, 1, 3,3,3 PENTAFLUORO - 2-(TRIFLUOROMETHYL) (PFIB)", - "hsn_code": "29033911" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- OTHER --- FLUORINATED DERIVATIVES ---- OTHER", - "hsn_code": "29033919" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- OTHER --- FLUORINATED DERIVATIVES ----\nBROMINATED DERIVATIVES", - "hsn_code": "29033920" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- OTHER --- FLUORINATED DERIVATIVES ----\nIODINATED DERIVATIVES", - "hsn_code": "29033930" - }, - { - "description": "HALOGENATED DERIVATIVES OF HYDROCARBONS - FLUORINATED, BROMINATED OR IODINATED\nDERIVATIVES OF ACYCLIC HYDROCARBONS -- OTHER --- OTHER ---- OTHER", - "hsn_code": "29033990" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nCHLORODIFLUOROMETHANE", - "hsn_code": "29037100" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nDICHLOROTRIFLUOROETHANES", - "hsn_code": "29037200" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nDICHLOROFLUOROETHANES", - "hsn_code": "29037300" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nCHLORODIFLUOROETHANES", - "hsn_code": "29037400" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nDICHLOROPENTAFLUOROPROPANES", - "hsn_code": "29037500" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nBROMOCHLORODIFLUOROMETHANE, BROMOTRIFLUOROMETHANE AND\nDIBROMOTETRAFLUOROETHANES; ---BROMOCHLORODIFLUOROMETHANE", - "hsn_code": "29037610" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nBROMOCHLORODIFLUOROMETHANE, BROMOTRIFLUOROMETHANE AND\nDIBROMOTETRAFLUOROETHANES; ---BROMOTRIFLUOROMETHANE", - "hsn_code": "29037620" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nBROMOCHLORODIFLUOROMETHANE, BROMOTRIFLUOROMETHANE AND\nDIBROMOTETRAFLUOROETHANES; ---DIBROMOTETRAFLUOROETHANES", - "hsn_code": "29037630" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROMETHANES--\n--CHLOROTRIFLUOROMETHANE", - "hsn_code": "29037711" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROMETHANES--\n--DICHLORODIFLUOROMETHANE", - "hsn_code": "29037712" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROMETHANES--\n--TRICHLOROFLUOROMETHANE", - "hsn_code": "29037713" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROETHANES----\nCHLOROPENTAFLUOROETHANE", - "hsn_code": "29037721" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROETHANES----\n1,2-DICHLOROTETRAFLUOROETHANE", - "hsn_code": "29037722" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROETHANES----\nTRICHLOROTRIFLUOROETHANE", - "hsn_code": "29037723" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROETHANES----\nTETRACHLORODIFLUOROETHANE", - "hsn_code": "29037724" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROETHANES----\nPENTACHLOROFLUOROETHANE", - "hsn_code": "29037725" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-CHLOROHEPTAFLUOROPROPANE", - "hsn_code": "29037731" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-DICHLOROHEXAFLUOROPROPANE", - "hsn_code": "29037732" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-TRICHLOROPENTAFLUOROPROPANE", - "hsn_code": "29037733" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-TETRACHLOROTETRAFLUOROPROPANE", - "hsn_code": "29037734" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-PENTACHLOROTRIFLUOROPROPANE", - "hsn_code": "29037735" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES\nHEXACHLORODIFLUOROPROPANE", - "hsn_code": "29037736" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---CHLOROFLUOROPROPANES---\n-HEPTACHLOROFLUOROPROPANE", - "hsn_code": "29037737" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED ONLY WITH FLUORINE AND CHLORINE---OTHER DERIVATIVES ,\nPERHALOGENATEDONLY WITH FLUORINE AND CHLORINE", - "hsn_code": "29037790" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--\nOTHER,PERHALOGENATED DERIVATIVES", - "hsn_code": "29037800" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS--OTHER", - "hsn_code": "29037900" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF CYCLANIC,\nCYCLENIC OR CYCLOTERPENIC HYDROCARBONS--1,2,3,4,5,6-HEXACHLOROCYCLOHEXANE [HCH\n(ISO)], INCLUDING LINDANE(ISO,INN)", - "hsn_code": "29038100" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF CYCLANIC,\nCYCLENIC OR CYCLOTERPENIC HYDROCARBONS--ALDRIN (ISO),CHLORDANE(ISO)", - "hsn_code": "29038200" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF CYCLANIC,\nCYCLENIC OR CYCLOTERPENIC HYDROCARBONS--OTHER", - "hsn_code": "29038900" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--CHLOROBENZENE,O-DICHLOROBENZENE AND P-DICHLOROBENZENE---\nCHLOROBENZENE (MONOCHLORO)", - "hsn_code": "29039110" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--CHLORBENZENE,O-DICHLOROBENZENE AND P-DICHLOROBENZENE---O\nDICHLOROBENZENE (ORTHODICHLOROBENZENE)", - "hsn_code": "29039120" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--CHLORBENZENE,O-DICHLOROBENZENE AND P-DICHLOROBENZENE---P\nDICHLOROBENZENE(PARADICHLOROBENZENE)", - "hsn_code": "29039130" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--HEXACHLOROBENZENE (ISO) AND DDT(ISO)[CLOFENOTANE(INN),1,11-\nTRICHLORO-2,2-BIS (P-CHLOROPHENYL) ETHANE]---HEXACHLOROBENZENE (ISO) AND\nDDT(ISO)[CLOFENOTANE(INN),1,11-TRICHLORO-2,2-BIS (P-CHLOROPHENYL) ETHANE]", - "hsn_code": "29039210" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--HEXACHLOROBENZENE (ISO) AND DDT(ISO)[CLOFENOTANE(INN),1,11-\nTRICHLORO-2,2-BIS (P-CHLOROPHENYL) ETHANE----DDT TECHNICAL 75 WDP", - "hsn_code": "29039221" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--HEXACHLOROBENZENE (ISO) AND DDT(ISO)[CLOFENOTANE(INN),1,11-\nTRICHLORO-2,2-BIS (P-CHLOROPHENYL) ETHANE----OTHER", - "hsn_code": "29039229" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS---OTHER---CHLOROFLUOROBENZENE", - "hsn_code": "29039910" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER---BENZALCHLORIDE (BENZYL DICHLORIDE)", - "hsn_code": "29039920" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER---BENZOTRICHLORIDE", - "hsn_code": "29039930" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER----BENZYLCHLORIDE", - "hsn_code": "29039940" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER----PARACHLOROTOLUENE (4-CHLOROMETHYL BENZENE)", - "hsn_code": "29039950" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER----NAPHTHALENE,CHLORINATED", - "hsn_code": "29039960" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER----CHLOROFLUORO ANILINE", - "hsn_code": "29039970" - }, - { - "description": "HALOGENATED DERVIATIVES OF HYDROCARBONS-HALOGENATED DERIVATIVES OF AROMATIC\nHYDROCARBONS--OTHER----OTHER", - "hsn_code": "29039990" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nETHYL ESTERS : BENZENE SULPHONIC ACID", - "hsn_code": "29041010" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nETHYL ESTERS : 1,5 NAPTHELENE DISULPHONIC ACID (ARMSTRONGS ACID)", - "hsn_code": "29041020" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nETHYL ESTERS : NAPTHELENE SULPHONIC ACID", - "hsn_code": "29041030" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nETHYL ESTERS : VINYL SULPHONE", - "hsn_code": "29041040" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nETHYL ESTERS : OTHER", - "hsn_code": "29041090" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nNITROBENZENE", - "hsn_code": "29042010" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nMETA DINITROBENZENE", - "hsn_code": "29042020" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nMETA NITROTOLUENE", - "hsn_code": "29042030" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nORTHO NITROTOLUENE", - "hsn_code": "29042040" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nPARA NITROTOLUENE", - "hsn_code": "29042050" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nDINITROTOLUENE", - "hsn_code": "29042060" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - DERIVATIVES CONTAINING ONLY NITRO OR ONLY NITROSO GROUPS :\nOTHER", - "hsn_code": "29042090" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : 2,5 DICHLORO NITROBENZENE", - "hsn_code": "29049010" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : DINITROCHLOROBENZENE", - "hsn_code": "29049020" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : META NITROCHLOROBENZENE", - "hsn_code": "29049030" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : ORTHO NITROCHLOROBENZENE", - "hsn_code": "29049040" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : PARA NITROCHLOROBENZENE", - "hsn_code": "29049050" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : 2-NITROCHLOROTOLUENE", - "hsn_code": "29049060" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : SODIUM META NITROBENZENE SULPHONATE", - "hsn_code": "29049070" - }, - { - "description": "CHLOROPICRIN(TRICHLORONITRO-METHANE)", - "hsn_code": "29049080" - }, - { - "description": "SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF HYDROCARBONS, WHETHER OR\nNOT HALOGENATED - OTHER : OTHER", - "hsn_code": "29049090" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : METHANOL (METHYL ALCOHOL)", - "hsn_code": "29051100" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-PROPAN-1-O1 (PROPYL ALCOHOL) AND\nPROPAN- 2-OL (ISOPROPYL ALCOHOL) : PROPYL ALCOHOL", - "hsn_code": "29051210" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-PROPAN-1-O1 (PROPYL ALCOHOL) AND\nPROPAN- 2-OL (ISOPROPYL ALCOHOL) : ISOPROPYL ALCOHOL", - "hsn_code": "29051220" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : BUTAN-1-OL (N-BUTYL ALCOHOL)", - "hsn_code": "29051300" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-OTHER BUTANOLS : ETHAMBUTOL,\nETHAMBUTOL HCL", - "hsn_code": "29051410" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-OTHER BUTANOLS : SALBUTAMOL\nSULPHATE", - "hsn_code": "29051420" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-OTHER BUTANOLS : AMINO BUTANOL", - "hsn_code": "29051430" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS :-OTHER BUTANOLS : OTHER", - "hsn_code": "29051490" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : PENTANOL (AMYL ALCOHOL) AND\nISOMERS THEREOF", - "hsn_code": "29051500" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : OCTANOL (OCTYL ALCOHOL) AND\nISOMERS THEREOF : DIMETHYL OCTANOL", - "hsn_code": "29051610" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : OCTANOL (OCTYL ALCOHOL) AND\nISOMERS THEREOF : 2-ETHYL HEXANOL", - "hsn_code": "29051620" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : OCTANOL (OCTYL ALCOHOL) AND\nISOMERS THEREOF : OTHER", - "hsn_code": "29051690" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : DODECAN-1-OL (LAURYL\nALCOHOL),HEXADECAN-1-OL (CETYL ALCOHOL) AND OCTADECAN-1-OL (STEARYL ALCOHOL)", - "hsn_code": "29051700" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : OTHER", - "hsn_code": "29051900" - }, - { - "description": "2-BUTANOL, 3, 3-DIMETHYL-", - "hsn_code": "29051910" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - SATURATED MONOHYDRIC ALCOHOLS : OTHER", - "hsn_code": "29051990" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS :-ACYCLIC TERPENE ALCOHOLS :\nCITRANELLOL", - "hsn_code": "29052210" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS :-ACYCLIC TERPENE ALCOHOLS :\nGERANIOL", - "hsn_code": "29052220" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS :-ACYCLIC TERPENE ALCOHOLS :\nLINALOOL", - "hsn_code": "29052230" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS :-ACYCLIC TERPENE ALCOHOLS :\nRHODINOL", - "hsn_code": "29052240" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS :-ACYCLIC TERPENE ALCOHOLS : OTHER", - "hsn_code": "29052290" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - UNSATURATED MONOHYDRIC ALCOHOLS : OTHER", - "hsn_code": "29052900" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - DIOLS : ETHYLENE GLYCOL (ETHANEDIOL)", - "hsn_code": "29053100" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - DIOLS : PROPYLENE GLYCOL (PROPANE-1,2-DIOL)", - "hsn_code": "29053200" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - DIOLS :-OTHER : 1,4/1,3/2,3-BUTYLENE GLYCOL", - "hsn_code": "29053910" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - DIOLS :-OTHER : OTHER", - "hsn_code": "29053990" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS : 2- ETHYL-2-(HYDROXYMETHYL) PROPANE-1,3-\nDIOL (TRIMETHYLOLROPANE)", - "hsn_code": "29054100" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS :-PENTAERYTHRITOL : DIPENTAERYTHRITOL", - "hsn_code": "29054210" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS :-PENTAERYTHRITOL : OTHER", - "hsn_code": "29054290" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS : MANNITOL", - "hsn_code": "29054300" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS : D-GLUCITOL (SORBITOL)", - "hsn_code": "29054400" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS : GLYCEROL", - "hsn_code": "29054500" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER POLYHYDRIC ALCOHOLS : OTHER", - "hsn_code": "29054900" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF\nACYCLIC ALCOHOLS : ETHCHLORVYNOL (INN)", - "hsn_code": "29055100" - }, - { - "description": "ACYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF\nACYCLIC ALCOHOLS : OTHER", - "hsn_code": "29055900" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC : MENTHOL", - "hsn_code": "29061100" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC : CYCLOHEXANOL,\nMETHYLCYCLOHEXANOLS AND DIMETHYLCYCLOHEXANOLS", - "hsn_code": "29061200" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC :-STEROLS AND INOSITOLS :\nCHOLESTEROL", - "hsn_code": "29061310" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC :-STEROLS AND INOSITOLS : OTHER", - "hsn_code": "29061390" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC : TERPINEOLS", - "hsn_code": "29061400" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC :-OTHER : BORNEOL", - "hsn_code": "29061910" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC :-OTHER : OTHER", - "hsn_code": "29061990" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - AROMATIC : BENZYL ALCOHOL", - "hsn_code": "29062100" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - AROMATIC : OTHER : CINNAMIC ALCOHOL", - "hsn_code": "29062910" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - AROMATIC : OTHER : PHENYLETHYL ALCOHOL", - "hsn_code": "29062920" - }, - { - "description": "CYCLIC ALCOHOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - AROMATIC : OTHER : OTHER", - "hsn_code": "29062990" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS :-PHENOL (HYDROXYBENZENE) AND ITS SALTS :\nPHENOL, AS PURE CARBOLIC ACID", - "hsn_code": "29071110" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS :-PHENOL (HYDROXYBENZENE) AND ITS SALTS :\nOTHER", - "hsn_code": "29071190" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS :-CRESOLS AND THEIR SALTS : PARA CRESOLS (P\nCRESOLS)", - "hsn_code": "29071210" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS :-CRESOLS AND THEIR SALTS : CRESYLIC ACID", - "hsn_code": "29071220" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS :-CRESOLS AND THEIR SALTS : OTHER", - "hsn_code": "29071290" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OCTYLPHENOL, NONYLPHENOL AND THEIR\nISOMERS; SALTS THEREOF", - "hsn_code": "29071300" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : XYLENOLS AND THEIR SALTS", - "hsn_code": "29071400" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : NAPHTHOLS AND THEIR SALTS : ALPHA\nNAPHTHOLS", - "hsn_code": "29071510" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : NAPHTHOLS AND THEIR SALTS : BETA\nNAPHTHOLS", - "hsn_code": "29071520" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : NAPHTHOLS AND THEIR SALTS : OTHER", - "hsn_code": "29071590" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : O-PHENYL PHENOLS", - "hsn_code": "29071910" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : P-PHENYL PHENOLS", - "hsn_code": "29071920" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : THYMOL", - "hsn_code": "29071930" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : PARA TERTIARY BUTYL PHENOL", - "hsn_code": "29071940" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : ALKYL PHENOLS", - "hsn_code": "29071950" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - MONOPHENOLS : OTHER : OTHER", - "hsn_code": "29071990" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - POLYPHENOLS ; PHENOL-ALCOHOLS : RESORCINOL AND ITS\nSALTS", - "hsn_code": "29072100" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - POLYPHENOLS ; PHENOL-ALCOHOLS : HYDROQUINONE\n(QUINOL) AND ITS SALTS", - "hsn_code": "29072200" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - POLYPHENOLS ; PHENOL-ALCOHOLS : 4,4 -\nISOPROPYLIDENEDIPHENOL (BIS-PHENOL A, DIPHENYLOLPROPANE) AND ITS SALTS", - "hsn_code": "29072300" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - POLYPHENOLS ; PHENOL-ALCOHOLS : OTHER : 1,5- DIHYDROXY\nNAPHTHALENE", - "hsn_code": "29072910" - }, - { - "description": "PHENOLS; PHENOL-ALCOHOLS - POLYPHENOLS ; PHENOL-ALCOHOLS : OTHER : OTHER", - "hsn_code": "29072990" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY HALOGEN SUBSTITUENTS AND THEIR\nSALTS", - "hsn_code": "29081000" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY HALOGEN SUBSTITUENTS AND THEIR\nSALTS -- PENTACHLOROPHENOL (ISO)", - "hsn_code": "29081100" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY HALOGEN SUBSTITUENTS AND THEIR\nSALTS -- OTHER", - "hsn_code": "29081900" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : PHENOL SULPHONIC ACIDS", - "hsn_code": "29082010" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : G ACIDS (2-NAPHTHOL-6,8-DISULPHONIC ACID)", - "hsn_code": "29082021" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : SALTS OF G ACID", - "hsn_code": "29082022" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : BETA NAPHTHOL SULPHONIC ACIDS", - "hsn_code": "29082023" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : NEVILE -WINTHER ACID (1-NAPHTHOL- 4- SULPHONIC\nACID)", - "hsn_code": "29082024" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : SCHAEFFER ACID (2-NAPHTHOL-6-SULPHONIC ACID)", - "hsn_code": "29082025" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : R ACIDS (2-NAPHTHOL- 3,6- DISULPHONIC ACID) AND\nITS DISODIUM SALT (SALT OF R ACID)", - "hsn_code": "29082026" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : CHROMOTROPIC ACID (1,8-DIHYDROXYNAPHTHALENE -\n3,6-DISULFONIC ACID)", - "hsn_code": "29082027" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - DERIVATIVES CONTAINING ONLY SULPHO GROUPS, THEIR SALTS AND\nESTERS : NAPHTHOL SULPHONIC ACIDS : OTHER", - "hsn_code": "29082029" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER : PARA NITROPHENOL", - "hsn_code": "29089010" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER : MUSK XYLOL", - "hsn_code": "29089020" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER : OTHER", - "hsn_code": "29089090" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER -- DINOSEB (ISO) AND ITS SALTS", - "hsn_code": "29089100" - }, - { - "description": "HALOGENATED,SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS-DERIVATIVES CONTAINING ONLY HALOGEN SUBSTITUENTS AND THEIR SALTS-\n-4,6-DINITRO-O-CRESOL [DNOC (ISO)] AND ITS SALTS", - "hsn_code": "29089200" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER -- OTHER --- PARA NITROPHENOL", - "hsn_code": "29089910" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER -- OTHER --- MUSK XYLOL", - "hsn_code": "29089920" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PHENOLS OR\nPHENOL-ALCOHOLS - OTHER -- OTHER --- OTHER", - "hsn_code": "29089990" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC ETHERS AND\nTHEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : DIETHYL ETHER", - "hsn_code": "29091100" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC ETHERS AND\nTHEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER", - "hsn_code": "29091900" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC ETHERS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES", - "hsn_code": "29092000" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : ANISOLE\nAND THEIR DERIVATIVES : 4-CHLORO-2-NITRO ANISOLE", - "hsn_code": "29093011" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : ANISOLE\nAND THEIR DERIVATIVES : ORTHO NITRO ANISOLE", - "hsn_code": "29093012" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : ANISOLE\nAND THEIR DERIVATIVES : OTHER", - "hsn_code": "29093019" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : DIPHENYL\nOXIDE", - "hsn_code": "29093020" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : MUSK\nAMBRETTE", - "hsn_code": "29093030" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC ETHERS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER", - "hsn_code": "29093090" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-ALCOHOLS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : 2,2-\nOXYDIETHANOL (DIETHYLENE GLYCOL, DIGOL)", - "hsn_code": "29094100" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-ALCOHOLS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES :\nMONOMETHYL ETHERS OF ETHYLENE GLYCOL OR OF DIETHYLENE GLYCOL", - "hsn_code": "29094200" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-ALCOHOLS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES :\nMONOBUTYL ETHERS OF ETHYLENE GLYCOL OR OF DIETHYLENE GLYCOL", - "hsn_code": "29094300" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-ALCOHOLS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER\nMONOALKYLETHERS OF ETHYLENE GLYCOL OR OF DIETHYLENE GLYCOL", - "hsn_code": "29094400" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-ALCOHOLS\nAND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER", - "hsn_code": "29094900" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-PHENOLS,\nETHER-ALCOHOL-PHENOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : GUAIACOL", - "hsn_code": "29095010" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-PHENOLS,\nETHER-ALCOHOL-PHENOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : ISOEUGENOL", - "hsn_code": "29095020" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-PHENOLS,\nETHER-ALCOHOL-PHENOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : POTASSIUM GUAIACOL SULPHONATE", - "hsn_code": "29095030" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ETHER-PHENOLS,\nETHER-ALCOHOL-PHENOLS AND THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : OTHER", - "hsn_code": "29095090" - }, - { - "description": "ETHERS, ETHER-ALCOHOLS, ETHER-PHENOLS, ETHERALCOHOL- PHENOLS, ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES (WHETHER OR NOT CHEMICALLY DEFINED), AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -ALCOHOL PEROXIDES,\nETHER PEROXIDES, KETONE PEROXIDES AND THEIR HALOGENATED, SULPHONATED, NITRATED\nOR NITROSATED DERIVATIVES", - "hsn_code": "29096000" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED\nRING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -\nOXIRANE (ETHYLENE OXIDE)", - "hsn_code": "29101000" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED\nRING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -\nMETHYLOXIRANE (PROPYLENE OXIDE)", - "hsn_code": "29102000" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED\nRING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -1-\nCHLORO-2,3-EXPOXYPROPANE (EPICHLOROHYDRIN)", - "hsn_code": "29103000" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED\nRING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -\nDIELDRIN (ISO, INN)", - "hsn_code": "29104000" - }, - { - "description": "EPOXIDES, EPOXYALCOHOLS, EPOXYPHENOLS AND EXPOXYETHERS, WITH A THREE-MEMBERED\nRING, AND THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -\nOTHER", - "hsn_code": "29109000" - }, - { - "description": "ACETALS AND HEMIACETALS, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACETALS AND\nHEMIACETALS, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES : ACETALS AND HEMIACETALS,\nWHETHER OR NOT WITH OTHER OXYGEN FUNCTION", - "hsn_code": "29110010" - }, - { - "description": "ACETALS AND HEMIACETALS, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACETALS AND\nHEMIACETALS, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER", - "hsn_code": "29110090" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nMETHANAL (FORMALDEHYDE)", - "hsn_code": "29121100" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nETHANAL (ACETALDEHYDE)", - "hsn_code": "29121200" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nBUTANAL (BUTYRALDEHYDE, NORMAL ISOMER)", - "hsn_code": "29121300" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : CROTONALDEHYDE", - "hsn_code": "29121910" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : HEPTALDEHYDE (HEPTANAL)", - "hsn_code": "29121920" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : GLYOXAL", - "hsn_code": "29121930" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ACYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : OTHER", - "hsn_code": "29121990" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - CYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nBENZALDEHYDE", - "hsn_code": "29122100" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - CYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : CINNAMIC ALDEHYDE", - "hsn_code": "29122910" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - CYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : PHENYL ACETALDEHYDE", - "hsn_code": "29122920" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - CYCLIC ALDEHYDES WITHOUT OTHER OXYGEN FUNCTION :\nOTHER : OTHER", - "hsn_code": "29122990" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : VANILLIN (4-HYDROXY-3-METHOXYBENZALDEHYDE)", - "hsn_code": "29124100" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : ETHYLVANILLIN (3-ETHOXY-4-HYDROXY-BENZALDEHYDE)", - "hsn_code": "29124200" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : OTHER :ANISIC ALDEHYDE (ANISALDEHYDE)", - "hsn_code": "29124910" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : OTHER :HELIOTROPIN (PIPERONYL ALDEHYDE)", - "hsn_code": "29124920" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : OTHER :THIACETAZONE", - "hsn_code": "29124930" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION : OTHER :3,4,5-TRIMETHOXY-BENZALDEHYDE", - "hsn_code": "29124940" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION -- OTHER ---OTHER----ALDEHYDE-ALCOHOLS", - "hsn_code": "29124991" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE - ALDEHYDE ETHERS, ALDEHYDE PHENOLS AND ALDEHYDES\nWITH OTHER OXYGEN FUNCTION -- OTHER ---OTHER----OTHER", - "hsn_code": "29124999" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE -CYCLIC POLYMERS OF ALDEHYDES", - "hsn_code": "29125000" - }, - { - "description": "ALDEHYDES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION; CYCLIC POLYMERS OF\nALDEHYDES; PARAFORMALDEHYDE -PARAFORMALDEHYDE", - "hsn_code": "29126000" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PRODUCTS OF\nHEADING 2912 2913 00 - HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES OF PRODUCTS OF HEADING 2912 : ORTHO-CHLORO-BENZALDEHYDE", - "hsn_code": "29130010" - }, - { - "description": "HALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES OF PRODUCTS OF\nHEADING 2912 2913 00 - HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES OF PRODUCTS OF HEADING 2912 : OTHER", - "hsn_code": "29130090" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : ACETONE", - "hsn_code": "29141100" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : BUTANONE (METHYL ETHYL KETONE)", - "hsn_code": "29141200" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : 4-METHYLPENTAN-2-ONE (METHYL ISOBUTYL KETONE)", - "hsn_code": "29141300" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION :-OTHER : ISOPHORON", - "hsn_code": "29141910" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION :-OTHER : OTHER", - "hsn_code": "29141990" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION : CYCLOHEXANONE AND\nMETHYL-CYCLOHEXANONES", - "hsn_code": "29142200" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION :-IONONES AND\nMETHYLIONONES : BETA-IONONE", - "hsn_code": "29142310" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION :-IONONES AND\nMETHYLIONONES : PSEUDO IONONE", - "hsn_code": "29142320" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION :-IONONES AND\nMETHYLIONONES : OTHER", - "hsn_code": "29142390" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION : OTHER : L-CARAVONE", - "hsn_code": "29142910" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED,SULPHONATED, NITRATED OR NITROSATED DERIVATIVES--OTHER---CAMPHOR----\nNATURAL", - "hsn_code": "29142921" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED,SULPHONATED, NITRATED OR NITROSATED DERIVATIVES--OTHER---CAMPHOR----\nSYNTHETIC", - "hsn_code": "29142922" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC KETONES WITHOUT OTHER OXYGEN FUNCTION : OTHER : OTHER", - "hsn_code": "29142990" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : PHENYLACETONE (PHENYLPROPAN-2-ONE)", - "hsn_code": "29143100" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : OTHER : ACETO PHENONE", - "hsn_code": "29143910" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : OTHER : BENZANTHRONE", - "hsn_code": "29143920" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : OTHER : BENZOPHENONE", - "hsn_code": "29143930" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : OTHER : DIBENZANTHRONE (VIOLANTHRONE)", - "hsn_code": "29143940" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC KETONES\nWITHOUT OTHER OXYGEN FUNCTION : OTHER : OTHER", - "hsn_code": "29143990" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES KETONE-ALCOHOLS\nAND KETONE-ALDEHYDES", - "hsn_code": "29144000" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES KETONE-PHENOLS\nAND KETONES WITH OTHER OXYGEN FUNCTION", - "hsn_code": "29145000" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - QUINONES :\nANTHRAQUINONE", - "hsn_code": "29146100" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - QUINONES :-OTHER :\n1,4- DIHYDROXY ANTHRAQUINONE (QUINIZARIN)", - "hsn_code": "29146910" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - QUINONES :-OTHER :\nMETHYL ANTHRAQUINONE", - "hsn_code": "29146920" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - QUINONES :-OTHER :\nOTHER", - "hsn_code": "29146990" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES : 1-CHLORO ANTHRA QUINONE", - "hsn_code": "29147010" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES : MUSK KETONE", - "hsn_code": "29147020" - }, - { - "description": "KETONES AND QUINONES, WHETHER OR NOT WITH OTHER OXYGEN FUNCTION, AND THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES : OTHER", - "hsn_code": "29147090" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - FORMIC ACID, ITS SALTS AND ESTERS : FORMIC ACID", - "hsn_code": "29151100" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - FORMIC ACID, ITS SALTS AND ESTERS : SALTS OF FORMIC ACID : SODIUM\nFORMATE", - "hsn_code": "29151210" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - FORMIC ACID, ITS SALTS AND ESTERS : SALTS OF FORMIC ACID : OTHER", - "hsn_code": "29151290" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - FORMIC ACID, ITS SALTS AND ESTERS : ESTERS OF FORMIC ACID", - "hsn_code": "29151300" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE : ACETIC ACID", - "hsn_code": "29152100" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE : SODIUM ACETATE", - "hsn_code": "29152200" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE : COBALT ACETATES", - "hsn_code": "29152300" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE : ACETIC ANHYDRIDE", - "hsn_code": "29152400" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE :-OTHER : CALCIUM ACETATE", - "hsn_code": "29152910" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE :-OTHER : MAGNESIUM ACETATE", - "hsn_code": "29152920" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE :-OTHER : MANGANESE ACETATE", - "hsn_code": "29152930" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ACETIC ACID AND ITS SALTS; ACETIC ANHYDRIDE :-OTHER : OTHER", - "hsn_code": "29152990" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : ETHYL ACETATE", - "hsn_code": "29153100" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : VINYL ACETATE", - "hsn_code": "29153200" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : N-BUTYL ACETATE", - "hsn_code": "29153300" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : ISOBUTYL ACETATE", - "hsn_code": "29153400" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : 2-ETHOXYETHYL ACETATE", - "hsn_code": "29153500" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID -- DINOSEB (ISO) ACETATE", - "hsn_code": "29153600" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : BENZYL ACETATE", - "hsn_code": "29153910" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : BORNYL ACETATE AND ISO BORNYL ACETATE", - "hsn_code": "29153920" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : LINALYL ACETATE", - "hsn_code": "29153930" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : METHYL ACETATE", - "hsn_code": "29153940" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : PHENYL PROPYL ACETATE", - "hsn_code": "29153950" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : TERPINYL ACETATE", - "hsn_code": "29153960" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - ESTERS OF ACETIC ACID : OTHER : OTHER", - "hsn_code": "29153990" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - MONO-, DI- OR TRICHLOROACETIC ACIDS, THEIR SALTS AND ESTERS :\nMONOCHLOROACETIC ACID, THEIR SALTS AND ESTERS", - "hsn_code": "29154010" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - MONO-, DI- OR TRICHLOROACETIC ACIDS, THEIR SALTS AND ESTERS :\nDICHLOROACETIC ACID, THEIR SALTS AND ESTERS", - "hsn_code": "29154020" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - MONO-, DI- OR TRICHLOROACETIC ACIDS, THEIR SALTS AND ESTERS :\nTRICHLOROACETIC ACID, THEIR SALTS AND ESTERS", - "hsn_code": "29154030" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PROPIONIC ACID, ITS SALTS AND ESTERS", - "hsn_code": "29155000" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - BUTANOIC ACIDS, PENTANOIC ACIDS, THEIR SALTS AND ESTERS : BUTANOIC\nACIDS, THEIR SALTS AND ESTERS", - "hsn_code": "29156010" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - BUTANOIC ACIDS, PENTANOIC ACIDS, THEIR SALTS AND ESTERS : PENTANOIC\nACIDS, THEIR SALTS AND ESTERS", - "hsn_code": "29156020" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : PALMITIC ACID", - "hsn_code": "29157010" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : STEARIC ACID", - "hsn_code": "29157020" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : GLYCEROL\nMONOSTEARATE", - "hsn_code": "29157030" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : H.C.O.FATTY ACID\n(INCLUDING 12-HYDROXY STEARIC ACID)", - "hsn_code": "29157040" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : D.C.O. FATTY ACID", - "hsn_code": "29157050" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - PALMITIC ACID, STEARIC ACID, THEIR SALTS AND ESTERS : OTHER", - "hsn_code": "29157090" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : ACETYL CHLORIDE", - "hsn_code": "29159010" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : OCTOIC ACID (CAPRYLIC ACID)", - "hsn_code": "29159020" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : HEXOIC ACID (CAPROIC ACID)", - "hsn_code": "29159030" - }, - { - "description": "SATURATED ACYCLIC MONOCARBOXYLIC ACIDS AND THEIR ANHYDRIDES, HALIDES, PEROXIDES\nAND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : OTHER", - "hsn_code": "29159090" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : ACRYLIC ACID\nAND ITS SALTS", - "hsn_code": "29161100" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : ESTERS OF\nACRYLIC ACID : BUTYL ACRYLATE", - "hsn_code": "29161210" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : ESTERS OF\nACRYLIC ACID : OTHER", - "hsn_code": "29161290" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :\nMETHACRYLIC ACID AND ITS SALTS : METHACRYLIC ACID", - "hsn_code": "29161310" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :\nMETHACRYLIC ACID AND ITS SALTS : SALTS OF METHACRYLIC ACID", - "hsn_code": "29161320" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : ESTERS OF\nMETHACRYLIC ACID", - "hsn_code": "29161400" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-OLEIC,\nLINOLEIC OR LINOLENIC ACIDS, THEIR SALTS AND ESTERS : OLEIC ACID", - "hsn_code": "29161510" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-OLEIC,\nLINOLEIC OR LINOLENIC ACIDS, THEIR SALTS AND ESTERS : OTHER", - "hsn_code": "29161590" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,CYCLIC MONCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS;THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES-UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES--\nBINAPACRYL(ISO)", - "hsn_code": "29161600" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nUNDECYLENIC ACID", - "hsn_code": "29161910" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nBISMUTH COMPOUNDS OF UNSATURATED ACYCLIC MONOACIDS", - "hsn_code": "29161920" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nPOTASSIUM COMPOUNDS OF UNSATURATED ACYCLIC MONOACIDS", - "hsn_code": "29161930" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nSODIUM COMPOUNDS OF UNSATURATED ACYCLIC MONOACIDS", - "hsn_code": "29161940" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nESTERS OF UNSATURATED ACYCLIC MONOACIDS NOT ELSEWHERE SPECIFIED", - "hsn_code": "29161950" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nSORBIC ACID", - "hsn_code": "29161960" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS,\nTHEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nOTHER", - "hsn_code": "29161990" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - CYCLANIC, CYCLENIC OR CYCLOTERPENIC\nMONOCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES", - "hsn_code": "29162000" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : BENZOIC ACID", - "hsn_code": "29163110" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : BENZYL BENZOATE", - "hsn_code": "29163120" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : METHYL BENZOATE", - "hsn_code": "29163130" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : SODIUM BENZOATE", - "hsn_code": "29163140" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : BENZOCAINE (ETHYLPARA-AMINO BENZOATE)", - "hsn_code": "29163150" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : ORTHOCHLORO BENZOIC ACID", - "hsn_code": "29163160" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES :-BENZOIC ACID, ITS\nSALTS AND ESTERS : OTHER", - "hsn_code": "29163190" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : BENZOYL PEROXIDE\nAND BENZOYL CHLORIDE", - "hsn_code": "29163200" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : PHENYLACETIC\nACID AND ITS SALTS", - "hsn_code": "29163400" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER : CINNAMIC\nACID", - "hsn_code": "29163910" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER : BISMUTH\nCOMPOUNDS OF AROMATIC MONOACIDS", - "hsn_code": "29163920" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER :\nPOTASSIUM COMPOUNDS OF AROMATIC MONOACIDS", - "hsn_code": "29163930" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER : SODIUM\nCOMPOUNDS OF AROMATIC MONOACIDS", - "hsn_code": "29163940" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER : ESTERS OF\nAROMATIC MONOACIDS NOT ELSEWHERE SPECIFIED", - "hsn_code": "29163950" - }, - { - "description": "UNSATURATED ACYCLIC MONOCARBOXYLIC ACIDS, CYCLIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED,\nNITRATED OR NITROSATED DERIVATIVES - AROMATIC MONOCARBOXYLIC ACIDS, THEIR\nANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR DERIVATIVES : OTHER : OTHER", - "hsn_code": "29163990" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OXALIC ACID, ITS SALTS AND ESTERS : OXALIC ACID", - "hsn_code": "29171110" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OXALIC ACID, ITS SALTS AND ESTERS : CALCIUM OXALATE", - "hsn_code": "29171120" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OXALIC ACID, ITS SALTS AND ESTERS : STRONTIUM OXALATE", - "hsn_code": "29171130" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OXALIC ACID, ITS SALTS AND ESTERS : DIETHYL OXALATE", - "hsn_code": "29171140" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OXALIC ACID, ITS SALTS AND ESTERS : OTHER", - "hsn_code": "29171190" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : ADIPIC ACID, ITS SALTS AND ESTERS", - "hsn_code": "29171200" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : AZELAIC ACID, SEBACIC ACID, THEIR SALTS AND ESTERS", - "hsn_code": "29171300" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : MALEIC ANHYDRIDE", - "hsn_code": "29171400" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : MALEIC ACID", - "hsn_code": "29171910" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : MALONIC ACID", - "hsn_code": "29171920" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : SUCCINIC ACID", - "hsn_code": "29171930" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : FERROUS FUMARATE", - "hsn_code": "29171940" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : FUMARIC ACID", - "hsn_code": "29171950" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : ITACONIC ACID", - "hsn_code": "29171960" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : ETHOXY METHYLENE MALONATE, DIETHYL MALONATE", - "hsn_code": "29171970" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - ACYCLIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-OTHER : OTHER", - "hsn_code": "29171990" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES -CYCLANIC, CYCLENIC\nOR CYCLOTERPENIC, POLYCAROXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES,\nPEROXYACIDS AND THEIR DERIVATIVES", - "hsn_code": "29172000" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :DIBUTYL ORTHOPHTHALATES", - "hsn_code": "29173100" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :DIOCTYL ORTHOPHTHALATES", - "hsn_code": "29173200" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : DINONYL OR DIDECYL ORTHOPHTHALATES", - "hsn_code": "29173300" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :OTHER ESTERS OF ORTHOPHTHALIC ACID", - "hsn_code": "29173400" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :PHTHALIC ANHYDRIDE", - "hsn_code": "29173500" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : TEREPHTHALIC ACID AND ITS SALTS", - "hsn_code": "29173600" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :DIMETHYL TEREPHTHALATE", - "hsn_code": "29173700" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER :DIBUTYL PHTHALATE", - "hsn_code": "29173910" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : DIOCTYL PHTHALATE", - "hsn_code": "29173920" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : PHTHALIC ACID", - "hsn_code": "29173930" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : DIMETHYL PHTHALATE", - "hsn_code": "29173940" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : TRIMELLITIC ANHYDRIDE", - "hsn_code": "29173950" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : ISOPHTHALIC ACID", - "hsn_code": "29173960" - }, - { - "description": "POLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES AND PEROXYACIDS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES - AROMATIC\nPOLYCARBOXYLIC ACIDS, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : OTHER", - "hsn_code": "29173990" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-LACTIC ACID, ITS SALTS AND ESTERS : LACTIC ACID", - "hsn_code": "29181110" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-LACTIC ACID, ITS SALTS AND ESTERS : CALCIUM LACTATE", - "hsn_code": "29181120" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-LACTIC ACID, ITS SALTS AND ESTERS : OTHER", - "hsn_code": "29181190" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : TARTARIC ACID", - "hsn_code": "29181200" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF TARTARIC ACID : POTASSIUM BITARTRATE", - "hsn_code": "29181310" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF TARTARIC ACID : METROPROLOL TARTRATE", - "hsn_code": "29181320" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF TARTARIC ACID : OTHER", - "hsn_code": "29181390" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : CITRIC ACID", - "hsn_code": "29181400" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : POTASSIUM CITRATE", - "hsn_code": "29181510" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : SODIUM CITRATE", - "hsn_code": "29181520" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : BISMUTH CITRATE", - "hsn_code": "29181530" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : DISODIUM HYDROGEN CITRATE", - "hsn_code": "29181540" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : FERRIC AMMONIUM CITRATE", - "hsn_code": "29181550" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-SALTS AND ESTERS OF CITRIC ACID : OTHER", - "hsn_code": "29181590" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-GLUCONIC ACID, ITS SALTS AND ESTERS : CALCIUM GLUCONATE", - "hsn_code": "29181610" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-GLUCONIC ACID, ITS SALTS AND ESTERS : FERROUS GLUCONATE", - "hsn_code": "29181620" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES :-GLUCONIC ACID, ITS SALTS AND ESTERS : OTHER", - "hsn_code": "29181690" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES -- CHLOROBENZILATE (ISO)", - "hsn_code": "29181800" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALCOHOL FUNCTION, BUT WITHOUT\nOTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER", - "hsn_code": "29181900" - }, - { - "description": "BENZENEACETIC ACID, ALPHA-HYDROXY-ALPHA-PHENYL-", - "hsn_code": "29181910" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES: OTHER", - "hsn_code": "29181990" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : SALICYLIC ACID AND ITS SALTS : SALICYLIC ACID", - "hsn_code": "29182110" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : SALICYLIC ACID AND ITS SALTS : SODIUM SALICYLATE", - "hsn_code": "29182120" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : SALICYLIC ACID AND ITS SALTS : OTHER", - "hsn_code": "29182190" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : O-ACETYLSALICYLIC ACID, ITS SALTS AND ESTERS", - "hsn_code": "29182200" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER ESTERS OF SALICYLIC ACID AND THEIR SALTS : METHYL SALICYLATE", - "hsn_code": "29182310" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER ESTERS OF SALICYLIC ACID AND THEIR SALTS : AMINO SALICYLATE", - "hsn_code": "29182320" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER ESTERS OF SALICYLIC ACID AND THEIR SALTS : SALICYLAMIDE", - "hsn_code": "29182330" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER ESTERS OF SALICYLIC ACID AND THEIR SALTS : OTHER", - "hsn_code": "29182390" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : GALLIC ACID", - "hsn_code": "29182910" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : BETA HYDROXY NAPTHOIC ACID", - "hsn_code": "29182920" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : PROPYL GALLATE", - "hsn_code": "29182930" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH PHENOL FUNCTION BUT WITHOUT OTHER\nOXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS AND THEIR\nDERIVATIVES : OTHER : OTHER", - "hsn_code": "29182990" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALDEHYDE OR KETONE FUNCTION BUT\nWITHOUT OTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS\nAND THEIR DERIVATIVES : LEVULINIC ACID", - "hsn_code": "29183010" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALDEHYDE OR KETONE FUNCTION BUT\nWITHOUT OTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS\nAND THEIR DERIVATIVES : ETHYL ACETO ACETATE (ACETOACETIC ESTER)", - "hsn_code": "29183020" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALDEHYDE OR KETONE FUNCTION BUT\nWITHOUT OTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS\nAND THEIR DERIVATIVES : NALIDIXIC ACID", - "hsn_code": "29183030" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALDEHYDE OR KETONE FUNCTION BUT\nWITHOUT OTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS\nAND THEIR DERIVATIVES : METHYL ACETO ACETATE", - "hsn_code": "29183040" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - CARBOXYLIC ACIDS WITH ALDEHYDE OR KETONE FUNCTION BUT\nWITHOUT OTHER OXYGEN FUNCTION, THEIR ANHYDRIDES, HALIDES, PEROXIDES, PEROXYACIDS\nAND THEIR DERIVATIVES : OTHER", - "hsn_code": "29183090" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - OTHER", - "hsn_code": "29189000" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - OTHER -- 2, 4, 5-T (ISO) (2, 4, 5-TRICHLOROPHENOXYACETIC ACID)\nITS SALTS AND ESTERS", - "hsn_code": "29189100" - }, - { - "description": "CARBOXYLIC ACIDS WITH ADDITIONAL OXYGEN FUNCTION AND THEIR ANHYDRIDES, HALIDES,\nPEROXIDES AND PEROXYACIDS; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES - OTHER -- OTHER", - "hsn_code": "29189900" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : GLYCEROPHOSPHORIC ACID", - "hsn_code": "29190010" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : CALCIUM GLYCEROPHOSPHATE", - "hsn_code": "29190020" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : IRON GLYCEROPHOSPHATE", - "hsn_code": "29190030" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : SODIUM GLYCEROPHOSPHATE", - "hsn_code": "29190040" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : TRICRESYL PHOSPHATE", - "hsn_code": "29190050" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTOPHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - PHOSPHORIC ESTERS AND THEIR\nSALTS, INCLUDING LACTO-PHOSPHATES; THEIR HALOGENATED, SULPHONATED, NITRATED OR\nNITROSATED DERIVATIVES : OTHER", - "hsn_code": "29190090" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - TRIS (2,3-DIBROMOPROPYL)\nPHOSPHATE", - "hsn_code": "29191000" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- GLYCEROPHOSPHORIC ACID", - "hsn_code": "29199010" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- CALCIUM\nGLYCEROPHOSPHATE", - "hsn_code": "29199020" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- IRON GLYCEROPHOSPHATE", - "hsn_code": "29199030" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- SODIUM\nGLYCEROPHOSPHATE", - "hsn_code": "29199040" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- TRICRESYL PHOSPHATE", - "hsn_code": "29199050" - }, - { - "description": "PHOSPHORIC ESTERS AND THEIR SALTS, INCLUDING LACTO PHOSPHATES; THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES - OTHER -- OTHER", - "hsn_code": "29199090" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - THIOPHOSPHORIC ESTERS (PHOSPHOROTHIOATES) AND THEIR SALTS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "29201000" - }, - { - "description": "PHOSPHOROTHIOIC ACID, S [2-DIETHYLAMINO)ETHYL] O,O-DIETHYL E", - "hsn_code": "29201010" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES", - "hsn_code": "29201020" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nALLIEDS) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - THIOPHOSPHORIC ESTERS (PHOSPHOROTHIOATES) AND THEIR SALTS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES: -- PARATHION (ISO)\nAND PARATHION-METHYL (ISO) (METHYLPARATHION)", - "hsn_code": "29201100" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nALLIEDS) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - THIOPHOSPHORIC ESTERS (PHOSPHOROTHIOATES) AND THEIR SALTS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES: -- OTHER ---\nTHIOPHOSPHORIC ESTER (PHOSPHOROTHIOATES) AND THEIR SALTS, THEIR HALOGENATED,\nSULPHONATED, NITRATED OR NITROSATED DERIVATIVES", - "hsn_code": "29201920" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nALLIEDS) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - THIOPHOSPHORIC ESTERS (PHOSPHOROTHIOATES) AND THEIR SALTS; THEIR\nHALOGENATED, SULPHONATED, NITRATED OR NITROSATED DERIVATIVES: -- OTHER --- OTHER", - "hsn_code": "29201990" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : DIETHYL SULPHATE", - "hsn_code": "29209010" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : DIMETHYL SULPHATE", - "hsn_code": "29209020" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : TRIS (2,3 DI-BROMOPROPYL) PHOSPHATE", - "hsn_code": "29209030" - }, - { - "description": "TRIMETHYL PHOSPHITE", - "hsn_code": "29209041" - }, - { - "description": "TRIETHYL PHOSPHITE", - "hsn_code": "29209042" - }, - { - "description": "DIMETHYL PHOSPHITE", - "hsn_code": "29209043" - }, - { - "description": "DIETHYL PHOSPHITE", - "hsn_code": "29209044" - }, - { - "description": "ESTERS OF OTHER INORGANIC ACIDS OF NON-METALS (EXCLUDING ESTERS OF HYDROGEN\nHALIDES) AND THEIR SALTS; THEIR HALOGENATED, SULPHONATED, NITRATED OR NITROSATED\nDERIVATIVES - OTHER : OTHER", - "hsn_code": "29209090" - }, - { - "description": "OTHER", - "hsn_code": "29209099" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-METHYLAMINE, DI- OR TRIMETHYLAMINE AND THEIR SALTS : DIMETHYL FORMIDE", - "hsn_code": "29211110" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-METHYLAMINE, DI- OR TRIMETHYLAMINE AND THEIR SALTS : OTHER", - "hsn_code": "29211190" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : DIETHYLAMINE AND ITS SALTS", - "hsn_code": "29211200" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER", - "hsn_code": "29211900" - }, - { - "description": "2-CHLORO N, N-DI-ISOPROPYL ETHYLAMINE", - "hsn_code": "29211911" - }, - { - "description": "2-CHLORO N,N-DI-ISOPROPYL ETHYLAMINE AND ETHANAMINE,2-CHLORO-N,N-DIMETHYL N,N\nDIETHYL AMINO ETHYL CHLORIDE HYDROCHLORIDE, DI-METHYL AMINO ETHYLCHLORIDE\nHYDROCHLORIDE - - - -N,N-DIETHYL AMINO ETHYL CHLORIDE HYDROCHLORIDE", - "hsn_code": "29211912" - }, - { - "description": "2-CHLORO N,N-DI-ISOPROPYL ETHYLAMINE AND ETHANAMINE,2-CHLORO-N,N-DIMETHYL N,N\nDIETHYL AMINO ETHYL CHLORIDE HYDROCHLORIDE, DI-METHYL AMINO ETHYLCHLORIDE\nHYDROCHLORIDE - - - - DI-METHYL AMINO ETHYL CHLORIDE HYDROCHLORIDE", - "hsn_code": "29211913" - }, - { - "description": "ETHANAMINE, 2-CHLORO-N, N-DIMETHYL", - "hsn_code": "29211914" - }, - { - "description": "OTHER", - "hsn_code": "29211990" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : ETHYLENEDIAMINE AND ITS SALTS", - "hsn_code": "29212100" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : HEXAMETHYLENEDIAMINE AND ITS SALTS", - "hsn_code": "29212200" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : HEXAMETHYLENE TETRAMINE (HEXAMINE) NOT PUT UP AS FUEL OR\nMEDICAMENT", - "hsn_code": "29212910" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : TRIMETHYLENE TRINIFRAMINE", - "hsn_code": "29212920" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - ACYCLIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : OTHER", - "hsn_code": "29212990" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - -CYCLANIC, CYCLENIC OR CYCLOTERPENIC MONO OR\nPOLYAMINES, AND THEIR DERIVATIVES; SALTS THEREOF : CYCLOHEXYLAMINE", - "hsn_code": "29213010" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - CYCLANIC, CYCLENIC OR CYCLOTERPENIC MONO OR\nPOLYAMINES, AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29213090" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE AND ITS SALTS : ANILINE", - "hsn_code": "29214110" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE AND ITS SALTS : ANILINE HYDROCHLORIDE", - "hsn_code": "29214120" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE AND ITS SALTS : OTHER", - "hsn_code": "29214190" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : PARA CHLOROANILINE, ORTHO CHLORO\nPARANITROANILINE, DICHLOROANILINE, 2, 6-DICHLORO PARANITROANILINE, 2-4-5-\nTRICHLOROANILINE : PARA CHLOROANILINE", - "hsn_code": "29214211" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : PARA CHLOROANILINE, ORTHO CHLORO\nPARANITROANILINE, DICHLOROANILINE, 2, 6-DICHLORO PARANITROANILINE, 2-4-5-\nTRICHLOROANILINE : ORTHO CHLORO PARANITROANILINE", - "hsn_code": "29214212" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : PARA CHLOROANILINE, ORTHO CHLORO\nPARANITROANILINE, DICHLOROANILINE, 2, 6-DICHLORO PARANITROANILINE, 2-4-5-\nTRICHLOROANILINE : DICHLOROANILINE", - "hsn_code": "29214213" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : PARA CHLOROANILINE, ORTHO CHLORO\nPARANITROANILINE, DICHLOROANILINE, 2, 6-DICHLORO PARANITROANILINE, 2-4-5-\nTRICHLOROANILINE : 2, 6-DICHLORO PARANITROANILINE", - "hsn_code": "29214214" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : PARA CHLOROANILINE, ORTHO CHLORO\nPARANITROANILINE, DICHLOROANILINE, 2, 6-DICHLORO PARANITROANILINE, 2-4-5-\nTRICHLOROANILINE : 2-4-5-TRICHLOROANILINE", - "hsn_code": "29214215" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE : BENZYL ETHYL\nANILINE", - "hsn_code": "29214221" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS :-BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE :\nDIETHYLANILINE", - "hsn_code": "29214222" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE :\nDIMETHYLANILINE", - "hsn_code": "29214223" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE : ETHYL ANILINE", - "hsn_code": "29214224" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE : META\nNITROANILINE", - "hsn_code": "29214225" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : BENZYL ETHYL ANILINE, ETHYL ANILINE,\nDIETHYLANILINE, DIMETHYLANILINE, META NITROANILINE, PARA NITROANILINE : PARA\nNITROANILINE", - "hsn_code": "29214226" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : 2-AMINO 3, 5 XYLNE SULPHONIC ACID", - "hsn_code": "29214231" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : BENZYL ETHYL ANILINE SULPHONIC ACID", - "hsn_code": "29214232" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : METANILLIC ACID (META AMINO BENZENE SULPHONIC ACID)", - "hsn_code": "29214233" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID\nPARA ANILINE SULPHONIC ACID)", - "hsn_code": "29214234" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : ETHYL HYDROXY ETHYLANILINE", - "hsn_code": "29214235" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE)", - "hsn_code": "29214236" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ANILINE DERIVATIVES AND THEIR SALTS : 2-AMINO 3, 5 XYLNE SULPHONIC ACID,\nBENZYL ETHYL ANILINE SULPHURIC ACID, METANILLIC ACID (META AMINO BENZENE SULPHONIC\nACID), SULPHANILLIC ACID (PARA AMINOBENZENE SULPHONIC ACID PARA ANILINE SULPHONIC\nACID), ETHYL HYDROXY ETHYLANILINE, METHYL DOPA (1-ALPHA METHYL-3, 4-\nDIHYDROXYPHENYLANILINE) : OTHER", - "hsn_code": "29214290" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : DIETHYL TOLUIDINE", - "hsn_code": "29214310" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : DIMETHYL TOLUIDINE", - "hsn_code": "29214320" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : ORTHO TOLUIDINE", - "hsn_code": "29214330" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : META TOLUIDINE", - "hsn_code": "29214340" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : PARA TOLUIDINE", - "hsn_code": "29214350" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : 2-CHLORO-5-TOLUIDINE-4-\nSULPHONIC ACID", - "hsn_code": "29214360" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : 2-CHLORO-4-TOLUIDINE-5-\nSULPHONIC ACID (SODIUM SALT)", - "hsn_code": "29214370" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : 4-TOLUIDINE-3-SULPHONIC\nACID", - "hsn_code": "29214380" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-TOLUIDINES AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29214390" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : DIPHENYLAMINE AND ITS DERIVATIVES; SALTS THEREOF : DIPHENYLAMINE", - "hsn_code": "29214410" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : DIPHENYLAMINE AND ITS DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29214490" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : ALPHA NAPHTHYLAMINE", - "hsn_code": "29214511" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : PHENYL ALPHA NAPHTHYLAMINE", - "hsn_code": "29214512" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : PHENYL BETA NAPHTHYLAMINE", - "hsn_code": "29214513" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : AMINO F-ACID", - "hsn_code": "29214514" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : AMINOLINELI-R-ACID", - "hsn_code": "29214515" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : ALPHA NAPHTHYLAMINE, PHENYL\nALPHA NAPHTHYLAMINE, PHENYL BETA NAPHTHYLAMINE, AMINO F-ACID, AMINOLINELI-R-ACID,\nSODIUM NAPHTHIONATE : SODIUM NAPHTHIONATE", - "hsn_code": "29214516" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : BRONNERS ACID (2-NAPHTHYLAMINE-6-SULPHONIC\nACID)", - "hsn_code": "29214521" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : CLEVES ACID (1-NAPHTHYLAMINE-6-SULPHONIC ACID)", - "hsn_code": "29214522" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : EPSILON ACID (1-NAPHTHYLAMINE-3,8-DISULPHONIC\nACID)", - "hsn_code": "29214523" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-TRISULPHONIC\nACID)", - "hsn_code": "29214524" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC\nACID)", - "hsn_code": "29214525" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : BRONNERS ACID (2-NAPHTHYLAMINE-6-\nSULPHONIC ACID), CLEVES ACID (1-NAPHTHYLAMINE-6- SULPHONIC ACID), EPSILON ACID (1-\nNAPHTHYLAMINE-3,8-DISULPHONIC ACID), KOCHS ACID (1-NAPHTHYLAMINE-3,6,8-\nTRISULPHONIC ACID), LAURENTS ACID (1-NAPHTHYLAMINE-5-SULPHONIC ACID), TOBIAS ACID (2-\nNAPHTHYLAMINE-1- SULPHONIC ACID) : TOBIAS ACID (2-NAPHTHYLAMINE-1-SULPHONIC ACID)", - "hsn_code": "29214526" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : NAPHTHIONIC ACID (1-NAPHTHYLAMINE-\n4- SULPHONIC ACID), PARA TOLYL PERI ACID (PARA TOLYL- 1-NAPHTHYLAMINE-8-SULPHONIC\nACID), PHENYL PERI ACID (PHENYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID) : NAPHTHIONIC ACID\n(1-NAPHTHYLAMINE-4-SULPHONIC ACID)", - "hsn_code": "29214531" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : NAPHTHIONIC ACID (1-NAPHTHYLAMINE-\n4- SULPHONIC ACID), PARA TOLYL PERI ACID (PARA TOLYL- 1-NAPHTHYLAMINE-8-SULPHONIC\nACID), PHENYL PERI ACID (PHENYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID) : PARA TOLYL PERI\nACID (PARA TOLYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID)", - "hsn_code": "29214532" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : NAPHTHIONIC ACID (1-NAPHTHYLAMINE-\n4- SULPHONIC ACID), PARA TOLYL PERI ACID (PARA TOLYL- 1-NAPHTHYLAMINE-8-SULPHONIC\nACID), PHENYL PERI ACID (PHENYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID) : PHENYL PERI ACID\n(PHENYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID)", - "hsn_code": "29214533" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-1-NAPHTHYLAMINE (ALPHA-NAPHTHYLAMINE), 2- NAPHTHYLAMINE (BETANAPH\nTHYLAMINE) AND THEIR DERIVATIVES; SALTS THEREOF : NAPHTHIONIC ACID (1-NAPHTHYLAMINE-\n4- SULPHONIC ACID), PARA TOLYL PERI ACID (PARA TOLYL- 1-NAPHTHYLAMINE-8-SULPHONIC\nACID), PHENYL PERI ACID (PHENYL-1-NAPHTHYLAMINE-8-SULPHONIC ACID) : OTHER", - "hsn_code": "29214590" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : AMFETAMINE (INN), BENZFETAMINE (INN) DEXAMFETAMINE (INN),\nETILAMFETAMINE (INN) FENCAMFAMIN(INN), LEFETAMINE (INN), LEVAMFETAMINE (INN),\nMEFENOREX (INN) AND PHENTERMINE (INN); SALTS THEREOF", - "hsn_code": "29214600" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER : XYLIDINES", - "hsn_code": "29214910" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC MONOAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER : OTHER", - "hsn_code": "29214990" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : O-PHENYLENEDIAMINE", - "hsn_code": "29215110" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : M-PHENYLENEDIAMINE (M-DI AMINOBENZENE)", - "hsn_code": "29215120" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : P-PHENYLENEDIAMINE", - "hsn_code": "29215130" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : O-DIAMINOTOLUENE", - "hsn_code": "29215140" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : M-DIAMINOTOLUENE", - "hsn_code": "29215150" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : P-DIAMINOTOLUENE", - "hsn_code": "29215160" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : PARA-AMINO ACETANILIDE", - "hsn_code": "29215170" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : META TOLUYLENE DIAMINE", - "hsn_code": "29215180" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-O-, M-, P-PHENYLENEDIAMINE, DIAMINOTOLUENES, AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER", - "hsn_code": "29215190" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : BENZIDINE", - "hsn_code": "29215910" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : BENZIDINE DIHYDROCHLORIDE", - "hsn_code": "29215920" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : 3, 3 DICHLOROBENZIDINE DIHYDROCHLORIDE SULPHATE", - "hsn_code": "29215930" - }, - { - "description": "AMINE- FUNCTION COMPOUNDS - AROMATIC POLYAMINES AND THEIR DERIVATIVES; SALTS\nTHEREOF :-OTHER : OTHER", - "hsn_code": "29215990" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOLS, OTHER THAN THOSE\nCONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS AND ESTERS; SALTS\nTHEREOF : MONOETHANOLAMINE AND ITS SALTS", - "hsn_code": "29221100" - }, - { - "description": "2-HYDROXYL N,N-DIISOPROPYL ETHYLAMINE, N,N-DIETHYL AMINO ETHYL CHLORIDE\nHYDROCHLORIDE, DI-ETHYL AMINO ETHANETHIOL HYDROCHLORIDE, DI-METHYL AMINO ETHYL\nCHLORIDE HYDROCHLORIDE, DI-METHYL AMINO ETHANETHIOL, DI-METHYL AMINO\nETHANETHIOL HYDROCHLORIDE- - - MONOETHANOLAMINE", - "hsn_code": "29221110" - }, - { - "description": "OTHER", - "hsn_code": "29221190" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOLS, OTHER THAN THOSE\nCONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS AND ESTERS; SALTS\nTHEREOF : DIETHANOLAMINE AND ITS SALTS", - "hsn_code": "29221200" - }, - { - "description": "DIETHANOLAMINE", - "hsn_code": "29221210" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOLS, OTHER THAN THOSE\nCONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS AND ESTERS; SALTS\nTHEREOF : DIETHANOLAMINE AND ITS SALTS : ETHYLDIETHANOLAMINE AND\nMETHYLDIETHANOLAMINE :OTHER", - "hsn_code": "29221290" - }, - { - "description": "TRIETHANOLAMINE", - "hsn_code": "29221310" - }, - { - "description": "OTHER TRIETHANOLAMINE SALTS", - "hsn_code": "29221390" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOLS, OTHER THAN THOSE\nCONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS AND ESTERS; SALTS\nTHEREOF : DEXTROPROPOXYPHENE (INN) AND ITS SALTS", - "hsn_code": "29221400" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOLS, OTHER THAN THOSE\nCONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS AND ESTERS; SALTS\nTHEREOF : OTHER", - "hsn_code": "29221900" - }, - { - "description": "2-HYDROXY N,N-DI-ISOPROPYL ETHYLAMINE", - "hsn_code": "29221940" - }, - { - "description": "ETHYLDIETHANOLAMINE", - "hsn_code": "29221950" - }, - { - "description": "METHYLDIETHANOLAMINE", - "hsn_code": "29221960" - }, - { - "description": "OTHER", - "hsn_code": "29221990" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : AMINO-G-ACID", - "hsn_code": "29222110" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : AMINO-J-ACID", - "hsn_code": "29222120" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : 1-AMINO-2-NAPHTHOL-4-SULPHONIC ACID", - "hsn_code": "29222130" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : GAMMA ACID", - "hsn_code": "29222140" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : J ACID (2-AMINO-5-NAPHTHOL-7-SULPHONIC ACID)", - "hsn_code": "29222150" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : H ACID", - "hsn_code": "29222160" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : ORTHO PHENYL SULPHONYL H-ACID", - "hsn_code": "29222170" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : CHICAGO ACID", - "hsn_code": "29222180" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF :-AMINOHYDROXYNAPHTHALENE SULPHONIC ACIDS AND THEIR\nSALTS : OTHER", - "hsn_code": "29222190" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : ANISIDINES, DIANISIDINES, PHENETIDINES AND THEIR SALTS :\nORTHO ANISIDINES", - "hsn_code": "29222210" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : ANISIDINES, DIANISIDINES, PHENETIDINES AND THEIR SALTS :\nPARA ANISIDINES", - "hsn_code": "29222220" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : ANISIDINES, DIANISIDINES, PHENETIDINES AND THEIR SALTS :\nORTHO PHENETIDINE (2-AMINO-PHENITOLE)", - "hsn_code": "29222230" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : ANISIDINES, DIANISIDINES, PHENETIDINES AND THEIR SALTS :\nOTHER", - "hsn_code": "29222290" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO 4-NITROPHENOL, META AMINOPHENOL, PARA\nAMINOPHENOL, META DIETHYL AMINO-PHENOL: 2-AMINO 4-NITROPHENOL", - "hsn_code": "29222911" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO 4-NITROPHENOL, META AMINOPHENOL, PARA\nAMINOPHENOL, META DIETHYL AMINO-PHENOL: META AMINOPHENOL", - "hsn_code": "29222912" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO 4-NITROPHENOL, META AMINOPHENOL, PARA\nAMINOPHENOL, META DIETHYL AMINO-PHENOL: PARA AMINOPHENOL", - "hsn_code": "29222913" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO 4-NITROPHENOL, META AMINOPHENOL, PARA\nAMINOPHENOL, META DIETHYL AMINO-PHENOL: META DIETHYL AMINO-PHENOL", - "hsn_code": "29222914" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : 2-AMINO-1-PHENOL-4-SULPHONIC ACID", - "hsn_code": "29222921" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : 6-NITRO-O-AMINOPHENOL-4-\nSULPHONIC ACID", - "hsn_code": "29222922" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : PHENYL GAMMA ACID (PHENYL 2-\nAMINO-NAPHTHOL-6-SULPHONIC ACID)", - "hsn_code": "29222923" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : PHENYL J ACID (PHENYL-2-AMINO-8\nNAPHTHOL-7-SULPHONIC ACID)", - "hsn_code": "29222924" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : S ACID, PERI ACID (1-AMINO-8-\nNAPHTHOL-4-4-SULPHOXINIC ACID, 1-NAPHTHYLAMINE-8-SULPHONIC ACID)", - "hsn_code": "29222925" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : 2-AMINO-1-PHENOL-4-SULPHONIC ACID, 6-NITRO\nOAMINOPHENOL- 4-SULPHONIC ACID, PHENYL GAMMA ACID (PHENYL 2-AMINO-NAPHTHOL-6-\nSULPHONIC ACID), PHENYL J ACID (PHENYL-2-AMINO-8 NAPHTHOL-7-SULPHONIC ACID), S ACID,\nPERI ACID (1-AMINO-8-NAPHTHOL-4-4-SULPHOXINIC ACID, 1- NAPHTHYLAMINE-8-SULPHONIC\nACID), METAPHENYLENE DIAMINE-4-SULPHONIC ACID : META-PHENYLENE DIAMINE-4-\nSULPHONIC ACID", - "hsn_code": "29222926" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL),2,\n5 DIMETHOXY ANILINE, PARA ACETYL AMINOPHENOL (PARACETAMOL), PARA CRESIDINE,\nPICRAMIC ACID (T-GRADE) : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL)", - "hsn_code": "29222931" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL),2,\n5 DIMETHOXY ANILINE, PARA ACETYL AMINOPHENOL (PARACETAMOL), PARA CRESIDINE,\nPICRAMIC ACID (T-GRADE) : 2, 5 DIMETHOXY ANILINE", - "hsn_code": "29222932" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL),2,\n5 DIMETHOXY ANILINE, PARA ACETYL AMINOPHENOL (PARACETAMOL), PARA CRESIDINE,\nPICRAMIC ACID (T-GRADE) : PARA ACETYL AMINOPHENOL (PARACETAMOL)", - "hsn_code": "29222933" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL),2,\n5 DIMETHOXY ANILINE, PARA ACETYL AMINOPHENOL (PARACETAMOL), PARA CRESIDINE,\nPICRAMIC ACID (T-GRADE) : PARA CRESIDINE", - "hsn_code": "29222934" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : N-METHYL-PARA-AMINOPHENOL SULPHATE (MOTOL),2,\n5 DIMETHOXY ANILINE, PARA ACETYL AMINOPHENOL (PARACETAMOL), PARA CRESIDINE,\nPICRAMIC ACID (T-GRADE) : PICRAMIC ACID (T-GRADE)", - "hsn_code": "29222935" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-NAPHTHOLS AND OTHER AMINO-PHENOLS,\nOTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN FUNCTION, THEIR ETHERS\nAND ESTERS; SALTS THEREOF : OTHER : OTHER", - "hsn_code": "29222990" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALDEHYDES , AMINO-KETONES AND\nAMINOQUINONES, OTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN\nFUNCTION; SALTS THEREOF : AMFEPRAMONE (INN) AND SALTS THEREOF", - "hsn_code": "29223100" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALDEHYDES , AMINO-KETONES AND\nAMINOQUINONES, OTHER THAN THOSE CONTAINING MORE THAN ONE KIND OF OXYGEN\nFUNCTION; SALTS THEREOF : OTHER", - "hsn_code": "29223900" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF : LYSINE AND\nITS ESTERS; SALTS THEREOF", - "hsn_code": "29224100" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF :-GLUTAMIC\nACID AND ITS SALTS : GLUTAMIC ACID", - "hsn_code": "29224210" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF :-GLUTAMIC\nACID AND ITS SALTS : MONOSODIUM GLUTAMATE (AGINAMOTO)", - "hsn_code": "29224220" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF :-GLUTAMIC\nACID AND ITS SALTS : OTHER", - "hsn_code": "29224290" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF :\nANTHRANILIC ACID AND ITS SALTS", - "hsn_code": "29224300" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF : TILIDINE\n(INN) AND ITS SALTS", - "hsn_code": "29224400" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF : OTHER :\nAMINO ACETIC ACID (GLYCINE)", - "hsn_code": "29224910" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF : OTHER : N\nMETHYL TAURINE", - "hsn_code": "29224920" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ACIDS, OTHER THAN THOSE CONTAINING\nMORE THAN ONE KIND OF OXYGEN FUNCTION, AND THEIR ESTERS; SALTS THEREOF : OTHER :\nOTHER", - "hsn_code": "29224990" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : PARA-AMINO-SALICYLIC ACID,\nMETHYL ANTHRANILATE, PROCAINE HYDROCHLORIDE, AMINO ANISIC ACID ANILIDE,L-TYROSINE\n(P-HYDROXYPHENYL AMINE) : PARA-AMINO-SALICYLIC ACID", - "hsn_code": "29225011" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : PARA-AMINO-SALICYLIC ACID,\nMETHYL ANTHRANILATE, PROCAINE HYDROCHLORIDE, AMINO ANISIC ACID ANILIDE,L-TYROSINE\n(P-HYDROXYPHENYL AMINE) : METHYL ANTHRANILATE", - "hsn_code": "29225012" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : PARA-AMINO-SALICYLIC ACID,\nMETHYL ANTHRANILATE, PROCAINE HYDROCHLORIDE, AMINO ANISIC ACID ANILIDE,L-TYROSINE\n(P-HYDROXYPHENYL AMINE) : PROCAINE HYDROCHLORIDE", - "hsn_code": "29225013" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : PARA-AMINO-SALICYLIC ACID,\nMETHYL ANTHRANILATE, PROCAINE HYDROCHLORIDE, AMINO ANISIC ACID ANILIDE,L-TYROSINE\n(P-HYDROXYPHENYL AMINE) : AMINO ANISIC ACID ANILIDE", - "hsn_code": "29225014" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : PARA-AMINO-SALICYLIC ACID,\nMETHYL ANTHRANILATE, PROCAINE HYDROCHLORIDE, AMINO ANISIC ACID ANILIDE,L-TYROSINE\n(P-HYDROXYPHENYL AMINE) : L-TYROSINE (P-HYDROXYPHENYL AMINE)", - "hsn_code": "29225015" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : FRUSEMIDE, AMINODIAL, N\nACETYL ANTHRANILIC ACID, DOMPERIDONE : FRUSEMIDE", - "hsn_code": "29225021" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : FRUSEMIDE, AMINODIAL, N\nACETYL ANTHRANILIC ACID, DOMPERIDONE : AMINODIAL", - "hsn_code": "29225022" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : FRUSEMIDE, AMINODIAL, N\nACETYL ANTHRANILIC ACID, DOMPERIDONE : N-ACETYL ANTHRANILIC ACID", - "hsn_code": "29225023" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : FRUSEMIDE, AMINODIAL, N\nACETYL ANTHRANILIC ACID, DOMPERIDONE : DOMPERIDONE", - "hsn_code": "29225024" - }, - { - "description": "OXYGEN-FUNCTION AMINO-COMPOUNDS - AMINO-ALCOHOL-PHENOLS, AMINO-ACID-PHENOLS\nAND OTHER AMINO-COMPOUNDS WITH OXYGEN FUNCTION : OTHER", - "hsn_code": "29225090" - }, - { - "description": "QUATERNARY AMMONIUM SALTS AND HYDROXIDES; LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS, WHETHER OR NOT CHEMICALLY DEFINED CHOLINE AND ITS SALTS", - "hsn_code": "29231000" - }, - { - "description": "QUATERNARY AMMONIUM SALTS AND HYDROXIDES; LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS, WHETHER OR NOT CHEMICALLY DEFINED - LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS : LECITHINS", - "hsn_code": "29232010" - }, - { - "description": "QUATERNARY AMMONIUM SALTS AND HYDROXIDES; LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS, WHETHER OR NOT CHEMICALLY DEFINED - LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS : OTHER", - "hsn_code": "29232090" - }, - { - "description": "QUATERNARY AMMONIUM SALTS AND HYDROXIDES; LECITHINS AND OTHER\nPHOSPHOAMINOLIPIDS, WHETHER OR NOT CHEMICALLY DEFINED OTHER", - "hsn_code": "29239000" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nACYCLIC AMIDES (INCLUDING ACYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nMEPROBAMATE (INN)", - "hsn_code": "29241100" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nACYCLIC AMIDES (INCLUDING ACYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF : -\n- FLUOROACETAMIDE (ISO), MONOCROTOPHOS (ISO) AND PHOSPHAMIDON (IS0)", - "hsn_code": "29241200" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nACYCLIC AMIDES (INCLUDING ACYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER", - "hsn_code": "29241900" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :-\nUREINES AND THEIR DERIVATIVES; SALTS THEREOF : DIETHYL DIPHENYL UREA", - "hsn_code": "29242110" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :-\nUREINES AND THEIR DERIVATIVES; SALTS THEREOF : DIMETHYL DIPHENYL UREA (ZENTRALIN)", - "hsn_code": "29242120" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :-\nUREINES AND THEIR DERIVATIVES; SALTS THEREOF : PARACHLORO BENZENE SULPHONYL UREA", - "hsn_code": "29242130" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :-\nUREINES AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29242190" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF : 2-\nACETAMIDOBENZOIC ACID (N-ACETYLANTHRANILIC ACID) AND ITS SALTS", - "hsn_code": "29242300" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nETHINAMATE (INN)", - "hsn_code": "29242400" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : ACETANILIDE", - "hsn_code": "29242910" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : ACETO ACETANILIDE", - "hsn_code": "29242920" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : ACETO ACETIC ORTHO CHLORANILIDE", - "hsn_code": "29242930" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : ACETO ACETIC PARA CHLORANILIDE", - "hsn_code": "29242940" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : PHENYL ACETAMIDE", - "hsn_code": "29242950" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : PYRAZINAMIDE (PYRAZINE CARBOXAMIDE)", - "hsn_code": "29242960" - }, - { - "description": "CARBOXYAMIDE-FUNCTION COMPOUNDS; AMIDE-FUNCTION COMPOUNDS OF CARBONIC ACID -\nCYCLIC AMIDES (INCLUDING CYCLIC CARBAMATES) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER : OTHER", - "hsn_code": "29242990" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMIDES AND THEIR DERIVATIVES; SALTS THEREOF : SACCHARIN AND\nITS SALTS", - "hsn_code": "29251100" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMIDES AND THEIR DERIVATIVES; SALTS THEREOF : GLUTETHIMIDE\n(INN)", - "hsn_code": "29251200" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMIDES AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29251900" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMINES AND THEIR DERIVATIVES; SALTS THEREOF : GUANIDINE\nNITRATE", - "hsn_code": "29252010" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMINES AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29252090" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMINES AND THEIR DERIVATIVES; SALTS THEREOF : CHLORDIMEFORM\n(ISO)", - "hsn_code": "29252100" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMINES AND THEIR DERIVATIVES; SALTS THEREOF : -- OTHER ---\nGUANIDINE NITRATE", - "hsn_code": "29252910" - }, - { - "description": "CARBOXYIMIDE-FUNCTION COMPOUNDS (INCLUDING SACCHARIN AND ITS SALTS) AND IMINE\nFUNCTION COMPOUNDS - IMINES AND THEIR DERIVATIVES; SALTS THEREOF : -- OTHER --- OTHER", - "hsn_code": "29252990" - }, - { - "description": "NITRILE-FUNCTION COMPOUNDS ACRYLONITRILE", - "hsn_code": "29261000" - }, - { - "description": "NITRILE-FUNCTION COMPOUNDS 1-CYANOGUANIDINE (DICYANDIAMIDE)", - "hsn_code": "29262000" - }, - { - "description": "NITRILE-FUNCTION COMPOUNDS FENPROPOREX (INN) AND ITS SALTS", - "hsn_code": "29263000" - }, - { - "description": "NITRILE-FUNCTION COMPOUNDS OTHER", - "hsn_code": "29269000" - }, - { - "description": "DIAZO-, AZO- OR AZOXY-COMPOUNDS - DIAZO-, AZO- OR AZOXY- COMPOUNDS : PARA AMINO\nAZO-BENZENE", - "hsn_code": "29270010" - }, - { - "description": "DIAZO-, AZO- OR AZOXY-COMPOUNDS - DIAZO-, AZO- OR AZOXY- COMPOUNDS : OTHER", - "hsn_code": "29270090" - }, - { - "description": "ORGANIC DERIVATIVES OF HYDRAZINE OR OF HYDROXYLAMINE - ORGANIC DERIVATIVES OF\nHYDRAZINE OR OF HYDROXYLAMINE : ISONIAZID", - "hsn_code": "29280010" - }, - { - "description": "ORGANIC DERIVATIVES OF HYDRAZINE OR OF HYDROXYLAMINE - ORGANIC DERIVATIVES OF\nHYDRAZINE OR OF HYDROXYLAMINE : OTHER", - "hsn_code": "29280090" - }, - { - "description": "COMPOUNDS WITH OTHER NITROGEN FUNCTION - ISOCYANATES : PHENYL ISOCYANATE", - "hsn_code": "29291010" - }, - { - "description": "COMPOUNDS WITH OTHER NITROGEN FUNCTION - ISOCYANATES : TOLUENE DI-ISOCYANATE", - "hsn_code": "29291020" - }, - { - "description": "COMPOUNDS WITH OTHER NITROGEN FUNCTION - ISOCYANATES : OTHER", - "hsn_code": "29291090" - }, - { - "description": "N,N-Diethylphosphoramidicdichloride", - "hsn_code": "29299010" - }, - { - "description": "N,N-Diisopropylphosphoramidicdichloride", - "hsn_code": "29299020" - }, - { - "description": "N,N-DIPROPYLPHOSPHORAMIDICDICHLORIDE", - "hsn_code": "29299030" - }, - { - "description": "N,N-DIMETHYLPHOSPHORAMIDICDICHLORIDE", - "hsn_code": "29299040" - }, - { - "description": "DIETHYL N,N-DIMETHYLPHOSPHORAMIDATE", - "hsn_code": "29299050" - }, - { - "description": "PHOSPHORAMIDIC ACID, DIETHYL, DIMETHYLESTER", - "hsn_code": "29299060" - }, - { - "description": "OTHER", - "hsn_code": "29299090" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - DITHIOCARBONATES (XANTHATES)", - "hsn_code": "29301000" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - THIOCARBAMATES AND DITHIOCARBAMATES", - "hsn_code": "29302000" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - THIURAM MONO-, DI OR TETRASULPHIDES", - "hsn_code": "29303000" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - METHIONINE", - "hsn_code": "29304000" - }, - { - "description": "ORGANOSULPHUR COMPOUNDS CAPTAFOL ISO AND METHAMIDOPHOS ISO", - "hsn_code": "29305000" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : THIOUREA (SULPHOUREA)", - "hsn_code": "29309010" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : CALCIUM SALTS OF METHIONINE", - "hsn_code": "29309020" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : THIO SULPHONIC ACID", - "hsn_code": "29309030" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : L-CYSTINE (ALPHA-AMINO BETA-THIOPROPIONIC\nACID)- SULPHUR CONTAINING AMINO ACID", - "hsn_code": "29309040" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : SULPHINIC ACID", - "hsn_code": "29309050" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : SULPHOXIDE", - "hsn_code": "29309060" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : MERCAPTAN", - "hsn_code": "29309070" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : ALLYL ISOTHIOCYANATE", - "hsn_code": "29309080" - }, - { - "description": "ORGANO-SULPHUR COMPOUNDS - OTHER : OTHER", - "hsn_code": "29309090" - }, - { - "description": "ETHANOL, 2,2-THIOBIS-", - "hsn_code": "29309091" - }, - { - "description": "DI-METHYL AMINO ETHANETHIOL", - "hsn_code": "29309092" - }, - { - "description": "DI-METHYL AMINO ETHANETHIOL HYDROCHLORIDE", - "hsn_code": "29309093" - }, - { - "description": "DIETHYL AMINO ETHANETHIOL", - "hsn_code": "29309094" - }, - { - "description": "DI-ETHYL AMINO ETHANETHIOL HYDROCHLORIDE", - "hsn_code": "29309095" - }, - { - "description": "O-ETHYL S-PHENYL ETHYLPHOSPHONOTHIOLOTHIONATE (FONOFOS)", - "hsn_code": "29309096" - }, - { - "description": "PHOSPHOROTHIOIC ACID,S[2-(DIETHYL AMINO) ETHYL]O, O-DIETHYL ESTER", - "hsn_code": "29309097" - }, - { - "description": "OTHER", - "hsn_code": "29309099" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS - OTHER ORGANO-INORGANIC COMPOUNDS :\nORGANO-MERCURY COMPOUNDS", - "hsn_code": "29310010" - }, - { - "description": "PHOSPHONIC ACID,METHYL -", - "hsn_code": "29310041" - }, - { - "description": "PHOSPHONIC ACID,ETHYL", - "hsn_code": "29310042" - }, - { - "description": "PHOSPHONIC ACID,PROPYL", - "hsn_code": "29310043" - }, - { - "description": "PHOSPHINIC ACID,METHYL-", - "hsn_code": "29310044" - }, - { - "description": "PHOSPONIC ACIDE,[METHYL-(5-ETHYL-2-METHYL 2-OXIDO- 1,3,2-DIOXAPHOSPHORINAN-5-YL)\nMETHYL]ESTER", - "hsn_code": "29310051" - }, - { - "description": "PHOSPHONIC ACIDE,[METHYL-BIS (5-ETHYL-2-METHYL 2-OXIDO- 1,3,2-DIOXAPHOSPHORINAN-5-\nYL) METHYL] ESTER", - "hsn_code": "29310052" - }, - { - "description": "PHOSPHONIC ACID,METHYL,DIMETHYL ESTER", - "hsn_code": "29310053" - }, - { - "description": "PHOSPHONIC ACID PROPYL DIMETHYL ESTER", - "hsn_code": "29310054" - }, - { - "description": "PHOSPHONIC ACID ETHYL-DIETHYL ESTER", - "hsn_code": "29310055" - }, - { - "description": "PHOSPHONOCHLORIDIC ACID METHYL-,METHYL ESTER", - "hsn_code": "29310056" - }, - { - "description": "PHOSPHONOUS ACID- METHYL DIETHYL ESTER", - "hsn_code": "29310057" - }, - { - "description": "1 PROPANAMINIUM N,N,N TRIMETHYL 3-[1-OXO-9-OCTADECENYL AMINO] -(Z)-METHYL METHYL\nPHOSPHONATE", - "hsn_code": "29310061" - }, - { - "description": "O,O-DIMETHYL METHYL PHOSPHONATE", - "hsn_code": "29310062" - }, - { - "description": "PHOSPHONOTHIOIC DICHLORIDE,ETHYL-", - "hsn_code": "29310071" - }, - { - "description": "PHOSPHONIC DICHLORIDE,METHYL", - "hsn_code": "29310072" - }, - { - "description": "PHOSPHONOUS DICHLORIDE,METHYL-", - "hsn_code": "29310073" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS-TETRAMETHYL LEAD AND TETRAETHYL LEAD---\nTETRAMETHYL LEAD", - "hsn_code": "29311010" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS-TETRAMETHYL LEAD AND TETRAETHYL LEAD---\nTETRAETHYL LEAD", - "hsn_code": "29311020" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS -TRIBUTYLTIN COMPOUNDS", - "hsn_code": "29312000" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS -OTHER---ORGANO ARSENIC COMPOUNDS", - "hsn_code": "29319010" - }, - { - "description": "OTHER ORGANO-INORGANIC COMPOUNDS -OTHER---OTHER", - "hsn_code": "29319090" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED FURAN RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : TETRAHYDROFURAN", - "hsn_code": "29321100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED FURAN RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : 2-FURALDEHYDE (FURFURALDEHYDE)", - "hsn_code": "29321200" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED FURAN RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : FURFURYL ALCOHOL AND TETRAHYDROFURFURYL ALCOHOL", - "hsn_code": "29321300" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED FURAN RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : OTHER : HYDROXY DIBENZFURAN CARBOXYLIC ACID", - "hsn_code": "29321910" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED FURAN RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : OTHER : OTHER", - "hsn_code": "29321990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM(S) ONLY - LACTONES---COUMARIN,\nMETHYLCOUMARINS AND ETHYLCOUMARINS", - "hsn_code": "29322010" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM(S) ONLY - LACTONES---\nPHENOLPHTHALEIN", - "hsn_code": "29322020" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM(S) ONLY - LACTONES---OTHER", - "hsn_code": "29322090" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER : ISOSAFROLE", - "hsn_code": "29329100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER : 1-(1,3-\nBENZODIOXOL-5-YL) PROPAN-2-ONE", - "hsn_code": "29329200" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER : PIPERONAL", - "hsn_code": "29329300" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER : SAFROLE", - "hsn_code": "29329400" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER :\nTETRAHYDROCANNABINOLS (ALL ISOMERS)", - "hsn_code": "29329500" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH OXYGEN HETERO-ATOM (S) ONLY - OTHER : OTHER", - "hsn_code": "29329900" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : PHENAZONE (ANTIPYRIN) AND ITS DERIVATES", - "hsn_code": "29331100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : 3-CARBOXY (PARA SULPHO-PHENYL)-5- PYRAZOLONE", - "hsn_code": "29331910" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : 1 (2,5- DICHLORO-4-SULPHO PHENYL)-3-METHYL-5-PYRAZOLONE", - "hsn_code": "29331920" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : 3-METHYL-1(4-SULPHO-O-TOLUYL-5-PYRAZOLONE)", - "hsn_code": "29331930" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : PHENYLMETHYLPYRAZOLONE", - "hsn_code": "29331940" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : 1-PHENYL-5-PYRAZOLONE-3-CARBOXYLIC ACID ETHYLESTER", - "hsn_code": "29331950" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : 1-(M-SULPHOPHENYL)-3-PYRAZOLONE", - "hsn_code": "29331960" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : ANALGIN", - "hsn_code": "29331970" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : OXYPHENBUTAZONE", - "hsn_code": "29331980" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED PYRAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : OTHER", - "hsn_code": "29331990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : HYDANTOIN AND ITS DERIVATIVES", - "hsn_code": "29332100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : TINIDAZOLE", - "hsn_code": "29332910" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : METRONIDAZOLE, METRONIDIAZOLE BENZOATE", - "hsn_code": "29332920" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : MEBENDAZOLE", - "hsn_code": "29332930" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DIMETRIDAZOLE", - "hsn_code": "29332940" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : ALBENDAZOLE", - "hsn_code": "29332950" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED IMIDAZOLE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : OTHER", - "hsn_code": "29332990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : PYRIDINE AND ITS SALTS", - "hsn_code": "29333100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : PIPERIDINE AND ITS SALTS", - "hsn_code": "29333200" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : BROMAZEPAM (INN), METHYLPHENIDATE (INN), PENTAZOCINE (INN),\nPHENCYCLINDINE (INN) (PCP), PIPRADROL (INN), PROPIRAM (INN); SALTS THEREOF", - "hsn_code": "29333300" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : AMINO PYRIDINE", - "hsn_code": "29333911" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : ALPHA PICOLINE (2-METHYL PYRIDINE)", - "hsn_code": "29333912" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : GAMMA PICOLINE (4-METHYL PYRIDINE)", - "hsn_code": "29333913" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : CHLOROPHENIRAMINE MALEATE", - "hsn_code": "29333914" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : - DERIVATIVES OF PYRIDINE :", - "hsn_code": "29333915" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : BETA PICOLINE (3-METHYL PYRIDINE)", - "hsn_code": "29333916" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : MORPHOLINE", - "hsn_code": "29333917" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : LUTIDINE (DIMETHYL PYRIDINE)", - "hsn_code": "29333918" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : DERIVATIVES OF PYRIDINE : OTHER", - "hsn_code": "29333919" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : PIPERIDINE AND ITS DERIVATIVES", - "hsn_code": "29333920" - }, - { - "description": "1-AZABICYCLO(2,2,2)OCTAN-3-OL", - "hsn_code": "29333930" - }, - { - "description": "BENZENE ACETIC ACID,ALPHA -HYDROXY- ALPHA-PHENYL, 1-AZABICYCLO[2.2.2] OCT-3-YL ESTER", - "hsn_code": "29333940" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAING AN UNFUSED PYRIDINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : OTHER", - "hsn_code": "29333990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING IN THE STRUCTURE A QUINOLINE OR ISOQUINOLINE RING-SYSTEM (WHETHER OR\nNOT HYDROGENATED), NOT FURTHER FUSED :", - "hsn_code": "29334100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING IN THE STRUCTURE A QUINOLINE OR ISOQUINOLINE RING-SYSTEM (WHETHER OR\nNOT HYDROGENATED), NOT FURTHER FUSED : OTHER", - "hsn_code": "29334900" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE : MALONYLUREA (BARBITURIC ACID) AND ITS SALTS", - "hsn_code": "29335200" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE : ALLOBARBITAL (INN), AMOBARBITAL (INN), BARBITAL (INN), BUTALBITAL (INN),\nBUTOBARBITAL (INN), CYCLOBARBITAL (INN), METHYLPHENOBARBITAL (INN), PENTOBARBITAL\n(INN), SECBUTABARBITAL (INN), PHENOBARBITAL (INN), SECOBARBITAL (INN), AND VINYLBITAL\n(INN); SALTS THEREOF", - "hsn_code": "29335300" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE : OTHER DERIVATIVES OF MALONYLUREA (BARBITURIC ACID); SALTS THEREOF", - "hsn_code": "29335400" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE : LOPRAZOLAM (INN), MECLOQUALONE (INN), METHAQUALONE (INN) AND\nZIPEPROL (INN); SALTS THEREOF", - "hsn_code": "29335500" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE :-OTHER : AMINOPHYLLINE (CORDOPHYLIN)", - "hsn_code": "29335910" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE :-OTHER : TRIMETHOPRIM", - "hsn_code": "29335920" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE :-OTHER : DIETHYL CARBAMAZINE CITRATE", - "hsn_code": "29335930" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE :-OTHER : 1-AMINO-4-METHYL PIPERAZINE", - "hsn_code": "29335940" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING A PYRIMIDINE RING (WHETHER OR NOT HYDROGENATED) OR PIPERAZINE RING IN\nTHE STRUCTURE :-OTHER : OTHER", - "hsn_code": "29335990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED TRIAZINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE : MELAMINE", - "hsn_code": "29336100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED TRIAZINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : CYANURIC ACID AND ITS SALTS", - "hsn_code": "29336910" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - COMPOUNDS\nCONTAINING AN UNFUSED TRIAZINE RING (WHETHER OR NOT HYDROGENATED) IN THE\nSTRUCTURE :-OTHER : OTHER", - "hsn_code": "29336990" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - LACTAMS : 6-\nHEXANELACTAM (EPSILON-CAPROLACTAM)", - "hsn_code": "29337100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - LACTAMS : CLOBAZAM\n(INN) AND METHYPRYLON (INN)", - "hsn_code": "29337200" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - LACTAMS : OTHER\nLACTAMS", - "hsn_code": "29337900" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - OTHER : ALPRAZOLAM\n(INN), CAMAZEPAM (INN) CHLORIDIAZEPOXIDE (INN), CLONAZEPAM (INN), CLORAZEPATE,\nDELORAZEPAM (INN), DIAZEPAM (INN), ESTAZOLAM (INN), ETHYL LOFLAZEPATE (INN),\nFLUDIAZEPAM (INN), FLUNITRZEPAM (INN), FLURAZEPAM (INN), HALAZAEPAM (INN),\nLORAZEPAM (INN), LORMETAZEPAM (INN), MAZINDOL (INN), MEDAZEPAM (INN), MIDAZOLAM\n(INN), NIMETAZEPAM (INN), NITRAZEPAM (INN), NORDAZEPAM (INN), OXAZEPAM (INN),\nPINAZEPAM (INN), PRAZEPAM (INN), PYROVALERONE (INN), TAMAZEPAM (INN), TETRAZEPAM\n(INN) AND TRIAZOLAM (INN); SALTS THEREOF", - "hsn_code": "29339100" - }, - { - "description": "HETEROCYCLIC COMPOUNDS WITH NITROGEN HETEROATOM( S) ONLY - OTHER : OTHER", - "hsn_code": "29339900" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS; WHETHER OR NOT CHEMICALLY DEFINED; OTHER\nHETEROCYCLIC COMPOUNDS COMPOUNDS CONTAINING AN UNFUSED THIAZOLE RING\n(WHETHER OR NOT HYDROGENATED) IN THE STRUCTURE", - "hsn_code": "29341000" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS; WHETHER OR NOT CHEMICALLY DEFINED; OTHER\nHETEROCYCLIC COMPOUNDS COMPOUNDS CONTAINING IN THE STRUCTURE A BENZOTHIAZOLE\nRING-SYSTEM (WHETHER OR NOT HYDROGENATED) NOT FURTHER FUSED", - "hsn_code": "29342000" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS; WHETHER OR NOT CHEMICALLY DEFINED; OTHER\nHETEROCYCLIC COMPOUNDS COMPOUNDS CONTAINING IN THE STRUCTURE A PHENOTHIAZINE\nRING-SYSTEM (WHETHER OR NOT HYDROGENATED) NOT FURTHER FUSED", - "hsn_code": "29343000" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS; WHETHER OR NOT CHEMICALLY DEFINED; OTHER\nHETEROCYCLIC COMPOUNDS - OTHER : AMINOREX (INN), BROTIZOLAM (INN), CLOTIAZEPAM\n(INN), CLAXAZOLAM (INN), HALOXAZOLAM (INN), KETAZOLAM (INN), MESOCARB (INN),\nOXAZOLAM (INN), PEMOLINE (INN), PHENDIMETRAZINE (INN) AND PHENMETRAZINE (INN);\nSALTS THEREOF", - "hsn_code": "29349100" - }, - { - "description": "NUCLEIC ACIDS AND THEIR SALTS; WHETHER OR NOT CHEMICALLY DEFINED; OTHER\nHETEROCYCLIC COMPOUNDS - OTHER : OTHER", - "hsn_code": "29349900" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : SULPHAMETHOXAZOLE, SULPHAFURAZOLE,\nSULPHADIAZINE, SULPHADIMIDINE, SULPHACETAMIDE : SULPHAMETHOXAZOLE", - "hsn_code": "29350011" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : SULPHAMETHOXAZOLE, SULPHAFURAZOLE,\nSULPHADIAZINE, SULPHADIMIDINE, SULPHACETAMIDE : SULPHAFURAZOLE", - "hsn_code": "29350012" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : SULPHAMETHOXAZOLE, SULPHAFURAZOLE,\nSULPHADIAZINE, SULPHADIMIDINE, SULPHACETAMIDE : SULPHADIAZINE", - "hsn_code": "29350013" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : SULPHAMETHOXAZOLE, SULPHAFURAZOLE,\nSULPHADIAZINE, SULPHADIMIDINE, SULPHACETAMIDE : SULPHADIMIDINE", - "hsn_code": "29350014" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : SULPHAMETHOXAZOLE, SULPHAFURAZOLE,\nSULPHADIAZINE, SULPHADIMIDINE, SULPHACETAMIDE : SULPHACETAMIDE", - "hsn_code": "29350015" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES :-SULPHAMETHOXYPYRIDARINE, SULPHAMETHIAZOLE,\nSULPHAMOXOLE, SULPHAMIDE : SULPHAMETHOXYPYRIDARINE", - "hsn_code": "29350021" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES :-SULPHAMETHOXYPYRIDARINE, SULPHAMETHIAZOLE,\nSULPHAMOXOLE, SULPHAMIDE : SULPHAMETHIAZOLE", - "hsn_code": "29350022" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES :-SULPHAMETHOXYPYRIDARINE, SULPHAMETHIAZOLE,\nSULPHAMOXOLE, SULPHAMIDE : SULPHAMOXOLE", - "hsn_code": "29350023" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES :-SULPHAMETHOXYPYRIDARINE, SULPHAMETHIAZOLE,\nSULPHAMOXOLE, SULPHAMIDE : SULPHAMIDE", - "hsn_code": "29350024" - }, - { - "description": "SULPHONAMIDES - SULPHONAMIDES : OTHER", - "hsn_code": "29350090" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - PROVITAMINS, UNMIXED", - "hsn_code": "29361000" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : VITAMIN A AND THEIR DERIVATIVES", - "hsn_code": "29362100" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B1 AND ITS DERIVATIVES : VITAMIN B1 [THIAMINE (INN), ANEURINE] AND\nITS SALTS", - "hsn_code": "29362210" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B1 AND ITS DERIVATIVES : OTHER", - "hsn_code": "29362290" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B2 AND ITS DERIVATIVES : VITAMIN B2 [RIBOFLAVIN(INN), LACTOFLAVIN]\nAND ITS SALTS", - "hsn_code": "29362310" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B2 AND ITS DERIVATIVES : OTHER", - "hsn_code": "29362390" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : D- OR DL-PANTOTHENIC ACID (VITAMIN B3 OR VITAMIN B5) AND ITS DERIVATIVES", - "hsn_code": "29362400" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : VITAMIN B6 AND ITS DERIVATIVES", - "hsn_code": "29362500" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B12 AND ITS DERIVATIVES : VITAMIN B12 (CYANOCOBALAMIN (INN))", - "hsn_code": "29362610" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED :-VITAMIN B12 AND ITS DERIVATIVES : OTHER", - "hsn_code": "29362690" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : VITAMIN C (ASCORBIC ACID) AND ITS DERIVATIVES", - "hsn_code": "29362700" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : VITAMIN E AND ITS DERIVATIVES", - "hsn_code": "29362800" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : FOLIC ACID (VITAMIN B9)", - "hsn_code": "29362910" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : NICOTINIC ACID AND NICOTINAMIDE\n(NIACINAMIDE OR NIACINE)", - "hsn_code": "29362920" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : VITAMIN K (MENAPHTHONUM BP)", - "hsn_code": "29362930" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : VITAMIN D", - "hsn_code": "29362940" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : VITAMIN H (BIOTIN)", - "hsn_code": "29362950" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT - VITAMINS AND THEIR DERIVATIVES,\nUNMIXED : OTHER VITAMINS AND THEIR DERIVATIVES : OTHER", - "hsn_code": "29362990" - }, - { - "description": "PROVITAMINS AND VITAMINS, NATURAL OR REPRODUCED BY SYNTHESIS (INCLUDING NATURAL\nCONCENTRATES), DERIVATIVES THEREOF USED PRIMARILY AS VITAMINS, AND INTERMIXTURES\nOF THE FOREGOING, WHETHER OR NOT IN ANY SOLVENT -OTHER, INCLUDING NATURAL\nCONCENTRATES", - "hsn_code": "29369000" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - POLYPEPTIDE HORMONES,\nPROTEIN HORMONES AND GLYCOPROTEIN HORMONES, THEIR DERVATIVES AND STRUCTURAL\nANALOGUES : SOMATOTROPIN, ITS DERIVATIVES AND STRUCTURAL ANALOGUES", - "hsn_code": "29371100" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - POLYPEPTIDE HORMONES,\nPROTEIN HORMONES AND GLYCOPROTEIN HORMONES, THEIR DERVATIVES AND STRUCTURAL\nANALOGUES : INSULIN AND ITS SALTS", - "hsn_code": "29371200" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - POLYPEPTIDE HORMONES,\nPROTEIN HORMONES AND GLYCOPROTEIN HORMONES, THEIR DERVATIVES AND STRUCTURAL\nANALOGUES : OTHER", - "hsn_code": "29371900" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - STEROIDAL HORMONES,\nTHEIR DERIVATIVES AND STRUCTURAL ANALOGUES : CORTISONE, HYDROCORTISONE,\nPREDNISONE, (DEHYDROCORTISONE) AND PREDNISOLONE (DEHYDROHYDROCORTISONE)", - "hsn_code": "29372100" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - STEROIDAL HORMONES,\nTHEIR DERIVATIVES AND STRUCTURAL ANALOGUES : HALOGENATED DERIVATIVES OF\nCORTICOSTEROIDAL HARMONES", - "hsn_code": "29372200" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - STEROIDAL HORMONES,\nTHEIR DERIVATIVES AND STRUCTURAL ANALOGUES : OESTROGENS AND PROGESTOGENS", - "hsn_code": "29372300" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - STEROIDAL HORMONES,\nTHEIR DERIVATIVES AND STRUCTURAL ANALOGUES : OTHER", - "hsn_code": "29372900" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES - PROSTAGLANDINS,\nTHROMBOXANES AND LEUKOTRIENES, THEIR DERIVATIVES AND STRUCTURAL ANALOGUES", - "hsn_code": "29375000" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES -OTHER---CATECHOLAMINE\nHORMONES, THEIR DERIVATIVES AND STRUCTURAL ANALOGUES----EPINETHRINE", - "hsn_code": "29379011" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES -OTHER---CATECHOLAMINE\nHORMONES, THEIR DERIVATIVES AND STRUCTURAL ANALOGUES----OTHER", - "hsn_code": "29379019" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES -OTHER---CATECHOLAMINE\nHORMONES, THEIR DERIVATIVES AND STRUCTURAL ANALOGUES----AMINO-ACID DERIVATIVES", - "hsn_code": "29379020" - }, - { - "description": "HORMONES, PROSTAGLANDINS, THROMBOXANES AND LEUKOTRIENES, NATURAL OR\nREPRODUCED BY SYNTHESIS; DERIVATIVES AND STRUCTURAL ANALOGUES THEREOF, INCLUDING\nCHAIN MODIFIED POLYPEPTIDES, USED PRIMARILY AS HORMONES -OTHER---CATECHOLAMINE\nHORMONES, THEIR DERIVATIVES AND STRUCTURAL ANALOGUES----OTHER", - "hsn_code": "29379090" - }, - { - "description": "GLYCOSIDES, NATURAL OR REPRODUCED BY SYNTHESIS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES -RUTOSIDE (RUTIN) AND ITS DERIVATIVES", - "hsn_code": "29381000" - }, - { - "description": "GLYCOSIDES, NATURAL OR REPRODUCED BY SYNTHESIS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : DIGOXIN", - "hsn_code": "29389010" - }, - { - "description": "GLYCOSIDES, NATURAL OR REPRODUCED BY SYNTHESIS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : DIGITALIS GLYCOSIDES", - "hsn_code": "29389020" - }, - { - "description": "GLYCOSIDES, NATURAL OR REPRODUCED BY SYNTHESIS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : OTHER", - "hsn_code": "29389090" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF OPIUM AND THEIR DERIVATIVES; SALTS\nTHEREOF : BUPRENORPHINE (INN), AND SALTS THEREOF", - "hsn_code": "29391100" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF OPIUM AND THEIR DERIVATIVES; SALTS\nTHEREOF : -- OTHER", - "hsn_code": "29391900" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : --- QUININE ALKALOIDS", - "hsn_code": "29392010" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : --- QUININE HYDROCHLORIDE", - "hsn_code": "29392020" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : --- QUININE SULPHATE", - "hsn_code": "29392030" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : --- CHLOROQUINE PHOSPHATE", - "hsn_code": "29392040" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : --- OTHER", - "hsn_code": "29392090" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF :-QUININE AND ITS SALTS : QUININE ALKALOIDS", - "hsn_code": "29392110" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF :-QUININE AND ITS SALTS : QUININE HYDROCHLORIDE", - "hsn_code": "29392120" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF :-QUININE AND ITS SALTS : QUININE SULPHATE", - "hsn_code": "29392130" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF :-QUININE AND ITS SALTS : CHLOROQUINE PHOSPHATE", - "hsn_code": "29392140" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF :-QUININE AND ITS SALTS : OTHER", - "hsn_code": "29392190" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF CINCHONA AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER", - "hsn_code": "29392900" - }, - { - "description": "BENZENEACETIC ACID, ALPHA-HYDROXY-ALPHA-PHENYL, 1-AZABICYCLO", - "hsn_code": "29392910" - }, - { - "description": "OTHER", - "hsn_code": "29392990" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - CAFFEINE AND ITS SALTS", - "hsn_code": "29393000" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS :-EPHEDRINE AND ITS SALTS :\nEPHEDRINE ALKALOIDS", - "hsn_code": "29394110" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS :-EPHEDRINE AND ITS SALTS :\nEPHEDRINE HYDROCHLORIDE", - "hsn_code": "29394120" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS :-EPHEDRINE AND ITS SALTS :\nOTHER", - "hsn_code": "29394190" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS : PSEUDOEPHEDRINE (INN)\nAND ITS SALTS", - "hsn_code": "29394200" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS : CATHINE (INN) AND ITS\nSALTS", - "hsn_code": "29394300" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS --NOREPHEDRINE AND ITS\nSALTS", - "hsn_code": "29394400" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - EPHEDRINES AND THEIR SALTS : OTHER", - "hsn_code": "29394900" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - THEOPHYLLINE AND\nAMINOPHYLLINE(THEOPHYLLINEETHYLENEDIAMINE) AND THEIR DERIVATIVES; SALTS THEREOF :\nFENETYLLINE (INN) AND ITS SALTS", - "hsn_code": "29395100" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - THEOPHYLLINE AND\nAMINOPHYLLINE(THEOPHYLLINEETHYLENEDIAMINE) AND THEIR DERIVATIVES; SALTS THEREOF :\nOTHER", - "hsn_code": "29395900" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ERGOMETRINE (INN) AND ITS SALTS : ERGOMETRINE (INN)", - "hsn_code": "29396110" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF :-ERGOMETRINE (INN) AND ITS SALTS : OTHER", - "hsn_code": "29396190" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF : ERGOTAMINE (INN) AND ITS SALTS : ERGOTAMINE TARTRATE", - "hsn_code": "29396210" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF : ERGOTAMINE (INN) AND ITS SALTS : OTHER", - "hsn_code": "29396290" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF : LYSERGIC ACID AND ITS SALTS", - "hsn_code": "29396300" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - ALKALOIDS OF RYE ERGOT AND THEIR DERIVATIVES; SALTS\nTHEREOF : OTHER", - "hsn_code": "29396900" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - OTHER : LEVOMETAMFETAMINE, METAMFETAMINE(INN),\nMETAMFETAMINE RACEMATE; SALTS, ESTERS AND OTHER DERIVATIVES THEREOF", - "hsn_code": "29399100" - }, - { - "description": "VEGETABLE ALKALOIDS, NATURAL OR REPRODUCED BY SYNTHESIS, AND THEIR SALTS, ETHERS,\nESTERS AND OTHER DERIVATIVES - OTHER : OTHER", - "hsn_code": "29399900" - }, - { - "description": "SUGARS, CHEMICALLY PURE, OTHER THAN SUCROSE, LACTOSE, MALTOSE, GLUCOSE AND\nFRUCTOSE; SUGAR ETHERS, SUGAR ACETALS AND SUGAR ESTERS, AND THEIR SALTS, OTHER\nTHAN PRODUCTS OF HEADINGS 2937, 2938 OR 2939", - "hsn_code": "29400000" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : PENICILLINS AND ITS SALTS ( E.G. PROCAINE PENICILLIN, PENICILLIN G\nPOTASSIUM)", - "hsn_code": "29411010" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : AMPICILLINE AND ITS SALTS", - "hsn_code": "29411020" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : AMOXYCILLINE AND ITS SALTS", - "hsn_code": "29411030" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : CIOXACILLINE AND ITS SALTS", - "hsn_code": "29411040" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : 6-APA", - "hsn_code": "29411050" - }, - { - "description": "ANTIBIOTICS - PENICILLINS AND THEIR DERIVATIVE WITH A PENICILLANIC ACID STRUCTURE;\nSALTS THEREOF : OTHER", - "hsn_code": "29411090" - }, - { - "description": "ANTIBIOTICS - STREPTOMYCINS AND THEIR DERIVATIVES; SALTS THEREOF : STREPTOMYCIN", - "hsn_code": "29412010" - }, - { - "description": "ANTIBIOTICS - STREPTOMYCINS AND THEIR DERIVATIVES; SALTS THEREOF : OTHER", - "hsn_code": "29412090" - }, - { - "description": "ANTIBIOTICS - TETRACYCLINES AND THEIR DERIVATIVES, SALTS THEREOF : DOXYCYCLINE AND ITS\nSALTS", - "hsn_code": "29413010" - }, - { - "description": "ANTIBIOTICS - TETRACYCLINES AND THEIR DERIVATIVES, SALTS THEREOF :\nTETRACYCLINE/OXYTETRA-CYCLINE AND THEIR SALTS", - "hsn_code": "29413020" - }, - { - "description": "ANTIBIOTICS - TETRACYCLINES AND THEIR DERIVATIVES, SALTS THEREOF : OTHER", - "hsn_code": "29413090" - }, - { - "description": "ANTIBIOTICS - CHLORAMPHENICOL AND ITS DERIVATIVES; SALTS THEREOF", - "hsn_code": "29414000" - }, - { - "description": "ANTIBIOTICS - ERYTHROMYCIN AND ITS DERIVATIVES; SALTS THEREOF", - "hsn_code": "29415000" - }, - { - "description": "ANTIBIOTICS - OTHER : RIFAMPICIN AND ITS SALTS : RIFAMPICIN", - "hsn_code": "29419011" - }, - { - "description": "ANTIBIOTICS - OTHER : RIFAMPICIN AND ITS SALTS : 3 FORMYL RIFA S V(RIFA INT)", - "hsn_code": "29419012" - }, - { - "description": "ANTIBIOTICS - OTHER : RIFAMPICIN AND ITS SALTS : RIFA S OR RIFA S SODIUM (RIFAINT)", - "hsn_code": "29419013" - }, - { - "description": "ANTIBIOTICS - OTHER : RIFAMPICIN AND ITS SALTS : 1-AMINO-4-METHYL PIPERAZINE (RIFAINT)", - "hsn_code": "29419014" - }, - { - "description": "ANTIBIOTICS - OTHER : RIFAMPICIN AND ITS SALTS : OTHER", - "hsn_code": "29419019" - }, - { - "description": "ANTIBIOTICS - OTHER : CEPHALEXIN AND ITS SALTS", - "hsn_code": "29419020" - }, - { - "description": "ANTIBIOTICS - OTHER : CIPROFLOXACINE AND ITS SALTS", - "hsn_code": "29419030" - }, - { - "description": "ANTIBIOTICS - OTHER : GENTAMYCIN AND ITS SALTS", - "hsn_code": "29419040" - }, - { - "description": "ANTIBIOTICS - OTHER : NEOMYCIN", - "hsn_code": "29419050" - }, - { - "description": "ANTIBIOTICS - OTHER : NORFLOXACIN AND ITS SALTS", - "hsn_code": "29419060" - }, - { - "description": "ANTIBIOTICS - OTHER : OTHER", - "hsn_code": "29419090" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : CEFADROXIL AND ITS SALTS", - "hsn_code": "29420011" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : IBUPROFANE", - "hsn_code": "29420012" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : NIFEDIPINE", - "hsn_code": "29420013" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : RANITIDINE", - "hsn_code": "29420014" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : DANES SALT OF D(-) PHENYL GLYCINE", - "hsn_code": "29420015" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : CEFADROXIL AND ITS SALTS,\nIBUPROFANE, NIFEDIPINE, RANITIDINE, DANES SALT OF D(-) PHENYL GLYCINE, D(-) PARA\nHYDROXY DANES SALTS : D(-) PARA HYDROXY DANES SALTS", - "hsn_code": "29420016" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : TIMOLO MALEATE", - "hsn_code": "29420021" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : TERBUTOLINE SULPHATE", - "hsn_code": "29420022" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : D(-) PHENYL GLYCIN\nCHLORIDE HCL (DPGCH)", - "hsn_code": "29420023" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : IMIPRAMINE HCL", - "hsn_code": "29420024" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : AMITRYPTYLINE HCL", - "hsn_code": "29420025" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : CYSTEANUNE HCL", - "hsn_code": "29420026" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : TIMOLO MALEATE,\nTERBUTOLINE SULPHATE, D(-)PHENYL GLYCIN CHLORIDE HCL (DPGCH), IMIPRAMINE HCL,\nAMITRYPTYLINE HCL, CYSTEANUNE HCL, ATENOLOL, PROPRONALOL : ATENOLOL, PROPRONALOL", - "hsn_code": "29420027" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : DILOXANIDE FUROATE,\nCIMETIDINE, OXYCLOZANIDE, FAMOTIDINE : DILOXANIDE FUROATE", - "hsn_code": "29420031" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : DILOXANIDE FUROATE,\nCIMETIDINE, OXYCLOZANIDE, FAMOTIDINE : CIMETIDINE", - "hsn_code": "29420032" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : DILOXANIDE FUROATE,\nCIMETIDINE, OXYCLOZANIDE, FAMOTIDINE : OXYCLOZANIDE", - "hsn_code": "29420033" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : DILOXANIDE FUROATE,\nCIMETIDINE, OXYCLOZANIDE, FAMOTIDINE : FAMOTIDINE", - "hsn_code": "29420034" - }, - { - "description": "OTHER ORGANIC COMPOUNDS - OTHER ORGANIC COMPOUNDS : OTHER", - "hsn_code": "29420090" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED GLANDS AND OTHER ORGANS, DRIED, WHETHER OR NOT POWDERED : PANCREATIN\nAND DRIED POWDER OF PANCREAS", - "hsn_code": "30011010" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED GLANDS AND OTHER ORGANS, DRIED, WHETHER OR NOT POWDERED : OTHER :\nPOWDERED", - "hsn_code": "30011091" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED GLANDS AND OTHER ORGANS, DRIED, WHETHER OR NOT POWDERED : OTHER :\nOTHER", - "hsn_code": "30011099" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED - EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS: LIQUID\nEXTRACTS OF LIVER", - "hsn_code": "30012010" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED - EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS: LIVER\nEXTRACTS, DRY", - "hsn_code": "30012020" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED - EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS: SNAKE VENOM", - "hsn_code": "30012030" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED - EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS: OTHER", - "hsn_code": "30012090" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER : OF HUMAN ORIGIN", - "hsn_code": "30019010" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER : HEPARIN AND ITS SALTS", - "hsn_code": "30019091" - }, - { - "description": "GLANDS AND OTHER ORGANS FOR ORGANO-THERAPEUTIC USES, DRIED, WHETHER OR NOT\nPOWDERED; EXTRACTS OF GLANDS OR OTHER ORGANS OR OF THEIR SECRETIONS FOR ORGANO\nTHERAPEUTIC USES; HEPARIN AND ITS SALTS; OTHER HUMAN OR ANIMAL SUBSTANCES\nPREPARED FOR THERAPEUTIC OR PROPHYLACTIC USES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER : OTHER : OTHER", - "hsn_code": "30019099" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : ANTISERA : FOR\nDIPTHERIA", - "hsn_code": "30021011" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : ANTISERA : FOR\nTETANUS", - "hsn_code": "30021012" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : ANTISERA : FOR\nRABIES", - "hsn_code": "30021013" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : ANTISERA : FOR\nSNAKE VENOM", - "hsn_code": "30021014" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : ANTISERA :\nOTHER", - "hsn_code": "30021019" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : HEMOGLOBIN\nBLOOD GLOBULINS AND SERUM GLOBULINS", - "hsn_code": "30021020" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : OTHER : OF\nHUMAN ORIGIN", - "hsn_code": "30021091" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES : OTHER : OTHER", - "hsn_code": "30021099" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR CHOLERA AND TYPHOID", - "hsn_code": "30022011" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR HEPATITIS", - "hsn_code": "30022012" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR TETANUS", - "hsn_code": "30022013" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR POLIO", - "hsn_code": "30022014" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR TUBERCULOSIS", - "hsn_code": "30022015" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR RABIES", - "hsn_code": "30022016" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR JAPANESE ENCEPHALITIS", - "hsn_code": "30022017" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : FOR WHOPPING COUGH (PERTUSIS)", - "hsn_code": "30022018" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE : SINGLE VACCINES : OTHER", - "hsn_code": "30022019" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE MIXED VACCINES : FOR DIPHTHERIA, PERTUSIS AND TETANUS\n(DPT)", - "hsn_code": "30022021" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE MIXED VACCINES : FOR DIPHTHERIA AND TETANUS (DT)", - "hsn_code": "30022022" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE MIXED VACCINES : FOR MEASLES, MUMPS AND RUBELLA\n(MMR)", - "hsn_code": "30022023" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE MIXED VACCINES : FOR TYPHOID-PARATYPHOID (TAB) OR\nTYPHOID- PARATYPHOID-CHOLERA (TABC)", - "hsn_code": "30022024" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR HUMAN MEDICINE MIXED VACCINES : OTHER", - "hsn_code": "30022029" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nVACCINES FOR VETERINARY MEDICINE", - "hsn_code": "30023000" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nOTHER : HUMAN BLOOD", - "hsn_code": "30029010" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nOTHER : ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC USES", - "hsn_code": "30029020" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nOTHER : CULTURES OF MICRO-ORGANISMS (EXCLUDING YEAST)", - "hsn_code": "30029030" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nOTHER : TOXINS", - "hsn_code": "30029040" - }, - { - "description": "HUMAN BLOOD; ANIMAL BLOOD PREPARED FOR THERAPEUTIC, PROPHYLACTIC OR DIAGNOSTIC\nUSES; ANTISERA AND OTHER BLOOD FRACTIONS AND MODIFIED IMMUNOLOGICAL PRODUCTS,\nWHETHER OR NOT OBTAINED BY MEANS OF BIOTECHNOLOGICAL PROCESSES; VACCINES,\nTOXINS, CULTURES OF MICRO-ORGANISMS (EXCLUDING YEASTS) AND SIMILAR PRODUCTS\nOTHER : OTHER", - "hsn_code": "30029090" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF, WITH A PENICILLANIC ACID\nSTRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES", - "hsn_code": "30031000" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE CONTAINING OTHER ANTIBIOTICS", - "hsn_code": "30032000" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE CONTAINING HORMONES OR OTHER PRODUCTS OF HEADING 2937 BUT NOT CONTAINING\nANTIBIOTICS : CONTAINING INSULIN", - "hsn_code": "30033100" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE CONTAINING HORMONES OR OTHER PRODUCTS OF HEADING 2937 BUT NOT CONTAINING\nOTHER", - "hsn_code": "30033900" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT NOT CONTAINING HORMONES OR\nOTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS", - "hsn_code": "30034000" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : AYURVEDIC, UNANI, SIDDHA, HOMOEOPATHIC OR BIO-CHEMIC SYSTEMS\nMEDICAMENTS : OF AYURVEDIC SYSTEM", - "hsn_code": "30039011" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : AYURVEDIC, UNANI, SIDDHA, HOMOEOPATHIC OR BIO-CHEMIC SYSTEMS\nMEDICAMENTS : OF UNANI SYSTEM", - "hsn_code": "30039012" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : AYURVEDIC, UNANI, SIDDHA, HOMOEOPATHIC OR BIO-CHEMIC SYSTEMS\nMEDICAMENTS : OF SIDDHA SYSTEM", - "hsn_code": "30039013" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : AYURVEDIC, UNANI, SIDDHA, HOMOEOPATHIC OR BIO-CHEMIC SYSTEMS\nMEDICAMENTS : OF HOMOEOPATHIC SYSTEM", - "hsn_code": "30039014" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : AYURVEDIC, UNANI, SIDDHA, HOMOEOPATHIC OR BIO-CHEMIC SYSTEMS\nMEDICAMENTS : OF BIO-CHEMIC SYSTEM", - "hsn_code": "30039015" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : MENTHOL CRYSTALS AND MILK OF MAGNESIA : MENTHOL CRYSTALS", - "hsn_code": "30039021" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALEOTHER : MENTHOL CRYSTALS AND MILK OF MAGNESIA : MILK OF MAGNESIA", - "hsn_code": "30039022" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : BOVINE\nALBUMIN AND DRUGS OF ANIMAL ORIGIN", - "hsn_code": "30039031" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : MERBROMINE\nNATIONAL FORMULARY XII (MERCUROCHROME)", - "hsn_code": "30039032" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : CALCIUM\nSENNOSIDE", - "hsn_code": "30039033" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : ANAESTHETIC\nAGENTS USED IN HUMAN OR VETERINARY MEDICINE OR SURGERY", - "hsn_code": "30039034" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : ALUMINIUM\nHYDROXIDE GEL", - "hsn_code": "30039035" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : --- BOVINE ALBUMIN AND DRUGS OF ANIMAL ORIGIN, MERBROMINE NATIONAL\nFORMULARY XII (MERCUROCHROME), CALCIUM SENNOSIDE, ANAESTHETIC AGENTS USED IN\nHUMAN OR VETERINARY MEDICINE OR SURGERY, ALUMINIUM HYDROXIDE GEL : ---- KETAMINE", - "hsn_code": "30039036" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF TWO OR\nMORE CONSTITUENTS WHICH HAVE BEEN MIXED TOGETHER FOR THERAPEUTIC OR\nPROPHYLACTIC USES, NOT PUT UP IN MEASURED DOSES OR IN FORMS OR PACKINGS FOR RETAIL\nSALE OTHER : OTHER", - "hsn_code": "30039090" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES :\nPENICILLINS", - "hsn_code": "30041010" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES AMPICILLIN", - "hsn_code": "30041020" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES\nAMOXYCILLIN", - "hsn_code": "30041030" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES\nBECAMPICILLIN", - "hsn_code": "30041040" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES\nCLOXACILLIN", - "hsn_code": "30041050" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES AMPICILLIN\nAND CLOXACILLIN COMBINATIONS", - "hsn_code": "30041060" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES\nSTREPTOMYCIN", - "hsn_code": "30041070" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING PENICILLINS OR DERIVATIVES THEREOF,\nWITH A PENICILLANIC ACID STRUCTURE, OR STREPTOMYCINS OR THEIR DERIVATIVES OTHER", - "hsn_code": "30041090" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : CEPHALOSPORINS\nAND THEIR DERIVATIVES : CEFAZOLIN", - "hsn_code": "30042011" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : CEPHALOSPORINS\nAND THEIR DERIVATIVES :CEPHALEXIN", - "hsn_code": "30042012" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : CEPHALOSPORINS\nAND THEIR DERIVATIVES :CIPROFLOXACIN", - "hsn_code": "30042013" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : CEPHALOSPORINS\nAND THEIR DERIVATIVES :CEFOXITIN", - "hsn_code": "30042014" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : CEPHALOSPORINS\nAND THEIR DERIVATIVES : OTHER", - "hsn_code": "30042019" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS : SULFONAMIDES AND\nCOTRIMOXAZOLE", - "hsn_code": "30042020" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: FLUOROQUINOLONES\n: NORFLOXACIN", - "hsn_code": "30042031" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: FLUOROQUINOLONES\n: NALIDIXIC ACID", - "hsn_code": "30042032" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: FLUOROQUINOLONES\n: CIPROFLOXACIN", - "hsn_code": "30042033" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: FLUOROQUINOLONES\n: OFLOXACIN", - "hsn_code": "30042034" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: FLUOROQUINOLONES\n: OTHER", - "hsn_code": "30042039" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS TETRACYCLINES :\nCHLORTETRACYCLINE", - "hsn_code": "30042041" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS TETRACYCLINES :\nOXYTETRACYCLINE", - "hsn_code": "30042042" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS TETRACYCLINES :\nOTHER", - "hsn_code": "30042049" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS CHLORAMPHENICOL", - "hsn_code": "30042050" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE :\nERYTHROMYCIN", - "hsn_code": "30042061" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE :\nROXITHROMYCIN", - "hsn_code": "30042062" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE :\nCLARITHROMYCIN", - "hsn_code": "30042063" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE :\nAZITHROMYCIN", - "hsn_code": "30042064" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE : OTHER", - "hsn_code": "30042069" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS MACROLIDE :\nCEFADROXIL", - "hsn_code": "30042070" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER : ISONIAZID", - "hsn_code": "30042091" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER : RIFAMPICIN", - "hsn_code": "30042092" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER :\nPYRAZINAMIDE", - "hsn_code": "30042093" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER :\nETHAMBUTOL", - "hsn_code": "30042094" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER :\nCLINDAMYCIN", - "hsn_code": "30042095" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER :\nVANCOMYCIN", - "hsn_code": "30042096" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER : POLYMYXIN B\nAND COLISTIN", - "hsn_code": "30042097" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING OTHER ANTIBIOTICS: OTHER : OTHER", - "hsn_code": "30042099" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : CONTAINING INSULIN : INSULIN INJECTION", - "hsn_code": "30043110" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : CONTAINING INSULIN : OTHER", - "hsn_code": "30043190" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : CONTAINING CORTICOSTEROID\nHORMONES, THEIR DERIVATIVES OR STRUCTURAL ANALOGUES", - "hsn_code": "30043200" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : PITUITARY HORMONES;\nPREDNISOLONE; DEXAMETHASONE; DANAZOL; OTHER PROGESTOGEN AND OESTOGEN GROUP\nHORMONES: PITUITARY HORMONES", - "hsn_code": "30043911" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : PITUITARY HORMONES;\nPREDNISOLONE; DEXAMETHASONE; DANAZOL; OTHER PROGESTOGEN AND OESTOGEN GROUP\nHORMONES: PREDNISOLONE", - "hsn_code": "30043912" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : PITUITARY HORMONES;\nPREDNISOLONE; DEXAMETHASONE; DANAZOL; OTHER PROGESTOGEN AND OESTOGEN GROUP\nHORMONES: DEXAMETHASONE", - "hsn_code": "30043913" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : PITUITARY HORMONES;\nPREDNISOLONE; DEXAMETHASONE; DANAZOL; OTHER PROGESTOGEN AND OESTOGEN GROUP\nHORMONES: DANAZOL", - "hsn_code": "30043914" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : PITUITARY HORMONES;\nPREDNISOLONE; DEXAMETHASONE; DANAZOL; OTHER PROGESTOGEN AND OESTOGEN GROUP\nHORMONES: OTHER PROGESTOGEN AND OESTOGEN GROUP HORMONES", - "hsn_code": "30043919" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : GONADOTROPHINS AND\nLUTEINISING HORMONE : GONADOTROPHINS", - "hsn_code": "30043921" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : GONADOTROPHINS AND\nLUTEINISING HORMONE : LUTEINISING HORMONE", - "hsn_code": "30043922" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING HORMONES OR OTHER PRODUCTS OF\nHEADING 2937 BUT NOT CONTAINING ANTIBIOTICS : OTHER : OTHER", - "hsn_code": "30043990" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS : ATROPIN\nAND SALTS THEREOF", - "hsn_code": "30044010" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHERPRODUCTS OF HEADING 2937 OR ANTIBIOTICS CAFFEIN\nAND SALTS THEREOF", - "hsn_code": "30044020" - }, - { - "description": "-", - "hsn_code": "30044030" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS: ERGOT\nPREPERATIONS, ERGOTAMINE AND SALTS THEREOF", - "hsn_code": "30044040" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS\nPAPAVERINE HYDROCHLORIDE", - "hsn_code": "30044050" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS\nBROMOHEXIN AND SOLBUTAMOL", - "hsn_code": "30044060" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS\nTHEOPHYLLINE AND EPHEDRINE", - "hsn_code": "30044070" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE CONTAINING ALKALOIDS OR DERIVATIVES THEREOF BUT\nNOT CONTAINING HORMONES, OTHER PRODUCTS OF HEADING 2937 OR ANTIBIOTICS OTHER", - "hsn_code": "30044090" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : HEAMATINICS AND ERYTHROPOIETIN PREPARATIONS", - "hsn_code": "30045010" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF MINERALS AND THEIR SUPPLEMENTS", - "hsn_code": "30045020" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN A", - "hsn_code": "30045031" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN B1 AND B2\nAND SALTS THEREOF", - "hsn_code": "30045032" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN B9", - "hsn_code": "30045033" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN B12", - "hsn_code": "30045034" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN C", - "hsn_code": "30045035" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN D", - "hsn_code": "30045036" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OF VITAMIN E", - "hsn_code": "30045037" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : PREPARATIONS OF VITAMINS : OTHER", - "hsn_code": "30045039" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER MEDICAMENTS CONTAINING VITAMINS OR\nOTHER PRODUCTS OF HEADING 2936 : OTHER", - "hsn_code": "30045090" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : AYURVEDIC, UNANI, HOMOEOPATHIC, SIDDHA\nOR BIO-CHEMIC SYSTEMS MEDICAMENTS, PUT UP FOR RETAIL SALE : OF AYURVEDIC SYSTEM", - "hsn_code": "30049011" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : AYURVEDIC, UNANI, HOMOEOPATHIC, SIDDHA\nOR BIO-CHEMIC SYSTEMS MEDICAMENTS, PUT UP FOR RETAIL SALE : OF UNANI SYSTEM", - "hsn_code": "30049012" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : AYURVEDIC, UNANI, HOMOEOPATHIC, SIDDHA\nOR BIO-CHEMIC SYSTEMS MEDICAMENTS, PUT UP FOR RETAIL SALE : OF SIDDHA SYSTEM", - "hsn_code": "30049013" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : AYURVEDIC, UNANI, HOMOEOPATHIC, SIDDHA\nOR BIO-CHEMIC SYSTEMS MEDICAMENTS, PUT UP FOR RETAIL SALE : OF HOMOEOPATHIC\nSYSTEM", - "hsn_code": "30049014" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : AYURVEDIC, UNANI, HOMOEOPATHIC, SIDDHA\nOR BIO-CHEMIC SYSTEMS MEDICAMENTS, PUT UP FOR RETAIL SALE : OF BIO-CHEMIC SYSTEM", - "hsn_code": "30049015" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : ANTHELMINTICS AND PREPARATIONS\nTHEREOF", - "hsn_code": "30049021" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : METRONIDAZOLE", - "hsn_code": "30049022" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : TINIDAZOLE", - "hsn_code": "30049023" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : SECNIDAZOLE", - "hsn_code": "30049024" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : DILUXAMIDE FUROATE", - "hsn_code": "30049025" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : SODIUM STIBOGLUCONATE", - "hsn_code": "30049026" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : PENTAMIDINE", - "hsn_code": "30049027" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTHELMINTICS DRUGS; ANTIAMOEBIC AND\nOTHER ANTIPROTOZAL DRUGS; ANTIFUNGAL DRUGS : OTHER", - "hsn_code": "30049029" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS :\nPROMETHAZINE, CHLORPHENIRAMINE, ASTEMIZOLE AND CETEIRIZINE", - "hsn_code": "30049031" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS :\nSODIUM BICARBONATE, MAGNESIUM HYDROXIDE (MILK OF MAGNESIA), MAGNESIUM\nCARBONATE, MAGNESIUM TRISILICATE, ALUMINIUM HYDROXIDE GEL, MAGALDARATE AND\nCOMBINATIONS THEREOF", - "hsn_code": "30049032" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS\nCIMETIDINE, RANTIDINE, NIZATIDINE AND ROXATIDINE", - "hsn_code": "30049033" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS\nOMEPRAZOLE AND LANSOPRAZOLE", - "hsn_code": "30049034" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS\nDICYCLOMINE, METOCLOPRAMIDE AND DEXAMETHASONE AND ONDANSETRON", - "hsn_code": "30049035" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE ANTIHISTAMINICS DRUGS; ANTACIDS PREPARATIONS;\nANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS CHENODIOL AND\nURSODIOL", - "hsn_code": "30049036" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHISTAMINICS DRUGS; ANTACIDS\nPREPARATIONS; ANTIULCER DRUGS; ANTIEMITICS AND OTHER GASTROINTESTINAL DRUGS\nOTHER", - "hsn_code": "30049039" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : CYCLOPHOSPHAMIDE", - "hsn_code": "30049041" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : METHOTREXATE, 5-\nFLUOROURACIL(5-FU) AND FTORAFUR", - "hsn_code": "30049042" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : BINCRISTINE AND\nVINBLASTINE", - "hsn_code": "30049043" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : PACLITAXEL AND\nDOCETAXEL", - "hsn_code": "30049044" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : ETOPOSIDE", - "hsn_code": "30049045" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : ACTINOMYCIN D\nDACTINOMYCIN AND DOXORUBICIN", - "hsn_code": "30049046" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : L-ASPARAGINASE,\nCISPLATIN AND CARBOPLATIN", - "hsn_code": "30049047" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : TAMOXIFEN", - "hsn_code": "30049048" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTICANCER DRUGS : OTHER", - "hsn_code": "30049049" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS : ISONIAZID", - "hsn_code": "30049051" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS :RIFAMPICIN", - "hsn_code": "30049052" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS :PYRAZINAMIDE AND ETHAMBUTOL", - "hsn_code": "30049053" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS :STREPTOMYCIN", - "hsn_code": "30049054" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS : DAPSONE (DDS),ACEDAPSONE (DADDS), SOLOPSONE AND\nCLOFAZIMINE", - "hsn_code": "30049055" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS :CHLOROQUINE, AMODIAQUINE, MEFLOQUINE, QUININE,\nCHLOROGUAMIDE, PYRIMETHAMINE", - "hsn_code": "30049056" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS : OTHER ANTITUBERCULAR DRUGS", - "hsn_code": "30049057" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS : OTHER ANTILEPROTIC DRUGS", - "hsn_code": "30049058" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTITUBERCULAR DRUGS; ANTILEPROTIC\nDRUGS; ANTIMALARIAL DRUGS : OTHER ANTIMALARIAL DRUGS", - "hsn_code": "30049059" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : ANALGIN WITH OR WITHOUT OTHER COMPOUNDS\nSUCH AS PARACETAMOL", - "hsn_code": "30049061" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : ACETYL SALICYLIC ACID (ASPIRIN) AND FORMULATIONS\nTHEREOF", - "hsn_code": "30049062" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : IBUPROFEN WITH OR WITHOUT PARACETAMOL OR\nOTHER COMPOUNDS", - "hsn_code": "30049063" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : OXYPHEN BUTAZONE, PHENYL BUTAZONE AND\nFORMULATIONS THEREOF", - "hsn_code": "30049064" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : INDOMETHACIN", - "hsn_code": "30049065" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : MEPHENAMIC ACID, DACTOFENAC SODIUM,\nPIROXICAM, TENOXICAM AND MELOXICAM", - "hsn_code": "30049066" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : KETOROLAC, NIMESULIDE, NABUMETONE AND\nNEFOPAM", - "hsn_code": "30049067" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : NONSTEROIDAL ANTIINFLAMMATORY,\nANALGESICS AND ANTIPYRATIC DRUGS : OTHER", - "hsn_code": "30049069" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS :CAPTOPRIL,\nENALAPRIL, LISINOPRIL, PERINDOPRIL AND RAMIPRIL", - "hsn_code": "30049071" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS : VERAPAMIL,\nNIFEDIPINE, AMLODIPINE AND LACIDIPINE", - "hsn_code": "30049072" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS : LOSARTAN", - "hsn_code": "30049073" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS :PROPRANOLOL,\nMETOPROLOL, ATENOLOL AND LABETALOL", - "hsn_code": "30049074" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS :PRAZOSIN,\nTERAZOSIN, PHENTOLAMINE AND PHENOXYBENZAMINE", - "hsn_code": "30049075" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS :CLONIDINE,\nMETHYLDOPA", - "hsn_code": "30049076" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS :HYDRALAZINE,\nMINOXIDIL AND DIAZOXIDE", - "hsn_code": "30049077" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIHYPERTENSIVE DRUGS : OTHER", - "hsn_code": "30049079" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : PHENOBARBITONE, MEPHOBARBITONE,\nPRIMIDONE, PHENYTOIN, CARBAMAZEPINE, ETHOSUCCIMIDE, VALPORIC ACID ( SODIUM\nVALPORATE), DIAZEPAM, LAMOTRIGINE, GABAPENTIN, BIGABATRIN, PHENACEMIDE,\nTRIMETHADIONE AND ACETAZOLAMIDE", - "hsn_code": "30049081" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : OTHER ANTIEPILEPTIC DRUGS", - "hsn_code": "30049082" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : SULPHA DRUGS NOT ELSEWHERE SPECIFIED OR\nINCLUDED", - "hsn_code": "30049083" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : PREPARATIONS OF ENZYMES", - "hsn_code": "30049084" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : VETERINARY MEDICINAL PREPARATIONS, NOT FOR\nHUMAN USE, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "30049085" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : ORAL REHYDRATION SALTS", - "hsn_code": "30049086" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : ANTIBACTERIAL FORMULATIONS, NOT ELSEWHERE\nSPECIFIED OR INCLUDED", - "hsn_code": "30049087" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : SEDATIVES", - "hsn_code": "30049088" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : ANTIEPILIPTIC DRUGS; SULFA DRUGS NOT\nELSEWHERE SPECIFIED OR INCLUDED, PREPARATIONS OF ENZYMES; VETERINARY MEDICINAL\nPREPARATIONS, NOT FOR HUMAN USE,NOT ELSEWHERE SPECIFIED OR INCLUDED; ORAL\nREHYDRATION SALTS; ANTIBACTERIALFORMULATIONS NOT ELSEWHERE SPECIFIED OR\nINCLUDED, SEDATIVES AND TRANQUILIZERS : TRANQUILIZERS", - "hsn_code": "30049089" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : SALBUTAMOL, TERBUTALINE,\nEPHEDRINE, SALMETEROL AND METHYL XANTHIMES", - "hsn_code": "30049091" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : PLASMA EXPANDERS", - "hsn_code": "30049092" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : CHLOROPHENIRAMINE MALEATE,WITH\nOR WITHOUT OTHER COMPOUNDS (EXCLUDING STERIODS AND ALKALOIDS)", - "hsn_code": "30049093" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : THEOPHYLLINE, AMINOPHYLLINE AND\nOTHER BRONCHO DILATORS", - "hsn_code": "30049094" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : CARCINO-CHEMOTHERAPEUTIC DRUGS\nNOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "30049095" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : --- KETAMINE", - "hsn_code": "30049096" - }, - { - "description": "MEDICAMENTS (EXCLUDING GOODS OF HEADING 3002, 3005 OR 3006) CONSISTING OF MIXED\nOR UNMIXED PRODUCTS FOR THERAPEUTIC OR PROPHYLACTIC USES, PUT UP IN MEASURED\nDOSES (INCLUDING THOSE IN THE FORM OF TRANSDERMAL ADMINISTRATION SYSTEMS) OR IN\nFORMS OR PACKINGS FOR RETAIL SALE OTHER : OTHER : OTHER", - "hsn_code": "30049099" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES ADHESIVE DRESSINGS AND OTHER ARTICLES HAVING AN ADHESIVE\nLAYER : ADHESIVE GUAZE", - "hsn_code": "30051010" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES ADHESIVE DRESSINGS AND OTHER ARTICLES HAVING AN ADHESIVE\nLAYER : ADHESIVE TAPE", - "hsn_code": "30051020" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES ADHESIVE DRESSINGS AND OTHER ARTICLES HAVING AN ADHESIVE\nLAYER : OTHER", - "hsn_code": "30051090" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : COTTON WOOL, MEDICATED", - "hsn_code": "30059010" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : POULTICE OF KAOLIN", - "hsn_code": "30059020" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : LINT, MEDICATED", - "hsn_code": "30059030" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : BANDAGES", - "hsn_code": "30059040" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : BURN THERAPY DRESSING SOAKED IN PROTECTIVE GEL", - "hsn_code": "30059050" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : MICRO PORES SURGICAL TAPES", - "hsn_code": "30059060" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : CORN REMOVERS AND CALLOUS REMOVERS", - "hsn_code": "30059070" - }, - { - "description": "WADDING, GAUZE, BANDAGES AND SIMILAR ARTICLES (FOR EXAMPLE, DRESSINGS, ADHESIVE\nPLASTERS, POULTICES), IMPREGNATED OR COATED WITH PHARMACEUTICAL SUBSTANCES OR\nPUT UP IN FORMS OR PACKINGS FOR RETAIL SALE FOR MEDICAL, SURGICAL,DENTAL OR\nVETERINARY PURPOSES OTHER : OTHER", - "hsn_code": "30059090" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER STERILE SURGICAL CATGUT,\nSIMILAR STERILE SUTURE MATERIALS (INCLUDING STERILE ABSORBABALE SURGICAL OR DENTAL\nYARNS)AND STERILE TISSUE ADHESIVES FOR SURGICAL WOUND CLOSURE; STERILE LAMINARIA\nAND STERILE LAMINARIA TENTS; STERILE ABSORBABLE SURGICAL OR DENTAL\nHAEMOSTATICS;STERILE SURGICAL OR DENTAL ADHESION BARRIERS, WHETHER OR NOT\nABSORBABLE:STERILE SURGICAL CATGUT, SIMILAR STERILE SUTURE MATERIALS (INCLUDING\nSTERILE ABSORBABALE SURGICAL OR DENTAL YARNS)AND STERILE TISSUE ADHESIVES FOR\nSURGICAL WOUND CLOSURE", - "hsn_code": "30061010" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER STERILE SURGICAL CATGUT,\nSIMILAR STERILE SUTURE MATERIALS (INCLUDING STERILE ABSORBABALE SURGICAL OR DENTAL\nYARNS)AND STERILE TISSUE ADHESIVES FOR SURGICAL WOUND CLOSURE; STERILE LAMINARIA\nAND STERILE LAMINARIA TENTS; STERILE ABSORBABLE SURGICAL OR DENTAL\nHAEMOSTATICS;STERILE SURGICAL OR DENTAL ADHESION BARRIERS, WHETHER OR NOT\nABSORBABLE: STERILE LAMINARIA AND STERILE LAMINARIA TENTS; STERILE ABSORBABLE\nSURGICAL OR DENTAL HAEMOSTATICS;STERILE SURGICAL OR DENTAL ADHESION BARRIERS,\nWHETHER OR NOT ABSORBABLE", - "hsn_code": "30061020" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER BLOOD GROUPING REAGENTS", - "hsn_code": "30062000" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER OPACIFYING PREPRATIONS\nFOR X-RAY EXAMINATIONS; DIAGNOSTIC REAGENTS DESIGNED TO BE ADMINISTERED TO THE\nPATIENT", - "hsn_code": "30063000" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER DENTAL CEMENTS AND\nOTHER DENTAL FILLINGS;BONE RECONSTRUCTION CEMENTS", - "hsn_code": "30064000" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER FIRST-AID BOXES AND KITS", - "hsn_code": "30065000" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER CHEMICAL CONTRACEPTIVE\nPREPARATIONS BASED ON HORMONES, OR OTHER PRODUCTS OF HEADING 2937 OR ON\nSPERMICIDES :BASED ON HORMONES", - "hsn_code": "30066010" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER CHEMICAL CONTRACEPTIVE\nPREPARATIONS BASED ON HORMONES, OR OTHER PRODUCTS OF HEADING 2937 OR ON\nSPERMICIDES :BASED ON OTHER PRODUCTS OF HEADING 2937", - "hsn_code": "30066020" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER CHEMICAL CONTRACEPTIVE\nPREPARATIONS BASED ON HORMONES, OR OTHER PRODUCTS OF HEADING 2937 OR ON\nSPERMICIDES :BASED ON SPERMICIDES", - "hsn_code": "30066030" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER GEL PREPARATIONS\nDESIGNED TO BE USED IN HUMAN OR VETERINARY MEDICINE AS A LUBRICANT FOR PARTS OF\nTHE BODY FOR SURGICAL OPERATIONS OR PHYSICAL EXAMINATIONS OR AS A COUPLING AGENT\nBETWEEN THE BODY AND MEDICAL INSTRUMENTS", - "hsn_code": "30067000" - }, - { - "description": "PHARMACEUTICAL GOODS SPECIFIED IN NOTE 4 TO THIS CHAPTER WASTE PHARMACEUTICALS", - "hsn_code": "30068000" - }, - { - "description": "APLLIANCES IDENTIFIED FOR OSOTOMY USE", - "hsn_code": "30069100" - }, - { - "description": "WASTE PHARMACEUTICALS", - "hsn_code": "30069200" - }, - { - "description": "ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED TOGETHER OR CHEMICALLY\nTREATED; FERTILISERS PRODUCED BY THE MIXING OR CHEMICAL TREATMENT OF ANIMAL OR\nVEGETABLE PRODUCTS ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED\nTOGETHER OR CHEMICALLY TREATED; FERTILIZERS PRODUCED BY THE MIXING OR CHEMICAL\nTREATMENT OF ANIMAL OR VEGETABLE PRODUCTS : GUANO", - "hsn_code": "31010010" - }, - { - "description": "ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED TOGETHER OR CHEMICALLY\nTREATED; FERTILISERS PRODUCED BY THE MIXING OR CHEMICAL TREATMENT OF ANIMAL OR\nVEGETABLE PRODUCTS ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED\nTOGETHER OR CHEMICALLY TREATED; FERTILIZERS PRODUCED BY THE MIXING OR CHEMICAL\nTREATMENT OF ANIMAL OR VEGETABLE PRODUCTS : OTHER : ANIMAL DUNG", - "hsn_code": "31010091" - }, - { - "description": "ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED TOGETHER OR CHEMICALLY\nTREATED; FERTILISERS PRODUCED BY THE MIXING OR CHEMICAL TREATMENT OF ANIMAL OR\nVEGETABLE PRODUCTS ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED\nTOGETHER OR CHEMICALLY TREATED; FERTILIZERS PRODUCED BY THE MIXING OR CHEMICAL\nTREATMENT OF ANIMAL OR VEGETABLE PRODUCTS : OTHER : ANIMAL EXCRETA", - "hsn_code": "31010092" - }, - { - "description": "ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED TOGETHER OR CHEMICALLY\nTREATED; FERTILISERS PRODUCED BY THE MIXING OR CHEMICAL TREATMENT OF ANIMAL OR\nVEGETABLE PRODUCTS ANIMAL OR VEGETABLE FERTILISERS, WHETHER OR NOT MIXED\nTOGETHER OR CHEMICALLY TREATED; FERTILIZERS PRODUCED BY THE MIXING OR CHEMICAL\nTREATMENT OF ANIMAL OR VEGETABLE PRODUCTS : OTHER : OTHER", - "hsn_code": "31010099" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS UREA, WHETHER OR NOT IN AQUEOUS\nSOLUTION", - "hsn_code": "31021000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS AMMONIUM SULPHATE; DOUBLE SALTS\nAND MIXTURES OF AMMONIUM SULPHATE AND AMMONIUM NITRATE: AMMONIUM SULPHATE", - "hsn_code": "31022100" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS AMMONIUM SULPHATE; DOUBLE SALTS\nAND MIXTURES OF AMMONIUM SULPHATE AND AMMONIUM NITRATE: OTHER : AMMONIUM\nSULPHONITRATE", - "hsn_code": "31022910" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS AMMONIUM SULPHATE; DOUBLE SALTS\nAND MIXTURES OF AMMONIUM SULPHATE AND AMMONIUM NITRATE: OTHER : OTHER", - "hsn_code": "31022990" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS AMMONIUM NITRATE, WHETHER OR NOT\nIN AQUEOUS SOLUTION", - "hsn_code": "31023000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS MIXTURES OF AMMONIUM NITRATE WITH\nCALCIUM CARBONATE OR OTHER INORGANIC NON-FERTILISING SUBSTANCES", - "hsn_code": "31024000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS SODIUM NITRATE", - "hsn_code": "31025000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS DOUBLE SALTS AND MIXTURES OF\nCALCIUM NITRATE AND AMMONIUM NITRATE", - "hsn_code": "31026000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS CALCIUM CYANAMIDE", - "hsn_code": "31027000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS MIXTURES OF UREA AND AMMONIUM\nNITRATE IN AQUEOUS OR AMMONIACAL SOLUTION", - "hsn_code": "31028000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS OTHER, INCLUDING MIXTURES NOT\nSPECIFIED IN THE FOREGOING SUB-HEADINGS : DOUBLE SALTS OR MIXTURES OF CALCIUM\nNITRATE AND MAGNESIUM NITRATE", - "hsn_code": "31029010" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, NITROGENOUS OTHER, INCLUDING MIXTURES NOT\nSPECIFIED IN THE FOREGOING SUB-HEADINGS : OTHER", - "hsn_code": "31029090" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, PHOSPHATIC SUPERPHOSPHATES", - "hsn_code": "31031000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, PHOSPHATIC BASIC SLAG", - "hsn_code": "31032000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, PHOSPHATIC OTHER", - "hsn_code": "31039000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, POTASSIC CARNALLITE, SYLVITE AND OTHER CRUDE\nNATURAL POTASSIUM SALTS", - "hsn_code": "31041000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, POTASSIC POTASSIUM CHLORIDE", - "hsn_code": "31042000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, POTASSIC POTASSIUM SULPHATE", - "hsn_code": "31043000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERS, POTASSIC OTHER", - "hsn_code": "31049000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG GOODS OF THIS CHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF\nA GROSS WEIGHT NOT EXCEEDING 10 KG.", - "hsn_code": "31051000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG MINERAL OR CHEMICAL FERTILISERS CONTAINING THE THREE FERTILISING\nELEMENTS NITROGEN, PHOSPHORUS AND POTASSIUM", - "hsn_code": "31052000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG DIAMMONIUM HYDROGEN ORTHO PHOSPHATE (DIAMMONIUM PHOSPHATE)", - "hsn_code": "31053000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG AMMONIUM DIHYDROGEN ORTHO PHOSPHATE (MONOAMMONIUM\nPHOSPHATE) AND MIXTURES THEREOF WITH DIAMMONIUM HYDROGEN ORTHOPHOSPHATE\n(DIAMMONIUM PHOSPHATE)", - "hsn_code": "31054000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG OTHER MINERAL OR CHEMICAL FERTILISERS CONTAINING THE TWO\nFERTILISING ELEMENTS NITROGEN AND PHOSPHORUS : CONTAINING NITRATES AND\nPHOSPHATES", - "hsn_code": "31055100" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG OTHER MINERAL OR CHEMICAL FERTILISERS CONTAINING THE TWO\nFERTILISING ELEMENTS NITROGEN AND PHOSPHORUS : OTHER", - "hsn_code": "31055900" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG MINERAL OR CHEMICAL FERTILISERS CONTAINING THE TWO FERTILISING\nELEMENTS PHOSPHORUS AND POTASSIUM", - "hsn_code": "31056000" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG OTHER : MINERAL OR CHEMICAL FERTILISERS CONTAINING TWO FERTILISING\nELEMENTS NAMELY NITROGEN AND POTASSIUM", - "hsn_code": "31059010" - }, - { - "description": "MINERAL OR CHEMICAL FERTILISERSCONTAINING TWO OR THREE OF THE FERTILISING\nELEMENTS NITROGEN,PHOSPHORUS AND POTASSIUM; OTHER FERTILISERS;GOODS OF THIS\nCHAPTER IN TABLETS OR SIMILAR FORMS OR IN PACKAGES OF A GROSS WEIGHT NOT\nEXCEEDING 10 KG OTHER : OTHER", - "hsn_code": "31059090" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES QUEBRACHO EXTRACT", - "hsn_code": "32011000" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES WATTLE EXTRACT", - "hsn_code": "32012000" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : GAMBIER EXTRACTS", - "hsn_code": "32019010" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : MYROBALAN FRUIT EXTRACT", - "hsn_code": "32019020" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : GALLOTANNIC ACID (TANNIN, DIGALLIC ACID)", - "hsn_code": "32019030" - }, - { - "description": "TANNING EXTRACTS OF VEGETABLE ORIGIN; TANNINS AND THEIR SALTS, ETHERS, ESTERS AND\nOTHER DERIVATIVES - OTHER : OTHER", - "hsn_code": "32019090" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING\nPREPARATIONS, WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC\nPREPARATIONS FOR PRE - TANNING SYNTHETIC ORGANIC TANNING SUBSTANCES", - "hsn_code": "32021000" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING\nPREPARATIONS, WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC\nPREPARATIONS FOR PRE - TANNING - OTHER : INORGANIC TANNING SUBSTANCES", - "hsn_code": "32029010" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING\nPREPARATIONS, WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC\nPREPARATIONS FOR PRE - TANNING - OTHER : TANNING PREPARATIONS, WHETHER OR NOT\nCONTAINING NATURAL TANNING SUBSTANCES", - "hsn_code": "32029020" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING\nPREPARATIONS, WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC\nPREPARATIONS FOR PRE - TANNING - OTHER : ENZYMATIC PREPARATIONS FOR PRE - TANNING", - "hsn_code": "32029030" - }, - { - "description": "SYNTHETIC ORGANIC TANNING SUBSTANCES; INORGANIC TANNING SUBSTANCES; TANNING\nPREPARATIONS, WHETHER OR NOT CONTAINING NATURAL TANNING SUBSTANCES; ENZYMATIC\nPREPARATIONS FOR PRE - TANNING - OTHER : OTHER", - "hsn_code": "32029090" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT\nEXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS\nSPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR\nANIMAL ORIGIN - COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING\nEXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF\nVEGETABLE OR ANIMAL ORIGIN : CUTCH (CATECHU) EXTRACTS", - "hsn_code": "32030010" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT\nEXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS\nSPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR\nANIMAL ORIGIN - COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING\nEXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF\nVEGETABLE OR ANIMAL ORIGIN : FOOD COLOURS OTHER THAN SYNTHETIC", - "hsn_code": "32030020" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT\nEXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS\nSPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR\nANIMAL ORIGIN - COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING\nEXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF\nVEGETABLE OR ANIMAL ORIGIN : LAC - DYE", - "hsn_code": "32030030" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT\nEXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS\nSPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR\nANIMAL ORIGIN - COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING\nEXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF\nVEGETABLE OR ANIMAL ORIGIN : NATURAL INDIGO", - "hsn_code": "32030040" - }, - { - "description": "COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING EXTRACTS BUT\nEXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED; PREPARATIONS AS\nSPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF VEGETABLE OR\nANIMAL ORIGIN - COLOURING MATTER OF VEGETABLE OR ANIMAL ORIGIN (INCLUDING DYEING\nEXTRACTS BUT EXCLUDING ANIMAL BLACK), WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOURING MATTER OF\nVEGETABLE OR ANIMAL ORIGIN : OTHER", - "hsn_code": "32030090" - }, - { - "description": "3204 SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nYELLOW : DISPERSE YELLOW 13 (DURANOL BRILL YELLOW 6 G)", - "hsn_code": "32041111" - }, - { - "description": "3204 SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nYELLOW : OTHER", - "hsn_code": "32041119" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nORANGE : DISPERSE ORANGE 11 (DURANOL ORANGE G)", - "hsn_code": "32041121" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nORANGE : OTHER", - "hsn_code": "32041129" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON :- DISPERSE\nRED : DISPERSE RED 3 (SERISOL FAST PINK B)", - "hsn_code": "32041131" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON :- DISPERSE\nRED : DISPERSE RED 4 (CELLITON FAST PINK RF)", - "hsn_code": "32041132" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON :- DISPERSE\nRED : DISPERSE RED 9 (DURANOL RED GN)", - "hsn_code": "32041133" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON :- DISPERSE\nRED : OTHER", - "hsn_code": "32041139" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nVIOLET : DISPERSE VIOLET 1 (DURANOL VIOLET 2R)", - "hsn_code": "32041141" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nVIOLET : DISPERSE VIOLET 4 (DURANOL BRILL VIOLET B)", - "hsn_code": "32041142" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nVIOLET : DISPERSE VIOLET 8 (DURANOL BRILL VIOLET BR)", - "hsn_code": "32041143" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nVIOLET : OTHER", - "hsn_code": "32041149" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 1 (DURANOL BRILL BLUE CB)", - "hsn_code": "32041151" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 3 (DURANOL BRILL BLUE BBN)", - "hsn_code": "32041152" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 5 (CELLITON FAST BLUE FFB)", - "hsn_code": "32041153" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 6 (CELLITON FAST BLUE FFG)", - "hsn_code": "32041154" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 14 (DURANOL BRILL BLUE G)", - "hsn_code": "32041155" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : DISPERSE BLUE 24 (DURANOL BLUE 2G)", - "hsn_code": "32041156" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : DISPERSE\nBLUE : OTHER", - "hsn_code": "32041159" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE GREENS", - "hsn_code": "32041191" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE BROWNS", - "hsn_code": "32041192" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE BLACKS", - "hsn_code": "32041193" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE BROWN MIXTURES", - "hsn_code": "32041194" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE GREY MIXTURES", - "hsn_code": "32041195" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nDISPERSE BLACK MIXTURES", - "hsn_code": "32041196" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- DISPERSE DYES AND PREPARATIONS BASED THEREON : OTHER :\nOTHER", - "hsn_code": "32041199" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID YELLOWS", - "hsn_code": "32041211" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID ORANGES", - "hsn_code": "32041212" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID RED", - "hsn_code": "32041213" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID VIOLETS", - "hsn_code": "32041214" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID BLUES", - "hsn_code": "32041215" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID GREENS", - "hsn_code": "32041216" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID BROWN", - "hsn_code": "32041217" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : ACID BLACKS", - "hsn_code": "32041218" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : AZO\nDYES : OTHER", - "hsn_code": "32041219" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : ACID GREEN 17 (SOLACET FAST GREEN 2G)", - "hsn_code": "32041221" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : ACID GREEN 27 (CARBOLAN GREEN G)", - "hsn_code": "32041222" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : ACID GREEN 28 (CARBOLAN BRILL GREEN 5G)", - "hsn_code": "32041223" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : ACID GREEN 38 (ALIZARINE CYANINE GREEN 3G)", - "hsn_code": "32041224" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : ACID GREEN 44 (ALIZARINE CYANINE GREEN GWA)", - "hsn_code": "32041225" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nGREENS (NON - AZO) : OTHER", - "hsn_code": "32041229" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLACK (NON - AZO) : ACID BLACK 2 (NIGROSINE)", - "hsn_code": "32041231" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLACK (NON - AZO) : ACID BLACK 48 (COOMASIE FAST GREY 3G)", - "hsn_code": "32041232" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLACK (NON - AZO) : OTHER", - "hsn_code": "32041239" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 2 (ALIZARINE BRILL BLUE PFN)", - "hsn_code": "32041241" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 14 (SOLACET FAST BLUE 4 G1)", - "hsn_code": "32041242" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 23 (ALIZARINE LIGHT BLUE 4 G1)", - "hsn_code": "32041243" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 25 (SOLWAY ULTRA BLUE B)", - "hsn_code": "32041244" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 45 (SOLWAY BLUE RN)", - "hsn_code": "32041245" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 51 (ALIZARINE SKY BLUE FFB)", - "hsn_code": "32041246" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 52 (ALIZARINE LIGHT 5GL)", - "hsn_code": "32041247" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 2, 14, 23, 25, 45, 51, 52 AND 78 (NON - AZO) : ACID BLUE 78 (SOLWAY SKY BLUE B)", - "hsn_code": "32041248" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : ACID BLUE 93 (INK BLUE)", - "hsn_code": "32041251" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : ACID BLUE 112 (COOMASIE ULTRA SKY\nSE)", - "hsn_code": "32041252" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : ACID BLUE 127 (BRILL ALIZARINE\nMILLING BLUE G)", - "hsn_code": "32041253" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : ACID BLUE 138 (CARBOLAN BLUE B)", - "hsn_code": "32041254" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : ACID BLUE 140 (CARBOLAN BRILL BLUE\n2R)", - "hsn_code": "32041255" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON : ACID\nBLUES 93, 112, 127, 138, 140 AND OTHERS (NON - AZO) : OTHER", - "hsn_code": "32041259" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : YELLOWS", - "hsn_code": "32041261" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : ORANGES", - "hsn_code": "32041262" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : VIOLETS", - "hsn_code": "32041263" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : BLUES", - "hsn_code": "32041264" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : GREENS", - "hsn_code": "32041265" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : BROWNS", - "hsn_code": "32041266" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : BLACKS", - "hsn_code": "32041267" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : RED II (ALIZARINE RED)", - "hsn_code": "32041268" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nMORDANT DYES : OTHER", - "hsn_code": "32041269" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : ACID YELLOWS", - "hsn_code": "32041291" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : ACID ORANGES", - "hsn_code": "32041292" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : ACID RED", - "hsn_code": "32041293" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : ACID VIOLETS", - "hsn_code": "32041294" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : ACID BROWNS", - "hsn_code": "32041295" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : ACID DYES, WHETHER OR NOT PREMETALLISED, AND\nPREPARATIONS BASED THEREON; MORDANT DYES AND PREPARATIONS BASED THEREON :\nOTHER NON - AZO ACID DYES : OTHER", - "hsn_code": "32041299" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC AZO\nDYES", - "hsn_code": "32041310" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC YELLOW\n(NON - AZO) : YELLOW 2 (AURAMINE O)", - "hsn_code": "32041321" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC YELLOW\n(NON - AZO) : OTHER", - "hsn_code": "32041329" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC RED\n(NON - AZO) : RED 1 (RHODAMINE 6 G)", - "hsn_code": "32041331" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC RED\n(NON - AZO) : OTHER", - "hsn_code": "32041339" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC VIOLET\n(NON - AZO) : VIOLET 1 (METHYL VIOLET)", - "hsn_code": "32041341" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC VIOLET\n(NON - AZO) : VIOLET 10 (RHODAMINE B)", - "hsn_code": "32041342" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC VIOLET\n(NON - AZO) : VIOLET 14 (MAGENTA)", - "hsn_code": "32041343" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC VIOLET\n(NON - AZO) : OTHER", - "hsn_code": "32041349" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC BLUE\n(NON - AZO) : BLUE 9 (METHYLENE BLUE)", - "hsn_code": "32041351" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC BLUE\n(NON - AZO) : BLUE 16 (VICTORIA BLUE B)", - "hsn_code": "32041352" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC BLUE\n(NON - AZO) : OTHER", - "hsn_code": "32041359" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC GREEN\n(NON - AZO) : GREEN 4 (MALACHITE GREEN)", - "hsn_code": "32041361" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON : BASIC GREEN\n(NON - AZO) : OTHER", - "hsn_code": "32041369" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON :- OTHER NON -\nAZO BASIC DYES : BASIC ORANGES", - "hsn_code": "32041391" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON :- OTHER NON -\nAZO BASIC DYES : BASIC BROWNS", - "hsn_code": "32041392" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON :- OTHER NON -\nAZO BASIC DYES : BASIC BLACK", - "hsn_code": "32041393" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : BASIC DYES AND PREPARATIONS BASED THEREON :- OTHER NON -\nAZO BASIC DYES : OTHER", - "hsn_code": "32041399" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nYELLOW (AZO) : YELLOW 12 (CHRYSOPHENINE G)", - "hsn_code": "32041411" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nYELLOW (AZO) : OTHER", - "hsn_code": "32041419" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT RED\n(AZO) : CONGO RED", - "hsn_code": "32041421" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT RED\n(AZO) : OTHER", - "hsn_code": "32041429" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT BLUE\n(AZO) : BLUE 1 (SKY BLUE FF)", - "hsn_code": "32041431" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT BLUE\n(AZO) : OTHER", - "hsn_code": "32041439" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nORANGES (AZO)", - "hsn_code": "32041440" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nGREENS (AZO)", - "hsn_code": "32041450" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nBROWNS (AZO)", - "hsn_code": "32041460" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT\nBLACKS (AZO)", - "hsn_code": "32041470" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : YELLOWS", - "hsn_code": "32041481" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : ORANGES", - "hsn_code": "32041482" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : REDS", - "hsn_code": "32041483" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : VIOLETS", - "hsn_code": "32041484" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : BLUES", - "hsn_code": "32041485" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : GREENS", - "hsn_code": "32041486" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : BROWNS", - "hsn_code": "32041487" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : BLACKS", - "hsn_code": "32041488" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : DIRECT DYES\n(NON - AZO) : OTHER", - "hsn_code": "32041489" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : DIRECT DYES AND PREPARATIONS BASED THEREON : OTHER", - "hsn_code": "32041490" - }, - { - "description": "(SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT YELLOW : VAT YELLOW GC)", - "hsn_code": "32041511" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT YELLOW : VAT YELLOW 4 (INDATHRENE\nGOLDEN YELLOW GK)", - "hsn_code": "32041512" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT YELLOW : OTHER", - "hsn_code": "32041519" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT ORANGE : VAT ORANGES 3 (BRILL ORANGE RK)", - "hsn_code": "32041521" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT ORANGE : VAT ORANGES 15 (GOLDEN ORANGE\n3G)", - "hsn_code": "32041522" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT ORANGE : OTHER", - "hsn_code": "32041529" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT RED : VAT RED (BRILL PINK)", - "hsn_code": "32041531" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT RED : OTHER", - "hsn_code": "32041539" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT VIOLET : VAT VIOLET 1 (BRILL VIOLET 2R)", - "hsn_code": "32041541" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT VIOLET : VAT VIOLET 3 (MAGENTA B)", - "hsn_code": "32041542" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT VIOLET : OTHER", - "hsn_code": "32041549" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 1 (SYNTHETIC INDIGO)", - "hsn_code": "32041551" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 4", - "hsn_code": "32041552" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 5 (BLUE 2B)", - "hsn_code": "32041553" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 6 (BLUE BC)", - "hsn_code": "32041554" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 20 (DARK BLUE 30)", - "hsn_code": "32041555" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 29 (INDANTHRENE BRILL\nBLUE 4G)", - "hsn_code": "32041556" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : VAT BLUE 43 (CARBAZOLE BLUE)", - "hsn_code": "32041557" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : REDUCED VAT BLUES", - "hsn_code": "32041558" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON :- VAT BLUE : OTHER", - "hsn_code": "32041559" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT GREEN : VAT GREEN 1 (INDANTHRENE BRILL\nGREEN BFFB)", - "hsn_code": "32041561" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT GREEN : VAT GREEN 2 (INDANTHRENE BRILL\nGREEN GG)", - "hsn_code": "32041562" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT GREEN : VAT GREEN 4 (INDANTHRENE BRILL\nGREEN 3B)", - "hsn_code": "32041563" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT GREEN : VAT GREEN 9 (BLACK BB)", - "hsn_code": "32041564" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT GREEN : OTHER", - "hsn_code": "32041569" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BROWN : VAT BROWN 1 (BROWN BR)", - "hsn_code": "32041571" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BROWN : VAT BROWN 3 (BROWN RGR)", - "hsn_code": "32041572" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BROWN : VAT BROWN 5 (BROWN RRD,G)", - "hsn_code": "32041573" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BROWN : OTHER", - "hsn_code": "32041579" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BLACK : VAT BLACK 9 (BLACK RB)", - "hsn_code": "32041581" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BLACK : VAT BLACK 25 (OLIVE T)", - "hsn_code": "32041582" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BLACK : VAT BACK 27 (OLIVE R)", - "hsn_code": "32041583" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BLACK : VAT BLACK 29 (GREY BG)", - "hsn_code": "32041584" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : VAT BLACK : OTHER", - "hsn_code": "32041589" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT YELLOWS", - "hsn_code": "32041591" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT ORANGES", - "hsn_code": "32041592" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT REDS", - "hsn_code": "32041593" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT VIOLETS", - "hsn_code": "32041594" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT BLUES", - "hsn_code": "32041595" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT GREENS", - "hsn_code": "32041596" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT BLACKS", - "hsn_code": "32041597" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : VAT DYES (INCLUDING THOSE USABLE IN THAT STATE AS\nPIGMENTS) AND PREPARATIONS THEREON : OTHER : SOLUBILISED VAT BLACKS - OTHER", - "hsn_code": "32041599" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : YELLOWS", - "hsn_code": "32041610" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : ORANGES", - "hsn_code": "32041620" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : REDS", - "hsn_code": "32041630" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : VIOLETS", - "hsn_code": "32041640" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : BLUES", - "hsn_code": "32041650" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : GREENS", - "hsn_code": "32041660" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : BROWNS", - "hsn_code": "32041670" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : BLACKS", - "hsn_code": "32041680" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- REACTIVE DYES AND PREPARATIONS BASED THEREON : OTHER", - "hsn_code": "32041690" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nYELLOW : YELLOW 1 (HANSA YELLOW)", - "hsn_code": "32041711" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nYELLOW : OTHER", - "hsn_code": "32041719" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nORANGES", - "hsn_code": "32041720" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT RED :\nTOLUIDINE RED", - "hsn_code": "32041731" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT RED :\nOTHER", - "hsn_code": "32041739" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nVIOLETS", - "hsn_code": "32041740" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nBLUES : BLUE 15 (PATHALOCYANINE BLUE)", - "hsn_code": "32041751" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nBLUES : OTHER", - "hsn_code": "32041759" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON :- PIGMENT\nGREENS : GREEN 7 (PATHALOVYANINE GREEN)", - "hsn_code": "32041761" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON :- PIGMENT\nGREENS : OTHER", - "hsn_code": "32041769" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nBROWNS", - "hsn_code": "32041770" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : PIGMENT\nBLACKS", - "hsn_code": "32041780" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER : PIGMENTS AND PREPARATIONS BASED THEREON : OTHER", - "hsn_code": "32041790" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 2 (NAPHTHOL AS)", - "hsn_code": "32041911" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 4 (NAPHTHOL AS - BO)", - "hsn_code": "32041912" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 5 (NAPHTHOL ASG)", - "hsn_code": "32041913" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 7 (NAPHTHOL ASSW)", - "hsn_code": "32041914" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 8 (NAPHTHOL ASTR)", - "hsn_code": "32041915" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n2,4,5,7,8,13 : AZOIC COUPLING COMPONENT 13 (NAPHTHOL ASSG)", - "hsn_code": "32041916" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : AZOIC COUPLING COMPONENT 14 (NAPHTHOL ASPH)", - "hsn_code": "32041921" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : AZOIC COUPLING COMPONENT 15 (NAPHTHOL ASLB)", - "hsn_code": "32041922" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : AZOIC COUPLING COMPONENT 17 (NAPHTHOL ASBS)", - "hsn_code": "32041923" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : AZOIC COUPLING COMPONENT 18 (NAPHTHOL ASD)", - "hsn_code": "32041924" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : AZOIC COUPLING COMPONENT 20 (NAPHTHOL ASOL)", - "hsn_code": "32041925" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC COUPLING COMPONENTS\n14,15,17,18,20 AND OTHERS : OTHER", - "hsn_code": "32041929" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 1 (FAST BORDEAUX GP BASE)", - "hsn_code": "32041931" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 2 (FAST ORANGE G/GC BASE)", - "hsn_code": "32041932" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 3 (FAST SCARLET GGIGGS BASE)", - "hsn_code": "32041933" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 4 (FAST GARMENT GBC BASE)", - "hsn_code": "32041934" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 5 (FAST RED B BASE)", - "hsn_code": "32041935" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 6 (FAST ORANGE GR BASE)", - "hsn_code": "32041936" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 10 (FAST RED R BASE)", - "hsn_code": "32041937" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n1,2,3,4,5,6,10,11 : AZOIC DIAZO COMPONENT 11 (FAST RED TR BASE)", - "hsn_code": "32041938" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 12 (FAST SCARLET G BASE)", - "hsn_code": "32041941" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 13 (FAST SCARLET R BASE)", - "hsn_code": "32041942" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 20 (FAST BLUE BB BASE)", - "hsn_code": "32041943" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 24 (FAST BLUE RR BASE)", - "hsn_code": "32041944" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 32 (FAST RED KB BASE)", - "hsn_code": "32041945" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 41 (FAST VIOLET B BASE)", - "hsn_code": "32041946" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : AZOIC DIAZO COMPONENT 48 (FAST BLUE B BASE)", - "hsn_code": "32041947" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : AZOIC DIAZO COMPONENT\n12,13,20,24,32,41,48 AND OTHERS : OTHER", - "hsn_code": "32041949" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : YELLOWS", - "hsn_code": "32041951" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : ORANGES", - "hsn_code": "32041952" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : REDS", - "hsn_code": "32041953" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : VIOLETS", - "hsn_code": "32041954" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : BLUES", - "hsn_code": "32041955" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : GREENS", - "hsn_code": "32041956" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : BROWNS", - "hsn_code": "32041957" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : BLACKS", - "hsn_code": "32041958" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 :- AZOIC COLOURS : OTHER", - "hsn_code": "32041959" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: YELLOWS", - "hsn_code": "32041961" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: ORANGES", - "hsn_code": "32041962" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: REDS", - "hsn_code": "32041963" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: BLUES", - "hsn_code": "32041964" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: GREENS", - "hsn_code": "32041965" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: BROWNS", - "hsn_code": "32041966" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: BLACKS", - "hsn_code": "32041967" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SULPHUR BASED COLOURING MATTERS\n: OTHER", - "hsn_code": "32041969" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: YELLOWS", - "hsn_code": "32041971" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: ORANGES", - "hsn_code": "32041972" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: REDS", - "hsn_code": "32041973" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: VIOLETS", - "hsn_code": "32041974" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: BLUES", - "hsn_code": "32041975" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: GREENS", - "hsn_code": "32041976" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: BROWNS", - "hsn_code": "32041977" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: BLACKS", - "hsn_code": "32041978" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : SOLVENT BASED COLOURING MATTERS\n: OTHER", - "hsn_code": "32041979" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : YELLOW\n3 (SUNSET YELLOW)", - "hsn_code": "32041981" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : YELLOW\n4 (TARTRAZINE)", - "hsn_code": "32041982" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : REDS 5\nTO 8 (PONCEAN)", - "hsn_code": "32041983" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : RED 9\n(AMARANTH)", - "hsn_code": "32041984" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS :\nORANGES", - "hsn_code": "32041985" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : VIOLETS", - "hsn_code": "32041986" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : GREENS", - "hsn_code": "32041987" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : BROWNS", - "hsn_code": "32041988" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : FOOD COLOURING MATTERS : OTHER", - "hsn_code": "32041989" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC COLOURING MATTER AND PREPARATIONS BASED THEREON AS SPECIFIED\nIN NOTE 3 TO THIS CHAPTER :- OTHER, INCLUDING MIXTURES OF COLOURING MATTER OF TWO\nOR MORE OF THE SUB - HEADINGS 3204 11 TO 3204 19 : OTHER", - "hsn_code": "32041990" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT BRIGHTENING AGENTS :\nOPTICAL WHITENING AGENTS", - "hsn_code": "32042010" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED -\nSYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT BRIGHTENING AGENTS :\nOTHER", - "hsn_code": "32042090" - }, - { - "description": "SYNTHETIC ORGANIC COLOURING MATTER, WHETHER OR NOT CHEMICALLY DEFINED;\nPREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON SYNTHETIC ORGANIC\nCOLOURING MATTER; SYNTHETIC ORGANIC PRODUCTS OF A KIND USED AS FLUORESCENT\nBRIGHTENING AGENTS OR AS LUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED\nOTHER", - "hsn_code": "32049000" - }, - { - "description": "COLOUR LAKES; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER BASED ON COLOUR\nLAKES", - "hsn_code": "32050000" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - PIGMENTS AND PREPARATIONS\nBASED ON TITANIUM DIOXIDE :- CONTAINING 80% OR MORE BY WEIGHT OF TITANIUM DIOXIDE\nCALCULATED ON THE DRY MATTER : PEARLSENT PIGMENT (TITANIUM DIOXIDE, COATED\nMICANANEOUS AND LUSTRES PEARL PIGMENT)", - "hsn_code": "32061110" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - PIGMENTS AND PREPARATIONS\nBASED ON TITANIUM DIOXIDE :- CONTAINING 80% OR MORE BY WEIGHT OF TITANIUM DIOXIDE\nCALCULATED ON THE DRY MATTER : OTHER", - "hsn_code": "32061190" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - PIGMENTS AND PREPARATIONS\nBASED ON TITANIUM DIOXIDE : OTHER", - "hsn_code": "32061900" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED- PIGMENTS AND PREPARATIONS\nBASED ON CHROMIUM COMPOUNDS", - "hsn_code": "32062000" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - PIGMENTS AND PREPARATIONS\nBASED ON CADMIUM COMPOUNDS", - "hsn_code": "32063000" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : ULTRAMARINE AND PREPARATIONS BASED THEREON", - "hsn_code": "32064100" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : LITHOPONE AND OTHER PIGMENTS AND PREPARATIONS BASED ON\nZINC SULPHIDE", - "hsn_code": "32064200" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : PIGMENTS AND PREPARATIONS BASED ON HEXACYANOFERRATES\n(FERROCYANIDES AND FERRICYANIDES)", - "hsn_code": "32064300" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : OTHER : RED OXIDE", - "hsn_code": "32064910" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : OTHER : PERSIAN RED", - "hsn_code": "32064920" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : OTHER : YELLOW OCHRE", - "hsn_code": "32064930" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : OTHER : BRONZE POWDER", - "hsn_code": "32064940" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - OTHER COLOURING MATTER AND\nOTHER PREPARATIONS : OTHER : OTHER", - "hsn_code": "32064990" - }, - { - "description": "OTHER COLOURING MATTER; PREPARATIONS AS SPECIFIED IN NOTE 3 TO THIS CHAPTER, OTHER\nTHAN THOSE OF HEADINGS 3203, 3204 OR 3205; INORGANIC PRODUCTS OF A KIND USED AS\nLUMINOPHORES, WHETHER OR NOT CHEMICALLY DEFINED - INORGANIC PRODUCTS OF A KIND\nUSED AS LUMINOPHORES", - "hsn_code": "32065000" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - PREPARED PIGMENTS, PREPARED OPACIFIERS,\nPREPARED COLOURS AND SIMILAR PREPARATIONS : PREPARED ORGANIC DYE - STUFF\nPIGMENTS, DRY", - "hsn_code": "32071010" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - PREPARED PIGMENTS, PREPARED OPACIFIERS,\nPREPARED COLOURS AND SIMILAR PREPARATIONS : PREPARED ORGANIC DYE - STUFF\nPIGMENTS, PASTE", - "hsn_code": "32071020" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - PREPARED PIGMENTS, PREPARED OPACIFIERS,\nPREPARED COLOURS AND SIMILAR PREPARATIONS : PREPARED INORGANIC PIGMENTS", - "hsn_code": "32071030" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - PREPARED PIGMENTS, PREPARED OPACIFIERS,\nPREPARED COLOURS AND SIMILAR PREPARATIONS : PREPARED OPACIFIERS PREPARED COLOURS\nAND SIMILAR PREPARATIONS", - "hsn_code": "32071040" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - PREPARED PIGMENTS, PREPARED OPACIFIERS,\nPREPARED COLOURS AND SIMILAR PREPARATIONS : OTHER", - "hsn_code": "32071090" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - VITRIFIABLE ENAMELS AND GLAZES, ENGOBES\n(SLIPS) AND SIMILAR PREPARATIONS : VITRIFIABLE ENAMELS AND GLAZES", - "hsn_code": "32072010" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - VITRIFIABLE ENAMELS AND GLAZES, ENGOBES\n(SLIPS) AND SIMILAR PREPARATIONS : ENGOBES (SLIPS) AND SIMILAR PREPARATIONS", - "hsn_code": "32072020" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES -LIQUID LUSTRES AND SIMILAR PREPARATIONS", - "hsn_code": "32073000" - }, - { - "description": "PREPARED PIGMENTS, PREPARED OPACIFIERS AND PREPARED COLOURS, VITRIFIABLE ENAMELS\nAND GLAZES, ENGOBES (SLIPS), LIQUID LUSTRES AND SIMILAR PREPARATIONS, OF A KIND USED\nIN THE CERAMIC ENAMELLING OR GLASS INDUSTRY; GLASS FRIT AND OTHER GLASS, IN THE\nFORM OF POWDER, GRANULES OR FLAKES - GLASS FRIT AND OTHER GLASS, IN THE FORM OF\nPOWDER, GRANULES OR FLAKES", - "hsn_code": "32074000" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nPOLYESTERS : ENAMELS", - "hsn_code": "32081010" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nPOLYESTERS : LACQUERS", - "hsn_code": "32081020" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nPOLYESTERS : VARNISHES", - "hsn_code": "32081030" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nPOLYESTERS : OTHER", - "hsn_code": "32081090" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nACRYLIC OR VINYL POLYMERS : ENAMELS", - "hsn_code": "32082010" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nACRYLIC OR VINYL POLYMERS : LACQUERS", - "hsn_code": "32082020" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nACRYLIC OR VINYL POLYMERS : VARNISHES", - "hsn_code": "32082030" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - BASED ON\nACRYLIC OR VINYL POLYMERS : OTHER", - "hsn_code": "32082090" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nBASED ON CELLULOSE NITRATE OR OTHER CELLULOSE DERIVATIVES : NITROCELLULOSE\nLACQUERS", - "hsn_code": "32089011" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nBASED ON CELLULOSE NITRATE OR OTHER CELLULOSE DERIVATIVES : OTHER", - "hsn_code": "32089019" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nENAMELS : SYNTHETIC ENAMEL, ULTRA WHITE PAINTS", - "hsn_code": "32089021" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nENAMELS : SYNTHETIC ENAMEL, OTHER COLOURS", - "hsn_code": "32089022" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nENAMELS : OTHER", - "hsn_code": "32089029" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nLACQUERS", - "hsn_code": "32089030" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nVARNISHES : INSULATING VARNISH", - "hsn_code": "32089041" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nVARNISHES : OTHER", - "hsn_code": "32089049" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER : SLIP\nAGENTS", - "hsn_code": "32089050" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN A\nNON - AQUEOUS MEDIUM; SOLUTIONS AS DEFINED IN NOTE 4 TO THIS CHAPTER - OTHER :\nOTHER", - "hsn_code": "32089090" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN AN\nAQUEOUS MEDIUM - BASED ON ACRYLIC OR VINYL POLYMERS : ACRYLIC EMULSION", - "hsn_code": "32091010" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN AN\nAQUEOUS MEDIUM - BASED ON ACRYLIC OR VINYL POLYMERS : OTHER", - "hsn_code": "32091090" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN AN\nAQUEOUS MEDIUM - OTHER : DISPERSION PAINTS", - "hsn_code": "32099010" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN AN\nAQUEOUS MEDIUM - OTHER : EMULSION PAINTS NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "32099020" - }, - { - "description": "PAINTS AND VARNISHES (INCLUDING ENAMELS AND LACQUERS) BASED ON SYNTHETIC\nPOLYMERS OR CHEMICALLY MODIFIED NATURAL POLYMERS, DISPERSED OR DISSOLVED IN AN\nAQUEOUS MEDIUM - OTHER : OTHER", - "hsn_code": "32099090" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : DISTEMPERS : DRY DISTEMPER, INCLUDING CEMENT\nBASED WATER PAINTS", - "hsn_code": "32100011" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : DISTEMPERS : OIL BOUND DISTEMPER", - "hsn_code": "32100012" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : DISTEMPERS : OTHER", - "hsn_code": "32100019" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : PREPARED WATER PIGMENTS OF A KIND USED FOR\nFINISHING LEATHER", - "hsn_code": "32100020" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : METALLIC POWDER OR FLAKES PREPARED AS PAINTS", - "hsn_code": "32100030" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : POLY TETRA FLUORO ETHYLENE (PTFE) OR SILICON\nRESIN BASED COATING MATERIALS", - "hsn_code": "32100040" - }, - { - "description": "OTHER PAINTS AND VARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS);\nPREPARED WATER PIGMENTS OF A KIND USED FOR FINISHING LEATHER - OTHER PAINTS AND\nVARNISHES (INCLUDING ENAMELS, LACQUERS AND DISTEMPERS); PREPARED WATER PIGMENTS\nOF A KIND USED FOR FINISHING LEATHER : OTHER", - "hsn_code": "32100090" - }, - { - "description": "PREPARED DRIERS", - "hsn_code": "32110000" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON - AQUEOUS\nMEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS\n(INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN\nFORMS OR PACKINGS FOR RETAIL SALE STAMPING FOILS", - "hsn_code": "32121000" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON - AQUEOUS\nMEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS\n(INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN\nFORMS OR PACKINGS FOR RETAIL SALE - OTHER : PIGMENTS IN LINSEED OIL, WHITE SPIRIT,\nSPIRIT OF TURPENTINE, VARNISH AND OTHER PAINTS OR ENAMEL MEDIA NOT ELSEWHERE\nSPECIFIED OR INCLUDED", - "hsn_code": "32129010" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON - AQUEOUS\nMEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS\n(INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN\nFORMS OR PACKINGS FOR RETAIL SALE - OTHER : DYES AND OTHER COLOURING MATTER PUT UP\nIN FORMS OR PACKINGS FOR RETAIL SALE", - "hsn_code": "32129020" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON - AQUEOUS\nMEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS\n(INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN\nFORMS OR PACKINGS FOR RETAIL SALE - OTHER : ALUMINIUM PASTE", - "hsn_code": "32129030" - }, - { - "description": "PIGMENTS (INCLUDING METALLIC POWDERS AND FLAKES) DISPERSED IN NON - AQUEOUS\nMEDIA, IN LIQUID OR PASTE FORM, OF A KIND USED IN THE MANUFACTURE OF PAINTS\n(INCLUDING ENAMELS); STAMPING FOILS; DYES AND OTHER COLOURING MATTER PUT UP IN\nFORMS OR PACKINGS FOR RETAIL SALE - OTHER : OTHER", - "hsn_code": "32129090" - }, - { - "description": "ARTISTS, STUDENTS,OR SIGNBOARD PAINTER,COLOURS, MODIFIYING TINTS, AMUSEMENT\nCOLOURS AND THE LIKE, IN TABLETS, TUBES, JARS, BOTTLES, PANS OR IN SIMILAR FORMS OR\nPACKINGS - COLOURS IN SETS", - "hsn_code": "32131000" - }, - { - "description": "ARTISTS, STUDENTS OR SIGNBOARD PAINTERS COLOURS, MODIFIYING TINTS, AMUSEMENT\nCOLOURS AND THE LIKE, IN TABLETS, TUBES, JARS, BOTTLES, PANS OR IN SIMILAR FORMS OR\nPACKINGS -OTHER", - "hsn_code": "32139000" - }, - { - "description": "GLAZIERS PUTTY, GRAFTING PUTTY, RESIN CEMENTS, CAULKING COMPOUNDS AND OTHER\nMASTICS; PAINTERS FILLINGS; NON - REFRACTORY SURFACING PREPARTIONS FOR FACADES,\nINDOOR WALLS, FLOORS, CEILINGS OR THE LIKE- GLAZIERS PUTTY, GRAFTING PUTTY, RESIN\nCEMENTS, CAULKING COMPOUNDS AND OTHER MASTICS; PAINTERS FILLINGS", - "hsn_code": "32141000" - }, - { - "description": "GLAZIERS PUTTY, GRAFTING PUTTY, RESIN CEMENTS, CAULKING COMPOUNDS AND OTHER\nMASTICS; PAINTERS FILLINGS; NON - REFRACTORY SURFACING PREPARTIONS FOR FACADES,\nINDOOR WALLS, FLOORS, CEILINGS OR THE LIKE - OTHER : NON - REFRACTORY SURFACING\nPREPARATIONS", - "hsn_code": "32149010" - }, - { - "description": "GLAZIERS PUTTY, GRAFTING PUTTY, RESIN CEMENTS, CAULKING COMPOUNDS AND OTHER\nMASTICS; PAINTERS FILLINGS; NON - REFRACTORY SURFACING PREPARTIONS FOR FACADES,\nINDOOR WALLS, FLOORS, CEILINGS OR THE LIKE - OTHER : RESIN CEMENT", - "hsn_code": "32149020" - }, - { - "description": "GLAZIERS PUTTY, GRAFTING PUTTY, RESIN CEMENTS, CAULKING COMPOUNDS AND OTHER\nMASTICS; PAINTERS FILLINGS; NON - REFRACTORY SURFACING PREPARTIONS FOR FACADES,\nINDOOR WALLS, FLOORS, CEILINGS OR THE LIKE - OTHER : OTHER", - "hsn_code": "32149090" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK :- BLACK : LITHOGRAPHIC INK AND JELLY", - "hsn_code": "32151110" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK :- BLACK : NEWSPAPER INK", - "hsn_code": "32151120" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK :- BLACK : ROTARY INK", - "hsn_code": "32151130" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK :- BLACK : SCREEN PRINTING INK", - "hsn_code": "32151140" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK :- BLACK : OTHER", - "hsn_code": "32151190" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK : OTHER : LITHOGRAPHIC INK AND JELLY", - "hsn_code": "32151910" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK : OTHER : NEWSPAPER INK", - "hsn_code": "32151920" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK : OTHER : ROTARY INK", - "hsn_code": "32151930" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK : OTHER : SCREEN PRINTING INK", - "hsn_code": "32151940" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - PRINTING INK : OTHER : OTHER", - "hsn_code": "32151990" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - OTHER : FOUNTAIN PEN INK", - "hsn_code": "32159010" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - OTHER : BALL PEN INK", - "hsn_code": "32159020" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - OTHER : INDELIBLE INK", - "hsn_code": "32159030" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - OTHER : DRAWING INK", - "hsn_code": "32159040" - }, - { - "description": "PRINTING INK, WRITING OR DRAWING INK AND OTHER INKS, WHETHER OR NOT CONCENTRATED\nOR SOLID - OTHER : OTHER", - "hsn_code": "32159090" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS - ESSENTIAL OILS OF CITRUS FRUIT : OF BERGAMOT", - "hsn_code": "33011100" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS - ESSENTIAL OILS OF CITRUS FRUIT : OF ORANGE", - "hsn_code": "33011200" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS - ESSENTIAL OILS OF CITRUS FRUIT : OF LEMON", - "hsn_code": "33011300" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS - ESSENTIAL OILS OF CITRUS FRUIT : OF LIME", - "hsn_code": "33011400" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OF CITRUS FRUIT : OTHER : CITRONELLA OIL", - "hsn_code": "33011910" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OF CITRUS FRUIT : OTHER : OTHER", - "hsn_code": "33011990" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT:OF GERANIUM", - "hsn_code": "33012100" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF JASMIN : JASMIN\nCONCENTRATE", - "hsn_code": "33012210" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF JASMIN : OTHER", - "hsn_code": "33012290" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF LAVENDER OR OF\nLAVANDIN", - "hsn_code": "33012300" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF PEPPERMINT\n(MENTHA PIPERITA)", - "hsn_code": "33012400" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF OTHER MINTS :\nSPEARMINT OIL (EX-MENTHA SPICATA)", - "hsn_code": "33012510" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF OTHER MINTS :\nWATER MINT-OIL (EX-MENTHA AQUATIC)", - "hsn_code": "33012520" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF OTHER MINTS :\nHORSEMINT OIL (EX-MENTHA SYLVESTRIES)", - "hsn_code": "33012530" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF OTHER MINTS :\nBERGAMENT OIL (EX-MENTHA CITRATE)", - "hsn_code": "33012540" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF OTHER MINTS :\nOTHER", - "hsn_code": "33012590" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OF VETIVER", - "hsn_code": "33012600" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: ANISE OIL (ANISEED OIL)", - "hsn_code": "33012911" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CAJEPUT OIL", - "hsn_code": "33012912" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CANANGA OIL", - "hsn_code": "33012913" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CARAWAY OIL", - "hsn_code": "33012914" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CASSIA OIL", - "hsn_code": "33012915" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CEDARWOOD OIL", - "hsn_code": "33012916" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CINNAMON BARK OIL", - "hsn_code": "33012917" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: ANISE OIL;\nCAJEPUT OIL; CANANGA OIL; CARAWAY OIL; CASSIA OIL; CEDARWOOD OIL; CINNAMON BARK\nOIL; CINNAMON LEAF OIL: CINNAMON LEAF OIL", - "hsn_code": "33012918" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: CLOVE LEAF OR STEM OIL", - "hsn_code": "33012921" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: CORIANDER SEED OIL", - "hsn_code": "33012922" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: DILL OIL (ANETHUM OIL)", - "hsn_code": "33012923" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER:CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: EUCALYPTUS OIL", - "hsn_code": "33012924" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: FENNEL SEED OIL", - "hsn_code": "33012925" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: GINGER OIL", - "hsn_code": "33012926" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: GINGER GRASS OIL", - "hsn_code": "33012927" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CLOVE LEAF OR\nSTEM OIL; CORIANDER SEED OIL; DILL OIL; EUCALYPTUS OIL; FENNEL SEED OIL; GINGER OIL;\nGINGER GRASS OIL; CLOVE BUD OIL: CLOVE BUD OIL", - "hsn_code": "33012928" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: TUBEROSE CONCENTRATE", - "hsn_code": "33012931" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: NUTMEG OIL", - "hsn_code": "33012932" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: PALMAROSA OIL", - "hsn_code": "33012933" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: PATCHOULI OIL", - "hsn_code": "33012934" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: PEPPER OIL", - "hsn_code": "33012935" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: PETITGRAIN OIL", - "hsn_code": "33012936" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: SANDALWOOD OIL", - "hsn_code": "33012937" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: TUBEROSE\nCONCENTRATE; NUTMEG OIL; PALMAROSA OIL; PATCHOULI OIL; PEPPER OIL; PETITGRAIN OIL;\nSANDALWOOD OIL; ROSE OIL: ROSE OIL", - "hsn_code": "33012938" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : CAMPHOR OIL; LEMON GRASS OIL; YLANG YLANG OIL; DAVANA\nOIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL, PAPRIKA OIL, TURMERIC OIL : CAMPHOR OIL", - "hsn_code": "33012941" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : LEMON GRASS OIL", - "hsn_code": "33012942" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : YLANG YLANG OIL", - "hsn_code": "33012943" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : DAVANA OIL", - "hsn_code": "33012944" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : CUMIN OIL", - "hsn_code": "33012945" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : CELERY SEED OIL", - "hsn_code": "33012946" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : GARLIC OIL", - "hsn_code": "33012947" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : PAPRIKA OIL", - "hsn_code": "33012948" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: CAMPHOR OIL;\nLEMON GRASS OIL; YLANG YLANG OIL; DAVANA OIL; CUMIN OIL; CELERY SEED OIL, GARLIC OIL,\nPAPRIKA OIL, TURMERIC OIL : TURMERIC OIL", - "hsn_code": "33012949" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: SPICES OILS NOT\nELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "33012950" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS ESSENTIAL OILS OTHER THAN THOSE OF CITRUS FRUIT: OTHER: OTHER", - "hsn_code": "33012990" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS RESINOIDS: AGAR OIL", - "hsn_code": "33013010" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS RESINOIDS: OTHER: FLAVOURING ESSENCES, ALL TYPES, INCLUDING THOSE FOR\nLIQUORS", - "hsn_code": "33013091" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS RESINOIDS: OTHER: OTHER", - "hsn_code": "33013099" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: FENUGREEK OLEORESINS", - "hsn_code": "33019011" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: GINGER OLEORESINS", - "hsn_code": "33019012" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: PEPPER OLEORESINS", - "hsn_code": "33019013" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: TURMERIC OLEORESINS", - "hsn_code": "33019014" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: CARDAMOM OLEORESINS", - "hsn_code": "33019015" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: CELERY SEED OLEORESINS", - "hsn_code": "33019016" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: FENUGREEK, GINGER, PEPPER, TURMERIC, CARDAMOM, CELERY SEED\nAND NUTMEG OLEORESINS: NUTMEG OLEORESINS", - "hsn_code": "33019017" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: CLOVE OLEORESINS", - "hsn_code": "33019021" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: CAPSICUM OLEORESINS", - "hsn_code": "33019022" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: CORIANDER OLEORESINS", - "hsn_code": "33019023" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: CUMIN OLEORESINS", - "hsn_code": "33019024" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: FENNEL OLEORESINS", - "hsn_code": "33019025" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CLOVE, CAPSICUM, CORIANDER, CUMIN AND FENNEL OLEOREINS AND\nOLEORESINS OF SPICES NOT ELSEWHERE SPECIFIED OR INCLUDED: OLEORESINS OF SPICES NOT\nELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "33019029" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: ATTARS OF ALL KINDS IN FIXED OIL BASE; MUSTARD OIL AROMA\nESSENCE OF AMBRETTOLIDE (AMBRETTE SEED OIL ESSENCE): ATTARS OF ALL KINDS IN FIXED OIL\nBASE", - "hsn_code": "33019031" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: ATTARS OF ALL KINDS IN FIXED OIL BASE; MUSTARD OIL AROMA\nESSENCE OF AMBRETTOLIDE (AMBRETTE SEED OIL ESSENCE): MUSTARD OIL AROMA", - "hsn_code": "33019032" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: ATTARS OF ALL KINDS IN FIXED OIL BASE; MUSTARD OIL AROMA\nESSENCE OF AMBRETTOLIDE (AMBRETTE SEED OIL ESSENCE): ESSENCE OF AMBRETTOLIDE\n(AMBRETTE SEED OIL ESSENCE)", - "hsn_code": "33019033" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS OR IN WAXES\nOR THE LIKE, OBTAINED BY COLD ABSORPTION OR BY MACERATION NOT ELSEWHERE SPECIFIED\nOR INCLUDED: FLAVOURING ESSENCES, ALL TYPES, INCLUDING THOSE FOR LIQUORS", - "hsn_code": "33019041" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS OR IN WAXES\nOR THE LIKE, OBTAINED BY COLD ABSORPTION OR BY MACERATION NOT ELSEWHERE SPECIFIED\nOR INCLUDED: OTHER", - "hsn_code": "33019049" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: TERPENIC BY-PRODUCTS OF THE DETERPENATION OF ESSENTIAL OILS:\nFLAVOURING ESSENCES, ALL TYPES, INCLUDING THOSE FOR LIQUORS", - "hsn_code": "33019051" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: TERPENIC BY-PRODUCTS OF THE DETERPENATION OF ESSENTIAL OILS:\nOTHER", - "hsn_code": "33019059" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: AQUEOUS DISTILLATES OF ESSENTIAL OILS, NOT ELSEWHERE SPECIFIED\nOR INCLUDED", - "hsn_code": "33019060" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: AQUEOUS SOLUTIONS OF ESSENTIAL OILS: FLAVOURING ESSENCES, ALL\nTYPES, INCLUDING THOSE FOR LIQUORS", - "hsn_code": "33019071" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: AQUEOUS SOLUTIONS OF ESSENTIAL OILS: OTHER", - "hsn_code": "33019079" - }, - { - "description": "ESSENTIAL OILS (TERPENELESS OR NOT), INCLUDING CONCRETES AND ABSOLUTES; RESINOIDS;\nEXTRACTED OLEORESINS; CONCENTRATES OF ESSENTIAL OILS IN FATS, IN FIXED OILS, IN WAXES\nOR THE LIKE, OBTAINED BY ENFLEURAGE OR MACERATION; TERPENIC BY-PRODUCTS OF THE\nDETERPENATION OF ESSENTIAL OILS; AQUEOUS DISTILLATES AND AQUEOUS SOLUTIONS OF\nESSENTIAL OILS OTHER: OTHER", - "hsn_code": "33019090" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES(INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OFONE OR MORE OF THESE SUBSTANCES, OF A KIND USEDAS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OF A KIND USED IN THE FOOD OR DRINK INDUSTRIES:\nSYNTHETIC FLAVOURING ESSENCES", - "hsn_code": "33021010" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OF A KIND USED IN THE FOOD OR DRINK INDUSTRIES:\nOTHER", - "hsn_code": "33021090" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OTHER: MIXTURES OF AROMATIC CHEMICALS AND\nESSENTIAL OILS AS PERFUME BASE: SYNTHETIC PERFUMERY COMPOUNDS", - "hsn_code": "33029011" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OTHER: MIXTURES OF AROMATIC CHEMICALS AND\nESSENTIAL OILS AS PERFUME BASE: SYNTHETIC ESSENTIAL OIL", - "hsn_code": "33029012" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OTHER: MIXTURES OF AROMATIC CHEMICALS AND\nESSENTIAL OILS AS PERFUME BASE: OTHER", - "hsn_code": "33029019" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OTHER:ALEURITIC ACID", - "hsn_code": "33029020" - }, - { - "description": "MIXTURES OF ODORIFEROUS SUBSTANCES AND MIXTURES (INCLUDING ALCOHOLIC SOLUTIONS)\nWITH A BASIS OF ONE OR MORE OF THESE SUBSTANCES, OF A KIND USED AS RAW MATERIALS IN\nINDUSTRY; OTHER PREPARATIONS BASED ON ODORIFEROUS SUBSTANCES, OF A KIND USED FOR\nTHE MANUFACTURE OF BEVERAGES OTHER:OTHER", - "hsn_code": "33029090" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: EAU-DE-COLOGNE", - "hsn_code": "33030010" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: ROSE WATER", - "hsn_code": "33030020" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: KEORA WATER", - "hsn_code": "33030030" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: PERFUMES AND PERFUMERY\nCOMPOUNDS NOT CONTAINING SPIRIT (EXCLUDING AQUEOUS DISTILLATES)", - "hsn_code": "33030040" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: PERFUMES CONTAINING\nSPIRIT", - "hsn_code": "33030050" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: SPIRITUOUS TOILET\nPREPARATIONS NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "33030060" - }, - { - "description": "PERFUMES AND TOILET WATERS - PERFUMES AND TOILET WATERS: OTHER", - "hsn_code": "33030090" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS LIP MAKE-UP PREPARATIONS", - "hsn_code": "33041000" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS EYE MAKE-UP PREPARATIONS", - "hsn_code": "33042000" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS MANICURE OR PEDICURE PREPARATIONS", - "hsn_code": "33043000" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: POWDERS, WHETHER OR NOT COMPRESSED: FACE POWDERS", - "hsn_code": "33049110" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: POWDERS, WHETHER OR NOT COMPRESSED: TALCUM\nPOWDERS", - "hsn_code": "33049120" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: POWDERS, WHETHER OR NOT COMPRESSED: OTHER", - "hsn_code": "33049190" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER: FACE CREAMS", - "hsn_code": "33049910" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER NAIL POLISH OR LACQUERS", - "hsn_code": "33049920" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER MOISTURISING LOTION", - "hsn_code": "33049930" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER SINDUR, BINDI, KUMKUM", - "hsn_code": "33049940" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER TURMERIC PREPARATIONS", - "hsn_code": "33049950" - }, - { - "description": "BEAUTY OR MAKE-UP PREPARATIONS AND PREPARATIONS FOR THE CARE OF THE SKIN (OTHER\nTHAN MEDICAMENTS), INCLUDING SUNSCREEN OR SUNTAN PREPARATIONS; MANICURE OR\nPEDICURE PREPARATIONS OTHER: OTHER OTHER", - "hsn_code": "33049990" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR SHAMPOOS: CONTAINING SPIRIT", - "hsn_code": "33051010" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR SHAMPOOS: OTHER", - "hsn_code": "33051090" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR PREPARATIONS FOR PERMANENT WAVING OR\nSTRAIGHTENING", - "hsn_code": "33052000" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR HAIR LACQUERS", - "hsn_code": "33053000" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: HAIR OIL: PERFUMED", - "hsn_code": "33059011" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: HAIR OIL: OTHER", - "hsn_code": "33059019" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: BRILLIANTINES (SPIRITUOUS)", - "hsn_code": "33059020" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: HAIR CREAM", - "hsn_code": "33059030" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: HAIR DYES (NATURAL, HERBAL OR SYNTHETIC)", - "hsn_code": "33059040" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: HAIR FIXERS", - "hsn_code": "33059050" - }, - { - "description": "PREPARATIONS FOR USE ON THE HAIR OTHER: OTHER", - "hsn_code": "33059090" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND\nPOWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL\nPACKAGES DENTIFRICES: IN POWDER", - "hsn_code": "33061010" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND\nPOWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL\nPACKAGES DENTIFRICES: IN PASTE", - "hsn_code": "33061020" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND\nPOWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL\nPACKAGES DENTIFRICES: OTHER", - "hsn_code": "33061090" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND\nPOWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL\nPACKAGES YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS)", - "hsn_code": "33062000" - }, - { - "description": "PREPARATIONS FOR ORAL OR DENTAL HYGIENE, INCLUDING DENTURE FIXATIVE PASTES AND\nPOWDERS; YARN USED TO CLEAN BETWEEN THE TEETH (DENTAL FLOSS), IN INDIVIDUAL RETAIL\nPACKAGES OTHER", - "hsn_code": "33069000" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PRE-SHAVE, SHAVING OR AFTER-SHAVE\nPREPARATIONS: SHAVING CREAM", - "hsn_code": "33071010" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PRE-SHAVE, SHAVING OR AFTER-SHAVE\nPREPARATIONS: OTHER", - "hsn_code": "33071090" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PERSONAL DEODORANTS AND ANTI\nPERSPIRANTS", - "hsn_code": "33072000" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PERFUMED BATH SALTS AND OTHER BATH\nPREPARATIONS: BATH OIL (THAILAM)", - "hsn_code": "33073010" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PERFUMED BATH SALTS AND OTHER BATH\nPREPARATIONS: OTHER", - "hsn_code": "33073090" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PREPARATIONS FOR PERFUMING OR\nDEODORIZING ROOMS, INCLUDING ODORIFEROUS PREPARATIONS USED DURING RELIGIOUS\nRITES: AGARBATTI AND OTHER ODORIFEROUS PREPARATIONS WHICH OPERATE BY BURNING", - "hsn_code": "33074100" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES PREPARATIONS FOR PERFUMING OR\nDEODORIZING ROOMS, INCLUDING ODORIFEROUS PREPARATIONS USED DURING RELIGIOUS\nRITES: OTHER", - "hsn_code": "33074900" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES - OTHER: DEPILATORIES", - "hsn_code": "33079010" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES - OTHER: STERILE CONTACT LENS CARE\nSOLUTION", - "hsn_code": "33079020" - }, - { - "description": "PRE-SHAVE, SHAVING OR AFTER-SHAVE PREPARATIONS, PERSONAL DEODORANTS, BATH\nPREPARATIONS, DEPILATORIES AND OTHER PERFUMERY, COSMETIC OR TOILET PREPARATIONS,\nNOT ELSEWHERE SPECIFIED OR INCLUDED, PREPARED ROOM DEODORISERS, WHETHER OR NOT\nPERFUMED OR HAVING DISINFECTANT PROPERTIES - OTHER: OTHER", - "hsn_code": "33079090" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: FOR TOILET\nUSE (INCLUDING MEDICATED PRODUCTS): MEDICATED TOILET SOAPS", - "hsn_code": "34011110" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: FOR TOILET\nUSE (INCLUDING MEDICATED PRODUCTS): SHAVING SOAPS OTHER THAN SHAVING CREAM", - "hsn_code": "34011120" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: FOR TOILET\nUSE (INCLUDING MEDICATED PRODUCTS): OTHER", - "hsn_code": "34011190" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER: BARS\nAND BLOCKS OF NOT LESS THAN 500 GM IN WEIGHT: INDUSTRIAL SOAP", - "hsn_code": "34011911" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER: BARS\nAND BLOCKS OF NOT LESS THAN 500 GM IN WEIGHT: OTHER", - "hsn_code": "34011919" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER:\nFLAKES, CHIPS AND POWDER", - "hsn_code": "34011920" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER:\nTABLETS AND CAKES", - "hsn_code": "34011930" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER:\nHOUSEHOLD AND LAUNDRY SOAPS NOT ELSEWHERE SPECIFIED OR INCLUDED HOUSEHOLD\nSOAPS", - "hsn_code": "34011941" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER:\nHOUSEHOLD AND LAUNDRY SOAPS NOT ELSEWHERE SPECIFIED OR INCLUDED LAUNDRY SOAPS", - "hsn_code": "34011942" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP AND ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS, IN\nTHE FORM OF BARS, CAKES,MOULDED PIECES OR SHAPES, AND PAPER,WADDING, FELT AND\nNONWOVENS, IMPREGNATED,COATED OR COVERED WITH SOAP OR DETERGENT: OTHER: OTHER", - "hsn_code": "34011990" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT SOAP IN OTHER FORMS", - "hsn_code": "34012000" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING\nTHE SKIN, IN THE FORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE,WHETHER OR NOT\nCONTAINING SOAP : FOR TOILET USE (INCLUDING MEDICATED PRODUCTS): MEDICATED TOILET\nSOAPS", - "hsn_code": "34013011" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING\nTHE SKIN, IN THE FORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE,WHETHER OR NOT\nCONTAINING SOAP : FOR TOILET USE (INCLUDING MEDICATED PRODUCTS): SHAVING CREAM\nAND SHAVING GEL", - "hsn_code": "34013012" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING\nTHE SKIN, IN THE FORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE,WHETHER OR NOT\nCONTAINING SOAP : FOR TOILET USE (INCLUDING MEDICATED PRODUCTS): OTHER", - "hsn_code": "34013019" - }, - { - "description": "SOAP; ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR USE AS SOAP, IN THE\nFORM OF BARS,CAKES, MOULDED PIECES OR SHAPES, WHETHER OR NOT CONTAINING SOAP;\nORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING THE SKIN, IN THE\nFORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE, WHETHER OR NOT CONTAINING\nSOAP; PAPER, WADDING, FELT AND NONWOVENS, IMPREGNATED, COATED OR COVERED WITH\nSOAP OR DETERGENT ORGANIC SURFACE-ACTIVE PRODUCTS AND PREPARATIONS FOR WASHING\nTHE SKIN, IN THE FORM OF LIQUID OR CREAM AND PUT UP FOR RETAIL SALE,WHETHER OR NOT\nCONTAINING SOAP : OTHER", - "hsn_code": "34013090" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nORGANIC SURFACE-ACTIVE AGENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE: ANIONIC:\nSILICONE SURFACTANT", - "hsn_code": "34021110" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nORGANIC SURFACE-ACTIVE AGENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE: ANIONIC:\nOTHER", - "hsn_code": "34021190" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nORGANIC SURFACE-ACTIVE AGENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE: CATIONIC", - "hsn_code": "34021200" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nORGANIC SURFACE-ACTIVE AGENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE: NON-IONIC", - "hsn_code": "34021300" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nORGANIC SURFACE-ACTIVE AGENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE: OTHER", - "hsn_code": "34021900" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nPREPARATIONS PUT UP FOR RETAIL SALE: WASHING PREPARATIONS (INCLUDING AUXILIARY\nWASHING PREPARATIONS) AND CLEANING PREPARATIONS, HAVING A BASIS OF SOAP OR OTHER\nORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34022010" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nPREPARATIONS PUT UP FOR RETAIL SALE: CLEANING OR DEGREASING PREPARATIONS NOT\nHAVING A BASIS OF SOAP OR OTHER ORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34022020" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nPREPARATIONS PUT UP FOR RETAIL SALE: OTHER", - "hsn_code": "34022090" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: SYNTHETIC DETERGENTS: WASHING PREPARATIONS (INCLUDING AUXILIARY WASHING\nPREPARATIONS) AND CLEANING PREPARATIONS, HAVING A BASIS OF SOAP OR OTHER ORGANIC\nSURFACE ACTIVE AGENTS", - "hsn_code": "34029011" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: SYNTHETIC DETERGENTS: CLEANING OR DEGREASING PREPARATIONS NOT HAVING A\nBASIS OF SOAP OR OTHER ORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34029012" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: SYNTHETIC DETERGENTS: OTHER", - "hsn_code": "34029019" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: SULPHONATED OR SULPHATED OR OXIDIZED OR CHLORINATED CASTOR OIL;\nSULPHONATED OR SULPHATED OR OXIDIZED OR CHLORINATED FISH OIL; SULPHONATED OR\nSULPHATED OR OXIDIZED OR CHLORINATED SPERM OIL; SULPHONATED OR SULPHATED OR\nOXIDIZED OR CHLORINATED NEATS FOOT OIL", - "hsn_code": "34029020" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: PENETRATORS", - "hsn_code": "34029030" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WETTING AGENTS: WASHING PREPARATIONS (INCLUDING AUXILIARY WASHING\nPREPARATIONS) AND CLEANING PREPARATIONS, HAVING A BASIS OF SOAP OR OTHER ORGANIC\nSURFACE ACTIVE AGENTS", - "hsn_code": "34029041" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WETTING AGENTS: CLEANING OR DEGREASING PREPARATIONS NOT HAVING A BASIS OF\nSOAP OR OTHER ORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34029042" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WETTING AGENTS: OTHER", - "hsn_code": "34029049" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WASHING PREPARATIONS WHETHER OR NOT CONTAINING SOAP : WASHING\nPREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, HAVING A BASIS OF SOAP OR OTHER ORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34029051" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WASHING PREPARATIONS WHETHER OR NOT CONTAINING SOAP : CLEANING OR\nDEGREASING PREPARATIONS NOT HAVING A BASIS OF SOAP OR OTHER ORGANIC SURFACE\nACTIVE AGENTS", - "hsn_code": "34029052" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: WASHING PREPARATIONS WHETHER OR NOT CONTAINING SOAP : OTHER", - "hsn_code": "34029059" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: OTHER: WASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS)\nAND CLEANING PREPARATIONS, HAVING A BASIS OF SOAP OR OTHER ORGANIC SURFACE ACTIVE\nAGENTS", - "hsn_code": "34029091" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: OTHER: CLEANING OR DEGREASING PREPARATIONS NOT HAVING A BASIS OF SOAP OR\nOTHER ORGANIC SURFACE ACTIVE AGENTS", - "hsn_code": "34029092" - }, - { - "description": "ORGANIC SURFACE-ACTIVE AGENTS (OTHER THAN SOAP), SURFACE-ACTIVE PREPARATIONS,\nWASHING PREPARATIONS (INCLUDING AUXILIARY WASHING PREPARATIONS) AND CLEANING\nPREPARATIONS, WHETHER OR NOT CONTAINING SOAP, OTHER THAN THOSE OF HEADING 3401\nOTHER: OTHER: OTHER", - "hsn_code": "34029099" - }, - { - "description": "LUBRICATING PREPARATIONS (INCLUDING CUTTING-OIL PREPARATIONS, BOLT OR NUT RELEASE\nPREPARATIONS,ANTI-RUST OR ANTI-CORROSION PREPARATIONS AND MOULD RELEASE\nPREPARATIONS, BASED ON LUBRICANTS) AND PREPARATIONS OF A KIND USED FOR THE OIL OR\nGREASE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS, BUT\nEXCLUDING PREPARATIONS CONTAINING, AS BASIC CONSTITUENTS, 70 % OR MORE BY WEIGHT\nOF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS CONTAINING\nPETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS: PREPARATIONS FOR THE\nTREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS", - "hsn_code": "34031100" - }, - { - "description": "LUBRICATING PREPARATIONS (INCLUDING CUTTING-OIL PREPARATIONS, BOLT OR NUT RELEASE\nPREPARATIONS,ANTI-RUST OR ANTI-CORROSION PREPARATIONS AND MOULD RELEASE\nPREPARATIONS, BASED ON LUBRICANTS) AND PREPARATIONS OF A KIND USED FOR THE OIL OR\nGREASE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS, BUT\nEXCLUDING PREPARATIONS CONTAINING, AS BASIC CONSTITUENTS, 70 % OR MORE BY WEIGHT\nOF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS CONTAINING\nPETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS: OTHER", - "hsn_code": "34031900" - }, - { - "description": "LUBRICATING PREPARATIONS (INCLUDING CUTTING-OIL PREPARATIONS, BOLT OR NUT RELEASE\nPREPARATIONS,ANTI-RUST OR ANTI-CORROSION PREPARATIONS AND MOULD RELEASE\nPREPARATIONS, BASED ON LUBRICANTS) AND PREPARATIONS OF A KIND USED FOR THE OIL OR\nGREASE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS, BUT\nEXCLUDING PREPARATIONS CONTAINING, AS BASIC CONSTITUENTS, 70 % OR MORE BY WEIGHT\nOF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS OTHER:\nPREPARATIONS FOR THE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER\nMATERIALS", - "hsn_code": "34039100" - }, - { - "description": "LUBRICATING PREPARATIONS (INCLUDING CUTTING-OIL PREPARATIONS, BOLT OR NUT RELEASE\nPREPARATIONS,ANTI-RUST OR ANTI-CORROSION PREPARATIONS AND MOULD RELEASE\nPREPARATIONS, BASED ON LUBRICANTS) AND PREPARATIONS OF A KIND USED FOR THE OIL OR\nGREASE TREATMENT OF TEXTILE MATERIALS, LEATHER, FURSKINS OR OTHER MATERIALS, BUT\nEXCLUDING PREPARATIONS CONTAINING, AS BASIC CONSTITUENTS, 70 % OR MORE BY WEIGHT\nOF PETROLEUM OILS OR OF OILS OBTAINED FROM BITUMINOUS MINERALS OTHER: OTHER", - "hsn_code": "34039900" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OF CHEMICALLY MODIFIED LIGNITE", - "hsn_code": "34041000" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OF POLY (OXYETHYLENE) (POLYETHYLENE GLYCOL)", - "hsn_code": "34042000" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: SEALING WAX (INCLUDING BOTTLE SEALING\nWAX) IN STICKS, CAKES OR SIMILAR FORMS", - "hsn_code": "34049010" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: POLYETHYLENE WAX", - "hsn_code": "34049020" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: ARTIFICIAL WAXES (INCLUDING WATER\nSOLUBLE WAXES) PREPARED WAXES, NOT EMULSIFIED OR CONTAINING SOLVENTS: POLY\nBROMINATED BIPHENYLS", - "hsn_code": "34049031" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: ARTIFICIAL WAXES (INCLUDING WATER\nSOLUBLE WAXES) PREPARED WAXES, NOT EMULSIFIED OR CONTAINING SOLVENTS: POLY\nCHLORINATED BIPHENYLS", - "hsn_code": "34049032" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: ARTIFICIAL WAXES (INCLUDING WATER\nSOLUBLE WAXES) PREPARED WAXES, NOT EMULSIFIED OR CONTAINING SOLVENTS: POLY\nCHLORINATED TERPHENYLS", - "hsn_code": "34049033" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: ARTIFICIAL WAXES (INCLUDING WATER\nSOLUBLE WAXES) PREPARED WAXES, NOT EMULSIFIED OR CONTAINING SOLVENTS: OTHER", - "hsn_code": "34049039" - }, - { - "description": "ARTIFICIAL WAXES AND PREPARED WAXES OTHER: OTHER", - "hsn_code": "34049090" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 POLISHES, CREAMS AND SIMILAR PREPARATIONS FOR FOOTWEAR OR LEATHER", - "hsn_code": "34051000" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 POLISHES, CREAMS AND SIMILAR PREPARATIONS FOR THE MAINTENANCE OF\nWOODEN FURNITURE, FLOORS OR OTHER WOOD WORK", - "hsn_code": "34052000" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 POLISHES AND SIMILAR PREPARATIONS FOR COACH-WORK, OTHER THAN METAL\nPOLISHES", - "hsn_code": "34053000" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 SCOURING PASTES AND POWDERS AND OTHER", - "hsn_code": "34054000" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 OTHER: POLISHES AND COMPOSITIONS FOR APPLICATION TO METAL INCLUDING\nDIAMOND POLISHING POWDER OR PASTE", - "hsn_code": "34059010" - }, - { - "description": "POLISHES AND CREAMS, FOR FOOTWEAR, FURNITURE, FLOORS, COACHWORK, GLASS OR METAL,\nSCOURING PASTES AND POWDERS AND SIMILAR PREPARATIONS (WHETHER OR NOT IN THE\nFORM OF PAPER, WADDING, FELT, NONWOVENS,CELLULAR PLASTICS OR CELLULAR RUBBER,\nIMPREGNATED, COATED OR COVERED WITH SUCH PREPARATIONS), EXCLUDING WAXES OF\nHEADING 3404 OTHER: OTHER", - "hsn_code": "34059090" - }, - { - "description": "CANDLES, TAPERS AND THE LIKE CANDLES, TAPERS AND THE LIKE: CANDLES", - "hsn_code": "34060010" - }, - { - "description": "CANDLES, TAPERS AND THE LIKE CANDLES, TAPERS AND THE LIKE: OTHER", - "hsn_code": "34060090" - }, - { - "description": "MODELLING PASTES, INCLUDING THOSE PUT UP FOR CHILDRENS AMUSEMENT; PREPARATIONS\nKNOWN AS DENTAL WAX OR AS DENTAL IMPRESSION COMPOUNDS, PUT UP IN SETS, IN\nPACKINGS FOR RETAIL SALE OR IN PLATES, HORSESHOE SHAPES, STICKS OR SIMILAR FORMS;\nOTHER PREPARATIONS FOR USE IN DENTISTRY, WITH A BASIS OF PLASTER (OF CALCINED\nGYPSUM OR CALCIUM SULPHATE) MODELLING PASTES, INCLUDING THOSE PUT UP\nFORCHILDRENS AMUSEMENT; PREPARATIONS KNOWN AS DENTAL WAX OR AS DENTAL\nIMPRESSION COMPOUNDS, PUT UP IN SETS, IN PACKINGS FOR RETAIL SALE OR IN PLATES,\nHORSESHOE SHAPES,STICKS OR SIMILAR FORMS; OTHER PREPARATIONS FOR USE IN DENTISTRY,\nWITH A BASIS OF PLASTER (OF CALCINED GYPSUM OR CALCIUM SULPHATE): MODELLING\nPASTES, INCLUDING THOSE PUT UP FOR CHILDRENS AMUSEMENT", - "hsn_code": "34070010" - }, - { - "description": "MODELLING PASTES, INCLUDING THOSE PUT UP FOR CHILDRENS AMUSEMENT; PREPARATIONS\nKNOWN AS DENTAL WAX OR AS DENTAL IMPRESSION COMPOUNDS, PUT UP IN SETS, IN\nPACKINGS FOR RETAIL SALE OR IN PLATES, HORSESHOE SHAPES, STICKS OR SIMILAR FORMS;\nOTHER PREPARATIONS FOR USE IN DENTISTRY, WITH A BASIS OF PLASTER (OF CALCINED\nGYPSUM OR CALCIUM SULPHATE) MODELLING PASTES, INCLUDING THOSE PUT UP\nFORCHILDRENS AMUSEMENT; PREPARATIONS KNOWN AS DENTAL WAX OR AS DENTAL\nIMPRESSION COMPOUNDS, PUT UP IN SETS, IN PACKINGS FOR RETAIL SALE OR IN PLATES,\nHORSESHOE SHAPES,STICKS OR SIMILAR FORMS; OTHER PREPARATIONS FOR USE IN DENTISTRY,\nWITH A BASIS OF PLASTER (OF CALCINED GYPSUM OR CALCIUM SULPHATE): OTHER", - "hsn_code": "34070090" - }, - { - "description": "CASEIN, CASEINATES AND OTHER CASEIN DERIVATIVES; CASEIN GLUES CASEIN", - "hsn_code": "35011000" - }, - { - "description": "CASEIN, CASEINATES AND OTHER CASEIN DERIVATIVES; CASEIN GLUES OTHER", - "hsn_code": "35019000" - }, - { - "description": "ALBUMINS (INCLUDING CONCENTRATES OF TWO OR MORE WHEY PROTEINS, CONTAINING BY\nWEIGHT MORE THAN 80% WHEY PROTEINS, CALCULATED ON THE DRY MATTER), ALBUMINATES\nAND OTHER ALBUMIN DERIVATIVES EGG ALBUMIN: DRIED", - "hsn_code": "35021100" - }, - { - "description": "ALBUMINS (INCLUDING CONCENTRATES OF TWO OR MORE WHEY PROTEINS, CONTAINING BY\nWEIGHT MORE THAN 80% WHEY PROTEINS, CALCULATED ON THE DRY MATTER), ALBUMINATES\nAND OTHER ALBUMIN DERIVATIVES EGG ALBUMIN: OTHER", - "hsn_code": "35021900" - }, - { - "description": "ALBUMINS (INCLUDING CONCENTRATES OF TWO OR MORE WHEY PROTEINS, CONTAINING BY\nWEIGHT MORE THAN 80% WHEY PROTEINS, CALCULATED ON THE DRY MATTER), ALBUMINATES\nAND OTHER ALBUMIN DERIVATIVES MILK ALBUMIN, INCLUDING CONCENTRATES OF TWO OR\nMORE WHEY PROTEINS", - "hsn_code": "35022000" - }, - { - "description": "ALBUMINS (INCLUDING CONCENTRATES OF TWO OR MORE WHEY PROTEINS, CONTAINING BY\nWEIGHT MORE THAN 80% WHEY PROTEINS, CALCULATED ON THE DRY MATTER), ALBUMINATES\nAND OTHER ALBUMIN DERIVATIVES OTHER", - "hsn_code": "35029000" - }, - { - "description": "GELATIN [INCLUDING GELATIN IN RECTANGULAR (INCLUDING SQUARE) SHEETS, WHETHER OR\nNOT SURFACE-WORKED OR COLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES\nOF ANIMAL ORIGIN, EXCLUDING CASEIN GLUES OF HEADING 3501 GELATIN [INCLUDING GELATIN\nIN RECTANGULAR(INCLUDING SQUARE) SHEETS, WHETHER OR NOT SURFACE-WORKED OR\nCOLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES OF ANIMAL ORIGIN,\nEXCLUDING CAS EIN GLUES OF HEADING 3501: ISINGLASS", - "hsn_code": "35030010" - }, - { - "description": "GELATIN [INCLUDING GELATIN IN RECTANGULAR (INCLUDING SQUARE) SHEETS, WHETHER OR\nNOT SURFACE-WORKED OR COLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES\nOF ANIMAL ORIGIN, EXCLUDING CASEIN GLUES OF HEADING 3501 GELATIN [INCLUDING GELATIN\nIN RECTANGULAR(INCLUDING SQUARE) SHEETS, WHETHER OR NOT SURFACE-WORKED OR\nCOLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES OF ANIMAL ORIGIN,\nEXCLUDING CAS EIN GLUES OF HEADING 3501: GELATIN, EDIBLE GRADE AND NOT ELSEWHERE\nSPECIFIED OR INCLUDED", - "hsn_code": "35030020" - }, - { - "description": "GELATIN [INCLUDING GELATIN IN RECTANGULAR (INCLUDING SQUARE) SHEETS, WHETHER OR\nNOT SURFACE-WORKED OR COLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES\nOF ANIMAL ORIGIN, EXCLUDING CASEIN GLUES OF HEADING 3501 GELATIN [INCLUDING GELATIN\nIN RECTANGULAR(INCLUDING SQUARE) SHEETS, WHETHER OR NOT SURFACE-WORKED OR\nCOLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES OF ANIMAL ORIGIN,\nEXCLUDING CAS EIN GLUES OF HEADING 3501: GLUES DERIVED FROM BONES, HIDES AND\nSIMILAR ITEMS; FISH GLUES", - "hsn_code": "35030030" - }, - { - "description": "GELATIN [INCLUDING GELATIN IN RECTANGULAR (INCLUDING SQUARE) SHEETS, WHETHER OR\nNOT SURFACE-WORKED OR COLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES\nOF ANIMAL ORIGIN, EXCLUDING CASEIN GLUES OF HEADING 3501 GELATIN [INCLUDING GELATIN\nIN RECTANGULAR(INCLUDING SQUARE) SHEETS, WHETHER OR NOT SURFACE-WORKED OR\nCOLOURED] AND GELATIN DERIVATIVES; ISINGLASS; OTHER GLUES OF ANIMAL ORIGIN,\nEXCLUDING CAS EIN GLUES OF HEADING 3501: OTHER", - "hsn_code": "35030090" - }, - { - "description": "PEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED\nPEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED:\nPEPTONES", - "hsn_code": "35040010" - }, - { - "description": "PEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED\nPEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED:\nOTHER: ISOLATED SOYA PROTEIN", - "hsn_code": "35040091" - }, - { - "description": "PEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED\nPEPTONES AND THEIR DERIVATIVES; OTHER PROTEIN SUBSTANCES AND THEIR DERIVATIVES,\nNOT ELSEWHERE SPECIFIED OR INCLUDED; HIDE POWDER, WHETHER OR NOT CHROMED:\nOTHER: OTHERS", - "hsn_code": "35040099" - }, - { - "description": "DEXTRINS AND OTHER MODIFIED STARCHES (FOR EXAMPLE, PREGELATINISED OR ESTERIFIED\nSTARCHES); GLUES BASED ON STARCHES, OR ON DEXTRINS OR OTHER MODIFIED STARCHES\nDEXTRINS AND OTHER MODIFIED STARCHES: ESTERIFIED STARCHES", - "hsn_code": "35051010" - }, - { - "description": "DEXTRINS AND OTHER MODIFIED STARCHES (FOR EXAMPLE, PREGELATINISED OR ESTERIFIED\nSTARCHES); GLUES BASED ON STARCHES, OR ON DEXTRINS OR OTHER MODIFIED STARCHES\nDEXTRINS AND OTHER MODIFIED STARCHES: OTHER", - "hsn_code": "35051090" - }, - { - "description": "DEXTRINS AND OTHER MODIFIED STARCHES (FOR EXAMPLE, PREGELATINISED OR ESTERIFIED\nSTARCHES); GLUES BASED ON STARCHES, OR ON DEXTRINS OR OTHER MODIFIED STARCHES\nGLUES", - "hsn_code": "35052000" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1KG : PRODUCTS SUITABLE FOR USE AS GLUES\nOR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR ADHESIVES, NOT EXCEEDING A NET\nWEIGHT OF 1KG", - "hsn_code": "35061000" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG : OTHER: ADHESIVES BASED ON POLYMERS\nOF HEADINGS 3901 TO 3913 OR ON RUBBER: BASED ON LATEX, PHENOL FORMALDEHYDE (PF),\nUREA FORMALDEHYDE (UF) AND POLYVINYL ALCOHOL (PVA)", - "hsn_code": "35069110" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG : OTHER: ADHESIVES BASED ON POLYMERS\nOF HEADINGS 3901 TO 3913 OR ON RUBBER: OTHER", - "hsn_code": "35069190" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG : OTHER: OTHER: SYNTHETIC GLUE WITH\nPHENOL UREA OR CRESOL (WITH FORMALDEHYDE) AS THE MAIN COMPONENT", - "hsn_code": "35069910" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG : OTHER: OTHER: PREPARED GLUES AND\nOTHER PREPARED ADHESIVES NOT ELSEWHERE SPECIFIED OR INCLUDED: BASED ON STARCH,\nGUM, LATEX, PF, UF AND PVA", - "hsn_code": "35069991" - }, - { - "description": "PREPARED GLUES AND OTHER PREPARED ADHESIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPRODUCTS SUITABLE FOR USE AS GLUES OR ADHESIVES, PUT UP FOR RETAIL SALE AS GLUES OR\nADHESIVES, NOT EXCEEDING A NET WEIGHT OF 1 KG : OTHER: OTHER: PREPARED GLUES AND\nOTHER PREPARED ADHESIVES NOT ELSEWHERE SPECIFIED OR INCLUDED: OTHER", - "hsn_code": "35069999" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED RENNET AND\nCONCENTRATES THEREOF: MICROBIAL RENNET: ANIMAL RENNET", - "hsn_code": "35071011" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED RENNET AND\nCONCENTRATES THEREOF: MICROBIAL RENNET: OTHER", - "hsn_code": "35071019" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED RENNET AND\nCONCENTRATES THEREOF: OTHER: ANIMAL RENNET", - "hsn_code": "35071091" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED RENNET AND\nCONCENTRATES THEREOF: OTHER: OTHER", - "hsn_code": "35071099" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: INDUSTRIAL\nENZYMES (TEXTILE ASSISTANT)", - "hsn_code": "35079010" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: PANCRETIN\nPURE (EXCLUDING MEDICAMENT)", - "hsn_code": "35079020" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: PEPSIN\n(EXCLUDING MEDICAMENT)", - "hsn_code": "35079030" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: PECTIN\nESTERASES PURE", - "hsn_code": "35079040" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: PECTOLYTIC\nENZYME (PECTIMASE)", - "hsn_code": "35079050" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: OTHER\nENZYMES OF MICROBIAL ORIGIN: STREPTOKINASE", - "hsn_code": "35079061" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: OTHER\nENZYMES OF MICROBIAL ORIGIN: AMYLASES ENZYMES", - "hsn_code": "35079062" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: OTHER\nENZYMES OF MICROBIAL ORIGIN: OTHER", - "hsn_code": "35079069" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: ENZYMES FOR\nPHARMACEUTICAL USE, OTHER THAN STREPTOKINASE: PAPAIN, PURE, OF PHARMACEUTICAL\nGRADE", - "hsn_code": "35079071" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: ENZYMES FOR\nPHARMACEUTICAL USE, OTHER THAN STREPTOKINASE: OTHER", - "hsn_code": "35079079" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: OTHER:\nENZYMATIC PREPARATIONS CONTAINING FOOD STUFFS", - "hsn_code": "35079091" - }, - { - "description": "ENZYMES; PREPARED ENZYMES NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: OTHER:\nOTHER", - "hsn_code": "35079099" - }, - { - "description": "PROPELLANT POWDERS PROPELLANT POWDERS: BLASTING POWDER", - "hsn_code": "36010010" - }, - { - "description": "PROPELLANT POWDERS PROPELLANT POWDERS: GUN POWDER", - "hsn_code": "36010020" - }, - { - "description": "PROPELLANT POWDERS PROPELLANT POWDERS: OTHER", - "hsn_code": "36010090" - }, - { - "description": "PREPARED EXPLOSIVES, OTHER THAN PROPELLANT POWDERS PREPARED EXPLOSIVES, OTHER\nTHAN PROPELLANT POWDERS: INDUSTRIAL EXPLOSIVES", - "hsn_code": "36020010" - }, - { - "description": "PREPARED EXPLOSIVES, OTHER THAN PROPELLANT POWDERS PREPARED EXPLOSIVES, OTHER\nTHAN PROPELLANT POWDERS: OTHER", - "hsn_code": "36020090" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: SAFETY FUSES: FOR MINE BLASTING", - "hsn_code": "36030011" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: OTHER", - "hsn_code": "36030019" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: DETONATING FUSES", - "hsn_code": "36030020" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: PERCUSSION AND DETONATING CAPS: NONORDNANCE", - "hsn_code": "36030031" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: PERCUSSION AND DETONATING CAPS: OTHER", - "hsn_code": "36030039" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: IGNITERS: NONORDNANCE", - "hsn_code": "36030041" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: IGNITERS: OTHER", - "hsn_code": "36030049" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: ELECTRIC DETONATORS: CONTAINING EXPLOSIVES\nELECTRICALLY IGNITED, NONORDNANCE", - "hsn_code": "36030051" - }, - { - "description": "SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS; IGNITERS; ELECTRIC\nDETONATORS SAFETY FUSES; DETONATING FUSES; PERCUSSION OR DETONATING CAPS;\nIGNITERS; ELECTRIC DETONATORS: ELECTRIC DETONATORS: OTHER", - "hsn_code": "36030059" - }, - { - "description": "FIREWORKS, SIGNALLING FLARES, RAIN ROCKETS, FOG SIGNALS AND OTHER PYROTECHNIC\nARTICLES FIREWORKS", - "hsn_code": "36041000" - }, - { - "description": "FIREWORKS, SIGNALLING FLARES, RAIN ROCKETS, FOG SIGNALS AND OTHER PYROTECHNIC\nARTICLES OTHER: SHIP SIGNALS", - "hsn_code": "36049010" - }, - { - "description": "FIREWORKS, SIGNALLING FLARES, RAIN ROCKETS, FOG SIGNALS AND OTHER PYROTECHNIC\nARTICLES OTHER: OTHER", - "hsn_code": "36049090" - }, - { - "description": "MATCHES, OTHER THAN PYROTECHNIC ARTICLES OF HEADING 3604 MATCHES, OTHER THAN\nPYROTECHNIC ARTICLES OF HEADING 3604: SAFETY MATCHES", - "hsn_code": "36050010" - }, - { - "description": "MATCHES, OTHER THAN PYROTECHNIC ARTICLES OF HEADING 3604 MATCHES, OTHER THAN\nPYROTECHNIC ARTICLES OF HEADING 3604: OTHER", - "hsn_code": "36050090" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER LIQUID OR LIQUEFIED GAS FUELS IN\nCONTAINERS OF A KIND USED FOR FILLING OR REFILLING CIGARETTE OR SIMILAR LIGHTERS AND\nOF A CAPACITY NOT EXCEEDING 300 CM3", - "hsn_code": "36061000" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER OTHER: COMBUSTIBLE PREPARATIONS", - "hsn_code": "36069010" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER OTHER: OTHER: FERROCERIUM, IN ALL\nFORMS", - "hsn_code": "36069091" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER OTHER: OTHER: PYROPHORIC ALLOYS, IN\nALL FORMS", - "hsn_code": "36069092" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER OTHER: OTHER: DNPT (DINITROSO PENTA\nMETHYLENE TETRAMINE)", - "hsn_code": "36069093" - }, - { - "description": "FERRO-CERIUM AND OTHER PYROPHORIC ALLOYS IN ALL FORMS; ARTICLES OF COMBUSTIBLE\nMATERIALS AS SPECIFIED IN NOTE 2 TO THIS CHAPTER OTHER: OTHER: OTHERS", - "hsn_code": "36069099" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS FOR X-RAY: MEDICAL", - "hsn_code": "37011010" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS FOR X-RAY: OTHER", - "hsn_code": "37011090" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS INSTANT PRINT FILM", - "hsn_code": "37012000" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS OTHER PLATES AND FILM, WITH ANY SIDE EXCEEDING\n255 MM", - "hsn_code": "37013000" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS OTHER: FOR COLOUR PHOTOGRAPHY (POLYCHROME):\nCINEMATOGRAPHIC FILM", - "hsn_code": "37019110" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS OTHER: FOR COLOUR PHOTOGRAPHY (POLYCHROME):\nOTHER", - "hsn_code": "37019190" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS OTHER: OTHER: CINEMATOGRAPHIC FILM", - "hsn_code": "37019910" - }, - { - "description": "PHOTOGRAPHIC PLATES AND FILM IN THE FLAT, SENSITISED, UNEXPOSED, OF ANY MATERIAL\nOTHER THAN PAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT-FILM IN THE FLAT, SENSITISED,\nUNEXPOSED, WHETHER OR NOT IN PACKS OTHER: OTHER: OTHER", - "hsn_code": "37019990" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nFOR XRAY", - "hsn_code": "37021000" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nINSTANT PRINT FILM", - "hsn_code": "37022000" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: FOR COLOUR\nPHOTOGRAPHY (POLYCHROME): CINEMATOGRAPHIC FILM", - "hsn_code": "37023110" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: FOR COLOUR\nPHOTOGRAPHY (POLYCHROME): OTHER", - "hsn_code": "37023190" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: OTHER, WITH\nSILVER HALIDE EMULSION: CINEMATOGRAPHIC FILM", - "hsn_code": "37023210" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: OTHER, WITH\nSILVER HALIDE EMULSION: OTHER", - "hsn_code": "37023290" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: OTHER:\nCINEMATOGRAPHIC FILM", - "hsn_code": "37023910" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH NOT EXCEEDING 105 MM: OTHER: OTHER", - "hsn_code": "37023990" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH EXCEEDING 200 M, FOR COLOUR PHOTOGRAPHY\n(POLYCHROME): CINEMATOGRAPHIC FILM", - "hsn_code": "37024110" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH EXCEEDING 200 M, FOR COLOUR PHOTOGRAPHY\n(POLYCHROME): OTHER", - "hsn_code": "37024190" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH EXCEEDING 200 M, OTHER THAN FOR COLOUR\nPHOTOGRAPHY: PHOTOGRAPHIC FILM OF A WIDTH 620 MM IN ROLLS", - "hsn_code": "37024210" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH EXCEEDING 200 M, OTHER THAN FOR COLOUR\nPHOTOGRAPHY: CINEMATOGRAPHIC FILM", - "hsn_code": "37024220" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH EXCEEDING 200 M, OTHER THAN FOR COLOUR\nPHOTOGRAPHY: OTHER", - "hsn_code": "37024290" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH NOT EXCEEDING 200 M: PHOTOGRAPHIC FILMS (BLACK\nAND WHITE) OF A WIDTH 620 MM", - "hsn_code": "37024310" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH NOT EXCEEDING 200 M: CINEMATOGRAPHIC FILM", - "hsn_code": "37024320" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 610 MM AND OF A LENGTH NOT EXCEEDING 200 M: OTHER", - "hsn_code": "37024390" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 105 MM BUT NOT EXCEEDING 610 MM: PHOTOGRAPHIC FILMS OF A WIDTH 120\nMM IN ROLLS", - "hsn_code": "37024410" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 105 MM BUT NOT EXCEEDING 610 MM: CINEMATOGRAPHIC FILM", - "hsn_code": "37024420" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, WITHOUT PERFORATIONS, OF A WIDTH EXCEEDING 105 MM: OF A WIDTH\nEXCEEDING 105 MM BUT NOT EXCEEDING 610 MM: OTHER", - "hsn_code": "37024490" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH NOT EXCEEDING 16\nMM AND OF A LENGTH EXCEEDING 14 M: FINISHED ROLLS OF CINEMATOGRAPHIC POSITIVE", - "hsn_code": "37025210" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH NOT EXCEEDING 16\nMM AND OF A LENGTH EXCEEDING 14 M: OTHER CINEMATOGRAPHIC FILM", - "hsn_code": "37025220" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH NOT EXCEEDING 16\nMM AND OF A LENGTH EXCEEDING 14 M: OTHER", - "hsn_code": "37025290" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30 M, FOR SLIDES", - "hsn_code": "37025300" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30 M, OTHER THAN FOR SLIDES:\nFINISHED ROLLS OF CINEMATOGRAPHIC POSITIVE", - "hsn_code": "37025410" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30 M, OTHER THAN FOR SLIDES:\nOTHER CINEMATOGRAPHIC FILM", - "hsn_code": "37025420" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30 M, OTHER THAN FOR SLIDES:\nOTHER", - "hsn_code": "37025490" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH EXCEEDING 30 M: FINISHED ROLLS OF\nCINEMATOGRAPHIC POSITIVE", - "hsn_code": "37025510" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH EXCEEDING 30 M: OTHER CINEMATOGRAPHIC FILM", - "hsn_code": "37025520" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 16 MM BUT\nNOT EXCEEDING 35 MM AND OF A LENGTH EXCEEDING 30 M: OTHER", - "hsn_code": "37025590" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 35 MM:\nFINISHED ROLLS OF CINEMATOGRAPHIC POSITIVE", - "hsn_code": "37025610" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 35 MM:\nOTHER CINEMATOGRAPHIC FILM", - "hsn_code": "37025620" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPER-BOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER FILM, FOR COLOUR PHOTOGRAPHY (POLYCHROME): OF A WIDTH EXCEEDING 35 MM:\nOTHER", - "hsn_code": "37025690" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH NOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30M---\nCINEMATOGRAPHIC FILM----NOT EXCEEDING 16 MM", - "hsn_code": "37029611" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH NOT EXCEEDING 35 MM AND OF A LENGTH NOT EXCEEDING 30M---\nCINEMATOGRAPHIC FILM----OTHER", - "hsn_code": "37029619" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH NOT EXCEEDING 35 MM AND OF A LENGTH EXCEEDING 30 M ---\nCINEMATOGRAPHIC FILM----NOT EXCEEDING 16 MM", - "hsn_code": "37029711" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH NOT EXCEEDING 35 MM AND OF A LENGTH EXCEEDING 30 M ---\nCINEMATOGRAPHIC FILM----OTHER", - "hsn_code": "37029719" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH EXCEEDING 35 MM---CINEMATOGRAPHIC FILM", - "hsn_code": "37029810" - }, - { - "description": "PHOTOGRAPHIC FILM IN ROLLS, SENSITISED, UNEXPOSED, OF ANY MATERIAL OTHER THAN\nPAPER, PAPERBOARD OR TEXTILES; INSTANT PRINT FILM IN ROLLS, SENSITISED, UNEXPOSED\nOTHER--OF A WIDTH EXCEEDING 35 MM---OTHER", - "hsn_code": "37029890" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED IN ROLLS OF A\nWIDTH EXCEEDING 610 MM: PHOTOGRAPHIC PAPER OR PAPERBOARD", - "hsn_code": "37031010" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED IN ROLLS OF A\nWIDTH EXCEEDING 610 MM: TEXTILES", - "hsn_code": "37031020" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER, FOR\nCOLOUR PHOTOGRAPHY (POLYCHROME): PHOTOGRAPHIC PAPER OR PAPERBOARD", - "hsn_code": "37032010" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER, FOR\nCOLOUR PHOTOGRAPHY (POLYCHROME): TEXTILES", - "hsn_code": "37032020" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER:\nPHOTOGRAPHIC PAPER OR PAPERBOARD", - "hsn_code": "37039010" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER: TEXTILES", - "hsn_code": "37039020" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED PHOTOGRAPHIC\nPLATES, FILM, PAPER, PAPER BOARD AND TEXTILES, EXPOSED BUT NOT DEVELOPED:\nPHOTOGRAPHIC PAPER, OR PAPERBOARD", - "hsn_code": "37040010" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED PHOTOGRAPHIC\nPLATES, FILM, PAPER, PAPER BOARD AND TEXTILES, EXPOSED BUT NOT DEVELOPED:\nCINEMATOGRAPHIC PLATES AND FILM", - "hsn_code": "37040020" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED PHOTOGRAPHIC\nPLATES, FILM, PAPER, PAPER BOARD AND TEXTILES, EXPOSED BUT NOT DEVELOPED: SENSITISED\nTEXTILES", - "hsn_code": "37040030" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED PHOTOGRAPHIC\nPLATES, FILM, PAPER, PAPER BOARD AND TEXTILES, EXPOSED BUT NOT DEVELOPED: OTHER", - "hsn_code": "37040090" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED FOR OFFSET\nREPRODUCTION", - "hsn_code": "37051000" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED MICROFILMS", - "hsn_code": "37052000" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER:\nMICROFICHES", - "hsn_code": "37059010" - }, - { - "description": "PHOTOGRAPHIC PAPER, PAPERBOARD AND TEXTILES SENSITISED, UNEXPOSED OTHER: OTHER", - "hsn_code": "37059090" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nFEATURE FILMS: MADE WHOLLY IN BLACK AND WHITE AND OF A LENGTH NOT EXCEEDING 4,000\nM", - "hsn_code": "37061011" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nFEATURE FILMS: MADE WHOLLY IN BLACK AND WHITE AND OF A LENGTH EXCEEDING 4,000 M", - "hsn_code": "37061012" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nFEATURE FILMS: MADE WHOLLY OR PARTLY IN COLOUR AND OF A LENGTH NOT EXCEEDING\n4,000 M", - "hsn_code": "37061013" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nFEATURE FILMS: MADE WHOLLY OR PARTLY IN COLOUR AND OF A LENGTH EXCEEDING 4,000 M", - "hsn_code": "37061014" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nFEATURE FILMS: CHILDRENS FILMS CERTIFIED BY THE CENTRAL BOARD OF FILM CERTIFICATION\nTO BE CHILDRENS FILM", - "hsn_code": "37061015" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nDOCUMENTARY SHORTS, AND FILMS CERTIFIED AS SUCH BY THE CENTRAL BOARD OF FILM\nCERTIFICATION", - "hsn_code": "37061020" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE: NEWS\nREELS AND CLIPPINGS", - "hsn_code": "37061030" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nADVERTISEMENT SHORTS AND FILMS: MADE WHOLLY IN BLACK AND WHITE", - "hsn_code": "37061041" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nADVERTISEMENT SHORTS AND FILMS: MADE WHOLLY OR PARTLY IN COLOUR", - "hsn_code": "37061042" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER CHILDRENS FILM: PATCH PRINTS, INCLUDING LOGOS INTENDED EXCLUSIVELY FOR THE\nENTERTAINMENT OF CHILDREN", - "hsn_code": "37061051" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER CHILDRENS FILM: CHILDRENS FILM CERTIFIED BY THE CENTRAL BOARD OF FILMS\nCERTIFICATION TO BE CHILDRENS FILM", - "hsn_code": "37061052" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER CHILDRENS FILM: OTHER", - "hsn_code": "37061059" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nEDUCATIONAL SHORTS, AND FILMS: CERTIFIED AS PREDOMINANTLY EDUCATIONAL BY THE\nCENTRAL BOARD OF FILM CERTIFICATION", - "hsn_code": "37061061" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nEDUCATIONAL SHORTS, AND FILMS: PATCH PRINTS, INCLUDING LOGOS INTENDED EXCLUSIVELY\nFOR EDUCATIONAL PURPOSES", - "hsn_code": "37061062" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nEDUCATIONAL SHORTS, AND FILMS: TEACHING AIDS INCLUDING FILM STRIPS OF EDUCATIONAL\nNATURE", - "hsn_code": "37061063" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nEDUCATIONAL SHORTS, AND FILMS: OTHER", - "hsn_code": "37061069" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nSHORT FILMS NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "37061070" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER: AUDIO VISUAL NEWS OR AUDIO VISUAL VIEWS MATERIALS INCLUDING NEWS CLIPPINGS", - "hsn_code": "37061091" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER: MASTER POSITIVES, EXPOSED NEGATIVES, DUPES AND RUSH PRINTS AS ARE NOT\nCLEARED FOR PUBLIC EXHIBITIONS", - "hsn_code": "37061092" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OF A WIDTH OF 35 MM OR MORE:\nOTHER: OTHER", - "hsn_code": "37061099" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: FEATURE FILMS: MADE WHOLLY\nIN BLACK AND WHITE AND OF A LENGTH NOT EXCEEDING 4,000 M", - "hsn_code": "37069011" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: FEATURE FILMS: MADE WHOLLY\nIN BLACK AND WHITE AND OF A LENGTH EXCEEDING 4,000 M", - "hsn_code": "37069012" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: FEATURE FILMS: MADE WHOLLY\nOR PARTLY IN COLOUR AND OF A LENGTH NOT EXCEEDING 4,000 M", - "hsn_code": "37069013" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: FEATURE FILMS: MADE WHOLLY\nOR PARTLY IN COLOUR AND OF A LENGTH EXCEEDING 4,000 M", - "hsn_code": "37069014" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: FEATURE FILMS: CHILDRENS\nFILMS CERTIFIED BY THE CENTRAL BOARD OF FILM CERTIFICATION TO BE CHILDRENS FILM", - "hsn_code": "37069015" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: DOCUMENTARY SHOTS, AND\nFILMS CERTIFIED AS SUCH BY THE CENTRAL BOARD OF FILM CERTIFICATION", - "hsn_code": "37069020" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: NEWS REELS AND CLIPPINGS", - "hsn_code": "37069030" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: ADVERTISEMENT SHOTS AND\nFILMS: MADE WHOLLY IN BLACK AND WHITE", - "hsn_code": "37069041" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: ADVERTISEMENT SHOTS AND\nFILMS: MADE WHOLLY OR PARTLY IN COLOUR", - "hsn_code": "37069042" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER CHILDRENS FILM: PATCH\nPRINTS, INCLUDING LOGOS INTENDED EXCLUSIVELY FOR THE ENTERTAINMENT OF CHILDREN", - "hsn_code": "37069051" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER CHILDRENS FILM:\nCHILDRENS FILM CERTIFIED BY THE CENTRAL BOARD OF FILMS CERTIFICATION TO BE CHILDRENS\nFILM", - "hsn_code": "37069052" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER CHILDRENS FILM: OTHER", - "hsn_code": "37069059" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: EDUCATIONAL SHOTS, AND\nFILMS: CERTIFIED AS PREDOMINANTLY EDUCATIONAL BY THE CENTRAL BOARD OF FILM\nCERTIFICATION", - "hsn_code": "37069061" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: EDUCATIONAL SHOTS, AND\nFILMS: PATCH PRINTS, INCLUDING LOGOS INTENDED EXCLUSIVELY FOR EDUCATIONAL PURPOSES", - "hsn_code": "37069062" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: EDUCATIONAL SHOTS, AND\nFILMS: TEACHING AIDS INCLUDING FILM STRIPS OF EDUCATIONAL NATURE", - "hsn_code": "37069063" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: EDUCATIONAL SHOTS, AND\nFILMS: CERTIFIED AS PREDOMINANTLY EDUCATIONAL, BY CENTRAL BOARD OF FILM\nCERTIFICATION, OF WIDTH BELOW 30MM", - "hsn_code": "37069064" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: EDUCATIONAL SHOTS, AND\nFILMS: OTHER", - "hsn_code": "37069069" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: SHORT FILM NOT ELSEWHERE\nSPECIFIED", - "hsn_code": "37069070" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER: AUDIO VISUAL NEWS OR\nAUDIO VISUAL VIEWS MATERIALS INCLUDING NEWS CLIPPINGS", - "hsn_code": "37069091" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER: MASTER POSITIVES,\nEXPOSED NEGATIVES, DUPES AND RUSH PRINTS AS ARE NOT CLEARED FOR PUBLIC EXHIBITIONS", - "hsn_code": "37069092" - }, - { - "description": "CINEMATOGRAPHIC FILM, EXPOSED AND DEVELOPED, WHETHER OR NOT INCORPORATING\nSOUND TRACK OR CONSISTING ONLY OF SOUND TRACK OTHER: OTHER: OTHER", - "hsn_code": "37069099" - }, - { - "description": "CHEMICAL PREPARATIONS FOR PHOTOGRAPHIC USES (OTHER THAN VARNISHES, GLUES,\nADHESIVES AND SIMILAR PREPARATIONS); UNMIXED PRODUCTS FOR PHOTOGRAPHIC USES, PUT\nUP IN MEASURED PORTIONS OR PUT UP FOR RETAIL SALE IN A FORM READY FOR USE\nSENSITIZING EMULSIONS", - "hsn_code": "37071000" - }, - { - "description": "CHEMICAL PREPARATIONS FOR PHOTOGRAPHIC USES (OTHER THAN VARNISHES, GLUES,\nADHESIVES AND SIMILAR PREPARATIONS); UNMIXED PRODUCTS FOR PHOTOGRAPHIC USES, PUT\nUP IN MEASURED PORTIONS OR PUT UP FOR RETAIL SALE IN A FORM READY FOR USE OTHER:\nCHEMICAL PRODUCTS MIXED OR COMPOUNDED FOR PHOTOGRAPHIC USES (FOR EXAMPLE,\nDEVELOPERS AND FIXERS), WHETHER OR NOT IN BULK", - "hsn_code": "37079010" - }, - { - "description": "CHEMICAL PREPARATIONS FOR PHOTOGRAPHIC USES (OTHER THAN VARNISHES, GLUES,\nADHESIVES AND SIMILAR PREPARATIONS); UNMIXED PRODUCTS FOR PHOTOGRAPHIC USES, PUT\nUP IN MEASURED PORTIONS OR PUT UP FOR RETAIL SALE IN A FORM READY FOR USE OTHER:\nOTHER", - "hsn_code": "37079090" - }, - { - "description": "ARTIFICIAL GRAPHITE; COLLOIDAL OR SEMI-COLLOIDAL GRAPHITE; PREPARATIONS BASED ON\nGRAPHITE OR OTHER CARBON IN THE FORM OF PASTES, BLOCKS, PLATES OR OTHER SEMI\nMANUFACTURES ARTIFICIAL GRAPHITE", - "hsn_code": "38011000" - }, - { - "description": "ARTIFICIAL GRAPHITE; COLLOIDAL OR SEMI-COLLOIDAL GRAPHITE; PREPARATIONS BASED ON\nGRAPHITE OR OTHER CARBON IN THE FORM OF PASTES, BLOCKS, PLATES OR OTHER SEMI\nMANUFACTURES COLLOIDAL OR SEMICOLLOIDAL GRAPHITE", - "hsn_code": "38012000" - }, - { - "description": "ARTIFICIAL GRAPHITE; COLLOIDAL OR SEMI-COLLOIDAL GRAPHITE; PREPARATIONS BASED ON\nGRAPHITE OR OTHER CARBON IN THE FORM OF PASTES, BLOCKS, PLATES OR OTHER SEMI\nMANUFACTURES CARBONACEOUS PASTES FOR ELECTRODES AND SIMILAR PASTES FOR FURNACE\nLININGS", - "hsn_code": "38013000" - }, - { - "description": "ARTIFICIAL GRAPHITE; COLLOIDAL OR SEMI-COLLOIDAL GRAPHITE; PREPARATIONS BASED ON\nGRAPHITE OR OTHER CARBON IN THE FORM OF PASTES, BLOCKS, PLATES OR OTHER SEMI\nMANUFACTURES OTHER", - "hsn_code": "38019000" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING\nSPENT ANIMAL BLACK ACTIVATED CARBON", - "hsn_code": "38021000" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING\nSPENT ANIMAL BLACK OTHER: ACTIVATED NATURAL MINERAL PRODUCTS: ACTIVATED ALUMINA", - "hsn_code": "38029011" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING\nSPENT ANIMAL BLACK OTHER: ACTIVATED NATURAL MINERAL PRODUCTS: ACTIVATED BAUXITE", - "hsn_code": "38029012" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING\nSPENT ANIMAL BLACK OTHER: ACTIVATED NATURAL MINERAL PRODUCTS: OTHER", - "hsn_code": "38029019" - }, - { - "description": "ACTIVATED CARBON; ACTIVATED NATURAL MINERAL PRODUCTS; ANIMAL BLACK, INCLUDING\nSPENT ANIMAL BLACK OTHER: ANIMAL BLACK (FOR EXAMPLE BONE BLACK, IVORY BLACK),\nINCLUDING SPENT ANIMAL BLACK", - "hsn_code": "38029020" - }, - { - "description": "TALL OIL, WHETHER OR NOT REFINED", - "hsn_code": "38030000" - }, - { - "description": "RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR NOT CONCENTRATED,\nDESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN SULPHONATES, BUT EXCLUDING TALL\nOIL OF HEADING 3803 RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR\nNOT CONCENTRATED, DESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN\nSULPHONATES, BUT EXCLUDING TALL OIL OF HEADING 3803: LIGNIN SULPHONATES", - "hsn_code": "38040010" - }, - { - "description": "RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR NOT CONCENTRATED,\nDESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN SULPHONATES, BUT EXCLUDING TALL\nOIL OF HEADING 3803 RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR\nNOT CONCENTRATED, DESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN\nSULPHONATES, BUT EXCLUDING TALL OIL OF HEADING 3803: CONCENTRATED SULPHATE LYE", - "hsn_code": "38040020" - }, - { - "description": "RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR NOT CONCENTRATED,\nDESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN SULPHONATES, BUT EXCLUDING TALL\nOIL OF HEADING 3803 RESIDUAL LYES FOR THE MANUFACTURE OF WOOD PULP, WHETHER OR\nNOT CONCENTRATED, DESUGARED OR CHEMICALLY TREATED, INCLUDING LIGNIN\nSULPHONATES, BUT EXCLUDING TALL OIL OF HEADING 3803: OTHER", - "hsn_code": "38040090" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT GUM, WOOD OR SULPHATE TURPENTINE OILS: WOOD TURPENTINE OIL\nAND SPIRIT OF TURPENTINE", - "hsn_code": "38051010" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT GUM, WOOD OR SULPHATE TURPENTINE OILS: GUM TURPENTINE OIL", - "hsn_code": "38051020" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT GUM, WOOD OR SULPHATE TURPENTINE OILS: SULPHATE TURPENTINE\nOIL", - "hsn_code": "38051030" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT PINE OIL", - "hsn_code": "38052000" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT OTHER: TERPENIC OILS PRODUCED BY THE DISTILLATION OR OTHER\nTREATMENT OF CONIFEROUS WOODS", - "hsn_code": "38059010" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT OTHER: CRUDE DIPENTENE", - "hsn_code": "38059020" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT OTHER: SULPHITE TURPENTINE", - "hsn_code": "38059030" - }, - { - "description": "GUM, WOOD OR SULPHATE TURPENTINE AND OTHER TERPENIC OILS PRODUCED BY THE\nDISTILLATION OR OTHER TREATMENT OF CONIFEROUS WOODS; CRUDE DIPENTENE; SULPHITE\nTURPENTINE AND OTHER CRUDE PARA-CYMENE; PINE OIL CONTAINING ALPHA-TERPINEOL AS\nTHE MAIN CONSTITUENT OTHER: OTHER", - "hsn_code": "38059090" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS ROSIN AND RESIN ACIDS: GUM ROSIN", - "hsn_code": "38061010" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS ROSIN AND RESIN ACIDS: OTHER", - "hsn_code": "38061090" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS SALTS OF ROSIN, OF RESIN ACIDS OR OF DERIVATIVES OF ROSIN OR RESIN ACIDS, OTHER\nTHAN SALTS OF ROSIN ADDUCTS", - "hsn_code": "38062000" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS ESTER GUMS", - "hsn_code": "38063000" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS OTHER: RUN GUMS", - "hsn_code": "38069010" - }, - { - "description": "ROSIN AND RESIN ACIDS, AND DERIVATIVES THEREOF; ROSIN SPIRIT AND ROSIN OILS; RUN\nGUMS OTHER: OTHER", - "hsn_code": "38069090" - }, - { - "description": "WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE; WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE;WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH: WOOD TAR", - "hsn_code": "38070010" - }, - { - "description": "WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE; WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE;WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH: WOOD TAR OILS, WOOD CREOSOTE, WOOD NAPHTHA", - "hsn_code": "38070020" - }, - { - "description": "WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE; WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH WOOD TAR; WOOD TAR OILS; WOOD CREOSOTE;WOOD NAPHTHA; VEGETABLE PITCH;\nBREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN, RESIN ACIDS OR ON VEGETABLE\nPITCH: VEGETABLE PITCH, BREWERS PITCH AND SIMILAR PREPARATIONS BASED ON ROSIN,\nRESIN ACIDS OR VEGETABLE PITCH", - "hsn_code": "38070030" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nALDRIN", - "hsn_code": "38081011" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nALUMINIUM PHOSPHITE (FOR EXAMPLE PHOSTOXIN)", - "hsn_code": "38081012" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nCALCIUM CYANIDE", - "hsn_code": "38081013" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nCHLORDANE", - "hsn_code": "38081014" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nCHLORO BENZILATE", - "hsn_code": "38081015" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nD.D.V.P (DIMETHYL DICHLORO VINYL PHOSPHATE)", - "hsn_code": "38081016" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: ALDRIN,\nALUMINIUM PHOSPHITE, CALCIUM CYANIDE, CHLORDANE, CHLORO BENZILATE, DDVP,DDT:\nD.D.T. (EXCLUDING D.D.T. OF HEADING 2903 62)", - "hsn_code": "38081017" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: DIAGINAL", - "hsn_code": "38081021" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: HEPTACHLOR", - "hsn_code": "38081022" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: LINDANE", - "hsn_code": "38081023" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: METHYL BROMIDE", - "hsn_code": "38081024" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: PARATHION, METHYL", - "hsn_code": "38081025" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: DIMETHOATE, TECHNICAL GRADE", - "hsn_code": "38081026" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: DIAGINAL,\nHEPTACHLOR, LINDANE, METHYL BROMIDE, PARATHION METHYL, DIMETHOATE TECHNICAL,\nMALATHION: MALATHION", - "hsn_code": "38081027" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM ENDOSULPHAN, TECHNICAL GRADE", - "hsn_code": "38081031" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM QUINAL PHOS", - "hsn_code": "38081032" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM ISOPROTURON", - "hsn_code": "38081033" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM FENTHION", - "hsn_code": "38081034" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM CIPERMETHRIN, TECHNICAL GRADE", - "hsn_code": "38081035" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM ALLETHRIN", - "hsn_code": "38081036" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES:\nENDOSULPHAN TECHNICAL, QUINAL PHOS, ISOPROTURON, FENTHION, CIPERMETHRIN\nTECHNICAL, ALLETHRIN, SYNTHETIC PYRETHRUM SYNTHETIC PYRETHRUM", - "hsn_code": "38081037" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: OTHER:\nREPELLANTS FOR INSECTS SUCH AS FLIES, MOSQUITO", - "hsn_code": "38081091" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: OTHER: PAPER\nIMPREGNATED OR COATED WITH INSECTICIDE SUCH AS D.D.T. COATED PAPER", - "hsn_code": "38081092" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) INSECTICIDES: OTHER:\nOTHER", - "hsn_code": "38081099" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: MANEB", - "hsn_code": "38082010" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: SODIUM PENTA\nCHLOROPHENATE (SANTOBRITE)", - "hsn_code": "38082020" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: THIRAM\n(TETRAMETHYL THIURAM DISULPHIDE)", - "hsn_code": "38082030" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: ZINEB", - "hsn_code": "38082040" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: COPPER\nOXYCHLORIDE", - "hsn_code": "38082050" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) FUNGICIDES: OTHER", - "hsn_code": "38082090" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: CHLOROMETHYL PHENOZY ACETIC\nACID (M.C.P.A.)", - "hsn_code": "38083010" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: 2:4 DICHLOROPHENOZY ACETIC\nACID AND ITS ESTERS", - "hsn_code": "38083020" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: GIBBERELLIC ACID", - "hsn_code": "38083030" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: PLANTGROWTH REGULATORS", - "hsn_code": "38083040" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: WEEDICIDES AND WEED KILLING\nAGENTS", - "hsn_code": "38083050" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) HERBICIDES, ANTI\nSPROUTING PRODUCTS AND PLANT-GROWTH REGULATORS: OTHER", - "hsn_code": "38083090" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) DISINFECTANTS", - "hsn_code": "38084000" - }, - { - "description": "NSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-GOODS SPECIFIED IN SUB\nHEADING NOTE 1", - "hsn_code": "38085000" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) OTHER : PESTICIDES, NOT\nELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "38089010" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS) OTHER : OTHER", - "hsn_code": "38089090" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nALUMINIUM PHOSPHITE (FOR EXAMPLE PHOSTOXIN)", - "hsn_code": "38089111" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nCALCIUM CYANIDE", - "hsn_code": "38089112" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nD.D.V.P.(DIMETHYLE-DICHLORO-VINYL- PHOSPHATE)", - "hsn_code": "38089113" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nDIAGINAL", - "hsn_code": "38089121" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nMETHYL BROMIDE", - "hsn_code": "38089122" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nDIMETHOATE, TECHNICAL GRADE", - "hsn_code": "38089123" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nMELATHION", - "hsn_code": "38089124" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nENDOSULPHAN, TECHNICAL GRADE", - "hsn_code": "38089131" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nQUINAL PHOS", - "hsn_code": "38089132" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nISOPROTURON", - "hsn_code": "38089133" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nFENTHION", - "hsn_code": "38089134" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nCIPERMETHRIN, TECHNICAL GRADE", - "hsn_code": "38089135" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nALLETHRIN", - "hsn_code": "38089136" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:----\nSYNTHETIC PYRETHRUM", - "hsn_code": "38089137" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:---\nOTHER:----REPELLANTS FOR INSECTS SUCH AS FLIES, MOSQUITO", - "hsn_code": "38089191" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:---\nOTHER:----PAPER IMPREGNATED OR COATED WITH INSECTICIDES SUCH AS D.D.T. COATED", - "hsn_code": "38089192" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-OTHER-- INSECTICIDES:---\nOTHER:----OTHER", - "hsn_code": "38089199" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- MANEB", - "hsn_code": "38089210" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- SODIUM\nPENTA CHLOROPHENATE(SANTROBRITE)", - "hsn_code": "38089220" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- THIRAM\n(TETRAMETHYL THIURAM DISULPHIDE)", - "hsn_code": "38089230" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- ZINEB", - "hsn_code": "38089240" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- COPPER\nOXYCHLORIDE", - "hsn_code": "38089250" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE,\nSULPHURTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--: FUNGICIDES--- OTHER", - "hsn_code": "38089290" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS:--- CHLOROMETHYL PHENOZY ACETIC ACID\n(M.C.P.A)", - "hsn_code": "38089310" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS: --- 2:4 DICHLORO PHENOY ACETIC ACID AND ITS\nESTERS", - "hsn_code": "38089320" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS:---GIBBERELLIC ACID", - "hsn_code": "38089330" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS:--- PLANT GROWTH REGULATORS", - "hsn_code": "38089340" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS:--- WEEDICIDES AND WEED KILLING AGENTS", - "hsn_code": "38089350" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- HERBICIDES, ANTI-SPROUTING\nPRODUCTS AND PLANT-GROWTH REGULATORS:--- OTHER", - "hsn_code": "38089390" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)--DISINFECTANTS", - "hsn_code": "38089400" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- OTHER:--- PESTICIDES, NOT ELSE\nWHERE SPECIFIED OR INCLUDED", - "hsn_code": "38089910" - }, - { - "description": "INSECTICIDES, RODENTICIDES, FUNGICIDES, HERBICIDES, ANTI-SPROUTING PRODUCTS AND\nPLANT-GROWTH REGULATORS, DISINFECTANTS AND SIMILAR PRODUCTS, PUT UP IN FORMS OR\nPACKINGS FOR RETAIL SALE OR AS PREPARATIONS OR ARTICLES (FOR EXAMPLE, SULPHUR\nTREATED BANDS, WICKS AND CANDLES, AND FLY-PAPERS)-- OTHER:--- OTHER", - "hsn_code": "38089990" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED: WITH A BASIS OF AMYLACEOUS SUBSTANCES", - "hsn_code": "38091000" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nMORDANTING AGENTS", - "hsn_code": "38099110" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nDESIZING AGENTS", - "hsn_code": "38099120" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nDISPERSING AGENTS", - "hsn_code": "38099130" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nEMULSIFYING AGENTS", - "hsn_code": "38099140" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nHYDRO SULPHITE FORMALDEHYDE COMPOUND (RONGALITE OR FORMUSUL)", - "hsn_code": "38099150" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE\nASSISTANTSTEXTILE PRESERVATIVES", - "hsn_code": "38099160" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: TEXTILE ASSISTANTS\nWATER PROOFING AGENTS", - "hsn_code": "38099170" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: PREPARED TEXTILE\nGLAZINGS, DRESSINGS AND MORDANTS", - "hsn_code": "38099180" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE TEXTILE OR LIKE INDUSTRIES: OTHER", - "hsn_code": "38099190" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE PAPER OR LIKE INDUSTRIES", - "hsn_code": "38099200" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE LEATHER OR LIKE INDUSTRIES : FATTY OIL OR PULL UP\nOIL", - "hsn_code": "38099310" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE LEATHER OR LIKE INDUSTRIES : OTHER", - "hsn_code": "38099390" - }, - { - "description": "FINISHING AGENTS, DYE CARRIERS TO ACCELERATE THE DYEING OR FIXING OF DYE-STUFFS AND\nOTHER PRODUCTS AND PREPARATIONS (FOR EXAMPLE, DRESSINGS AND MORDANTS), OF A KIND\nUSED IN THE TEXTILE, PAPER, LEATHER OR LIKE INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED OTHER: OF A KIND USED IN THE LEATHER OR LIKE INDUSTRIES : OTHER", - "hsn_code": "38099900" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS\nFOR SOLDERING, BRAZING OR WELDING; SOLDERING, BRAZING OR WELDING POWDERS AND\nPASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS\nCORES OR COATINGS FOR WELDING ELECTRODES OR RODS PICKLING PREPARATIONS FOR METAL\nSURFACES;SOLDERING, BRAZING OR WELDING POWDERS AND PASTESCONSISTING OF METAL\nAND OTHER MATERIALS: PICKLING PREPARATIONS AND OTHER SOLDERING, BRAZING OR\nWELDING POWDERS OR PASTES", - "hsn_code": "38101010" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS\nFOR SOLDERING, BRAZING OR WELDING; SOLDERING, BRAZING OR WELDING POWDERS AND\nPASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS\nCORES OR COATINGS FOR WELDING ELECTRODES OR RODS PICKLING PREPARATIONS FOR METAL\nSURFACES;SOLDERING, BRAZING OR WELDING POWDERS AND PASTESCONSISTING OF METAL\nAND OTHER MATERIALS: THERMITE PORTION FOR WELDING (ALUMINA THERMIC HEAT\nGENERATORS)", - "hsn_code": "38101020" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS\nFOR SOLDERING, BRAZING OR WELDING; SOLDERING, BRAZING OR WELDING POWDERS AND\nPASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS\nCORES OR COATINGS FOR WELDING ELECTRODES OR RODS PICKLING PREPARATIONS FOR METAL\nSURFACES;SOLDERING, BRAZING OR WELDING POWDERS AND PASTESCONSISTING OF METAL\nAND OTHER MATERIALS: OTHER", - "hsn_code": "38101090" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS\nFOR SOLDERING, BRAZING OR WELDING; SOLDERING, BRAZING OR WELDING POWDERS AND\nPASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS\nCORES OR COATINGS FOR WELDING ELECTRODES OR RODS OTHER PREPARATIONS OF A KIND\nUSED AS CORES OR COATINGS FOR WELDING ELECTRODES AND RODS", - "hsn_code": "38109010" - }, - { - "description": "PICKLING PREPARATIONS FOR METAL SURFACES; FLUXES AND OTHER AUXILIARY PREPARATIONS\nFOR SOLDERING, BRAZING OR WELDING; SOLDERING, BRAZING OR WELDING POWDERS AND\nPASTES CONSISTING OF METAL AND OTHER MATERIALS; PREPARATIONS OF A KIND USED AS\nCORES OR COATINGS FOR WELDING ELECTRODES OR RODS OTHER OTHER", - "hsn_code": "38109090" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS,\nANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS\n(INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL\nOILS ANTI-KNOCK PREPARATIONS: BASED ON LEAD COMPOUNDS", - "hsn_code": "38111100" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS,\nANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS\n(INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL\nOILS ANTI-KNOCK PREPARATIONS: OTHER", - "hsn_code": "38111900" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS,\nANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS\n(INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL\nOILS ADDITIVES FOR LUBRICATING OILS: CONTAINING PETROLEUM OILS OR OILS OBTAINED\nFROM BITUMINOUS MINERALS", - "hsn_code": "38112100" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS,\nANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS\n(INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL\nOILS ADDITIVES FOR LUBRICATING OILS: OTHER", - "hsn_code": "38112900" - }, - { - "description": "ANTI-KNOCK PREPARATIONS, OXIDATION INHIBITORS, GUM INHIBITORS, VISCOSITY IMPROVERS,\nANTI-CORROSIVE PREPARATIONS AND OTHER PREPARED ADDITIVES, FOR MINERAL OILS\n(INCLUDING GASOLINE) OR FOR OTHER LIQUIDS USED FOR THE SAME PURPOSES AS MINERAL\nOILS ADDITIVES FOR LUBRICATING OILS: OTHER", - "hsn_code": "38119000" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS PREPARED RUBBER ACCELERATORS", - "hsn_code": "38121000" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS:\nPHTHALATE PLASTICISERS", - "hsn_code": "38122010" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS:\nOTHER", - "hsn_code": "38122090" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS: ANTI-OXIDANTS FOR RUBBER", - "hsn_code": "38123010" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS: SOFTENERS FOR RUBBER", - "hsn_code": "38123020" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS: VULCANISING AGENTS FOR RUBBER", - "hsn_code": "38123030" - }, - { - "description": "PREPARED RUBBER ACCELERATORS; COMPOUND PLASTICISERS FOR RUBBER OR PLASTICS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS ANTI-OXIDISING PREPARATIONS AND OTHER COMPOUND\nSTABILISERS FOR RUBBER OR PLASTICS: OTHER", - "hsn_code": "38123090" - }, - { - "description": "CHARGES FOR FIRE EXTINGUISHERS; PREPARATIONS AND CHARGED FIRE-EXTINGUISHING\nGRENADES", - "hsn_code": "38130000" - }, - { - "description": "ORGANIC COMPOSITE SOLVENTS AND THINNERS, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPREPARED PAINT OR VARNISH REMOVERS ORGANIC COMPOSITE SOLVENTS AND THINNERS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; PREPARED PAINT OR VARNISH REMOVERS: ORGANIC\nCOMPOSITE SOLVENTS AND THINNERS, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "38140010" - }, - { - "description": "ORGANIC COMPOSITE SOLVENTS AND THINNERS, NOT ELSEWHERE SPECIFIED OR INCLUDED;\nPREPARED PAINT OR VARNISH REMOVERS ORGANIC COMPOSITE SOLVENTS AND THINNERS, NOT\nELSEWHERE SPECIFIED OR INCLUDED; PREPARED PAINT OR VARNISH REMOVERS: PREPARED\nPAINT OR VARNISH REMOVERS", - "hsn_code": "38140020" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT\nELSEWHERE SPECIFIED OR INCLUDED SUPPORTED CATALYSTS: WITH NICKEL OR NICKEL\nCOMPOUNDS AS THE ACTIVE SUBSTANCE", - "hsn_code": "38151100" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT\nELSEWHERE SPECIFIED OR INCLUDED SUPPORTED CATALYSTS: WITH PRECIOUS METAL OR\nPRECIOUS METAL COMPOUNDS AS THE ACTIVE SUBSTANCE: PLATINUM OR PALLADIUM\nCATALYSTS WITH A BASE OF ACTIVATED CARBON", - "hsn_code": "38151210" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT\nELSEWHERE SPECIFIED OR INCLUDED SUPPORTED CATALYSTS: WITH PRECIOUS METAL OR\nPRECIOUS METAL COMPOUNDS AS THE ACTIVE SUBSTANCE: OTHER", - "hsn_code": "38151290" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT\nELSEWHERE SPECIFIED OR INCLUDED SUPPORTED CATALYSTS: OTHER", - "hsn_code": "38151900" - }, - { - "description": "REACTION INITIATORS, REACTION ACCELERATORS AND CATALYTIC PREPARATIONS, NOT\nELSEWHERE SPECIFIED OR INCLUDED OTHER", - "hsn_code": "38159000" - }, - { - "description": "REFRACTORY CEMENTS, MORTARS, CONCRETES AND SIMILAR COMPOSITIONS, OTHER THAN\nPRODUCTS OF HEADING 3801", - "hsn_code": "38160000" - }, - { - "description": "MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE OF HEADING\n2707 OR 2902 MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE\nOF HEADING 2707 OR 2902: MIXED ALKYLBENZENES: LINEAR ALKYLBENZENES", - "hsn_code": "38170011" - }, - { - "description": "MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE OF HEADING\n2707 OR 2902 MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE\nOF HEADING 2707 OR 2902: MIXED ALKYLBENZENES: OTHER", - "hsn_code": "38170019" - }, - { - "description": "MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE OF HEADING\n2707 OR 2902 MIXED ALKYLBENZENES AND MIXED ALKYLNAPHTHALENES, OTHER THAN THOSE\nOF HEADING 2707 OR 2902: MIXED ALKYLBENZENES: MIXED ALKYLNAPHTHALENES", - "hsn_code": "38170020" - }, - { - "description": "CHEMICAL ELEMENTS DOPED FOR USE IN ELECTRONICS, IN THE FORM OF DISCS, WAFERS OR\nSIMILAR FORMS; CHEMICAL COMPOUNDS DOPED FOR USE IN ELECTRONICS CHEMICAL\nELEMENTS DOPED FOR USE IN ELECTRONICS, IN THE FORM OF DISCS, WAFERS OR SIMILAR\nFORMS; CHEMICAL COMPOUNDS DOPED FOR USE IN ELECTRONICS: UNDEFUSED SILICON\nWAFERS", - "hsn_code": "38180010" - }, - { - "description": "CHEMICAL ELEMENTS DOPED FOR USE IN ELECTRONICS, IN THE FORM OF DISCS, WAFERS OR\nSIMILAR FORMS; CHEMICAL COMPOUNDS DOPED FOR USE IN ELECTRONICS CHEMICAL\nELEMENTS DOPED FOR USE IN ELECTRONICS, IN THE FORM OF DISCS, WAFERS OR SIMILAR\nFORMS; CHEMICAL COMPOUNDS DOPED FOR USE IN ELECTRONICS: OTHER", - "hsn_code": "38180090" - }, - { - "description": "HYDRAULIC BRAKE FLUIDS AND OTHER PREPAREDLIQUIDS FOR HYDRAULIC TRANSMISSION, NOT\nCONTAINING OR CONTAINING LESS THAN 70% BY WEIGHT OF PETROLEUM OILS OR OILS\nOBTAINED FROM BITUMINOUS MINERALS HYDRAULIC BRAKE FLUIDS", - "hsn_code": "38190010" - }, - { - "description": "HYDRAULIC BRAKE FLUIDS AND OTHER PREPAREDLIQUIDS FOR HYDRAULIC TRANSMISSION, NOT\nCONTAINING OR CONTAINING LESS THAN 70% BY WEIGHT OF PETROLEUM OILS OR OILS\nOBTAINED FROM BITUMINOUS MINERALS OTHER", - "hsn_code": "38190090" - }, - { - "description": "ANTI-FREEZING PREPARATIONS AND PREPARED DE-ICING FLUIDS", - "hsn_code": "38200000" - }, - { - "description": "PREPARED CULTURE MEDIA FOR DEVELOPMENT OF MICRO-ORGANISMS", - "hsn_code": "38210000" - }, - { - "description": "DIAGNOSTIC OR LABORATORY REAGENTS ON A BACKING, PREPARED DIAGNOSTIC OR\nLABORATORY REAGENTS WHETHER OR NOT ON A BACKING, OTHER THAN THOSE OF HEADING\n3002 OR 3006; CERTIFIED REFERENCE MATERIALS DIAGNOSTIC OR LABORATORY REAGENTS ON A\nBACKING, PREPARED DIAGNOSTIC OR LABORATORY REAGENTS WHETHER OR NOT ON A\nBACKING, OTHER THAN THOSE OF HEADING 3002 OR 3006; CERTIFIED REFERENCE MATERIALS:\nFOR MEDICAL DIAGNOSIS: PREGNANCY CONFIRMATION REAGENTS", - "hsn_code": "38220011" - }, - { - "description": "DIAGNOSTIC OR LABORATORY REAGENTS ON A BACKING, PREPARED DIAGNOSTIC OR\nLABORATORY REAGENTS WHETHER OR NOT ON A BACKING, OTHER THAN THOSE OF HEADING\n3002 OR 3006; CERTIFIED REFERENCE MATERIALS DIAGNOSTIC OR LABORATORY REAGENTS ON A\nBACKING, PREPARED DIAGNOSTIC OR LABORATORY REAGENTS WHETHER OR NOT ON A\nBACKING, OTHER THAN THOSE OF HEADING 3002 OR 3006; CERTIFIED REFERENCE MATERIALS:\nFOR MEDICAL DIAGNOSIS: REAGENTS FOR DIAGNOSING AIDS", - "hsn_code": "38220012" - }, - { - "description": "DIAGNOSTIC OR LABORATORY REAGENTS ON A BACKING, PREPARED DIAGNOSTIC OR\nLABORATORY REAGENTS WHETHER OR NOT ON A BACKING, OTHER THAN THOSE OF HEADING\n3002 OR 3006; CERTIFIED REFERENCE MATERIALS DIAGNOSTIC OR LABORATORY REAGENTS ON A\nBACKING, PREPARED DIAGNOSTIC OR LABORATORY REAGENTS WHETHER OR NOT ON A\nBACKING, OTHER THAN THOSE OF HEADING 3002 OR 3006; CERTIFIED REFERENCE MATERIALS:\nFOR MEDICAL DIAGNOSIS: OTHER", - "hsn_code": "38220019" - }, - { - "description": "DIAGNOSTIC OR LABORATORY REAGENTS ON A BACKING, PREPARED DIAGNOSTIC OR\nLABORATORY REAGENTS WHETHER OR NOT ON A BACKING, OTHER THAN THOSE OF HEADING\n3002 OR 3006; CERTIFIED REFERENCE MATERIALS DIAGNOSTIC OR LABORATORY REAGENTS ON A\nBACKING, PREPARED DIAGNOSTIC OR LABORATORY REAGENTS WHETHER OR NOT ON A\nBACKING, OTHER THAN THOSE OF HEADING 3002 OR 3006; CERTIFIED REFERENCE MATERIALS:\nOTHER", - "hsn_code": "38220090" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: STEARIC\nACID: PALM STEARIN: CRUDE", - "hsn_code": "38231111" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: STEARIC\nACID: PALM STEARIN: RBD", - "hsn_code": "38231112" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: STEARIC\nACID: PALM STEARIN: OTHER", - "hsn_code": "38231119" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: STEARIC\nACID: OTHER STEARIC ACID OR STEARIN", - "hsn_code": "38231190" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: OLEIC ACID", - "hsn_code": "38231200" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: TALL OIL\nFATTY ACIDS", - "hsn_code": "38231300" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING: OTHER", - "hsn_code": "38231900" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL FATTY ALCOHOLS: CETYL ALCOHOL", - "hsn_code": "38237010" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL FATTY ALCOHOLS: LAURYL ALCOHOL", - "hsn_code": "38237020" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL FATTY ALCOHOLS: OLEYL ALCOHOL", - "hsn_code": "38237030" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL FATTY ALCOHOLS: STEARYL ALCOHOL", - "hsn_code": "38237040" - }, - { - "description": "INDUSTRIAL MONOCARBOXYLIC FATTY ACIDS; ACID OILS FROM REFINING; INDUSTRIAL FATTY\nALCOHOLS INDUSTRIAL FATTY ALCOHOLS: OTHER", - "hsn_code": "38237090" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED PREPARED\nBINDERS FOR FOUNDRY MOULDS OR CORES", - "hsn_code": "38241000" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED NAPHTHENIC\nACIDS, THEIR WATER-INSOLUBLE SALTS AND THEIR ESTERS: COPPER NAPHTHENATE", - "hsn_code": "38242010" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED NAPHTHENIC\nACIDS, THEIR WATER-INSOLUBLE SALTS AND THEIR ESTERS: NAPHTHENIC ACIDS", - "hsn_code": "38242020" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED NAPHTHENIC\nACIDS, THEIR WATER-INSOLUBLE SALTS AND THEIR ESTERS: OTHER", - "hsn_code": "38242090" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED : NON\nAGGLOMERATED METAL CARBIDES MIXED TOGETHER OR WITH METALLIC BINDERS", - "hsn_code": "38243000" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED PREPARED\nADDITIVES FOR CEMENTS, MORTARS OR CONCRETES: DAMP PROOF OR WATER PROOF\nCOMPOUNDS", - "hsn_code": "38244010" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED PREPARED\nADDITIVES FOR CEMENTS, MORTARS OR CONCRETES : OTHER", - "hsn_code": "38244090" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nREFRACTORY MORTARS AND CONCRETES : CONCRETES READY TO USE KNOWN AS READY- MIX\nCONCRETE (RMC)", - "hsn_code": "38245010" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nREFRACTORY MORTARS AND CONCRETES : OTHER", - "hsn_code": "38245090" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED SORBITOL\nOTHER THAN THAT OF SUB-HEADING 2905 44 : IN AQUEOUS SOLUTION", - "hsn_code": "38246010" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- SORBITOL\nOTHER THAN THAT OF SUB-HEADING 2905 44 :--- OTHER", - "hsn_code": "38246090" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nCHLOROFLUOROCARBONS (CFCS), WHETHER OR NOT CONTAINING\nHYDROCHLOROFLUOROCARBONS(HCFCS), PERFLUOROCARBONS (PFCS) OR\nHYDROFLUOROCARBONS(HFCS)", - "hsn_code": "38247100" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED MIXTURES\nCONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS CONTAINING TWO\nOR MORE DIFFERENT HALOGENS :CONTAINING ACYCLIC HYDROCARBONS PERHALOGENATED\nONLY WITH FLUORINE AND CHLORINE: CONTAINING OZONE DEPLETING SUBSTANCES", - "hsn_code": "38247110" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED MIXTURES\nCONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS CONTAINING TWO\nOR MORE DIFFERENT HALOGENS :CONTAINING ACYCLIC HYDROCARBONS PERHALOGENATED\nONLY WITH FLUORINE AND CHLORINE: OTHER", - "hsn_code": "38247190" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nBROMOCHLORODIFLUOROMETHANE, BROMOTRIFLUOROMETHANE OR DIBROMOTETRAFLUORO\nETHANES", - "hsn_code": "38247200" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nHYDROBROMOFLUOROCARBONS(HBFCS)", - "hsn_code": "38247300" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nHYDROCHLOROFLUOROCARBONS(HCFCS), WHETHER OR NOT CONTAINING\nPERFLUOROCARBONS(PFCS) OR HYDROFLUOROCARBONS (HFCS), BUT NOT CONTAINING\nCHLOROFLUOROCARBONS(CFCS)", - "hsn_code": "38247400" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nCARBON TETRACHLORIDE", - "hsn_code": "38247500" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\n1,1,1-TRICHLOROETHANE (METHYL CHLOROFORM)", - "hsn_code": "38247600" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nBROMOMETHANE (METHYL BROMIDE) OR BROMOCHLOROMETHANE", - "hsn_code": "38247700" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- CONTAINING\nPERFLUOROCARBONS (PFCS) OR HYDROFLUOROCARBONS (HFCS), BUT NOT CONTAINING\nCHLOROFLUOROCARBONS (CFCS)OR HYDROCHLOROFLUOROCARBONS (HCFCS)", - "hsn_code": "38247800" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES\nCONTAINING HALOGENATED DERIVATIVES OF METHANE, ETHANE OR PROPANE:-- OTHER", - "hsn_code": "38247900" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED MIXTURES\nCONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS CONTAINING TWO\nOR MORE DIFFERENT HALOGENS OTHER: :CONTAINING OZONE DEPLETING SUBSTANCES", - "hsn_code": "38247910" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED MIXTURES\nCONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS CONTAINING TWO\nOR MORE DIFFERENT HALOGENS OTHER: :OTHER", - "hsn_code": "38247990" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES AND\nPREPARATIONS CONTAINING OXIRANE (ETHYLENE OXIDE), POLYBROMINATED BIPHENYLS\n(PBBS), POLYCHLORINATED BIPHENYLS (PCBS), POLYCHLORINATED TERPHENYLS (PCTS) OR TRIS\n(2,3-DIBROMOPROPYL) PHOSPHATE:-- CONTAINING OXIRANE (ETHYLENE OXIDE)", - "hsn_code": "38248100" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES AND\nPREPARATIONS CONTAINING OXIRANE (ETHYLENE OXIDE), POLYBROMINATED BIPHENYLS\n(PBBS), POLYCHLORINATED BIPHENYLS (PCBS), POLYCHLORINATED TERPHENYLS (PCTS) OR TRIS\n(2,3-DIBROMOPROPYL) PHOSPHATE:-- CONTAINING POLYCHLORINATED BIPHENYLS (PCBS),\nPOLYCHLORINATED TERPHENYLS (PCTS) OR POLYBROMINATED BIPHENYLS (PBBS)", - "hsn_code": "38248200" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED- MIXTURES AND\nPREPARATIONS CONTAINING OXIRANE (ETHYLENE OXIDE), POLYBROMINATED BIPHENYLS\n(PBBS), POLYCHLORINATED BIPHENYLS (PCBS), POLYCHLORINATED TERPHENYLS (PCTS) OR TRIS\n(2,3-DIBROMOPROPYL) PHOSPHATE:-- CONTAINING TRIS (2,3-DIBROMOPROPYL) PHOSPHATE", - "hsn_code": "38248300" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS: AMMONIACAL GAS LIQUORS AND SPENT OXIDE\nPRODUCED IN COAL GAS PURIFICATION", - "hsn_code": "38249011" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS: CASE HARDENING COMPOUND", - "hsn_code": "38249012" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS HEAT TRANSFER SALTS", - "hsn_code": "38249013" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS MIXTURE OF DIPHENYL AND DIPHENYL OXIDE AS HEAT\nTRANSFER MEDIUM", - "hsn_code": "38249014" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS MIXED POLYETHYLENE GLYCOLS", - "hsn_code": "38249015" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS SALTS FOR CURING OR SALTING", - "hsn_code": "38249016" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nAMMONIACAL GAS LIQUORS AND SPENT OXIDE PRODUCED IN COAL GAS PURIFICATION, CASE\nHARDENING COMPOUND, HEAT TRANSFER SALTS; MIXTURE OF DIPHENYL AND DIPHENYL OXIDE\nAS HEAT TRANSFER MEDIUM, MIXED POLYETHYLENE GLYCOLS; SALTS FOR CURING OR SALTING,\nSURFACE TENSION REDUCING AGENTS SURFACE TENSION REDUCING AGENTS", - "hsn_code": "38249017" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: ELECTROPLATING SALTS", - "hsn_code": "38249021" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: WATER TREATMENT CHEMICALS,\nION EXCHANGER (INN) SUCH AS PERMIUTITS, ZEOLITES)", - "hsn_code": "38249022" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: GRAMOPHONE RECORDS MAKING\nMATERIAL", - "hsn_code": "38249023" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: CORRECTING FLUID", - "hsn_code": "38249024" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: PRECIPITATED SILICA AND SILICA GEL", - "hsn_code": "38249025" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nELECTROPLATING SALTS; WATER TREATMENT CHEMICALS; ION EXCHANGER; CORRECTING FLUID;\nPRECIPITATED SILICA AND SILICA GEL; OIL WELL CHEMICAL: OIL WELL CHEMICALS", - "hsn_code": "38249026" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : MIXTURES CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC\nHYDROCARBONS CONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE\nAND FLUORINE", - "hsn_code": "38249031" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : FERRITE POWDER", - "hsn_code": "38249032" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : CAPACITOR FLUIDS PCB TYPE", - "hsn_code": "38249033" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : DIPPING OIL FOR TREATMENT OF GRAPES", - "hsn_code": "38249034" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : POLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS, POLY\nCHLORINATED TERPHENYLS, CROCIDOLITE", - "hsn_code": "38249035" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : GOODS OF A KIND KNOWN AS HAZARDOUS WASTE", - "hsn_code": "38249036" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER:\nMIXTURE CONTAINING PERHALOGENATED DERIVATIVES OF ACYCLIC HYDROCARBONS\nCONTAINING TWO OR MORE DIFFERENT HALOGENS OTHER THAN CHLORINE AND FLUORINE;\nFERRITE POWDER; CAPACITOR FLUIDS PCB TYPE; DIPPING OIL FOR TREATMENT OF GRAPES;\nPOLY BROMINATED BIPHENYLS, POLY CHLORINATED BIPHENYLS,POLY-CHLORINATED\nTERPHENYLS, CROCIDOLITE; GOODS OF A KIND KNOWN AS HAZARDOUS WASTE;\nPHOSPHOGYPSUM : PHOSPHOGYPSUM", - "hsn_code": "38249037" - }, - { - "description": "PHOSPHONIC ACID,METHYL COMPOUND WITH (AMINOIMINO METHYL) UREA (1:1)", - "hsn_code": "38249038" - }, - { - "description": "PREPARED BINDERS FOR FOUNDRY MOULDS OR CORES; CHEMICAL PRODUCTS AND\nPREPARATIONS OF THE CHEMICAL OR ALLIED INDUSTRIES (INCLUDING THOSE CONSISTING OF\nMIXTURES OF NATURAL PRODUCTS), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER: - OTHER", - "hsn_code": "38249090" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - MUNICIPAL WASTE", - "hsn_code": "38251000" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - SEWAGE SLUDGE", - "hsn_code": "38252000" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - CLINICAL WASTE", - "hsn_code": "38253000" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - WASTE ORGANIC SOLVENTS:HALOGENATED", - "hsn_code": "38254100" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - WASTE ORGANIC SOLVENTS: OTHER", - "hsn_code": "38254900" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER WASTES OF METAL PICKLING LIQUORS, HYDRAULIC FLUIDS, BRAKE FLUIDS AND ANTI\nFREEZE FLUIDS", - "hsn_code": "38255000" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - OTHER WASTES FROM CHEMICAL OR ALLIED INDUSTRIES:MAINLY CONTAINING\nORGANIC CONSTITUENTS", - "hsn_code": "38256100" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER - OTHER WASTES FROM CHEMICAL OR ALLIED INDUSTRIES:OTHER", - "hsn_code": "38256900" - }, - { - "description": "RESIDUAL PRODUCTS OF THE CHEMICAL OR ALLIED INDUSTRIES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED; MUNICIPAL WASTE; SEWAGE SLUDGE; OTHER WASTES SPECIFIED IN NOTE 6 TO THIS\nCHAPTER OTHER", - "hsn_code": "38259000" - }, - { - "description": "BIODIESEL AND MIXTURES THEREOF, NOT CONTAINING OR CONTAINING LESS THAN 70% BY\nWEIGHT OF PETROLEUM OILS OR OILS OBTAINED FROM BITUMINOUS MINERALS", - "hsn_code": "38260000" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS - POLYETHYLENE HAVING A SPECIFIC GRAVITY OF\nLESS THAN 0.94 : LINEAR LOW DENSITY POLYETHYLENE (LLDPE)", - "hsn_code": "39011010" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS - POLYETHYLENE HAVING A SPECIFIC GRAVITY OF\nLESS THAN 0.94 : OTHER", - "hsn_code": "39011090" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS POLYETHYLENE HAVING A SPECIFIC GRAVITY OF\n0.94 OR MORE", - "hsn_code": "39012000" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS ETHYLENE - VINYL ACETATE COPOLYMERS", - "hsn_code": "39013000" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS - OTHER: LINEAR MEDIUM DENSITY\nPOLYETHYLENE (LMDPE)", - "hsn_code": "39019010" - }, - { - "description": "POLYMERS OF ETHYLENE, IN PRIMARY FORMS - OTHER: OTHER", - "hsn_code": "39019090" - }, - { - "description": "POLYMERS OF PROPYLENE OR OF OTHER OLEFINS, IN PRIMARY FORMS POLYPROPYLENE", - "hsn_code": "39021000" - }, - { - "description": "POLYMERS OF PROPYLENE OR OF OTHER OLEFINS, IN PRIMARY FORMS POLY ISO BUTYLENE", - "hsn_code": "39022000" - }, - { - "description": "POLYMERS OF PROPYLENE OR OF OTHER OLEFINS, IN PRIMARY FORMS PROPYLENE\nCOPOLYMERS", - "hsn_code": "39023000" - }, - { - "description": "POLYMERS OF PROPYLENE OR OF OTHER OLEFINS, IN PRIMARY FORMS OTHER", - "hsn_code": "39029000" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - POLYSTYRENE: EXPANSIBLE", - "hsn_code": "39031100" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - POLYSTYRENE: OTHER: MOULDING POWDER", - "hsn_code": "39031910" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - POLYSTYRENE: OTHER: OTHER", - "hsn_code": "39031990" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - STYRENE - ACRYLONITRILE (SAN) COPOLYMERS", - "hsn_code": "39032000" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - ACRYLONITRILE - BUTADINE - STYRENE (ABS)\nCOPOLYMERS", - "hsn_code": "39033000" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - OTHER: COPOLYMERS, SOLELY OF STYRENE WITH\nALLYL ALCOHOL, OF ANY ACETYL VALUE OF 175 OR MORE", - "hsn_code": "39039010" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - OTHER: BROMINATED POLYSTYRENE,\nCONTAINING BY WEIGHT 58% OR MORE BUT NOT MORE THAN 71% OF BROMINE, IN ONE OF\nTHE FORMS MENTIONED IN NOTE 6(B) TO THIS CHAPTER", - "hsn_code": "39039020" - }, - { - "description": "POLYMERS OF STYRENE, IN PRIMARY FORMS - OTHER: OTHER", - "hsn_code": "39039090" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nPOLY (VINYL CHLORIDE), NOT MIXED WITH ANY OTHER SUBSTANCES:BINDERS FOR PIGMENTS", - "hsn_code": "39041010" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nPOLY (VINYL CHLORIDE), NOT MIXED WITH ANY OTHER SUBSTANCES:OTHER", - "hsn_code": "39041090" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER POLY (VINYL CHLORIDE): NON - PLASTICISED:POLY (VINYL CHLORIDE) RESINS", - "hsn_code": "39042110" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER POLY (VINYL CHLORIDE): NON - PLASTICISED:OTHER", - "hsn_code": "39042190" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER POLY (VINYL CHLORIDE): PLASTICISED: POLY (VINYL CHLORIDE) (PVC) RESINS (EMULSION\nGRADE)", - "hsn_code": "39042210" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER POLY (VINYL CHLORIDE): PLASTICISED:OTHER", - "hsn_code": "39042290" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nVINYL CHLORIDE - VINYL ACETATE COPOLYMERS:POLY (VINYL DERIVATIVES)", - "hsn_code": "39043010" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nVINYL CHLORIDE - VINYL ACETATE COPOLYMERS:OTHER", - "hsn_code": "39043090" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER VINYL CHLORIDE COPOLYMERS", - "hsn_code": "39044000" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nVINYLIDENE CHLORIDE POLYMERS COPOLYMER OF VINYLIDENE CHLORIDE WITH ACRYLONITRITE,\nIN THE FORM OF EXPANSIBLE BEADS OF A DIAMETER OF 4 MICROMETERS OR MORE BUT NOT\nMORE THAN 20 MICROMETERS", - "hsn_code": "39045010" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nVINYLIDENE CHLORIDE POLYMERS OTHER", - "hsn_code": "39045090" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nFLURO - POLYMERS : POLYTETRAFLUROETHYLENE", - "hsn_code": "39046100" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nFLURO - POLYMERS : OTHER : POLY (VINYL FLUORIDE), IN ONE OF THE FORMS MENTIONED IN\nNOTE 6(B) TO THIS CHAPTER", - "hsn_code": "39046910" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nFLURO - POLYMERS : OTHER : OTHER", - "hsn_code": "39046990" - }, - { - "description": "POLYMERS OF VINYL CHLORIDE OR OF OTHER HALOGENATED OLEFINS, IN PRIMARY FORMS -\nOTHER", - "hsn_code": "39049000" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : IN\nAQUEOUS DISPERSION:POLY (VINYL ACETATE) (PVA), MOULDING MATERIAL", - "hsn_code": "39051210" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : IN\nAQUEOUS DISPERSION:POLY (VINYL ACETATE) RESINS", - "hsn_code": "39051220" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : IN\nAQUEOUS DISPERSION: OTHER", - "hsn_code": "39051290" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : OTHER\n:POLY (VINYL ACETATE) (PVA) MOULDING MATERIAL", - "hsn_code": "39051910" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : OTHER\n:POLY (VINYL ACETATE) AND RESINS", - "hsn_code": "39051920" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN\nPRIMARY FORMS; OTHER VINYL POLYMERS IN PRIMARY FORMS - POLY (VINYL ACETATE) : OTHER\n:OTHER", - "hsn_code": "39051990" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - VINYL ACETATE COPOLYMERS : IN AQUEOUS DISPERSION", - "hsn_code": "39052100" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - VINYL ACETATE COPOLYMERS : OTHER", - "hsn_code": "39052900" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - POLY (VINYL ALCOHOL), WHETHER OR NOT CONTAINING\nUNHYDROLYSED ACETATE GROUPS", - "hsn_code": "39053000" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - OTHER : COPOLYMERS", - "hsn_code": "39059100" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - OTHER : OTHER :POLY (VINYL PIROLIDONE) (P ALCOHOL)", - "hsn_code": "39059910" - }, - { - "description": "POLYMERS OF VINYL ACETATE OR OF OTHER VINYL ESTERS, IN PRIMARY FORMS; OTHER VINYL\nPOLYMERS IN PRIMARY FORMS - OTHER : OTHER :OTHER", - "hsn_code": "39059990" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - POLY (METHYL METHACRYLATE): BINDERS FOR\nPIGMENTS OR INKS", - "hsn_code": "39061010" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - POLY (METHYL METHACRYLATE): OTHER", - "hsn_code": "39061090" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - OTHER :ACRYLIC RESINS", - "hsn_code": "39069010" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - OTHER : POLYACRYLATE MOULDING POWDER", - "hsn_code": "39069020" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - OTHER :COPOLYMERS OF ACRYLONITRILE", - "hsn_code": "39069030" - }, - { - "description": "ACRYLIC POLYMERS IN PRIMARY FORMS - OTHER :OTHER", - "hsn_code": "39069090" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLYACETALS", - "hsn_code": "39071000" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYETHERS:POLY (ETHER ALCOHOLS)", - "hsn_code": "39072010" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYETHERS:OTHER", - "hsn_code": "39072090" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - EPOXIDE RESINS :EPOXY RESINS", - "hsn_code": "39073010" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - EPOXIDE RESINS :OTHER", - "hsn_code": "39073090" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLYCARBONATES", - "hsn_code": "39074000" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - ALKYD RESINS", - "hsn_code": "39075000" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLY (ETHYLENE TEREPTHALATE):HAVING AN INTRINSIC VISCOSITY OF LESS THAN 0.64\nDL/G", - "hsn_code": "39076010" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLY (ETHYLENE TEREPTHALATE): HAVING AN INTRINSIC VISCOSITY OF NOT LESS THAN\n0.64 DL/G AND NOT GREATER THAN 0.72 DL/G", - "hsn_code": "39076020" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLY (ETHYLENE TEREPTHALATE): OTHER (INCLUDING CLEAN, CLOURLESS GRADES)", - "hsn_code": "39076090" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - POLY(LACTIC ACID)", - "hsn_code": "39077000" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : UNSATURATED :MALEIC RESINS", - "hsn_code": "39079110" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : UNSATURATED :POLYESTER OR CONTRACT RESINS", - "hsn_code": "39079120" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : UNSATURATED : FUMERIC RESINS", - "hsn_code": "39079130" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : UNSATURATED :DIALLYLPHTHALATE RESINS", - "hsn_code": "39079140" - }, - { - "description": "POLY (BUTYLENE TEREPTHALATE)", - "hsn_code": "39079150" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : UNSATURATED :OTHER", - "hsn_code": "39079190" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : OTHER :DIALLYL PHTHALATE RESINS", - "hsn_code": "39079910" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : OTHER : POLY(BUTYLENE TEREPTHALATE)", - "hsn_code": "39079920" - }, - { - "description": "POLYACETALS, OTHER POLYETHERS AND EPOXIDE RESINS, IN PRIMARY FORMS;\nPOLYCARBONATES, ALKYD RESINS, POLYALLYLESTERS AND OTHER POLYESTERS, IN PRIMARY\nFORMS - OTHER POLYESTERS : OTHER :OTHER", - "hsn_code": "39079990" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS - POLYAMIDE - 6, - 11, - 12, - 6, 6, - 6, 9, - 6, 10 OR -\n6,12:NYLON MOULDING POWDER", - "hsn_code": "39081010" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS - POLYAMIDE - 6, - 11, - 12, - 6, 6, - 6, 9, - 6, 10 OR -\n6,12:OTHER", - "hsn_code": "39081090" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS - OTHER : NYLON MOULDING POWDER", - "hsn_code": "39089010" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS - OTHER : NYLON IN OTHER PRIMARY FORMS", - "hsn_code": "39089020" - }, - { - "description": "POLYAMIDES IN PRIMARY FORMS - OTHER : OTHER", - "hsn_code": "39089090" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - UREA RESINS;\nTHIOUREA RESINS :UREA FORMALDEHYDE RESINS", - "hsn_code": "39091010" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - UREA RESINS;\nTHIOUREA RESINS :OTHER", - "hsn_code": "39091090" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - MELAMINE\nRESINS:MELAMINE FORMALDEHYDE RESINS", - "hsn_code": "39092010" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - MELAMINE\nRESINS:OTHER", - "hsn_code": "39092090" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - OTHER AMINO -\nRESINS: POLY (PHENYLENE OXIDE)", - "hsn_code": "39093010" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - OTHER AMINO -\nRESINS:OTHER", - "hsn_code": "39093090" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS :CRESOL FORMALDEHYDE OXIDE", - "hsn_code": "39094010" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS : PHENOL FORMALDEHYDE RESINS", - "hsn_code": "39094020" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS :ALKYL PHENOL - FORMALDEHYDE RESINS", - "hsn_code": "39094030" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS : KETONIC RESINS", - "hsn_code": "39094040" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS : PHENOXI RESINS", - "hsn_code": "39094050" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS : TERPENE PHENOLIC RESINS", - "hsn_code": "39094060" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS - PHENOLIC\nRESINS :OTHER", - "hsn_code": "39094090" - }, - { - "description": "AMINO - RESINS, PHENOLIC RESINS AND POLYURETHANES, IN PRIMARY FORMS -\nPOLYURETHANES", - "hsn_code": "39095000" - }, - { - "description": "SILICONES IN PRIMARY FORMS - SILICONES IN PRIMARY FORMS - SILICONE RESINS", - "hsn_code": "39100010" - }, - { - "description": "SILICONES IN PRIMARY FORMS - SILICONES IN PRIMARY FORMS - SILICONE OIL", - "hsn_code": "39100020" - }, - { - "description": "SILICONES IN PRIMARY FORMS - SILICONES IN PRIMARY FORMS - OTHER", - "hsn_code": "39100090" - }, - { - "description": "PETROLEUM RESINS, COUMARONE - INDENE RESINS, POLYTERPENES, POLYSULPHIDES,\nPOLYSULPHONES AND OTHER PRODUCTS SPECIFIED IN NOTE 3 TO THIS CHAPTER, NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - PETROLEUM RESINS, COUMARONE -\nINDENE OR COUMARONE - INDENE RESINS AND POLYTERPENES:COUMARONE - INDENE RESINS", - "hsn_code": "39111010" - }, - { - "description": "PETROLEUM RESINS, COUMARONE - INDENE RESINS, POLYTERPENES, POLYSULPHIDES,\nPOLYSULPHONES AND OTHER PRODUCTS SPECIFIED IN NOTE 3 TO THIS CHAPTER, NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - PETROLEUM RESINS, COUMARONE -\nINDENE OR COUMARONE - INDENE RESINS AND POLYTERPENES:OTHER", - "hsn_code": "39111090" - }, - { - "description": "PETROLEUM RESINS, COUMARONE - INDENE RESINS, POLYTERPENES, POLYSULPHIDES,\nPOLYSULPHONES AND OTHER PRODUCTS SPECIFIED IN NOTE 3 TO THIS CHAPTER, NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER :POLYSULPHONES", - "hsn_code": "39119010" - }, - { - "description": "PETROLEUM RESINS, COUMARONE - INDENE RESINS, POLYTERPENES, POLYSULPHIDES,\nPOLYSULPHONES AND OTHER PRODUCTS SPECIFIED IN NOTE 3 TO THIS CHAPTER, NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER :OTHER", - "hsn_code": "39119090" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : NON - PLASTICISED:CELLULOSE ACETATE FLAKES", - "hsn_code": "39121110" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : NON - PLASTICISED:CELLULOSE ACETATE MOULDING\nPOWDER", - "hsn_code": "39121120" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : NON - PLASTICISED:CELLULOSE ACETOBUTYRATE\nMOULDING POWDER", - "hsn_code": "39121130" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : NON - PLASTICISED: CELLULOSE NITRATE, DYNAMIC\nGRADE", - "hsn_code": "39121140" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : NON - PLASTICISED:OTHER", - "hsn_code": "39121190" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : PLASTICISED :CELLULOSE ACETATE FLAKES", - "hsn_code": "39121210" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : PLASTICISED :CELLULOSE ACETATE MOULDING\nPOWDER", - "hsn_code": "39121220" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : PLASTICISED :CELLULOSE ACETOBUTYRATE\nMOULDING POWDER", - "hsn_code": "39121230" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ACETATES : PLASTICISED :OTHER", - "hsn_code": "39121290" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE NITRATES (INCLUDING COLLODIONS): NON -\nPLASTICISED:MOULDING POWDERS", - "hsn_code": "39122011" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE NITRATES (INCLUDING COLLODIONS): NON - PLASTICISED:OTHER", - "hsn_code": "39122019" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE NITRATES (INCLUDING COLLODIONS): PLASTICISED : MOULDING\nPOWDERS", - "hsn_code": "39122021" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE NITRATES (INCLUDING COLLODIONS): PLASTICISED : OTHER", - "hsn_code": "39122029" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: CARBOXYMETHYL CELLULOSE AND ITS SALTS", - "hsn_code": "39123100" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : NON - PLASCISED:ETHYLCELLULOSE", - "hsn_code": "39123911" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : NON - PLASCISED:METHYLCELLULOSE", - "hsn_code": "39123912" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : NON - PLASCISED:OTHER CELLULOSE ETHERS", - "hsn_code": "39123919" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : PLASTICISED: ETHYL CELLULOSE", - "hsn_code": "39123921" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : PLASTICISED: METHYL CELLULOSE", - "hsn_code": "39123922" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - CELLULOSE ETHERS: OTHER : PLASTICISED: OTHER CELLULOSE ETHER", - "hsn_code": "39123929" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - OTHER: CELLULOSE PROPIONATE AND ACETO PROPIONATE, NON -\nPLASTICISED", - "hsn_code": "39129010" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - OTHER:VISCOSE SPONGE", - "hsn_code": "39129020" - }, - { - "description": "CELLULOSE AND ITS CHEMICAL DERIVATIVES, NOT ELSEWHERE SPECIFIED OR INCLUDED, IN\nPRIMARY FORMS - OTHER:OTHER", - "hsn_code": "39129090" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - ALGINIC ACID, ITS SALTS AND ESTERS\n:SODIUM ALGINATE", - "hsn_code": "39131010" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - ALGINIC ACID, ITS SALTS AND ESTERS\n:OTHER", - "hsn_code": "39131090" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER : CHEMICAL DERIVATIVES OF\nNATURAL RUBBER:CHLORINATED RUBBER", - "hsn_code": "39139011" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER : CHEMICAL DERIVATIVES OF\nNATURAL RUBBER:OTHER", - "hsn_code": "39139019" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER :HARDENED PROTEINS (SUCH\nAS HARDENED CASEIN, GELATIN)", - "hsn_code": "39139020" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER :DEXTRAN", - "hsn_code": "39139030" - }, - { - "description": "NATURAL POLYMERS (FOR EXAMPLE, ALGINIC ACID) AND MODIFIED NATURAL POLYMERS (FOR\nEXAMPLE, HARDENED PROTEINS, CHEMICAL DERIVATIVES OF NATURAL RUBBER), NOT\nELSEWHERE SPECIFIED OR INCLUDED, IN PRIMARY FORMS - OTHER :OTHER", - "hsn_code": "39139090" - }, - { - "description": "IONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS -\nIONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS:ION -\nEXCHANGERS OF THE CONDENSATION, POLYCONDENSATION OR POLYADDITION TYPE", - "hsn_code": "39140010" - }, - { - "description": "IONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS -\nIONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS:ION -\nEXCHANGERS OF POLYMERISATION OR CO - POLYMERISATION TYPE", - "hsn_code": "39140020" - }, - { - "description": "IONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY FORMS -\nIONEXCHANGERS BASED ON POLYMERS OF HEADINGS 3901 TO 3913, IN PRIMARY\nFORMS:OTHER", - "hsn_code": "39140090" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF POLYMERS OF ETHYLENE", - "hsn_code": "39151000" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF POLYMERS OF STYRENE", - "hsn_code": "39152000" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF POLYMERS OF VINYL CHLORIDE:OF\nCOPOLYMERS OF VINYL CHLORIDE", - "hsn_code": "39153010" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF POLYMERS OF VINYL CHLORIDE:OTHER", - "hsn_code": "39153090" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS :OF POLYPROPYLENE", - "hsn_code": "39159010" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF POLYMERS OF VINYL\nACETATE : OF COPOLYMERS OF VINYL ACETATE", - "hsn_code": "39159021" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF POLYMERS OF VINYL\nACETATE : OTHER", - "hsn_code": "39159029" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS :OF ACRYLIC POLYMERS AND\nMETHLYACRYLIC COPOLYMERS", - "hsn_code": "39159030" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF ALKYDS, POLYESTERS AND\nEPOXIDE RESINS : OF ALKYDS AND POLYESTERS", - "hsn_code": "39159041" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF ALKYDS, POLYESTERS AND\nEPOXIDE RESINS : OF PET BOTTLES", - "hsn_code": "39159042" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF ALKYDS, POLYESTERS AND\nEPOXIDE RESINS : OF EPOXIDE RESINS", - "hsn_code": "39159049" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS :OF POLYAMIDES", - "hsn_code": "39159050" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF AMINO RESINS; PHENOLIC\nRESINS AND POLYURETHANES :OF PHENOPLAST", - "hsn_code": "39159061" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF AMINO RESINS; PHENOLIC\nRESINS AND POLYURETHANES :OF AMINOPLAST", - "hsn_code": "39159062" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF AMINO RESINS; PHENOLIC\nRESINS AND POLYURETHANES :OF POLYURETHANES", - "hsn_code": "39159063" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE AND ITS\nCHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE", - "hsn_code": "39159071" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE AND ITS\nCHEMICAL DERIVATIVES: CELLULOSE PLASTIC WASTE SUCH AS CELLULOSE NITRATE FILM SCRAP\nNON - PLASTICISED", - "hsn_code": "39159072" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE AND ITS\nCHEMICAL DERIVATIVES: CELLULOSE PLASTIC WASTE SUCH AS CELLULOSE NITRATE FILM SCRAP\nPLASTICIZED", - "hsn_code": "39159073" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE AND ITS\nCHEMICAL DERIVATIVES: CELLULOSE PLASTIC WASTE SUCH AS CELLULOSE ACETATC FILM SCRAP\nNON - PLASTICISED", - "hsn_code": "39159074" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE AND ITS\nCHEMICAL DERIVATIVES: CELLULOSE PLASTIC WASTE SUCH AS CELLULOSE ACETATC FILM SCRAP\nPLASTICIZED", - "hsn_code": "39159075" - }, - { - "description": "WASTE, PARINGS AND SCRAP, OF PLASTICS - OF OTHER PLASTICS :OTHER", - "hsn_code": "39159090" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF ETHYLENE: RODS OF POLYETHYLENE", - "hsn_code": "39161010" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF ETHYLENE:CANES", - "hsn_code": "39161020" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF ETHYLENE:OTHER", - "hsn_code": "39161090" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF VINYL CHLORIDE: OF POLY (VINYL CHLORIDE) COPOLYMERS\n:CANES", - "hsn_code": "39162011" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF VINYL CHLORIDE: OF POLY (VINYL CHLORIDE) COPOLYMERS\n:OTHER", - "hsn_code": "39162019" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF VINYL CHLORIDE: OF POLY (VINYL CHLORIDE) COPOLYMERS :\nOTHER: CANES", - "hsn_code": "39162091" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF POLYMERS OF VINYL CHLORIDE: OF POLY (VINYL CHLORIDE) COPOLYMERS :\nOTHER: OTHER", - "hsn_code": "39162099" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : CANES", - "hsn_code": "39169010" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nPHENOPLAST", - "hsn_code": "39169021" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nAMINOPLAST", - "hsn_code": "39169022" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nALKYDS AND POLYSTERS", - "hsn_code": "39169023" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS : OF\nPOLYAMIDES", - "hsn_code": "39169024" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nPOLYURETHANES", - "hsn_code": "39169025" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nEPOXIDE - RESINS (INCLUDING WASTE AND SCRAP)", - "hsn_code": "39169026" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nPOLYPROPYLENE", - "hsn_code": "39169027" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF PHENOPLAST, AMINOPLAST, ALKYDS AND POLYESTERS,\nPOLYAMIDES, POLYURETHANES, EPOXIDE - RESINS (INCLUDING WASTE AND SCRAP),\nPOLYPROPYLENE AND ACRYLIC, METHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS :OF\nACRYLICMETHACRYLIC AND ACRYLOMETHACRYLIC POLYMERS", - "hsn_code": "39169028" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF POLYMERISATION AND COPOLYMERISATION PRODUCTS\nOF POLYSTYRENE AND POLYMETHYL METHACRYLATE :OF POLYMERISATION AND\nCOPOLYMERISATION PRODUCTS OF POLYSTYRENE", - "hsn_code": "39169031" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF POLYMERISATION AND COPOLYMERISATION PRODUCTS\nOF POLYSTYRENE AND POLYMETHYL METHACRYLATE :OF POLYMETHYL METHACRYLATE", - "hsn_code": "39169032" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS :OF REGENERATED CELLULOSE", - "hsn_code": "39169040" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS :OF CELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT\nPLASTICIZED", - "hsn_code": "39169050" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS :OF VULCANIZED FIBRE", - "hsn_code": "39169060" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF CELLULOSE ACETATE AND ACETATE BUTYRATE, WHETHER\nOR NOT PLASTICIZED", - "hsn_code": "39169070" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS : OF VINYL PLASTIC", - "hsn_code": "39169080" - }, - { - "description": "MONOFILAMENT OF WHICH ANY CROSS - SECTIONAL DIMENSION EXCEEDS 1MM, RODS, STICKS\nAND PROFILE SHAPES, WHETHER OR NOT SURFACE - WORKED BUT NOT OTHERWISE WORKED,\nOF PLASTICS - OF OTHER PLASTICS :OF OTHER POLYMERISATION AND COPOLYMERISATION\nPRODUCTS", - "hsn_code": "39169090" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - ARTIFICIAL GUTS (SAUSAGE CASINGS) OF HARDENED PROTEIN OR OF CELLULOSIC\nMATERIALS: OF HARDENED PROTEIN", - "hsn_code": "39171010" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - ARTIFICIAL GUTS (SAUSAGE CASINGS) OF HARDENED PROTEIN OR OF CELLULOSIC\nMATERIALS: OF CELLULOSIC MATERIALS", - "hsn_code": "39171020" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF POLYMERS OF ETHYLENE:TUBES OF\nPOLYETHYLENE", - "hsn_code": "39172110" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF POLYMERS OF ETHYLENE:OTHER", - "hsn_code": "39172190" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF POLYMERS OF PROPYLENE", - "hsn_code": "39172200" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF POLYMERS OF VINYL CHLORIDE :SEAMLESS\nTUBES", - "hsn_code": "39172310" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF POLYMERS OF VINYL CHLORIDE :OTHER", - "hsn_code": "39172390" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS : SEAMLESS TUBES OF\nCOPOLYMERS OF VINYL ACETATE AND VINYL CHLORIDE", - "hsn_code": "39172910" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS : SEAMLESS TUBES OF\nPOLYMERS AND COPOLYMERS OF POLYSTYRENE", - "hsn_code": "39172920" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS :TUBES OF CELLULOSE\nNITRATE AND CELLULOID, WHETHER OR NOT PLASTICISED", - "hsn_code": "39172930" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS :TUBES OF CELLULOSE\nACETATE OR ACETATE BUTYRATE", - "hsn_code": "39172940" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS :TUBES OF VINYL PLASTICS", - "hsn_code": "39172950" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - TUBES, PIPES AND HOSES, RIGID: OF OTHER PLASTICS :OTHER", - "hsn_code": "39172990" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: FLEXIBLE TUBES, PIPES AND HOSES, HAVING A\nMINIMUM BURST PRESSURE OF 27.6 MPA", - "hsn_code": "39173100" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER, NOT REINFORCED OR OTHERWISE\nCOMBINED WITH OTHER MATERIALS, WITHOUT FITTINGS:OF CONDENSATION OR\nREARRANGEMENT POLYMERIZATION PRODUCTS, WHETHER OR NOT CHEMICALLY MODIFIED", - "hsn_code": "39173210" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER, NOT REINFORCED OR OTHERWISE\nCOMBINED WITH OTHER MATERIALS, WITHOUT FITTINGS:OF ADDITION POLYMERISATION\nPRODUCTS", - "hsn_code": "39173220" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER, NOT REINFORCED OR OTHERWISE\nCOMBINED WITH OTHER MATERIALS, WITHOUT FITTINGS:OTHER", - "hsn_code": "39173290" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER, NOT REINFORCED OR OTHERWISE\nCOMBINED WITH OTHER MATERIALS, WITH FITTINGS", - "hsn_code": "39173300" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER:OF CONDENSATION OR\nREARRANGEMENT POLYMERIZATION PRODUCTS, WHETHER OR NOT CHEMICALLY MODIFIED", - "hsn_code": "39173910" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER:OF ADDITION POLYMERISATION\nPRODUCTS", - "hsn_code": "39173920" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - OTHER TUBES, PIPES AND HOSES: OTHER:OTHER", - "hsn_code": "39173990" - }, - { - "description": "TUBES, PIPES AND HOSES, AND FITTINGS THEREFOR (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES),\nOF PLASTICS - FITTINGS", - "hsn_code": "39174000" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF - ADHESIVE, IN ROLLS OR IN THE FORM\nOF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER -\nOF POLYMERS OF VINYL CHLORIDE : WALL OR CEILING COVERINGS COMBINED WITH KNITTED OR\nWOVEN FABRICS, NONWOVENS OR FELTS", - "hsn_code": "39181010" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF - ADHESIVE, IN ROLLS OR IN THE FORM\nOF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER -\nOF POLYMERS OF VINYL CHLORIDE :OTHER", - "hsn_code": "39181090" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF - ADHESIVE, IN ROLLS OR IN THE FORM\nOF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER -\nOF OTHER PLASTICS :FLOOR COVERINGS OF LINOXYNE", - "hsn_code": "39189010" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF - ADHESIVE, IN ROLLS OR IN THE FORM\nOF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER -\nOF OTHER PLASTICS :WALL OR CEILING COVERINGS COMBINED WITH KNITTED OR WOVEN\nFABRICS, NONWOVENS OR FELTS", - "hsn_code": "39189020" - }, - { - "description": "FLOOR COVERINGS OF PLASTICS, WHETHER OR NOT SELF - ADHESIVE, IN ROLLS OR IN THE FORM\nOF TILES; WALL OR CEILING COVERINGS OF PLASTICS, AS DEFINED IN NOTE 9 TO THIS CHAPTER -\nOF OTHER PLASTICS :OTHER", - "hsn_code": "39189090" - }, - { - "description": "SELF - ADHESIVE PLATES, SHEETS, FILM, FOIL, TAPE, STRIP AND OTHER FLAT SHAPES, OF\nPLASTICS, WHETHER OR NOT IN ROLLS - IN ROLLS OF WIDTH NOT EXCEEDING 20 CM", - "hsn_code": "39191000" - }, - { - "description": "SELF - ADHESIVE PLATES, SHEETS, FILM, FOIL, TAPE, STRIP AND OTHER FLAT SHAPES, OF\nPLASTICS, WHETHER OR NOT IN ROLLS - OTHER : PLASTIC STICKERS, WHETHER OR NOT PRINTED,\nEMBOSSED, OR IMPREGNATED", - "hsn_code": "39199010" - }, - { - "description": "SELF - ADHESIVE PLATES, SHEETS, FILM, FOIL, TAPE, STRIP AND OTHER FLAT SHAPES, OF\nPLASTICS, WHETHER OR NOT IN ROLLS - OTHER :CELLULOSE ADHESIVE TAPE", - "hsn_code": "39199020" - }, - { - "description": "SELF - ADHESIVE PLATES, SHEETS, FILM, FOIL, TAPE, STRIP AND OTHER FLAT SHAPES, OF\nPLASTICS, WHETHER OR NOT IN ROLLS - OTHER : OTHER", - "hsn_code": "39199090" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: RIGID, PLAIN", - "hsn_code": "39201011" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: FLEXIBLE, PLAIN", - "hsn_code": "39201012" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: OTHER", - "hsn_code": "39201019" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: OTHER : RIGID, PLAIN", - "hsn_code": "39201091" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39201092" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF ETHYLENE: SHEETS OF POLYETHYLENE: OTHER : OTHER", - "hsn_code": "39201099" - }, - { - "description": "20 OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF PROPYLENE :RIGID, PLAIN", - "hsn_code": "39202010" - }, - { - "description": "20 OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF PROPYLENE :FLEXIBLE, PLAIN", - "hsn_code": "39202020" - }, - { - "description": "20 OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF PROPYLENE :OTHER", - "hsn_code": "39202090" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF STYRENE :RIGID, PLAIN", - "hsn_code": "39203010" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF STYRENE :FLEXIBLE, PLAIN", - "hsn_code": "39203020" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF STYRENE :OTHER", - "hsn_code": "39203090" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF VINYL CHLORIDE:CONTAINING BY WEIGHT NOT LESS THAN 6% OF PLASTICIZERS", - "hsn_code": "39204300" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYMERS OF VINYL CHLORIDE:OTHER", - "hsn_code": "39204900" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS :RIGID, PLAIN", - "hsn_code": "39205111" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS :FLEXIBLE, PLAIN", - "hsn_code": "39205112" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS :OTHER", - "hsn_code": "39205119" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS : OTHER : RIGID, PLAIN", - "hsn_code": "39205191" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS : OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39205192" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OF POLY (METHYL METHACRYLATE): SHEETS : OTHER : OTHER", - "hsn_code": "39205199" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : POLYACRYLATE SHEETS:RIGID, PLAIN", - "hsn_code": "39205911" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : POLYACRYLATE SHEETS:FLEXIBLE, PLAIN", - "hsn_code": "39205912" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : POLYACRYLATE SHEETS:OTHER", - "hsn_code": "39205919" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : OTHER : RIGID, PLAIN", - "hsn_code": "39205991" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39205992" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nACRYLIC POLYMERS: OTHER : OTHER : OTHER", - "hsn_code": "39205999" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nPOLYCARBONATES :RIGID, PLAIN", - "hsn_code": "39206110" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nPOLYCARBONATES :FLEXIBLE, PLAIN", - "hsn_code": "39206120" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nPOLYCARBONATES :OTHER", - "hsn_code": "39206190" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF POLY\n(ETHYLENE TEREPHTHALATE):RIGID, PLAIN", - "hsn_code": "39206210" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF POLY\n(ETHYLENE TEREPHTHALATE):FLEXIBLE, PLAIN", - "hsn_code": "39206220" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF POLY\n(ETHYLENE TEREPHTHALATE):OTHER", - "hsn_code": "39206290" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nUNSATURATED POLYESTERS :RIGID, PLAIN", - "hsn_code": "39206310" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nUNSATURATED POLYESTERS :FLEXIBLE, PLAIN", - "hsn_code": "39206320" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF\nUNSATURATED POLYESTERS :OTHER", - "hsn_code": "39206390" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : PACKAGING FILM:RIGID, PLAIN", - "hsn_code": "39206911" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : PACKAGING FILM:FLEXIBLE, PLAIN", - "hsn_code": "39206912" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : PACKAGING FILM:OTHER", - "hsn_code": "39206919" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : SUN AND/OR DUST CONTROL FILM : RIGID, PLAIN", - "hsn_code": "39206921" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : SUN AND/OR DUST CONTROL FILM : FLEXIBLE, PLAIN", - "hsn_code": "39206922" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : SUN AND/OR DUST CONTROL FILM : OTHER", - "hsn_code": "39206929" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER FILM :RIGID, PLAIN", - "hsn_code": "39206931" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER FILM : FLEXIBLE, PLAIN", - "hsn_code": "39206932" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER FILM : OTHER", - "hsn_code": "39206939" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER : RIGID, PLAIN", - "hsn_code": "39206991" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39206992" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYCARBONATES, ALKYD RESINS, POLYALLYL ESTERS OR OTHER POLYESTERS : OF OTHER\nPOLYESTERS : OTHER : OTHER", - "hsn_code": "39206999" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: CELLO PHANE\nTRANSPARENT:FILM", - "hsn_code": "39207111" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: CELLO PHANE\nTRANSPARENT:OTHER", - "hsn_code": "39207119" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: SHEETS OF\nCELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT PLASTICIZED :PLAIN", - "hsn_code": "39207121" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: SHEETS OF\nCELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT PLASTICIZED :OTHER", - "hsn_code": "39207129" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: OTHER : RIGID, PLAIN", - "hsn_code": "39207191" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: OTHER :FLEXIBLE,\nPLAIN", - "hsn_code": "39207192" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF REGENERATED CELLULOSE: OTHER :OTHER", - "hsn_code": "39207199" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF VULCANISED FIBRE :RIGID, PLAIN", - "hsn_code": "39207210" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF VULCANISED FIBRE :FLEXIBLE, PLAIN", - "hsn_code": "39207220" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF VULCANISED FIBRE : OTHER", - "hsn_code": "39207290" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEET OF CELLULOSE\nACETATE, NON - PLASTICIZED:RIGID, PLAIN", - "hsn_code": "39207311" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEET OF CELLULOSE\nACETATE, NON - PLASTICIZED: FLEXIBLE, PLAIN", - "hsn_code": "39207312" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEET OF CELLULOSE\nACETATE, NON - PLASTICIZED:OTHER", - "hsn_code": "39207319" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEETS OF CELLULOSE\nACETATE, PLASTICIZED :RIGID, PLAIN", - "hsn_code": "39207321" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEETS OF CELLULOSE\nACETATE, PLASTICIZED :FLEXIBLE, PLAIN", - "hsn_code": "39207322" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: SHEETS OF CELLULOSE\nACETATE, PLASTICIZED :OTHER", - "hsn_code": "39207329" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: OTHER :RIGID, PLAIN", - "hsn_code": "39207391" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: OTHER :FLEXIBLE, PLAIN", - "hsn_code": "39207392" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF CELLULOSE ACETATE: OTHER :OTHER", - "hsn_code": "39207399" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : SHEETS OF\nCELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT PLASTICIZED :RIGID, PLAIN", - "hsn_code": "39207911" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : SHEETS OF\nCELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT PLASTICIZED :FLEXIBLE, PLAIN", - "hsn_code": "39207912" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : SHEETS OF\nCELLULOSE NITRATE AND CELLULOID, WHETHER OR NOT PLASTICIZED :OTHER", - "hsn_code": "39207919" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : OTHER :RIGID,\nPLAIN", - "hsn_code": "39207991" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : OTHER\n:FLEXIBLE, PLAIN", - "hsn_code": "39207992" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nCELLULOSE OR ITS CHEMICAL DERIVATIVES: OF OTHER CELLULOSE DERIVATIVES : OTHER :OTHER", - "hsn_code": "39207999" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OF POLY (VINYL BUTYRAL): RIGID, PLAIN", - "hsn_code": "39209111" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OF POLY (VINYL BUTYRAL): FLEXIBLE, PLAIN", - "hsn_code": "39209112" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OF POLY (VINYL BUTYRAL): OTHER", - "hsn_code": "39209119" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: RIGID, PLAIN", - "hsn_code": "39209211" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: FLEXIBLE, PLAIN", - "hsn_code": "39209212" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: OTHER", - "hsn_code": "39209219" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: OTHER : RIGID, PLAIN", - "hsn_code": "39209291" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39209292" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPOLYAMIDES: POLY (AMIDE FLUORIDE) FILM: OTHER : OTHER", - "hsn_code": "39209299" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nAMINO - RESINS : RIGID, PLAIN", - "hsn_code": "39209310" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nAMINO - RESINS : FLEXIBLE, PLAIN", - "hsn_code": "39209320" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nAMINO - RESINS : OTHER", - "hsn_code": "39209390" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPHENOLIC RESINS : RIGID, PLAIN", - "hsn_code": "39209410" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPHENOLIC RESINS : FLEXIBLE, PLAIN", - "hsn_code": "39209420" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nPHENOLIC RESINS : OTHER", - "hsn_code": "39209490" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, FILM, FOIL AND STRIP OF POLY(VINYL ACETATE) : RIGID, PLAIN", - "hsn_code": "39209911" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, FILM, FOIL AND STRIP OF POLY(VINYL ACETATE) : FLEXIBLE,\nPLAIN", - "hsn_code": "39209912" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, FILM, FOIL AND STRIP OF POLY(VINYL ACETATE) : OTHER", - "hsn_code": "39209919" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: FILM, SHEETS, STRIP OF VINYL PLASTICS : RIGID, PLAIN", - "hsn_code": "39209921" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: FILM, SHEETS, STRIP OF VINYL PLASTICS : FLEXIBLE, PLAIN", - "hsn_code": "39209922" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: FILM, SHEETS, STRIP OF VINYL PLASTICS : OTHER", - "hsn_code": "39209929" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, STRIP, FILM OR FOIL OF COPOLYMERS OF VINYL CHLORIDE\nAND VINYL ACETATE : RIGID, PLAIN", - "hsn_code": "39209931" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, STRIP, FILM OR FOIL OF COPOLYMERS OF VINYL CHLORIDE\nAND VINYL ACETATE : FLEXIBLE, PLAIN", - "hsn_code": "39209932" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: PLATES, SHEETS, STRIP, FILM OR FOIL OF COPOLYMERS OF VINYL CHLORIDE\nAND VINYL ACETATE : OTHER", - "hsn_code": "39209939" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: SHEET OF POLY (TETRAFLUORO - ETHYLENE) (PTFE): RIGID, PLAIN", - "hsn_code": "39209941" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: SHEET OF POLY (TETRAFLUORO - ETHYLENE) (PTFE): FLEXIBLE, PLAIN", - "hsn_code": "39209942" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: SHEET OF POLY (TETRAFLUORO - ETHYLENE) (PTFE): OTHER", - "hsn_code": "39209949" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: RETRO REFLECTIVE SHEETING: RIGID, PLAIN", - "hsn_code": "39209951" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: RETRO REFLECTIVE SHEETING: FLEXIBLE, PLAIN", - "hsn_code": "39209952" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: RETRO REFLECTIVE SHEETING: OTHER", - "hsn_code": "39209959" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: CLICKING BOARDS FOR LEATHER MACHINERY", - "hsn_code": "39209960" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OTHER : RIGID, PLAIN", - "hsn_code": "39209991" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OTHER : FLEXIBLE, PLAIN", - "hsn_code": "39209992" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS, NON - CELLULAR AND NOT\nREINFORCED, LAMINATED, SUPPORTED OR SIMILARLY COMBINED WITH OTHER MATERIALS - OF\nOTHER PLASTICS: OTHER : OTHER", - "hsn_code": "39209999" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF POLYMERS OF\nSTYRENE", - "hsn_code": "39211100" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF POLYMERS OF\nVINYL CHLORIDE", - "hsn_code": "39211200" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF\nPOLYURETHANES:FLEXIBLE", - "hsn_code": "39211310" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF\nPOLYURETHANES:OTHER", - "hsn_code": "39211390" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF REGENERATED\nCELLULOSE", - "hsn_code": "39211400" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - CELLULAR : OF OTHER PLASTICS", - "hsn_code": "39211900" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : THERMOCOL", - "hsn_code": "39219010" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : RIGID, LACQUERED", - "hsn_code": "39219021" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : FLEXIBLE, LACQUERED", - "hsn_code": "39219022" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : RIGID, METALLISED", - "hsn_code": "39219023" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : FLEXIBLE, METALLISED", - "hsn_code": "39219024" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : RIGID, LAMINATED", - "hsn_code": "39219025" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : FLEXIBLE, LAMINATED", - "hsn_code": "39219026" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF POLYMERS OF VINYL\nCHLORIDE : OTHER", - "hsn_code": "39219029" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : RIGID, LACQUERED", - "hsn_code": "39219031" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : FLEXIBLE, LACQUERED", - "hsn_code": "39219032" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : RIGID, METALLISED", - "hsn_code": "39219033" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : FLEXIBLE, METALLISED", - "hsn_code": "39219034" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : RIGID, LAMINATED", - "hsn_code": "39219035" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : FLEXIBLE, LAMINATED", - "hsn_code": "39219036" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OF REGENERATED\nCELLULOSE : OTHER", - "hsn_code": "39219039" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : RIGID,\nLACQUERED", - "hsn_code": "39219091" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : FLEXIBLE,\nLACQUERED", - "hsn_code": "39219092" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : RIGID,\nMETALLISED", - "hsn_code": "39219093" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : FLEXIBLE,\nMETALLISED", - "hsn_code": "39219094" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : RIGID,\nLAMINATED", - "hsn_code": "39219095" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : FLEXIBLE,\nLAMINATED", - "hsn_code": "39219096" - }, - { - "description": "OTHER PLATES, SHEETS, FILM, FOIL AND STRIP, OF PLASTICS - OTHER : OTHER : OTHER", - "hsn_code": "39219099" - }, - { - "description": "BATHS, SHOWER - BATHS, SINKS, WASH - BASINS, BIDETS, LAVATORY PANS, SEATS AND COVERS,\nFLUSHING CISTERNS AND SIMILAR SANITARY WARE, OF PLASTICS - BATHS, SHOWER - BATHS,\nSINKS AND WASH BASINS", - "hsn_code": "39221000" - }, - { - "description": "BATHS, SHOWER - BATHS, SINKS, WASH - BASINS, BIDETS, LAVATORY PANS, SEATS AND COVERS,\nFLUSHING CISTERNS AND SIMILAR SANITARY WARE, OF PLASTICS - LAVATORY SEATS AND\nCOVERS", - "hsn_code": "39222000" - }, - { - "description": "BATHS, SHOWER - BATHS, SINKS, WASH - BASINS, BIDETS, LAVATORY PANS, SEATS AND COVERS,\nFLUSHING CISTERNS AND SIMILAR SANITARY WARE, OF PLASTICS - OTHER", - "hsn_code": "39229000" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - BOXES, CASES, CRATES AND SIMILAR ARTICLES: PLASTIC\nCONTAINERS FOR AUDIO OR VIDEO CASSETTES, CASSETTE TAPES, FLOPPY DISK AND SIMILAR\nARTICLES", - "hsn_code": "39231010" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - BOXES, CASES, CRATES AND SIMILAR ARTICLES: WATCH -\nBOX, JEWELLERY BOX AND SIMILAR CONTAINERS OF PLASTICS", - "hsn_code": "39231020" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - BOXES, CASES, CRATES AND SIMILAR ARTICLES:\nINSULATED WARE", - "hsn_code": "39231030" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - BOXES, CASES, CRATES AND SIMILAR ARTICLES: PACKING\nFOR ACCOMMODATING CONNECTORS", - "hsn_code": "39231040" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - BOXES, CASES, CRATES AND SIMILAR ARTICLES: OTHER", - "hsn_code": "39231090" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - SACKS AND BAGS (INCLUDING CONES)OF POLYMERS OF\nETHYLENE", - "hsn_code": "39232100" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - SACKS AND BAGS (INCLUDING CONES)- OF OTHER\nPLASTICS: OF POLY (VINYL CHLORIDE)", - "hsn_code": "39232910" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - SACKS AND BAGS (INCLUDING CONES)- OF OTHER\nPLASTICS: OTHER", - "hsn_code": "39232990" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - CARBOYS, BOTTLES, FLASKS AND SIMILAR ARTICLES:\nINSULATED WARE", - "hsn_code": "39233010" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - CARBOYS, BOTTLES, FLASKS AND SIMILAR ARTICLES:\nOTHER", - "hsn_code": "39233090" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - SPOOLS, COPS, BOBBINS AND SIMILAR SUPPORTS", - "hsn_code": "39234000" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - STOPPERS, LIDS, CAPS AND OTHER CLOSURES : CAPS AND\nCLOSURES FOR BOTTLES", - "hsn_code": "39235010" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - STOPPERS, LIDS, CAPS AND OTHER CLOSURES : OTHER", - "hsn_code": "39235090" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - OTHER : INSULATED WARE", - "hsn_code": "39239010" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - OTHER : ASEPTIC BAGS", - "hsn_code": "39239020" - }, - { - "description": "ARTICLES FOR THE CONVEYANCE OR PACKING OF GOODS, OF PLASTICS; STOPPERS, LIDS, CAPS\nAND OTHER CLOSURES, OF PLASTICS - OTHER : OTHER", - "hsn_code": "39239090" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES,\nOF PLASTICS - TABLEWARE AND KITCHENWARE : INSULATED WARE", - "hsn_code": "39241010" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES,\nOF PLASTICS - TABLEWARE AND KITCHENWARE : OTHER", - "hsn_code": "39241090" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES,\nOF PLASTICS - OTHER : TOILET ARTICLES", - "hsn_code": "39249010" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES,\nOF PLASTICS - OTHER : INSULATED WARE", - "hsn_code": "39249020" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND HYGIENIC OR TOILET ARTICLES,\nOF PLASTICS - OTHER : OTHER", - "hsn_code": "39249090" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED - RESERVOIRS, TANKS,\nVATS AND SIMILAR CONTAINERS, OF A CAPACITY EXCEEDING 300 L", - "hsn_code": "39251000" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED - DOORS, WINDOWS\nAND THEIR FRAMES AND THRESHOLDS FOR DOORS", - "hsn_code": "39252000" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SHUTTERS, BLINDS\n(INCLUDING VENETIAN BLINDS) AND SIMILAR ARTICLES AND PARTS THEREOF", - "hsn_code": "39253000" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OF\nPOLYURETHANE", - "hsn_code": "39259010" - }, - { - "description": "BUILDERS WARE OF PLASTICS, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER : OTHER", - "hsn_code": "39259090" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914 -\nOFFICE OR SCHOOL SUPPLIES: OFFICE SUPPLIES OF A KIND CLASSIFIED AS STATIONERY OTHER\nTHAN PINS, CLIPS, AND WRITING INSTRUMENTS : OF POLYURETHANE FOAM", - "hsn_code": "39261011" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914 -\nOFFICE OR SCHOOL SUPPLIES: OFFICE SUPPLIES OF A KIND CLASSIFIED AS STATIONERY OTHER\nTHAN PINS, CLIPS, AND WRITING INSTRUMENTS : OTHER", - "hsn_code": "39261019" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914 -\nOFFICE OR SCHOOL SUPPLIES: OTHER : OF POLYURETHANE FOAM", - "hsn_code": "39261091" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914 -\nOFFICE OR SCHOOL SUPPLIES: OTHER : OTHER", - "hsn_code": "39261099" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: I - GLOVES: DISPOSABLE", - "hsn_code": "39262011" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: I - GLOVES: NON - DISPOSABLE", - "hsn_code": "39262019" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: APRONS : OF POLYURETHANE FOAM", - "hsn_code": "39262021" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: APRONS : OTHER", - "hsn_code": "39262029" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: PLASTIC STICKERS FOR GARMENTS : OF POLYURETHANE FOAM", - "hsn_code": "39262031" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: PLASTIC STICKERS FOR GARMENTS : OTHER", - "hsn_code": "39262039" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: COLLAR STAYS, PATTIES, BUTTERFLY, SHOULDER - PADS AND OTHER STAYS : OF POLYURETHANE\nFOAM", - "hsn_code": "39262041" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: COLLAR STAYS, PATTIES, BUTTERFLY, SHOULDER - PADS AND OTHER STAYS : OTHER", - "hsn_code": "39262049" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: OTHER : OF POLYURETHANE FOAM", - "hsn_code": "39262091" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\n: OTHER : OTHER", - "hsn_code": "39262099" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nFITTINGS FOR FURNITURE, COACH WORK OR THE LIKE : OF POLYURETHANE FOAM", - "hsn_code": "39263010" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nFITTINGS FOR FURNITURE, COACH WORK OR THE LIKE : OTHER", - "hsn_code": "39263090" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : BANGLES : OF POLYURETHANE FOAM", - "hsn_code": "39264011" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : BANGLES : OTHER", - "hsn_code": "39264019" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : BEADS : OF POLYURETHANE FOAM", - "hsn_code": "39264021" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : BEADS : OTHER", - "hsn_code": "39264029" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : STATUETTES : OF POLYURETHANE FOAM", - "hsn_code": "39264031" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : STATUETTES : OTHER", - "hsn_code": "39264039" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : TABLE AND OTHER HOUSEHOLD ARTICLES\n(INCLUDING HOTEL AND RESTAURANT) FOR DECORATION : OF POLYURETHANE FOAM", - "hsn_code": "39264041" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : TABLE AND OTHER HOUSEHOLD ARTICLES\n(INCLUDING HOTEL AND RESTAURANT) FOR DECORATION : OTHER", - "hsn_code": "39264049" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : DECORATIVE SHEETS : OF POLYURETHANE\nFOAM", - "hsn_code": "39264051" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : DECORATIVE SHEETS : OTHER", - "hsn_code": "39264059" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES :SEQUINE", - "hsn_code": "39264060" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : OTHER : OF POLYURETHANE FOAM", - "hsn_code": "39264091" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nSTATUETTES AND OTHER ORNAMENTAL ARTICLES : OTHER : OTHER", - "hsn_code": "39264099" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : PVC BELT CONVEYOR", - "hsn_code": "39269010" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : COUPLERS, PACKING RINGS, O RINGS AND THE LIKE: OF POLYURETHANE FOAM", - "hsn_code": "39269021" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : COUPLERS, PACKING RINGS, O RINGS AND THE LIKE: OTHER", - "hsn_code": "39269029" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : LASTS, WITH OR WITHOUT STEEL HINGES ; EVA AND GRAPE SHEETS FOR SOLES AND\nHEELS; WELTS: OF POLYURETHANE FOAM", - "hsn_code": "39269031" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : LASTS, WITH OR WITHOUT STEEL HINGES ; EVA AND GRAPE SHEETS FOR SOLES AND\nHEELS; WELTS: OTHER", - "hsn_code": "39269039" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : RINGS, BUCKLES, TACKS, WASHERS AND OTHER DECORATIVE FITTINGS MADE OF\nPLASTIC USED AS TRIMMINGS AND EMBELLISHMENTS FOR LEATHER PRODUCTS; PATTERNS FOR\nLEATHER FOOT WEAR, LEATHER GARMENTS AND LEATHER GOODS: OF POLYURETHANE FOAM", - "hsn_code": "39269041" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : RINGS, BUCKLES, TACKS, WASHERS AND OTHER DECORATIVE FITTINGS MADE OF\nPLASTIC USED AS TRIMMINGS AND EMBELLISHMENTS FOR LEATHER PRODUCTS; PATTERNS FOR\nLEATHER FOOT WEAR, LEATHER GARMENTS AND LEATHER GOODS: OTHER", - "hsn_code": "39269049" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : RETROREFLECTIVE SHEETING OF OTHER THAN OF HEADING 3920 : OF POLYURETHANE\nFOAM", - "hsn_code": "39269051" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : RETROREFLECTIVE SHEETING OF OTHER THAN OF HEADING 3920 : OTHER", - "hsn_code": "39269059" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : HANGERS : OF POLYURETHANE FOAM", - "hsn_code": "39269061" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : HANGERS : OTHER", - "hsn_code": "39269069" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : PLASTIC OR NYLON TIPPED HAMMERS; INSULATING LINER OF NYLON , HDPE : OF\nPOLYURETHANE FOAM", - "hsn_code": "39269071" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : PLASTIC OR NYLON TIPPED HAMMERS; INSULATING LINER OF NYLON , HDPE : OTHER", - "hsn_code": "39269079" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : POLYPROPYLENE ARTICLES, NOT ELSEWHERE SPECIFIED OR INCLUDED", - "hsn_code": "39269080" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : OTHER: OF POLYURETHANE FOAM", - "hsn_code": "39269091" - }, - { - "description": "OTHER ARTICLES OF PLASTICS AND ARTICLES OF OTHER MATERIALS OF HEADINGS 3901 TO 3914-\nOTHER : OTHER: OTHER", - "hsn_code": "39269099" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER LATEX, WHETHER OR\nNOT PREVULCANISED : PREVULCANISED", - "hsn_code": "40011010" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER LATEX, WHETHER OR\nNOT PREVULCANISED : OTHER THAN PREVULCANISED", - "hsn_code": "40011020" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nSMOKED SHEETS", - "hsn_code": "40012100" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nTECHNICALLY SPECIFIED NATURAL RUBBER (TSNR)", - "hsn_code": "40012200" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nOTHER : HEVEA", - "hsn_code": "40012910" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nOTHER : PALE CREPE", - "hsn_code": "40012920" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nOTHER : ESTATE BROWN CREPE", - "hsn_code": "40012930" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nOTHER : OIL EXTENDED NATURAL RUBBER", - "hsn_code": "40012940" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - NATURAL RUBBER IN OTHER FORMS :\nOTHER : OTHER", - "hsn_code": "40012990" - }, - { - "description": "NATURAL RUBBER, BALATA, GUTTA-PERCHA, GUAYULE, CHICLE AND SIMILAR NATURAL GUMS,\nIN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP BALATA, GUTTA-PERCHA, GUAYULE, CHICLE\nAND SIMILAR NATURAL GUMS", - "hsn_code": "40013000" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - STYRENE-BUTADIENE RUBBER\n(SBR); CARBOXYLATED STYRENE-BUTADIENE RUBBER (XSBR) : LATEX", - "hsn_code": "40021100" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - STYRENE-BUTADIENE RUBBER\n(SBR); CARBOXYLATED STYRENE-BUTADIENE RUBBER (XSBR) : - OTHER : OIL EXTENDED STYRENE\nBUTADIENE RUBBER", - "hsn_code": "40021910" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - STYRENE-BUTADIENE RUBBER\n(SBR); CARBOXYLATED STYRENE-BUTADIENE RUBBER (XSBR) : - OTHER : STYRENE BUTADIENE\nRUBBER WITH STYRENE CONTENT EXCEEDING 50%", - "hsn_code": "40021920" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - STYRENE-BUTADIENE RUBBER\n(SBR); CARBOXYLATED STYRENE-BUTADIENE RUBBER (XSBR) : - OTHER : STYRENE BUTADIENE\nSTYRENE OIL BOUND COPOLYMER", - "hsn_code": "40021930" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP - STYRENE-BUTADIENE RUBBER\n(SBR); CARBOXYLATED STYRENE-BUTADIENE RUBBER (XSBR) : - OTHER : OTHER", - "hsn_code": "40021990" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIPBUTADIENE RUBBER (BR)", - "hsn_code": "40022000" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- ISOBUTENE-ISOPRENE (BUTYL)\nRUBBER (IIR); HALO-ISOBUTENE-ISOPRENE RUBBER (CIIR OR BIIR) : ISOBUTENE-ISOPRENE\n(BUTYL) RUBBER (IIR)", - "hsn_code": "40023100" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- ISOBUTENE-ISOPRENE (BUTYL)\nRUBBER (IIR); HALO-ISOBUTENE-ISOPRENE RUBBER (CIIR OR BIIR) : OTHER", - "hsn_code": "40023900" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- CHLORPRENE\n(CHLOROBUTADIENE) RUBBER (CR) : LATEX", - "hsn_code": "40024100" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- CHLORPRENE\n(CHLOROBUTADIENE) RUBBER (CR) : OTHER", - "hsn_code": "40024900" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- ACRYLONITRILE-BUTADIENE\nRUBBER (NBR) : LATEX", - "hsn_code": "40025100" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- ACRYLONITRILE-BUTADIENE\nRUBBER (NBR) : OTHER", - "hsn_code": "40025900" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIPISOPRENE RUBBER (IR)", - "hsn_code": "40026000" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIPETHYLENE-PROPYLENE-NON\nCONJUGATED DIENE RUBBER (EPDM)", - "hsn_code": "40027000" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- MIXTURES OF ANY PRODUCT OF\nHEADING 40 01 WITH ANY PRODUCT OF THIS HEADING : LATEX", - "hsn_code": "40028010" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- MIXTURES OF ANY PRODUCT OF\nHEADING 40 01 WITH ANY PRODUCT OF THIS HEADING : CHEMICALLY MODIFIED FORM OF\nNATURAL RUBBER INCLUDING GRAFT RUBBER", - "hsn_code": "40028020" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- MIXTURES OF ANY PRODUCT OF\nHEADING 40 01 WITH ANY PRODUCT OF THIS HEADING : OTHER", - "hsn_code": "40028090" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- OTHER : LATEX", - "hsn_code": "40029100" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- OTHER : OTHER FACTICE\n(RUBBER SUBSTITUTE DERIVED FROM OIL)", - "hsn_code": "40029910" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- OTHER : OTHERTREAD RUBBER\nCOMPOUND, CUSHION COMPOUND, CUSHION GUM AND TREAD GUM FOR RESOLING OR\nREPAIRING OR RETREADING RUBBER TYRES", - "hsn_code": "40029920" - }, - { - "description": "SYNTHETIC RUBBER AND FACTICE DERIVED FROM OILS, IN PRIMARY FORMS OR IN PLATES,\nSHEETS OR STRIP; MIXTURES OF ANY PRODUCT OF HEADING 4001 WITH ANY PRODUCT OF THIS\nHEADING, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP- OTHER : OTHEROTHER", - "hsn_code": "40029990" - }, - { - "description": "RECLAIMED RUBBER IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP", - "hsn_code": "40030000" - }, - { - "description": "WASTE, PARINGS AND SCRAP OF RUBBER (OTHER THAN HARD RUBBER) AND POWDERS AND\nGRANULES OBTAINED THEREFROM", - "hsn_code": "40040000" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP\nCOMPOUNDED WITH CARBON BLACK OR SILICA", - "hsn_code": "40051000" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nSOLUTIONS; DISPERSIONS OTHER THAN THOSE OF SUB-HEADING 4005 10 : CAN SEALING\nCOMPOUND", - "hsn_code": "40052010" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nSOLUTIONS; DISPERSIONS OTHER THAN THOSE OF SUB-HEADING 4005 10 : OTHER", - "hsn_code": "40052090" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nOTHER : PLATES, SHEETS AND STRIP : HOSPITAL SHEETING", - "hsn_code": "40059110" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nOTHER : PLATES, SHEETS AND STRIP : OTHER", - "hsn_code": "40059190" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nOTHER : - OTHER : GRANULES OF UNVULCANISED NATURAL OR SYNTHETIC RUBBER,\nCOMPOUNDED, READY FOR VULCANIZATION", - "hsn_code": "40059910" - }, - { - "description": "COMPOUNDED RUBBER, UNVULCANISED, IN PRIMARY FORMS OR IN PLATES, SHEETS OR STRIP -\nOTHER : - OTHER : OTHER", - "hsn_code": "40059990" - }, - { - "description": "OTHER FORMS (FOR EXAMPLE, RODS, TUBES AND PROFILE SHAPES) AND ARTICLES (FOR\nEXAMPLE, DISCS AND RINGS), OF UNVULCANISED RUBBER STRIPS FOR RETREADING RUBBER\nTYRES", - "hsn_code": "40061000" - }, - { - "description": "OTHER FORMS (FOR EXAMPLE, RODS, TUBES AND PROFILE SHAPES) AND ARTICLES (FOR\nEXAMPLE, DISCS AND RINGS), OF UNVULCANISED RUBBER - OTHER : THREAD, NOT COVERED", - "hsn_code": "40069010" - }, - { - "description": "OTHER FORMS (FOR EXAMPLE, RODS, TUBES AND PROFILE SHAPES) AND ARTICLES (FOR\nEXAMPLE, DISCS AND RINGS), OF UNVULCANISED RUBBER - OTHER : OTHER", - "hsn_code": "40069090" - }, - { - "description": "VULCANISED RUBBER THREAD AND CORD - VULCANISED RUBBER THREAD AND CORD : THREAD,\nNOT COVERED", - "hsn_code": "40070010" - }, - { - "description": "VULCANISED RUBBER THREAD AND CORD - VULCANISED RUBBER THREAD AND CORD : CORD,\nNOT COVERED", - "hsn_code": "40070020" - }, - { - "description": "VULCANISED RUBBER THREAD AND CORD - VULCANISED RUBBER THREAD AND CORD : OTHER", - "hsn_code": "40070090" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF CELLULAR RUBBER : - PLATES, SHEETS AND STRIP : OF MICRO-CELLULAR\nRUBBER", - "hsn_code": "40081110" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF CELLULAR RUBBER : - PLATES, SHEETS AND STRIP : OTHER", - "hsn_code": "40081190" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF CELLULAR RUBBER : - OTHER : BLOCKS OF MICRO-CELLULAR RUBBER BUT\nNOT OF LATEX FOAM SPONGE, USED IN THE MANUFACTURE OF SOLES, HEELS OR SOLES AND\nHEELS COMBINED, FOR FOOTWEAR", - "hsn_code": "40081910" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF CELLULAR RUBBER : - OTHER : OTHER", - "hsn_code": "40081990" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : PLATES, SHEETS AND STRIP : USED IN THE\nMANUFACTURE OF SOLES, HEELS OR SOLES AND HEELS COMBINED, FOR FOOTWEAR", - "hsn_code": "40082110" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : PLATES, SHEETS AND STRIP : FOR RESOLING OR\nREPAIRING OR RETREADING RUBBER TYRES", - "hsn_code": "40082120" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : PLATES, SHEETS AND STRIP : OTHER", - "hsn_code": "40082190" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : OTHER : RUBBER SHEETS AND RESIN RUBBER\nSHEETS FOR SOLES AND HEELS", - "hsn_code": "40082910" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : OTHER : BLOCKS USED IN THE MANUFACTURE OF\nSOLES, HEELS OR SOLES AND HEELS COMBINED, FOR FOOTWEAR", - "hsn_code": "40082920" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : OTHER : LATEX FOAM SPONGE", - "hsn_code": "40082930" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : OTHER : TREAD RUBBER AND TREAD PACKING\nSTRIP FOR RESOLING OR REPAIRING OR RETREADING RUBBER TYRES", - "hsn_code": "40082940" - }, - { - "description": "PLATES, SHEETS, STRIP, RODS AND PROFILE SHAPES, OF VULCANISED RUBBER OTHER THAN\nHARD RUBBER - OF NON-CELLULAR RUBBER : OTHER : OTHER", - "hsn_code": "40082990" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - NOT REINFORCED OR\nOTHERWISE COMBINED WITH OTHER MATERIALS : WITHOUT FITTINGS", - "hsn_code": "40091100" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - NOT REINFORCED OR\nOTHERWISE COMBINED WITH OTHER MATERIALS : WITH FITTINGS", - "hsn_code": "40091200" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED ONLY WITH METAL : WITHOUT FITTINGS", - "hsn_code": "40092100" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED ONLY WITH METAL : WITH FITTINGS", - "hsn_code": "40092200" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED ONLY WITH TEXTILE MATERIALS : WITHOUT FITTINGS", - "hsn_code": "40093100" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED ONLY WITH TEXTILE MATERIALS : WITH FITTINGS", - "hsn_code": "40093200" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED WITH OTHER MATERIALS : WITHOUT FITTINGS", - "hsn_code": "40094100" - }, - { - "description": "TUBES, PIPES AND HOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER, WITH OR\nWITHOUT THEIR FITTINGS (FOR EXAMPLE, JOINTS, ELBOWS, FLANGES) - REINFORCED OR\nOTHERWISE COMBINED WITH OTHER MATERIALS : WITH FITTINGS", - "hsn_code": "40094200" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH METAL : WHERE THE RUBBER COMPOUND CONTENT IS\nLESS THAN 25% BY WEIGHT", - "hsn_code": "40101110" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH METAL : OTHER", - "hsn_code": "40101190" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH TEXTILE MATERIALS : WHERE THE RUBBER COMPOUND\nCONTENT IS LESS THAN 25% BY WEIGHT", - "hsn_code": "40101210" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH TEXTILE MATERIALS : OTHER", - "hsn_code": "40101290" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH PLASTICS : WHERE THE RUBBER COMPOUND CONTENT\nIS LESS THAN 25% BY WEIGHT", - "hsn_code": "40101310" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - REINFORCED ONLY WITH PLASTICS : OTHER", - "hsn_code": "40101390" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - OTHER : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY\nWEIGHT", - "hsn_code": "40101910" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - CONVEYOR BELTS\nOR BELTING : - OTHER : OTHER", - "hsn_code": "40101990" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nV-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 180 CM BUT NOT EXCEEDING 240 CM :\nWHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY WEIGHT", - "hsn_code": "40103110" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nV-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 180 CM BUT NOT EXCEEDING 240 CM :\nOTHER", - "hsn_code": "40103190" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nOTHER THAN V-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 60 CM BUT NOT\nEXCEEDING 180 CM : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY WEIGHT", - "hsn_code": "40103210" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nOTHER THAN V-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 60 CM BUT NOT\nEXCEEDING 180 CM : OTHER", - "hsn_code": "40103290" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nV-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 60 CM BUT NOT EXCEEDING 180 CM :\nWHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY WEIGHT", - "hsn_code": "40103310" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nV-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 60 CM BUT NOT EXCEEDING 180 CM :\nOTHER", - "hsn_code": "40103390" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nOTHER THAN V-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 180 CM BUT NOT\nEXCEEDING 240 CM : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY WEIGHT", - "hsn_code": "40103410" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS TRANSMISSION BELTS OF TRAPEZOIDAL CROSS-SECTION (V-BELTS),\nOTHER THAN V-RIBBED, OF AN OUTSIDE CIRCUMFERENCE EXCEEDING 180 CM BUT NOT\nEXCEEDING 240 CM : OTHER", - "hsn_code": "40103490" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS SYNCHRONOUS BELTS OF AN OUTSIDE CIRCUMFERENCE\nEXCEEDING 60 CM BUT NOT EXCEEDING 150 CM : WHERE THE RUBBER COMPOUND CONTENT IS\nLESS THAN 25% BY WEIGHT", - "hsn_code": "40103510" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS SYNCHRONOUS BELTS OF AN OUTSIDE CIRCUMFERENCE\nEXCEEDING 60 CM BUT NOT EXCEEDING 150 CM : OTHER", - "hsn_code": "40103590" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS SYNCHRONOUS BELTS OF AN OUTSIDE CIRCUMFERENCE\nEXCEEDING 150 CM BUT NOT EXCEEDING 198 CM : WHERE THE RUBBER COMPOUND CONTENT\nIS LESS THAN 25% BY WEIGHT", - "hsn_code": "40103610" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : ENDLESS SYNCHRONOUS BELTS OF AN OUTSIDE CIRCUMFERENCE\nEXCEEDING 150 CM BUT NOT EXCEEDING 198 CM : OTHER", - "hsn_code": "40103690" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY\nWEIGHT : ENDLESS FLAT BELT", - "hsn_code": "40103911" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY\nWEIGHT : PLY BELTING", - "hsn_code": "40103912" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : WHERE THE RUBBER COMPOUND CONTENT IS LESS THAN 25% BY\nWEIGHT : OTHER", - "hsn_code": "40103919" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : OTHER : ENDLESS FLAT BELT", - "hsn_code": "40103991" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : OTHER : PLY BELTING", - "hsn_code": "40103992" - }, - { - "description": "CONVEYOR OR TRANSMISSION BELTS OR BELTING OF VULCANISED RUBBER - TRANSMISSION\nBELTS OR BELTING : OTHER : OTHER : OTHER", - "hsn_code": "40103999" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON MOTOR CARS (INCLUDING STATION\nWAGONS AND RACING CARS) : RADIALS", - "hsn_code": "40111010" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON MOTOR CARS (INCLUDING STATION\nWAGONS AND RACING CARS) : OTHER", - "hsn_code": "40111090" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON BUSES OR LORRIES : RADIALS", - "hsn_code": "40112010" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON BUSES OR LORRIES : OTHER", - "hsn_code": "40112090" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER OF A KIND USED ON AIRCRAFT", - "hsn_code": "40113000" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON MOTOR CYCLES : FOR MOTOR CYCLES", - "hsn_code": "40114010" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON MOTOR CYCLES : FOR MOTOR\nSCOOTERS", - "hsn_code": "40114020" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON MOTOR CYCLES : OTHER", - "hsn_code": "40114090" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON BICYCLES : MULTI-CELLULAR\nPOLYURETHANE (MCP) TUBELESS TYRES", - "hsn_code": "40115010" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OF A KIND USED ON BICYCLES : OTHER, HAVING A\nHERRING-BONE ORSIMILAR TREAD", - "hsn_code": "40115090" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER, HAVING A HERRING-BONE OR SIMILAR TREAD :\nOF A KIND USED ON AGRICULTURAL OR FORESTRY VEHICLES AND MACHINES", - "hsn_code": "40116100" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER, HAVING A HERRING-BONE OR SIMILAR TREAD :\nOF A KIND USED ON CONSTRUCTION OR INDUSTRIAL HANDLING VEHICLES AND MACHINES AND\nHAVING A RIM SIZE NOT EXCEEDING 61 CM", - "hsn_code": "40116200" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER, HAVING A HERRING-BONE OR SIMILAR TREAD :\nOF A KIND USED ON CONSTRUCTION OR INDUSTRIAL HANDLING VEHICLES AND MACHINES AND\nHAVING A RIM SIZE EXCEEDING 61 CM", - "hsn_code": "40116300" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER, HAVING A HERRING-BONE OR SIMILAR TREAD :\nOTHER", - "hsn_code": "40116900" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER : OF A KIND USED ON AGRICULTURAL OR\nFORESTRY VEHICLES AND MACHINES", - "hsn_code": "40119200" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER : OF A KIND USED ON CONSTRUCTION OR\nINDUSTRIAL HANDLING VEHICLES AND MACHINES AND HAVING A RIM SIZE NOT EXCEEDING 61\nCM", - "hsn_code": "40119300" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER : OF A KIND USED ON CONSTRUCTION OR\nINDUSTRIAL HANDLING VEHICLES AND MACHINES AND HAVING A RIM SIZE EXCEEDING 61 CM", - "hsn_code": "40119400" - }, - { - "description": "NEW PNEUMATIC TYRES, OF RUBBER - OTHER : OTHER", - "hsn_code": "40119900" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - RETREADED TYRES : OF A KIND USED ON MOTOR CARS\n(INCLUDING STATION WAGONS AND RACING CARS)", - "hsn_code": "40121100" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - RETREADED TYRES : OF A KIND USED ON BUSES OR LORRIES", - "hsn_code": "40121200" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - RETREADED TYRES : OF A KIND USED ON AIRCRAFT", - "hsn_code": "40121300" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - RETREADED TYRES : - OTHER : FOR TWO WHEELERS", - "hsn_code": "40121910" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - RETREADED TYRES : - OTHER : OTHER", - "hsn_code": "40121990" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - USED PNEUMATIC TYRES : FOR BUSES, LORRIES AND EARTH\nMOVING EQUIPMENTS INCLUDING LIGHT COMMERCIAL VEHICLES", - "hsn_code": "40122010" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - USED PNEUMATIC TYRES : FOR PASSENGER AUTOMOBILE\nVEHICLES, INCLUDING TWO WHEELERS, THREE WHEELERS AND PERSONAL TYPE VEHICLES", - "hsn_code": "40122020" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - USED PNEUMATIC TYRES : OTHER", - "hsn_code": "40122090" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : SOLID RUBBER TYRES FOR MOTOR VEHICLES", - "hsn_code": "40129010" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : SOLID RUBBER TYRES FOR OTHER VEHICLES", - "hsn_code": "40129020" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : TYRES WITH METAL FRAMEWORK", - "hsn_code": "40129030" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : - TYRE FLAPS : OF A KIND USED IN TWO-WHEELED AND\nTHREE-WHEELED MOTOR VEHICLES", - "hsn_code": "40129041" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : - TYRE FLAPS : OTHER", - "hsn_code": "40129049" - }, - { - "description": "T RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : YRE TREADS, INTERCHANGEABLE", - "hsn_code": "40129050" - }, - { - "description": "RETREADED OR USED PNEUMATIC TYRES OF RUBBER, SOLID OR CUSHION TYRES, TYRE TREADS\nAND TYRE FLAPS, OF RUBBER - OTHER : OTHER", - "hsn_code": "40129090" - }, - { - "description": "INNER TUBES, OF RUBBER - OF A KIND USED ON MOTOR CARS (INCLUDING STATION WAGONS\nAND RACING CARS), BUSES OR LORRIES : FOR MOTOR CARS", - "hsn_code": "40131010" - }, - { - "description": "INNER TUBES, OF RUBBER - OF A KIND USED ON MOTOR CARS (INCLUDING STATION WAGONS\nAND RACING CARS), BUSES OR LORRIES : FOR LORRIES AND BUSES", - "hsn_code": "40131020" - }, - { - "description": "INNER TUBES, OF RUBBER OF A KIND USED ON BICYCLES", - "hsn_code": "40132000" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : FOR AIRCRAFT", - "hsn_code": "40139010" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : FOR MOTOR CYCLE", - "hsn_code": "40139020" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : FOR OFF THE ROAD VEHICLES, NOT ELSEWHERE SPECIFIED\nOR INCLUDED", - "hsn_code": "40139030" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : - FOR TRACTORS : REAR TYRES", - "hsn_code": "40139041" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : - FOR TRACTORS : OTHER", - "hsn_code": "40139049" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : OF A KIND USED IN TYRES OF CYCLE RICKSHAWS AND THREE\nWHEELED POWERED CYCLE-RICKSHAWS", - "hsn_code": "40139050" - }, - { - "description": "INNER TUBES, OF RUBBER - OTHER : OTHER", - "hsn_code": "40139090" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - SHEATH\nCONTRACEPTIVES : RUBBER CONTRACEPTIVES, MALE (CONDOMS)", - "hsn_code": "40141010" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - SHEATH\nCONTRACEPTIVES : RUBBER CONTRACEPTIVES, FEMALE (DIAPHRAGMS), SUCH AS CERVICAL CAPS", - "hsn_code": "40141020" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - OTHER : HOT WATER\nBOTTLES", - "hsn_code": "40149010" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - OTHER : ICE BAGS", - "hsn_code": "40149020" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - OTHER : FEEDING BOTTLE\nNIPPLES", - "hsn_code": "40149030" - }, - { - "description": "HYGIENIC OR PHARMACEUTICAL ARTICLES (INCLUDING TEATS), OF VULCANISED RUBBER OTHER\nTHAN HARD RUBBER, WITH OR WITHOUT FITTINGS OF HARD RUBBER - OTHER : OTHER", - "hsn_code": "40149090" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - GLOVES, MITTENS\nAND MITTS : SURGICAL", - "hsn_code": "40151100" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - GLOVES, MITTENS\nAND MITTS : OTHER", - "hsn_code": "40151900" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : RUBBER\nAPRON", - "hsn_code": "40159010" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : LABELS", - "hsn_code": "40159020" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : INDUSTRIAL\nGLOVES", - "hsn_code": "40159030" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : - OTHER :\nDIVING SUITS", - "hsn_code": "40159091" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES (INCLUDING GLOVES, MITTENS AND MITTS)\nFOR ALL PURPOSES, OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : - OTHER :\nOTHER", - "hsn_code": "40159099" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER OF CELLULAR RUBBER", - "hsn_code": "40161000" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : FLOOR\nCOVERINGS AND MATS", - "hsn_code": "40169100" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : ERASERS", - "hsn_code": "40169200" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : PATCHES FOR PUNCTURE REPAIR OF SELF-VULCANISING RUBBER\nOR A RUBBER BACKING", - "hsn_code": "40169310" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : RUBBER RINGS (O-RING)", - "hsn_code": "40169320" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : RUBBER SEALS (OIL SEALS AND THE LIKE)", - "hsn_code": "40169330" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : GASKETS", - "hsn_code": "40169340" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : WASHERS", - "hsn_code": "40169350" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : PLUGS", - "hsn_code": "40169360" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : GASKETS,\nWASHERS AND OTHER SEALS : OTHER", - "hsn_code": "40169390" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : BOAT OR DOCK\nFENDERS, WHETHER OR NOT INFLATABLE", - "hsn_code": "40169400" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER\nINFLATABLE ARTICLES : AIR MATTRESSES", - "hsn_code": "40169510" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER\nINFLATABLE ARTICLES : OTHER", - "hsn_code": "40169590" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER COTS FOR TEXTILE INDUSTRY", - "hsn_code": "40169910" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER BANDS", - "hsn_code": "40169920" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER THREADS", - "hsn_code": "40169930" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER BLANKETS", - "hsn_code": "40169940" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER CUSHIONS", - "hsn_code": "40169950" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nRUBBER BUSHES", - "hsn_code": "40169960" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER : EAR\nPLUG", - "hsn_code": "40169970" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER :\nSTOPPERS", - "hsn_code": "40169980" - }, - { - "description": "OTHER ARTICLES OF VULCANISED RUBBER OTHER THAN HARD RUBBER - OTHER : OTHER : OTHER", - "hsn_code": "40169990" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : PLATES, SHEETS, RODS AND TUBES\nOF EBONITE AND VULCANITE", - "hsn_code": "40170010" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : SCRAP, WASTE AND POWDER OF\nHARDENED RUBBER (EBONITE AND VULCANITE)", - "hsn_code": "40170020" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : PRINTERS ROLLERS", - "hsn_code": "40170030" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : TEXTILE ROLLERS", - "hsn_code": "40170040" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : TYPEWRITERS AND CYCLOSTYLING\nROLLERS", - "hsn_code": "40170050" - }, - { - "description": "HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS, INCLUDING WASTE AND SCRAP;\nARTICLES OF HARD RUBBER - HARD RUBBER (FOR EXAMPLE, EBONITE) IN ALL FORMS,\nINCLUDING WASTE AND SCRAP; ARTICLES OF HARD RUBBER : OTHER", - "hsn_code": "40170090" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS OF A WEIGHT PER SKIN NOT EXCEEDING 8 KG WHEN SIMPLY DRIED, 10 KG WHEN DRY\nSALTED, OR 16 KG WHEN FRESH, WET-SALTED OR OTHERWISE PRESERVED: OF COW, INCLUDING\nCOW CALF", - "hsn_code": "41012010" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS OF A WEIGHT PER SKIN NOT EXCEEDING 8 KG WHEN SIMPLY DRIED, 10 KG WHEN DRY\nSALTED, OR 16 KG WHEN FRESH, WET-SALTED OR OTHERWISE PRESERVED: OF BUFFALO,\nINCLUDING BUFFALO CALF", - "hsn_code": "41012020" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS OF A WEIGHT PER SKIN NOT EXCEEDING 8 KG WHEN SIMPLY DRIED, 10 KG WHEN DRY\nSALTED, OR 16 KG WHEN FRESH, WET-SALTED OR OTHERWISE PRESERVED: OTHER", - "hsn_code": "41012090" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS, OF A WEIGHT EXCEEDING 16 KG : OF COW, INCLUDING COW CALF", - "hsn_code": "41015010" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS, OF A WEIGHT EXCEEDING 16 KG : OF BUFFALO, INCLUDING BUFFALO CALF", - "hsn_code": "41015020" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - WHOLE HIDES AND\nSKINS, OF A WEIGHT EXCEEDING 16 KG : OTHER", - "hsn_code": "41015090" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - OTHER, INCLUDING\nBUTTS, BENDS AND BELLIES: OF COW, INCLUDING COW CALF", - "hsn_code": "41019010" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - OTHER, INCLUDING\nBUTTS, BENDS AND BELLIES: OF BUFFALO, INCLUDING BUFFALO CALF", - "hsn_code": "41019020" - }, - { - "description": "RAW HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS (FRESH OR\nSALTED, DRIED, LIMED, PICKLED OR OTHERWISE PRESERVED, BUT NOT TANNED, PARCHMENT\nDRESSED OR FURTHER PREPARED), WHETHER OR NOT DEHAIRED OR SPLIT - OTHER, INCLUDING\nBUTTS, BENDS AND BELLIES: OTHER", - "hsn_code": "41019090" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITH WOOL ON: SHEEP SKINS", - "hsn_code": "41021010" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITH WOOL ON: PELTS OF BABY LAMBS", - "hsn_code": "41021020" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITH WOOL ON: LAMB SKINS, OTHER THAN PELTS", - "hsn_code": "41021030" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITHOUT WOOL ON : - PICKLED : SHEEP SKINS", - "hsn_code": "41022110" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITHOUT WOOL ON : - PICKLED : LAMB SKINS", - "hsn_code": "41022120" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITHOUT WOOL ON : - PICKLED : LAMB PELT", - "hsn_code": "41022130" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITHOUT WOOL ON : - OTHER : SHEEP SKINS", - "hsn_code": "41022910" - }, - { - "description": "RAW SKINS OF SHEEP OR LAMBS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT WITH WOOL ON OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1 ( C ) TO THIS\nCHAPTER- WITHOUT WOOL ON : - OTHER : LAMB SKINS", - "hsn_code": "41022920" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF GOATS OR KIDS : GOAT SKINS, PICKLED (WET SALTED)", - "hsn_code": "41031010" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF GOATS OR KIDS : GOAT SKINS, DRY SALTED", - "hsn_code": "41031020" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF GOATS OR KIDS : GOAT SKINS, OTHERWISE CURED (DRIED, UNSALTED)", - "hsn_code": "41031030" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF GOATS OR KIDS : KID SKINS", - "hsn_code": "41031040" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF GOATS OR KIDS : OTHER", - "hsn_code": "41031090" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF REPTILES", - "hsn_code": "41032000" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OF SWINE", - "hsn_code": "41033000" - }, - { - "description": "OTHER RAW HIDES AND SKINS (FRESH, OR SALTED, DRIED, LIMED, PICKLED OR OTHERWISE\nPRESERVED, BUT NOT TANNED, PARCHMENT-DRESSED OR FURTHER PREPARED), WHETHER OR\nNOT DEHAIRED OR SPLIT, OTHER THAN THOSE EXCLUDED BY NOTE 1(B) OR 1(C) TO THIS\nCHAPTER - OTHER", - "hsn_code": "41039000" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS,\nWITHOUT HAIR ON, WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED - IN THE WET STATE\n(INCLUDING WET-BLUE): FULL GRAINS, UNSPLIT; GRAIN SPLITS", - "hsn_code": "41041100" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS,\nWITHOUT HAIR ON, WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED - IN THE WET STATE\n(INCLUDING WET-BLUE): OTHER", - "hsn_code": "41041900" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS,\nWITHOUT HAIR ON, WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED - IN THE DRY STATE\n(CRUST): FULL GRAINS, UNSPLIT; GRAIN SPLITS", - "hsn_code": "41044100" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS,\nWITHOUT HAIR ON, WHETHER OR NOT SPLIT, BUT NOT FURTHER PREPARED - IN THE DRY STATE\n(CRUST): OTHER", - "hsn_code": "41044900" - }, - { - "description": "TANNED OR CRUST SKINS OF SHEEP OR LAMBS, WITHOUT WOOL ON, WHETHER OR NOT SPLIT,\nBUT NOT FURTHER PREPARED - IN THE WET STATE (INCLUDING WET-BLUE)", - "hsn_code": "41051000" - }, - { - "description": "TANNED OR CRUST SKINS OF SHEEP OR LAMBS, WITHOUT WOOL ON, WHETHER OR NOT SPLIT,\nBUT NOT FURTHER PREPARED - IN THE DRY STATE (CRUST)", - "hsn_code": "41053000" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OF GOATS OR KIDS: IN THE WET STATE\n(INCLUDING WET-BLUE)", - "hsn_code": "41062100" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OF GOATS OR KIDS: IN THE DRY STATE\n(CRUST)", - "hsn_code": "41062200" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OF SWINE: IN THE WET STATE\n(INCLUDING WET-BLUE)", - "hsn_code": "41063100" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OF SWINE: IN THE DRY STATE (CRUST)", - "hsn_code": "41063200" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OF REPTILES", - "hsn_code": "41064000" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OTHER: IN THE WET STATE (INCLUDING\nWET-BLUE)", - "hsn_code": "41069100" - }, - { - "description": "TANNED OR CRUST HIDES AND SKINS OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON,\nWHETHER OR NOT SPLIT BUT NOT FURTHER PREPARED - OTHER: IN THE DRY STATE (CRUST)", - "hsn_code": "41069200" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - WHOLE HIDES AND SKINS:\nFULL GRAINS, UNSPLIT", - "hsn_code": "41071100" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - WHOLE HIDES AND SKINS:\nGRAIN SPLITS", - "hsn_code": "41071200" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - WHOLE HIDES AND SKINS:\nOTHER", - "hsn_code": "41071900" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - OTHER, INCLUDING SIDES:\nFULL GRAINS, UNSPLIT", - "hsn_code": "41079100" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - OTHER, INCLUDING SIDES:\nGRAIN SPLITS", - "hsn_code": "41079200" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF BOVINE (INCLUDING BUFFALO) OR EQUINE ANIMALS, WITHOUT HAIR ON,\nWHETHER OR NOT SPLIT, OTHER THAN LEATHER OF HEADING 4114 - OTHER, INCLUDING SIDES:\nOTHER", - "hsn_code": "41079900" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF SHEEP OR LAMB, WITHOUT WOOL ON, WHETHER OR NOT SPLIT, OTHER THAN\nLEATHER OF HEADING 4114", - "hsn_code": "41120000" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT, OTHER\nTHAN LEATHER OF HEADING 4114 - OF GOATS OR KIDS", - "hsn_code": "41131000" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT, OTHER\nTHAN LEATHER OF HEADING 4114 - OF SWINE", - "hsn_code": "41132000" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT, OTHER\nTHAN LEATHER OF HEADING 4114 - OF REPTILES", - "hsn_code": "41133000" - }, - { - "description": "LEATHER FURTHER PREPARED AFTER TANNING OR CRUSTING, INCLUDING PARCHMENT-DRESSED\nLEATHER, OF OTHER ANIMALS, WITHOUT WOOL OR HAIR ON, WHETHER OR NOT SPLIT, OTHER\nTHAN LEATHER OF HEADING 4114 - OTHER", - "hsn_code": "41139000" - }, - { - "description": "CHAMOIS (INCLUDING COMBINATION CHAMOIS) LEATHER; PATENT LEATHER AND PATENT\nLAMINATED LEATHER ; METALLISED LEATHER - CHAMOIS (INCLUDING COMBINATION CHAMOIS)\nLEATHER", - "hsn_code": "41141000" - }, - { - "description": "CHAMOIS (INCLUDING COMBINATION CHAMOIS) LEATHER; PATENT LEATHER AND PATENT\nLAMINATED LEATHER ; METALLISED LEATHER - PATENT LEATHER AND PATENT LAMINATED\nLEATHER; METALLISED LEATHER :PATENT LEATHER AND PATENT LAMINATED LEATHER", - "hsn_code": "41142010" - }, - { - "description": "CHAMOIS (INCLUDING COMBINATION CHAMOIS) LEATHER; PATENT LEATHER AND PATENT\nLAMINATED LEATHER ; METALLISED LEATHER - PATENT LEATHER AND PATENT LAMINATED\nLEATHER; METALLISED LEATHER :METALLISED LEATHER", - "hsn_code": "41142020" - }, - { - "description": "COMPOSITION LEATHER WITH A BASIS OF LEATHER OR LEATHER FIBER, IN SLABS, SHEETS OR\nSTRIP, WHETHER OR NOT IN ROLLS; PARINGS AND OTHER WASTE OF LEATHER OR OF\nCOMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES;\nLEATHER DUST, POWDER AND FLOUR - COMPOSITION LEATHER WITH A BASIS OF LEATHER OR\nLEATHER FIBER, IN SLABS, SHEETS OR STRIP, WHETHER OR NOT IN ROLLS", - "hsn_code": "41151000" - }, - { - "description": "COMPOSITION LEATHER WITH A BASIS OF LEATHER OR LEATHER FIBER, IN SLABS, SHEETS OR\nSTRIP, WHETHER OR NOT IN ROLLS; PARINGS AND OTHER WASTE OF LEATHER OR OF\nCOMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES;\nLEATHER DUST, POWDER AND FLOUR - PARINGS AND OTHER WASTE OF LEATHER OR OF\nCOMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES ;\nLEATHER DUST, POWDER AND FLOUR: CUTTINGS OF LEATHER", - "hsn_code": "41152010" - }, - { - "description": "COMPOSITION LEATHER WITH A BASIS OF LEATHER OR LEATHER FIBER, IN SLABS, SHEETS OR\nSTRIP, WHETHER OR NOT IN ROLLS; PARINGS AND OTHER WASTE OF LEATHER OR OF\nCOMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES;\nLEATHER DUST, POWDER AND FLOUR - PARINGS AND OTHER WASTE OF LEATHER OR OF\nCOMPOSITION LEATHER, NOT SUITABLE FOR THE MANUFACTURE OF LEATHER ARTICLES ;\nLEATHER DUST, POWDER AND FLOUR : OTHER", - "hsn_code": "41152090" - }, - { - "description": "SADDLERY AND HARNESS FOR ANY ANIMAL (INCLUDING TRACES, LEADS, KNEE PADS, MUZZLES,\nSADDLE CLOTHS, SADDLE BAGS, DOG COATS AND THE LIKE), OF ANY MATERIAL", - "hsn_code": "42010000" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : TRAVEL GOODS (TRUNKS, SUIT-CASES, SPORTS BAGS AND\nOTHER SIMILAR ITEMS ) OF LEATHER", - "hsn_code": "42021110" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : TOILET-BAGS AND CASES, OF LEATHER", - "hsn_code": "42021120" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : SATCHELS", - "hsn_code": "42021130" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : BRIEF-CASES", - "hsn_code": "42021140" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : EXECUTIVE-CASES", - "hsn_code": "42021150" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : VANITY-CASES", - "hsn_code": "42021160" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : ATTACHE-CASES", - "hsn_code": "42021170" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION\nLEATHER OR OF PATENT LEATHER : OTHER", - "hsn_code": "42021190" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : TOILET-CASES", - "hsn_code": "42021210" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : PLASTIC MOULDED SUIT-CASES", - "hsn_code": "42021220" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : PLASTIC MOULDED BRIEF-CASES", - "hsn_code": "42021230" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : SATCHELS", - "hsn_code": "42021240" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : OTHER TRAVEL-GOODS", - "hsn_code": "42021250" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : BRIEF-CASES", - "hsn_code": "42021260" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : EXECUTIVE-CASES OTHER THAN PLASTIC MOULDED", - "hsn_code": "42021270" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : VANITY-CASES", - "hsn_code": "42021280" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : WITH OUTER SURFACE OF PLASTIC OR OF TEXTILE\nMATERIALS : OTHER", - "hsn_code": "42021290" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : TRAVEL GOODS (TRUNKS, SUIT-CASES, SPORTS\nBAGS, AND OTHER SIMILAR ITEMS) OF LEATHER", - "hsn_code": "42021910" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : TOILET-CASES", - "hsn_code": "42021920" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : SATCHELS", - "hsn_code": "42021930" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : BRIEF-CASES (OTHER THAN PLASTIC MOULDED)", - "hsn_code": "42021940" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : EXECUTIVE-CASES", - "hsn_code": "42021950" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : VANITY-CASES", - "hsn_code": "42021960" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - TRUNK\\S, SUIT-CASES, VANITY-CASES, EXECUTIVE CASES, BRIEF-CASES, SCHOOL\nSATCHELS AND SIMILAR CONTAINERS : OTHER : OTHER", - "hsn_code": "42021990" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT\nLEATHER : HAND-BAGS FOR LADIES", - "hsn_code": "42022110" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT\nLEATHER : VANITY-BAGS", - "hsn_code": "42022120" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT\nLEATHER : OTHER", - "hsn_code": "42022190" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : HAND-BAGS\nAND SHOPPING BAGS, OF ARTIFICIAL PLASTIC MATERIAL", - "hsn_code": "42022210" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : HAND-BAGS\nAND SHOPPING BAGS, OF COTTON", - "hsn_code": "42022220" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : HAND-BAGS\nAND SHOPPING BAGS, OF JUTE", - "hsn_code": "42022230" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : VANITY\nBAGS", - "hsn_code": "42022240" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : OTHER", - "hsn_code": "42022290" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : OTHER HAND BAGS OF OTHER MATERIALS EXCLUDING WICKER-WORK OR BASKET\nWORK", - "hsn_code": "42022910" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - HAND-BAGS, WHETHER OR NOT WITH SHOULDER STRAP, INCLUDING THOSE WITHOUT\nHANDLE : OTHER OTHER", - "hsn_code": "42022990" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : WITH\nOUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT LEATHER : JEWELLERY\nBOX", - "hsn_code": "42023110" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : WITH\nOUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT LEATHER : WALLETS\nAND PURSES, OF LEATHER", - "hsn_code": "42023120" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : WITH\nOUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT LEATHER : OTHER", - "hsn_code": "42023190" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : WITH\nOUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : JEWELLERY BOX", - "hsn_code": "42023210" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : WITH\nOUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS : OTHER", - "hsn_code": "42023290" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : OTHER :\nJEWELLERY BOX", - "hsn_code": "42023910" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - ARTICLES OF A KIND NORMALLY CARRIED IN THE POCKET OR IN THE HANDBAG : OTHER :\nOTHER", - "hsn_code": "42023990" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - OTHER : WITH OUTER SURFACE OF LEATHER, OF COMPOSITION LEATHER OR OF PATENT\nLEATHER", - "hsn_code": "42029100" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - OTHER : WITH OUTER SURFACE OF PLASTIC SHEETING OR OF TEXTILE MATERIALS", - "hsn_code": "42029200" - }, - { - "description": "TRUNKS, SUIT-CASES, VANITY-CASES, EXECUTIVECASES, BRIEF-CASES, SCHOOL SATCHELS,\nSPECTACLE CASES, BINOCULAR CASES, CAMERA CASES, MUSICAL INSTRUMENT CASES, GUN\nCASES, HOLSTERS AND SIMILAR CONTAINERS; TRAVELLING-BAGS, INSULATED FOOD OR\nBEVERAGES BAGS, TOILET BAGS, RUCKSACKS, HANDBAGS, SHOPPING-BAGS, WALLETS, PURSES,\nMAPCASES, CIGARETTE-CASES, TOBACCO- POUCHES, TOOL BAGS, SPORTS BAGS, BOTTLE-CASES,\nJEWELLERY BOXES, POWDER-BOXES, CUTLERY CASES AND SIMILAR CONTAINERS, OF LEATHER OR\nOF COMPOSITION LEATHER, OF SHEETING OF PLASTICS, OF TEXTILE MATERIALS, OF VULCANISED\nFIBRE OR OF PAPERBOARD, OR WHOLLY OR MAINLY COVERED WITH SUCH MATERIALS OR WITH\nPAPER - OTHER : OTHER", - "hsn_code": "42029900" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- ARTICLES OF APPAREL : JACKETS AND JERSEYS", - "hsn_code": "42031010" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- ARTICLES OF APPAREL : OTHER", - "hsn_code": "42031090" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- GLOVES, MITTENS AND MITTS : SPECIALLY DESIGNED FOR USE IN SPORTS : GLOVES", - "hsn_code": "42032110" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- GLOVES, MITTENS AND MITTS : SPECIALLY DESIGNED FOR USE IN SPORTS : MITTENS AND MITTS", - "hsn_code": "42032120" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- GLOVES, MITTENS AND MITTS : OTHER : GLOVES FOR USE IN INDUSTRY", - "hsn_code": "42032910" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- GLOVES, MITTENS AND MITTS : OTHER : OTHER GLOVES", - "hsn_code": "42032920" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- GLOVES, MITTENS AND MITTS : OTHER : MITTENS AND MITTS", - "hsn_code": "42032930" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- BELTS AND BANDOLIERS", - "hsn_code": "42033000" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- OTHER CLOTHING ACCESSORIES : APRONS", - "hsn_code": "42034010" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- OTHER CLOTHING ACCESSORIES : SEMI-CHROME GRAIN GARMENTS", - "hsn_code": "42034020" - }, - { - "description": "ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF LEATHER OR OF COMPOSITION LEATHER\n- OTHER CLOTHING ACCESSORIES : OTHER", - "hsn_code": "42034090" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : PICKERS FOR COTTON MACHINERY", - "hsn_code": "42040010" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : PICKERS FOR JUTE MACHINERY", - "hsn_code": "42040020" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : PICKING BANDS AND STRAPS FOR TEXTILE MACHINERY", - "hsn_code": "42040030" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : LEATHER BELTING FOR MACHINERY", - "hsn_code": "42040040" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : DIAPHRAGM LEATHER", - "hsn_code": "42040050" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : LEATHER STRING", - "hsn_code": "42040060" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : OTHER : LEATHER BOARD MADE FROM LEATHER SCRAP FOR THE\nMANUFACTURE OF COUNTERS AND STIFFNERS", - "hsn_code": "42040091" - }, - { - "description": "ARTICLES OF LEATHER OR OF COMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR\nMECHANICAL APPLIANCES OR FOR OTHER TECHNICAL USES - ARTICLES OF LEATHER OR OF\nCOMPOSITION LEATHER, OF A KIND USED IN MACHINERY OR MECHANICAL APPLIANCES OR FOR\nOTHER TECHNICAL USES : OTHER : OTHER", - "hsn_code": "42040099" - }, - { - "description": "OTHER ARTICLES OF LEATHER OR OF COMPOSITION LEATHER - OTHER ARTICLES OF LEATHER OR\nOF COMPOSITION LEATHER : STRAPS OTHER THAN FOR MACHINERY OR HARNESS : WEL T", - "hsn_code": "42050011" - }, - { - "description": "OTHER ARTICLES OF LEATHER OR OF COMPOSITION LEATHER - OTHER ARTICLES OF LEATHER OR\nOF COMPOSITION LEATHER : STRAPS OTHER THAN FOR MACHINERY OR HARNESS : OTHER", - "hsn_code": "42050019" - }, - { - "description": "OTHER ARTICLES OF LEATHER OR OF COMPOSITION LEATHER - OTHER ARTICLES OF LEATHER OR\nOF COMPOSITION LEATHER : LEATHER SOFA COVER", - "hsn_code": "42050020" - }, - { - "description": "OTHER ARTICLES OF LEATHER OR OF COMPOSITION LEATHER - OTHER ARTICLES OF LEATHER OR\nOF COMPOSITION LEATHER : OTHER", - "hsn_code": "42050090" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATER`S SKIN, OF BLADDERS OR OF\nTENDONS --- FOR RACKETS", - "hsn_code": "42060010" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATEPS SKIN, OF BLADDERS OR OF\nTENDONS --- OTHER", - "hsn_code": "42060090" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATEQS SKIN, OF BLADDERS OR OF\nTENDONS - CATGUT : FOR RACKETS", - "hsn_code": "42061010" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATEQS SKIN, OF BLADDERS OR OF\nTENDONS - CATGUT : OTHER", - "hsn_code": "42061090" - }, - { - "description": "ARTICLES OF GUT (OTHER THAN SILK-WORM GUT), OF GOLDBEATEQS SKIN, OF BLADDERS OR OF\nTENDONS - OTHER", - "hsn_code": "42069000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 - OF\nMINK, WHOLE, WITH OR WITHOUT HEAD, TAIL OR PAWS", - "hsn_code": "43011000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 - OF\nLAMB, THE FOLLOWING : ASTRAKHAN, BROADTAIL, CARACUL, PERSIAN AND SIMILAR LAMB,\nINDIAN, CHINESE, MONGOLIAN OR TIBETAN LAMB, WHOLE, WITH OR WITHOUT HEAD, TAIL OR\nPAWS", - "hsn_code": "43013000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 - OF\nFOX, WHOLE, WITH OR WITHOUT HEAD, TAIL OR PAWS", - "hsn_code": "43016000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 - OF\nSEAL, WHOLE, WITH OR WITHOUT HEAD, TAIL OR PAWS", - "hsn_code": "43017000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 -\nOTHER FURSKINS, WHOLE, WITH OR WITHOUT HEAD, TAIL OR PAWS", - "hsn_code": "43018000" - }, - { - "description": "RAW FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE\nFOR FURRIERS USE), OTHER THAN RAW HIDES AND SKINS OF HEADING 4101, 4102 OR 4103 -\nHEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS, SUITABLE FOR FURRIERS USE", - "hsn_code": "43019000" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:OF MINK", - "hsn_code": "43021100" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:OF LAMB, THE FOLLOWING : ASTRAKHAN, BROAD TAIL, CARACUL,\nPERSIAN AND SIMILAR LAMB, INDIAN, CHINESE, MONGOLIAN OR TIBETAN LAMB", - "hsn_code": "43021300" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:- OTHER - CALF SKINS, WITH HAIR ON, TANNED OR DRESSED", - "hsn_code": "43021910" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:- OTHER - HIDES OR SKINS OF OTHER BOVINE AND EQUINE ANIMALS\nWITH HAIR ON, TANNED OR DRESSED", - "hsn_code": "43021920" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:- OTHER - GOAT (COMMON) AND KID SKINS WITH HAIR ON, TANNED OR\nDRESSED", - "hsn_code": "43021930" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:- OTHER - TIGER-CAT SKINS", - "hsn_code": "43021940" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 - WHOLE SKINS, WITH OR WITHOUT HEAD, TAIL OR\nPAWS, NOT ASSEMBLED:- OTHER - HIDES AND SKINS OF OTHER ANIMALS WITH HAIR ON,\nTANNED OR DRESSED", - "hsn_code": "43021990" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 HEADS, TAILS, PAWS AND OTHER PIECES OR CUTTINGS,\nNOT ASSEMBLED", - "hsn_code": "43022000" - }, - { - "description": "TANNED OR DRESSED FURSKINS (INCLUDING HEADS, TAILS, PAWS AND OTHER PIECES OR\nCUTTINGS), UNASSEMBLED, OR ASSEMBLED (WITHOUT THE ADDITION OF OTHER MATERIALS)\nOTHER THAN THOSE OF HEADING 4303 WHOLE SKINS AND PIECES OR CUTTINGS THEREOF,\nASSEMBLED", - "hsn_code": "43023000" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - ARTICLES OF\nAPPAREL AND CLOTHING ACCESSORIES: OF WILD ANIMALS COVERED UNDER THE WILD LIFE\n(PROTECTION) ACT, 1972", - "hsn_code": "43031010" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - ARTICLES OF\nAPPAREL AND CLOTHING ACCESSORIES: OF ANIMALS COVERED UNDER CONVENTION ON\nINTERNATIONAL TRADE OF ENDANGERED SPECIES (CITES), OTHER THAN THOSE OF TARIFF ITEM\n4303 10 10", - "hsn_code": "43031020" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - ARTICLES OF\nAPPAREL AND CLOTHING ACCESSORIES: OTHER", - "hsn_code": "43031090" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - OTHER: OF\nWILD ANIMALS COVERED UNDER THE WILD LIFE (PROTECTION) ACT, 1972", - "hsn_code": "43039010" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - OTHER: OF\nANIMALS COVERED UNDER CONVENTION ON INTERNATIONAL TRADE OF ENDANGERED SPECIES\n(CITES), OTHER THAN THOSE OF TARIFF ITEM 4303 90 10", - "hsn_code": "43039020" - }, - { - "description": "ARTICLES OF APPAREL, CLOTHING ACCESSORIES AND OTHER ARTICLES OF FURSKIN - OTHER:\nOTHER", - "hsn_code": "43039090" - }, - { - "description": "ARTIFICIAL FUR AND ARTICLES THEREOF 4304 00 - ARTIFICIAL FUR AND ARTICLES THEREOF:\nARTIFICIAL FUR : ARTIFICIAL FUR AS TRIMMINGS AND EMBELLISHMENTS FOR GARMENTS, MADE\nUPS, KNITWEAR, PLASTIC AND LEATHER GOODS", - "hsn_code": "43040011" - }, - { - "description": "ARTIFICIAL FUR AND ARTICLES THEREOF 4304 00 - ARTIFICIAL FUR AND ARTICLES THEREOF:\nARTIFICIAL FUR :OTHER", - "hsn_code": "43040019" - }, - { - "description": "ARTIFICIAL FUR AND ARTICLES THEREOF 4304 00 - ARTIFICIAL FUR AND ARTICLES THEREOF:\nARTICLES OF ARTIFICIAL FUR", - "hsn_code": "43040020" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS- FUEL WOOD, IN LOGS, IN\nBILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS : IN LOGS", - "hsn_code": "44011010" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS- FUEL WOOD, IN LOGS, IN\nBILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS : OTHER", - "hsn_code": "44011090" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS - WOOD IN CHIPS OR\nPARTICLES : CONIFEROUS", - "hsn_code": "44012100" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS - WOOD IN CHIPS OR\nPARTICLES : NON-CONIFEROUS", - "hsn_code": "44012200" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS - SAWDUST AND WOOD\nWASTE AND SCRAP, WHETHER OR NOT AGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR\nSIMILAR FORMS--WOOD PELLETS", - "hsn_code": "44013100" - }, - { - "description": "FUEL WOOD, IN LOGS, IN BILLETS, IN TWIGS, IN FAGGOTS OR IN SIMILAR FORMS; WOOD IN\nCHIPS OR PARTICLES; SAWDUST AND WOOD WASTE AND SCRAP, WHETHER OR NOT\nAGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR SIMILAR FORMS - SAWDUST AND WOOD\nWASTE AND SCRAP, WHETHER OR NOT AGGLOMERATED IN LOGS, BRIQUETTES, PELLETS OR\nSIMILAR FORMS--OTHER", - "hsn_code": "44013900" - }, - { - "description": "WOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED -\nWOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED:\nOF COCONUT SHELL", - "hsn_code": "44020010" - }, - { - "description": "WOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED -\nWOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED:\nOTHER", - "hsn_code": "44020090" - }, - { - "description": "WHETHER OR NOT AGGLOMERATED - WOOD CHARCOAL (INCLUDING SHELL OR NUT\nCHARCOAL)WOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT\nAGGLOMERATED ---OF BAMBOO", - "hsn_code": "44021010" - }, - { - "description": "WOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED -\nOTHER : --- OF COCUNUT SHELL", - "hsn_code": "44029010" - }, - { - "description": "WOOD CHARCOAL (INCLUDING SHELL OR NUT CHARCOAL), WHETHER OR NOT AGGLOMERATED:\nOTHER --- OTHER", - "hsn_code": "44029090" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - TREATED WITH PAINT, STAINS, CREOSOTE OR OTHER PRESERVATIVES", - "hsn_code": "44031000" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, CONIFEROUS : SAWLOGS AND VENEERLOGS", - "hsn_code": "44032010" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, CONIFEROUS : POLES, PILLING AND POSTS", - "hsn_code": "44032020" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, CONIFEROUS : OTHER", - "hsn_code": "44032090" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, OF TROPICAL WOOD SPECIFIED IN SUBHEADING NOTE 1 TO THIS CHAPTER :\nDARK RED MERANTI, LIGHT RED MERANTI AND MERANTI BAKAU", - "hsn_code": "44034100" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, OF TROPICAL WOOD SPECIFIED IN SUBHEADING NOTE 1 TO THIS CHAPTER :\nOTHER :TEAK WOOD IN ROUGH", - "hsn_code": "44034910" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER, OF TROPICAL WOOD SPECIFIED IN SUBHEADING NOTE 1 TO THIS CHAPTER :\nOTHER :OTHER", - "hsn_code": "44034990" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OF OAK (QUERCUS SPP.)", - "hsn_code": "44039100" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OF BEECH (FAGUS SPP.)", - "hsn_code": "44039200" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES)", - "hsn_code": "44039911" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): BONSUM (PHOEBE GOALPARENSIS)", - "hsn_code": "44039912" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): GURGAN (DIPTEROCARPUS ALATUS)", - "hsn_code": "44039913" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): KHAIR (ACACIA CATECHU)", - "hsn_code": "44039914" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): LAMPATI (DUABANGA GRANDIFLORA)", - "hsn_code": "44039915" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): LAUREL (TERMINALIA ALATA)", - "hsn_code": "44039916" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): PALIWOOD (PALAQUIUM ELLIPLICUM)", - "hsn_code": "44039917" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): RED SANDERS(PTEROCAR PUS SAUTATINUS)", - "hsn_code": "44039918" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : ANDAMAN PADAUK (PTEROCAROUS DALBAERGIODES) BONSUM\n(PHOEBE GOALPARENSIS) GURGAN (DIPTEROCARPUS ALATUS) KHAIR (ACACIA CATECHU)\nLAMPATI (DUABANGA GRANDIFLORA) LAUREL (TERMINALIA ALATA) PALIWOOD (PALAQUIUM\nELLIPLICUM) AND RED SANDERS (PTEROCAR PUS SAUTANINUS) AND ROSE WOOD (DALBERGEA\nLATIFOLIO): ROSE WOOD (DALBERGEA LATIFOLIO)", - "hsn_code": "44039919" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: SAL (CHOREA ROBUSTA)", - "hsn_code": "44039921" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: SANDAL WOOD (SANTALUM ALBURN)", - "hsn_code": "44039922" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: SEMUL (BOMBAX CEIBA)", - "hsn_code": "44039923" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: WALNUT WOOD (JUGLANS BINATA)", - "hsn_code": "44039924" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: ANJAM (HARDWICKIA BINATA)", - "hsn_code": "44039925" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: BIRCH (BETULA SPP.)", - "hsn_code": "44039926" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: SISSOO (DALBERGIA SISSO)", - "hsn_code": "44039927" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: WHITE CEDAR (DYSOZYLUM MALABARICUM)", - "hsn_code": "44039928" - }, - { - "description": "WOOD IN THE ROUGH, WHETHER OR NOT STRIPPED OF BARK OR SAPWOOD, OR ROUGHLY\nSQUARED - OTHER : OTHER : SAL (CHOREA ROBUSTA) SANDAL WOOD (SANTALUM ALBUR)\nSEMUL (BOMBAX CEIBA) WALNUT WOOD (JUGLANS BINATA) ANJAM (HARDWICKIA BINATA)\nBIRCH (BETULA SPP.) SISSOO (DALBERGIA SISSO) AND WHITE CEDAR (DYSOZYLUM) AND THE\nLIKE: OTHER", - "hsn_code": "44039929" - }, - { - "description": "HOOPWOOD; SPLIT POLES; PILES, PICKETS AND STAKES OF WOOD, POINTED BUT NOT SAWN\nLENGTHWISE; WOODEN STICKS, ROUGHLY TRIMMED BUT NOT TURNED, BENT OR OTHERWISE\nWORKED, SUITABLE FOR THE MANUFACTURE OF WALKING STICKS, UMBRELLAS, TOOL HANDLES\nOR THE LIKE; CHIPWOOD AND THE LIKE - CONIFEROUS", - "hsn_code": "44041000" - }, - { - "description": "HOOPWOOD; SPLIT POLES; PILES, PICKETS AND STAKES OF WOOD, POINTED BUT NOT SAWN\nLENGTHWISE; WOODEN STICKS, ROUGHLY TRIMMED BUT NOT TURNED, BENT OR OTHERWISE\nWORKED, SUITABLE FOR THE MANUFACTURE OF WALKING STICKS, UMBRELLAS, TOOL HANDLES\nOR THE LIKE; CHIPWOOD AND THE LIKE - NON-CONIFEROUS : WOODEN STICKS, ROUGHLY\nTRIMMED BUT NOT TURNED, BENT OR OTHERWISE WORKED, SUITABLE FOR THE\nMANUFACTURE OF WALKING STICKS, TOOL HANDLES, SPLIT POLES, PILES, PICKETS, STAKES AND\nTHE LIKE", - "hsn_code": "44042010" - }, - { - "description": "HOOPWOOD; SPLIT POLES; PILES, PICKETS AND STAKES OF WOOD, POINTED BUT NOT SAWN\nLENGTHWISE; WOODEN STICKS, ROUGHLY TRIMMED BUT NOT TURNED, BENT OR OTHERWISE\nWORKED, SUITABLE FOR THE MANUFACTURE OF WALKING STICKS, UMBRELLAS, TOOL HANDLES\nOR THE LIKE; CHIPWOOD AND THE LIKE - NON-CONIFEROUS : DRAWN WOOD", - "hsn_code": "44042020" - }, - { - "description": "HOOPWOOD; SPLIT POLES; PILES, PICKETS AND STAKES OF WOOD, POINTED BUT NOT SAWN\nLENGTHWISE; WOODEN STICKS, ROUGHLY TRIMMED BUT NOT TURNED, BENT OR OTHERWISE\nWORKED, SUITABLE FOR THE MANUFACTURE OF WALKING STICKS, UMBRELLAS, TOOL HANDLES\nOR THE LIKE; CHIPWOOD AND THE LIKE - NON-CONIFEROUS : OTHER", - "hsn_code": "44042090" - }, - { - "description": "WOOD WOOL; WOOD FLOUR", - "hsn_code": "44050000" - }, - { - "description": "RAILWAY OR TRAMWAY SLEEPERS (CROSSTIES) OF WOOD - NOT IMPREGNATED", - "hsn_code": "44061000" - }, - { - "description": "RAILWAY OR TRAMWAY SLEEPERS (CROSSTIES) OF WOOD - OTHER", - "hsn_code": "44069000" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - CONIFERROUS: DOGLAS FIR\n(PSCUDOTSUGA MENZIESIE)", - "hsn_code": "44071010" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - CONIFERROUS: PINE (PINUS SPP.)", - "hsn_code": "44071020" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - CONIFERROUS: OTHER", - "hsn_code": "44071090" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : MAHOGANY (SWIETENIA SPP.)", - "hsn_code": "44072100" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : VIROLA,IMBUIA AND BALSA", - "hsn_code": "44072200" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : VIROLA, MAHOGANY (SWIETENIA SPP.) IMBUIA\nAND BALSA", - "hsn_code": "44072400" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : DARK RED MERANTI, LIGHT RED MERANTI AND\nMERANTI BAKAU", - "hsn_code": "44072500" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : WHITE LAUAN, WHITE MERANTI, WHITE SERAYA,\nYELLOW MERANTI AND ALAN", - "hsn_code": "44072600" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : --SAPELLI", - "hsn_code": "44072700" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : IROKO", - "hsn_code": "44072800" - }, - { - "description": "29 WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : OTHER : TEAK WOOD", - "hsn_code": "44072910" - }, - { - "description": "29 WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED\nIN SUB-HEADING NOTE 1 TO THIS CHAPTER : OTHER : OTHER", - "hsn_code": "44072990" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OF OAK (QUERCUS SPP.)", - "hsn_code": "44079100" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OF BEECH (FAGUS SPP.)", - "hsn_code": "44079200" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OF MAPLE (ACER SPP)", - "hsn_code": "44079300" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : --OF CHERRY (PRUNUS\nSPP.)", - "hsn_code": "44079400" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : -- OF ASH(FRAXINUS\nSPP.)", - "hsn_code": "44079500" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OTHER : OF BIRCH\n(BETULA SPP.)", - "hsn_code": "44079910" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OTHER : WILLOW", - "hsn_code": "44079920" - }, - { - "description": "WOOD SAWN OR CHIPPED LENGTHWISE, SLICED OR PEELED, WHETHER OR NOT PLANED,\nSANDED OR ENDJOINTED, OF A THICKNESS EXCEEDING 6 MM - OTHER : OTHER : OTHER", - "hsn_code": "44079990" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- CONIFEROUS: SHEETS FOR PLYWOOD", - "hsn_code": "44081010" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- CONIFEROUS: OAK WOOD VENEER", - "hsn_code": "44081020" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- CONIFEROUS: VENEER SHEETS, FOR MATCH BOXES AND MATCH SPLINTS", - "hsn_code": "44081030" - }, - { - "description": "HEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- CONIFEROUS: OTHER", - "hsn_code": "44081090" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OF DARK RED MERANTI, LIGHT RED MERANTI AND MERANTI BAKAU: SHEETS FOR\nPLYWOOD", - "hsn_code": "44083110" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OF DARK RED MERANTI, LIGHT RED MERANTI AND MERANTI BAKAU: VENEER SHEETS\n(OF ROSE WOOD)", - "hsn_code": "44083120" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OF DARK RED MERANTI, LIGHT RED MERANTI AND MERANTI BAKAU: VENEER SHEETS,\nFOR MATCH BOXES AND MATCH SPLINTS", - "hsn_code": "44083130" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OF DARK RED MERANTI, LIGHT RED MERANTI AND MERANTI BAKAU: OTHER", - "hsn_code": "44083190" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OTHER: SHEETS FOR PLYWOODS", - "hsn_code": "44083910" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OTHER: VENEER SHEETS (OF ROSE WOOD)", - "hsn_code": "44083920" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM - OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS\nCHAPTER : OTHER: VENEER SHEETS, FOR MATCH BOXES AND MATCH SPLINTS", - "hsn_code": "44083930" - }, - { - "description": "HEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM --OTHER ---OTHER", - "hsn_code": "44083990" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- OTHER: SHEETS FOR PLYWOODS", - "hsn_code": "44089010" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- OTHER: VENEER SHEETS, FOR MATCH BOXES AND MATCH SPLINTS", - "hsn_code": "44089020" - }, - { - "description": "SHEETS FOR VENEERING (INCLUDING THOSE OBTAINED BY SLICING LAMINATED WOOD), FOR\nPLYWOOD OR FOR SIMILAR LAMINATED WOOD AND OTHER WOOD, SAWN LENGTHWISE, SLICED\nOR PEELED, WHETHER OR NOT PLANED, SANDED, SPLICED OR END-JOINTED, OF A THICKNESS\nNOT EXCEEDING 6 MM- OTHER: OTHER", - "hsn_code": "44089090" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - CONIFEROUS: PLANED, TONGUED, GROOVED, REBATED,\nCHAMFERED, V-JOINTED, AND THE LIKE BUT NOT FURTHER MOULDED", - "hsn_code": "44091010" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - CONIFEROUS: BEADINGS, AND MOULDINGS (INCLUDING\nMOULDED, SKIRTING AND OTHER MOULDED BOARDS)", - "hsn_code": "44091020" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - CONIFEROUS: OTHER", - "hsn_code": "44091090" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - NON-CONIFEROUS:PLANED, TONGUED, GROOVED,\nREBATED, CHAMFERED, V-JOINTED, AND THE LIKE BUT NOT FURTHER MOULDED", - "hsn_code": "44092010" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - NON-CONIFEROUS:BEADINGS AND MOULDINGS\n(INCLUDING MOULDED SKIRTING AND OTHER MOULDED BOARDS)", - "hsn_code": "44092020" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - NON-CONIFEROUS:OTHER", - "hsn_code": "44092090" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - NON-CONIFEROUS:--OF BAMBOO", - "hsn_code": "44092100" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - NON-CONIFEROUS:--OTHER ---PLANED, TONGUED,\nGROOVED,REBATED, CHAMFERED,V-JOINTED,AND THE LIKE BUT NOT FURTHER MOULDED", - "hsn_code": "44092910" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED - OTHER: ---BEADINGS AND MOULDINGS (INCLUDING\nMOULDED SKIRTING AND OTHER MOULDED BOARDS)", - "hsn_code": "44092920" - }, - { - "description": "WOOD (INCLUDING STRIPS AND FRIEZES FOR PARQUET FLOORING, NOT ASSEMBLED)\nCONTINUOUSLY SHAPED (TONGUED, GROOVED, REBATED, CHAMFERED, V-JOINTED, BEADED,\nMOULDED, ROUNDED OR THE LIKE) ALONG ANY OF ITS EDGES OR FACES, WHETHER OR NOT\nPLANED, SANDED OR END-JOINTED -- OTHER ---OTHER", - "hsn_code": "44092990" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT\nAGGLOMERATED WITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES- OF WOOD:--\nPARTICLE BOARD:PLAIN PARTICLE BOARDS", - "hsn_code": "44101110" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD: -- PARTICLE BOARD:---\nINSULATION BOARD AND HARDBOARD", - "hsn_code": "44101120" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD: -- PARTICLE BOARD:---\nVENEERED PARTICLE BOARD", - "hsn_code": "44101130" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD: -- PARTICLE BOARD:---\nOTHERS", - "hsn_code": "44101190" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD: ORIENTED STRAND\nBOARD (OSB):--- UNWORKED OR NOT FURTHER WORKED THAN SANDED", - "hsn_code": "44101210" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD: ORIENTED STRAND\nBOARD (OSB):OTHER", - "hsn_code": "44101290" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES - OF WOOD:--OTHER", - "hsn_code": "44101900" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - ORIENTED STRAND-BOARD AND WAFER\nBOARD, OF WOOD: UNWORKED OR NOT FURTHER WORKED THAN SANDED", - "hsn_code": "44102100" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - ORIENTED STRAND-BOARD AND WAFER\nBOARD, OF WOOD: OTHER", - "hsn_code": "44102900" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: UNWORKED OR NOT\nFURTHER WORKED THAN SANDED: PLAIN PARTICLE BOARDS", - "hsn_code": "44103110" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: UNWORKED OR NOT\nFURTHER WORKED THAN SANDED: PLAIN INSULATION BOARD AND HARDBOARD", - "hsn_code": "44103120" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: UNWORKED OR NOT\nFURTHER WORKED THAN SANDED: PLAIN VENEERED PARTICLE BOARD, NOT HAVING\nDECORATIVE VENEERS ON ANY FACE", - "hsn_code": "44103130" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: UNWORKED OR NOT\nFURTHER WORKED THAN SANDED: PLAIN OTHER", - "hsn_code": "44103190" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH MELAMINE IMPREGNATED PAPER: PLAIN PARTICLE BOARDS", - "hsn_code": "44103210" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH MELAMINE IMPREGNATED PAPER: INSULATION BOARD AND HARDBOARD", - "hsn_code": "44103220" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH MELAMINE IMPREGNATED PAPER: VENEERED PARTICLE BOARD, NOT HAVING\nDECORATIVE VENEERS ON ANY FACE", - "hsn_code": "44103230" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH MELAMINE IMPREGNATED PAPER: OTHER", - "hsn_code": "44103290" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH DECORATIVE LAMINATES OF PLASTICS: PLAIN PARTICLE BOARDS", - "hsn_code": "44103310" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH DECORATIVE LAMINATES OF PLASTICS: INSULATION BOARD AND HARDBOARD", - "hsn_code": "44103320" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH DECORATIVE LAMINATES OF PLASTICS: VENEERED PARTICLE BOARD, NOT HAVING\nDECORATIVE VENEERS ON ANY FACE", - "hsn_code": "44103330" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: SURFACE-COVERED\nWITH DECORATIVE LAMINATES OF PLASTICS: OTHER", - "hsn_code": "44103390" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: OTHER: PLAIN PARTICLE\nBOARDS", - "hsn_code": "44103910" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: OTHER: INSULATION\nBOARD AND HARDBOARD", - "hsn_code": "44103920" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: OTHER: VENEERED\nPARTICLE BOARD, NOT HAVING DECORATIVE VENEERS ON ANY FACE", - "hsn_code": "44103930" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES - OTHER, OF WOOD: OTHER: OTHER", - "hsn_code": "44103990" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES -- OTHER --- PLAIN PARTICLE BOARD", - "hsn_code": "44109010" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: PLASTIC LAMINATED SHEETS:\nINSULATION BOARD AND HARDBOARD", - "hsn_code": "44109011" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: PLASTIC LAMINATED SHEETS:\nVENEERED PARTICLE BOARD, NOT HAVING DECORATIVE VENEERS OF ANY FACE", - "hsn_code": "44109012" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: PLASTIC LAMINATED SHEETS: OTHER", - "hsn_code": "44109019" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES -- OTHER --- INSULATION BOARD AND\nHARD BOARD", - "hsn_code": "44109020" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES -- OTHER --- VENEERED PARTICLE\nBOARD, NOT HAVING DECORATIVE VENEERS ON ANY FACE", - "hsn_code": "44109030" - }, - { - "description": "BOARD, OF COIR", - "hsn_code": "44109040" - }, - { - "description": "BOARD, OF JUTE FIBRE", - "hsn_code": "44109050" - }, - { - "description": "PARTICLE BOARD, ORIENTED STRAND BOARD (OSB) AND SIMILAR BOARD (FOR EXAMPLE,\nWAFERBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS,WHETHER OR NOT AGGLOMERATED\nWITH RESINS OR OTHER ORGANIC BINDING SUBSTANCES -- OTHER --- OTHER", - "hsn_code": "44109090" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: OTHER : PLAIN PARTICLE BOARDS", - "hsn_code": "44109091" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: OTHER : INSULATION BOARD AND\nHARDBOARD", - "hsn_code": "44109092" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: OTHER : VENEERED PARTICLE\nBOARD, NOT HAVING DECORATIVE VENEERS OF ANY FACE", - "hsn_code": "44109093" - }, - { - "description": "PARTICLE BOARD AND SIMILAR BOARD (FOR EXAMPLE, ORIENTED STRAND BOARD AND WAFER\nBOARD) OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT AGGLOMERATED WITH\nRESINS OR OTHER ORGANIC BINDING SUBSTANCES- OTHER: OTHER : OTHER", - "hsn_code": "44109099" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.8 G/C - M3 -\n: NOT MECHANICALLY WORKED OR SURFACE COVERED : HARDBOARD", - "hsn_code": "44111110" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.8 G/C - M3 -\n: NOT MECHANICALLY WORKED OR SURFACE COVERED : OTHER", - "hsn_code": "44111190" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - MEDIUM DENSITY FIBRE BOARD (MDF):-- OF A\nTHICKNESS NOT EXCEEDING 5 MM", - "hsn_code": "44111200" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - MEDIUM DENSITY FIBRE BOARD (MDF):-- OF A\nTHICKNESS EXCEEDING 5 MM BUT NOT EXCEEDING 9 MM", - "hsn_code": "44111300" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - MEDIUM DENSITY FIBRE BOARD (MDF):-- OF A\nTHICKNESS EXCEEDING 9 MM", - "hsn_code": "44111400" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.8 G/C - M3 -\n: OTHER : HARDBOARD", - "hsn_code": "44111910" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.8 G/C - M3 -\n: OTHER : OTHER", - "hsn_code": "44111990" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.5 G/C - M3 -\nBUT NOT EXCEEDING 0.8 G/C - M3 - : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED:INSULATION BOARD", - "hsn_code": "44112110" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.5 G/C - M3 -\nBUT NOT EXCEEDING 0.8 G/C - M3 - : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED:OTHER", - "hsn_code": "44112190" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.5 G/C - M3 -\nBUT NOT EXCEEDING 0.8 G/C - M3 - : OTHER : INSULATION BOARD", - "hsn_code": "44112910" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBREBOARD OF A DENSITY EXCEEDING 0.5 G/C - M3 -\nBUT NOT EXCEEDING 0.8 G/C - M3 - : OTHER : OTHER", - "hsn_code": "44112990" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBRE BOARD OF A DENSITY EXCEEDING 0.35 G/C -\nM3 - BUT NOT EXCEEDING 0.5 G/ C - M3 - : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: INSULATION BOARD", - "hsn_code": "44113110" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBRE BOARD OF A DENSITY EXCEEDING 0.35 G/C -\nM3 - BUT NOT EXCEEDING 0.5 G/ C - M3 - : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: OTHER", - "hsn_code": "44113190" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBRE BOARD OF A DENSITY EXCEEDING 0.35 G/C -\nM3 - BUT NOT EXCEEDING 0.5 G/ C - M3 - : OTHER: INSULATION BOARD", - "hsn_code": "44113910" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - FIBRE BOARD OF A DENSITY EXCEEDING 0.35 G/C -\nM3 - BUT NOT EXCEEDING 0.5 G/ C - M3 - : OTHER: OTHER", - "hsn_code": "44113990" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: INSULATION BOARD (HOMOGENEOUS)", - "hsn_code": "44119110" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: ACCOUSTIC INSULATION BOARD", - "hsn_code": "44119120" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: OTHER INSULATION BOARD", - "hsn_code": "44119130" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : NOT MECHANICALLY WORKED OR SURFACE\nCOVERED: OTHER", - "hsn_code": "44119190" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER: -- OF A DENSITY EXCEEDING 0.8 GM/CM3: ---\nNOT MECHANICALLY WORKED OR SURFACE COVERED:---- HARDBOARD", - "hsn_code": "44119211" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER: -- OF A DENSITY EXCEEDING 0.8 GM/CM3: ---\nNOT MECHANICALLY WORKED OR SURFACE COVERED:---- OTHER", - "hsn_code": "44119219" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER: -- OF A DENSITY EXCEEDING 0.8 GM/CM3: ---\nOTHER:---- HARDBOARD", - "hsn_code": "44119221" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER: -- OF A DENSITY EXCEEDING 0.8 GM/CM3: ---\nOTHER:---- OTHER", - "hsn_code": "44119229" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:-- OF A DENSITY EXCEEDING 0.5 GM/CM3 BUT\nNOT EXCEEDING 0.8 GM/CM3:--- NOT MECHANICALLY WORKED OR SURFACE COVERED:----\nINSULATION BOARD", - "hsn_code": "44119311" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:-- OF A DENSITY EXCEEDING 0.5 GM/CM3 BUT\nNOT EXCEEDING 0.8 GM/CM3:--- NOT MECHANICALLY WORKED OR SURFACE COVERED:----\nOTHER", - "hsn_code": "44119319" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:-- OF A DENSITY EXCEEDING 0.5 GM/CM3 BUT\nNOT EXCEEDING 0.8 GM/CM3: --- OTHER:---- INSULATION BOARD", - "hsn_code": "44119321" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:-- OF A DENSITY EXCEEDING 0.5 GM/CM3 BUT\nNOT EXCEEDING 0.8 GM/CM3: --- OTHER:---- OTHER", - "hsn_code": "44119329" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:OF A DENSITY NOT EXCEEDING 0.5 GM/CM3:--\n- NOT MECHANICALLY WORKED OR SURFACE COVERED:---- INSULATION BOARD", - "hsn_code": "44119411" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:OF A DENSITY NOT EXCEEDING 0.5 GM/CM3:--\n- NOT MECHANICALLY WORKED OR SURFACE COVERED:---- OTHER", - "hsn_code": "44119419" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:OF A DENSITY NOT EXCEEDING 0.5 GM/CM3:--\n- OTHER: ----INSULATION BOARD", - "hsn_code": "44119421" - }, - { - "description": "FIBRE BOARDS OF COIR", - "hsn_code": "44119422" - }, - { - "description": "FIBRE BOARDS OF JUTE FIBRE", - "hsn_code": "44119423" - }, - { - "description": "FIBRE BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER:OF A DENSITY NOT EXCEEDING 0.5 GM/CM3:--\n- OTHER: ----OTHER", - "hsn_code": "44119429" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : OTHER: INSULATION BOARD\n(HOMOGENOUS)", - "hsn_code": "44119910" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : OTHER: ACCOUSTIC ISULATION BOARD", - "hsn_code": "44119920" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : OTHER: OTHER INSULATION BOARD", - "hsn_code": "44119930" - }, - { - "description": "FIBREBOARD OF WOOD OR OTHER LIGNEOUS MATERIALS, WHETHER OR NOT BONDED WITH\nRESINS OR OTHER ORGANIC SUBSTANCES - OTHER : OTHER: OTHER", - "hsn_code": "44119990" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OF BAMBOO", - "hsn_code": "44121000" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER :\nDECORATIVE PLYWOOD", - "hsn_code": "44121310" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER : TEA\nCHEST PANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44121320" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER : OTHER\nTEA CHEST PANELS", - "hsn_code": "44121330" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER : MARINE\nAND AIRCRAFT PLYWOOD", - "hsn_code": "44121340" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER :\nCUTTINGS AND TRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5 CENTIMETRES", - "hsn_code": "44121350" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : WITH AT LEAST ONE\nOUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER : OTHER", - "hsn_code": "44121390" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER, WITH AT\nLEAST ONE OUTER PLY OF NON-CONIFEROUS WOOD : DECORATIVE PLYWOOD", - "hsn_code": "44121410" - }, - { - "description": "TEA CHEST PANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44121420" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER, WITH AT\nLEAST ONE OUTER PLY OF NON-CONIFEROUS WOOD : MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44121430" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER, WITH AT\nLEAST ONE OUTER PLY OF NON-CONIFEROUS WOOD : CUTTINGS AND TRIMMINGS OF PLYWOOD\nOF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44121440" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER, WITH AT\nLEAST ONE OUTER PLY OF NON-CONIFEROUS WOOD : OTHER", - "hsn_code": "44121490" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER :\nDECORATIVE PLYWOOD", - "hsn_code": "44121910" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER : TEA CHEST\nPANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44121920" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER : MARINE\nAND AIRCRAFT PLYWOOD", - "hsn_code": "44121930" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER : CUTTINGS\nAND TRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44121940" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - PLYWOOD, CONSISTING\nSOLELY OF SHEETS OF WOOD, EACH PLY NOT EXCEEDING 6 MM THICKNESS : OTHER : OTHER", - "hsn_code": "44121990" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : WITH AT LEAST ONE PLY OF TROPICAL WOOD\nSPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER - DECORATIVE PLYWOOD", - "hsn_code": "44122210" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : WITH AT LEAST ONE PLY OF TROPICAL WOOD\nSPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER - TEA CHEST PANELS OR SHOOKS, PACKED\nIN SETS", - "hsn_code": "44122220" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : WITH AT LEAST ONE PLY OF TROPICAL WOOD\nSPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER - MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44122230" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : WITH AT LEAST ONE PLY OF TROPICAL WOOD\nSPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER - CUTTINGS AND TRIMMINGS OF\nPLYWOOD OF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44122240" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : WITH AT LEAST ONE PLY OF TROPICAL WOOD\nSPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER - OTHER", - "hsn_code": "44122290" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER, CONTAINING AT LEAST ONE LAYER OF\nPARTICLE BOARD: DECORATIVE PLYWOOD", - "hsn_code": "44122310" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER, CONTAINING AT LEAST ONE LAYER OF\nPARTICLE BOARD: TEA CHEST PANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44122320" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER, CONTAINING AT LEAST ONE LAYER OF\nPARTICLE BOARD: MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44122330" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER, CONTAINING AT LEAST ONE LAYER OF\nPARTICLE BOARD: CUTTINGS AND TRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44122340" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER, CONTAINING AT LEAST ONE LAYER OF\nPARTICLE BOARD: OTHER", - "hsn_code": "44122390" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : ELASTIC LAMINATED PLYWOOD", - "hsn_code": "44122910" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : DECORATIVE PLYWOOD", - "hsn_code": "44122920" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : TEA CHEST PANELS OR SHOOKS, PACKED IN\nSETS", - "hsn_code": "44122930" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44122940" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : CUTTINGS AND TRIMMINGS OF PLYWOOD OF\nWIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44122950" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER, WITH AT LEAST ONE\nOUTER PLY OF NONCONIFEROUS WOOD : OTHER : OTHER", - "hsn_code": "44122990" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- DECORATIVE PLYWOOD", - "hsn_code": "44123110" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- TEA CHEST PANELS OR\nSHOOKS, PACKED IN SETS", - "hsn_code": "44123120" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- OTHER TEA CHEST\nPANELS", - "hsn_code": "44123130" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- MARINE AND AIRCRAFT\nPLYWOOD", - "hsn_code": "44123140" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- CUTTINGS AND\nTRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5CM", - "hsn_code": "44123150" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER PLYWOOD,\nCONSISTING SOLELY OF SHEETS OF WOOD (OTHER THAN BAMBOO), EACH PLY NOT EXCEEDING 6\nMM THICKNESS: WITH AT LEAST ONE OUTER PLY OF TROPICAL WOOD SPECIFIED IN SUB\nHEADING NOTE 1 TO THIS CHAPTER, NAMELY:- ABURA, ACAJOU, D?AFRIQUE, AFRORMOSIA,\nAKO, ALAN, ANDIROBA, ANINGRE, AVODIRE, AZOBE, BALAU, BALSA, BOSSE CLAIR, BOSSE\nFONCE, CATIVO, CEDRO, DABEMA, DARK RED MERANTI, DIBETOU, DOUSSIE, FRAMIRE, FREIJO,\nFROMAGER, FUMA, GERONGGANG, ILOMBA, IMBUIA, IPE, IROKO, JABOTY, JELUTONG,\nJEQUITIBA, JONGKONG, KAPUR, KEMPAS, KERUING, KOSIPO, KOTIBE, KOTO, LIGHT RED\nMERANTI, LIMBA, LOURO, MACARANDUBA, MAHOGONY, MAKORE, MANDIOQUEIRA,\nMANSONIA, MENGKULANG, MERANTI BAKAU, MERAWAN, MERBAU, MERPAUH, MERSAWA,\nMOABI, NIANGON, NYATOH, OBECHE, OKOUME, ONZABILI, OREY, OVENGKOL, OZIGO, PADAUK,\nPALDAO, PALISSANDRE DE GUATEMALA, PALISSANDRE DE PARA, PALISSANDRE DE RIO,\nPALISSANDRE DE ROSE, PAU AMARELO, PAU MARFIM, PULAI, PUNAH, QUARUBA, RAMIN,\nSAPELLI, SAQUI- SAQUI, SEPETIR, SIPO, SUCUPIRA, SUREN, TAUARI,TEAK, TIAMA, TOLA, VIROLA,\nWHITE LAUAN, WHITE MERANTI, WHITE SERAYA, YELLOW MERANTI :--- OTHER", - "hsn_code": "44123190" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTERPLY OF NON-CONIFEROUS WOOD:--- DECORATIVE PLYWOOD", - "hsn_code": "44123210" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTERPLY OF NON-CONIFEROUS WOOD:--- TEA CHEST PANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44123220" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTERPLY OF NON-CONIFEROUS WOOD:--- MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44123230" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTERPLY OF NON-CONIFEROUS WOOD:CUTTINGS AND TRIMMINGS OF PLYWOOD OF WIDTH\nNOT EXCEEDING 5CM", - "hsn_code": "44123240" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTERPLY OF NON-CONIFEROUS WOOD:--- OTHER", - "hsn_code": "44123290" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTER PLY OF NON-CONIFEROUS WOOD:-- OTHER:--- DECORATIVE PLYWOOD", - "hsn_code": "44123910" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTER PLY OF NON-CONIFEROUS WOOD:-- OTHER:--- TEA CHEST PANELS OR SHOOKS, PACKED\nIN SETS", - "hsn_code": "44123920" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTER PLY OF NON-CONIFEROUS WOOD:-- OTHER:--- MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44123930" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTER PLY OF NON-CONIFEROUS WOOD:-- OTHER:--- CUTTINGS AND TRIMMINGS OF PLYWOOD\nOF WIDTH NOT EXCEEDING 5CM", - "hsn_code": "44123940" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD -- OTHER, WITH AT LEAST ONE\nOUTER PLY OF NON-CONIFEROUS WOOD:-- OTHER:--- OTHER", - "hsn_code": "44123990" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: ELASTIC\nLAMINATED PLYWOOD", - "hsn_code": "44129210" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: DECORATIVE\nPLYWOOD", - "hsn_code": "44129220" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: TEA CHEST\nPANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44129230" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: MARINE AND\nAIRCRAFT PLYWOOD", - "hsn_code": "44129240" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: CUTTINGS AND\nTRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44129250" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : WITH AT LEAST ONE\nPLY OF TROPICAL WOOD SPECIFIED IN SUB-HEADING NOTE 1 TO THIS CHAPTER: OTHER", - "hsn_code": "44129290" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER, CONTAINING\nAT LEAST ONE LAYER OF PARTICLE BOARD: DECORATIVE PLYWOOD", - "hsn_code": "44129310" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER, CONTAINING\nAT LEAST ONE LAYER OF PARTICLE BOARD: TEA CHEST PANELS OR SHOOKS, PACKED IN SETS", - "hsn_code": "44129320" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER, CONTAINING\nAT LEAST ONE LAYER OF PARTICLE BOARD: MARINE AND AIRCRAFT PLYWOOD", - "hsn_code": "44129330" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER, CONTAINING\nAT LEAST ONE LAYER OF PARTICLE BOARD: CUTTINGS AND TRIMMINGS OF PLYWOOD OF WIDTH\nNOT EXCEEDING 5 CM", - "hsn_code": "44129340" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER, CONTAINING\nAT LEAST ONE LAYER OF PARTICLE BOARD: OTHER", - "hsn_code": "44129390" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- BLOCKBOARD,\nLAMINBOARD AND BATTENBOARD", - "hsn_code": "44129400" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- OTHER:---\nDECORATIVE PLYWOOD", - "hsn_code": "44129910" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- OTHER:--- TEA\nCHEST PANEL OR SHOOKS, PACKED IN SETS", - "hsn_code": "44129920" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- OTHER:--- MARINE\nAND AIRCRAFT PLYWOOD", - "hsn_code": "44129930" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- OTHER:--- CUTTINGS\nAND TRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5CM", - "hsn_code": "44129940" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER : OTHER : CUTTINGS\nAND TRIMMINGS OF PLYWOOD OF WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "44129950" - }, - { - "description": "PLYWOOD, VENEERED PANELS AND SIMILAR LAMINATED WOOD - OTHER: -- OTHER:--- OTHER", - "hsn_code": "44129990" - }, - { - "description": "DENSIFIED WOOD, IN BLOCKS, PLATES, STRIPS, OR PROFILE SHAPES", - "hsn_code": "44130000" - }, - { - "description": "WOODEN FRAMES FOR PAINTINGS, PHOTOGRAPHS, MIRRORS OR SIMILAR OBJECTS", - "hsn_code": "44140000" - }, - { - "description": "PACKING CASES, BOXES, CRATES, DRUMS AND SIMILAR PACKINGS, OF WOOD; CABLE-DRUMS OF\nWOOD; PALLETS, BOX PALLETS AND OTHER LOAD BOARDS, OF WOOD; PALLET COLLARS OF\nWOOD - CASES, BOXES, CRATES, DRUMS AND SIMILAR PACKINGS; CABLE-DRUMS", - "hsn_code": "44151000" - }, - { - "description": "PACKING CASES, BOXES, CRATES, DRUMS AND SIMILAR PACKINGS, OF WOOD; CABLE-DRUMS OF\nWOOD; PALLETS, BOX PALLETS AND OTHER LOAD BOARDS, OF WOOD; PALLET COLLARS OF\nWOOD - PALLETS, BOX PALLETS AND OTHER LOAD BOARDS; PALLET COLLARS", - "hsn_code": "44152000" - }, - { - "description": "CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS THEREOF, OF WOOD,\nINCLUDING STAVES - CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS\nTHEREOF, OF WOOD, INCLUDING STAVES: CASKS, BARRELS, VATS AND TUBS", - "hsn_code": "44160010" - }, - { - "description": "CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS THEREOF, OF WOOD,\nINCLUDING STAVES - CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS\nTHEREOF, OF WOOD, INCLUDING STAVES: OTHER COOPERS PRODUCTS", - "hsn_code": "44160020" - }, - { - "description": "CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS THEREOF, OF WOOD,\nINCLUDING STAVES - PARTS (OF WOOD): RIVEN OR SAWN STAVES OF WOOD NOT FURTHER\nPREPARED", - "hsn_code": "44160091" - }, - { - "description": "CASKS, BARRELS, VATS, TUBS AND OTHER COOPERS PRODUCTS AND PARTS THEREOF, OF WOOD,\nINCLUDING STAVES - PARTS (OF WOOD): OTHER", - "hsn_code": "44160099" - }, - { - "description": "TOOLS, TOOL BODIES, TOOL HANDLES, BROOM OR BRUSH BODIES AND HANDLES, OF WOOD;\nBOOT OR SHOE LASTS AND TREES, OF WOOD", - "hsn_code": "44170000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES WINDOWS, FRENCH-WINDOWS AND\nTHEIR FRAMES", - "hsn_code": "44181000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - DOORS AND THEIR FRAMES AND\nTHRESHOLDS: FLUSH DOORS", - "hsn_code": "44182010" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - DOORS AND THEIR FRAMES AND\nTHRESHOLDS: FRAMES AND THRESHOLDS OF FLUSH DOORS", - "hsn_code": "44182020" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - DOORS AND THEIR FRAMES AND\nTHRESHOLDS: OTHER", - "hsn_code": "44182090" - }, - { - "description": "BUILDERR JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED PARQUET PANELS, SHINGLES AND SHAKES - PARQUET PANELS", - "hsn_code": "44183000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - SHUTTERING FOR CONCRETE\nCONSTRUCTIONAL WORK", - "hsn_code": "44184000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - SHINGLES AND SHAKES", - "hsn_code": "44185000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - POSTS AND BEAMS", - "hsn_code": "44186000" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - ASSEMBLED FLOORING PANELS :-- FOR\nMOSAIC FLOORS", - "hsn_code": "44187100" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - ASSEMBLED FLOORING PANELS :--\nOTHER, MULTILAYER", - "hsn_code": "44187200" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - ASSEMBLED FLOORING PANELS :--\nOTHER", - "hsn_code": "44187900" - }, - { - "description": "BUILDERS` JOINERY AND CARPENTRY OF WOOD, INCLUDING CELLULAR WOOD PANELS,\nASSEMBLED FLOORING PANELS, SHINGLES AND SHAKES - SHINGLES AND SHAKES", - "hsn_code": "44189000" - }, - { - "description": "TABLEWARE AND KITCHENWARE, OF WOOD - TABLEWARE AND KITCHENWARE, OF WOOD:\nTABLEWARE", - "hsn_code": "44190010" - }, - { - "description": "TABLEWARE AND KITCHENWARE, OF WOOD - TABLEWARE AND KITCHENWARE, OF WOOD:\nKITCHENWARE", - "hsn_code": "44190020" - }, - { - "description": "WOOD MARQUETRY AND INLAID WOOD; CASKETS AND CASES FOR JEWELLERY OR CUTLERY, AND\nSIMILAR ARTICLES, OF WOOD; STATUETTES AND OTHER ORNAMENTS, OF WOOD; WOODEN\nARTICLES OF FURNITURE NOT FALLING IN CHAPTER 94 - STATUETTES AND OTHER ORNAMENTS,\nOF WOOD", - "hsn_code": "44201000" - }, - { - "description": "WOOD MARQUETRY AND INLAID WOOD; CASKETS AND CASES FOR JEWELLERY OR CUTLERY, AND\nSIMILAR ARTICLES, OF WOOD; STATUETTES AND OTHER ORNAMENTS, OF WOOD; WOODEN\nARTICLES OF FURNITURE NOT FALLING IN CHAPTER 94 - OTHER : WOOD MARQUETRY AND\nINLAID WOOD", - "hsn_code": "44209010" - }, - { - "description": "WOOD MARQUETRY AND INLAID WOOD; CASKETS AND CASES FOR JEWELLERY OR CUTLERY, AND\nSIMILAR ARTICLES, OF WOOD; STATUETTES AND OTHER ORNAMENTS, OF WOOD; WOODEN\nARTICLES OF FURNITURE NOT FALLING IN CHAPTER 94 - OTHER : OTHER", - "hsn_code": "44209090" - }, - { - "description": "OTHER ARTICLES OF WOOD - CLOTHES HANGERS", - "hsn_code": "44211000" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : SPOOLS, COPS, BOBBINS, SEWING THREAD REELS AND THE\nLIKE, OF TURNED WOOD: FOR COTTON MACHINERY", - "hsn_code": "44219011" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : SPOOLS, COPS, BOBBINS, SEWING THREAD REELS AND THE\nLIKE, OF TURNED WOOD: FOR JUTE MACHINERY", - "hsn_code": "44219012" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : SPOOLS, COPS, BOBBINS, SEWING THREAD REELS AND THE\nLIKE, OF TURNED WOOD: FOR SILK REGENERATED AND SYNTHETIC FIBRES MACHINERY", - "hsn_code": "44219013" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : SPOOLS, COPS, BOBBINS, SEWING THREAD REELS AND THE\nLIKE, OF TURNED WOOD: FOR OTHER MACHINERY", - "hsn_code": "44219014" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : SPOOLS, COPS, BOBBINS, SEWING THREAD REELS AND THE\nLIKE, OF TURNED WOOD: OTHER", - "hsn_code": "44219019" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : WOOD PAVING BLOCKS", - "hsn_code": "44219020" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : MATCH SPLINTS", - "hsn_code": "44219030" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : PENCIL SLATES", - "hsn_code": "44219040" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : PARTS OF WOOD, NAMELY OARS, PADDLES AND RUDDERS\nFOR SHIPS, BOATS AND OTHER SIMILAR FLOATING STRUCTURES", - "hsn_code": "44219050" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : PARTS OF DOMESTIC DECORATIVE ARTICLES USED AS\nTABLEWARE AND KITCHENWARE", - "hsn_code": "44219060" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : ARTICLES OF DENSIFIED WOOD NOT ELSEWHERE\nINCLUDED OR SPECIFIED", - "hsn_code": "44219070" - }, - { - "description": "OTHER ARTICLES OF WOOD - OTHER : OTHER", - "hsn_code": "44219090" - }, - { - "description": "NATURAL CORK, RAW OR SIMPLY PREPARED; WASTE CORK; CRUSHED, GRANULATED OR\nGROUND CORK - NATURAL CORK, RAW OR SIMPLY PREPARED", - "hsn_code": "45011000" - }, - { - "description": "NATURAL CORK, RAW OR SIMPLY PREPARED; WASTE CORK; CRUSHED, GRANULATED OR\nGROUND CORK - OTHER", - "hsn_code": "45019000" - }, - { - "description": "NATURAL CORK, DEBACKED OR ROUGHLY SQUARED, OR IN RECTANGULAR (INCLUDING SQUARE)\nBLOCKS, PLATES, SHEETS OR STRIP (INCLUDING SHARP -EDGED BLANKS FOR CORKS OR\nSTOPPERS)", - "hsn_code": "45020000" - }, - { - "description": "ARTICLES OF NATURAL CORK - CORKS AND STOPPERS", - "hsn_code": "45031000" - }, - { - "description": "ARTICLES OF NATURAL CORK - OTHER : SHUTTLECOCK CORK BOTTOM", - "hsn_code": "45039010" - }, - { - "description": "ARTICLES OF NATURAL CORK - OTHER : OTHER", - "hsn_code": "45039090" - }, - { - "description": "AGGLOMERATED CORK (WITH OR WITHOUT A BINDING SUBSTANCE) AND ARTICLES OF\nAGGLOMERATED CORK - BLOCKS, PLATES, SHEETS AND STRIP; TILES OF ANY SHAPE; SOLID\nCYLINDERS, INCLUDING DISCS : SHEETS", - "hsn_code": "45041010" - }, - { - "description": "AGGLOMERATED CORK (WITH OR WITHOUT A BINDING SUBSTANCE) AND ARTICLES OF\nAGGLOMERATED CORK - BLOCKS, PLATES, SHEETS AND STRIP; TILES OF ANY SHAPE; SOLID\nCYLINDERS, INCLUDING DISCS : SLABS", - "hsn_code": "45041020" - }, - { - "description": "AGGLOMERATED CORK (WITH OR WITHOUT A BINDING SUBSTANCE) AND ARTICLES OF\nAGGLOMERATED CORK - BLOCKS, PLATES, SHEETS AND STRIP; TILES OF ANY SHAPE; SOLID\nCYLINDERS, INCLUDING DISCS : OTHER", - "hsn_code": "45041090" - }, - { - "description": "AGGLOMERATED CORK (WITH OR WITHOUT A BINDING SUBSTANCE) AND ARTICLES OF\nAGGLOMERATED CORK - OTHER", - "hsn_code": "45049000" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS : MATS AND MATTING OF COIR, BOUND IN PARALLEL STRANDS", - "hsn_code": "46012010" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS : MATS AND MATTING NOT ELSEWHERE INCLUDED OR SPECIFIED\n(FOR EXAMPLE, GRASS MATS)", - "hsn_code": "46012020" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS : OTHER", - "hsn_code": "46012090" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS:-- OF BAMBOO", - "hsn_code": "46012100" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS:-- OF RATTAN", - "hsn_code": "46012200" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - MATS, MATTING AND SCREENS\nOF VEGETABLE MATERIALS:-- OTHER", - "hsn_code": "46012900" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - OTHER : OF VEGETABLE\nMATERIALS", - "hsn_code": "46019100" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - OTHER -- OF BAMBOO", - "hsn_code": "46019200" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - OTHER --OF RATTAN", - "hsn_code": "46019300" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - OTHER -- OF OTHER VEGETABLE\nMATERIALS", - "hsn_code": "46019400" - }, - { - "description": "PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, WHETHER OR NOT ASSEMBLED INTO\nSTRIPS ; PLAITING MATERIALS, PLAITS AND SIMILAR PRODUCTS OF PLAITING MATERIALS, BOUND\nTOGETHER IN PARALLEL STRANDS OR WOVEN, IN SHEET FORM, WHETHER OR NOT BEING\nFINISHED ARTICLES (FOR EXAMPLE, MATS, MATTING, SCREENS) - OTHER : OTHER", - "hsn_code": "46019900" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : OF PALM LEAVES : BASKETS", - "hsn_code": "46021011" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : OF PALM LEAVES : OTHER", - "hsn_code": "46021019" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : OTHER", - "hsn_code": "46021090" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH - OF\nVEGETABLE MATERIALS :--OF BAMBOO", - "hsn_code": "46021100" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : -- OF RATTAN", - "hsn_code": "46021200" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : -- OTHER: --- OF PALM LEAVES : ---- BASKET", - "hsn_code": "46021911" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : -- OTHER: --- OF PALM LEAVES : ---- OTHER", - "hsn_code": "46021919" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH OF\nVEGETABLE MATERIALS : -- OTHER: --- OTHER", - "hsn_code": "46021990" - }, - { - "description": "BASKETWORK, WICKERWORK AND OTHER ARTICLES, MADE DIRECTLY TO SHAPE FROM PLAITING\nMATERIALS OR MADE UP FROM GOODS OF HEADING 46 01; ARTICLES OF LOOFAH - OTHER", - "hsn_code": "46029000" - }, - { - "description": "MECHANICAL WOOD PULP", - "hsn_code": "47010000" - }, - { - "description": "CHEMICAL WOOD PULP, DISSOLVING GRADES", - "hsn_code": "47020000" - }, - { - "description": "CHEMICAL WOOD PULP, SODA OR SULPHATE, OTHERTHAN DISSOLVING GRADES - UNBLEACHED :\nCONIFEROUS", - "hsn_code": "47031100" - }, - { - "description": "CHEMICAL WOOD PULP, SODA OR SULPHATE, OTHERTHAN DISSOLVING GRADES - UNBLEACHED :\nNON-CONIFEROUS", - "hsn_code": "47031900" - }, - { - "description": "CHEMICAL WOOD PULP, SODA OR SULPHATE, OTHERTHAN DISSOLVING GRADES - SEMI\nBLEACHED OR BLEACHED : CONIFEROUS", - "hsn_code": "47032100" - }, - { - "description": "CHEMICAL WOOD PULP, SODA OR SULPHATE, OTHERTHAN DISSOLVING GRADES - SEMI\nBLEACHED OR BLEACHED : NON-CONIFEROUS", - "hsn_code": "47032900" - }, - { - "description": "CHEMICAL WOOD PULP, SULPHITE, OTHER THAN DISSOLVING GRADES - UNBLEACHED :\nCONIFEROUS", - "hsn_code": "47041100" - }, - { - "description": "CHEMICAL WOOD PULP, SULPHITE, OTHER THAN DISSOLVING GRADES - UNBLEACHED : NON\nCONIFEROUS", - "hsn_code": "47041900" - }, - { - "description": "CHEMICAL WOOD PULP, SULPHITE, OTHER THAN DISSOLVING GRADES - SEMI-BLEACHED OR\nBLEACHED : CONIFEROUS", - "hsn_code": "47042100" - }, - { - "description": "CHEMICAL WOOD PULP, SULPHITE, OTHER THAN DISSOLVING GRADES - SEMI-BLEACHED OR\nBLEACHED : NON-CONIFEROUS", - "hsn_code": "47042900" - }, - { - "description": "WOOD PULP OBTAINED BY A COMBINATION OF MECHANICAL AND CHEMICAL PULPING\nPROCESSES", - "hsn_code": "47050000" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - COTTON LINTERS PULP", - "hsn_code": "47061000" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - PULPS OF FIBRES DERIVED FROM RECOVERED\n(WASTE AND SCRAP) PAPER OR PAPERBOARD", - "hsn_code": "47062000" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - OTHER OF BAMBOO", - "hsn_code": "47063000" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - OTHER : MECHANICAL", - "hsn_code": "47069100" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - OTHER : CHEMICAL", - "hsn_code": "47069200" - }, - { - "description": "PULPS OF FIBRES DERIVED FROM RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD OR\nOF OTHER FIBROUS CELLULOSIC MATERIAL - OTHER : SEMI-CHEMICAL", - "hsn_code": "47069300" - }, - { - "description": "RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD - UNBLEACHED KRAFT PAPER OR\nPAPERBOARD OR CORRUGATED PAPER OR PAPERBOARD", - "hsn_code": "47071000" - }, - { - "description": "RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD - OTHER PAPER OR PAPERBOARD\nMADE MAINLY OF BLEACHED CHEMICAL PULP, NOT COLOURED IN THE MASS", - "hsn_code": "47072000" - }, - { - "description": "RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD - PAPER OR PAPERBOARD MADE\nMAINLY OF MECHANICAL PULP (FOR EXAMPLE, NEWSPAPERS, JOURNALS AND SIMILAR PRINTED\nMATTER)", - "hsn_code": "47073000" - }, - { - "description": "RECOVERED (WASTE AND SCRAP) PAPER OR PAPERBOARD - OTHER, INCLUDING UNSORTED\nWASTE AND SCRAP", - "hsn_code": "47079000" - }, - { - "description": "NEWSPRINT, IN ROLLS OR SHEETS - NEWSPRINT, IN ROLLS OR SHEETS :GLAZED", - "hsn_code": "48010010" - }, - { - "description": "NEWSPRINT, IN ROLLS OR SHEETS - NEWSPRINT, IN ROLLS OR SHEETS :OTHER", - "hsn_code": "48010090" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - HAND-MADE PAPER AND PAPERBOARD\n: PAPER", - "hsn_code": "48021010" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - HAND-MADE PAPER AND PAPERBOARD\n: PAPERBOARD", - "hsn_code": "48021020" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - PAPER AND PAPERBOARD OF A KIND\nUSED AS A BASE FOR PHOTO-SENSITIVE, HEAT-SENSITIVE OR ELECTRO-SENSITIVE PAPER OR\nPAPERBOARD : PHOTOGRAPHIC BASE PAPER, UNCOATED", - "hsn_code": "48022010" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - PAPER AND PAPERBOARD OF A KIND\nUSED AS A BASE FOR PHOTO-SENSITIVE, HEAT-SENSITIVE OR ELECTRO-SENSITIVE PAPER OR\nPAPERBOARD : OTHER", - "hsn_code": "48022090" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD CARBONISING BASE PAPER", - "hsn_code": "48023000" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD WALL PAPER BASE", - "hsn_code": "48024000" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: INDIA PAPER", - "hsn_code": "48025410" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: LITHO AND OFFSET PAPER", - "hsn_code": "48025420" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: DUPLICATING PAPER", - "hsn_code": "48025430" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: AIRMAIL PAPER", - "hsn_code": "48025440" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: TISSUE PAPER", - "hsn_code": "48025450" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING LESS THAN 40 G/M2: OTHER", - "hsn_code": "48025490" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : LITHO AND\nOFFSET PAPER", - "hsn_code": "48025510" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : DRAWING\nPAPER", - "hsn_code": "48025520" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS :\nDUPLICATING PAPER", - "hsn_code": "48025530" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : ACCOUNT\nBOOK PAPER", - "hsn_code": "48025540" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : BANK, BOND\nAND CHEQUE PAPER", - "hsn_code": "48025550" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : CURRENCY\nNOTE PAPER", - "hsn_code": "48025560" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : PAPER FOR\nSECURITY PRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48025570" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN ROLLS : OTHER", - "hsn_code": "48025590" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : LITHO AND OFFSET PAPER", - "hsn_code": "48025610" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : DRAWING PAPER", - "hsn_code": "48025620" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : DUPLICATING PAPER", - "hsn_code": "48025630" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : ACCOUNT BOOK PAPER", - "hsn_code": "48025640" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : BANK, BOND AND CHEQUE PAPER", - "hsn_code": "48025650" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : CURRENCY NOTE PAPER", - "hsn_code": "48025660" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : PAPER FOR SECURITY PRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48025670" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2, IN SHEETS WITH ONE\nSIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : OTHER", - "hsn_code": "48025690" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: LITHO AND\nOFFSET PAPER", - "hsn_code": "48025710" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: DRAWING\nPAPER", - "hsn_code": "48025720" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: DUPLICATING\nPAPER", - "hsn_code": "48025730" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: ACCOUNT\nBOOK PAPER", - "hsn_code": "48025740" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: BANK, BOND\nAND CHEQUE PAPER", - "hsn_code": "48025750" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: CURRENCY\nNOTE PAPER", - "hsn_code": "48025760" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: PAPER FOR\nSECURITY PRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48025770" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : OTHER, WEIGHING 40 G/M2OR MORE BUT NOT MORE THAN 150 G/M2: OTHER", - "hsn_code": "48025790" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: LITHO AND OFFSET PAPER", - "hsn_code": "48025810" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: DRAWING PAPER", - "hsn_code": "48025820" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: DUPLICATING PAPER", - "hsn_code": "48025830" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: BANK, BOND AND CHEQUE PAPER", - "hsn_code": "48025840" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: PAPER FOR SECURITY PRINTING, CURRENCY PAPER,\nSTAMP PAPER", - "hsn_code": "48025850" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, NOT\nCONTAINING FIBRES OBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF\nWHICH NOT MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH\nFIBRES : WEIGHING MORE THAN 150 G/M2: OTHER", - "hsn_code": "48025890" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : DRAWING PAPER", - "hsn_code": "48026110" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : POSTER PAPER", - "hsn_code": "48026120" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : PRINTING PAPER\nDYED OR MARBLED IN MASS", - "hsn_code": "48026130" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : ACCOUNT BOOK\nPAPER", - "hsn_code": "48026140" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : AUTOMATIC DATA\nPROCESSING MACHINE PAPER", - "hsn_code": "48026150" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : PAPER FOR\nSECURITY PRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48026160" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN ROLLS : OTHER", - "hsn_code": "48026190" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : DRAWING PAPER", - "hsn_code": "48026210" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : POSTER PAPER", - "hsn_code": "48026220" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : PRINTING PAPER DYED OR MARBLED IN MASS", - "hsn_code": "48026230" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : ACCOUNT BOOK PAPER", - "hsn_code": "48026240" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : AUTOMATIC DATA PROCESSING MACHINE PAPER", - "hsn_code": "48026250" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : PAPER FOR SECURITY PRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48026260" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : IN SHEETS WITH ONE SIDE\nNOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE UNFOLDED\nSTATE : OTHER", - "hsn_code": "48026290" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : DRAWING PAPER", - "hsn_code": "48026910" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : POSTER PAPER", - "hsn_code": "48026920" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : PRINTING PAPER\nDYED OR MARBLED IN MASS", - "hsn_code": "48026930" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : ACCOUNT BOOK\nPAPER", - "hsn_code": "48026940" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : AUTOMATIC DATA\nPROCESSING MACHINE PAPER", - "hsn_code": "48026950" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : PAPER FOR SECURITY\nPRINTING, CURRENCY PAPER, STAMP PAPER", - "hsn_code": "48026960" - }, - { - "description": "UNCOATED PAPER AND PAPERBOARD, OF A KIND USED FOR WRITING, PRINTING OR OTHER\nGRAPHIC PURPOSES, AND NON-PERFORATED PUNCH CARD AND PUNCH TAPE PAPER, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS OF ANY SIZE, OTHER THAN PAPER OF HEADING\n4801 OR 4803; HAND-MADE PAPER AND PAPERBOARD - OTHER PAPER AND PAPERBOARD, OF\nWHICH MORE THAN 10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER : OTHER", - "hsn_code": "48026990" - }, - { - "description": "TOILET OR FACIAL TISSUE STOCK, TOWEL OR NAPKIN STOCK AND SIMILAR PAPER OF A KIND\nUSED FOR HOUSEHOLD OR SANITARY PURPOSES, CELLULOSE WADDING AND WEBS OF\nCELLULOSE FIBRES, WHETHER OR NOT CREPED, CRINKLED, EMBOSSED, PERFORATED, SURFACE\nCOLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR SHEETS - TOILET OR FACIAL TISSUE\nSTOCK, TOWEL OR NAPKIN STOCK AND SIMILAR PAPER OF A KIND USED FOR HOUSEHOLD OR\nSANITARY PURPOSES, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, WHETHER OR\nNOT CREPED, CRINKLED, EMBOSSED, PERFORATED, SURFACE-COLOURED, SURFACEDECORATED\nOR PRINTED, IN ROLLS OR SHEETS : IN COMMERCIAL SIZEROLLS OF A WIDTH 36 CM AND ABOVE", - "hsn_code": "48030010" - }, - { - "description": "TOILET OR FACIAL TISSUE STOCK, TOWEL OR NAPKIN STOCK AND SIMILAR PAPER OF A KIND\nUSED FOR HOUSEHOLD OR SANITARY PURPOSES, CELLULOSE WADDING AND WEBS OF\nCELLULOSE FIBRES, WHETHER OR NOT CREPED, CRINKLED, EMBOSSED, PERFORATED, SURFACE\nCOLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR SHEETS - TOILET OR FACIAL TISSUE\nSTOCK, TOWEL OR NAPKIN STOCK AND SIMILAR PAPER OF A KIND USED FOR HOUSEHOLD OR\nSANITARY PURPOSES, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, WHETHER OR\nNOT CREPED, CRINKLED, EMBOSSED, PERFORATED, SURFACE-COLOURED, SURFACEDECORATED\nOR PRINTED, IN ROLLS OR SHEETS : OTHER", - "hsn_code": "48030090" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - KRAFTLINER : UNBLEACHED", - "hsn_code": "48041100" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - KRAFTLINER : OTHER", - "hsn_code": "48041900" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - SACK KRAFT PAPER : UNBLEACHED", - "hsn_code": "48042100" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - SACK KRAFT PAPER : OTHER", - "hsn_code": "48042900" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING 150 G/M2OR LESS:\nUNBLEACHED", - "hsn_code": "48043100" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING 150 G/M2OR LESS:\nOTHER", - "hsn_code": "48043900" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING MORE THAN 150\nG/M2BUT LESS THAN 225 G/M2: UNBLEACHED", - "hsn_code": "48044100" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING MORE THAN 150\nG/M2BUT LESS THAN 225 G/M2: BLEACHED UNIFORMLY THROUGHOUT THE MASS AND OF\nWHICH MORE THAN 95% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF WOOD FIBRES\nOBTAINED BY A CHEMICAL PROCESS", - "hsn_code": "48044200" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING MORE THAN 150\nG/M2BUT LESS THAN 225 G/M2: OTHER", - "hsn_code": "48044900" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING 225 G/M2OR\nMORE UNBLEACHED", - "hsn_code": "48045100" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING 225 G/M2OR\nMORE BLEACHED UNIFORMLY THROUGHOUT THE MASS AND OF WHICH MORE THAN 95% BY\nWEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF WOOD FIBRES OBTAINED BY A CHEMICAL\nPROCESS", - "hsn_code": "48045200" - }, - { - "description": "UNCOATED KRAFT PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, OTHER THAN THAT OF\nHEADING 4802 OR 4803 - OTHER KRAFT PAPER AND PAPERBOARD WEIGHING 225 G/M2OR\nMORE OTHER", - "hsn_code": "48045900" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - FLUTING PAPER : SEMI-CHEMICAL\nFLUTING PAPER", - "hsn_code": "48051100" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - FLUTING PAPER : STRAW FLUTING\nPAPER", - "hsn_code": "48051200" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - FLUTING PAPER : OTHER", - "hsn_code": "48051900" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - TESTLINER (RECYCLED LINER\nBOARD) : WEIGHING 150 G/M2OR LESS", - "hsn_code": "48052400" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - TESTLINER (RECYCLED LINER\nBOARD) : WEIGHING MORE THAN 150 G/M2", - "hsn_code": "48052500" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - TESTLINER (RECYCLED LINER\nBOARD) : SULPHITE WRAPPING PAPER", - "hsn_code": "48053000" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - TESTLINER (RECYCLED LINER\nBOARD) : FILTER PAPER AND PAPERBOARD", - "hsn_code": "48054000" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - TESTLINER (RECYCLED LINER\nBOARD) : FELT PAPER AND PAPERBOARD", - "hsn_code": "48055000" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - OTHER : WEIGHING 150 G/M2OR\nLESS", - "hsn_code": "48059100" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - OTHER : WEIGHING MORE THAN\n150 G/M2BUT LESS THAN 225 G/M2", - "hsn_code": "48059200" - }, - { - "description": "OTHER UNCOATED PAPER AND PAPERBOARD, IN ROLLS OR SHEETS, NOT FURTHER WORKED OR\nPROCESSED THAN AS SPECIFIED IN NOTE 3 TO THIS CHAPTER - OTHER : WEIGHING 225 G/M2OR\nMORE", - "hsn_code": "48059300" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS VEGETABLE PARCHMENT", - "hsn_code": "48061000" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS GREASEPROOF PAPERS", - "hsn_code": "48062000" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS TRACING PAPERS", - "hsn_code": "48063000" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS - GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS : GLASSINE PAPERS", - "hsn_code": "48064010" - }, - { - "description": "VEGETABLE PARCHMENT, GREASEPROOF PAPERS, TRACING PAPERS AND GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS, IN ROLLS OR SHEETS - GLASSINE AND OTHER\nGLAZED TRANSPARENT OR TRANSLUCENT PAPERS : OTHER", - "hsn_code": "48064090" - }, - { - "description": "COMPOSITE PAPER AND PAPERBOARD (MADE BY STICKING FLAT LAYERS OF PAPER OR\nPAPERBOARD TOGETHER WITH AN ADHESIVE), NOT SURFACE-COATED OR IMPREGNATED,\nWHETHER OR NOT INTERNALLY REINFORCED, IN ROLLS OR SHEETS- COMPOSITE PAPER AND\nPAPERBOARD (MADE BY STICKING FLAT LAYERS OF PAPER OR PAPERBOARD TOGETHER WITH AN\nADHESIVE), NOT SURFACE-COATED OR IMPREGNATED, WHETHER OR NOT INTERNALLY\nREINFORCED, IN ROLLS OR SHEETS : STRAW PAPER AND OTHER STRAW BOARD, WHETHER OR\nNOT COVERED WITH PAPER OTHER THAN STRAW PAPER", - "hsn_code": "48070010" - }, - { - "description": "COMPOSITE PAPER AND PAPERBOARD (MADE BY STICKING FLAT LAYERS OF PAPER OR\nPAPERBOARD TOGETHER WITH AN ADHESIVE), NOT SURFACE-COATED OR IMPREGNATED,\nWHETHER OR NOT INTERNALLY REINFORCED, IN ROLLS OR SHEETS- COMPOSITE PAPER AND\nPAPERBOARD (MADE BY STICKING FLAT LAYERS OF PAPER OR PAPERBOARD TOGETHER WITH AN\nADHESIVE), NOT SURFACE-COATED OR IMPREGNATED, WHETHER OR NOT INTERNALLY\nREINFORCED, IN ROLLS OR SHEETS : OTHER", - "hsn_code": "48070090" - }, - { - "description": "PAPER AND PAPERBOARD, CORRUGATED (WITH OR WITHOUT GLUED FLAT SURFACE SHEETS),\nCREPED, CRINKLED, EMBOSSED OR PERFORATED, IN ROLLS OR SHEETS, OTHER THAN PAPER OF\nTHE KIND DESCRIBED IN HEADING 4803 - CORRUGATED PAPER AND PAPERBOARD, WHETHER OR\nNOT PERFORATE", - "hsn_code": "48081000" - }, - { - "description": "PAPER AND PAPERBOARD, CORRUGATED (WITH OR WITHOUT GLUED FLAT SURFACE SHEETS),\nCREPED, CRINKLED, EMBOSSED OR PERFORATED, IN ROLLS OR SHEETS, OTHER THAN PAPER OF\nTHE KIND DESCRIBED IN HEADING 4803 -KRAFT PAPER, CREPED OR CRINKLED, WHETHER OR NOT\nEMBOSSED OR PERFORATED--- SACK KRAFT PAPER, CREPED OR CRINKLED, WHETHER OR NOT\nEMBOSSED OR PERFORATED", - "hsn_code": "48084010" - }, - { - "description": "PAPER AND PAPERBOARD, CORRUGATED (WITH OR WITHOUT GLUED FLAT SURFACE SHEETS),\nCREPED, CRINKLED, EMBOSSED OR PERFORATED, IN ROLLS OR SHEETS, OTHER THAN PAPER OF\nTHE KIND DESCRIBED IN HEADING 4803 -KRAFT PAPER, CREPED OR CRINKLED, WHETHER OR NOT\nEMBOSSED OR PERFORATED--- OTHER KRAFT PAPER, CREPED OR CRINKLED, WHETHER OR NOT\nEMBOSSED OR PERFORATED", - "hsn_code": "48084090" - }, - { - "description": "PAPER AND PAPERBOARD, CORRUGATED (WITH OR WITHOUT GLUED FLAT SURFACE SHEETS),\nCREPED, CRINKLED, EMBOSSED OR PERFORATED, IN ROLLS OR SHEETS, OTHER THAN PAPER OF\nTHE KIND DESCRIBED IN HEADING 4803 - OTHER", - "hsn_code": "48089000" - }, - { - "description": "CARBON PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (INCLUDING\nCOATED OR IMPREGNATED PAPER FOR DUPLICATOR STENCILS OR OFFSET PLATES), WHETHER\nOR NOT PRINTED, IN ROLLS OR SHEETS - CARBON OR SIMILAR COPYING PAPERS : MANIFOLD\nPAPER", - "hsn_code": "48091010" - }, - { - "description": "CARBON PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (INCLUDING\nCOATED OR IMPREGNATED PAPER FOR DUPLICATOR STENCILS OR OFFSET PLATES), WHETHER\nOR NOT PRINTED, IN ROLLS OR SHEETS - CARBON OR SIMILAR COPYING PAPERS : OTHER", - "hsn_code": "48091090" - }, - { - "description": "CARBON PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (INCLUDING\nCOATED OR IMPREGNATED PAPER FOR DUPLICATOR STENCILS OR OFFSET PLATES), WHETHER\nOR NOT PRINTED, IN ROLLS OR SHEETS SELF-COPY PAPER", - "hsn_code": "48092000" - }, - { - "description": "CARBON PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (INCLUDING\nCOATED OR IMPREGNATED PAPER FOR DUPLICATOR STENCILS OR OFFSET PLATES), WHETHER\nOR NOT PRINTED, IN ROLLS OR SHEETS OTHER", - "hsn_code": "48099000" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN ROLLS :\nIMITATION ART PAPER", - "hsn_code": "48101310" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN ROLLS : ART\nPAPER", - "hsn_code": "48101320" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN ROLLS : CHROME\nPAPER OR PAPERBOARD", - "hsn_code": "48101330" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN ROLLS : OTHER", - "hsn_code": "48101390" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN SHEETS WITH\nONE SIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : IMITATION ART PAPER", - "hsn_code": "48101410" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN SHEETS WITH\nONE SIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : ART PAPER", - "hsn_code": "48101420" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN SHEETS WITH\nONE SIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : CHROME PAPER OR PAPERBOARD", - "hsn_code": "48101430" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : IN SHEETS WITH\nONE SIDE NOT EXCEEDING 435 MM AND THE OTHER SIDE NOT EXCEEDING 297 MM IN THE\nUNFOLDED STATE : OTHER", - "hsn_code": "48101490" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : OTHER : IMITATION\nART PAPER", - "hsn_code": "48101910" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : OTHER : ART PAPER", - "hsn_code": "48101920" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : OTHER : CHROME\nPAPER OR PAPERBOARD", - "hsn_code": "48101930" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, NOT CONTAINING FIBRES\nOBTAINED BY A MECHANICAL OR CHEMI-MECHANICAL PROCESS OR OF WHICH NOT MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF SUCH FIBRES : OTHER : OTHER", - "hsn_code": "48101990" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, OF WHICH MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES OBTAINED BY A\nMECHANICAL OR CHEMI-MECHANICAL PROCESS : LIGHT-WEIGHT COATED PAPER", - "hsn_code": "48102200" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - PAPER AND PAPERBOARD OF A\nKIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES, OF WHICH MORE THAN\n10% BY WEIGHT OF THE TOTAL FIBRE CONTENT CONSISTS OF FIBRES OBTAINED BY A\nMECHANICAL OR CHEMI-MECHANICAL PROCESS : OTHER", - "hsn_code": "48102900" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nBLEACHED UNIFORMLY THROUGHOUT THE MASS AND OF WHICH MORE THAN 95% BY WEIGHT\nOF THE TOTAL FIBRE CONTENT CONSISTS OF WOOD FIBRES OBTAINED BY A CHEMICAL PROCESS,\nAND WEIGHING 150 G/M2OR LESS", - "hsn_code": "48103100" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nBLEACHED UNIFORMLY THROUGHOUT THE MASS AND OF WHICH MORE THAN 95% BY WEIGHT\nOF THE TOTAL FIBRE CONTENT CONSISTS OF WOOD FIBRES OBTAINED BY A CHEMICAL PROCESS,\nAND WEIGHING MORE THAN 150 G/M2", - "hsn_code": "48103200" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nOTHER : INSULATING PAPER", - "hsn_code": "48103910" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nOTHER : ELECTRIC INSULATING PRESS BOARD", - "hsn_code": "48103920" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nOTHER : INSULATION BOARDS (HOMOGENOUS)", - "hsn_code": "48103930" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - KRAFT PAPER AND PAPERBOARD,\nOTHER THAN THAT OF A KIND USED FOR WRITING, PRINTING OR OTHER GRAPHIC PURPOSES :\nOTHER : OTHER", - "hsn_code": "48103990" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - OTHER PAPER AND PAPERBOARD :\nMULTI-PLY", - "hsn_code": "48109200" - }, - { - "description": "PAPER AND PAPERBOARD, COATED ON ONE OR BOTH SIDES WITH KAOLIN (CHINA CLAY) OR\nOTHER INORGANIC SUBSTANCES, WITH OR WITHOUT A BINDER, AND WITH NO OTHER COATING,\nWHETHER OR NOT SURFACE - COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS OR\nRECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE - OTHER PAPER AND PAPERBOARD :\nOTHER", - "hsn_code": "48109900" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810 - TARRED, BITUMINISED OR ASPHALTED\nPAPER AND PAPERBOARD", - "hsn_code": "48111000" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- GUMMED OR ADHESIVE PAPER AND\nPAPERBOARD : SELF-ADHESIVE", - "hsn_code": "48114100" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- GUMMED OR ADHESIVE PAPER AND\nPAPERBOARD : OTHER", - "hsn_code": "48114900" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- PAPER AND PAPERBOARD, COATED,\nIMPREGNATED OR COVERED WITH PLASTICS (EXCLUDING ADHESIVES)--BLEACHED, WEIGHING\nMORE THAN 150 G/M---ASEPTIC PACKAGING PAPER", - "hsn_code": "48115110" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- PAPER AND PAPERBOARD, COATED,\nIMPREGNATED OR COVERED WITH PLASTICS (EXCLUDING ADHESIVES)--BLEACHED, WEIGHING\nMORE THAN 150 G/M---OTHER", - "hsn_code": "48115190" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- PAPER AND PAPERBOARD, COATED,\nIMPREGNATED OR COVERED WITH PLASTICS (EXCLUDING ADHESIVES)--OTHER---ASEPTIC\nPACKAGING PAPER", - "hsn_code": "48115910" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- PAPER AND PAPERBOARD, COATED,\nIMPREGNATED OR COVERED WITH PLASTICS (EXCLUDING ADHESIVES)--OTHER---OTHER", - "hsn_code": "48115990" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810 - PAPER AND PAPERBOARD, COATED,\nIMPREGNATED OR COVERED WITH WAX, PARAFFIN WAX, STEARINE, OIL OR GLYCEROL", - "hsn_code": "48116000" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : HANDMADE PAPER AND PAPERBOARD, RULES, LINED OR\nSQUARED BUT NOT OTHERWISE PRINTED", - "hsn_code": "48119011" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : CHROMO AND ART PAPER, COATED", - "hsn_code": "48119012" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : BUILDING BOARD OF PAPER OR PULP, IMPREGNATED", - "hsn_code": "48119013" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : CHROMO BOARD", - "hsn_code": "48119014" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : RAW BASE PAPER FOR SENSITISING, COATED", - "hsn_code": "48119015" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : SURFACE MARBLED PAPER", - "hsn_code": "48119016" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : LEATHER BOARD AND IMITATION LEATHER BOARD", - "hsn_code": "48119017" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : HANDMADE PAPER AND PAPERBOARD, RULES,\nLINED OR SQUARED BUT NOT OTHERWISE PRINTED; CHROMO AND ART PAPER, COATED,\nBUILDING BOARD OF PAPER OR PULP, IMPREGNATED; CHROMO BOARD; RAW BASE PAPER FOR\nSENSITISING, COATED; SURFACE MARBLED PAPER; LEATHER BOARD AND IMITATION LEATHER\nBOARD; AND MATRIX BOARD : MATRIX BOARD", - "hsn_code": "48119018" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : OTHER : GRAPE GUARD PAPER", - "hsn_code": "48119091" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : OTHER : THERMAL PAPER FOR FAX MACHINES", - "hsn_code": "48119093" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : OTHER : THERMAL PAPER IN JUMBO ROLLS (SIZE 1\nMT AND ABOVE IN WIDTH AND 5,000 MT AND ABOVE IN LENGTH", - "hsn_code": "48119094" - }, - { - "description": "PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, COATED,\nIMPREGNATED, COVERED, SURFACE-COLOURED, SURFACE-DECORATED OR PRINTED, IN ROLLS\nOR RECTANGULAR (INCLUDING SQUARE) SHEETS, OF ANY SIZE, OTHER THAN GOODS OF THE\nKIND DESCRIBED IN HEADING 4803, 4809 OR 4810- OTHER PAPER, PAPERBOARD, CELLULOSE\nWADDING AND WEBS OF CELLULOSE FIBRES : OTHER : OTHER", - "hsn_code": "48119099" - }, - { - "description": "FILTER BLOCKS, SLABS AND PLATES, OF PAPER PULP", - "hsn_code": "48120000" - }, - { - "description": "CIGARETTE PAPER, WHETHER OR NOT CUT TO SIZE OR IN THE FORM OF BOOKLETS OR TUBES IN\nTHE FORM OF BOOKLETS OR TUBES", - "hsn_code": "48131000" - }, - { - "description": "CIGARETTE PAPER, WHETHER OR NOT CUT TO SIZE OR IN THE FORM OF BOOKLETS OR TUBES IN\nROLLS OF A WIDTH NOT EXCEEDING 5 CM", - "hsn_code": "48132000" - }, - { - "description": "CIGARETTE PAPER, WHETHER OR NOT CUT TO SIZE OR IN THE FORM OF BOOKLETS OR TUBES -\nOTHER : CIGARETTE PAPER IN BULK, OR IN SHEETS", - "hsn_code": "48139010" - }, - { - "description": "CIGARETTE PAPER, WHETHER OR NOT CUT TO SIZE OR IN THE FORM OF BOOKLETS OR TUBES -\nOTHER : OTHER", - "hsn_code": "48139090" - }, - { - "description": "WALLPAPER AND SIMILAR WALL COVERINGS; WINDOW TRANSPARENCIES OF PAPER -\nWALLPAPER AND SIMILAR WALL COVERINGS, CONSISTING OF PAPER COATED OR COVERED, ON\nTHE FACE SIDE, WITH A GRAINED, EMBOSSED, COLOURED, DESIGN-PRINTED OR OTHERWISE\nDECORATED LAYER OF PLASTICS", - "hsn_code": "48142000" - }, - { - "description": "WALLPAPER AND SIMILAR WALL COVERINGS; WINDOW TRANSPARENCIES OF PAPER -\nWALLPAPER AND SIMILAR WALL COVERINGS, CONSISTING OF PAPER COVERED, ON THE FACE\nSIDE, WITH PLAITING MATERIAL, WHETHER OR NOT BOUND TOGETHER IN PARALLEL STRANDS\nOR WOVEN", - "hsn_code": "48143000" - }, - { - "description": "WALLPAPER AND SIMILAR WALL COVERINGS; WINDOW TRANSPARENCIES OF PAPER - OTHER", - "hsn_code": "48149000" - }, - { - "description": "FLOOR COVERINGS ON A BASE OF PAPER OR OF PAPERBOARD, WHETHER OR NOT CUT TO SIZE", - "hsn_code": "48150000" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - CARBON OR SIMILAR COPYING PAPERS", - "hsn_code": "48161000" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - SELF-COPY PAPER : DUPLICATING PAPER, CUT TO SIZE", - "hsn_code": "48162010" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - SELF-COPY PAPER : PAPER FOR FAX MACHINE", - "hsn_code": "48162020" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - SELF-COPY PAPER : OTHER", - "hsn_code": "48162090" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES DUPLICATOR STENCILS", - "hsn_code": "48163000" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - OTHER : OTHER COPYING OR TRANSFER PAPERS (EXCLUDING PRINTED\nTRANSFER) CUT TO SIZE WHETHER OR NOT PUT UP IN BOXES", - "hsn_code": "48169010" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - OTHER : CALCULATING MACHINE PAPER IN ROLLS AND STRIPS NOT\nEXCEEDING 15 CM IN WIDTH", - "hsn_code": "48169020" - }, - { - "description": "CARBON-PAPER, SELF-COPY PAPER AND OTHER COPYING OR TRANSFER PAPERS (OTHER THAN\nTHOSE OF HEADING 4809), DUPLICATOR STENCILS AND OFFSET PLATES, OF PAPER, WHETHER OR\nNOT PUT UP IN BOXES - OTHER : OTHER", - "hsn_code": "48169090" - }, - { - "description": "ENVELOPES, LETTER CARDS, PLAIN POSTCARDS AND CORRESPONDENCE CARDS, OF PAPER OR\nPAPERBOARD; BOXES, POUCHES, WALLETS AND WRITING COMPENDIUMS, OF PAPER OR\nPAPERBOARD, CONTAINING AN ASSORTMENT OF PAPER STATIONERY - ENVELOPES", - "hsn_code": "48171000" - }, - { - "description": "ENVELOPES, LETTER CARDS, PLAIN POSTCARDS AND CORRESPONDENCE CARDS, OF PAPER OR\nPAPERBOARD; BOXES, POUCHES, WALLETS AND WRITING COMPENDIUMS, OF PAPER OR\nPAPERBOARD, CONTAINING AN ASSORTMENT OF PAPER STATIONERY - LETTER CARDS, PLAIN\nPOSTCARDS AND CORRESPONDENCE CARDS", - "hsn_code": "48172000" - }, - { - "description": "ENVELOPES, LETTER CARDS, PLAIN POSTCARDS AND CORRESPONDENCE CARDS, OF PAPER OR\nPAPERBOARD; BOXES, POUCHES, WALLETS AND WRITING COMPENDIUMS, OF PAPER OR\nPAPERBOARD, CONTAINING AN ASSORTMENT OF PAPER STATIONERY - BOXES, POUCHES,\nWALLETS AND WRITING COMPENDIUMS, OF PAPER OR PAPERBOARD, CONTAINING AN\nASSORTMENT OF PAPER STATIONERY: WRITING BLOCKS", - "hsn_code": "48173010" - }, - { - "description": "ENVELOPES, LETTER CARDS, PLAIN POSTCARDS AND CORRESPONDENCE CARDS, OF PAPER OR\nPAPERBOARD; BOXES, POUCHES, WALLETS AND WRITING COMPENDIUMS, OF PAPER OR\nPAPERBOARD, CONTAINING AN ASSORTMENT OF PAPER STATIONERY - BOXES, POUCHES,\nWALLETS AND WRITING COMPENDIUMS, OF PAPER OR PAPERBOARD, CONTAINING AN\nASSORTMENT OF PAPER STATIONERY: OTHER", - "hsn_code": "48173090" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A\nKIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36\nCM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS,\nSERVIETTES, NAPKINS FOR BABIES, TAMPONS, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY\nOR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP,\nPAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES - TOILET PAPER", - "hsn_code": "48181000" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A\nKIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36\nCM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS,\nSERVIETTES, NAPKINS FOR BABIES, TAMPONS, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY\nOR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP,\nPAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES - HANDKERCHIEFS, CLEANING OR\nFACIAL TISSUES AND TOWEL", - "hsn_code": "48182000" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A\nKIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36\nCM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS,\nSERVIETTES, NAPKINS FOR BABIES, TAMPONS, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY\nOR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP,\nPAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES - TABLECLOTHS AND SERVIETTES", - "hsn_code": "48183000" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A\nKIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36\nCM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS,\nSERVIETTES, NAPKINS FOR BABIES, TAMPONS, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY\nOR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP,\nPAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES ARTICLES OF APPAREL AND\nCLOTHING ACCESSORIES", - "hsn_code": "48185000" - }, - { - "description": "TOILET PAPER AND SIMILAR PAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES, OF A\nKIND USED FOR HOUSEHOLD OR SANITARY PURPOSES, IN ROLLS OF A WIDTH NOT EXCEEDING 36\nCM, OR CUT TO SIZE OR SHAPE; HANDKERCHIEFS, CLEANSING TISSUES, TOWELS, TABLE CLOTHS,\nSERVIETTES, NAPKINS FOR BABIES, TAMPONS, BED SHEETS AND SIMILAR HOUSEHOLD, SANITARY\nOR HOSPITAL ARTICLES, ARTICLES OF APPAREL AND CLOTHING ACCESSORIES, OF PAPER PULP,\nPAPER, CELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES OTHER", - "hsn_code": "48189000" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE 4819 10\nCARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE\nCARTONS, BOXES AND CASES, OF CORRUGATED PAPER OR PAPERBOARD : BOXES", - "hsn_code": "48191010" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE 4819 10\nCARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE\nCARTONS, BOXES AND CASES, OF CORRUGATED PAPER OR PAPERBOARD : OTHER", - "hsn_code": "48191090" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE\nFOLDING CARTONS, BOXES AND CASES, OF NONCORRUGATED PAPER AND PAPERBOARD :\nCARTONS, BOXES, CASES, INTENDED FOR THE PACKING OF MATCH STICKS", - "hsn_code": "48192010" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE\nFOLDING CARTONS, BOXES AND CASES, OF NONCORRUGATED PAPER AND PAPERBOARD : BOXES", - "hsn_code": "48192020" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE\nFOLDING CARTONS, BOXES AND CASES, OF NONCORRUGATED PAPER AND PAPERBOARD :\nOTHER", - "hsn_code": "48192090" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE - SACKS\nAND BAGS, HAVING A BASE OF A WIDTH OF 40 CM OR MORE", - "hsn_code": "48193000" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE - OTHER\nSACKS AND BAGS, INCLUDING CONES", - "hsn_code": "48194000" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE - OTHER\nPACKING CONTAINERS, INCLUDING RECORD SLEEVES : MADE OF CORRUGATED PAPER OR\nPAPERBOARD", - "hsn_code": "48195010" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE - OTHER\nPACKING CONTAINERS, INCLUDING RECORD SLEEVES : OTHER", - "hsn_code": "48195090" - }, - { - "description": "CARTONS, BOXES, CASES, BAGS AND OTHER PACKING CONTAINERS, OF PAPER, PAPERBOARD,\nCELLULOSE WADDING OR WEBS OF CELLULOSE FIBRES; BOX FILES, LETTER TRAYS, AND SIMILAR\nARTICLES, OF PAPER OR PAPERBOARD OF A KIND USED IN OFFICES, SHOPS OR THE LIKE - BOX\nFILES, LETTER TRAYS, STORAGE BOXES AND SIMILAR ARTICLES, OF A KIND USED IN OFFICES,\nSHOPS OR THE LIKE", - "hsn_code": "48196000" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD\nREGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES : REGISTERS, ACCOUNT BOOKS", - "hsn_code": "48201010" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD\nREGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES : LETTER PADS", - "hsn_code": "48201020" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD\nREGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES : OTHER", - "hsn_code": "48201090" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR\nPAPERBOARDEXERCISE BOOKS", - "hsn_code": "48202000" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR\nPAPERBOARDBINDERS (OTHER THAN BOOK COVERS), FOLDERS AND FILE COVERS", - "hsn_code": "48203000" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR\nPAPERBOARDMANIFOLD BUSINESS FORMS AND INTERLEAVED CARBON SETS", - "hsn_code": "48204000" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR\nPAPERBOARDALBUMS FOR SAMPLES OR FOR COLLECTIONS", - "hsn_code": "48205000" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD -\nOTHER: BLOTTING PAPERS CUT TO SIZE", - "hsn_code": "48209010" - }, - { - "description": "REGISTERS, ACCOUNT BOOKS, NOTE BOOKS, ORDER BOOKS, RECEIPT BOOKS, LETTER PADS,\nMEMORANDUM PADS, DIARIES AND SIMILAR ARTICLES, EXCISE BOOKS, BLOTTING-PADS,\nBINDERS (LOOSE-LEAF OR OTHER), FOLDERS, FILE COVERS, MANIFOLD BUSINESS FORMS,\nINTERLEAVED CARBON SETS AND OTHER ARTICLES OF STATIONERY, OF PAPER OR PAPERBOARD;\nALBUMS FOR SAMPLES OR FOR COLLECTIONS AND BOOK COVERS, OF PAPER OR PAPERBOARD -\nOTHER: OTHER", - "hsn_code": "48209090" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED - PRINTED : PAPER\nTAGS", - "hsn_code": "48211010" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED - PRINTED : LABELS", - "hsn_code": "48211020" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED - PRINTED : OTHER", - "hsn_code": "48211090" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED - OTHER: LABELS", - "hsn_code": "48219010" - }, - { - "description": "PAPER OR PAPERBOARD LABELS OF ALL KINDS, WHETHER OR NOT PRINTED - OTHER: OTHER", - "hsn_code": "48219090" - }, - { - "description": "BOBBINS, SPOOLS, COPS AND SIMILAR SUPPORTS OF PAPER PULP, PAPER OR PAPERBOARD\n(WHETHER OR NOT PERFORATED OR HARDENED) - OF A KIND USED FOR WINDING TEXTILE YARN", - "hsn_code": "48221000" - }, - { - "description": "BOBBINS, SPOOLS, COPS AND SIMILAR SUPPORTS OF PAPER PULP, PAPER OR PAPERBOARD\n(WHETHER OR NOT PERFORATED OR HARDENED) - OTHER : PAPER TUBES", - "hsn_code": "48229010" - }, - { - "description": "BOBBINS, SPOOLS, COPS AND SIMILAR SUPPORTS OF PAPER PULP, PAPER OR PAPERBOARD\n(WHETHER OR NOT PERFORATED OR HARDENED) - OTHER : OTHER", - "hsn_code": "48229090" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - GUMMED OR ADHESIVE PAPER, IN STRIPS OR ROLLS : SELF\nADHESIVE", - "hsn_code": "48231200" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - GUMMED OR ADHESIVE PAPER, IN STRIPS OR ROLLS : OTHER", - "hsn_code": "48231900" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - FILTER PAPER AND PAPERBOARD", - "hsn_code": "48232000" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - ROLLS, SHEETS AND DIALS, PRINTED FOR SELF-RECORDING\nAPPARATUS", - "hsn_code": "48234000" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - TRAYS, DISHES, PLATES, CUPS AND THE LIKE, OF PAPER AND\nPAPERBOARD", - "hsn_code": "48236000" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - TRAYS,DISHES,PLATES, CUPS AND THE LIKE, OF PAPER OR\nPAPERBOARD : OF BAMBOO", - "hsn_code": "48236100" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - TRAYS,DISHES,PLATES, CUPS AND THE LIKE, OF PAPER OR\nPAPERBOARD : OTHER", - "hsn_code": "48236900" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - MOULDED OR PRESSED ARTICLE OF PAPER PULP : PAPER PULP\nMOULDED TRAYS", - "hsn_code": "48237010" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - MOULDED OR PRESSED ARTICLE OF PAPER PULP : WOOD PULP\nBOARD", - "hsn_code": "48237020" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - MOULDED OR PRESSED ARTICLE OF PAPER PULP : ARTICLES\nMADE OF PAPER MACHE OTHER THAN ARTWARE AND MOULDED OR PRESSED GOODS OF WOOD\nPULP", - "hsn_code": "48237030" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - MOULDED OR PRESSED ARTICLE OF PAPER PULP : OTHER", - "hsn_code": "48237090" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : BRAILLE PAPER", - "hsn_code": "48239011" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : CELLULOSE IN SOLE BOARD OR SHEET", - "hsn_code": "48239012" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PACKING AND WRAPPING PAPER", - "hsn_code": "48239013" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PAPER FOR CIGARETTE FILTER TIPS", - "hsn_code": "48239014" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PAPER CONE FOR LOUD SPEAKER", - "hsn_code": "48239015" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR,\nLEATHER GARMENTS AND GOODS", - "hsn_code": "48239016" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL\nAND CLOTHING ACCESSORIES", - "hsn_code": "48239017" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : PRODUCTS CONSISTING OF SHEETS OF PAPER OR\nPAPERBOARD, IMPREGNATED, COATED OR COVERED WITH PLASTICS (INCLUDING THERMOSET\nRESINS OR MIXTURES THEREOF OR CHEMICAL FORMULATIONS CONTAINING MELAMINE,\nPHENOL OR UREA FORMALDEHYDE WITH OR WITHOUT CURING AGENTS OR CATALYSTS),\nCOMPRESSED TOGETHER IN ONE OR MORE OPERATIONS", - "hsn_code": "48239018" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : BRAILLE PAPER, CELLULOSE IN SOLE BOARD OR SHEET;\nPACKING AND WRAPPING PAPER; PAPER FOR CIGARETTE FILTER TIPS; PAPER CONE FOR LOUD\nSPEAKER; PATTERNS MADE OF PAPERS FOR LEATHER FOOTWEAR, LEATHER GARMENTS AND\nGOODS; PATTERNS MADE OF PAPER FOR ARTICLES OF APPAREL AND CLOTHING ACCESSORIES,\nPRODUCTS CONSISTING OF SHEETS OF PAPER OR PAPERBOARD, IMPREGNATED, COATED OR\nCOVERED WITH PLASTICS (INCLUDING THERMOSET RESINS OR MIXTURES THEREOF OR\nCHEMICAL FORMULATIONS, CONTAINING MELAMINE PHENOL OR UREA FORMALDEHYDE WITH\nOR WITHOUT CURING AGENTS OR CATALYSTS), COMPRESSED TOGETHER IN ONE OR MORE\nOPERATIONS; DECORATIVE LAMINATES : DECORATIVE LAMINATES", - "hsn_code": "48239019" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : PRE-PUNCHED CARDS; MONOTYPE AND NEWSTAPE\nPAPER IN STRIPS WITH PERFORATED EDGES, NOT EXCEEDING 15 CM IN WIDTH; TYPEWRITING\nPAPER CUT TO SIZE AND THE LIKE : PRE-PUNCHED CARDS", - "hsn_code": "48239021" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : PRE-PUNCHED CARDS; MONOTYPE AND NEWSTAPE\nPAPER IN STRIPS WITH PERFORATED EDGES, NOT EXCEEDING 15 CM IN WIDTH; TYPEWRITING\nPAPER CUT TO SIZE AND THE LIKE : MONOTYPE AND NEWSTAPE PAPER IN STRIPS WITH\nPERFORATED EDGES, NOT EXCEEDING 15CM IN WIDTH", - "hsn_code": "48239022" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : PRE-PUNCHED CARDS; MONOTYPE AND NEWSTAPE\nPAPER IN STRIPS WITH PERFORATED EDGES, NOT EXCEEDING 15 CM IN WIDTH; TYPEWRITING\nPAPER CUT TO SIZE AND THE LIKE : TYPEWRITING PAPER CUT TO SIZE", - "hsn_code": "48239023" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : PLAIN OR EMBOSSED SEALS MADE OF PAPER,\nLAMINATED PAPER OR PAPER GASKETS", - "hsn_code": "48239030" - }, - { - "description": "OTHER PAPER, PAPERBOARD, CELLULOSE WADDING AND WEBS OF CELLULOSE FIBRES, CUT TO\nSIZE OR SHAPE; OTHER ARTICLES OF PAPER PULP, PAPER, PAPERBOARD, CELLULOSE WADDING\nOR WEBS OF CELLULOSE FIBRES - OTHER : OTHER", - "hsn_code": "48239090" - }, - { - "description": "PRINTED BOOKS, BROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER, WHETHER OR NOT IN\nSINGLE SHEETS IN SINGLE SHEETS, WHETHER OR NOT FOLDED : PRINTED BOOKS", - "hsn_code": "49011010" - }, - { - "description": "PRINTED BOOKS, BROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER, WHETHER OR NOT IN\nSINGLE SHEETS IN SINGLE SHEETS, WHETHER OR NOT FOLDED : PAMPHLETS, BOOKLETS,\nBROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER", - "hsn_code": "49011020" - }, - { - "description": "PRINTED BOOKS, BROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER, WHETHER OR NOT IN\nSINGLE SHEETS - OTHER : DICTIONARIES AND ENCYCLOPAEDIAS, AND SERIAL INSTALMENTS\nTHEREOF", - "hsn_code": "49019100" - }, - { - "description": "PRINTED BOOKS, BROCHURES, LEAFLETS AND SIMILAR PRINTED MATTER, WHETHER OR NOT IN\nSINGLE SHEETS - OTHER : OTHER", - "hsn_code": "49019900" - }, - { - "description": "NEWSPAPERS, JOURNALS AND PERIODICALS, WHETHER OR NOT ILLUSTRATED OR CONTAINING\nADVERTISING MATERIAL APPEARING AT LEAST FOUR TIMES A WEEK : NEWSPAPERS", - "hsn_code": "49021010" - }, - { - "description": "NEWSPAPERS, JOURNALS AND PERIODICALS, WHETHER OR NOT ILLUSTRATED OR CONTAINING\nADVERTISING MATERIAL APPEARING AT LEAST FOUR TIMES A WEEK : JOURNALS AND\nPERIODICALS", - "hsn_code": "49021020" - }, - { - "description": "NEWSPAPERS, JOURNALS AND PERIODICALS, WHETHER OR NOT ILLUSTRATED OR CONTAINING\nADVERTISING MATERIAL OTHER : NEWSPAPERS", - "hsn_code": "49029010" - }, - { - "description": "NEWSPAPERS, JOURNALS AND PERIODICALS, WHETHER OR NOT ILLUSTRATED OR CONTAINING\nADVERTISING MATERIAL OTHER : JOURNALS AND PERIODICALS", - "hsn_code": "49029020" - }, - { - "description": "CHILDREN'S PICTURE, DRAWING OR COLOURING BOOKS CHILDREN'S PICTURE, DRAWING OR\nCOLOURING BOOKS : PICTURE BOOKS", - "hsn_code": "49030010" - }, - { - "description": "CHILDREN'S PICTURE, DRAWING OR COLOURING BOOKS CHILDREN'S PICTURE, DRAWING OR\nCOLOURING BOOKS : DRAWING OR COLOURING BOOKS", - "hsn_code": "49030020" - }, - { - "description": "MUSIC, PRINTED OR IN MANUSCRIPT, WHETHER OR NOT FOUND OR ILLUSTRATED", - "hsn_code": "49040000" - }, - { - "description": "MAPS AND HYDROGRAPHIC OR SIMILAR CHARTS OF ALL KINDS, INCLUDING ATLASES, WALL\nMAPS, TOPOGRAPHICAL PLANS AND GLOBES, PRINTED GLOBES", - "hsn_code": "49051000" - }, - { - "description": "MAPS AND HYDROGRAPHIC OR SIMILAR CHARTS OF ALL KINDS, INCLUDING ATLASES, WALL\nMAPS, TOPOGRAPHICAL PLANS AND GLOBES, PRINTED - OTHER : IN BOOK FORM", - "hsn_code": "49059100" - }, - { - "description": "MAPS AND HYDROGRAPHIC OR SIMILAR CHARTS OF ALL KINDS, INCLUDING ATLASES, WALL\nMAPS, TOPOGRAPHICAL PLANS AND GLOBES, PRINTED - OTHER : - OTHER: GEOGRAPHICAL,\nHYDROLOGICAL, ASTRONOMICAL MAPS OR CHARTS", - "hsn_code": "49059910" - }, - { - "description": "MAPS AND HYDROGRAPHIC OR SIMILAR CHARTS OF ALL KINDS, INCLUDING ATLASES, WALL\nMAPS, TOPOGRAPHICAL PLANS AND GLOBES, PRINTED - OTHER : - OTHER: OTHER", - "hsn_code": "49059990" - }, - { - "description": "PLANS AND DRAWINGS FORARCHITECTURAL,ENGINEERING,INDUSTRIAL,\nCOMMERCIAL,TOPOGRAPHICAL OR SIMILARPURPOSES,BEING ORIGINALS RAWN BY HAND;\nHANDWRITTENTEXTS; PHOTOGRAPHIC REPRODUCTIONS NSENSITISED PAPER AND CARBON\nCOPIES OF THE FOREGOING", - "hsn_code": "49060000" - }, - { - "description": "UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY\nIN WHICH THEY HAVE, OR WILL HAVE, A RECOGNIZED FACE VALUE; STAMP-IMPRESSED PAPER;\nBANK NOTES; CHEQUE FORMS; STOCK, SHARE OR BOND CERTIFICATES AND SIMILAR\nDOCUMENTS OF TITLE UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OFCURRENT OR NEW\nISSUE IN THE COUNTRY IN WHICH THEYHAVE, OR WILL HAVE, A RECOGNIZED FACE\nVALUE;STAMP-IMPRESSED PAPER; BANK NOTES; CHEQUEFORMS; STOCK, SHARE OR BOND\nCERTIFICATES ANDSIMILAR DOCUMENTS OF TITLE : UNUSED POSTAGE, REVENUE OR SIMILAR\nSTAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY IN WHICH THEY HAVE, OR WILL HAVE, A\nRECOGNIZED FACE VALUE", - "hsn_code": "49070010" - }, - { - "description": "UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY\nIN WHICH THEY HAVE, OR WILL HAVE, A RECOGNIZED FACE VALUE; STAMP-IMPRESSED PAPER;\nBANK NOTES; CHEQUE FORMS; STOCK, SHARE OR BOND CERTIFICATES AND SIMILAR\nDOCUMENTS OF TITLE UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OFCURRENT OR NEW\nISSUE IN THE COUNTRY IN WHICH THEYHAVE, OR WILL HAVE, A RECOGNIZED FACE\nVALUE;STAMP-IMPRESSED PAPER; BANK NOTES; CHEQUEFORMS; STOCK, SHARE OR BOND\nCERTIFICATES ANDSIMILAR DOCUMENTS OF TITLE : BANK NOTES", - "hsn_code": "49070020" - }, - { - "description": "UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY\nIN WHICH THEY HAVE, OR WILL HAVE, A RECOGNIZED FACE VALUE; STAMP-IMPRESSED PAPER;\nBANK NOTES; CHEQUE FORMS; STOCK, SHARE OR BOND CERTIFICATES AND SIMILAR\nDOCUMENTS OF TITLE UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OFCURRENT OR NEW\nISSUE IN THE COUNTRY IN WHICH THEYHAVE, OR WILL HAVE, A RECOGNIZED FACE\nVALUE;STAMP-IMPRESSED PAPER; BANK NOTES; CHEQUEFORMS; STOCK, SHARE OR BOND\nCERTIFICATES ANDSIMILAR DOCUMENTS OF TITLE : DOCUMENTS OF TITLE CONVEYING THE\nRIGHT TO USE INFORMATION TECHNOLOGY SOFTWARE", - "hsn_code": "49070030" - }, - { - "description": "UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OF CURRENT OR NEW ISSUE IN THE COUNTRY\nIN WHICH THEY HAVE, OR WILL HAVE, A RECOGNIZED FACE VALUE; STAMP-IMPRESSED PAPER;\nBANK NOTES; CHEQUE FORMS; STOCK, SHARE OR BOND CERTIFICATES AND SIMILAR\nDOCUMENTS OF TITLE UNUSED POSTAGE, REVENUE OR SIMILAR STAMPS OFCURRENT OR NEW\nISSUE IN THE COUNTRY IN WHICH THEYHAVE, OR WILL HAVE, A RECOGNIZED FACE\nVALUE;STAMP-IMPRESSED PAPER; BANK NOTES; CHEQUEFORMS; STOCK, SHARE OR BOND\nCERTIFICATES ANDSIMILAR DOCUMENTS OF TITLE : OTHER", - "hsn_code": "49070090" - }, - { - "description": "TRANSFERS (DECALCOMANIAS) TRANSFERS (DECALCOMANIAS), VITRIFIABLE", - "hsn_code": "49081000" - }, - { - "description": "TRANSFERS (DECALCOMANIAS) OTHER", - "hsn_code": "49089000" - }, - { - "description": "PRINTED OR ILLUSTRATED POSTCARDS; PRINTED CARDS BEARING PERSONAL GREETINGS,\nMESSAGES OR ANNOUNCEMENTS, WHETHER OR NOT ILLUSTRATED, WITH OR WITHOUT\nENVELOPES OR TRIMMINGS PRINTED OR ILLUSTRATED POSTCARDS; PRINTED CARDS BEARING\nPERSONAL GREETINGS, MESSAGES OR ANNOUNCEMENTS, WHETHER OR NOT ILLUSTRATED,\nWITH OR WITHOUT ENVELOPES OR TRIMMINGS : GREETING OR WEDDING CARDS", - "hsn_code": "49090010" - }, - { - "description": "PRINTED OR ILLUSTRATED POSTCARDS; PRINTED CARDS BEARING PERSONAL GREETINGS,\nMESSAGES OR ANNOUNCEMENTS, WHETHER OR NOT ILLUSTRATED, WITH OR WITHOUT\nENVELOPES OR TRIMMINGS PRINTED OR ILLUSTRATED POSTCARDS; PRINTED CARDS BEARING\nPERSONAL GREETINGS, MESSAGES OR ANNOUNCEMENTS, WHETHER OR NOT ILLUSTRATED,\nWITH OR WITHOUT ENVELOPES OR TRIMMINGS : OTHER", - "hsn_code": "49090090" - }, - { - "description": "CALENDARS OF ANY KIND, PRINTED, INCLUDING CALENDAR BLOCKS - CALENDARS OF ANY KIND,\nPRINTED, INCLUDING CALENDAR BLOCKS : ADVERTISING CALENDAR", - "hsn_code": "49100010" - }, - { - "description": "CALENDARS OF ANY KIND, PRINTED, INCLUDING CALENDAR BLOCKS - CALENDARS OF ANY KIND,\nPRINTED, INCLUDING CALENDAR BLOCKS : OTHER", - "hsn_code": "49100090" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS TRADE\nADVERTISING MATERIAL, COMMERCIAL CATALOGUES AND THE LIKE : POSTERS, PRINTED", - "hsn_code": "49111010" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS TRADE\nADVERTISING MATERIAL, COMMERCIAL CATALOGUES AND THE LIKE : COMMERCIAL\nCATALOGUES", - "hsn_code": "49111020" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS TRADE\nADVERTISING MATERIAL, COMMERCIAL CATALOGUES AND THE LIKE : PRINTED INLAY CARDS", - "hsn_code": "49111030" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS TRADE\nADVERTISING MATERIAL, COMMERCIAL CATALOGUES AND THE LIKE : OTHER", - "hsn_code": "49111090" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS - OTHER :\nPICTURES, DESIGNS AND PHOTOGRAPHS", - "hsn_code": "49119100" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS - OTHER : OTHER :\nHARD COPY (PRINTED) OF COMPUTER SOFTWARE", - "hsn_code": "49119910" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS - OTHER : OTHER :\nPLAN AND DRAWINGS FOR ARCHITECTURAL ENGINEERING, INDUSTRIAL, COMMERCIAL,\nTOPOGRAPHICAL OR SIMILAR PURPOSES REPRODUCED WITH THE AID OF COMPUTER OR ANY\nOTHER DEVICES", - "hsn_code": "49119920" - }, - { - "description": "OTHER PRINTED MATTER, INCLUDING PRINTED PICTURES AND PHOTOGRAPHS - OTHER : OTHER :\nOTHER", - "hsn_code": "49119990" - }, - { - "description": "SILK-WORM COCOONS SUITABLE FOR REELING", - "hsn_code": "50010000" - }, - { - "description": "RAW SILK (NOT THROWN) RAW SILK (NOT THROWN) MULBERRY RAW SILK", - "hsn_code": "50020010" - }, - { - "description": "RAW SILK (NOT THROWN) RAW SILK (NOT THROWN) MULBERRY DUPION SILK", - "hsn_code": "50020020" - }, - { - "description": "RAW SILK (NOT THROWN) RAW SILK (NOT THROWN) NON-MULBERRY SILK", - "hsn_code": "50020030" - }, - { - "description": "MULBERRY SILK WASTE", - "hsn_code": "50030010" - }, - { - "description": "TUSSAR SILK WASTE", - "hsn_code": "50030020" - }, - { - "description": "DRI WASTE", - "hsn_code": "50030030" - }, - { - "description": "MUNGA WASTE", - "hsn_code": "50030040" - }, - { - "description": "SILK WASTE - OTHER", - "hsn_code": "50030090" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) NOT CARDED OR COMBED MULBERRY SILK WASTE", - "hsn_code": "50031010" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) NOT CARDED OR COMBED TUSSAR WASTE", - "hsn_code": "50031020" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) NOT CARDED OR COMBED OTHER", - "hsn_code": "50031090" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) - OTHER : MULBERRY SILK WASTE", - "hsn_code": "50039010" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) - OTHER : TUSSAR WASTE", - "hsn_code": "50039020" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) - OTHER : ERI WASTE", - "hsn_code": "50039030" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) - OTHER : MUNGA WASTE", - "hsn_code": "50039040" - }, - { - "description": "SILK WASTE (INCLUDING COCOONS UNSUITABLE FOR REELING, YARN WASTE AND GARNETTED\nSTOCK) - OTHER : OTHER", - "hsn_code": "50039090" - }, - { - "description": "(OTHER THAN YARN SPUN FROM SILK WASTE) NOT PUT UP FOR RETAIL SALE : 100 PERCENT\nMULBERRY DUPION SILK YARN", - "hsn_code": "50040010" - }, - { - "description": "SILK YARN (OTHER THAN YARN SPUN FROM SILK WASTE) NOT PUT UP FOR RETAIL SALE SILK\nYARN (OTHER THAN YARN SPUN FROM SILK WASTE) NOT PUT UP FOR RETAIL SALE : OTHER", - "hsn_code": "50040090" - }, - { - "description": "YARN SPUN FROM SILK WASTE, NOT PUT UP FOR RETAIL SALE YARN SPUN FROM SILK WASTE,\nNOT PUT UP FOR RETAIL SALE: - CONTAINING 85 PERCENT OR MORE BY WEIGHT OF SILK WASTE:\nOTHER THAN NOIL SILK", - "hsn_code": "50050011" - }, - { - "description": "YARN SPUN FROM SILK WASTE, NOT PUT UP FOR RETAIL SALE YARN SPUN FROM SILK WASTE,\nNOT PUT UP FOR RETAIL SALE: - CONTAINING 85 PERCENT OR MORE BY WEIGHT OF SILK WASTE:\nFROM NOIL SILK", - "hsn_code": "50050012" - }, - { - "description": "YARN SPUN FROM SILK WASTE, NOT PUT UP FOR RETAIL SALE YARN SPUN FROM SILK WASTE,\nNOT PUT UP FOR RETAIL SALE: - CONTAINING LESS THAN 85 PERCENT BY WEIGHT OF SILK :\nOTHER THAN NOIL SILK", - "hsn_code": "50050021" - }, - { - "description": "YARN SPUN FROM SILK WASTE, NOT PUT UP FOR RETAIL SALE YARN SPUN FROM SILK WASTE,\nNOT PUT UP FOR RETAIL SALE: - CONTAINING LESS THAN 85 PERCENT BY WEIGHT OF SILK :\nFROM NOIL SILK", - "hsn_code": "50050022" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - SILK\nYARN : SILK EMBROIDERY THREAD", - "hsn_code": "50060011" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - SILK\nYARN : OTHER", - "hsn_code": "50060019" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR MORE BY WEIGHT OF SILK : SILK\nEMBROIDERY THREAD", - "hsn_code": "50060021" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR MORE BY WEIGHT OF SILK : OTHER", - "hsn_code": "50060029" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR LESS BY WEIGHT OF SILK : SPUN FROM\nSILK WASTE OTHER THAN NOIL SILK", - "hsn_code": "50060031" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR LESS BY WEIGHT OF SILK : YARN SPUN\nFROM NOIL SILK", - "hsn_code": "50060032" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR LESS BY WEIGHT OF SILK : SILK\nEMBROIDERY THREAD", - "hsn_code": "50060033" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: - YARN\nSPUN FROM SILK WASTE CONTAINING 85 PERCENT OR LESS BY WEIGHT OF SILK : OTHER", - "hsn_code": "50060039" - }, - { - "description": "SILK YARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK-WORM GUT SILK\nYARN AND YARN SPUN FROM SILK WASTE, PUT UP FOR RETAIL SALE; SILK WORM GUT: OTHER", - "hsn_code": "50060090" - }, - { - "description": "WOVEN FABRICS OF SILK OR OF SILK WASTE FABRICS OF NOIL SILK", - "hsn_code": "50071000" - }, - { - "description": "WOVEN FABRICS OF SILK OR OF SILK WASTE OTHER FABRICS, CONTAINING 85 PERCENT OR\nMORE BY WEIGHT OF SILK OR OF SILK WASTE OTHER THAN NOIL SILK: SAREES", - "hsn_code": "50072010" - }, - { - "description": "WOVEN FABRICS OF SILK OR OF SILK WASTE OTHER FABRICS, CONTAINING 85 PERCENT OR\nMORE BY WEIGHT OF SILK OR OF SILK WASTE OTHER THAN NOIL SILK: OTHER", - "hsn_code": "50072090" - }, - { - "description": "OTHER HANDLOOM WOVEN FABRICS", - "hsn_code": "50079010" - }, - { - "description": "WOVEN FABRICS OF SILK OR OF SILK WASTE - OTHER FABRICS", - "hsn_code": "50079090" - }, - { - "description": "WOOL, NOT CARDED OR COMBED : GREASY, INCLUDING FLEECE-WASHED WOOL : SHORN WOOL", - "hsn_code": "51011100" - }, - { - "description": "WOOL, NOT CARDED OR COMBED : GREASY, INCLUDING FLEECE-WASHED WOOL : OTHER", - "hsn_code": "51011900" - }, - { - "description": "WOOL, NOT CARDED OR COMBED : DEGREASED, NOT CARBONIZED SHORN WOOL", - "hsn_code": "51012100" - }, - { - "description": "WOOL, NOT CARDED OR COMBED : DEGREASED, NOT CARBONIZED OTHER", - "hsn_code": "51012900" - }, - { - "description": "WOOL, NOT CARDED OR COMBED : CARBONISED", - "hsn_code": "51013000" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED FINE ANIMAL HAIR : OF KASHMIR\n(CASHMERE) GOATS : MARINE ANGORA", - "hsn_code": "51021110" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED FINE ANIMAL HAIR : OF KASHMIR\n(CASHMERE) GOATS : OTHER", - "hsn_code": "51021190" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED FINE ANIMAL HAIR :: OTHER :\nMARINE ANGORA", - "hsn_code": "51021910" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED FINE ANIMAL HAIR : OTHER : OTHER", - "hsn_code": "51021990" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED COARSE ANIMAL HAIR : GOAT HAIR\n(OTHER THAN ANGORA)", - "hsn_code": "51022010" - }, - { - "description": "FINE OR COARSE ANIMAL HAIR, NOT CARDED OR COMBED COARSE ANIMAL HAIR : OTHER\n(EXCLUDING PIG AND BOAR BRISTLES)", - "hsn_code": "51022090" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK NOILS OF WOOL OR OF FINE ANIMAL HAIR : NOILS OF WOOL", - "hsn_code": "51031010" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK NOILS OF WOOL OR OF FINE ANIMAL HAIR : OTHER", - "hsn_code": "51031090" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK OTHER WASTE OF WOOL OR OF FINE ANIMAL HAIR : WASTE OF\nSHEEP'S AND LAMB'S WOOL", - "hsn_code": "51032010" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK OTHER WASTE OF WOOL OR OF FINE ANIMAL HAIR : YARN\nWASTE", - "hsn_code": "51032020" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK OTHER WASTE OF WOOL OR OF FINE ANIMAL HAIR : OTHER", - "hsn_code": "51032090" - }, - { - "description": "WASTE OF WOOL OR OF FINE OR COARSE ANIMAL HAIR, INCLUDING YARN WASTE BUT\nEXCLUDING GARNETTED STOCK WASTE OF COARSE ANIMAL HAIR", - "hsn_code": "51033000" - }, - { - "description": "GARNETTED STOCK OF WOOL OR OF FINE OR COARSE ANIMAL HAIR - GARNETTED STOCK OF\nWOOL OR OF FINE OR COARSE ANIMAL HAIR : SHODDY WOOL", - "hsn_code": "51040010" - }, - { - "description": "GARNETTED STOCK OF WOOL OR OF FINE OR COARSE ANIMAL HAIR - GARNETTED STOCK OF\nWOOL OR OF FINE OR COARSE ANIMAL HAIR : OTHER", - "hsn_code": "51040090" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) CARDED WOOL", - "hsn_code": "51051000" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) - WOOL TOPS AND OTHER COMBED WOOL : COMBED WOOL IN FRAGMENTS", - "hsn_code": "51052100" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) - WOOL TOPS AND OTHER COMBED WOOL : OTHER : WOOL TOPS", - "hsn_code": "51052910" - }, - { - "description": "OOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL IN\nFRAGMENTS) - WOOL TOPS AND OTHER COMBED WOOL : OTHER : OTHER", - "hsn_code": "51052990" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) - FINE ANIMAL HAIR, CARDED OR COMBED : OF KASHMIR (CASHMERE) GOATS", - "hsn_code": "51053100" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) - FINE ANIMAL HAIR, CARDED OR COMBED : OTHER", - "hsn_code": "51053900" - }, - { - "description": "WOOL AND FINE OR COARSE ANIMAL HAIR, CARDED OR COMBED (INCLUDING COMBED WOOL\nIN FRAGMENTS) COARSE ANIMAL HAIR, CARDED OR COMBED", - "hsn_code": "51054000" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : SHODDY WOOLLEN YARN", - "hsn_code": "51061010" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : MUNGA WOOLLEN YARN", - "hsn_code": "51061020" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : OTHER", - "hsn_code": "51061090" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF WOOL : SHODDY WOOLLEN YARN", - "hsn_code": "51062010" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF WOOL : MUNGA WOOLLEN YARN", - "hsn_code": "51062020" - }, - { - "description": "YARN OF CARDED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF WOOL : OTHER", - "hsn_code": "51062090" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : WORSTED HOSIERY YARN", - "hsn_code": "51071010" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : WORSTED KNITTED YARN", - "hsn_code": "51071020" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : WORSTED WEAVING YARN", - "hsn_code": "51071030" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : WOOLLEN CARPET YARN", - "hsn_code": "51071040" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF WOOL : OTHER", - "hsn_code": "51071090" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT\nBY WEIGHT OF WOOL : WORSTED HOSIERY YARN", - "hsn_code": "51072010" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT\nBY WEIGHT OF WOOL : WORSTED KNITTED YARN", - "hsn_code": "51072020" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT\nBY WEIGHT OF WOOL : WORSTED WEAVING YARN", - "hsn_code": "51072030" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT\nBY WEIGHT OF WOOL : WOOLLEN CARPET YARN", - "hsn_code": "51072040" - }, - { - "description": "YARN OF COMBED WOOL, NOT PUT UP FOR RETAIL SALE CONTAINING LESS THAN 85 PERCENT\nBY WEIGHT OF WOOL : OTHER", - "hsn_code": "51072090" - }, - { - "description": "YARN OF FINE ANIMAL HAIR (CARDED OR COMBED), NOT PUT UP FOR RETAIL SALE CARDED", - "hsn_code": "51081000" - }, - { - "description": "YARN OF FINE ANIMAL HAIR (CARDED OR COMBED), NOT PUT UP FOR RETAIL SALE COMBED", - "hsn_code": "51082000" - }, - { - "description": "YARN OF WOOL OR FINE ANIMAL HAIR, PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : HOISERY WOOL", - "hsn_code": "51091010" - }, - { - "description": "YARN OF WOOL OR FINE ANIMAL HAIR, PUT UP FOR RETAIL SALE CONTAINING 85 PERCENT OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER", - "hsn_code": "51091090" - }, - { - "description": "YARN OF WOOL OR FINE ANIMAL HAIR, PUT UP FOR RETAIL SALE OTHER", - "hsn_code": "51099000" - }, - { - "description": "YARN OF COARSE ANIMAL HAIR OR OF HORSE HAIR (INCLUDING GIMPED HORSEHAIR YARN),\nWHETHER OR NOT PUT UP FOR RETAIL SALE YARN OF COARSE ANIMAL HAIR OR OF HORSE-HAIR\n(INCLUDING GIMPED HORSEHAIR YARN), WHETHER OR NOT PUT UP FOR RETAIL SALE : PUT UP\nFOR RETAIL SALE", - "hsn_code": "51100010" - }, - { - "description": "YARN OF COARSE ANIMAL HAIR OR OF HORSE HAIR (INCLUDING GIMPED HORSEHAIR YARN),\nWHETHER OR NOT PUT UP FOR RETAIL SALE YARN OF COARSE ANIMAL HAIR OR OF HORSE-HAIR\n(INCLUDING GIMPED HORSEHAIR YARN), WHETHER OR NOT PUT UP FOR RETAIL SALE : OTHER", - "hsn_code": "51100020" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT\nEXCEEDING 300 G/ M2: UNBLEACHED", - "hsn_code": "51111110" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT\nEXCEEDING 300 G/ M2: BLEACHED", - "hsn_code": "51111120" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT\nEXCEEDING 300 G/ M2: DYED", - "hsn_code": "51111130" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT\nEXCEEDING 300 G/ M2: PRINTED", - "hsn_code": "51111140" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT\nEXCEEDING 300 G/ M2: OTHER", - "hsn_code": "51111190" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : UNBLEACHED", - "hsn_code": "51111910" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : BLEACHED", - "hsn_code": "51111920" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : DYED", - "hsn_code": "51111930" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : PRINTED", - "hsn_code": "51111940" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR - CONTAINING 85\nPERCENT OR MORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : OTHER", - "hsn_code": "51111990" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS : UNBLEACHED", - "hsn_code": "51112010" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS : BLEACHED", - "hsn_code": "51112020" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS : DYED", - "hsn_code": "51112030" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS : PRINTED", - "hsn_code": "51112040" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS : OTHER", - "hsn_code": "51112090" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : UNBLEACHED", - "hsn_code": "51113010" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : BLEACHED", - "hsn_code": "51113020" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : DYED", - "hsn_code": "51113030" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : PRINTED", - "hsn_code": "51113040" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : OTHER", - "hsn_code": "51113090" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER : UNBLEACHED", - "hsn_code": "51119010" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER : BLEACHED", - "hsn_code": "51119020" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER : DYED", - "hsn_code": "51119030" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER : PRINTED", - "hsn_code": "51119040" - }, - { - "description": "WOVEN FABRICS OF CARDED WOOL OR OF CARDED FINE ANIMAL HAIR OTHER : OTHER", - "hsn_code": "51119090" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT EXCEEDING 200\nG/M2: UNBLEACHED", - "hsn_code": "51121110" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT EXCEEDING 200\nG/M2: BLEACHED", - "hsn_code": "51121120" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT EXCEEDING 200\nG/M2: DYED", - "hsn_code": "51121130" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT EXCEEDING 200\nG/M2: PRINTED", - "hsn_code": "51121140" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OF A WEIGHT NOT EXCEEDING 200\nG/M2: OTHER", - "hsn_code": "51121190" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : UNBLEACHED", - "hsn_code": "51121910" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : BLEACHED", - "hsn_code": "51121920" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : DYED", - "hsn_code": "51121930" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : PRINTED", - "hsn_code": "51121940" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR - CONTAINING 85% OR\nMORE BY WEIGHT OF WOOL OR OF FINE ANIMAL HAIR : OTHER : OTHER", - "hsn_code": "51121990" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS: UNBLEACHED", - "hsn_code": "51122010" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS: BLEACHED", - "hsn_code": "51122020" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS: DYED", - "hsn_code": "51122030" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS: PRINTED", - "hsn_code": "51122040" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE FILAMENTS: OTHER", - "hsn_code": "51122090" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : UNBLEACHED", - "hsn_code": "51123010" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : BLEACHED", - "hsn_code": "51123020" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : DYED", - "hsn_code": "51123030" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : PRINTED", - "hsn_code": "51123040" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER, MIXED MAINLY\nOR SOLELY WITH MAN-MADE STAPLE FIBRES : OTHER", - "hsn_code": "51123090" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER : UNBLEACHED", - "hsn_code": "51129010" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER : BLEACHED", - "hsn_code": "51129020" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER : DYED", - "hsn_code": "51129030" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER : PRINTED", - "hsn_code": "51129040" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL, OR OF COMBED FINE ANIMAL HAIR -OF HANDLOOM", - "hsn_code": "51129050" - }, - { - "description": "WOVEN FABRICS OF COMBED WOOL OR OF COMBED FINE ANIMAL HAIR OTHER : OTHER", - "hsn_code": "51129090" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR WOVEN FABRICS OF COARSE\nANIMAL HAIR OR OF HORSE HAIR : UNBLEACHED", - "hsn_code": "51130010" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR WOVEN FABRICS OF COARSE\nANIMAL HAIR OR OF HORSE HAIR : BLEACHED", - "hsn_code": "51130020" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR WOVEN FABRICS OF COARSE\nANIMAL HAIR OR OF HORSE HAIR : DYED", - "hsn_code": "51130030" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR WOVEN FABRICS OF COARSE\nANIMAL HAIR OR OF HORSE HAIR : PRINTED", - "hsn_code": "51130040" - }, - { - "description": "WOVEN FABRICS OF COARSE ANIMAL HAIR OR OF HORSE HAIR WOVEN FABRICS OF COARSE\nANIMAL HAIR OR OF HORSE HAIR : OTHER", - "hsn_code": "51130090" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nBENGAL DESHI", - "hsn_code": "52010011" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nINDIAN COTTON OF STAPLE LENGTHS 20.5 MM (25/32\") AND BELOW (E. G. OOMRAS, YELLOW\nPICKING, ASSAM COMILLAS)", - "hsn_code": "52010012" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nINDIAN COTTON OF STAPLE LENGTH EXCEEDING 20.5MM (26/32\") BUT NOT EXCEEDING 24.5MM\n(30/32\")", - "hsn_code": "52010013" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nINDIAN COTTON OF STAPLE LENGTH OVER 24.5 MM(31/32) TO 28 MM", - "hsn_code": "52010014" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nINDIAN COTTON OF STAPLE LENGTH 28.5 (14/32) AND ABOVE BUT BELOW 34.5 MM MM", - "hsn_code": "52010015" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : INDIAN COTTON :\nINDIAN COTTON OF ALL STAPLE LENGTH 34.5 AND ABOVE (112/32) MM", - "hsn_code": "52010019" - }, - { - "description": "COTTON, NOT CARDED OR COMBED COTTON, NOT CARDED OR COMBED : COTTON, OTHER\nTHAN INDIAN, OF ALL STAPLE LENGTHS", - "hsn_code": "52010020" - }, - { - "description": "COTTON WASTE (INCLUDING YARN WASTE AND GARNETTED STOCK) YARN WASTE (INCLUDING\nTHREAD WASTE)", - "hsn_code": "52021000" - }, - { - "description": "COTTON WASTE (INCLUDING YARN WASTE AND GARNETTED STOCK) OTHER :GARNETTED STOCK", - "hsn_code": "52029100" - }, - { - "description": "COTTON WASTE (INCLUDING YARN WASTE AND GARNETTED STOCK) OTHER :OTHER", - "hsn_code": "52029900" - }, - { - "description": "COTTON, CARDED OR COMBED", - "hsn_code": "52030000" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUTUP FOR RETAIL SALE - NOT PUT UP FOR RETAIL\nSALE : CONTAINING 85% OR MORE BY WEIGHT OFCOTTON : COTTON THREAD,\nSEWING,CONTAINING ANY SYNTHETIC STAPLE FIBRE", - "hsn_code": "52041110" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUTUP FOR RETAIL SALE - NOT PUT UP FOR RETAIL\nSALE : CONTAINING 85% OR MORE BY WEIGHT OF COTTON : COTTON THREAD, DARNING", - "hsn_code": "52041120" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - NOT PUT UP FOR\nRETAIL SALE : CONTAINING 85% OR MORE BY WEIGHT OF COTTON : EMBROIDERY COTTON\nTHREAD", - "hsn_code": "52041130" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - NOT PUT UP FOR\nRETAIL SALE : CONTAINING 85% OR MORE BY WEIGHT OF COTTON : COTTON SEWING THREAD,\nNOT CONTAINING ANY SYNTHETIC STAPLE FIBRE", - "hsn_code": "52041140" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - NOT PUT UP FOR\nRETAIL SALE : CONTAINING 85% OR MORE BY WEIGHT OF COTTON : OTHER", - "hsn_code": "52041190" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - NOT PUT UP FOR\nRETAIL SALE : OTHER", - "hsn_code": "52041900" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - PUT UP FOR RETAIL\nSALE : COTTON THREAD, SEWING, CONTAINING ANY SYNTHETIC STAPLE FIBRE", - "hsn_code": "52042010" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - PUT UP FOR RETAIL\nSALE : COTTON THREAD, DARNING", - "hsn_code": "52042020" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - PUT UP FOR RETAIL\nSALE : EMBROIDERY COTTON THREAD", - "hsn_code": "52042030" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - PUT UP FOR RETAIL\nSALE : COTTON SEWING THREAD, NOT CONTAINING ANY SYNTHETIC STAPLE FIBRE", - "hsn_code": "52042040" - }, - { - "description": "COTTON SEWING THREAD, WHETHER OR NOT PUT UP FOR RETAIL SALE - PUT UP FOR RETAIL\nSALE : OTHER", - "hsn_code": "52042090" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\n714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : GREY", - "hsn_code": "52051110" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\n714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : BLEACHED", - "hsn_code": "52051120" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\n714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : DYED", - "hsn_code": "52051130" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\n714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER -OTHER", - "hsn_code": "52051190" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC\nNUMBER BUT NOT EXCEEDING 43 METRIC NUMBER) GREY", - "hsn_code": "52051210" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC\nNUMBER BUT NOT EXCEEDING 43 METRIC NUMBER) BLEACHED", - "hsn_code": "52051220" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC\nNUMBER BUT NOT EXCEEDING 43 METRIC NUMBER) DYED", - "hsn_code": "52051230" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC\nNUMBER BUT NOT EXCEEDING 43 METRIC NUMBER) OTHER", - "hsn_code": "52051290" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 232.56 DECITEX BUT NOT LESS THAN 192 .31 DECITEX (EXCEEDING 43 METRIC\nNUMBER BUT NOT EXCEEDING 52 METRIC NUMBER) : GREY", - "hsn_code": "52051310" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 232.56 DECITEX BUT NOT LESS THAN 192 .31 DECITEX (EXCEEDING 43 METRIC\nNUMBER BUT NOT EXCEEDING 52 METRIC NUMBER) : BLEACHED", - "hsn_code": "52051320" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 232.56 DECITEX BUT NOT LESS THAN 192 .31 DECITEX (EXCEEDING 43 METRIC\nNUMBER BUT NOT EXCEEDING 52 METRIC NUMBER) : DYED", - "hsn_code": "52051330" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 232.56 DECITEX BUT NOT LESS THAN 192 .31 DECITEX (EXCEEDING 43 METRIC\nNUMBER BUT NOT EXCEEDING 52 METRIC NUMBER) : OTHER", - "hsn_code": "52051390" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER\nBUT NOT EXCEEDING 80 METRIC NUMBER) : GREY", - "hsn_code": "52051410" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER\nBUT NOT EXCEEDING 80 METRIC NUMBER) : BLEACHED", - "hsn_code": "52051420" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER\nBUT NOT EXCEEDING 80 METRIC NUMBER) : DYED", - "hsn_code": "52051430" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD),CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON,NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER\nBUT NOT EXCEEDING 80 METRIC NUMBER) : OTHER", - "hsn_code": "52051490" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER) : GREY", - "hsn_code": "52051510" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER) : BLEACHED", - "hsn_code": "52051520" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER) : DYED", - "hsn_code": "52051530" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER) : OTHER", - "hsn_code": "52051590" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING 714.29\nDECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : GREY", - "hsn_code": "52052110" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING 714.29\nDECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052120" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING 714.29\nDECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : DYED", - "hsn_code": "52052130" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING 714.29\nDECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER) : OTHER", - "hsn_code": "52052190" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC NUMBER\nBUT NOT EXCEEDING 43 METRIC NUMBER) : GREY", - "hsn_code": "52052210" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC NUMBER\nBUT NOT EXCEEDING 43 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052220" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14 METRIC NUMBER\nBUT NOT EXCEEDING 43 METRIC NUMBER) : OTHER", - "hsn_code": "52052290" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 232.56 DECITEX BUT NOT LESS THAN 192.31 DECITEX (EXCEEDING 43 METRIC NUMBER\nBUT NOT EXCEEDING 52 METRIC NUMBER) : GREY", - "hsn_code": "52052310" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 232.56 DECITEX BUT NOT LESS THAN 192.31 DECITEX (EXCEEDING 43 METRIC NUMBER\nBUT NOT EXCEEDING 52 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052320" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 232.56 DECITEX BUT NOT LESS THAN 192.31 DECITEX (EXCEEDING 43 METRIC NUMBER\nBUT NOT EXCEEDING 52 METRIC NUMBER) : OTHER", - "hsn_code": "52052390" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER BUT\nNOT EXCEEDING 80 METRIC NUMBER) : GREY", - "hsn_code": "52052410" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER BUT\nNOT EXCEEDING 80 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052420" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC NUMBER BUT\nNOT EXCEEDING 80 METRIC NUMBER) : OTHER", - "hsn_code": "52052490" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 125 DECITEX BUT NOT LESS THAN 106.38 DECITEX (EXCEEDING 80 METRIC NUMBER BUT\nNOT EXCEEDING 94 METRIC NUMBER) : DYED", - "hsn_code": "52052610" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 125 DECITEX BUT NOT LESS THAN 106.38 DECITEX (EXCEEDING 80 METRIC NUMBER BUT\nNOT EXCEEDING 94 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052620" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 125 DECITEX BUT NOT LESS THAN 106.38 DECITEX (EXCEEDING 80 METRIC NUMBER BUT\nNOT EXCEEDING 94 METRIC NUMBER) : OTHER", - "hsn_code": "52052690" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 106.38 DECITEX BUT NOT LESS THAN 83.33 DECITEX (EXCEEDING 94 METRIC NUMBER BUT\nNOT EXCEEDING 120 METRIC NUMBER) : DYED", - "hsn_code": "52052710" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 106.38 DECITEX BUT NOT LESS THAN 83.33 DECITEX (EXCEEDING 94 METRIC NUMBER BUT\nNOT EXCEEDING 120 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052720" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 106.38 DECITEX BUT NOT LESS THAN 83.33 DECITEX (EXCEEDING 94 METRIC NUMBER BUT\nNOT EXCEEDING 120 METRIC NUMBER) : OTHER", - "hsn_code": "52052790" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 83.33 DECITEX (EXCEEDING 120 METRIC NUMBER) : DYED", - "hsn_code": "52052810" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 83.33 DECITEX (EXCEEDING 120 METRIC NUMBER) : BLEACHED", - "hsn_code": "52052820" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 83.33 DECITEX (EXCEEDING 120 METRIC NUMBER) : OTHER", - "hsn_code": "52052890" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : GREY", - "hsn_code": "52053110" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : BLEACHED", - "hsn_code": "52053120" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : DYED", - "hsn_code": "52053130" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : OTHER", - "hsn_code": "52053190" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX (EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN) : GREY", - "hsn_code": "52053210" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX (EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN) : BLEACHED", - "hsn_code": "52053220" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX (EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN) : OTHER", - "hsn_code": "52053290" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : GREY", - "hsn_code": "52053310" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : BLEACHED", - "hsn_code": "52053320" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : DYED", - "hsn_code": "52053330" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : OTHER", - "hsn_code": "52053390" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) : GREY", - "hsn_code": "52053410" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) : BLEACHED", - "hsn_code": "52053420" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) : DYED", - "hsn_code": "52053430" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) : OTHER", - "hsn_code": "52053490" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX (EXCEEDING 80 METRIC\nNUMBER PER SINGLE YARN) : GREY", - "hsn_code": "52053510" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX (EXCEEDING 80 METRIC\nNUMBER PER SINGLE YARN) : OTHER", - "hsn_code": "52053590" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : GREY", - "hsn_code": "52054110" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : BLEACHED", - "hsn_code": "52054120" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : DYED", - "hsn_code": "52054130" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN) : OTHER", - "hsn_code": "52054190" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX (EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN) : GREY", - "hsn_code": "52054210" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX (EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN) : OTHER", - "hsn_code": "52054290" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : GREY", - "hsn_code": "52054310" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : BLEACHED", - "hsn_code": "52054320" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN) : OTHER", - "hsn_code": "52054390" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) :GREY", - "hsn_code": "52054410" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) :BLEACHED", - "hsn_code": "52054420" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX (EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN) :OTHER", - "hsn_code": "52054490" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX BUT NOT LESS THAN 106.38\nDECITEX (EXCEEDING 80 METRIC NUMBER BUT NOT EXCEEDING 94 METRIC NUMBER PER SINGLE\nYARN) :GREY", - "hsn_code": "52054610" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX BUT NOT LESS THAN 106.38\nDECITEX (EXCEEDING 80 METRIC NUMBER BUT NOT EXCEEDING 94 METRIC NUMBER PER SINGLE\nYARN) :BLEACHED", - "hsn_code": "52054620" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX BUT NOT LESS THAN 106.38\nDECITEX (EXCEEDING 80 METRIC NUMBER BUT NOT EXCEEDING 94 METRIC NUMBER PER SINGLE\nYARN) :DYED", - "hsn_code": "52054630" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX BUT NOT LESS THAN 106.38\nDECITEX (EXCEEDING 80 METRIC NUMBER BUT NOT EXCEEDING 94 METRIC NUMBER PER SINGLE\nYARN) :OTHER", - "hsn_code": "52054690" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 106.38 DECITEX BUT NOT LESS THAN 83.33\nDECITEX (EXCEEDING 94 METRIC NUMBER BUT NOT EXCEEDING 120 METRIC 272 NUMBER PER\nSINGLE YARN) : GREY", - "hsn_code": "52054710" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 106.38 DECITEX BUT NOT LESS THAN 83.33\nDECITEX (EXCEEDING 94 METRIC NUMBER BUT NOT EXCEEDING 120 METRIC 272 NUMBER PER\nSINGLE YARN) : BLEACHED", - "hsn_code": "52054720" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 106.38 DECITEX BUT NOT LESS THAN 83.33\nDECITEX (EXCEEDING 94 METRIC NUMBER BUT NOT EXCEEDING 120 METRIC 272 NUMBER PER\nSINGLE YARN) : DYED", - "hsn_code": "52054730" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 106.38 DECITEX BUT NOT LESS THAN 83.33\nDECITEX (EXCEEDING 94 METRIC NUMBER BUT NOT EXCEEDING 120 METRIC 272 NUMBER PER\nSINGLE YARN) : OTHER", - "hsn_code": "52054790" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 83.33 DECITEX (EXCEEDING 120 METRIC\nNUMBER PER SINGLE YARN) : GREY", - "hsn_code": "52054810" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 83.33 DECITEX (EXCEEDING 120 METRIC\nNUMBER PER SINGLE YARN) : BLEACHED", - "hsn_code": "52054820" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 83.33 DECITEX (EXCEEDING 120 METRIC\nNUMBER PER SINGLE YARN) : DYED", - "hsn_code": "52054830" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING 85% OR MORE BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 83.33 DECITEX (EXCEEDING 120 METRIC\nNUMBER PER SINGLE YARN) : OTHER", - "hsn_code": "52054890" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\n714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER)", - "hsn_code": "52061100" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX (EXCEEDING 14\nMETRICNUMBER BUT NOT EXCEEDING 43 METRIC NUMBER)", - "hsn_code": "52061200" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31 DECITEX (EXCEEDING 43\nMETRICNUMBER BUT NOT EXCEEDING 52 METRIC NUMBER)", - "hsn_code": "52061300" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRIC\nNUMBERBUT NOT EXCEEDING 80 METRIC NUMBER)", - "hsn_code": "52061400" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN, OF UNCOMBED FIBRES : MEASURING\nLESS THAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER)", - "hsn_code": "52061500" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING 714.29\nDECITEX OR MORE (NOT EXCEEDING 14 METRIC NUMBER)", - "hsn_code": "52062100" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 714.29 DECITEX BUT NOT LESS THAN 232.56 DECITEX(EXCEEDING 14 METRICNUMBER BUT\nNOT EXCEEDING 43 METRIC NUMBER)", - "hsn_code": "52062200" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 232.56 DECITEX BUT NOT LESS THAN 192.31 DECITEX(EXCEEDING 43 METRICNUMBER BUT\nNOT EXCEEDING 52 METRIC NUMBER)", - "hsn_code": "52062300" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 192.31 DECITEX BUT NOT LESS THAN 125 DECITEX (EXCEEDING 52 METRICNUMBER BUT\nNOT EXCEEDING 80 METRIC NUMBER)", - "hsn_code": "52062400" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - SINGLE YARN OF COMBED FIBRES : MEASURING LESS\nTHAN 125 DECITEX (EXCEEDING 80 METRIC NUMBER)", - "hsn_code": "52062500" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBER PER SINGLE YARN)", - "hsn_code": "52063100" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX(EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING 43 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52063200" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX(EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52063300" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX(EXCEEDING 52 METRIC NUMBER BUT NOTEXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52063400" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF UNCOMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX (EXCEEDING 80 METRIC\nNUMBERPER SINGLE YARN)", - "hsn_code": "52063500" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN 714.29 DECITEX OR MORE (NOT EXCEEDING 14 METRIC\nNUMBERPER SINGLE YARN)", - "hsn_code": "52064100" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 714.29 DECITEX BUT NOT LESS THAN 232.56\nDECITEX(EXCEEDING 14 METRIC NUMBER BUT NOT EXCEEDING43 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52064200" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 232.56 DECITEX BUT NOT LESS THAN 192.31\nDECITEX (EXCEEDING 43 METRIC NUMBER BUT NOT EXCEEDING 52 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52064300" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 192.31 DECITEX BUT NOT LESS THAN 125\nDECITEX(EXCEEDING 52 METRIC NUMBER BUT NOT EXCEEDING 80 METRIC NUMBER PER SINGLE\nYARN)", - "hsn_code": "52064400" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD), CONTAINING LESS THAN 85% BY WEIGHT OF\nCOTTON, NOT PUT UP FOR RETAIL SALE - MULTIPLE (FOLDED) OR CABLED YARN, OF COMBED\nFIBRES : MEASURING PER SINGLE YARN LESS THAN 125 DECITEX (EXCEEDING 80 METRIC\nNUMBER PER SINGLE YARN)", - "hsn_code": "52064500" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD) PUT UP FOR RETAIL SALE CONTAINING 85% OR\nMORE BY WEIGHT OF COTTON", - "hsn_code": "52071000" - }, - { - "description": "COTTON YARN (OTHER THAN SEWING THREAD) PUT UP FOR RETAIL SALE OTHER", - "hsn_code": "52079000" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : DHOTI", - "hsn_code": "52081110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : SAREE", - "hsn_code": "52081120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : SHIRTING FABRICS", - "hsn_code": "52081130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : CASEMENT", - "hsn_code": "52081140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : OTHER", - "hsn_code": "52081190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:DHOTI", - "hsn_code": "52081210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SAREE", - "hsn_code": "52081220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SHIRTING FABRICS", - "hsn_code": "52081230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:CASEMENT", - "hsn_code": "52081240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SHEETING(TAKIA, LEOPARD FABRICS, OTHER THAN FURNISHING FABRICS)", - "hsn_code": "52081250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:VOILS", - "hsn_code": "52081260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:OTHER", - "hsn_code": "52081290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : SHIRTING FABRICS", - "hsn_code": "52081310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : DOBBY FABRICS", - "hsn_code": "52081320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : OTHER", - "hsn_code": "52081390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: OTHER FABRICS : DEDSUTI, DOSUTI FABRICS", - "hsn_code": "52081910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - UNBLEACHED: OTHER FABRICS : OTHER", - "hsn_code": "52081990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : DHOTI", - "hsn_code": "52082110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : SAREE", - "hsn_code": "52082120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : CASEMENT", - "hsn_code": "52082130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : SHIRTING FABRICS", - "hsn_code": "52082140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : CAMBRICS (INCLUDING MADAPOLLAM AND JACONET)", - "hsn_code": "52082150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : MULLS (INCLUDING LIMBRIC AND WILLAYA)", - "hsn_code": "52082160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : MUSLIN (INCLUDING LAWN, MULMUL AND ORGANDI)", - "hsn_code": "52082170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : VOILS (EXCLUDING LENO FABRICS)", - "hsn_code": "52082180" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2 : OTHER", - "hsn_code": "52082190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:DHOTI", - "hsn_code": "52082210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SAREE", - "hsn_code": "52082220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SHIRTING FABRICS", - "hsn_code": "52082230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:CASEMENT", - "hsn_code": "52082240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:CAMBRICS (INCLUDING MADAPOLLAM AND JACONET)", - "hsn_code": "52082250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:LONG CLOTH (INCLUDING CALICO)", - "hsn_code": "52082260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SHEETING (TAKIA AND THE LIKE)", - "hsn_code": "52082270" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:VOILS (EXCLUDING LENO FABRICS)", - "hsn_code": "52082280" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:OTHER", - "hsn_code": "52082290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :SHIRTING FABRICS", - "hsn_code": "52082310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :PARMATTA FABRICS (INCLUDING ILESIA, POCKETING, ITALIAN TWILL)", - "hsn_code": "52082320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :SHIRTING FABRICS", - "hsn_code": "52082330" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :OTHER", - "hsn_code": "52082390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : OTHER FABRICS :DHOTI AND SAREE, ZARI BORDERED", - "hsn_code": "52082910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : OTHER FABRICS :DEDSUTI, DOSUTI FABRICS,\nCERETONNES AND OSAMBURGE", - "hsn_code": "52082920" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- - BLEACHED : OTHER FABRICS :OTHER", - "hsn_code": "52082990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:LUNGI", - "hsn_code": "52083110" - }, - { - "description": "DYED-PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G PER M2 - SAREES OF HANDLOOM", - "hsn_code": "52083121" - }, - { - "description": "DYED - PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G PER M2 -SAREES OTHER THAN\nHANDLOOM", - "hsn_code": "52083129" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:SHIRTING FABRICS", - "hsn_code": "52083130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:CASEMENT", - "hsn_code": "52083140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:CAMBRICS (INCLUDING MADAPOLLAM AND JACONET)", - "hsn_code": "52083150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:MULL (INCLUDING LIMBRIC AND WILLAYA)", - "hsn_code": "52083160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:MUSLIN (INCLUDING LAWN MULMUL AND ORGANDI) OF CARDED OR COMBED YARN", - "hsn_code": "52083170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:VOILS (EXCLUDING LENO FABRICS)", - "hsn_code": "52083180" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100\nG/M2:OTHER", - "hsn_code": "52083190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/ M2:LUNGI", - "hsn_code": "52083210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/ M2:SAREE", - "hsn_code": "52083220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/\nM2:SHIRTING FABRICS", - "hsn_code": "52083230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/\nM2:CASEMENT", - "hsn_code": "52083240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/\nM2:BEDTICKING, DOMESTIC", - "hsn_code": "52083250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/\nM2:CAMBRICS (INCLUDING MADAPOLLAM AND JACONET), LONG CLOTH(INCLUDING CALICO)\nAND VOILS (EXCLUDING LENO FABRICS)", - "hsn_code": "52083260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/ M2:COATING\n(INCLUDING SUITING)", - "hsn_code": "52083270" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/\nM2:FURNISHING FABRICS( EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52083280" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/ M2:OTHER", - "hsn_code": "52083290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : 3-THREAD OR 4- THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING FABRICS", - "hsn_code": "52083310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : 3-THREAD OR 4- THREAD TWILL, INCLUDING CROSS TWILL\n:COATING (INCLUDING SUITING)", - "hsn_code": "52083320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : 3-THREAD OR 4- THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING (INCLUDING MAZRI)", - "hsn_code": "52083330" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : 3-THREAD OR 4- THREAD TWILL, INCLUDING CROSS TWILL\n:OTHER", - "hsn_code": "52083390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : OTHER FABRICS :ZARI BORDERED SAREES", - "hsn_code": "52083910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- DYED : OTHER FABRICS :OTHER", - "hsn_code": "52083990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :BLEEDING MADRAS", - "hsn_code": "52084110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :SAREE", - "hsn_code": "52084120" - }, - { - "description": "OF YARN OF DIFFERENT COLOURS - PALIN WEAVE,WEIGHING NOT MORE THAN 100 G PER M2 -\nSAREES OF HANDLOOM", - "hsn_code": "52084121" - }, - { - "description": "OF YARN OF DIFFERENT COLOURS - PALIN WEAVE,WEIGHING NOT MORE THAN 100 G PER M2 -\nSAREES OTHER THAN HANDLOOM", - "hsn_code": "52084129" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :SHIRTING FABRICS", - "hsn_code": "52084130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :BED TICKING, DOMESTIC", - "hsn_code": "52084140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52084150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING NOT\nMORE THAN 100 G/M2 :OTHER", - "hsn_code": "52084190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 :BLEEDING MADRAS", - "hsn_code": "52084210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 :SAREE", - "hsn_code": "52084220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 :SHIRTING FABRICS", - "hsn_code": "52084230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 :CASEMENT", - "hsn_code": "52084240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 :BED TICKING, DOMESTIC", - "hsn_code": "52084250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 : FURNISHING FABRICS, OTHER THAN PILE AND CHENILLE FABRIC", - "hsn_code": "52084260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : PLAIN WEAVE, WEIGHING\nMORE THAN 100 G/M2 : OTHER", - "hsn_code": "52084290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : 3-THREAD OR 4- THREAD\nTWILL, INCLUDING CROSS TWILL :BLEADING MADRAS", - "hsn_code": "52084310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : 3-THREAD OR 4- THREAD\nTWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52084320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : 3-THREAD OR 4- THREAD\nTWILL, INCLUDING CROSS TWILL :BEDTICKING, DAMASK", - "hsn_code": "52084330" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : 3-THREAD OR 4- THREAD\nTWILL, INCLUDING CROSS TWILL :FLANNELETTE", - "hsn_code": "52084340" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : 3-THREAD OR 4- THREAD\nTWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52084390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : OTHER FABRICS :ZARI\nBORDERED SAREES", - "hsn_code": "52084910" - }, - { - "description": "REAL MADRAS HANDKERCHIEFS OF HANDLOOM", - "hsn_code": "52084921" - }, - { - "description": "REAL MADRAS HANDKERCHIEFS - OTHER THAN HANDLOOM", - "hsn_code": "52084929" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- OF YARN OF DIFFERENT COLOURS : OTHER FABRICS :OTHER", - "hsn_code": "52084990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:LUNGI", - "hsn_code": "52085110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:SAREE", - "hsn_code": "52085120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:SHIRTING FABRICS", - "hsn_code": "52085130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:CASEMENT", - "hsn_code": "52085140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:CAMBRICS (INCLUDING MADAPOLLAM AND JACONET)", - "hsn_code": "52085150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:MULL (INCLUDING LIMBRIC AND WILLAYA)", - "hsn_code": "52085160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:MUSLIN (INCLUDING LAWN MULMUL AND ORGANDI) OF CARDED OR COMBED YARN", - "hsn_code": "52085170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:VOILS (EXCLUDING LENO FABRICS)", - "hsn_code": "52085180" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING NOT MORE THAN 100 G/M2\n:OTHER", - "hsn_code": "52085190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:LUNGI", - "hsn_code": "52085210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SAREE", - "hsn_code": "52085220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:SHIRTING FABRICS", - "hsn_code": "52085230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:CASEMENT", - "hsn_code": "52085240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:CAMBRICS (INCLUDING MADAPOLLAM AND JACONET)", - "hsn_code": "52085250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2 :MULL\n(INCLUDING LIMBRIC AND WILLAYA)", - "hsn_code": "52085260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:MUSLIN (INCLUDING LAWN MULMUL AND ORGANDI) OF CARDED OR COMBED YARN", - "hsn_code": "52085270" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2 :VOILS\n(EXCLUDING LENO FABRICS)", - "hsn_code": "52085280" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : PLAIN WEAVE, WEIGHING MORE THAN 100 G/M2\n:OTHER", - "hsn_code": "52085290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :SHIRTING FABRICS", - "hsn_code": "52085310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :BEDTICKING", - "hsn_code": "52085320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL :OTHER", - "hsn_code": "52085390" - }, - { - "description": "OTHER FABRICS, SAREES,HANDLOOM", - "hsn_code": "52085920" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nNOT MORE THAN 200 G/M2- PRINTED : OTHER FABRICS :OTHER", - "hsn_code": "52085990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : HANDLOOM : DHOTI", - "hsn_code": "52091111" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : HANDLOOM : SAREE", - "hsn_code": "52091112" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : HANDLOOM : CASEMENT", - "hsn_code": "52091113" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : HANDLOOM : SHEETING (TAKIA,\nLEOPARD CLOTH AND OTHER THAN FURNISHING)", - "hsn_code": "52091114" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : HANDLOOM : OTHER", - "hsn_code": "52091119" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :PLAIN WEAVE : OTHER", - "hsn_code": "52091190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:SAREE", - "hsn_code": "52091210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:SHIRTING FABRICS", - "hsn_code": "52091220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52091230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:SEERSUCKER", - "hsn_code": "52091240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:CANVAS, INCLUDING DUCK CARDED OR COMBED YARN", - "hsn_code": "52091250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:FLANNELETTE", - "hsn_code": "52091260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:SHETTING (TAKIA, LEOPARD CLOTH)", - "hsn_code": "52091270" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL:OTHER", - "hsn_code": "52091290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - UNBLEACHED :OTHER FABRICS", - "hsn_code": "52091900" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE :SAREE", - "hsn_code": "52092110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE : SHIRTING FABRICS", - "hsn_code": "52092120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE : FURNISHING FABRICS (EXCLUDING PILE\nAND CHENILLE FABRICS)", - "hsn_code": "52092130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE : SEERSUCKER", - "hsn_code": "52092140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE : CANVAS (INCLUDING DUCK) OF CARDED OR\nCOMBED YARN", - "hsn_code": "52092150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE :DHOTI", - "hsn_code": "52092160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE :FLANNELLETE", - "hsn_code": "52092170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE :SHEETING( TAKIA, LEOPARDCLOTH)", - "hsn_code": "52092180" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : PLAIN WEAVE :OTHER", - "hsn_code": "52092190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING FABRICS", - "hsn_code": "52092210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52092220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:DRILL", - "hsn_code": "52092230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:OTHER", - "hsn_code": "52092290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : OTHER FABRICS :DHOTI AND SAREE, ZARI BORDERED", - "hsn_code": "52092910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : OTHER FABRICS :DEDSUTI, DOSUTI FABRICS, CERETONNES\nAND OSAMBURGE", - "hsn_code": "52092920" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2 - BLEACHED : OTHER FABRICS :OTHER", - "hsn_code": "52092990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :LUNGI", - "hsn_code": "52093110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :SAREE", - "hsn_code": "52093120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52093130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :FURNISHING FABRICS(EXCLUDING PILE AND\nCHENILLE FABRICS)", - "hsn_code": "52093140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :SEERSUCKER", - "hsn_code": "52093150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :BEDTICKING, DOMESTIC(OTHER THAN HAND\nDYED)", - "hsn_code": "52093160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :CANVAS (INCLUDING DUCK), OF CARDED OR\nCOMBED YARN", - "hsn_code": "52093170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :FLANNELLETE", - "hsn_code": "52093180" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : PLAIN WEAVE :OTHER", - "hsn_code": "52093190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING FABRICS", - "hsn_code": "52093210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:FURNISHING FABRICS(EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52093220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :DRILL", - "hsn_code": "52093230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:OTHER", - "hsn_code": "52093290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : OTHER FABRICS :ZARI BORDERED SAREES", - "hsn_code": "52093910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- DYED : OTHER FABRICS :OTHER", - "hsn_code": "52093990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :BLEEDING\nMADRAS", - "hsn_code": "52094110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SAREE", - "hsn_code": "52094120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52094130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :FURNISHING\nFABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52094140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SEERSUCKER", - "hsn_code": "52094150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :BEDTICKING,\nDOMESTIC (OTHER THAN HAND DYED)", - "hsn_code": "52094160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :FLANNELETTE", - "hsn_code": "52094170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : PLAIN WEAVE :OTHER", - "hsn_code": "52094190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : DENIM", - "hsn_code": "52094200" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR\n4-THREAD TWILL, INCLUDING CROSS TWILL : BLEEDING MADRAS", - "hsn_code": "52094310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR\n4-THREAD TWILL, INCLUDING CROSS TWILL : SHIRTING FABRICS", - "hsn_code": "52094320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR\n4-THREAD TWILL, INCLUDING CROSS TWILL : FURNISHING FABRICS (EXCLUDING PILE AND\nCHENILLE FABRICS)", - "hsn_code": "52094330" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR\n4-THREAD TWILL, INCLUDING CROSS TWILL : COATING (INCLUDING SUITING)", - "hsn_code": "52094340" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR\n4-THREAD TWILL, INCLUDING CROSS TWILL : OTHER", - "hsn_code": "52094390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS :ZARI BORDERED\nSARI", - "hsn_code": "52094910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- - OF YARNS OF DIFFERENT COLOURS : OTHER FABRICS :OTHER", - "hsn_code": "52094990" - }, - { - "description": "LUNGIS OF HANDLOOM", - "hsn_code": "52095111" - }, - { - "description": "LUNGIS - OTHER", - "hsn_code": "52095119" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :SAREE", - "hsn_code": "52095120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52095130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :FURNISHING FABRICS (EXCLUDING PILE AND\nCHENILLE FABRICS)", - "hsn_code": "52095140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :SEERSUCKER", - "hsn_code": "52095150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :BEDTICKING, DOMESTIC", - "hsn_code": "52095160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :FLANNELETTE", - "hsn_code": "52095170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : PLAIN WEAVE :OTHER", - "hsn_code": "52095190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING FABRICS", - "hsn_code": "52095210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52095220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:OTHER", - "hsn_code": "52095290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : OTHER FABRICS :ZARI BORDERED SAREE", - "hsn_code": "52095910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING 85% OR MORE BY WEIGHT OF COTTON, WEIGHING\nMORE THAN 200 G/M2- PRINTED : OTHER FABRICS :OTHER", - "hsn_code": "52095990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52101110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : PLAIN WEAVE :SAREE", - "hsn_code": "52101120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : PLAIN WEAVE :OTHER", - "hsn_code": "52101190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52101210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52101290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nUNBLEACHED : OTHER FABRICS", - "hsn_code": "52101900" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52102110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :POPLIN AND BROAD FABRICS", - "hsn_code": "52102120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :SAREE", - "hsn_code": "52102130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :SHIRTING (INCLUDING MAZRI)", - "hsn_code": "52102140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :VOILE", - "hsn_code": "52102150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :PLAIN WEAVE :OTHER", - "hsn_code": "52102190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL : - HANDLOOM :CREPE\nFABRICS INCLUDING CREPE CHECKS", - "hsn_code": "52102211" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL : - HANDLOOM :SHIRTING\nFABRICS", - "hsn_code": "52102212" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL : - HANDLOOM :OTHER\nFABRICS", - "hsn_code": "52102219" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL : OTHER : :SHIRTING\n(INCLUDING MAZRI)", - "hsn_code": "52102221" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL : OTHER : OTHER", - "hsn_code": "52102229" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :OTHER FABRICS :DHOTI AND SAREE, ZARI BORDERED", - "hsn_code": "52102910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :OTHER FABRICS :DEDSUTI, DOSUTI, CERETONNES AND OSAMBURGE", - "hsn_code": "52102920" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2-\nBLEACHED :OTHER FABRICS :OTHER", - "hsn_code": "52102990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52103110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :COATING (INCLUDING SUITINGS)", - "hsn_code": "52103120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52103130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :POPLIN AND BROAD FABRICS", - "hsn_code": "52103140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :SAREE", - "hsn_code": "52103150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :VOILS", - "hsn_code": "52103160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nPLAIN WEAVE :OTHER", - "hsn_code": "52103190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :CREPE FABRICS INCLUDING CREPE\nCHECKS", - "hsn_code": "52103210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52103220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :BEDTICKING, DAMASK", - "hsn_code": "52103230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52103239" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nOTHER FABRICS :ZARI BORDERED SAREE", - "hsn_code": "52103910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- DYED :\nOTHER FABRICS :OTHER", - "hsn_code": "52103990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :BLEEDING MADRAS", - "hsn_code": "52104110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :CREPE FABRICS (EXCLUDING CREPE CHECKS)", - "hsn_code": "52104120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52104130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SUITINGS", - "hsn_code": "52104140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :POPLIN AND BROAD FABRICS", - "hsn_code": "52104150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :SAREE", - "hsn_code": "52104160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :VOILS", - "hsn_code": "52104170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : PLAIN WEAVE :OTHER", - "hsn_code": "52104190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:BLEEDING MADRAS", - "hsn_code": "52104210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:CREPE FABRICS INCLUDING CREPE CHECKS", - "hsn_code": "52104220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTING FABRICS", - "hsn_code": "52104230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SUITINGS", - "hsn_code": "52104240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:BEDTICKING, DAMASK", - "hsn_code": "52104250" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:SHIRTINGS (INCLUDING MAZRI)", - "hsn_code": "52104260" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\n:OTHER", - "hsn_code": "52104290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : OTHER FABRICS :ZARI BORDERED SAREE", - "hsn_code": "52104910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- OF\nYARNS OF DIFFERENT COLOURS : OTHER FABRICS :OTHER", - "hsn_code": "52104990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52105110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :CASEMENT", - "hsn_code": "52105120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :SAREE", - "hsn_code": "52105130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :POPLIN AND BROAD FABRICS", - "hsn_code": "52105140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :VOILS", - "hsn_code": "52105150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: PLAIN WEAVE :OTHER", - "hsn_code": "52105190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :CREPE FABRICS INCLUDING CREPE\nCHECKS", - "hsn_code": "52105210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52105220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52105290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: OTHER FABRICS :ZARI BORDERED SAREE", - "hsn_code": "52105910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING NOT MORE THAN 200 G/M2- PRINTED\n: OTHER FABRICS :OTHER", - "hsn_code": "52105990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52111110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:PLAIN WEAVE :SAREE", - "hsn_code": "52111120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:PLAIN WEAVE :OTHER", - "hsn_code": "52111190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:3-THREAD OR 4-THREAD TWILL,` INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52111210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:3-THREAD OR 4-THREAD TWILL,` INCLUDING CROSS TWILL :TWILL, NOT ELSEWHERE SPECIFIED\n(INCLUDING GABERDINE)", - "hsn_code": "52111220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:3-THREAD OR 4-THREAD TWILL,` INCLUDING CROSS TWILL :DAMASK", - "hsn_code": "52111230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - UNBLEACHED\n:3-THREAD OR 4-THREAD TWILL,` INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52111290" - }, - { - "description": "OTHER FABRICS", - "hsn_code": "52111900" - }, - { - "description": "BLEACHED SHIRTING FABRICS", - "hsn_code": "52112010" - }, - { - "description": "BLEACHED CANVAS (INCLUDING DUCK) OF CARDED OR COMBED YARN", - "hsn_code": "52112020" - }, - { - "description": "BLEACHED FLANNELETTE", - "hsn_code": "52112030" - }, - { - "description": "BLEACHED SAREE", - "hsn_code": "52112040" - }, - { - "description": "BLEACHED CREPE FABRICS INCLUDING CREPE CHECKS", - "hsn_code": "52112050" - }, - { - "description": "BLEACHED TWILL FABRICS", - "hsn_code": "52112060" - }, - { - "description": "OTHER BLEACHED - ZARI BORDED SARI", - "hsn_code": "52112091" - }, - { - "description": "OTHER BLEACHED - DEDSUTTI, DOSUTI, CERETONNES AND OSAMBURGE", - "hsn_code": "52112092" - }, - { - "description": "OTHER BLEACHED-OTHER", - "hsn_code": "52112099" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52112110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :CANVAS (INCLUDING DUCK) OF CARDED OR COMBED YARN", - "hsn_code": "52112120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :FLANNELETTE", - "hsn_code": "52112130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :SAREE", - "hsn_code": "52112140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52112150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:PLAIN WEAVE :OTHER", - "hsn_code": "52112190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED :3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :CREPE FABRICS INCLUDING CREPE\nCHECKS", - "hsn_code": "52112210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED :3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52112220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED :3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :TWILL FABRICS", - "hsn_code": "52112230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED :3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52112290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:OTHER FABRICS :ZARI BORDERED SARI", - "hsn_code": "52112910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:OTHER FABRICS :DEDSUTI, DOSUTI, CERETONNES AND OSAMBURGE", - "hsn_code": "52112920" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - BLEACHED\n:OTHER FABRICS :OTHER", - "hsn_code": "52112990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :SHIRTING FABRICS", - "hsn_code": "52113110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :CANVAS (INCLUDING DUCK) OF CARDED OR COMBED YARN", - "hsn_code": "52113120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :COATING (INCLUDING SUITINGS)", - "hsn_code": "52113130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :FLANNELLETTE", - "hsn_code": "52113140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :SAREE", - "hsn_code": "52113150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : PLAIN\nWEAVE :OTHER", - "hsn_code": "52113190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :CREPE FABRICS INCLUDING CREPE\nCHECKS", - "hsn_code": "52113210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52113220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :TWILL, NOT ELSEWHERE SPECIFIED\n(INCLUDING GABERDINE)", - "hsn_code": "52113230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :TROUSERS OR PANT FABRICS\n(EXCLUDING JEANS AND CREPE)", - "hsn_code": "52113240" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52113290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : OTHER\nFABRICS :ZARI BORDERED SAREES", - "hsn_code": "52113910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - DYED : OTHER\nFABRICS :OTHER", - "hsn_code": "52113990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :BLEEDING MADRAS", - "hsn_code": "52114110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :CHECK SHIRTING (EXCLUDING CREPE CHECKS)", - "hsn_code": "52114120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :SHIRTING", - "hsn_code": "52114130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :SUITINGS", - "hsn_code": "52114140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :FLANNELETTE", - "hsn_code": "52114150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :SAREE", - "hsn_code": "52114160" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :PARACHUTE FABRICS", - "hsn_code": "52114170" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : PLAIN WEAVE :OTHER", - "hsn_code": "52114190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : DENIM", - "hsn_code": "52114200" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : BLEEDING MADRAS", - "hsn_code": "52114310" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : CREPE FABRICS", - "hsn_code": "52114320" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : SHIRTING FABRICS", - "hsn_code": "52114330" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : SUITINGS", - "hsn_code": "52114340" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS OF 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL : OTHER", - "hsn_code": "52114390" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS :ZARI BORDERED SAREES", - "hsn_code": "52114910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - OF YARNS OF\nDIFFERENT COLOURS : OTHER FABRICS :OTHER", - "hsn_code": "52114990" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :SHIRTING FABRICS", - "hsn_code": "52115110" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :FURNISHING FABRICS (EXCLUDING PILE AND CHENILLE FABRICS)", - "hsn_code": "52115120" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :FLANNELETTE", - "hsn_code": "52115130" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :LONG CLOTH (CHINTZ)", - "hsn_code": "52115140" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :SAREE", - "hsn_code": "52115150" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nPLAIN WEAVE :OTHER", - "hsn_code": "52115190" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :CREPE FABRICS INCLUDING CREPE\nCHECKS", - "hsn_code": "52115210" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :SHIRTING FABRICS", - "hsn_code": "52115220" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :TWILL, NOT ELSEWHERE SPECIFIED\n(INCLUDING GABERDINE)", - "hsn_code": "52115230" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED : 3-\nTHREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL :OTHER", - "hsn_code": "52115290" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nOTHER FABRICS :ZARI BORDERED SAREE", - "hsn_code": "52115910" - }, - { - "description": "WOVEN FABRICS OF COTTON, CONTAINING LESS THAN 85% BY WEIGHT OF COTTON, MIXED\nMAINLY OR SOLELY WITH MAN-MADE FIBRES, WEIGHING MORE THAN 200 G/M2 - PRINTED :\nOTHER FABRICS :OTHER", - "hsn_code": "52115990" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING NOT MORE THAN 200 G/M2 : UNBLEACHED", - "hsn_code": "52121100" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING NOT MORE THAN 200 G/M2 : BLEACHED", - "hsn_code": "52121200" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING NOT MORE THAN 200 G/M2 : DYED", - "hsn_code": "52121300" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING NOT MORE THAN 200 G/M2 : OF YARNS OF\nDIFFERENT COLOURS", - "hsn_code": "52121400" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING NOT MORE THAN 200 G/M2 : PRINTED", - "hsn_code": "52121500" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING MORE THAN 200 G/M2 : UNBLEACHED", - "hsn_code": "52122100" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING MORE THAN 200 G/M2 : BLEACHED", - "hsn_code": "52122200" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING MORE THAN 200 G/M2 : DYED", - "hsn_code": "52122300" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING MORE THAN 200 G/M2 : OF YARNS OF\nDIFFERENT COLOURS", - "hsn_code": "52122400" - }, - { - "description": "OTHER WOVEN FABRICS OF COTTON - WEIGHING MORE THAN 200 G/M2 : PRINTED", - "hsn_code": "52122500" - }, - { - "description": "FLAX, RAW OR PROCESSED BUT NOT SPUN; FLAX TOW AND WASTE (INCLUDING YARN WASTE\nAND GARNETTED STOCK) FLAX, RAW OR RETTED", - "hsn_code": "53011000" - }, - { - "description": "FLAX, RAW OR PROCESSED BUT NOT SPUN; FLAX TOW AND WASTE (INCLUDING YARN WASTE\nAND GARNETTED STOCK) FLAX, BROKEN, SCUTCHED, HACKLED OR OTHERWISE PROCESSED, BUT\nNOT SPUN :BROKEN OR SCUTCHED", - "hsn_code": "53012100" - }, - { - "description": "FLAX, RAW OR PROCESSED BUT NOT SPUN; FLAX TOW AND WASTE (INCLUDING YARN WASTE\nAND GARNETTED STOCK) FLAX, BROKEN, SCUTCHED, HACKLED OR OTHERWISE PROCESSED, BUT\nNOT SPUN :OTHER", - "hsn_code": "53012900" - }, - { - "description": "FLAX, RAW OR PROCESSED BUT NOT SPUN; FLAX TOW AND WASTE (INCLUDING YARN WASTE\nAND GARNETTED STOCK) FLAX TOW AND WASTE", - "hsn_code": "53013000" - }, - { - "description": "TRUE HEMP (CANNABIS SATIVA L ), RAW OR PROCESSED BUT NOT SPUN; TOW AND WASTE OF\nTRUE HEMP (INCLUDING YARN WASTE AND GARNETTED STOCK) TRUE HEMP, RAW OR RETTED", - "hsn_code": "53021000" - }, - { - "description": "TRUE HEMP (CANNABIS SATIVA L ), RAW OR PROCESSED BUT NOT SPUN; TOW AND WASTE OF\nTRUE HEMP (INCLUDING YARN WASTE AND GARNETTED STOCK) OTHER", - "hsn_code": "53029000" - }, - { - "description": "JUTE AND OTHER TEXTILE BAST FIBRES (EXCLUDING FLAX, TRUE HEMP AND RAMIE), RAW OR\nPROCESSED BUT NOT SPUN; TOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND\nGARNETTED STOCK) JUTE AND OTHER TEXTILE BAST FIBRES, RAW OR RETTED :JUTE, RAW OR\nRETTED", - "hsn_code": "53031010" - }, - { - "description": "JUTE AND OTHER TEXTILE BAST FIBRES (EXCLUDING FLAX, TRUE HEMP AND RAMIE), RAW OR\nPROCESSED BUT NOT SPUN; TOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND\nGARNETTED STOCK) JUTE AND OTHER TEXTILE BAST FIBRES, RAW OR RETTED :OTHER", - "hsn_code": "53031090" - }, - { - "description": "JUTE AND OTHER TEXTILE BAST FIBRES (EXCLUDING FLAX, TRUE HEMP AND RAMIE), RAW OR\nPROCESSED BUT NOT SPUN; TOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND\nGARNETTED STOCK) OTHER : JUTE CUTTING", - "hsn_code": "53039010" - }, - { - "description": "JUTE AND OTHER TEXTILE BAST FIBRES (EXCLUDING FLAX, TRUE HEMP AND RAMIE), RAW OR\nPROCESSED BUT NOT SPUN; TOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND\nGARNETTED STOCK) OTHER :OTHER", - "hsn_code": "53039090" - }, - { - "description": "SISAL AND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW OR PROCESSED BUT NOT SPUN;\nTOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK) SISAL\nAND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW : SISAL FIBRE", - "hsn_code": "53041010" - }, - { - "description": "SISAL AND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW OR PROCESSED BUT NOT SPUN;\nTOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK) SISAL\nAND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW : ALOE FIBRE", - "hsn_code": "53041020" - }, - { - "description": "SISAL AND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW OR PROCESSED BUT NOT SPUN;\nTOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK) SISAL\nAND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW : OTHER", - "hsn_code": "53041090" - }, - { - "description": "SISAL AND OTHER TEXTILE FIBRES OF THE GENUS AGAVE, RAW OR PROCESSED BUT NOT SPUN;\nTOW AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK) OTHER", - "hsn_code": "53049000" - }, - { - "description": "COCONUT ,ABACA,RAMIE AND OTHER VEGETABLE TEXTILE FIBRES,NOT", - "hsn_code": "53050010" - }, - { - "description": "CURLED OR MACHINE TWISTED COIR FIBRE", - "hsn_code": "53050030" - }, - { - "description": "COIR PITH", - "hsn_code": "53050040" - }, - { - "description": "VEGETABLE TEXTILE FIRES - OF ABACA", - "hsn_code": "53050050" - }, - { - "description": "VEGETABLE TEXTILE FIBRES - OF OTHERS", - "hsn_code": "53050090" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) : RAW : COIR BRISTLE FIBRE", - "hsn_code": "53051110" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) : RAW : COIR MATTRESS FIBRE", - "hsn_code": "53051120" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) : RAW : CURLED OR MACHINE TWISTED COIR FIBRE", - "hsn_code": "53051130" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) : RAW : COIR PITH", - "hsn_code": "53051140" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) :RAW : OTHER", - "hsn_code": "53051190" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF COCONUT (COIR) :OTHER:", - "hsn_code": "53051900" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF ABACA : RAW", - "hsn_code": "53052100" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOF ABACA :OTHER", - "hsn_code": "53052900" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOTHER : RAMIE OR CHINA GRASS", - "hsn_code": "53059010" - }, - { - "description": "COCONUT, ABACA (MANILA HEMP OR MUSA TEXTILIS NEE), RAMIE AND OTHER VEGETABLE\nTEXTILE FIBRES, NOT ELSEWHERE SPECIFIED OR INCLUDED, RAW OR PROCESSED BUT NOT SPUN;\nTOW, NOILS AND WASTE OF THESE FIBRES (INCLUDING YARN WASTE AND GARNETTED STOCK)\nOTHER :OTHER", - "hsn_code": "53059090" - }, - { - "description": "FLAX YARN SINGLE : PUT UP FOR RETAIL SALE", - "hsn_code": "53061010" - }, - { - "description": "FLAX YARN SINGLE :OTHER", - "hsn_code": "53061090" - }, - { - "description": "FLAX YARN MULTIPLE (FOLDED) OR CABLED :PUT UP FOR RETAIL SALE", - "hsn_code": "53062010" - }, - { - "description": "FLAX YARN MULTIPLE (FOLDED) OR CABLED :OTHER", - "hsn_code": "53062090" - }, - { - "description": "YARN OF JUTE OR OF OTHER TEXTILE BAST FIBRES OF HEADING 5303 SINGLE : OF JUTE", - "hsn_code": "53071010" - }, - { - "description": "YARN OF JUTE OR OF OTHER TEXTILE BAST FIBRES OF HEADING 5303 SINGLE : OTHER", - "hsn_code": "53071090" - }, - { - "description": "YARN OF JUTE OR OF OTHER TEXTILE BAST FIBRES OF HEADING 5303 MULTIPLE (FOLDED) OR\nCABLED", - "hsn_code": "53072000" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN COIR YARN :BALED", - "hsn_code": "53081010" - }, - { - "description": "SPOOLED HANKS", - "hsn_code": "53081020" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN COIR YARN :OTHER", - "hsn_code": "53081090" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN TRUE HEMP YARN", - "hsn_code": "53082000" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN OTHER : RAMIE YARN", - "hsn_code": "53089010" - }, - { - "description": "YARN OF OTHER VEGETABLE TEXTILE FIBRES; PAPER YARN OTHER :OTHER", - "hsn_code": "53089090" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING 85% OR MORE BY WEIGHT OF FLAX : UNBLEACHED OR\nBLEACHED : UNBLEACHED", - "hsn_code": "53091110" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING 85% OR MORE BY WEIGHT OF FLAX : UNBLEACHED OR\nBLEACHED : BLEACHED", - "hsn_code": "53091120" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING 85% OR MORE BY WEIGHT OF FLAX : OTHER : DYED", - "hsn_code": "53091910" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING 85% OR MORE BY WEIGHT OF FLAX : OTHER : PRINTED", - "hsn_code": "53091920" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING 85% OR MORE BY WEIGHT OF FLAX : OTHER : OTHER", - "hsn_code": "53091990" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING LESS THAN 85% BY WEIGHT OF FLAX : UNBLEACHED OR\nBLEACHED : UNBLEACHED", - "hsn_code": "53092110" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING LESS THAN 85% BY WEIGHT OF FLAX : UNBLEACHED OR\nBLEACHED : BLEACHED", - "hsn_code": "53092120" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING LESS THAN 85% BY WEIGHT OF FLAX : OTHER :DYED", - "hsn_code": "53092910" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING LESS THAN 85% BY WEIGHT OF FLAX : OTHER :PRINTED", - "hsn_code": "53092920" - }, - { - "description": "WOVEN FABRICS OF FLAX CONTAINING LESS THAN 85% BY WEIGHT OF FLAX : OTHER :OTHER", - "hsn_code": "53092990" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nCONTAINING 100% BY WEIGHT OF JUTE : CARPET BACKING FABRICS", - "hsn_code": "53101011" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nCONTAINING 100% BY WEIGHT OF JUTE : SACKING FABRICS", - "hsn_code": "53101012" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nCONTAINING 100% BY WEIGHT OF JUTE : HESSIAN FABRICS", - "hsn_code": "53101013" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nCONTAINING 100% BY WEIGHT OF JUTE : JUTE CANVAS", - "hsn_code": "53101014" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nCONTAINING 100% BY WEIGHT OF JUTE : OTHER", - "hsn_code": "53101019" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nOTHER : WOVEN BLENDED FABRICS CONTAINING MORE THAN 50% BY WEIGHT OF JUTE", - "hsn_code": "53101091" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nOTHER :STRANDED WOVEN FABRICS OF JUTE CONTAINING 50% OR MORE BY WEIGHT OF JUTE", - "hsn_code": "53101092" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nOTHER :JUTE SWIM FABRICS", - "hsn_code": "53101093" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 UNBLEACHED :\nOTHER :OTHER", - "hsn_code": "53101099" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER :\nBLEACHED", - "hsn_code": "53109010" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER\n:DECORATIVE FABRICS", - "hsn_code": "53109020" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER :OTHER :\nBLEACHED", - "hsn_code": "53109091" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER :OTHER\n:DYED", - "hsn_code": "53109092" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER :OTHER\n:PRINTED", - "hsn_code": "53109093" - }, - { - "description": "WOVEN FABRICS OF JUTE OR OF OTHER TEXTILE BASE FIBRES OF HEADING 5303 OTHER :OTHER\n:OTHER", - "hsn_code": "53109099" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nOTHER VEGETABLE TEXTILE FIBRES : UNBLEACHED", - "hsn_code": "53110011" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nOTHER VEGETABLE TEXTILE FIBRES : BLEACHED", - "hsn_code": "53110012" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nOTHER VEGETABLE TEXTILE FIBRES : DYED", - "hsn_code": "53110013" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nOTHER VEGETABLE TEXTILE FIBRES : PRINTED", - "hsn_code": "53110014" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES - OF COIR INCLUDING LOG FORM AND\nGEOTEXTILES", - "hsn_code": "53110015" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nOTHER VEGETABLE TEXTILE FIBRES : OTHER", - "hsn_code": "53110019" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nPAPER YARN : UNBLEACHED", - "hsn_code": "53110021" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nPAPER YARN : BLEACHED", - "hsn_code": "53110022" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nPAPER YARN : DYED", - "hsn_code": "53110023" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nPAPER YARN : PRINTED", - "hsn_code": "53110024" - }, - { - "description": "WOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN\nWOVEN FABRICS OF OTHER VEGETABLE TEXTILE FIBRES; WOVEN FABRICS OF PAPER YARN : OF\nPAPER YARN : OTHER", - "hsn_code": "53110029" - }, - { - "description": "SEWING THREAD OF MAN-MADE FILAMENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE OF\nSYNTHETIC FILAMENTS", - "hsn_code": "54011000" - }, - { - "description": "SEWING THREAD OF MAN-MADE FILAMENTS, WHETHER OR NOT PUT UP FOR RETAIL SALE OF\nARTIFICIAL FILAMENTS", - "hsn_code": "54012000" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES : NYLON TYRE YARN", - "hsn_code": "54021010" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES : OTHER", - "hsn_code": "54021090" - }, - { - "description": "HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "54021110" - }, - { - "description": "OTHER HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "54021910" - }, - { - "description": "OTHER HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "54021990" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nPOLYESTERS :OF TERYLENE DACRON", - "hsn_code": "54022010" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nPOLYESTERS :OTHER", - "hsn_code": "54022090" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN : OF NYLON\nOR OTHER POLYAMIDES, MEASURING PER SINGLE YARN NOT MORE THAN 50 TEX", - "hsn_code": "54023100" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OF NYLON\nOR OTHER POLYAMIDES, MEASURING PER SINGLE YARN MORE THAN 50 TEX", - "hsn_code": "54023200" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OF\nPOLYESTERS", - "hsn_code": "54023300" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OF\nPOLYPROPYLENE", - "hsn_code": "54023400" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OTHER :\nPOLYPROPYLENE FILAMENT YARN", - "hsn_code": "54023910" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OTHER\n:ACRYLIC FILAMENT YARN", - "hsn_code": "54023920" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :OTHER\n:OTHER", - "hsn_code": "54023990" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF NYLON OR OTHER\nPOLYAMIDES", - "hsn_code": "54024100" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF POLYESTERS,\nPARTIALLY ORIENTED", - "hsn_code": "54024200" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF POLYESTERS, OTHER", - "hsn_code": "54024300" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF ELASTOMERS", - "hsn_code": "54024400" - }, - { - "description": "OTHER SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL\nSALE, INCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF NYLON OR OTHER\nPOLYAMIDES", - "hsn_code": "54024500" - }, - { - "description": "OTHER SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL\nSALE, INCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF POLYESTERS,\nPARTIALLY ORIENTED", - "hsn_code": "54024600" - }, - { - "description": "OTHER SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL\nSALE, INCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF POLYESTERS", - "hsn_code": "54024700" - }, - { - "description": "OTHER SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL\nSALE, INCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE,\nUNTWISTED OR WITH A TWIST NOT EXCEEDING 50 TURNS PER METRE : OF POLYPROPYLENE", - "hsn_code": "54024800" - }, - { - "description": "OTHER HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, NOT ELSEWHERE SPECIFIED", - "hsn_code": "54024900" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE, WITH\nA TWIST EXCEEDING 50 TURNS PER METRE : OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "54025100" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE, WITH\nA TWIST EXCEEDING 50 TURNS PER METRE : OF POLYESTERS", - "hsn_code": "54025200" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE, WITH\nA TWIST EXCEEDING 50 TURNS PER METRE : OTHER : POLYPROPYLENE FILAMENT YARN", - "hsn_code": "54025910" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE, WITH\nA TWIST EXCEEDING 50 TURNS PER METRE : OTHER : OTHER", - "hsn_code": "54025990" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "54026100" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF POLYESTERS", - "hsn_code": "54026200" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER : POLYVINYL ACETATE FILAMENT YARN", - "hsn_code": "54026910" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER : POLYVINYL CHLORIDE FILAMENT YARN", - "hsn_code": "54026920" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER :POLYPROPYLENE FILAMENT YARN", - "hsn_code": "54026930" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER :ACRYLIC FILAMENT YARN", - "hsn_code": "54026940" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER :POLYTETRAFLUOROETHYLENE YARN", - "hsn_code": "54026950" - }, - { - "description": "SYNTHETIC FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT UP FOR RETAIL SALE,\nINCLUDING SYNTHETIC MONOFILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OTHER :OTHER", - "hsn_code": "54026990" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nVISCOSE RAYON : VISCOSE RAYON TYRE YARN 1,233 DECITEX", - "hsn_code": "54031010" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nVISCOSE RAYON : VISCOSE RAYON TYRE YARN 1,833 DECITEX", - "hsn_code": "54031020" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX HIGH TENACITY YARN OF\nVISCOSE RAYON : OTHER", - "hsn_code": "54031090" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX TEXTURED YARN :", - "hsn_code": "54032000" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE :OF\nVISCOSE RAYON, UNTWISTED OR WITH A TWIST NOT EXCEEDING 120 TURNS PER METRE", - "hsn_code": "54033100" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE :OF\nVISCOSE RAYON, WITH A TWIST EXCEEDING 120 TURNS PER METRE", - "hsn_code": "54033200" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, SINGLE :OF\nCELLULOSE ACETATE", - "hsn_code": "54033300" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER : CUPRAMMONIUM\nRAYON", - "hsn_code": "54033910" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER :OTHER", - "hsn_code": "54033990" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : UP TO 67 DECITEX", - "hsn_code": "54034110" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 83 DECITEX", - "hsn_code": "54034120" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 111 DECITEX, BRIGHT", - "hsn_code": "54034130" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 111 DECITEX, DULL", - "hsn_code": "54034140" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 133 DECITEX, BRIGHT", - "hsn_code": "54034150" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 133 DECITEX, DULL", - "hsn_code": "54034160" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 167 DECITEX, BRIGHT", - "hsn_code": "54034170" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OF 167 DECITEX, DULL", - "hsn_code": "54034180" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED : OF VISCOSE RAYON : OTHER", - "hsn_code": "54034190" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :ACETATE RAYON FILAMENT YARN, 83 DECITEX", - "hsn_code": "54034210" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :ACETATE RAYON FILAMENT YARN, 111 DECITEX", - "hsn_code": "54034220" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :ACETATE RAYON FILAMENT YARN, 133 DECITEX", - "hsn_code": "54034230" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :ACETATE RAYON FILAMENT YARN, 167 DECITEX", - "hsn_code": "54034240" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :ACETATE RAYON FILAMENT YARN, 333 DECITEX", - "hsn_code": "54034250" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OF CELLULOSE ACETATE :OTHER", - "hsn_code": "54034290" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OF 33 DECITEX", - "hsn_code": "54034911" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OF 44 DECITEX", - "hsn_code": "54034912" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OF 67 DECITEX", - "hsn_code": "54034913" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OF 83 DECITEX", - "hsn_code": "54034914" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OF 89 DECITEX", - "hsn_code": "54034915" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : CUPRAMMONIUM FILAMENT YARN : OTHER", - "hsn_code": "54034919" - }, - { - "description": "ARTIFICIAL FILAMENT YARN (OTHER THAN SEWING THREAD), NOT PUT FOR RETAIL SALE,\nINCLUDING ARTIFICIAL MONO FILAMENT OF LESS THAN 67 DECITEX OTHER YARN, MULTIPLE\n(FOLDED) OR CABLED :OTHER : OTHER", - "hsn_code": "54034990" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL\nDIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF\nSYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM\nMONOFILAMENT", - "hsn_code": "54041000" - }, - { - "description": "ELASTOMETIC MONOFILAMENT", - "hsn_code": "54041100" - }, - { - "description": "OTHER MONOFILAMENT OF POLYPROPYLENE", - "hsn_code": "54041200" - }, - { - "description": "OTHER MONOFILAMENTS - CATGUT IMITATION OF NON-STERILE SYNTHETIC YARN", - "hsn_code": "54041910" - }, - { - "description": "MONOFILAMENTS", - "hsn_code": "54041920" - }, - { - "description": "OTHER MONOFILAMENTS - NOT SPECIFIED ELSEWHERE", - "hsn_code": "54041990" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL\nDIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF\nSYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM OTHER :\nCATGUT IMITATION OF SYNTHETIC YARN, NONSTERILE", - "hsn_code": "54049010" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL\nDIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF\nSYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM OTHER : STRIP\nAND THE LIKE OF SYNTHETIC FIBRE MATERIALS", - "hsn_code": "54049020" - }, - { - "description": "SYNTHETIC MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL\nDIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF\nSYNTHETIC TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM OTHER : OTHER", - "hsn_code": "54049090" - }, - { - "description": "ARTIFICIAL MONOFILAMENT OF 67 DECITEX OR MORE AND OF WHICH NO CROSS-SECTIONAL\nDIMENSION EXCEEDS 1 MM; STRIP AND THE LIKE (FOR EXAMPLE, ARTIFICIAL STRAW) OF\nARTIFICIAL TEXTILE MATERIALS OF AN APPARENT WIDTH NOT EXCEEDING 5 MM", - "hsn_code": "54050000" - }, - { - "description": "MAN-MADE FILAMENT YARN (OTHER THAN SEWING THREAD), PUT UP FOR RETAIL SALE,\nSYNTHETIC FILAMENT YARN", - "hsn_code": "54060010" - }, - { - "description": "MAN-MADE FILAMENT YARN (OTHER THAN SEWING THREAD), PUT UP FOR RETAIL SALE,\nARTIFICIAL FILAMENT YARN", - "hsn_code": "54060020" - }, - { - "description": "MAN-MADE FILAMENT YARN (OTHER THAN SEWING THREAD), PUT UP FOR RETAIL SALE\nSYNTHETIC FILAMENT YARN", - "hsn_code": "54061000" - }, - { - "description": "MAN-MADE FILAMENT YARN (OTHER THAN SEWING THREAD), PUT UP FOR RETAIL SALE\nARTIFICIAL FILAMENT YARN", - "hsn_code": "54062000" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : PARACHUTE FABRICS", - "hsn_code": "54071011" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : TENT FABRICS", - "hsn_code": "54071012" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : NYLON FURNISHING\nFABRICS", - "hsn_code": "54071013" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : UMBRELLA CLOTH PANEL\nFABRICS", - "hsn_code": "54071014" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : OTHER NYLON AND\nPOLYAMIDE FABRICS (FILAMENT)", - "hsn_code": "54071015" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : POLYESTER SUITINGS", - "hsn_code": "54071016" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : UNBLEACHED : OTHER POLYESTER FABRICS", - "hsn_code": "54071019" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : PARACHUTE FABRICS", - "hsn_code": "54071021" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : TENT FABRICS", - "hsn_code": "54071022" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : NYLON FURNISHING FABRICS", - "hsn_code": "54071023" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : UMBRELLA CLOTH PANEL\nFABRICS", - "hsn_code": "54071024" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : OTHER NYLON AND\nPOLYAMIDE FABRICS OF FILAMENT YARN", - "hsn_code": "54071025" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : POLYESTER SUITINGS", - "hsn_code": "54071026" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : BLEACHED : OTHER", - "hsn_code": "54071029" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :PARACHUTE FABRICS", - "hsn_code": "54071031" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :TENT FABRICS", - "hsn_code": "54071032" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :NYLON FURNISHING FABRICS", - "hsn_code": "54071033" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :UMBRELLA CLOTH PANEL FABRICS", - "hsn_code": "54071034" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :OTHER NYLON AND POLYAMIDE\nFABRICS (FILAMENT)", - "hsn_code": "54071035" - }, - { - "description": "MATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :POLYESTER SUITINGS", - "hsn_code": "54071036" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : DYED :OTHER", - "hsn_code": "54071039" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED : PARACHUTE FABRICS", - "hsn_code": "54071041" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :TENT FABRICS", - "hsn_code": "54071042" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :NYLON FURNISHING FABRICS", - "hsn_code": "54071043" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :UMBRELLA CLOTH PANEL\nFABRICS", - "hsn_code": "54071044" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :OTHER NYLON AND POLYAMIDE\nFABRICS (FILAMENT)", - "hsn_code": "54071045" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :POLYESTER SUITINGS", - "hsn_code": "54071046" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : PRINTED :POLYESTER SUITINGS", - "hsn_code": "54071049" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER : PARACHUTE FABRICS", - "hsn_code": "54071091" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :TENT FABRICS", - "hsn_code": "54071092" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :NYLON FURNISHING FABRICS", - "hsn_code": "54071093" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :UMBRELLA CLOTH PANEL FABRICS", - "hsn_code": "54071094" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :OTHER NYLON AND POLYAMIDE\nFABRICS OF FILAMENT YARN", - "hsn_code": "54071095" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :OTHER NYLON AND POLYAMIDE\nFABRICS OF FILAMENT YARN", - "hsn_code": "54071096" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nNYLON OR OTHER POLYAMIDES OR OF POLYESTERS : OTHER :OTHER", - "hsn_code": "54071099" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM STRIP OR THE LIKE\n:UNBLEACHED", - "hsn_code": "54072010" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM STRIP OR THE LIKE : BLEACHED", - "hsn_code": "54072020" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM STRIP OR THE LIKE :DYED", - "hsn_code": "54072030" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM STRIP OR THE LIKE : PRINTED", - "hsn_code": "54072040" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 WOVEN FABRICS OBTAINED FROM STRIP OR THE LIKE :OTHER", - "hsn_code": "54072090" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 FABRICS SPECIFIED IN NOTE 9 TO SECTION XI UNBLEACHED", - "hsn_code": "54073010" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 FABRICS SPECIFIED IN NOTE 9 TO SECTION XI BLEACHED", - "hsn_code": "54073020" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 FABRICS SPECIFIED IN NOTE 9 TO SECTION XI DYED", - "hsn_code": "54073030" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 FABRICS SPECIFIED IN NOTE 9 TO SECTION XI PRINTED", - "hsn_code": "54073040" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 FABRICS SPECIFIED IN NOTE 9 TO SECTION XI OTHER", - "hsn_code": "54073090" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nUNBLEACHED : NYLON BRASSO", - "hsn_code": "54074111" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nUNBLEACHED : NYLON GEORGETTE", - "hsn_code": "54074112" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nUNBLEACHED : NYLON TAFETTA", - "hsn_code": "54074113" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nUNBLEACHED : NYLON SAREES", - "hsn_code": "54074114" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED : UNBLEACHED :\nOTHER", - "hsn_code": "54074119" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nBLEACHED : NYLON BRASSO", - "hsn_code": "54074121" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nBLEACHED : NYLON GEORGETTE", - "hsn_code": "54074122" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nBLEACHED : NYLON TAFETTA", - "hsn_code": "54074123" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED :\nBLEACHED : NYLON SAREES", - "hsn_code": "54074124" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF FILAMENTS OF NYLON OR OTHER POLYAMIDES : UNBLEACHED OR BLEACHED : BLEACHED :\nOTHER", - "hsn_code": "54074129" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED : NYLON BRASSO", - "hsn_code": "54074210" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED :NYLON GEORGETTE", - "hsn_code": "54074220" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED :NYLON TAFETTA", - "hsn_code": "54074230" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED :NYLON SAREES", - "hsn_code": "54074240" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED :OTHER", - "hsn_code": "54074290" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF FILAMENTS OF NYLON OR OTHER POLYAMIDES : DYED :OF YARN OF DIFFERENT COLOURS", - "hsn_code": "54074300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : PRINTED : NYLON BRASSO", - "hsn_code": "54074410" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : PRINTED :NYLON GEORGETTE", - "hsn_code": "54074420" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : PRINTED :NYLON TAFETTA", - "hsn_code": "54074430" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF FILAMENTS OF NYLON OR OTHER POLYAMIDES : PRINTED :NYLON SAREES,", - "hsn_code": "54074440" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF FILAMENTS OF NYLON OR OTHER POLYAMIDES : PRINTED :OTHER", - "hsn_code": "54074490" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: UNBLEACHED OR BLEACHED : UNBLEACHED :\nPOLYESTER SHIRTINGS", - "hsn_code": "54075111" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: UNBLEACHED OR BLEACHED : UNBLEACHED :\nOTHER", - "hsn_code": "54075119" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF TEXTURED POLYESTER FILAMENTS: UNBLEACHED OR BLEACHED : BLEACHED : POLYESTER\nSHIRTINGS", - "hsn_code": "54075121" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: UNBLEACHED OR BLEACHED : BLEACHED : OTHER", - "hsn_code": "54075129" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 ERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED : POLYESTER SHIRTINGS", - "hsn_code": "54075210" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED :POLYESTER SUITINGS", - "hsn_code": "54075220" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED :TERYLENE AND DACRON SAREES", - "hsn_code": "54075230" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED :POLYESTER SAREES", - "hsn_code": "54075240" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED :OTHER", - "hsn_code": "54075290" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: DYED :OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "54075300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: PRINTED : TERYLENE AND DACRON SAREES", - "hsn_code": "54075410" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: PRINTED :POLYESTER SHIRTINGS", - "hsn_code": "54075420" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: PRINTED :POLYESTER SAREES", - "hsn_code": "54075430" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nWOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF TEXTURED POLYESTER FILAMENTS: PRINTED :OTHER", - "hsn_code": "54075490" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF POLYESTER FILAMENTS : CONTAINING 85 PERCENT OR MORE BY WEIGHT OF\nNONTEXTURED POLYESTER FILAMENTS : POLYESTER SHIRTINGS", - "hsn_code": "54076110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF POLYESTER FILAMENTS : CONTAINING 85 PERCENT OR MORE BY WEIGHT OF\nNONTEXTURED POLYESTER FILAMENTS : POLYESTER SUITINGS", - "hsn_code": "54076120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF POLYESTER FILAMENTS : CONTAINING 85 PERCENT OR MORE BY WEIGHT OF\nNONTEXTURED POLYESTER FILAMENTS : OTHER", - "hsn_code": "54076190" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85 PERCENT OR MORE BY\nWEIGHT OF POLYESTER FILAMENTS : OTHER", - "hsn_code": "54076900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF SYNTHETIC FILAMENTS : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "54077110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF SYNTHETIC FILAMENTS : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "54077120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF SYNTHETIC FILAMENTS : DYED", - "hsn_code": "54077200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF SYNTHETIC FILAMENTS : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "54077300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF SYNTHETIC FILAMENTS : PRINTED", - "hsn_code": "54077400" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : NYLON GEORGETTE", - "hsn_code": "54078111" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : NYLON SAREES", - "hsn_code": "54078112" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : POLYESTER SHIRTINGS", - "hsn_code": "54078113" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : POLYESTER SUITINGS", - "hsn_code": "54078114" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : TERYLENE AND DACRON SAREES", - "hsn_code": "54078115" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : POLYESTER DHOTI", - "hsn_code": "54078116" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85% BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED : OTHER", - "hsn_code": "54078119" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : NYLON GEORGETTE", - "hsn_code": "54078121" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : NYLON SAREES", - "hsn_code": "54078122" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : POLYESTER SHIRTINGS", - "hsn_code": "54078123" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : POLYESTER SUITINGS", - "hsn_code": "54078124" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : TERYLENE AND DACRON SAREES", - "hsn_code": "54078125" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : POLYESTER DHOTI", - "hsn_code": "54078126" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85% BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED : OTHER", - "hsn_code": "54078129" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED : NYLON\nGEORGETTE", - "hsn_code": "54078210" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED :NYLON\nSAREES", - "hsn_code": "54078220" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED\n:POLYESTER SHIRTINGS", - "hsn_code": "54078230" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED\n:POLYESTER SUITINGS", - "hsn_code": "54078240" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED :TERYLENE\nAND DACRON SAREES", - "hsn_code": "54078250" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED :LUNGIES", - "hsn_code": "54078260" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85% BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED :OTHER", - "hsn_code": "54078290" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85% BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : DYED :OF YARNS\nOF DIFFERENT COLOURS", - "hsn_code": "54078300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED :\nNYLON GEORGETTE", - "hsn_code": "54078410" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED :NYLON\nSAREES", - "hsn_code": "54078420" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED\n:POLYESTER SHIRTINGS", - "hsn_code": "54078430" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED\n:POLYESTER SUITINGS", - "hsn_code": "54078440" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED\n:TERYLENE AND DACRON SAREES", - "hsn_code": "54078450" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED\n:LUNGIES", - "hsn_code": "54078460" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85 PERCENT BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED\n:POLYESTER SAREES", - "hsn_code": "54078470" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS, CONTAINING LESS THAN 85% BY\nWEIGHT OF SYNTHETIC FILAMENTS, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED :OTHER", - "hsn_code": "54078490" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS : UNBLEACHED OR BLEACHED :\nUNBLEACHED", - "hsn_code": "54079110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS : UNBLEACHED OR BLEACHED :\nBLEACHED", - "hsn_code": "54079120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS : DYED", - "hsn_code": "54079200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "54079300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5404 OTHER WOVEN FABRICS : PRINTED", - "hsn_code": "54079400" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405WOVEN FABRICS OBTAINED FROM HIGH TENACITY YARN OF\nVISCOSE RAYON", - "hsn_code": "54081000" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "54082110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "54082120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON CREPE\nFABRICS", - "hsn_code": "54082211" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON JACQUARDS", - "hsn_code": "54082212" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON BROCADES", - "hsn_code": "54082213" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON GEORGETTE", - "hsn_code": "54082214" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON TAFETTA", - "hsn_code": "54082215" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON SUITINGS", - "hsn_code": "54082216" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON SHIRTINGS", - "hsn_code": "54082217" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : RAYON SAREES", - "hsn_code": "54082218" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF RAYON : OTHER", - "hsn_code": "54082219" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : FABRICS OF CONTINUOUS FILAMENT,\nOTHER THAN RAYON", - "hsn_code": "54082220" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : DYED : OTHER", - "hsn_code": "54082290" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "54082300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON CREPE FABRICS", - "hsn_code": "54082411" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON JACQUARDS", - "hsn_code": "54082412" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON BROCADES", - "hsn_code": "54082413" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON GEORGETTE", - "hsn_code": "54082414" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON TAFETTA", - "hsn_code": "54082415" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON SUITINGS", - "hsn_code": "54082416" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON SHIRTINGS", - "hsn_code": "54082417" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : RAYON SAREES", - "hsn_code": "54082418" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OF RAYON : OTHER", - "hsn_code": "54082419" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS, CONTAINING 85% OR MORE BY WEIGHT\nOF ARTIFICIAL FILAMENT OR STRIP OR THE LIKE : PRINTED : OTHER", - "hsn_code": "54082490" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : UNBLEACHED OR BLEACHED :\nUNBLEACHED", - "hsn_code": "54083110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : UNBLEACHED OR BLEACHED :\nBLEACHED", - "hsn_code": "54083120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : RAYON\nBROCADES", - "hsn_code": "54083211" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : RAYON\nGEORGETTE", - "hsn_code": "54083212" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : RAYON\nTAFETTA", - "hsn_code": "54083213" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : RAYON\nSUITINGS", - "hsn_code": "54083214" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : RAYON\nSHIRTINGS", - "hsn_code": "54083215" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : FABRICS OF RAYON : OTHER", - "hsn_code": "54083219" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : DYED : OTHER", - "hsn_code": "54083290" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "54083300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nCREPE FABRICS", - "hsn_code": "54083411" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nJACQUARDS", - "hsn_code": "54083412" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nBROCADES", - "hsn_code": "54083413" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nGEORGETTE", - "hsn_code": "54083414" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nTAFETTA", - "hsn_code": "54083415" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nSUITINGS", - "hsn_code": "54083416" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nSHIRTINGS", - "hsn_code": "54083417" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : RAYON\nSAREES", - "hsn_code": "54083418" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRIC OF RAYON : OTHER", - "hsn_code": "54083419" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED : FABRICS OF CONTINUOUS\nFILAMENT, OTHER THAN RAYON", - "hsn_code": "54083420" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL FILAMENT YARN, INCLUDING WOVEN FABRICS OBTAINED FROM\nMATERIALS OF HEADING 5405 OTHER WOVEN FABRICS : PRINTED :OTHER", - "hsn_code": "54083490" - }, - { - "description": "SYNTHETIC FILAMENT TOW - OF NYLON OR OTHER POLYAMIDES", - "hsn_code": "55011000" - }, - { - "description": "SYNTHETIC FILAMENT TOW - OF POLYESTERS", - "hsn_code": "55012000" - }, - { - "description": "SYNTHETIC FILAMENT TOW - ACRYLIC OR MODACRYLIC", - "hsn_code": "55013000" - }, - { - "description": "SYNTHETIC FILAMENT TOW - OF POLYPROPYLENE", - "hsn_code": "55014000" - }, - { - "description": "SYNTHETIC FILAMENT TOW - OTHER : OF POLYPROPYLENE", - "hsn_code": "55019010" - }, - { - "description": "SYNTHETIC FILAMENT TOW - OTHER : OTHER", - "hsn_code": "55019090" - }, - { - "description": "ARTIFICIAL FILAMENT TOW - ARTIFICIAL FILAMENT TOW : ACETATE RAYON TOW", - "hsn_code": "55020010" - }, - { - "description": "ARTIFICIAL FILAMENT TOW - ARTIFICIAL FILAMENT TOW : VISCOSE RAYON TOW", - "hsn_code": "55020020" - }, - { - "description": "ARTIFICIAL FILAMENT TOW - ARTIFICIAL FILAMENT TOW : OTHER", - "hsn_code": "55020090" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF NYLON OR OTHER POLYAMIDES", - "hsn_code": "55031000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF NYLON OR OTHER POLYAMIDES - OF ARAMIDES", - "hsn_code": "55031100" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF NYLON OR OTHER POLYAMIDES-OTHERS", - "hsn_code": "55031900" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF POLYESTERS", - "hsn_code": "55032000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nACRYLIC OR MODACRYLIC", - "hsn_code": "55033000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF POLYPROPYLENE", - "hsn_code": "55034000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER : POLYVINYL STAPLE FIBRE", - "hsn_code": "55039010" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER : POLYVINYL CHLORIDE STAPLE FIBRE", - "hsn_code": "55039020" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER : OTHER", - "hsn_code": "55039090" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOF VISCOSE RAYON", - "hsn_code": "55041000" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER ACETATE RAYON STAPLE FIBRE", - "hsn_code": "55049010" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER POLYNOSIC STAPLE FIBRE", - "hsn_code": "55049020" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER HIGH WET MODULUS STAPLE FIBRE", - "hsn_code": "55049030" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, NOT CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER OTHER", - "hsn_code": "55049090" - }, - { - "description": "WASTE (INCLUDING NOILS, YARN WASTE AND GARNETTED STOCK) OF MAN-MADE FIBRES - OF\nSYNTHETIC FIBERS : OF ACRYLIC", - "hsn_code": "55051010" - }, - { - "description": "WASTE (INCLUDING NOILS, YARN WASTE AND GARNETTED STOCK) OF MAN-MADE FIBRES - OF\nSYNTHETIC FIBERS : OTHER", - "hsn_code": "55051090" - }, - { - "description": "WASTE (INCLUDING NOILS, YARN WASTE AND GARNETTED STOCK) OF MAN-MADE FIBRES OF\nARTIFICIAL FIBRES", - "hsn_code": "55052000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING - OF\nNYLON OR OTHER POLYAMIDES", - "hsn_code": "55061000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING - OF\nPOLYESTERS", - "hsn_code": "55062000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nACRYLIC OR MODACRYLIC", - "hsn_code": "55063000" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER : POLYPROPYLENE TOPS", - "hsn_code": "55069010" - }, - { - "description": "SYNTHETIC STAPLE FIBRES, CARDED COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nOTHER : OTHER", - "hsn_code": "55069090" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING :\nACETATE RAYON TOPS", - "hsn_code": "55070010" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING :\nVISCOSE TOPS", - "hsn_code": "55070020" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING :\nPOLYNOSIC TOPS", - "hsn_code": "55070030" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING : HIGH\nWET MODULUS TOPS", - "hsn_code": "55070040" - }, - { - "description": "ARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING -\nARTIFICIAL STAPLE FIBRES, CARDED, COMBED OR OTHERWISE PROCESSED FOR SPINNING :\nOTHER", - "hsn_code": "55070090" - }, - { - "description": "SEWING THREAD OF MAN-MADE STAPLE FIBRES, WHETHER OR NOT PUT UP FOR RETAIL SALE -\nOF SYNTHETIC STAPLE FIBRES", - "hsn_code": "55081000" - }, - { - "description": "SEWING THREAD OF MAN-MADE STAPLE FIBRES, WHETHER OR NOT PUT UP FOR RETAIL SALE -\nOF ARTIFICIAL STAPLE FIBRES", - "hsn_code": "55082000" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF STAPLE FIBRES OF NYLON OR OTHER\nPOLYAMIDES : SINGLE YARN", - "hsn_code": "55091100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF STAPLE FIBRES OF NYLON OR OTHER\nPOLYAMIDES : MULTIPLE (FOLDED) OR CABLED YARN", - "hsn_code": "55091200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE FIBRES : SINGLE YARN", - "hsn_code": "55092100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE FIBRES : MULTIPLE\n(FOLDED) OR CABLED YARN", - "hsn_code": "55092200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR MODACRYLIC STAPLE FIBRES :\nSINGLE YARN", - "hsn_code": "55093100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR MODACRYLIC STAPLE FIBRES :\nMULTIPLE (FOLDED) OR CABLED YARN", - "hsn_code": "55093200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nSINGLE YARN : POLYPROPYLENE SPUN YARN", - "hsn_code": "55094110" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nSINGLE YARN : POLYVINYL ACETATE SPUN YARN", - "hsn_code": "55094120" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nSINGLE YARN : POLYVINYL CHLORIDE SPUN YARN", - "hsn_code": "55094130" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nSINGLE YARN : OTHER", - "hsn_code": "55094190" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nMULTIPLE (FOLDED) OR CABLED YARN : POLYPROPYLENE SPUN YARN", - "hsn_code": "55094210" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nMULTIPLE (FOLDED) OR CABLED YARN : POLYVINYL ACETATE (PVA) SPUN YARN", - "hsn_code": "55094220" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nMULTIPLE (FOLDED) OR CABLED YARN : POLYVINYL CHLORIDE (PVC) SPUN YARN", - "hsn_code": "55094230" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, CONTAINING 85% OR MORE BY WEIGHT OF SYNTHETIC STAPLE FIBRES :\nMULTIPLE (FOLDED) OR CABLED YARN : OTHER", - "hsn_code": "55094290" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF POLYESTER STAPLE FIBRES : MIXED MAINLY OR SOLELY WITH ARTIFICIAL\nSTAPLE FIBRES", - "hsn_code": "55095100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF POLYESTER STAPLE FIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR\nFINE ANIMAL HAIR", - "hsn_code": "55095200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF POLYESTER STAPLE FIBRES : MIXED MAINLY OR SOLELY WITH COTTON", - "hsn_code": "55095300" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF POLYESTER STAPLE FIBRES : OTHER", - "hsn_code": "55095900" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF ACRYLIC OR MODACRYLIC STAPLE FIBRES : MIXED MAINLY OR SOLELY\nWITH WOOL OR FINE ANIMAL HAIR", - "hsn_code": "55096100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF ACRYLIC OR MODACRYLIC STAPLE FIBRES : MIXED MAINLY OR SOLELY\nWITH COTTON", - "hsn_code": "55096200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, OF ACRYLIC OR MODACRYLIC STAPLE FIBRES : OTHER", - "hsn_code": "55096900" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR", - "hsn_code": "55099100" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : MIXED MAINLY OR SOLELY WITH COTTON", - "hsn_code": "55099200" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF SYNTHETIC STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : OTHER", - "hsn_code": "55099900" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : SINGLE YARN :\nVISCOSE RAYON SPUN YARN", - "hsn_code": "55101110" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : SINGLE YARN :\nACETATE RAYON SPUN YARN", - "hsn_code": "55101120" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : SINGLE YARN :\nOTHER", - "hsn_code": "55101190" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : MULTIPLE\n(FOLDED) OR CABLED YARN : VISCOSE RAYON SPUN YARN", - "hsn_code": "55101210" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : MULTIPLE\n(FOLDED) OR CABLED YARN : ACETATE RAYON SPUN YARN", - "hsn_code": "55101220" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - CONTAINING 85% OR MORE BY WEIGHT OF ARTIFICIAL STAPLE FIBRES : MULTIPLE\n(FOLDED) OR CABLED YARN : OTHER", - "hsn_code": "55101290" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : VISCOSE\nRAYON SPUN YARN", - "hsn_code": "55102010" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : ACETATE\nRAYON SPUN YARN", - "hsn_code": "55102020" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "55102090" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH COTTON : VISCOSE RAYON SPUN YARN", - "hsn_code": "55103010" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH COTTON : ACETATE RAYON SPUN YARN", - "hsn_code": "55103020" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN, MIXED MAINLY OR SOLELY WITH COTTON : OTHER", - "hsn_code": "55103090" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : VISCOSE RAYON SPUN YARN", - "hsn_code": "55109010" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : ACETATE RAYON SPUN YARN", - "hsn_code": "55109020" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF ARTIFICIAL STAPLE FIBRES, NOT PUT UP FOR RETAIL\nSALE - OTHER YARN : OTHER", - "hsn_code": "55109090" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF MANMADE STAPLE FIBRES, PUT UP FOR RETAIL SALE -\nOF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF SUCH FIBRES", - "hsn_code": "55111000" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF MANMADE STAPLE FIBRES, PUT UP FOR RETAIL SALE -\nOF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF SUCH FIBRES", - "hsn_code": "55112000" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF MANMADE STAPLE FIBRES, PUT UP FOR RETAIL SALE -\nOF ARTIFICIAL STAPLE FIBRES : CONTAINING MORE THAN 85% BY WEIGHT OF STAPLE FIBRE", - "hsn_code": "55113010" - }, - { - "description": "YARN (OTHER THAN SEWING THREAD) OF MANMADE STAPLE FIBRES, PUT UP FOR RETAIL SALE -\nOF ARTIFICIAL STAPLE FIBRES : OTHER", - "hsn_code": "55113090" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE\nFIBRES : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55121110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE\nFIBRES : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55121120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE\nFIBRES : OTHER : DYED", - "hsn_code": "55121910" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE\nFIBRES : OTHER : PRINTED", - "hsn_code": "55121920" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF POLYESTER STAPLE\nFIBRES : OTHER : OTHER", - "hsn_code": "55121990" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR\nMODACRYLIC STAPLE FIBRES : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55122110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR\nMODACRYLIC STAPLE FIBRES : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55122120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR\nMODACRYLIC STAPLE FIBRES : OTHER : DYED", - "hsn_code": "55122910" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR\nMODACRYLIC STAPLE FIBRES : OTHER : PRINTED", - "hsn_code": "55122920" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF ACRYLIC OR\nMODACRYLIC STAPLE FIBRES : OTHER : OTHER", - "hsn_code": "55122990" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - OTHER : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55129110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - OTHER : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55129120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - OTHER : OTHER : DYED", - "hsn_code": "55129910" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - OTHER : OTHER : PRINTED", - "hsn_code": "55129920" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING 85% OR MORE BY WEIGHT OF\nSYNTHETIC STAPLE FIBRES - OTHER : OTHER : OTHER", - "hsn_code": "55129990" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE :\nUNBLEACHED", - "hsn_code": "55131110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE : BLEACHED", - "hsn_code": "55131120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL,\nOF POLYESTER STAPLE FIBRES : UNBLEACHED", - "hsn_code": "55131210" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL,\nOF POLYESTER STAPLE FIBRES : BLEACHED", - "hsn_code": "55131220" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES :\nUNBLEACHED", - "hsn_code": "55131310" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES :\nBLEACHED", - "hsn_code": "55131320" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS : UNBLEACHED", - "hsn_code": "55131910" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - UNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS : BLEACHED", - "hsn_code": "55131920" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - DYED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55132100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - DYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF POLYESTER STAPLE\nFIBRES", - "hsn_code": "55132200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - DYED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55132300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - DYED : OTHER WOVEN FABRICS", - "hsn_code": "55132900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - OF YARNS OF DIFFERENT COLOURS : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55133100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - OF YARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS\nTWILL, OF POLYESTER STAPLE FIBRES", - "hsn_code": "55133200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - OF YARNS OF DIFFERENT COLOURS : OTHER WOVEN FABRICS OF POLYESTER STAPLE\nFIBRES", - "hsn_code": "55133300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - OF YARNS OF DIFFERENT COLOURS : OTHER WOVEN FABRICS", - "hsn_code": "55133900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - PRINTED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55134100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - PRINTED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF POLYESTER\nSTAPLE FIBRES", - "hsn_code": "55134200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - PRINTED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55134300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT NOT EXCEEDING 170\nG/M2 - PRINTED : OTHER WOVEN FABRICS", - "hsn_code": "55134900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE : UNBLEACHED", - "hsn_code": "55141110" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE : BLEACHED", - "hsn_code": "55141120" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF\nPOLYESTER STAPLE FIBRES : UNBLEACHED", - "hsn_code": "55141210" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF\nPOLYESTER STAPLE FIBRES : BLEACHED", - "hsn_code": "55141220" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES :\nUNBLEACHED", - "hsn_code": "55141310" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES : BLEACHED", - "hsn_code": "55141320" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OTHER : UNBLEACHED", - "hsn_code": "55141910" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nUNBLEACHED OR BLEACHED : OTHER : BLEACHED", - "hsn_code": "55141920" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nDYED : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55142100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nDYED : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF POLYESTER STAPLE FIBRES", - "hsn_code": "55142200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nDYED : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55142300" - }, - { - "description": "OTHER WOVEN FABRICS", - "hsn_code": "55142900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2-OF\nYARNS OF DIFFERENT COLOURS: ---- OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55143011" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2-\nOF YARNS OF DIFFERENT COLOURS: ---- 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL\nOF POLYESTER STAPLE FIBRES", - "hsn_code": "55143012" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS: ---- OTHER WOVEN FBBRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55143013" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS:---- OTHER WOVEN FABRICS", - "hsn_code": "55143019" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS : OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55143100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS : 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL,\nOF POLYESTER STAPLE FIBRES", - "hsn_code": "55143200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS : OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55143300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nOF YARNS OF DIFFERENT COLOURS : OTHER WOVEN FABRICS", - "hsn_code": "55143900" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nPRINTED OF POLYESTER STAPLE FIBRES, PLAIN WEAVE", - "hsn_code": "55144100" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nPRINTED 3-THREAD OR 4-THREAD TWILL, INCLUDING CROSS TWILL, OF POLYESTER STAPLE\nFIBRES", - "hsn_code": "55144200" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nPRINTED OTHER WOVEN FABRICS OF POLYESTER STAPLE FIBRES", - "hsn_code": "55144300" - }, - { - "description": "WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES, CONTAINING LESS THAN 85% BY WEIGHT OF\nSUCH FIBRES, MIXED MAINLY OR SOLELY WITH COTTON, OF A WEIGHT EXCEEDING 170 G/M2 -\nPRINTED OTHER WOVEN FABRICS", - "hsn_code": "55144900" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH VISCOSE RAYON STAPLE FIBRES : UNBLEACHED", - "hsn_code": "55151110" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH VISCOSE RAYON STAPLE FIBRES : BLEACHED", - "hsn_code": "55151120" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH VISCOSE RAYON STAPLE FIBRES : DYED", - "hsn_code": "55151130" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH VISCOSE RAYON STAPLE FIBRES : PRINTED", - "hsn_code": "55151140" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH VISCOSE RAYON STAPLE FIBRES : OTHER", - "hsn_code": "55151190" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : UNBLEACHED", - "hsn_code": "55151210" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : BLEACHED", - "hsn_code": "55151220" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : DYED", - "hsn_code": "55151230" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : PRINTED", - "hsn_code": "55151240" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : OTHER", - "hsn_code": "55151290" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : UNBLEACHED", - "hsn_code": "55151310" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : BLEACHED", - "hsn_code": "55151320" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : DYED", - "hsn_code": "55151330" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : PRINTED", - "hsn_code": "55151340" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "55151390" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : OTHER :\nUNBLEACHED", - "hsn_code": "55151910" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : OTHER :\nBLEACHED", - "hsn_code": "55151920" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : OTHER :\nDYED", - "hsn_code": "55151930" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : OTHER :\nPRINTED", - "hsn_code": "55151940" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF POLYESTER STAPLE FIBRES : OTHER :\nOTHER", - "hsn_code": "55151990" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH MAN-MADE FILAMENTS : UNBLEACHED", - "hsn_code": "55152110" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH MAN-MADE FILAMENTS : BLEACHED", - "hsn_code": "55152120" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH MAN-MADE FILAMENTS : DYED", - "hsn_code": "55152130" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH MAN-MADE FILAMENTS : PRINTED", - "hsn_code": "55152140" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH MAN-MADE FILAMENTS : OTHER", - "hsn_code": "55152190" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : UNBLEACHED", - "hsn_code": "55152210" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : BLEACHED", - "hsn_code": "55152220" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : DYED", - "hsn_code": "55152230" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : PRINTED", - "hsn_code": "55152240" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "55152290" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : OTHER : UNBLEACHED", - "hsn_code": "55152910" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : OTHER : BLEACHED", - "hsn_code": "55152920" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : OTHER : DYED", - "hsn_code": "55152930" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : OTHER : PRINTED", - "hsn_code": "55152940" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OF ACRYLIC OR MODACRYLIC STAPLE\nFIBRES : OTHER : OTHER", - "hsn_code": "55152990" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : UNBLEACHED", - "hsn_code": "55159110" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : BLEACHED", - "hsn_code": "55159120" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : DYED", - "hsn_code": "55159130" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : PRINTED", - "hsn_code": "55159140" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH MAN-MADE FILAMENTS : OTHER", - "hsn_code": "55159190" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : UNBLEACHED", - "hsn_code": "55159210" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : BLEACHED", - "hsn_code": "55159220" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : DYED", - "hsn_code": "55159230" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : PRINTED", - "hsn_code": "55159240" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : MIXED\nMAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "55159290" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : OTHER :\nUNBLEACHED", - "hsn_code": "55159910" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : OTHER :\nBLEACHED", - "hsn_code": "55159920" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : OTHER : DYED", - "hsn_code": "55159930" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : OTHER :\nPRINTED", - "hsn_code": "55159940" - }, - { - "description": "OTHER WOVEN FABRICS OF SYNTHETIC STAPLE FIBRES - OTHER WOVEN FABRICS : OTHER :\nOTHER", - "hsn_code": "55159990" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : UNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55161110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : UNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55161120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : DYED", - "hsn_code": "55161200" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "55161300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : PRINTED : SPUN RAYON PRINTED SHANTUNG", - "hsn_code": "55161410" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : PRINTED : SPUN RAYON PRINTED LINEN", - "hsn_code": "55161420" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING 85% OR MORE BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES : PRINTED : OTHER", - "hsn_code": "55161490" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH MANMADE FILAMENTS :\nUNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55162110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH MANMADE FILAMENTS :\nUNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55162120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH MANMADE FILAMENTS : DYED", - "hsn_code": "55162200" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH MANMADE FILAMENTS : OF YARNS\nOF DIFFERENT COLOURS", - "hsn_code": "55162300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH MANMADE FILAMENTS : PRINTED", - "hsn_code": "55162400" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR :\nUNBLEACHED OR BLEACHED : UNBLEACHED", - "hsn_code": "55163110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR :\nUNBLEACHED OR BLEACHED : BLEACHED", - "hsn_code": "55163120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : DYED", - "hsn_code": "55163200" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR : OF\nYARNS OF DIFFERENT COLOURS", - "hsn_code": "55163300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH WOOL OR FINE ANIMAL HAIR :\nPRINTED", - "hsn_code": "55163400" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : UNBLEACHED", - "hsn_code": "55164110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH COTTON : UNBLEACHED OR\nBLEACHED : BLEACHED", - "hsn_code": "55164120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH COTTON : DYED", - "hsn_code": "55164200" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH COTTON : OF YARNS OF DIFFERENT\nCOLOURS", - "hsn_code": "55164300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - CONTAINING LESS THAN 85% BY WEIGHT OF\nARTIFICIAL STAPLE FIBRES, MIXED MAINLY OR SOLELY WITH COTTON : PRINTED", - "hsn_code": "55164400" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - OTHER : UNBLEACHED OR BLEACHED :\nUNBLEACHED", - "hsn_code": "55169110" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - OTHER : UNBLEACHED OR BLEACHED :\nBLEACHED", - "hsn_code": "55169120" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - OTHER : DYED", - "hsn_code": "55169200" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - OTHER : OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "55169300" - }, - { - "description": "WOVEN FABRICS OF ARTIFICIAL STAPLE FIBRES - OTHER : PRINTED", - "hsn_code": "55169400" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS SANITARY TOWELS AND TAMPONS,\nNAPKINS AND NAPKIN LINERS FOR BABIES AND SIMILAR SANITARY ARTICLES, OF WADDING", - "hsn_code": "56011000" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS - WADDING; OTHER ARTICLES OF\nWADDING : OF COTTON : ABSORBENT COTTON WOOL", - "hsn_code": "56012110" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS - WADDING; OTHER ARTICLES OF\nWADDING : OF COTTON : OTHER", - "hsn_code": "56012190" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS - WADDING; OTHER ARTICLES OF\nWADDING : OF MAN-MADE FIBRES", - "hsn_code": "56012200" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS - WADDING; OTHER ARTICLES OF\nWADDING : OTHER", - "hsn_code": "56012900" - }, - { - "description": "WADDING OF TEXTILE MATERIALS AND ARTICLES THEREOF; TEXTILE FIBRES, NOT EXCEEDING 5\nMM IN LENGTH (FLOCK), TEXTILE DUST AND MILL NEPS TEXTILE FLOCK AND DUST AND MILL\nNEPS", - "hsn_code": "56013000" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED NEEDLELOOM FELT\nAND STITCH-BONDED FIBRE FABRICS", - "hsn_code": "56021000" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER FELT, NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "56022100" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER FELT, NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED : - OF OTHER TEXTILE MATERIALS : FOR\nMACHINES OTHER THAN COTTON MACHINERY", - "hsn_code": "56022910" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER FELT, NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED : - OF OTHER TEXTILE MATERIALS : OF JUTE\n(INCLUDING BLENDED OR UNION JUTE), OTHER THAN FOR MACHINERY", - "hsn_code": "56022920" - }, - { - "description": "FELT, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER FELT, NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED : - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "56022990" - }, - { - "description": "FELT,WHETHER OR NOT IMPREGNATED, COATED,COVERED OR LAMINATED -OTHER -OF\nRUBBERISED COIR NEEDLED FELT", - "hsn_code": "56029010" - }, - { - "description": "FELT,WHETHER OR NOT IMPREGNATED, COATED,COVERED OR LAMINATED -OTHER - - - OTHER", - "hsn_code": "56029090" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OF MAN\nMADE FILAMENTS : WEIGHING NOT MORE THAN 25 G/M2", - "hsn_code": "56031100" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OF MAN\nMADE FILAMENTS : WEIGHING MORE THAN 25 G/M2 BUT NOT MORE THAN 70 G/M2", - "hsn_code": "56031200" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OF MAN\nMADE FILAMENTS : WEIGHING MORE THAN 70 G/M2 BUT NOT MORE THAN 150 G/M2", - "hsn_code": "56031300" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OF MAN\nMADE FILAMENTS : WEIGHING MORE THAN 150 G/M2", - "hsn_code": "56031400" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER :\nWEIGHING NOT MORE THAN 25 G/M2", - "hsn_code": "56039100" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER :\nWEIGHING MORE THAN 25 G/M2 BUT NOT MORE THAN 70 G/M2", - "hsn_code": "56039200" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER :\nWEIGHING MORE THAN 70 G/M2 BUT NOT MORE THAN 150 G/M2", - "hsn_code": "56039300" - }, - { - "description": "NONWOVENS, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED - OTHER :\nWEIGHING MORE THAN 150 G/M2", - "hsn_code": "56039400" - }, - { - "description": "RUBBER THREAD AND CORD, TEXTILE COVERED; TEXTILE YARN, AND STRIP AND THE LIKE OF\nHEADING 5404 OR 5405, IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR\nPLASTICS - RUBBER THREAD AND CORD, TEXTILE COVERED", - "hsn_code": "56041000" - }, - { - "description": "RUBBER THREAD AND CORD, TEXTILE COVERED; TEXTILE YARN, AND STRIP AND THE LIKE OF\nHEADING 5404 OR 5405, IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR\nPLASTICS - HIGH TENACITY YARN OF POLYESTERS, OF NYLON OR OTHER POLYAMIDES OR OF\nVISCOSE RAYON, IMPREGNATED OR COATED : IMITATION GUT (NYLON) FOR RACKETS", - "hsn_code": "56042010" - }, - { - "description": "RUBBER THREAD AND CORD, TEXTILE COVERED; TEXTILE YARN, AND STRIP AND THE LIKE OF\nHEADING 5404 OR 5405, IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR\nPLASTICS - HIGH TENACITY YARN OF POLYESTERS, OF NYLON OR OTHER POLYAMIDES OR OF\nVISCOSE RAYON, IMPREGNATED OR COATED : OTHER", - "hsn_code": "56042090" - }, - { - "description": "RUBBER THREAD AND CORD, TEXTILE COVERED; TEXTILE YARN, AND STRIP AND THE LIKE OF\nHEADING 5404 OR 5405, IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR\nPLASTICS - OTHER", - "hsn_code": "56049000" - }, - { - "description": "METALLISED YARN, WHETHER OR NOT GIMPED BEING TEXTILE YARN, OR STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM OF THREAD, STRIP OR POWDER\nOR COVERED WITH METAL - METALLISED YARN, WHETHER OR NOT GIMPED, BEING TEXTILE\nYARN, OR STRIP OR THE LIKE OF HEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM\nOF THREAD, STRIP OR POWDER OR COVERED WITH METAL : REAL ZARI THREAD (GOLD) AND\nSILVER THREAD COMBINED WITH TEXTILE THREAD", - "hsn_code": "56050010" - }, - { - "description": "METALLISED YARN, WHETHER OR NOT GIMPED BEING TEXTILE YARN, OR STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM OF THREAD, STRIP OR POWDER\nOR COVERED WITH METAL - METALLISED YARN, WHETHER OR NOT GIMPED, BEING TEXTILE\nYARN, OR STRIP OR THE LIKE OF HEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM\nOF THREAD, STRIP OR POWDER OR COVERED WITH METAL : IMITATION ZARI THREAD", - "hsn_code": "56050020" - }, - { - "description": "METALLISED YARN, WHETHER OR NOT GIMPED BEING TEXTILE YARN, OR STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM OF THREAD, STRIP OR POWDER\nOR COVERED WITH METAL - METALLISED YARN, WHETHER OR NOT GIMPED, BEING TEXTILE\nYARN, OR STRIP OR THE LIKE OF HEADING 5404 OR 5405, COMBINED WITH METAL IN THE FORM\nOF THREAD, STRIP OR POWDER OR COVERED WITH METAL : OTHER", - "hsn_code": "56050090" - }, - { - "description": "GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404 OR 5405, GIMPED (OTHER THAN\nTHOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN); CHENILLE YARN (INCLUDING FLOCK\nCHENILLE YARN); LOOP WALE-YARN - GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404\nOR 5405, GIMPED (OTHER THAN THOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN);\nCHENILLE YARN (INCLUDING FLOCK CHENILLE YARN); LOOP WALE-YARN : TRIMMINGS, OF\nCOTTON", - "hsn_code": "56060010" - }, - { - "description": "GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404 OR 5405, GIMPED (OTHER THAN\nTHOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN); CHENILLE YARN (INCLUDING FLOCK\nCHENILLE YARN); LOOP WALE-YARN - GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404\nOR 5405, GIMPED (OTHER THAN THOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN);\nCHENILLE YARN (INCLUDING FLOCK CHENILLE YARN); LOOP WALE-YARN : TRIMMINGS, OF MAN\nMADE FIBRES", - "hsn_code": "56060020" - }, - { - "description": "GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404 OR 5405, GIMPED (OTHER THAN\nTHOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN); CHENILLE YARN (INCLUDING FLOCK\nCHENILLE YARN); LOOP WALE-YARN - GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404\nOR 5405, GIMPED (OTHER THAN THOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN);\nCHENILLE YARN (INCLUDING FLOCK CHENILLE YARN); LOOP WALE-YARN : TRIMMINGS, OF ZARI", - "hsn_code": "56060030" - }, - { - "description": "GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404 OR 5405, GIMPED (OTHER THAN\nTHOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN); CHENILLE YARN (INCLUDING FLOCK\nCHENILLE YARN); LOOP WALE-YARN - GIMPED YARN, AND STRIP AND THE LIKE OF HEADING 5404\nOR 5405, GIMPED (OTHER THAN THOSE OF HEADING 5605 AND GIMPED HORSEHAIR YARN);\nCHENILLE YARN (INCLUDING FLOCK CHENILLE YARN); LOOP WALE-YARN : OTHER", - "hsn_code": "56060090" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF JUTE\nOR OTHER TEXTILE BAST FIBRES OF HEADING 5303 : CORDAGE, CABLE, ROPE AND TWINE OF\nJUTE", - "hsn_code": "56071010" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF JUTE\nOR OTHER TEXTILE BAST FIBRES OF HEADING 5303 : OTHER", - "hsn_code": "56071090" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF SISAL\nOR OTHER TEXTILE FIBRES OF THE GENUS AGAVE : BINDER OR BALER TWINE", - "hsn_code": "56072100" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF SISAL\nOR OTHER TEXTILE FIBRES OF THE GENUS AGAVE : OTHER", - "hsn_code": "56072900" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS OF\nABACA (MANILA HEMP OR MUSA TEXTILLIS NEE) OR OTHER HARD (LEAF) FIBRES", - "hsn_code": "56073000" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nPOLYETHYLENE OR POLYPROPYLENE : BINDER OR BALER TWINE", - "hsn_code": "56074100" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nPOLYETHYLENE OR POLYPROPYLENE : OTHER", - "hsn_code": "56074900" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nOTHER SYNTHETIC FIBRES : NYLON FISH NET TWINE", - "hsn_code": "56075010" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nOTHER SYNTHETIC FIBRES : NYLON TYRE CORD", - "hsn_code": "56075020" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nOTHER SYNTHETIC FIBRES : VISCOSE TYRE CORD", - "hsn_code": "56075030" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nOTHER SYNTHETIC FIBRES : NYLON ROPE", - "hsn_code": "56075040" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OF\nOTHER SYNTHETIC FIBRES : OTHER", - "hsn_code": "56075090" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OTHER :\nCOIR, CORDAGE AND ROPES, OTHER THAN OF COTTON", - "hsn_code": "56079010" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OTHER :\nCORDAGE, CABLE, ROPES AND TWINE, OF COTTON", - "hsn_code": "56079020" - }, - { - "description": "TWINE, CORDAGE, ROPES AND CABLES, WHETHER OR NOT PLAITED OR BRAIDED AND WHETHER\nOR NOT IMPREGNATED, COATED, COVERED OR SHEATHED WITH RUBBER OR PLASTICS - OTHER :\nOTHER", - "hsn_code": "56079090" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OF MAN-MADE TEXTILE MATERIALS : - MADE UP FISHING\nNETS : MADE UP FISHING NETS OF NYLON", - "hsn_code": "56081110" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OF MAN-MADE TEXTILE MATERIALS : - MADE UP FISHING\nNETS : OTHER", - "hsn_code": "56081190" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OF MAN-MADE TEXTILE MATERIALS : OTHER", - "hsn_code": "56081900" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OTHER : OF COTTON", - "hsn_code": "56089010" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OTHER : OF JUTE", - "hsn_code": "56089020" - }, - { - "description": "KNOTTED NETTING OF TWINE, CORDAGE OR ROPE; MADE UP FISHING NETS AND OTHER MADE\nUP NETS, OF TEXTILE MATERIALS - OTHER : OTHER", - "hsn_code": "56089090" - }, - { - "description": "ARTICLES OF YARN, STRIP OR THE LIKE OF HEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR\nCABLES, NOT ELSEWHERE SPECIFIED OR INCLUDED - ARTICLES OF YARN, STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR CABLES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED : PRODUCTS OF COIR", - "hsn_code": "56090010" - }, - { - "description": "ARTICLES OF YARN, STRIP OR THE LIKE OF HEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR\nCABLES, NOT ELSEWHERE SPECIFIED OR INCLUDED - ARTICLES OF YARN, STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR CABLES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED : ARTICLES MADE UP OF COTTON YARN", - "hsn_code": "56090020" - }, - { - "description": "ARTICLES OF YARN, STRIP OR THE LIKE OF HEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR\nCABLES, NOT ELSEWHERE SPECIFIED OR INCLUDED - ARTICLES OF YARN, STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR CABLES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED : ARTICLES MADE UP OF JUTE", - "hsn_code": "56090030" - }, - { - "description": "ARTICLES OF YARN, STRIP OR THE LIKE OF HEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR\nCABLES, NOT ELSEWHERE SPECIFIED OR INCLUDED - ARTICLES OF YARN, STRIP OR THE LIKE OF\nHEADING 5404 OR 5405, TWINE, CORDAGE, ROPE OR CABLES, NOT ELSEWHERE SPECIFIED OR\nINCLUDED : OTHER", - "hsn_code": "56090090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, KNOTTED, WHETHER OR NOT MADE UP - OF\nWOOL OR FINE ANIMAL HAIR", - "hsn_code": "57011000" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, KNOTTED, WHETHER OR NOT MADE UP - OF\nOTHER TEXTILE MATERIALS : OF COTTON", - "hsn_code": "57019010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, KNOTTED, WHETHER OR NOT MADE UP - OF\nCOIR INCLUDING GEO TEXTILE", - "hsn_code": "57019020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, KNOTTED, WHETHER OR NOT MADE UP - OF\nOTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "57019090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND-WOVEN RUGS", - "hsn_code": "57021000" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - FLOOR COVERINGS OF COCONUT FIBRES (COIR) : COIR MATTING, WOVEN", - "hsn_code": "57022010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - FLOOR COVERINGS OF COCONUT FIBRES (COIR) : COIR CARPETS AND OTHER RUGS", - "hsn_code": "57022020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - FLOOR COVERINGS OF COCONUT FIBRES (COIR) : OTHER", - "hsn_code": "57022090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nCARPETS", - "hsn_code": "57023110" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nDRUGGETS", - "hsn_code": "57023120" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nMATS AND MATTING", - "hsn_code": "57023130" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nCARPETING , FLOOR RUGS AND THE LIKE", - "hsn_code": "57023140" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nOTHER", - "hsn_code": "57023190" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE MATERIAL :\nCARPETS, CARPETING AND RUGS AND THE LIKE", - "hsn_code": "57023210" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE MATERIAL :\nMATS AND MATTING", - "hsn_code": "57023220" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE MATERIAL :\nOTHER", - "hsn_code": "57023290" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS OTHER THAN DURRIES OF COTTON", - "hsn_code": "57023910" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS, OF SILK", - "hsn_code": "57023920" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR : CARPETS", - "hsn_code": "57024110" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nDRUGGETS", - "hsn_code": "57024120" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR : MATS\nAND MATTING", - "hsn_code": "57024130" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "57024140" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF MAN MADE TEXTILE MATERIALS :\nCARPETS, CARPETING AND RUGS", - "hsn_code": "57024210" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF MAN MADE TEXTILE MATERIALS : MATS\nAND MATTINGS", - "hsn_code": "57024220" - }, - { - "description": "CARPETS, RUGS AND MATS OF HANDLOOM", - "hsn_code": "57024230" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF MAN MADE TEXTILE MATERIALS : OTHER", - "hsn_code": "57024290" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS : CARPETS\nAND OTHER FLOOR COVERINGS OTHER THAN DURRIES OF COTTON", - "hsn_code": "57024910" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS : CARPETS\nAND OTHER FLOOR COVERINGS, OF SILK", - "hsn_code": "57024920" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "57024990" - }, - { - "description": "CARPETS, CARPETING AND RUGS - OF MAN MADE TEXTILE MATERIALS", - "hsn_code": "57025021" - }, - { - "description": "MATS AND MATTING - OF MAN-MADE TEXTILE MATERIALS", - "hsn_code": "57025022" - }, - { - "description": "OTHERS - NOT ELSEWHERE SPECIFIED - OF MAN-MADE TEXTILE MATERIALS", - "hsn_code": "57025029" - }, - { - "description": "CARPETS AND OTHER FLOOR COVERINGS, OF COTTON OTHER THAN DURRIES - OF OTHER\nTEXTILE MATERIALS", - "hsn_code": "57025031" - }, - { - "description": "CARPETS AND OTHER FLOOR COVERINGS, OF SILK", - "hsn_code": "57025032" - }, - { - "description": "PLACE MAT AND OTHER SIMILAR GOODS - OF OTHER TEXTILE MATERIALS", - "hsn_code": "57025033" - }, - { - "description": "OTHERS NOT ELSEWHERE SPECIFIED - OF OTHER TEXTILE MATERIALS", - "hsn_code": "57025039" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nCARPETS", - "hsn_code": "57025110" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nDRUGGETS", - "hsn_code": "57025120" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nMATS AND MATTING", - "hsn_code": "57025130" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nOTHER", - "hsn_code": "57025140" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE\nMATERIALS : CARPETS, CARPETING AND RUGS", - "hsn_code": "57025210" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE\nMATERIALS : MATS AND MATTINGS", - "hsn_code": "57025220" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF MAN - MADE TEXTILE\nMATERIALS : OTHER", - "hsn_code": "57025290" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS, OF COTTON OTHER THAN DURRIE", - "hsn_code": "57025910" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS, OF SILK", - "hsn_code": "57025920" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nPLACE MAT AND OTHER SIMILAR GOODS", - "hsn_code": "57025930" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, NOT MADE UP : OF OTHER TEXTILE MATERIALS :\nOTHER", - "hsn_code": "57025990" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nCARPETS", - "hsn_code": "57029110" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nDRUGGETS", - "hsn_code": "57029120" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nMATS AND MATTING", - "hsn_code": "57029130" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF WOOL OR FINE ANIMAL HAIR :\nOTHER", - "hsn_code": "57029140" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF MAN - MADE TEXTILE MATERIALS :\nCARPETS, CARPETING AND RUGS", - "hsn_code": "57029210" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF MAN - MADE TEXTILE MATERIALS :\nMATS AND MATTINGS", - "hsn_code": "57029220" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF MAN - MADE TEXTILE MATERIALS :\nOTHER", - "hsn_code": "57029290" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS, OF COTTON OTHER THAN DURRIES", - "hsn_code": "57029910" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS :\nCARPETS AND OTHER FLOOR COVERINGS, OF SILK", - "hsn_code": "57029920" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WOVEN, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP, INCLUDING KELEM, SCHUMACKS, KARAMANIE AND SIMILAR HAND - WOVEN\nRUGS - OTHER, NOT OF PILE CONSTRUCTION, MADE UP : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "57029990" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nWOOL OR FINE ANIMAL HAIR : CARPETS", - "hsn_code": "57031010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nWOOL OR FINE ANIMAL HAIR : MATS AND MATTING", - "hsn_code": "57031020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nWOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "57031090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nNYLON OR OTHER POLYAMIDES : CARPETS, CARPETING AND RUGS", - "hsn_code": "57032010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nNYLON OR OTHER POLYAMIDES : 100% POLYAMIDE TUFTED VELOUR, CUT PILE OR LOOP PILE\nCARPET MATS WITH JUTE, RUBBER LATEX OR PU FOAM BACKING", - "hsn_code": "57032020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nNYLON OR OTHER POLYAMIDES : OTHER", - "hsn_code": "57032090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nOTHER MAN - MADE TEXTILE MATERIALS : CARPETS, CARPETING AND RUGS", - "hsn_code": "57033010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nOTHER MAN - MADE TEXTILE MATERIALS : 100% POLYPROPYLENE CARPET MATS WITH JUTE,\nRUBBER, LATEX OR PU FOAM BACKING", - "hsn_code": "57033020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nOTHER MAN - MADE TEXTILE MATERIALS : OTHER", - "hsn_code": "57033090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nOTHER TEXTILE MATERIALS : CARPETS AND OTHER FLOOR COVERINGS, OF COTTON, OTHER\nTHAN DURRIES", - "hsn_code": "57039010" - }, - { - "description": "CARPETS AND FLOOR COVERINGS OF COIR", - "hsn_code": "57039020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, TUFTED, WHETHER OR NOT MADE UP - OF\nOTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "57039090" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, OF FELT, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP - TILES, HAVING A MAXIMUM SURFACE AREA OF 0.3 M2", - "hsn_code": "57041000" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, OF FELT, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP - OTHER : COTTON", - "hsn_code": "57049010" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, OF FELT, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP - OTHER : WOOLLEN, OTHER THAN ARTWARE", - "hsn_code": "57049020" - }, - { - "description": "CARPETS AND OTHER TEXTILE FLOOR COVERINGS, OF FELT, NOT TUFTED OR FLOCKED, WHETHER\nOR NOT MADE UP - OTHER : OTHER", - "hsn_code": "57049090" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : CARPETS : OF\nSILK", - "hsn_code": "57050011" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : CARPETS :\nOTHER", - "hsn_code": "57050019" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : DURRIES :\nDURRIES COTTON", - "hsn_code": "57050021" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : DURRIES :\nDURRIES OF MAN-MADE FIBRES", - "hsn_code": "57050022" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : DURRIES :\nDURRIES OF WOOL", - "hsn_code": "57050023" - }, - { - "description": "COTTON DURRIES OF HANDLOOM (INCLUDING CHINDI DURRIES, COTTON CHENILLE DURRIES,\nRAG RUG DURRIE, PRINTED DURRIES, DRUGGETS)", - "hsn_code": "57050024" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : DURRIES :\nOTHER", - "hsn_code": "57050029" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : OF JUTE : OF\nBLENDED JUTE", - "hsn_code": "57050031" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : OF JUTE : OF\nCOIR JUTE", - "hsn_code": "57050032" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : OF JUTE :\nOTHER", - "hsn_code": "57050039" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : CARPETS,\nCARPETING, RUGS, MATS AND MATTINGS : KNITTED", - "hsn_code": "57050041" - }, - { - "description": "MATS AND MATTINGS INCLUDING BATH MATS, WHERE COTTON PREDOMINATES BY WEIGHT, OF\nHANDLOOM, COTTON RUGS OF HANDLOOM", - "hsn_code": "57050042" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : CARPETS,\nCARPETING, RUGS, MATS AND MATTINGS : OTHER", - "hsn_code": "57050049" - }, - { - "description": "OTHER CARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP - OTHER\nCARPETS AND OTHER TEXTILE FLOOR COVERINGS, WHETHER OR NOT MADE UP : OTHER", - "hsn_code": "57050090" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "58011000" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON:UNCUT WEFT PILE FABRICS", - "hsn_code": "58012100" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON:- CUT CORDUROY: SOLELY OF COTTON", - "hsn_code": "58012210" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON:- CUT CORDUROY:OTHER", - "hsn_code": "58012290" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON:OTHER WEFT PILE FABRICS", - "hsn_code": "58012300" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON:CHENILLE FABRICS", - "hsn_code": "58012600" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON--WARP PILE FABRICS---WARP PILE FABRICS,\"EPINGLE\"(UNCUT)", - "hsn_code": "58012710" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON--WARP PILE FABRICS---WARP PILE FABRICS,CUT", - "hsn_code": "58012720" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON--WARP PILE FABRICS---OTHER", - "hsn_code": "58012790" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF MAN-MADE FIBRES: UNCUT WEFT PILE FABRICS", - "hsn_code": "58013100" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF MAN-MADE FIBRES: CUT CORDUROY", - "hsn_code": "58013200" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF MAN-MADE FIBRES: OTHER WEFT PILE FABRICS", - "hsn_code": "58013300" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF MAN-MADE FIBRES: - CHENILLE FABRICS:CARDUROYS", - "hsn_code": "58013610" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF MAN-MADE FIBRES: - CHENILLE FABRICS:OTHER", - "hsn_code": "58013690" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806-\nWARP PILE FABRICS--WARP PILE FABRICS, UNCUT", - "hsn_code": "58013710" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON--WARP PILE FABRICS---WARP PILE FABRICS,CUT", - "hsn_code": "58013720" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806\n- OF COTTON--WARP PILE FABRICS---OTHER", - "hsn_code": "58013790" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806-\nOF OTHER TEXTILE MATERIALS:PILE FABRICS AND CHENILLE FABRICS OF SILK CONTAINING MORE\nTHAN 50% BY WEIGHT OF SILK, BUT NOT CONTAINING WOOL OR HAIR", - "hsn_code": "58019010" - }, - { - "description": "WOVEN PILE FABRICS AND CHENILLE FABRICS, OTHER THAN FABRICS OF HEADING 5802 OR 5806-\nOF OTHER TEXTILE MATERIALS:PILE FABRICS AND CHENILLE FABRICS NOT ELSEWHERE SPECIFIED\nOR INCLUDED", - "hsn_code": "58019090" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON:UNBLEACHED", - "hsn_code": "58021100" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON: - OTHER:BLEACHED", - "hsn_code": "58021910" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON: - OTHER:PIECE DYED", - "hsn_code": "58021920" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON: - OTHER:YARN DYED", - "hsn_code": "58021930" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON: - OTHER:PRINTED", - "hsn_code": "58021940" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON - OF HANDLOOM", - "hsn_code": "58021950" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF COTTON: - OTHER:OTHER", - "hsn_code": "58021990" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TERRY\nTOWELLING AND SIMILAR WOVEN TERRY FABRICS, OF OTHER TEXTILE MATERIALS", - "hsn_code": "58022000" - }, - { - "description": "TERRY TOWELLING AND SIMILAR WOVEN TERRY FABRICS, OTHER THAN NARROW FABRICS OF\nHEADING 5806; TUFTED TEXTILE FABRICS, OTHER THAN PRODUCTS OF HEADING 5703 - TUFTED\nTEXTILE FABRICS", - "hsn_code": "58023000" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON:---- UNBLEACHED", - "hsn_code": "58030011" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON: ---- BLEACHED", - "hsn_code": "58030012" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON: ---- PIECE DYED", - "hsn_code": "58030013" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON: ---- YARN DYED", - "hsn_code": "58030014" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON: ---- PRINTED", - "hsn_code": "58030015" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF COTTON: ---- OTHER", - "hsn_code": "58030019" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF OTHER TEXTILE MATERIALS: ---- OF SILK OR SILK WASTE", - "hsn_code": "58030091" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF OTHER TEXTILE MATERIALS :---- OF SYNTHETIC FIBRE", - "hsn_code": "58030092" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF OTHER TEXTILE MATERIALS: ----OF ARTIFICIAL FIBRE", - "hsn_code": "58030093" - }, - { - "description": "GAUZE,OTHER THAN NARROW FABRICS OF HEADING 5806 - GAUZE, OTHER THAN NARROW\nFABRICS OF HEADING 5806 --- OF OTHER TEXTILE MATERIALS : ---- OTHER", - "hsn_code": "58030099" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:UNBLEACHED", - "hsn_code": "58031010" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:BLEACHED", - "hsn_code": "58031020" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:PIECE DYED", - "hsn_code": "58031030" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:YARN DYED", - "hsn_code": "58031040" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:PRINTED", - "hsn_code": "58031050" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF COTTON:OTHER", - "hsn_code": "58031090" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF OTHER TEXTILE\nMATERIALS:OF SILK OR SILK WASTE", - "hsn_code": "58039010" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF OTHER TEXTILE\nMATERIALS:OF SYNTHETIC FIBER", - "hsn_code": "58039020" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF OTHER TEXTILE\nMATERIALS:OF ARTIFICIAL FIBRE", - "hsn_code": "58039030" - }, - { - "description": "GAUZE, OTHER THAN NARROW FABRICS OF HEADING 5806 5803 10 - OF OTHER TEXTILE\nMATERIALS:OTHER", - "hsn_code": "58039090" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO\n6006TULLES AND OTHER NET FABRICS:OF COTTON", - "hsn_code": "58041010" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO\n6006TULLES AND OTHER NET FABRICS:OTHER", - "hsn_code": "58041090" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO 6006-\nMECHANICALLY MADE LACE: OF MAN-MADE FIBRES", - "hsn_code": "58042100" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO 6006-\nMECHANICALLY MADE LACE:- OF OTHER TEXTILE MATERIALS:OF COTTON", - "hsn_code": "58042910" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO 6006-\nMECHANICALLY MADE LACE:- OF OTHER TEXTILE MATERIALS:OTHER", - "hsn_code": "58042990" - }, - { - "description": "TULLES AND OTHER NET FABRICS, NOT INCLUDING WOVEN, KNITTED OR CROCHETED FABRICS;\nLACE IN THE PIECE, IN STRIPS OR IN MOTIFS, OTHER THAN FABRICS OF HEADINGS 6002 TO 6006 -\nHAND-MADE LACE", - "hsn_code": "58043000" - }, - { - "description": "HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS, FLANDERS, AUBUSSON, BEAUVAIS AND THE\nLIKE, AND NEEDLE - WORKED TAPESTRIES (FOR EXAMPLE, PETIT POINT, CROSS STITCH),\nWHETHER OR NOT MADE UP 5805 00 - HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS,\nFLANDERS, AUBUSSON, BEAUVAIS AND THE LIKE, AND NEEDLE - WORKED TAPESTRIES (FOR\nEXAMPLE, PETIT POINT, CROSS STITCH), WHETHER OR NOT MADE UP:TAPESTRIES HAND MADE\nOR NEEDLE WORKED BY HAND, OF COTTON", - "hsn_code": "58050010" - }, - { - "description": "HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS, FLANDERS, AUBUSSON, BEAUVAIS AND THE\nLIKE, AND NEEDLE - WORKED TAPESTRIES (FOR EXAMPLE, PETIT POINT, CROSS STITCH),\nWHETHER OR NOT MADE UP 5805 00 - HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS,\nFLANDERS, AUBUSSON, BEAUVAIS AND THE LIKE, AND NEEDLE - WORKED TAPESTRIES (FOR\nEXAMPLE, PETIT POINT, CROSS STITCH), WHETHER OR NOT MADE UP:TAPESTRIES OF JUTE", - "hsn_code": "58050020" - }, - { - "description": "HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS, FLANDERS, AUBUSSON, BEAUVAIS AND THE\nLIKE, AND NEEDLE - WORKED TAPESTRIES (FOR EXAMPLE, PETIT POINT, CROSS STITCH),\nWHETHER OR NOT MADE UP 5805 00 - HAND - WOVEN TAPESTRIES OF THE TYPE GOBELINS,\nFLANDERS, AUBUSSON, BEAUVAIS AND THE LIKE, AND NEEDLE - WORKED TAPESTRIES (FOR\nEXAMPLE, PETIT POINT, CROSS STITCH), WHETHER OR NOT MADE UP:OTHER", - "hsn_code": "58050090" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS) -\nWOVEN PILE FABRICS (INCLUDING TERRY TOWELLING AND SIMILAR TERRY FABRICS) AND\nCHENILLE FABRICS", - "hsn_code": "58061000" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS) -\nOTHER WOVEN FABRICS, CONTAINING BY WEIGHT 5% OR MORE OF ELASTOMERIC YARN OR\nRUBBER THREAD", - "hsn_code": "58062000" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF COTTON:TYPEWRITER RIBBON CLOTH", - "hsn_code": "58063110" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF COTTON:NEWAR COTTON", - "hsn_code": "58063120" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF COTTON:OTHER", - "hsn_code": "58063190" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: OF MAN-MADE FIBRES", - "hsn_code": "58063200" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF OTHER TEXTILE MATERIALS:GOAT HAIR PUTTIS TAPE", - "hsn_code": "58063910" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF OTHER TEXTILE MATERIALS: JUTE WEBBING", - "hsn_code": "58063920" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF OTHER TEXTILE MATERIALS: OTHER NARROW FABRICS OF JUTE", - "hsn_code": "58063930" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS)-\nOTHER WOVEN FABRICS: - OF OTHER TEXTILE MATERIALS:OTHER", - "hsn_code": "58063990" - }, - { - "description": "NARROW WOVEN FABRICS OTHER THAN GOODS OF HEADING 5807; NARROW FABRICS\nCONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE (BOLDUCS) -\nFABRICS CONSISTING OF WARP WITHOUT WEFT ASSEMBLED BY MEANS OF AN ADHESIVE\n(BOLDUCS)", - "hsn_code": "58064000" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT\nTO SHAPE OR SIZE, NOT EMBROIDERED - WOVEN:OF COTTON", - "hsn_code": "58071010" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT\nTO SHAPE OR SIZE, NOT EMBROIDERED - WOVEN:OF MAN-MADE FIBRE", - "hsn_code": "58071020" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT\nTO SHAPE OR SIZE, NOT EMBROIDERED - WOVEN:OTHER", - "hsn_code": "58071090" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT\nTO SHAPE OR SIZE, NOT EMBROIDERED - OTHER:FELT OR NON-WOVEN", - "hsn_code": "58079010" - }, - { - "description": "LABELS, BADGES AND SIMILAR ARTICLES OF TEXTILE MATERIALS, IN THE PIECE, IN STRIPS OR CUT\nTO SHAPE OR SIZE, NOT EMBROIDERED - OTHER:OTHER", - "hsn_code": "58079090" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - BRAIDS, IN THE\nPIECE:OF COTTON", - "hsn_code": "58081010" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - BRAIDS, IN THE\nPIECE:OTHER", - "hsn_code": "58081090" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER:TAPES,\nORNAMENTAL OR COTTON", - "hsn_code": "58089010" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER:HAIR BAND\nOF NARROW FABRICS", - "hsn_code": "58089020" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER:OTHER\nBRAIDS", - "hsn_code": "58089030" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER:RIBBONS\nOF RAYON WITH ORNAMENTAL TRIMMINGS", - "hsn_code": "58089040" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER:SAREE\nFALLS, BORDERS (OTHER THAN ZARI), FRINGS OF COTTON", - "hsn_code": "58089050" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER: SAREE\nFALLS, BORDERS (OTHER THAN ZARI), FRINGS OF MAN-MADE FIBRE", - "hsn_code": "58089060" - }, - { - "description": "BRAIDS IN THE PIECE; ORNAMENTAL TRIMMINGS IN THE PIECE, WITHOUT EMBROIDERY, OTHER\nTHAN KNITTED OR CROCHETED; TASSELS, POMPONS AND SIMILAR ARTICLES - OTHER: OTHER", - "hsn_code": "58089090" - }, - { - "description": "WOVEN FABRICS OF METAL THREAD AND WOVEN FABRICS OF METALLISED YARN OF HEADING\n5605, OF A KIND USED IN APPAREL, AS FURNISHING FABRICS OR FOR SIMILAR PURPOSES, NOT\nELSEWHERE SPECIFIED OR INCLUDED - WOVEN FABRICS OF METAL THREAD AND WOVEN\nFABRICS OF METALLISED YARN OF HEADING 5605, OF A KIND USED IN APPAREL, AS FURNISHING\nFABRICS OR FOR SIMILAR PURPOSES, NOT ELSEWHERE SPECIFIED OR INCLUDED:ZARI BORDER", - "hsn_code": "58090010" - }, - { - "description": "WOVEN FABRICS OF METAL THREAD AND WOVEN FABRICS OF METALLISED YARN OF HEADING\n5605, OF A KIND USED IN APPAREL, AS FURNISHING FABRICS OR FOR SIMILAR PURPOSES, NOT\nELSEWHERE SPECIFIED OR INCLUDED - WOVEN FABRICS OF METAL THREAD AND WOVEN\nFABRICS OF METALLISED YARN OF HEADING 5605, OF A KIND USED IN APPAREL, AS FURNISHING\nFABRICS OR FOR SIMILAR PURPOSES, NOT ELSEWHERE SPECIFIED OR INCLUDED:OTHER", - "hsn_code": "58090090" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS - EMBROIDERY WITHOUT VISIBLE GROUND", - "hsn_code": "58101000" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS - OTHER EMBROIDERY: OF COTTON", - "hsn_code": "58109100" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS - OTHER EMBROIDERY: - OF MAN-MADE\nFIBRES :EMBROIDERED BADGES, MOTIFS AND THE LIKE", - "hsn_code": "58109210" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS - OTHER EMBROIDERY: - OF MAN-MADE\nFIBRES :OTHER", - "hsn_code": "58109290" - }, - { - "description": "EMBROIDERY IN THE PIECE, IN STRIPS OR IN MOTIFS - OTHER EMBROIDERY: OF OTHER TEXTILE\nMATERIALS", - "hsn_code": "58109900" - }, - { - "description": "QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF ONE OR MORE LAYERS OF TEXTILE\nMATERIALS ASSEMBLED WITH PADDING BY STITCHING OR OTHERWISE, OTHER THAN\nEMBROIDERY OF HEADING 5810 - QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF\nONE OR MORE LAYERS OF TEXTILE MATERIALS ASSEMBLED WITH PADDING BY STITCHING OR\nOTHERWISE, OTHER THAN EMBROIDERY OF HEADING 5810:KANTHA (MULTILAYER STITCHED\nTEXTILE FABRICS IN PIECE USED FOR BEDDING, MATTRESS PADS OR CLOTHING)", - "hsn_code": "58110010" - }, - { - "description": "QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF ONE OR MORE LAYERS OF TEXTILE\nMATERIALS ASSEMBLED WITH PADDING BY STITCHING OR OTHERWISE, OTHER THAN\nEMBROIDERY OF HEADING 5810 - QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF\nONE OR MORE LAYERS OF TEXTILE MATERIALS ASSEMBLED WITH PADDING BY STITCHING OR\nOTHERWISE, OTHER THAN EMBROIDERY OF HEADING 5810:QUILTED WADDING", - "hsn_code": "58110020" - }, - { - "description": "QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF ONE OR MORE LAYERS OF TEXTILE\nMATERIALS ASSEMBLED WITH PADDING BY STITCHING OR OTHERWISE, OTHER THAN\nEMBROIDERY OF HEADING 5810 - QUILTED TEXTILE PRODUCTS IN THE PIECE, COMPOSED OF\nONE OR MORE LAYERS OF TEXTILE MATERIALS ASSEMBLED WITH PADDING BY STITCHING OR\nOTHERWISE, OTHER THAN EMBROIDERY OF HEADING 5810:OTHER", - "hsn_code": "58110090" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nTEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE : OF COTTON", - "hsn_code": "59011010" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nTEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE : PREPARED PAINTING CANVAS", - "hsn_code": "59011020" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nTEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE : OTHER", - "hsn_code": "59011090" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nOTHER : TRACING CLOTH OF COTTON", - "hsn_code": "59019010" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nOTHER : VARNISHED CAMBRIC FABRICS (EMPIRE FABRICS) TAPES", - "hsn_code": "59019020" - }, - { - "description": "TEXTILE FABRICS COATED WITH GUM OR AMYLACEOUS SUBSTANCES, OF A KIND USED FOR THE\nOUTER COVERS OF BOOKS OR THE LIKE; TRACING CLOTH; PREPARED PAINTING CANVAS;\nBUCKRAM AND SIMILAR STIFFENED TEXTILE FABRICS OF A KIND USED FOR HAT FOUNDATIONS -\nOTHER : OTHER", - "hsn_code": "59019090" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OF NYLON OR OTHER POLYAMIDES : IMPREGNATED WITH RUBBER", - "hsn_code": "59021010" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OF NYLON OR OTHER POLYAMIDES : OTHER", - "hsn_code": "59021090" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OF POLYESTERS : IMPREGNATED WITH RUBBER", - "hsn_code": "59022010" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OF POLYESTERS : OTHER", - "hsn_code": "59022090" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OTHER : IMPREGNATED WITH RUBBER", - "hsn_code": "59023010" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OTHER : OTHER", - "hsn_code": "59023090" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OTHER : IMPREGNATED WITH RUBBER", - "hsn_code": "59029010" - }, - { - "description": "TYRE CORD FABRIC OF HIGH TENACITY YARN OF NYLON OR OTHER POLYAMIDES, POLYESTERS OR\nVISCOSE RAYON - OTHER : OTHER", - "hsn_code": "59029090" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902- WITH POLYVINYL CHLORIDE : IMITATION LEATHER FABRICS OF\nCOTTON", - "hsn_code": "59031010" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902- WITH POLYVINYL CHLORIDE : OTHER", - "hsn_code": "59031090" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902- WITH POLYURETHANE : IMITATION LEATHER FABRICS, OF\nCOTTON", - "hsn_code": "59032010" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902- WITH POLYURETHANE : OTHER", - "hsn_code": "59032090" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902 - OTHER : OF COTTON", - "hsn_code": "59039010" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902 - OTHER : POLYETHYLENE LAMINATED JUTE FABRICS", - "hsn_code": "59039020" - }, - { - "description": "TEXTILE FABRICS, IMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OTHER\nTHAN THOSE OF HEADING 5902 - OTHER : OTHER", - "hsn_code": "59039090" - }, - { - "description": "LINOLEUM, WHETHER OR NOT CUT TO SHAPE; FLOOR COVERINGS CONSISTING OF A COATING\nOR COVERING APPLIED ON A TEXTILE BACKING, WHETHER OR NOT CUT TO SHAPE - LINOLEUM", - "hsn_code": "59041000" - }, - { - "description": "LINOLEUM, WHETHER OR NOT CUT TO SHAPE; FLOOR COVERINGS CONSISTING OF A COATING\nOR COVERING APPLIED ON A TEXTILE BACKING, WHETHER OR NOT CUT TO SHAPE - OTHER :\nFLOOR COVERINGS WITH JUTE BASE", - "hsn_code": "59049010" - }, - { - "description": "LINOLEUM, WHETHER OR NOT CUT TO SHAPE; FLOOR COVERINGS CONSISTING OF A COATING\nOR COVERING APPLIED ON A TEXTILE BACKING, WHETHER OR NOT CUT TO SHAPE - OTHER :\nOTHER", - "hsn_code": "59049090" - }, - { - "description": "TEXTILE WALL COVERINGS - TEXTILE WALL COVERINGS : FIXED ON THE BACKING OF ANY\nMATERIAL", - "hsn_code": "59050010" - }, - { - "description": "TEXTILE WALL COVERINGS - TEXTILE WALL COVERINGS : OTHER", - "hsn_code": "59050090" - }, - { - "description": "TEXTILE WALL COVERINGS - TEXTILE WALL COVERINGS : FIXED ON THE BACKING OF ANY\nMATERIAL", - "hsn_code": "59051010" - }, - { - "description": "TEXTILE WALL COVERINGS - TEXTILE WALL COVERINGS : OTHER", - "hsn_code": "59051090" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - ADHESIVE TAPE OF A\nWIDTH NOT EXCEEDING 20 CM", - "hsn_code": "59061000" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - OTHER : - KNITTED OR\nCROCHETED : OF COTTON", - "hsn_code": "59069110" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - OTHER : - KNITTED OR\nCROCHETED : OF OTHER TEXTILE MATERIALS", - "hsn_code": "59069190" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - OTHER : - OTHER :\nINSULATING TAPE, ELECTRICAL OF COTTON", - "hsn_code": "59069910" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - OTHER : - OTHER :\nRUBBERISED COTTON FABRICS, OTHER THAN KNITTED OR CROCHETED", - "hsn_code": "59069920" - }, - { - "description": "RUBBERISED TEXTILE FABRICS, OTHER THAN THOSE OF HEADING 5902 - OTHER : - OTHER :\nOTHER", - "hsn_code": "59069990" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - FABRICS COVERED PARTIALLY OR FULLY WITH TEXTILE FLOCKS, OR\nWITH PREPARATION CONTAINING TEXTILE FLOCKS : ON THE BASE FABRICS OF COTTON", - "hsn_code": "59070011" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - FABRICS COVERED PARTIALLY OR FULLY WITH TEXTILE FLOCKS, OR\nWITH PREPARATION CONTAINING TEXTILE FLOCKS : ON THE BASE FABRICS OF MAN-MADE\nTEXTILE MATERIAL", - "hsn_code": "59070012" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - FABRICS COVERED PARTIALLY OR FULLY WITH TEXTILE FLOCKS, OR\nWITH PREPARATION CONTAINING TEXTILE FLOCKS : ON BASE FABRICS OF OTHER TEXTILE\nMATERIALS", - "hsn_code": "59070019" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - OTHER : COTTON FABRICS COATED OR IMPREGNATED WITH OIL\nOR PREPARATIONS WITH BASIS OF DRYING OIL", - "hsn_code": "59070091" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - OTHER : OTHER TEXTILE FABRICS COATED OR IMPREGNATED\nWITH OIL OR OIL PREPARATIONS", - "hsn_code": "59070092" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - OTHER : JUTE FABRICS OTHERWISE IMPREGNATED OR COATED", - "hsn_code": "59070093" - }, - { - "description": "TEXTILE FABRICS OTHERWISE IMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING\nTHEATRICAL SCENERY, STUDIO BACK - CLOTHS OR THE LIKE - TEXTILE FABRICS OTHERWISE\nIMPREGNATED, COATED OR COVERED; PAINTED CANVAS BEING THEATRICAL SCENERY, STUDIO\nBACK - CLOTHS OR THE LIKE : - OTHER : OTHER", - "hsn_code": "59070099" - }, - { - "description": "TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS, STOVES, LIGHTERS, CANDLES OR THE\nLIKE; INCANDESCENT GAS MANTLES AND TUBULAR KNITTED GAS MANTLE FABRIC THEREFOR,\nWHETHER OR NOT IMPREGNATED - TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS,\nSTOVES, LIGHTERS, CANDLES OR THE LIKE; INCANDESCENT GAS MANTLES AND TUBULAR\nKNITTED GAS MANTLE FABRIC THEREFOR, WHETHER OR NOT IMPREGNATED : WICKS AND GAS\nMANTLE FABRICS, OF COTTON", - "hsn_code": "59080010" - }, - { - "description": "TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS, STOVES, LIGHTERS, CANDLES OR THE\nLIKE; INCANDESCENT GAS MANTLES AND TUBULAR KNITTED GAS MANTLE FABRIC THEREFOR,\nWHETHER OR NOT IMPREGNATED - TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS,\nSTOVES, LIGHTERS, CANDLES OR THE LIKE; INCANDESCENT GAS MANTLES AND TUBULAR\nKNITTED GAS MANTLE FABRIC THEREFOR, WHETHER OR NOT IMPREGNATED : GAS MANTLES OF\nRAYON", - "hsn_code": "59080020" - }, - { - "description": "TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS, STOVES, LIGHTERS, CANDLES OR THE\nLIKE; INCANDESCENT GAS MANTLES AND TUBULAR KNITTED GAS MANTLE FABRIC THEREFOR,\nWHETHER OR NOT IMPREGNATED - TEXTILE WICKS, WOVEN, PLAITED OR KNITTED, FOR LAMPS,\nSTOVES, LIGHTERS, CANDLES OR THE LIKE; INCANDESCENT GAS MANTLES AND TUBULAR\nKNITTED GAS MANTLE FABRIC THEREFOR, WHETHER OR NOT IMPREGNATED : OTHER", - "hsn_code": "59080090" - }, - { - "description": "TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH OR WITHOUT LINING, ARMOUR OR\nACCESSORIES OF OTHER MATERIALS - TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH\nOR WITHOUT LINING, ARMOUR OR ACCESSORIES OF OTHER MATERIALS : OF COTTON", - "hsn_code": "59090010" - }, - { - "description": "TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH OR WITHOUT LINING, ARMOUR OR\nACCESSORIES OF OTHER MATERIALS - TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH\nOR WITHOUT LINING, ARMOUR OR ACCESSORIES OF OTHER MATERIALS : OF MAN-MADE FIBRE", - "hsn_code": "59090020" - }, - { - "description": "TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH OR WITHOUT LINING, ARMOUR OR\nACCESSORIES OF OTHER MATERIALS - TEXTILE HOSE PIPING AND SIMILAR TEXTILE TUBING, WITH\nOR WITHOUT LINING, ARMOUR OR ACCESSORIES OF OTHER MATERIALS : OF OTHER TEXTILE\nMATERIALS", - "hsn_code": "59090090" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : COTTON CANVAS PLY BELTING", - "hsn_code": "59100010" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : RUBBERISED COTTON BELTING", - "hsn_code": "59100020" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : OTHER TRANSMISSION,\nCONVEYER OR ELEVATOR BELTS OR BELTING OF COTTON", - "hsn_code": "59100030" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : HAIR BELTING", - "hsn_code": "59100040" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : FLAX CANVAS PLY BELTING", - "hsn_code": "59100050" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : FIBRE BELT CONVEYOR", - "hsn_code": "59100060" - }, - { - "description": "TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE MATERIAL, WHETHER OR NOT\nIMPREGNATED, COATED, COVERED OR LAMINATED WITH PLASTICS, OR REINFORCED WITH\nMETAL OR OTHER MATERIAL - TRANSMISSION OR CONVEYOR BELTS OR BELTING, OF TEXTILE\nMATERIAL, WHETHER OR NOT IMPREGNATED, COATED, COVERED OR LAMINATED WITH\nPLASTICS, OR REINFORCED WITH METAL OR OTHER MATERIAL : OTHER", - "hsn_code": "59100090" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS, FELT AND FELT-LINED WOVEN FABRICS, COATED, COVERED OR LAMINATED\nWITH RUBBER, LEATHER OR OTHER MATERIAL, OF A KIND USED FOR CARD CLOTHING, AND\nSIMILAR FABRICS OF A KIND USED FOR OTHER TECHNICAL PURPOSES, INCLUDING NARROW\nFABRICS MADE OF VELVET IMPREGNATED WITH RUBBER, FOR COVERING WEAVING SPINDLES\n(WEAVING BEAMS)", - "hsn_code": "59111000" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- BOLTING CLOTH, WHETHER OR NOT MADE UP", - "hsn_code": "59112000" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : FELT FOR COTTON TEXTILE INDUSTRIES, WOVEN", - "hsn_code": "59113110" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : WOVEN TEXTILES FELT, WHETHER OR NOT IMPREGNATED OR\nCOATED, OF A KIND COMMONLY USED IN OTHER MACHINES", - "hsn_code": "59113120" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : COTTON FABRICS AND ARTICLES USED IN MACHINERY AND\nPLANT", - "hsn_code": "59113130" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : JUTE FABRICS AND ARTICLES USED IN MACHINERY OR PLANT", - "hsn_code": "59113140" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : TEXTILE FABRICS OF METALISED YARN OF A KIND COMMONLY\nUSED IN PAPER MAKING OR OTHERMACHINERY", - "hsn_code": "59113150" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING LESS THAN 650 G/ M2 : OTHER", - "hsn_code": "59113190" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : FELT FOR COTTON TEXTILE INDUSTRIES, WOVEN", - "hsn_code": "59113210" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : WOVEN TEXTILES FELT, WHETHER OR NOT IMPREGNATED OR\nCOATED, OF A KIND COMMONLY USED IN OTHER MACHINES", - "hsn_code": "59113220" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : COTTON FABRICS AND ARTICLES USED IN MACHINERY AND\nPLANT", - "hsn_code": "59113230" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : JUTE FABRICS AND ARTICLES USED IN MACHINERY OR PLAN", - "hsn_code": "59113240" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : TEXTILE FABRICS OF METALISED YARN OF A KIND COMMONLY\nUSED IN PAPER MAKING OR OTHER MACHINERY", - "hsn_code": "59113250" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- TEXTILE FABRICS AND FELTS, ENDLESS OR FITTED WITH LINKING DEVICES, OF A KIND USED IN\nPAPERMAKING OR SIMILAR MACHINES (FOR EXAMPLE, FOR PULP OR ASBESTOS - CEMENT) : -\nWEIGHING 650 G/ M2OR MORE : OTHER", - "hsn_code": "59113290" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- STRAINING CLOTH OF A KIND USED IN OIL PRESSES OR THE LIKE, INCLUDING THAT OF HUMAN\nHAIR", - "hsn_code": "59114000" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- OTHER : PAPER MAKERS FELT, WOVEN", - "hsn_code": "59119010" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- OTHER : GASKETS, WASHERS, POLISHING DISCS AND OTHER MACHINERY PARTS OF TEXTILE\nARTICLES", - "hsn_code": "59119020" - }, - { - "description": "TEXTILE PRODUCTS AND ARTICLES, FOR TECHNICAL USES, SPECIFIED IN NOTE 7 TO THIS CHAPTER\n- OTHER : OTHER", - "hsn_code": "59119090" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLONG PILE FABRICS: OF COTTON", - "hsn_code": "60011010" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLONG PILE FABRICS: OF MAN-MADE FIBRES", - "hsn_code": "60011020" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLONG PILE FABRICS: OF OTHER TEXTILE MATERIALS", - "hsn_code": "60011090" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLOOPED PILE FABRICS:OF COTTON", - "hsn_code": "60012100" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLOOPED PILE FABRICS:OF MAN-MADE FIBRES", - "hsn_code": "60012200" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nLOOPED PILE FABRICS:OF OTHER TEXTILE MATERIALS", - "hsn_code": "60012900" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nOTHER:OF COTTON", - "hsn_code": "60019100" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nOTHER: OF MAN-MADE FIBRES", - "hsn_code": "60019200" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nOTHER:- OF OTHER TEXTILE MATERIALS:OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "60019910" - }, - { - "description": "PILE FABRICS, INCLUDING LONG PILE FABRICS AND TERRY FABRICS, KNITTED OR CROCHETED -\nOTHER:- OF OTHER TEXTILE MATERIALS:OTHER", - "hsn_code": "60019990" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, CONTAINING BY WEIGHT\n5% OR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING\n6001 - CONTAINING BY WEIGHT 5% OR MORE OF ELASTOMERIC YARN BUT NOT CONTAINING\nRUBBER THREAD", - "hsn_code": "60024000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, CONTAINING BY WEIGHT\n5% OR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING\n6001- OTHER", - "hsn_code": "60029000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF\nHEADING 6001 OR 6002 - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "60031000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF\nHEADING 6001 OR 6002 - OF COTTON", - "hsn_code": "60032000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF\nHEADING 6001 OR 6002 - OF SYNTHETIC FIBRES", - "hsn_code": "60033000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF\nHEADING 6001 OR 6002 - OF ARTIFICIAL FIBRES", - "hsn_code": "60034000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH NOT EXCEEDING 30 CM, OTHER THAN THOSE OF\nHEADING 6001 OR 6002 - OTHER", - "hsn_code": "60039000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH EXCEEDING 30 CM, CONTAINING BY WEIGHT 5%\nOR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING 6001 -\nCONTAINING BY WEIGHT 5% OR MORE OF ELASTOMERIC YARN BUT NOT CONTAINING RUBBER\nTHREAD", - "hsn_code": "60041000" - }, - { - "description": "KNITTED OR CROCHETED FABRICS OF A WIDTH EXCEEDING 30 CM, CONTAINING BY WEIGHT 5%\nOR MORE OF ELASTOMERIC YARN OR RUBBER THREAD, OTHER THAN THOSE OF HEADING 6001 -\nOTHER", - "hsn_code": "60049000" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "60051000" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF COTTON:UNBLEACHED OR BLEACHED", - "hsn_code": "60052100" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF COTTON:DYED", - "hsn_code": "60052200" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF COTTON:OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "60052300" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF COTTON:PRINTED", - "hsn_code": "60052400" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF SYNTHETIC FIBRES :UNBLEACHED OR BLEACHED", - "hsn_code": "60053100" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF SYNTHETIC FIBRES :DYED", - "hsn_code": "60053200" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF SYNTHETIC FIBRES : OF YARNS OF DIFFERENT\nCOLOURS", - "hsn_code": "60053300" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF SYNTHETIC FIBRES :PRINTED", - "hsn_code": "60053400" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF ARTIFICIAL FIBRES : UNBLEACHED OR BLEACHED", - "hsn_code": "60054100" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF ARTIFICIAL FIBRES : DYED", - "hsn_code": "60054200" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF ARTIFICIAL FIBRES : OF YARNS OF DIFFERENT\nCOLOURS", - "hsn_code": "60054300" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OF ARTIFICIAL FIBRES : PRINTED", - "hsn_code": "60054400" - }, - { - "description": "WARP KNIT FABRICS (INCLUDING THOSE MADE ON GALLOON KNITTING MACHINES), OTHER\nTHAN THOSE OF HEADINGS 6001 TO 6004 - OTHER", - "hsn_code": "60059000" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "60061000" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF COTTON: UNBLEACHED OR BLEACHED", - "hsn_code": "60062100" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF COTTON: DYED", - "hsn_code": "60062200" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF COTTON: OF YARNS OF DIFFERENT COLOURS", - "hsn_code": "60062300" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF COTTON: PRINTED", - "hsn_code": "60062400" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF SYNTHETIC FIBRES: UNBLEACHED OR BLEACHED", - "hsn_code": "60063100" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF SYNTHETIC FIBRES: DYED", - "hsn_code": "60063200" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF SYNTHETIC FIBRES: OF YARNS OF DIFFERENT\nCOLOURS", - "hsn_code": "60063300" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF SYNTHETIC FIBRES: PRINTED", - "hsn_code": "60063400" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF ARTIFICIAL FIBRES : UNBLEACHED OR BLEACHED", - "hsn_code": "60064100" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF ARTIFICIAL FIBRES : DYED", - "hsn_code": "60064200" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF ARTIFICIAL FIBRES : OF YARNS OF DIFFERENT\nCOLOURS", - "hsn_code": "60064300" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OF ARTIFICIAL FIBRES : PRINTED", - "hsn_code": "60064400" - }, - { - "description": "OTHER KNITTED OR CROCHETED FABRICS- OTHER", - "hsn_code": "60069000" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF WOOL OR FINE ANIMAL HAIR : OF WOOL", - "hsn_code": "61011010" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF WOOL OR FINE ANIMAL HAIR : OF KASHMIR (CASHMERE) GOATS", - "hsn_code": "61011020" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "61011090" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF COTTON", - "hsn_code": "61012000" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61013010" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61013020" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OTHER : OF SILK", - "hsn_code": "61019010" - }, - { - "description": "MENS OR BOYS OVERCOATS, CARCOATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWIND-CHEATERS, WINDJACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED, OTHER THAN\nTHOSE OF HEADING 6103 - OTHER : OTHER", - "hsn_code": "61019090" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61021000" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OF COTTON", - "hsn_code": "61022000" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61023010" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61023020" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OTHER : OF SILK", - "hsn_code": "61029010" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING\nSKIJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, KNITTED OR CROCHETED,\nOTHER THAN THOSE OF HEADING 6104 - OTHER : OTHER", - "hsn_code": "61029090" - }, - { - "description": "SUITS OF SILK", - "hsn_code": "61031010" - }, - { - "description": "SUITS OF COTTON", - "hsn_code": "61031020" - }, - { - "description": "SUITS OF ARTIFICIAL FIBRES", - "hsn_code": "61031030" - }, - { - "description": "OTHER SUITS", - "hsn_code": "61031090" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS : OF\nWOOL OR FINE ANIMAL HAIR", - "hsn_code": "61031100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS : OF\nSYNTHETIC FIBRES", - "hsn_code": "61031200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS :OTHER :\nOF SILK", - "hsn_code": "61031910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS :OTHER :\nOF COTTON", - "hsn_code": "61031920" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS :OTHER :\nOF ARTIFICIAL FIBRES", - "hsn_code": "61031930" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - SUITS :OTHER :\nOTHER", - "hsn_code": "61031990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES : OF\nWOOL OR FINE ANIMAL HAIR", - "hsn_code": "61032100" - }, - { - "description": "MEN OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES : OF\nCOTTON", - "hsn_code": "61032200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES : OF\nSYNTHETIC FIBRES", - "hsn_code": "61032300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES :OF\nOTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61032910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES :OF\nOTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61032920" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - ENSEMBLES :OF\nOTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61032990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61033100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS : OF COTTON", - "hsn_code": "61033200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS : OF SYNTHETIC FIBRES", - "hsn_code": "61033300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61033910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61033920" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - JACKETS AND\nBLAZERS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61033990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61034100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS : OF COTTON", - "hsn_code": "61034200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS : OF SYNTHETIC FIBRES", - "hsn_code": "61034300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61034910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL\nFIBRES", - "hsn_code": "61034920" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIM WEAR), KNITTED OR CROCHETED - TROUSERS, BIB\nAND BRACE OVERALLS, BREECHES AND SHORTS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61034990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61041100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS : OF COTTON", - "hsn_code": "61041200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS : OF SYNTHETIC FIBRES", - "hsn_code": "61041300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61041910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61041920" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SUITS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61041990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61042100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES : OF COTTON", - "hsn_code": "61042200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES : OF SYNTHETIC FIBRES", - "hsn_code": "61042300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61042910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61042920" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - ENSEMBLES :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61042990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61043100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS : OF COTTON", - "hsn_code": "61043200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS : OF SYNTHETIC FIBRES", - "hsn_code": "61043300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61043910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL\nFIBRES", - "hsn_code": "61043920" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - JACKETS AND BLAZERS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61043990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61044100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES : OF COTTON", - "hsn_code": "61044200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES : OF SYNTHETIC FIBRES", - "hsn_code": "61044300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES : OF ARTIFICIAL FIBRES", - "hsn_code": "61044400" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61044910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - DRESSES :OF OTHER TEXTILE MATERIALS : OF OTHER FIBRES", - "hsn_code": "61044990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61045100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS : OF COTTON", - "hsn_code": "61045200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS : OF SYNTHETIC FIBRES", - "hsn_code": "61045300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61045910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS :OF OTHER TEXTILE MATERIALS : OF\nARTIFICIAL FIBRES", - "hsn_code": "61045920" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - SKIRTS AND DIVIDED SKIRTS :OF OTHER TEXTILE MATERIALS : OF\nOTHER FIBRES", - "hsn_code": "61045990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF\nWOOL OR FINE ANIMAL HAIR", - "hsn_code": "61046100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF\nCOTTON", - "hsn_code": "61046200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF\nSYNTHETIC FIBRES", - "hsn_code": "61046300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS :OF\nOTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61046910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS :OF\nOTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61046920" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIM WEAR),\nKNITTED OR CROCHETED - TROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS :OF\nOTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61046990" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF COTTON : SHIRTS, HAND CROCHETED", - "hsn_code": "61051010" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF COTTON : KNIT SHIRTS (OTHER THAN T\nSHIRTS) AND SWEAT SHIRTS, OTHER THAN HAND CROCHETED", - "hsn_code": "61051020" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF COTTON : OTHER", - "hsn_code": "61051090" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61052010" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61052020" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61059010" - }, - { - "description": "MENS OR BOYS SHIRTS, KNITTED OR CROCHETED - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61059090" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF\nCOTTON", - "hsn_code": "61061000" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF MAN\nMADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61062010" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF MAN\nMADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61062020" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF OTHER\nTEXTILE MATERIALS : OF SILK", - "hsn_code": "61069010" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF OTHER\nTEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61069020" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES, KNITTED OR CROCHETED - OF OTHER\nTEXTILE MATERIALS : OTHER", - "hsn_code": "61069090" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - UNDERPANTS AND BRIEFS : OF COTTON", - "hsn_code": "61071100" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - UNDERPANTS AND BRIEFS : OF MAN-MADE\nFIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61071210" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - UNDERPANTS AND BRIEFS : OF MAN-MADE\nFIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61071220" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - UNDERPANTS AND BRIEFS :OF OTHER TEXTILE\nMATERIALS : OF SILK", - "hsn_code": "61071910" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - UNDERPANTS AND BRIEFS :OF OTHER TEXTILE\nMATERIALS : OTHER", - "hsn_code": "61071990" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS : OF COTTON", - "hsn_code": "61072100" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS :OF MAN-MADE\nFIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61072210" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS :OF MAN-MADE\nFIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61072220" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS :OF OTHER\nTEXTILE MATERIALS : OF SILK", - "hsn_code": "61072910" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS :OF OTHER\nTEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61072920" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT SHIRTS AND PYJAMAS :OF OTHER\nTEXTILE MATERIALS : OTHER", - "hsn_code": "61072990" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF COTTON : GENGIS (VESTS), OTHER\nTHAN HAND CROCHETED", - "hsn_code": "61079110" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF COTTON : OTHER", - "hsn_code": "61079190" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF MAN-MADE FIBRES : OF\nSYNTHETIC FIBRES", - "hsn_code": "61079210" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF MAN-MADE FIBRES : OF\nARTIFICIAL FIBRES", - "hsn_code": "61079220" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF OTHER TEXTILE MATERIALS : OF\nSILK", - "hsn_code": "61079910" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF OTHER TEXTILE MATERIALS : OF\nWOOL OR FINE ANIMAL HAIR", - "hsn_code": "61079920" - }, - { - "description": "MENS OR BOYS UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS, BATHROBES, DRESSING GOWNS\nAND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF OTHER TEXTILE MATERIALS :\nOTHER", - "hsn_code": "61079990" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - SLIPS AND\nPETTICOATS :OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61081110" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - SLIPS AND\nPETTICOATS :OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61081120" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - SLIPS AND\nPETTICOATS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61081910" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - SLIPS AND\nPETTICOATS :OF OTHER TEXTILE MATERIALS : OF COTTON", - "hsn_code": "61081920" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - SLIPS AND\nPETTICOATS :OF OTHER TEXTILE MATERIALS : OF OTHER FIBRES", - "hsn_code": "61081990" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - BRIEFS AND\nPANTIES : OF COTTON", - "hsn_code": "61082100" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - BRIEFS AND\nPANTIES :OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61082210" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - BRIEFS AND\nPANTIES :OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61082220" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - BRIEFS AND\nPANTIES :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61082910" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - BRIEFS AND\nPANTIES :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61082990" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT\nDRESSES AND PYJAMAS : OF COTTON", - "hsn_code": "61083100" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT\nDRESSES AND PYJAMAS :OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61083210" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT\nDRESSES AND PYJAMAS :OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61083220" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT\nDRESSES AND PYJAMAS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61083910" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - NIGHT\nDRESSES AND PYJAMAS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61083990" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER : OF\nCOTTON", - "hsn_code": "61089100" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF\nMAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61089210" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF\nMAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61089220" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF\nOTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61089910" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF\nOTHER TEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61089920" - }, - { - "description": "WOMENS OR GIRLS SLIPS, PETTICOATS, BRIEFS, PANTIES, NIGHT DRESSES, PYJAMAS, NEGLIGEES,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES, KNITTED OR CROCHETED - OTHER :OF\nOTHER TEXTILE MATERIALS : OF OTHER TEXTILE MATERIALS", - "hsn_code": "61089990" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED - OF COTTON", - "hsn_code": "61091000" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED -OF OTHER TEXTILE MATERIALS\n: OF SYNTHETIC FIBRES", - "hsn_code": "61099010" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED -OF OTHER TEXTILE MATERIALS\n: OF ARTIFICIAL FIBRES", - "hsn_code": "61099020" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED -OF OTHER TEXTILE MATERIALS\n: OF SILK", - "hsn_code": "61099030" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED -OF OTHER TEXTILE MATERIALS\n: OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61099040" - }, - { - "description": "T-SHIRTS, SINGLETS AND OTHER VESTS, KNITTED OR CROCHETED -OF OTHER TEXTILE MATERIALS\n: OTHER", - "hsn_code": "61099090" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF WOOL OR FINE ANIMAL HAIR :OF WOOL : JERSEYS", - "hsn_code": "61101110" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF WOOL OR FINE ANIMAL HAIR :OF WOOL : SWEATERS AND CARDIGANS", - "hsn_code": "61101120" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF WOOL OR FINE ANIMAL HAIR :OF WOOL : OTHER", - "hsn_code": "61101190" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF WOOL OR FINE ANIMAL HAIR : OF KASHMIR (CASHMERE) GOATS", - "hsn_code": "61101200" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "61101900" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF COTTON", - "hsn_code": "61102000" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61103010" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61103020" - }, - { - "description": "JERSEYS, PULLOVERS, CARDIGANS, WAISTCOATS AND SIMILAR ARTICLES, KNITTED OR\nCROCHETED - OF OTHER TEXTILE MATERIALS", - "hsn_code": "61109000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF WOOL OR FINE\nANIMAL HAIR", - "hsn_code": "61111000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF COTTON", - "hsn_code": "61112000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF SYNTHETIC\nFIBRES", - "hsn_code": "61113000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF OTHER TEXTILE\nMATERIALS : OF SILK", - "hsn_code": "61119010" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF OTHER TEXTILE\nMATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61119020" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES, KNITTED OR CROCHETED - OF OTHER TEXTILE\nMATERIALS : OTHER", - "hsn_code": "61119090" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS : OF COTTON", - "hsn_code": "61121100" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS : OF\nSYNTHETIC FIBRES", - "hsn_code": "61121200" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS :OF OTHER\nTEXTILE MATERIALS : OF SILK", - "hsn_code": "61121910" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS :OF OTHER\nTEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61121920" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS :OF OTHER\nTEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61121930" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - TRACK SUITS :OF OTHER\nTEXTILE MATERIALS : OTHER", - "hsn_code": "61121990" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OF SILK", - "hsn_code": "61122010" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OF WOOL OR\nFINE ANIMAL HAIR", - "hsn_code": "61122020" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OF COTTON", - "hsn_code": "61122030" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OF SYNTHETIC\nFIBRES", - "hsn_code": "61122040" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OF ARTIFICIAL\nFIBRES", - "hsn_code": "61122050" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - SKI SUITS : OTHER", - "hsn_code": "61122090" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - MENS OR BOYS SWIMWEAR\n: OF SYNTHETIC FIBRES", - "hsn_code": "61123100" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - MENS OR BOYS SWIMWEAR\n:OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61123910" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - MENS OR BOYS SWIMWEAR\n:OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61123920" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED - MENS OR BOYS SWIMWEAR\n:OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61123990" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED WOMENS OR GIRLS\nSWIMWEAR : OF SYNTHETIC FIBRE", - "hsn_code": "61124100" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED WOMENS OR GIRLS\nSWIMWEAR :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61124910" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED WOMENS OR GIRLS\nSWIMWEAR :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61124920" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR, KNITTED OR CROCHETED WOMENS OR GIRLS\nSWIMWEAR :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61124990" - }, - { - "description": "GARMENTS, MADE UP OF KNITTED OR CROCHETED FABRICS OF HEADING 5903, 5906 OR 5907", - "hsn_code": "61130000" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61141000" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF COTTON", - "hsn_code": "61142000" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF MAN-MADE FIBRES : OF SYNTHETIC FIBRES", - "hsn_code": "61143010" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF MAN-MADE FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "61143020" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61149010" - }, - { - "description": "OTHER GARMENTS, KNITTED OR CROCHETED - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61149090" - }, - { - "description": "GRADUATED COMPRESSION HOSIERY(EX.FOR VARICOSE VEINS)", - "hsn_code": "61151000" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS : OF SYNTHETIC FIBRES, MEASURING PER SINGLE YARN LESS THAN 67 DECITEX", - "hsn_code": "61151100" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS : OF SYNTHETIC FIBRES MEASURING PER SINGLE YARN 67 DECITEX OR MORE", - "hsn_code": "61151200" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS :OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "61151910" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS :OF OTHER TEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61151920" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS :OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61151930" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - PANTY\nHOSE AND TIGHTS :OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61151990" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED WOMENS\nFULL-LENGTH OR KNEE-LENGTH HOSIERY MEASURING PER SINGLE YARN LESS THAN 67 DECITEX :\nOF COTTON", - "hsn_code": "61152010" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED WOMENS\nFULL-LENGTH OR KNEE-LENGTH HOSIERY MEASURING PER SINGLE YARN LESS THAN 67 DECITEX :\nOTHER", - "hsn_code": "61152090" - }, - { - "description": "OTHER PANTY HOSE AND TIGHTS, OF SYN. FIBRES", - "hsn_code": "61152100" - }, - { - "description": "OTHER PANTY HOSE AND TIGHTS, OF SYN. FIBRES", - "hsn_code": "61152200" - }, - { - "description": "PANTY HOSE AND TIGHTS OF SILK", - "hsn_code": "61152910" - }, - { - "description": "PANTYHOSE AND TIGHTS OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61152920" - }, - { - "description": "PANTY HOSE AND TIGHTS OF ARTIFICIAL FIBRES", - "hsn_code": "61152930" - }, - { - "description": "PANTY HOSE AND TIGHTS- NOT SPECIFIED EARLIER", - "hsn_code": "61152990" - }, - { - "description": "OTHER WOMENS FULL OR KNEE LENGHT HOSIERY", - "hsn_code": "61153000" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER :\nOF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61159100" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER :\nOF COTTON", - "hsn_code": "61159200" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER :\nOF SYNTHETIC FIBRES", - "hsn_code": "61159300" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER\n:OF OTHER TEXTILE MATERIALS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "61159400" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER\n:OF OTHER TEXTILE MATERIALS : OF COTTON", - "hsn_code": "61159500" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER\n:OF OTHER TEXTILE MATERIALS : OF SYNTHETIC FIBRES", - "hsn_code": "61159600" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER\n:OF OTHER TEXTILE MATERIALS : OF ARTIFICIAL FIBRES", - "hsn_code": "61159910" - }, - { - "description": "PANTY HOSE, TIGHTS, STOCKINGS, SOCKS AND OTHER HOSIERY, INCLUDING STOCKINGS FOR\nVARICOSE VEINS AND FOOTWEAR WITHOUT APPLIED SOLES, KNITTED OR CROCHETED - OTHER\n:OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "61159990" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED -IMPREGNATED, COATED OR COVERED\nWITH PLASTICS OR RUBBER", - "hsn_code": "61161000" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED - OTHER : OF WOOL OR FINE ANIMAL\nHAIR", - "hsn_code": "61169100" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED - OTHER : OF COTTON", - "hsn_code": "61169200" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED - OTHER : OF SYNTHETIC FIBRES", - "hsn_code": "61169300" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED - OTHER :OF OTHER TEXTILE MATERIALS\n: OF ARTIFICIAL FIBRES", - "hsn_code": "61169910" - }, - { - "description": "GLOVES, MITTENS AND MITTS, KNITTED OR CROCHETED - OTHER :OF OTHER TEXTILE MATERIALS\n: OTHER", - "hsn_code": "61169990" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - SHAWLS, SCARVES, MUFFLERS,\nMANTILLAS, VEILS AND THE LIKE : OF SILK", - "hsn_code": "61171010" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - SHAWLS, SCARVES, MUFFLERS,\nMANTILLAS, VEILS AND THE LIKE : OF WOOL", - "hsn_code": "61171020" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - SHAWLS, SCARVES, MUFFLERS,\nMANTILLAS, VEILS AND THE LIKE : OF COTTON", - "hsn_code": "61171030" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - SHAWLS, SCARVES, MUFFLERS,\nMANTILLAS, VEILS AND THE LIKE : OF MAN-MADE FIBRES", - "hsn_code": "61171040" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - SHAWLS, SCARVES, MUFFLERS,\nMANTILLAS, VEILS AND THE LIKE : OTHER", - "hsn_code": "61171090" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES TIES, BOW TIES AND CRAVATS : OF SILK", - "hsn_code": "61172010" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES TIES, BOW TIES AND CRAVATS : OF WOOL", - "hsn_code": "61172020" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES TIES, BOW TIES AND CRAVATS : OF\nCOTTON", - "hsn_code": "61172030" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES TIES, BOW TIES AND CRAVATS : OF MAN\nMADE FIBRES", - "hsn_code": "61172040" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES TIES, BOW TIES AND CRAVATS : OF OTHER\nFIBRES", - "hsn_code": "61172090" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - OTHER ACCESSORIES : OF SILK", - "hsn_code": "61178010" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - OTHER ACCESSORIES : OF WOOL", - "hsn_code": "61178020" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - OTHER ACCESSORIES : OF COTTON", - "hsn_code": "61178030" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - OTHER ACCESSORIES : OF MAN-MADE\nFIBRES", - "hsn_code": "61178040" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - OTHER ACCESSORIES : OTHER", - "hsn_code": "61178090" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES, KNITTED OR CROCHETED; KNITTED OR CROCHETED\nPARTS OF GARMENTS OR OF CLOTHING ACCESSORIES - PARTS", - "hsn_code": "61179000" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF WOOL AND\nFINE ANIMAL HAIR", - "hsn_code": "62011100" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF COTTON :\nRAINCOATS", - "hsn_code": "62011210" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF COTTON :\nOTHER", - "hsn_code": "62011290" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF MAN-MADE\nFIBRES : RAINCOATS", - "hsn_code": "62011310" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF MAN-MADE\nFIBRES : OTHER", - "hsn_code": "62011390" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF OTHER\nTEXTILE MATERIALS : OF SILK", - "hsn_code": "62011910" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES : OF OTHER\nTEXTILE MATERIALS : OF OTHER TEXTILE FIBRES", - "hsn_code": "62011990" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOTHER : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62019100" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOTHER : OF COTTON", - "hsn_code": "62019200" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOTHER : OF MAN-MADE FIBRES", - "hsn_code": "62019300" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOTHER : OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62019910" - }, - { - "description": "MENS OR BOYS OVERCOATS, CAR-COATS, CLOAKS, ANORAKS (INCLUDING SKI-JACKETS),\nWINDCHEATERS, WIND-JACKETS AND SIMILAR ARTICLES OTHER THAN THOSE OF HEADING 6203 -\nOTHER : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62019990" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF WOOL OR FINE ANIMAL HAIR : COATS", - "hsn_code": "62021110" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "62021190" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF COTTON", - "hsn_code": "62021200" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF MAN-MADE FIBRES", - "hsn_code": "62021300" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF OTHER TEXTILE MATERIALS : COATS OF SILK", - "hsn_code": "62021910" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF OTHER TEXTILE MATERIALS : COATS OF ALL OTHER FIBRES", - "hsn_code": "62021920" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OVERCOATS, RAINCOATS, CAR-COATS, CAPES, CLOAKS AND SIMILAR ARTICLES :\nOF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62021990" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF WOOL OR FINE ANIMAL HAIR : WIND AND SKI-JACKETS, WIND\nCHEATERS", - "hsn_code": "62029110" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "62029190" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF COTTON : WIND AND SKI-JACKETS, WIND-CHEATERS", - "hsn_code": "62029210" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF COTTON : OTHER", - "hsn_code": "62029290" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF MAN-MADE FIBRES : WIND AND SKI-JACKETS, WIND-CHEATERS", - "hsn_code": "62029310" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF MAN-MADE FIBRES : OTHER", - "hsn_code": "62029390" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF OTHER TEXTILE MATERIALS : OF SILK : WIND AND SKI-JACKETS", - "hsn_code": "62029911" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF OTHER TEXTILE MATERIALS : OF SILK : OTHER", - "hsn_code": "62029919" - }, - { - "description": "WOMENS OR GIRLS OVERCOATS, CAR-COATS, CAPES, CLOAKS, ANORAKS (INCLUDING SKI\nJACKETS), WIND-CHEATERS, WIND-JACKETS AND SIMILAR ARTICLES, OTHER THAN THOSE OF\nHEADING 6204 - OTHER : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62029990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - SUITS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62031100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - SUITS : OF SYNTHETIC FIBRES", - "hsn_code": "62031200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - SUITS : OF OTHER TEXTILE MATERIALS : OF\nCOTTON", - "hsn_code": "62031910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - SUITS : OF OTHER TEXTILE MATERIALS :\nOTHER", - "hsn_code": "62031990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - ENSEMBLES : OF WOOL OR FINE ANIMAL\nHAIR", - "hsn_code": "62032100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - ENSEMBLES : OF COTTON", - "hsn_code": "62032200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - ENSEMBLES : OF SYNTHETIC FIBRES", - "hsn_code": "62032300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - ENSEMBLES : OF OTHER TEXTILE\nMATERIALS", - "hsn_code": "62032900" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - JACKETS AND BLAZERS : OF WOOL OR FINE\nANIMAL HAIR", - "hsn_code": "62033100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - JACKETS AND BLAZERS : OF COTTON", - "hsn_code": "62033200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - JACKETS AND BLAZERS : OF SYNTHETIC\nFIBRES", - "hsn_code": "62033300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - JACKETS AND BLAZERS : OF OTHER TEXTILE\nMATERIALS : OF SILK", - "hsn_code": "62033910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - JACKETS AND BLAZERS : OF OTHER TEXTILE\nMATERIALS : OTHER", - "hsn_code": "62033990" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62034100" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS : OF COTTON", - "hsn_code": "62034200" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS : OF SYNTHETIC FIBRES", - "hsn_code": "62034300" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS : OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62034910" - }, - { - "description": "MENS OR BOYS SUITS, ENSEMBLES, JACKETS, BLAZERS, TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS (OTHER THAN SWIMWEAR) - TROUSERS, BIB AND BRACE OVERALLS,\nBREECHES AND SHORTS : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62034990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF WOOL OF FINE ANIMAL HAIR", - "hsn_code": "62041100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF COTTON", - "hsn_code": "62041200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF SYNTHETIC FIBRES", - "hsn_code": "62041300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF OTHER TEXTILE MATERIALS : OF SILK : SEQUINNED OR BEADED WITH CHATTONS OR\nEMBROIDERED", - "hsn_code": "62041911" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF OTHER TEXTILE MATERIALS : OF SILK : OTHER", - "hsn_code": "62041919" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSUITS : OF OTHER TEXTILE MATERIALS : OF ALL OTHER FIBRES", - "hsn_code": "62041990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62042100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF COTTON : BLOUSES COMBINED WITH SKIRTS, TROUSERS OR SHORTS", - "hsn_code": "62042210" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF COTTON : OTHER", - "hsn_code": "62042290" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF SYNTHETIC FIBRES", - "hsn_code": "62042300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF OTHER TEXTILE MATERIALS : OF SILK : SEQUINNED OR BEADED", - "hsn_code": "62042911" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF OTHER TEXTILE MATERIALS : OF SILK : OTHER", - "hsn_code": "62042919" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nENSEMBLES : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62042990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62043100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF COTTON", - "hsn_code": "62043200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF SYNTHETIC FIBRES", - "hsn_code": "62043300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF OTHER TEXTILE MATERIALS : OF SILK : SEQUINNED OR BEADED WITH\nCHATTONS OR EMBROIDERED", - "hsn_code": "62043911" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF OTHER TEXTILE MATERIALS : OF SILK : OTHER", - "hsn_code": "62043919" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nJACKETS AND BLAZERS : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62043990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF WOOL OR FINE ANIMAL HAIR : HOUSE COATS AND LIKE DRESSES", - "hsn_code": "62044110" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF WOOL OR FINE ANIMAL HAIR : BLAZERS", - "hsn_code": "62044120" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF WOOL OR FINE ANIMAL HAIR : OTHER", - "hsn_code": "62044190" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF COTTON : HOUSE COATS AND THE LIKE DRESSES", - "hsn_code": "62044210" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF COTTON : DRESSES", - "hsn_code": "62044220" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF COTTON : OTHER", - "hsn_code": "62044290" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF SYNTHETIC FIBRES : HOUSE COATS AND THE LIKE", - "hsn_code": "62044310" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF SYNTHETIC FIBRES : OTHER", - "hsn_code": "62044390" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF SYNTHETIC FIBRES : OF ARTIFICIAL FIBRES", - "hsn_code": "62044400" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF OTHER TEXTILE MATERIALS : OF SILK : HOUSE COATS AND THE LIKE DRESSES", - "hsn_code": "62044911" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF OTHER TEXTILE MATERIALS : OF SILK : OTHER", - "hsn_code": "62044919" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nDRESSES : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62044990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSKIRTS AND DIVIDED SKIRTS : OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62045100" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSKIRTS AND DIVIDED SKIRTS : OF COTTON", - "hsn_code": "62045200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSKIRTS AND DIVIDED SKIRTS : OF SYNTHETIC FIBRES", - "hsn_code": "62045300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSKIRTS AND DIVIDED SKIRTS : OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62045910" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nSKIRTS AND DIVIDED SKIRTS : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62045990" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF WOOL OR FINE ANIMAL\nHAIR : TROUSERS AND SHORTS", - "hsn_code": "62046110" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF WOOL OR FINE ANIMAL\nHAIR : OTHER", - "hsn_code": "62046190" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF COTTON", - "hsn_code": "62046200" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF SYNTHETIC FIBRES", - "hsn_code": "62046300" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF OTHER TEXTILE MATERIALS :\nOF SILK : SEQUINNED OR BEADED OR EMBROIDERED", - "hsn_code": "62046911" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : OF OTHER TEXTILE MATERIALS :\nOF SILK : OTHER", - "hsn_code": "62046919" - }, - { - "description": "WOMENS OR GIRLS SUITS, ENSEMBLES, JACKETS, BLAZERS, DRESSES, SKIRTS, DIVIDED SKIRTS,\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS (OTHER THAN SWIMWEAR) -\nTROUSERS, BIB AND BRACE OVERALLS, BREECHES AND SHORTS : 69 - OF OTHER TEXTILE\nMATERIALS : OTHER", - "hsn_code": "62046990" - }, - { - "description": "MENS OR BOYS SHIRTS - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62051000" - }, - { - "description": "MENS OR BOYS SHIRTS - OF COTTON", - "hsn_code": "62052000" - }, - { - "description": "MENS OR BOYS SHIRTS - OF MAN-MADE FIBRES", - "hsn_code": "62053000" - }, - { - "description": "MENS OR BOYS SHIRTS - OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62059010" - }, - { - "description": "MENS OR BOYS SHIRTS - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62059090" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF SILK OR SILK WASTE : OF SILK", - "hsn_code": "62061010" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF SILK OR SILK WASTE : OTHER", - "hsn_code": "62061090" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62062000" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF COTTON", - "hsn_code": "62063000" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF MAN-MADE FIBRES", - "hsn_code": "62064000" - }, - { - "description": "WOMENS OR GIRLS BLOUSES, SHIRTS AND SHIRT-BLOUSES - OF OTHER TEXTILE MATERIALS", - "hsn_code": "62069000" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - UNDERPANTS AND BRIEFS : OF\nCOTTON", - "hsn_code": "62071100" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - UNDERPANTS AND BRIEFS : OF OTHER\nTEXTILE MATERIALS : OF SYNTHETIC FIBRES", - "hsn_code": "62071910" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - UNDERPANTS AND BRIEFS : OF OTHER\nTEXTILE MATERIALS : OF WOOL", - "hsn_code": "62071920" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - UNDERPANTS AND BRIEFS : OF OTHER\nTEXTILE MATERIALS : OF SILK", - "hsn_code": "62071930" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - UNDERPANTS AND BRIEFS : OF OTHER\nTEXTILE MATERIALS : OTHER", - "hsn_code": "62071990" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - NIGHT SHIRTS AND PYJAMAS : OF\nCOTTON", - "hsn_code": "62072110" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - NIGHT SHIRTS AND PYJAMAS : OTHER", - "hsn_code": "62072190" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - NIGHT SHIRTS AND PYJAMAS : OF MAN\nMADE FIBRES", - "hsn_code": "62072200" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - NIGHT SHIRTS AND PYJAMAS : OF\nOTHER TEXTILE MATERIALS", - "hsn_code": "62072900" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF COTTON : DRESSING\nGOWNS AND BATHROBES", - "hsn_code": "62079110" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF COTTON : UNDER SHIRTS\nOTHER THAN HAND PRINTED", - "hsn_code": "62079120" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF COTTON : OTHER", - "hsn_code": "62079190" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF MAN-MADE FIBRES", - "hsn_code": "62079200" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF OTHER TEXTILE MATERIALS\n: OF SILK : DRESSING GOWNS AND BATHROBES", - "hsn_code": "62079911" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF OTHER TEXTILE MATERIALS\n: OF SILK : OTHER", - "hsn_code": "62079919" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF OTHER TEXTILE MATERIALS\n: OF WOOL : DRESSING GOWNS AND BATHROBES", - "hsn_code": "62079921" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF OTHER TEXTILE MATERIALS\n: OF WOOL : OTHER", - "hsn_code": "62079929" - }, - { - "description": "MENS OR BOYS SINGLETS AND OTHER VESTS, UNDERPANTS, BRIEFS, NIGHTSHIRTS, PYJAMAS,\nBATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES - OTHER : OF OTHER TEXTILE MATERIALS\n: OTHER", - "hsn_code": "62079990" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nSLIPS AND PETTICOATS : OF MAN-MADE FIBRES", - "hsn_code": "62081100" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nSLIPS AND PETTICOATS : OF OTHER TEXTILE MATERIALS : OF COTTON OTHER THAN HAND\nPRINTED", - "hsn_code": "62081910" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nSLIPS AND PETTICOATS : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62081990" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nNIGHTDRESSES AND PYJAMAS : OF COTTON", - "hsn_code": "62082100" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nNIGHTDRESSES AND PYJAMAS : OF MAN-MADE FIBRES", - "hsn_code": "62082200" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nNIGHTDRESSES AND PYJAMAS : OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62082910" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nNIGHTDRESSES AND PYJAMAS : OF OTHER TEXTILE MATERIALS : OF WOOL", - "hsn_code": "62082920" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nNIGHTDRESSES AND PYJAMAS : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62082990" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF COTTON : DRESSING GOWNS AND BATHROBES", - "hsn_code": "62089110" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF COTTON : OTHER", - "hsn_code": "62089190" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF MAN-MADE FIBRES : DRESSING GOWNS AND BATHROBES", - "hsn_code": "62089210" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF MAN-MADE FIBRES : OTHER", - "hsn_code": "62089290" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF OTHER TEXTILE MATERIALS : DRESSING GOWNS AND BATHROBES OF WOOL", - "hsn_code": "62089910" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF OTHER TEXTILE MATERIALS : DRESSING GOWNS AND BATHROBES OF SILK", - "hsn_code": "62089920" - }, - { - "description": "WOMENS OR GIRLS SINGLETS AND OTHER VESTS, SLIPS, PETTICOATS, BRIEFS, PANTIES,\nNIGHTDRESSES, PYJAMAS, NEGLIGES, BATHROBES, DRESSING GOWNS AND SIMILAR ARTICLES -\nOTHER : OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62089990" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES - OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62091000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES - OF COTTON", - "hsn_code": "62092000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES - OF SYNTHETIC FIBRES", - "hsn_code": "62093000" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES - OF OTHER TEXTILE MATERIALS : OF SILK", - "hsn_code": "62099010" - }, - { - "description": "BABIES GARMENTS AND CLOTHING ACCESSORIES - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62099090" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OF FABRICS\nOF HEADING 5602 OR 5603", - "hsn_code": "62101000" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6201 11 TO 6201 19 : OUTER GARMENTS,\nOF RUBBERISED TEXTILE FABRICS", - "hsn_code": "62102010" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6201 11 TO 6201 19 : OUTER GARMENTS,\nOF FABRICS IMPREGNATED, COATED, COVERED OR LAMINATED WITH PREPARATIONS OF\nCELLULOSE DERIVATIVES AND OTHER ARTIFICIAL PLASTIC MATERIALS", - "hsn_code": "62102020" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6201 11 TO 6201 19 : OUTER GARMENTS,\nOF FABRICS OTHERWISE IMPREGNATED OR COATED", - "hsn_code": "62102030" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6201 11 TO 6201 19 : OTHER", - "hsn_code": "62102090" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6202 11 TO 6202 19 : OUTER GARMENTS,\nOF FABRICS IMPREGNATED, COATED, COVERED OR LAMINATED WITH PREPARATIONS OF\nCELLULOSE DERIVATIVES AND OTHER ARTIFICIAL PLASTIC MATERIALS", - "hsn_code": "62103010" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6202 11 TO 6202 19 : OUTER GARMENTS,\nOF RUBBERISED TEXTILE FABRICS", - "hsn_code": "62103020" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6202 11 TO 6202 19 : OUTER GARMENTS,\nOF FABRICS OTHERWISE IMPREGNATED", - "hsn_code": "62103030" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER\nGARMENTS, OF THE TYPE DESCRIBED IN SUBHEADINGS 6202 11 TO 6202 19 : OTHER", - "hsn_code": "62103090" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER MENS\nOR BOYS GARMENTS : BULLET PROOF JACKET, BOMB DISPOSAL JACKET AND THE LIKE", - "hsn_code": "62104010" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 - OTHER MENS\nOR BOYS GARMENTS : OTHER", - "hsn_code": "62104090" - }, - { - "description": "GARMENTS, MADE UP OF FABRICS OF HEADING 5602, 5603, 5903, 5906 OR 5907 OTHER\nWOMENS OR GIRLS GARMENTS", - "hsn_code": "62105000" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - SWIMWEAR : MENS OR BOYS", - "hsn_code": "62111100" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - SWIMWEAR : WOMENS OR GIRLS", - "hsn_code": "62111200" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - SKI SUITS", - "hsn_code": "62112000" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, MENS OR\nBOYS: OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62113100" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, MENS OR\nBOYS : OF COTTON", - "hsn_code": "62113200" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, MENS OR\nBOYS : OF MAN-MADE FIBRES", - "hsn_code": "62113300" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, MENS OR\nBOYS : OF OTHER TEXTILE MATERIALS", - "hsn_code": "62113900" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, WOMENS OR\nGIRLS : OF COTTON : KURTA AND SALWAR WITH OR WITHOUT DUPPATTA", - "hsn_code": "62114210" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, WOMENS OR\nGIRLS : OF COTTON : OTHER", - "hsn_code": "62114290" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, WOMENS OR\nGIRLS : OF MAN-MADE FIBRES", - "hsn_code": "62114300" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, WOMENS OR\nGIRLS --OF OTHER TEXTILE MATERIALS---OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "62114910" - }, - { - "description": "TRACK SUITS, SKI SUITS AND SWIMWEAR; OTHER GARMENTS - OTHER GARMENTS, WOMENS OR\nGIRLS --OF OTHER TEXTILE MATERIALS---OTHER", - "hsn_code": "62114990" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND\nPARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED - BRASSIERES", - "hsn_code": "62121000" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND\nPARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED - GIRDLES AND PANTY-GIRDLES", - "hsn_code": "62122000" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND\nPARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED - CORSELETTES", - "hsn_code": "62123000" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND\nPARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED - OTHER : SUSPENDER BELTS,\nBRACES, SUSPENDER GARTERS AND THE LIKE", - "hsn_code": "62129010" - }, - { - "description": "BRASSIERES, GIRDLES, CORSETS, BRACES, SUSPENDERS, GARTERS AND SIMILAR ARTICLES AND\nPARTS THEREOF, WHETHER OR NOT KNITTED OR CROCHETED - OTHER : OTHER", - "hsn_code": "62129090" - }, - { - "description": "HANDKERCHIEFS - OF SILK OR SILK WASTE", - "hsn_code": "62131000" - }, - { - "description": "HANDKERCHIEFS - OF COTTON", - "hsn_code": "62132000" - }, - { - "description": "HANDKERCHIEFS - OTHER : OF MAN-MADE FIBRES", - "hsn_code": "62139010" - }, - { - "description": "HANDKERCHIEFS - OTHER : OF OTHER TEXTILE MATERIALS", - "hsn_code": "62139090" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF SILK OR SILK WASTE :\nSCARVES OF SILK MEASURING 60 CMS OR LESS", - "hsn_code": "62141010" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF SILK OR SILK WASTE :\nSHAWLS, SCARVES (EXCEEDING 60 C SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE\nLIKE - OF SILK OR SILK WASTE : MS) AND THE LIKE", - "hsn_code": "62141020" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF HANDLOOM", - "hsn_code": "62141030" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF SILK OR SILK WASTE :\nOTHER", - "hsn_code": "62141090" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF WOOL OR FINE ANIMAL\nHAIR : SHAWLS", - "hsn_code": "62142010" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF WOOL OR FINE ANIMAL\nHAIR : SCARVES", - "hsn_code": "62142020" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF WOOL OR FINE ANIMAL\nHAIR : MUFFLERS", - "hsn_code": "62142030" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF WOOL OR FINE ANIMAL\nHAIR : OTHER", - "hsn_code": "62142090" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF SYNTHETIC FIBRES", - "hsn_code": "62143000" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF ARTIFICIAL FIBRES", - "hsn_code": "62144000" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: ABRABROOMAL, COTTON", - "hsn_code": "62149010" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: CHADARS, OF COTTON : GREY", - "hsn_code": "62149021" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: CHADARS, OF COTTON : WHITE BLEACHED", - "hsn_code": "62149022" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: CHADARS, OF COTTON : OTHER", - "hsn_code": "62149029" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: ODHANI, OF COTTON : GREY", - "hsn_code": "62149031" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: ODHANI, OF COTTON : WHITE BLEACHED", - "hsn_code": "62149032" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: ODHANI, OF COTTON : OTHER", - "hsn_code": "62149039" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: SCARVES, OF COTTON", - "hsn_code": "62149040" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: SHAWLS, MUFFLERS AND THE LIKE, OF COTTON", - "hsn_code": "62149050" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: SHAWLS, MUFFLERS AND THE LIKE OF MAN-MADE FIBRES", - "hsn_code": "62149060" - }, - { - "description": "SHAWLS, SCARVES, MUFFLERS, MANTILLAS, VEILS AND THE LIKE - OF OTHER TEXTILE MATERIALS\n: OTHER", - "hsn_code": "62149090" - }, - { - "description": "TIES, BOW TIES AND CRAVATS - OF SILK OR SILK WASTE", - "hsn_code": "62151000" - }, - { - "description": "TIES, BOW TIES AND CRAVATS - OF MAN-MADE FIBRES", - "hsn_code": "62152000" - }, - { - "description": "TIES, BOW TIES AND CRAVATS - OF OTHER TEXTILE MATERIALS : OF COTTON", - "hsn_code": "62159010" - }, - { - "description": "TIES, BOW TIES AND CRAVATS - OF OTHER TEXTILE MATERIALS : OTHER", - "hsn_code": "62159090" - }, - { - "description": "GLOVES, MITTENS AND MITTS - GLOVES, MITTENS AND MITTS : OF COTTON", - "hsn_code": "62160010" - }, - { - "description": "GLOVES, MITTENS AND MITTS - OF HANDLOOM", - "hsn_code": "62160020" - }, - { - "description": "GLOVES, MITTENS AND MITTS - GLOVES, MITTENS AND MITTS : OTHER", - "hsn_code": "62160090" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF COTTON", - "hsn_code": "62171010" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF SYNTHETIC FIBRES", - "hsn_code": "62171020" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF WOOL", - "hsn_code": "62171030" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF SILK", - "hsn_code": "62171040" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF REGENERATED FIBRE", - "hsn_code": "62171050" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : FOR ARTICLES OF\nAPPAREL OF OTHER FIBRES", - "hsn_code": "62171060" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : STOCKINGS, SOCKS\nSOCKETTES AND THE LIKE OF COTTON", - "hsn_code": "62171070" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - ACCESSORIES : OTHER", - "hsn_code": "62171090" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - PARTS : COLLAR CUFFS AND THE LIKE OF\nCOTTON", - "hsn_code": "62179010" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - PARTS : OF SILK", - "hsn_code": "62179020" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - PARTS : OF WOOL", - "hsn_code": "62179030" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - PARTS : SEPARATELY PRESENTED\nREMOVABLE LININGS FOR RAINCOATS AND OTHER", - "hsn_code": "62179040" - }, - { - "description": "OTHER MADE UP CLOTHING ACCESSORIES; PARTS OF GARMENTS OR OF CLOTHING\nACCESSORIES, OTHER THAN THOSE OF HEADING 6212 - PARTS : OTHER", - "hsn_code": "62179090" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS ELECTRIC BLANKETS", - "hsn_code": "63011000" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS BLANKETS (OTHER THAN ELECTRIC BLANKETS) AND\nTRAVELLING RUGS, OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "63012000" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS BLANKETS (OTHER THAN ELECTRIC BLANKETS) AND\nTRAVELLING RUGS, OF COTTON", - "hsn_code": "63013000" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS BLANKETS (OTHER THAN ELECTRIC BLANKETS) AND\nTRAVELLING RUGS, OF SYNTHETIC FIBRES", - "hsn_code": "63014000" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS OTHER BLANKETS AND TRAVELLING RUGS:JUTE BLANKETS\nINCLUDING BLANKETS OF BLENDED JUTE", - "hsn_code": "63019010" - }, - { - "description": "BLANKETS AND TRAVELLING RUGS OTHER BLANKETS AND TRAVELLING RUGS: OTHER", - "hsn_code": "63019090" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN BED LINEN, KNITTED OR\nCROCHETED: OF COTTON", - "hsn_code": "63021010" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN BED LINEN, KNITTED OR\nCROCHETED: OTHER", - "hsn_code": "63021090" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN - OF COTTON - OF HANDLOOM", - "hsn_code": "63022110" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN - OF COTTON - OTHER", - "hsn_code": "63022190" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER BED LINEN, PRINTED: OF\nMAN-MADE FIBRES", - "hsn_code": "63022200" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER BED LINEN, PRINTED: OF\nOTHER TEXTILE MATERIALS", - "hsn_code": "63022900" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER BED LINEN: OF COTTON", - "hsn_code": "63023100" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER BED LINEN: OF MAN-MADE\nFIBRES", - "hsn_code": "63023200" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER BED LINEN: OF OTHER\nTEXTILE MATERIALS", - "hsn_code": "63023900" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN TABLE LINEN, KNITTED OR\nCROCHETED: OF SILK", - "hsn_code": "63024010" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN TABLE LINEN, KNITTED OR\nCROCHETED: OF WOOL OR FINE ANIMAL HAIR", - "hsn_code": "63024020" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN TABLE LINEN, KNITTED OR\nCROCHETED: OF COTTON", - "hsn_code": "63024030" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN TABLE LINEN, KNITTED OR\nCROCHETED: OF MAN-MADE FIBRES", - "hsn_code": "63024040" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN TABLE LINEN, KNITTED OR\nCROCHETED: OTHER", - "hsn_code": "63024090" - }, - { - "description": "OTHER TABLE LINEN - OF COTTON - OF HANDLOOM", - "hsn_code": "63025110" - }, - { - "description": "OTHER TABLE LINEN- OF COTTON - OTHER", - "hsn_code": "63025190" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER TABLE LINEN: OF FLAX", - "hsn_code": "63025200" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER TABLE LINEN: OF MAN\nMADE FIBRES", - "hsn_code": "63025300" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER TABLE LINEN: OF OTHER\nTEXTILE MATERIALS", - "hsn_code": "63025900" - }, - { - "description": "TOILET LINEN AND KITCHEN LINEN, OF TERRY TOWELLING OR SIMILAR TERRY FABRICS, OF\nCOTTON - OF HANDLOOM", - "hsn_code": "63026010" - }, - { - "description": "TOILET LINEN AND KITCHEN LINEN, OF TERRY TOWELLING OR SIMILAR TERRY FABRICS, OF\nCOTTON - OTHER", - "hsn_code": "63026090" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN - OF COTTON - HANDLOOM", - "hsn_code": "63029110" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN - OF COTTON - OTHER THAN\nHANDLOOM", - "hsn_code": "63029190" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER: OF FLAX", - "hsn_code": "63029200" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER: OF MAN-MADE FIBRES", - "hsn_code": "63029300" - }, - { - "description": "BED LINEN, TABLE LINEN, TOILET LINEN AND KITCHEN LINEN OTHER: OF OTHER TEXTILE\nMATERIALS", - "hsn_code": "63029900" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES KNITTED OR\nCROCHETED: OF COTTON", - "hsn_code": "63031100" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES KNITTED OR\nCROCHETED: OF SYNTHETIC FIBRES", - "hsn_code": "63031200" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES KNITTED OR\nCROCHETED: OF OTHER TEXTILE MATERIALS", - "hsn_code": "63031900" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES OTHER: OF\nCOTTON", - "hsn_code": "63039100" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES OTHER: OF\nSYNTHETIC FIBRES", - "hsn_code": "63039200" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES OTHER: OF\nOTHER TEXTILE MATERIALS: SILK SHOWER CURTAINS", - "hsn_code": "63039910" - }, - { - "description": "CURTAINS (INCLUDING DRAPES) AND INTERIOR BLINDS; CURTAIN OR BED VALANCES OTHER: OF\nOTHER TEXTILE MATERIALS: OTHER", - "hsn_code": "63039990" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 BEDSPREADS: KNITTED OR\nCROCHETED", - "hsn_code": "63041100" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 BEDSPREADS: OTHER:\nBEDSHEETS AND BEDCOVERS, OF COTTON", - "hsn_code": "63041910" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 BEDSPREADS: OTHER:\nBEDSPREADS OF SILK", - "hsn_code": "63041920" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 BEDSPREADS: OTHER:\nBEDSHEETS AND BEDCOVERS OF MAN-MADE FIBRES", - "hsn_code": "63041930" - }, - { - "description": "BED SHEETS AND BED COVERS OF COTTON, HANDLOOM", - "hsn_code": "63041940" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 BEDSPREADS: OTHER:\nOTHER", - "hsn_code": "63041990" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: KNITTED OR\nCROCHETED: SILK BELT", - "hsn_code": "63049110" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: KNITTED OR\nCROCHETED:WOOLLEN CUSHION COVER", - "hsn_code": "63049120" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: KNITTED OR\nCROCHETED: OTHER", - "hsn_code": "63049190" - }, - { - "description": "COUNTERPANES OF HANDLOOM", - "hsn_code": "63049211" - }, - { - "description": "COUNTERPANES - OTHER THAN HANDLOOM", - "hsn_code": "63049219" - }, - { - "description": "NAPKINS OF HANDLOOM", - "hsn_code": "63049221" - }, - { - "description": "NAPKINS - OTHER THAN HANDLOOM", - "hsn_code": "63049229" - }, - { - "description": "PILLOW CASES AND PILLOW SLIPS - OF HANDLOOM", - "hsn_code": "63049231" - }, - { - "description": "PILLOW CASES AND PILLOW SLIPS - OTHER THAN HANDLOOM", - "hsn_code": "63049239" - }, - { - "description": "TABLE CLOTH AND TABLE COVERS - OF HANDLOOM", - "hsn_code": "63049241" - }, - { - "description": "TABLE CLOTH AND TABLE COVERS - OTHER THAN HANDLOOM", - "hsn_code": "63049249" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: NOT KNITTED OR\nCROCHETED, OF COTTON: TERRY TOWEL", - "hsn_code": "63049250" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: NOT KNITTED OR\nCROCHETED, OF COTTON: TOWELS, OTHER THAN TERRY TOWEL", - "hsn_code": "63049260" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: NOT KNITTED OR\nCROCHETED, OF COTTON: MOSQUITO NETS", - "hsn_code": "63049270" - }, - { - "description": "CUSHION COVERS OF HANDLOOM", - "hsn_code": "63049281" - }, - { - "description": "CUSHION COVERS - OTHER THAN HANDLOOM", - "hsn_code": "63049289" - }, - { - "description": "OTHER FURNISHING ARTICLES OF HANDLOOM", - "hsn_code": "63049291" - }, - { - "description": "OTHER FURNISHING ARTICLES - OTHER THAN HANDLOOM", - "hsn_code": "63049299" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: NOT KNITTED OR\nCROCHETED, OF SYNTHETIC FIBRES", - "hsn_code": "63049300" - }, - { - "description": "OTHER FURNISHING ARTICLES, EXCLUDING THOSE OF HEADING 9404 OTHER: NOT KNITTED OR\nCROCHETED, OF OTHER TEXTILE MATERIAL: SILK CUSHION COVERS", - "hsn_code": "63049910" - }, - { - "description": "OTHER FURNISHING ARTICLES - NOT KNITTED OR CROCHETED, OF OTHER TEXTILE MATERIAL - OF\nSILK, HANDLOOM", - "hsn_code": "63049991" - }, - { - "description": "OTHER FURNISHING ARTICLES - NOT KNITTED OR CROCHETED, OF OTHER TEXTILE MATERIAL - OF\nWOOL, HANDLOOM", - "hsn_code": "63049992" - }, - { - "description": "OTHER FURNISHING ARTICLES - NOT KNITTED OR CROCHETED, OF OTHER TEXTILE MATERIAL -\nOTHER THAN OF SILK, HANDLOOM OR", - "hsn_code": "63049999" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE BAGGING FOR RAW COTTON", - "hsn_code": "63051010" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE CORN (GRAINS) SACKS", - "hsn_code": "63051020" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE HESSIAN BAGS", - "hsn_code": "63051030" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE SACKING BAGS", - "hsn_code": "63051040" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE WOOL SACKS", - "hsn_code": "63051050" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: PLASTIC COATED OR PAPER CUM POLYTHENE LINED JUTE BAGS\nAND SACKS", - "hsn_code": "63051060" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: PAPER LAMINATED HESSIAN JUTE", - "hsn_code": "63051070" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: JUTE SOIL SAVERS", - "hsn_code": "63051080" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF JUTE OR OF OTHER TEXTILE\nBAST FIBRES OF HEADING 5303: OTHER", - "hsn_code": "63051090" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF COTTON", - "hsn_code": "63052000" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF MAN-MADE TEXTILE\nMATERIALS: FLEXIBLE INTERMEDIATE BULK CONTAINERS", - "hsn_code": "63053200" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF MAN-MADE TEXTILE\nMATERIALS: OTHER, OF POLYETHYLENE OR POLYPROPYLENE STRIP OR THE LIKE", - "hsn_code": "63053300" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF MAN-MADE TEXTILE\nMATERIALS: OTHER", - "hsn_code": "63053900" - }, - { - "description": "SACKS AND BAGS, OF A KIND USED FOR THE PACKING OF GOODS OF OTHER TEXTILE MATERIALS", - "hsn_code": "63059000" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS: OF COTTON", - "hsn_code": "63061100" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS: OF SYNTHETIC FIBRES", - "hsn_code": "63061200" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS:OF OTHER TEXTILE\nMATERIALS: JUTE TARPAULINS (INCLUDING DW TARPAULIN)", - "hsn_code": "63061910" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS:OF OTHER TEXTILE\nMATERIALS: BLINDS OR AWNINGS OF COIR", - "hsn_code": "63061920" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS:OF OTHER TEXTILE\nMATERIALS: VENETIAN OR AUSTRIAN BLINDS", - "hsn_code": "63061930" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TARPAULINS, AWNINGS AND SUNBLINDS:OF OTHER TEXTILE\nMATERIALS: OTHER", - "hsn_code": "63061990" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TENTS: OF COTTON", - "hsn_code": "63062100" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TENTS: OF SYNTHETIC FIBRES", - "hsn_code": "63062200" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS TENTS: OF OTHER TEXTILE MATERIALS: OF JUTE", - "hsn_code": "63062910" - }, - { - "description": "OTHERS", - "hsn_code": "63062990" - }, - { - "description": "SAILS", - "hsn_code": "63063000" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS SAILS: OF SYNTHETIC FIBRES", - "hsn_code": "63063100" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS SAILS: OF OTHER TEXTILE MATERIALS: OF COTTON", - "hsn_code": "63063910" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS SAILS: OF OTHER TEXTILE MATERIALS: OTHER", - "hsn_code": "63063990" - }, - { - "description": "PNEUMATIC MATTRESSES", - "hsn_code": "63064000" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS PNEUMATIC MATTRESSES: OF COTTON", - "hsn_code": "63064100" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS; TENTS; SAILS FOR BOATS, SAILBOARDS OR\nLANDCRAFT; CAMPING GOODS PNEUMATIC MATTRESSES: OF OTHER TEXTILE MATERIALS", - "hsn_code": "63064900" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS;TENTS;SAILS FOR BOATS,SAILBOARDS OR\nLANDCRAFT;CAMPING GOODS-OTHER---OF COTTON", - "hsn_code": "63069010" - }, - { - "description": "TARPAULINS, AWNINGS AND SUNBLINDS;TENTS;SAILS FOR BOATS,SAILBOARDS OR\nLANDCRAFT;CAMPING GOODS-OTHER---OF OTHER TEXTILE MATERIALS", - "hsn_code": "63069090" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS FLOOR-CLOTHS, DISH-CLOTHS,\nDUSTERS AND SIMILAR CLEANING CLOTHS: OF COTTON", - "hsn_code": "63071010" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS FLOOR-CLOTHS, DISH-CLOTHS,\nDUSTERS AND SIMILAR CLEANING CLOTHS: OF MAN-MADE FIBRES", - "hsn_code": "63071020" - }, - { - "description": "FLOOR CLOTHES, DISH CLOTHES, DUSTERS AND SIMILAR CLEANING CLOTHES - OF\nCOTTON,HANDLOOM", - "hsn_code": "63071030" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS FLOOR-CLOTHS, DISH-CLOTHS,\nDUSTERS AND SIMILAR CLEANING CLOTHS: OTHER", - "hsn_code": "63071090" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS LIFE-JACKETS AND LIFE-BELTS:OF\nCOTTON", - "hsn_code": "63072010" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS LIFE-JACKETS AND LIFE-BELTS:OTHER", - "hsn_code": "63072090" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER: DRESS MATERIALS HAND\nPRINTED: OF COTTON", - "hsn_code": "63079011" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER: DRESS MATERIALS HAND\nPRINTED:OF SILK", - "hsn_code": "63079012" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER: DRESS MATERIALS HAND\nPRINTED: OF MAN-MADE FIBRES", - "hsn_code": "63079013" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER: DRESS MATERIALS HAND\nPRINTED:OTHER", - "hsn_code": "63079019" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER:MADE UP ARTICLES OF COTTON", - "hsn_code": "63079020" - }, - { - "description": "OTHER MADE UP ARTICLES, INCLUDING DRESS PATTERNS OTHER: OTHER", - "hsn_code": "63079090" - }, - { - "description": "SETS CONSISTING OF WOVEN FABRIC AND YARN, WHETHER OR NOT WITH ACCESSORIES, FOR\nMAKING UP INTO RUGS,TAPESTRIES, EMBROIDERED TABLE CLOTHS OR SERVIETTES,OR SIMILAR\nTEXTILE ARTICLES, PUT UP IN PACKINGSFOR RETAIL SALE", - "hsn_code": "63080000" - }, - { - "description": "WORN CLOTHING AND OTHER WORN ARTICLES", - "hsn_code": "63090000" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS SORTED: WOOLLEN RAGS", - "hsn_code": "63101010" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS SORTED: COTTON RAGS", - "hsn_code": "63101020" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS SORTED: GUNNY CUTTINGS", - "hsn_code": "63101030" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS SORTED: OTHER", - "hsn_code": "63101090" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS OTHER: WOOLEN RAGS", - "hsn_code": "63109010" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS OTHER: COTTON RAGS", - "hsn_code": "63109020" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS OTHER: GUNNY CUTTINGS", - "hsn_code": "63109030" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS OTHER: SYNTHETIC RAGS .", - "hsn_code": "63109040" - }, - { - "description": "USED OR NEW RAGS, SCRAP TWINE, CORDAGE, ROPE AND CABLES AND WORN OUT ARTICLES OF\nTWINE, CORDAGE, ROPE OR CABLES, OF TEXTILE MATERIALS OTHER: OTHER", - "hsn_code": "63109090" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES FOOTWEAR INCORPORATING A\nPROTECTIVE METAL TOE-CAP: OF RUBBER", - "hsn_code": "64011010" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES FOOTWEAR INCORPORATING A\nPROTECTIVE METAL TOE-CAP: OTHER", - "hsn_code": "64011090" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : COVERING THE\nKNEE: OF RUBBER", - "hsn_code": "64019110" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : COVERING THE\nKNEE: OTHER", - "hsn_code": "64019190" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : COVERING THE\nANKLE BUT NOT COVERING THE KNEE: OF RUBBER", - "hsn_code": "64019210" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : COVERING THE\nANKLE BUT NOT COVERING THE KNEE: OTHER", - "hsn_code": "64019290" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : OTHER: OF\nRUBBER", - "hsn_code": "64019910" - }, - { - "description": "WATERPROOF FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR OF PLASTICS, THE\nUPPERS OF WHICH ARE NEITHER FIXED TO THE SOLE NOR ASSEMBLED BY STITCHING, RIVETING,\nNAILING, SCREWING, PLUGGING OR SIMILAR PROCESSES OTHER FOOTWEAR : OTHER: OTHER", - "hsn_code": "64019990" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS SPORTS\nFOOTWEAR : SKI-BOOTS, CROSS-COUNTRY SKI FOOTWEAR AND SNOWBOARD BOOTS: OF\nRUBBER", - "hsn_code": "64021210" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS SPORTS\nFOOTWEAR : SKI-BOOTS, CROSS-COUNTRY SKI FOOTWEAR AND SNOWBOARD BOOTS: OTHER", - "hsn_code": "64021290" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS SPORTS\nFOOTWEAR : OTHER : OF RUBBER", - "hsn_code": "64021910" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS SPORTS\nFOOTWEAR : OTHER : OTHER", - "hsn_code": "64021990" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS FOOTWEAR WITH\nUPPER STRAPS OR THONGS ASSEMBLED TO THE SOLE BY MEANS OF PLUGS: OF RUBBER", - "hsn_code": "64022010" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS FOOTWEAR WITH\nUPPER STRAPS OR THONGS ASSEMBLED TO THE SOLE BY MEANS OF PLUGS: OTHER", - "hsn_code": "64022090" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR, INCORPORATING A PROTECTIVE METAL TOE-CAP: OF RUBBER", - "hsn_code": "64023010" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR, INCORPORATING A PROTECTIVE METAL TOE-CAP: OTHER", - "hsn_code": "64023090" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR :COVERING THE ANKLE:OF RUBBER", - "hsn_code": "64029110" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR :COVERING THE ANKLE:OTHER", - "hsn_code": "64029190" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR :OTHER: OF RUBBER", - "hsn_code": "64029910" - }, - { - "description": "OTHER FOOTWEAR WITH OUTER SOLES AND UPPERS OF RUBBER OR PLASTICS OTHER\nFOOTWEAR :OTHER: OTHER", - "hsn_code": "64029990" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER SPORTS FOOTWEAR : SKI-BOOTS, CROSS-COUNTRY SKI FOOTWEAR\nAND SNOWBOARD BOOTS", - "hsn_code": "64031200" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER SPORTS FOOTWEAR : OTHER: WITH OUTER SOLES OF LEATHER", - "hsn_code": "64031910" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER SPORTS FOOTWEAR : OTHER: WITH OUTER SOLES OF RUBBER", - "hsn_code": "64031920" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER SPORTS FOOTWEAR :OTHER: OTHER", - "hsn_code": "64031990" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nCLOSED TOE: FOR MEN", - "hsn_code": "64032011" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nCLOSED TOE: FOR WOMEN", - "hsn_code": "64032012" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nCLOSED TOE: FOR CHILDREN", - "hsn_code": "64032013" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nCLOSED TOE: OTHER", - "hsn_code": "64032019" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nOPEN TOE: FOR MEN", - "hsn_code": "64032021" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nOPEN TOE:FOR WOMEN", - "hsn_code": "64032022" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nOPEN TOE:FOR CHILDREN", - "hsn_code": "64032023" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: ALL LEATHER,\nOPEN TOE:OTHERS", - "hsn_code": "64032029" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: OF LEATHER\nSOLES WITH EMBROIDERED UPPERS", - "hsn_code": "64032030" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: KOLAPURI\nCHAPPALS AND SIMILAR FOOTWEAR", - "hsn_code": "64032040" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR WITH OUTER SOLES OF LEATHER, AND UPPERS WHICH\nCONSIST OF LEATHER STRAPS ACROSS THE INSTEP AND AROUND THE BIG TOE: OTHER", - "hsn_code": "64032090" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER FOOTWEAR MADE ON A BASE OR PLATFORM OF WOOD, NOT HAVING\nAN INNER SOLE OR A PROTECTIVE METAL TOE-CAP", - "hsn_code": "64033000" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, INCORPORATING A PROTECTIVE METAL TOE-CAP", - "hsn_code": "64034000" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : COVERING THE\nANKLE: ALL LEATHER SHOES: FOR MEN", - "hsn_code": "64035111" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : COVERING THE\nANKLE: ALL LEATHER SHOES: FOR WOMEN", - "hsn_code": "64035112" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : COVERING THE\nANKLE: ALL LEATHER SHOES: FOR CHILDREN", - "hsn_code": "64035113" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : COVERING THE\nANKLE: ALL LEATHER SHOES: OTHER", - "hsn_code": "64035119" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : COVERING THE\nANKLE: OTHER", - "hsn_code": "64035190" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : OTHER: FOR\nMEN", - "hsn_code": "64035910" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : OTHER: FOR\nWOMEN", - "hsn_code": "64035920" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : OTHER: FOR\nCHILDREN", - "hsn_code": "64035930" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR, WITH OUTER SOLES OF LEATHER : OTHER: OTHER", - "hsn_code": "64035990" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: COVERING THE ANKLE: LEATHER BOOTS AND\nOTHER FOOTWEAR WITH RUBBER SOLE", - "hsn_code": "64039110" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: COVERING THE ANKLE: LEATHER FOOTWEAR\nWITH PLASTIC AND SYNTHETIC SOLE", - "hsn_code": "64039120" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: COVERING THE ANKLE: OTHER", - "hsn_code": "64039190" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: OTHER: LEATHER SANDALS WITH RUBBER SOLE", - "hsn_code": "64039910" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: OTHER: LEATHER SANDALS WITH PLASTIC OR\nSYNTHETIC SOLE", - "hsn_code": "64039920" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF LEATHER OTHER FOOTWEAR: OTHER: OTHER", - "hsn_code": "64039990" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nSPORTS FOOTWEAR; TENNIS SHOES, BASKETBALL SHOES, GYM SHOES, TRAINING SHOES AND\nTHE LIKE: OF RUBBER SOLE WITH CANVAS UPPER", - "hsn_code": "64041110" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nSPORTS FOOTWEAR; TENNIS SHOES, BASKETBALL SHOES, GYM SHOES, TRAINING SHOES AND\nTHE LIKE: OF RUBBER SOLE WITH LEATHER CLOTH UPPERS", - "hsn_code": "64041120" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nSPORTS FOOTWEAR; TENNIS SHOES, BASKETBALL SHOES, GYM SHOES, TRAINING SHOES AND\nTHE LIKE: OTHER", - "hsn_code": "64041190" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nOTHER: OF RUBBER SOLE WITH CANVAS UPPER", - "hsn_code": "64041910" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nOTHER: OF RUBBER SOLE WITH LEATHER CLOTH UPPERS", - "hsn_code": "64041920" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF RUBBER OR PLASTICS :\nOTHER: OTHER", - "hsn_code": "64041990" - }, - { - "description": "FOOTWEAR WITH OUTER SOLES OF RUBBER, PLASTICS, LEATHER OR COMPOSITION LEATHER\nAND UPPERS OF TEXTILE MATERIALS FOOTWEAR WITH OUTER SOLES OF LEATHER OR\nCOMPOSITION LEATHER", - "hsn_code": "64042000" - }, - { - "description": "OTHER FOOTWEAR WITH UPPERS OF LEATHER OR COMPOSITION LEATHER", - "hsn_code": "64051000" - }, - { - "description": "OTHER FOOTWEAR WITH UPPERS OF TEXTILE MATERIALS", - "hsn_code": "64052000" - }, - { - "description": "OTHER FOOTWEAR OTHER", - "hsn_code": "64059000" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF UPPERS AND PARTS THEREOF, OTHER\nTHAN STIFFENERS: EMBROIDERED UPPERS OF TEXTILE MATERIALS", - "hsn_code": "64061010" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF UPPERS AND PARTS THEREOF, OTHER\nTHAN STIFFENERS:LEATHER UPPERS (PREPARED)", - "hsn_code": "64061020" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF UPPERS AND PARTS THEREOF, OTHER\nTHAN STIFFENERS:GOAT LINING", - "hsn_code": "64061030" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF UPPERS AND PARTS THEREOF, OTHER\nTHAN STIFFENERS: SHEEP LINING", - "hsn_code": "64061040" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF UPPERS AND PARTS THEREOF, OTHER\nTHAN STIFFENERS:OTHER", - "hsn_code": "64061090" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF OUTER SOLES AND HEELS, OF RUBBER\nOR PLASTICS", - "hsn_code": "64062000" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---OF WOOD", - "hsn_code": "64069010" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---LEATHER PARTS OTHER THAN\nSOLES AND PREPARED UPPERS", - "hsn_code": "64069020" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---LEATHER SOLES", - "hsn_code": "64069030" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---GAITERS, LEGGINGS AND\nSIMILAR ARTICLES", - "hsn_code": "64069040" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---PARTS OF GAITERS, LEGGINGS\nAND SIMILAR ARTICLES", - "hsn_code": "64069050" - }, - { - "description": "PARTS OF FOOTWEAR (INCLUDING UPPERS WHETHER OR NOT ATTACHED TO SOLES OTHER\nTHAN OUTER SOLES); REMOVABLE IN-SOLES, HEEL CUSHIONS AND SIMILAR ARTICLES; GAITERS,\nLEGGINGS AND SIMILAR ARTICLES, AND PARTS THEREOF- OTHER---OTHER", - "hsn_code": "64069090" - }, - { - "description": "HAT-FORMS, HAT BODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE\nBRIMS; PLATEAUX AND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT HAT-FORMS, HAT\nBODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE BRIMS; PLATEAUX\nAND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT: OF COTTON", - "hsn_code": "65010010" - }, - { - "description": "HAT-FORMS, HAT BODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE\nBRIMS; PLATEAUX AND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT HAT-FORMS, HAT\nBODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE BRIMS; PLATEAUX\nAND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT: OF WOOL AND FUR FELT", - "hsn_code": "65010020" - }, - { - "description": "HAT-FORMS, HAT BODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE\nBRIMS; PLATEAUX AND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT HAT-FORMS, HAT\nBODIES AND HOODS OF FELT, NEITHER BLOCKED TO SHAPE NOR WITH MADE BRIMS; PLATEAUX\nAND MANCHONS (INCLUDING SLIT MANCHONS), OF FELT: OTHER", - "hsn_code": "65010090" - }, - { - "description": "HAT-SHAPES, PLAITED OR MADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED\nTO SHAPE, NOR WITH MADE BRIMS, NOR LINED, NOR TRIMMED HAT-SHAPES, PLAITED OR\nMADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED TO SHAPE, NOR WITH\nMADE BRIMS, NOR LINED, NOR TRIMMED: OF COTTON", - "hsn_code": "65020010" - }, - { - "description": "HAT-SHAPES, PLAITED OR MADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED\nTO SHAPE, NOR WITH MADE BRIMS, NOR LINED, NOR TRIMMED HAT-SHAPES, PLAITED OR\nMADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED TO SHAPE, NOR WITH\nMADE BRIMS, NOR LINED, NOR TRIMMED: OF WOOL", - "hsn_code": "65020020" - }, - { - "description": "HAT-SHAPES, PLAITED OR MADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED\nTO SHAPE, NOR WITH MADE BRIMS, NOR LINED, NOR TRIMMED HAT-SHAPES, PLAITED OR\nMADE BY ASSEMBLING STRIPS OF ANY MATERIAL, NEITHER BLOCKED TO SHAPE, NOR WITH\nMADE BRIMS, NOR LINED, NOR TRIMMED: OTHER", - "hsn_code": "65020090" - }, - { - "description": "FELT HATS AND OTHER FELT HEADGEAR, MADE FROM THE HAT BODIES, HOODS OR PLATEAUX\nOF HEADING6501, WHETHER OR NOT LINED OR TRIMMED", - "hsn_code": "65030000" - }, - { - "description": "HATS AND OTHER HEADGEAR, PLAITED OR MADE BY ASSEMBLING STRIPS OF ANY MATERIAL,\nWHETHER ORNOT LINED OR TRIMMED", - "hsn_code": "65040000" - }, - { - "description": "HATS AND OTHER HEADGEAR, KNITTED OR CROCHETED, OR MADE UP FROM LACE, FELT OR\nOTHER TEXTILE FABRIC, IN THE PIECE (BUT NOT IN STRIPS), WHETHER OR NOT LINED OR\nTRIMMED; HAIR-NETS OF ANY MATERIAL, WHETHER OR NOT LINED OR TRIMMED--- HAIR-NETS", - "hsn_code": "65050010" - }, - { - "description": "HATS AND OTHER HEADGEAR, KNITTED OR CROCHETED, OR MADE UP FROM LACE, FELT OR\nOTHER TEXTILE FABRIC, IN THE PIECE (BUT NOT IN STRIPS), WHETHER OR NOT LINED OR\nTRIMMED; HAIR-NETS OF ANY MATERIAL, WHETHER OR NOT LINED OR TRIMME---OTHER", - "hsn_code": "65050090" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED SAFETY HEADGEAR: SPEED GLASS\nWELDING HELMETS OR OTHER HELMETS MEANT FOR INDUSTRIAL USE", - "hsn_code": "65061010" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED SAFETY HEADGEAR: OTHER", - "hsn_code": "65061090" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED OTHER:OF RUBBER OR OF PLASTICS", - "hsn_code": "65069100" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED OTHER:OF FURSKIN", - "hsn_code": "65069200" - }, - { - "description": "OTHER HEADGEAR, WHETHER OR NOT LINED OR TRIMMED OTHER:OF OTHER MATERIALS", - "hsn_code": "65069900" - }, - { - "description": "HEAD-BANDS, LININGS, COVERS, HAT FOUNDATIONS, HAT FRAMES, PEAKS AND CHINSTRAPS,\nFOR HEADGEAR", - "hsn_code": "65070000" - }, - { - "description": "UMBRELLAS AND SUN UMBRELLAS (INCLUDING WALKINGSTICK UMBRELLAS, GARDEN\nUMBRELLAS AND SIMILAR UMBRELLAS) - GARDEN OR SIMILAR UMBRELLAS", - "hsn_code": "66011000" - }, - { - "description": "UMBRELLAS AND SUN UMBRELLAS (INCLUDING WALKINGSTICK UMBRELLAS, GARDEN\nUMBRELLAS AND SIMILAR UMBRELLAS)- OTHER: HAVING A TELESCOPIC SHAFT", - "hsn_code": "66019100" - }, - { - "description": "UMBRELLAS AND SUN UMBRELLAS (INCLUDING WALKINGSTICK UMBRELLAS, GARDEN\nUMBRELLAS AND SIMILAR UMBRELLAS)- OTHER: OTHER", - "hsn_code": "66019900" - }, - { - "description": "WALKING-STICKS, SEAT-STICKS, WHIPS, RIDING CROPS AND THE LIKE", - "hsn_code": "66020000" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602- HANDLES AND\nKNOBS:UMBRELLA HANDLES WITH OR WITHOUT STEMS, PLASTIC", - "hsn_code": "66031010" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602- HANDLES AND\nKNOBS:OTHER", - "hsn_code": "66031090" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602 - UMBRELLA\nFRAMES, INCLUDING FRAMES MOUNTED ON SHAFTS (STICKS)", - "hsn_code": "66032000" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602-\nOTHER:UMBRELLA RIBS", - "hsn_code": "66039010" - }, - { - "description": "PARTS, TRIMMINGS AND ACCESSORIES OF ARTICLES OF HEADING 6601 TO 6602- OTHER:OTHER", - "hsn_code": "66039090" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS WITH THEIR FEATHERS OR DOWN, FEATHERS, PARTS OF\nFEATHERS, DOWN AND ARTICLES THEREOF (OTHER THAN GOODS OF HEADING 0505 AND\nWORKED QUILLS AND SCAPES) SKINS AND OTHER PARTS OF BIRDS WITH THEIR FEATHERS OR\nDOWN, FEATHERS, PARTS OF FEATHERS, DOWN AND ARTICLES THEREOF (OTHER THAN GOODS\nOF HEADING 0505 AND WORKED QUILLS AND SCAPES): FEATHER DUSTERS", - "hsn_code": "67010010" - }, - { - "description": "SKINS AND OTHER PARTS OF BIRDS WITH THEIR FEATHERS OR DOWN, FEATHERS, PARTS OF\nFEATHERS, DOWN AND ARTICLES THEREOF (OTHER THAN GOODS OF HEADING 0505 AND\nWORKED QUILLS AND SCAPES) SKINS AND OTHER PARTS OF BIRDS WITH THEIR FEATHERS OR\nDOWN, FEATHERS, PARTS OF FEATHERS, DOWN AND ARTICLES THEREOF (OTHER THAN GOODS\nOF HEADING 0505 AND WORKED QUILLS AND SCAPES): OTHER", - "hsn_code": "67010090" - }, - { - "description": "ARTIFICIAL FLOWERS, FOLIAGE AND FRUIT AND PARTS THEREOF; ARTICLES MADE OF ARTIFICIAL\nFLOWERS, FOLIAGE OR FRUIT OF PLASTICS: DECORATIVE PLANTS", - "hsn_code": "67021010" - }, - { - "description": "ARTIFICIAL FLOWERS, FOLIAGE AND FRUIT AND PARTS THEREOF; ARTICLES MADE OF ARTIFICIAL\nFLOWERS, FOLIAGE OR FRUIT OF PLASTICS: OTHER", - "hsn_code": "67021090" - }, - { - "description": "ARTIFICIAL FLOWERS, FOLIAGE AND FRUIT AND PARTS THEREOF; ARTICLES MADE OF ARTIFICIAL\nFLOWERS, FOLIAGE OR FRUIT OF OTHER MATERIALS: OF JUTE", - "hsn_code": "67029010" - }, - { - "description": "ARTIFICIAL FLOWERS, FOLIAGE AND FRUIT AND PARTS THEREOF; ARTICLES MADE OF ARTIFICIAL\nFLOWERS, FOLIAGE OR FRUIT OF OTHER MATERIALS: OTHER", - "hsn_code": "67029090" - }, - { - "description": "HUMAN HAIR, DRESSED, THINNED, BLEACHED OR OTHERWISE WORKED; WOOL OR OTHER\nANIMAL HAIR OR OTHER TEXTILE ATERIALS, PREPARED FOR USE IN MAKING WIGS OR THE LIKE\nHUMAN HAIR, DRESSED, THINNED, BLEACHED OR OTHERWISE WORKED; WOOL OR\nOTHERANIMAL HAIROR OTHER TEXTILE MATERIALS, PREPARED FOR USE INMAKING WIGS OR\nTHE LIKE: HUMAN HAIR, DRESSED, THINNED, BLEACHED OTHERWISE WORKED", - "hsn_code": "67030010" - }, - { - "description": "HUMAN HAIR, DRESSED, THINNED, BLEACHED OR OTHERWISE WORKED; WOOL OR OTHER\nANIMAL HAIR OR OTHER TEXTILE ATERIALS, PREPARED FOR USE IN MAKING WIGS OR THE LIKE\nHUMAN HAIR, DRESSED, THINNED, BLEACHED OR OTHERWISE WORKED; WOOL OR\nOTHERANIMAL HAIROR OTHER TEXTILE MATERIALS, PREPARED FOR USE INMAKING WIGS OR\nTHE LIKE: WOOL OR OTHER ANIMAL HAIR OR OTHER TEXTILE MATERIALS, PREPARED FOR USE IN\nMAKING WIGS OR THE LIKE", - "hsn_code": "67030020" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES,SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED - OF SYNTHETIC TEXTILE MATERIALS: COMPLETE WIGS", - "hsn_code": "67041100" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED - OF SYNTHETIC TEXTILE MATERIALS: OTHER: HAIR NETS", - "hsn_code": "67041910" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED - OF SYNTHETIC TEXTILE MATERIALS: OTHER: OTHER", - "hsn_code": "67041990" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED OF HUMAN HAIR: WIGS", - "hsn_code": "67042010" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED OF HUMAN HAIR: HAIR NETS", - "hsn_code": "67042020" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED OF HUMAN HAIR: OTHER", - "hsn_code": "67042090" - }, - { - "description": "WIGS, FALSE BEARDS, EYEBROWS AND EYELASHES, SWITCHES AND THE LIKE, OF HUMAN OR\nANIMAL HAIR OR OF TEXTILE MATERIALS; ARTICLES OF HUMAN HAIR NOT ELSEWHERE SPECIFIED\nOR INCLUDED OF OTHER MATERIALS", - "hsn_code": "67049000" - }, - { - "description": "SETTS, CURBSTONES AND FLAGSTONES, OF NATURAL STONE (EXCEPT SLATE)", - "hsn_code": "68010000" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) TILES, CUBES AND SIMILAR\nARTICLES, WHETHER OR NOT RECTANGULAR (INCLUDING SQUARE), THE LARGEST SURFACE AREA\nOF WHICH IS CAPABLE OF BEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7\nCM; ARTIFICIALLY COLOURED GRANULES,", - "hsn_code": "68021000" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : MARBLE, TRAVERTINE AND ALABASTER: MARBLE BLOCKS OR TILES", - "hsn_code": "68022110" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : MARBLE, TRAVERTINE AND ALABASTER: MARBLE MONUMENTAL STONE", - "hsn_code": "68022120" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : MARBLE, TRAVERTINE AND ALABASTER: OTHER", - "hsn_code": "68022190" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : OTHER CALCAREOUS STONE", - "hsn_code": "68022200" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : GRANITE: GRANITE BLOCKS OR TILES", - "hsn_code": "68022310" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : GRANITE: OTHER", - "hsn_code": "68022390" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER MONUMENTAL OR\nBUILDING STONE AND ARTICLES THEREOF, SIMPLY CUT OR SAWN, WITH A FLAT OR EVEN\nSURFACE : OTHER STONE", - "hsn_code": "68022900" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER: MARBLE,\nTRAVERTINE AND ALABASTER", - "hsn_code": "68029100" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER: OTHER\nCALCAREOUS STONE", - "hsn_code": "68029200" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER: GRANITE", - "hsn_code": "68029300" - }, - { - "description": "WORKED MONUMENTAL OR BUILDING STONE (EXCEPT SLATE) AND ARTICLES THEREOF, OTHER\nTHAN GOODS OF HEADING 6801; MOSAIC CUBES AND THE LIKE, OF NATURAL STONE\n(INCLUDING SLATE), WHETHER OR NOT ON A BACKING; ARTIFICIALLY COLOURED GRANULES,\nCHIPPINGS AND POWDER, OF NATURAL STONE (INCLUDING SLATE) - OTHER: OTHER STONE", - "hsn_code": "68029900" - }, - { - "description": "WORKED SLATE AND ARTICLES OF SLATE OR OF AGGLOMERATED SLATE", - "hsn_code": "68030000" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS\nMILLSTONES AND GRINDSTONES FOR MILLING, GRINDING OR PULPING", - "hsn_code": "68041000" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF AGGLOMERATED\nSYNTHETIC OR NATURAL DIAMOND: DIAMOND IMPREGNATED WHEELS", - "hsn_code": "68042110" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF AGGLOMERATED\nSYNTHETIC OR NATURAL DIAMOND: OTHER", - "hsn_code": "68042190" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS OF\nOTHER AGGLOMERATED ABRASIVES OR OF CERAMICS: GRINDING WHEELS OF SYNTHETIC\nABRASIVES", - "hsn_code": "68042210" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF OTHER\nAGGLOMERATED ABRASIVES OR OF CERAMICS: GRINDING WHEELS OF OTHER MATERIALS", - "hsn_code": "68042220" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF OTHER\nAGGLOMERATED ABRASIVES OR OF CERAMICS: OTHER", - "hsn_code": "68042290" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF NATURAL STONE:\nGRINDING WHEELS MADE OF NATURAL STONE", - "hsn_code": "68042310" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS -\nOTHER MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE: OF NATURAL STONE:\nOTHER", - "hsn_code": "68042390" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS\nHAND SHARPENING OR POLISHING STONES: POLISHING STONES", - "hsn_code": "68043010" - }, - { - "description": "MILLSTONES, GRINDSTONES, GRINDING WHEELS AND THE LIKE, WITHOUT FRAMEWORKS, FOR\nGRINDING, SHARPENING, POLISHING, TRUEING OR CUTTING, HAND SHARPENING OR POLISHING\nSTONES, AND PARTS THEREOF, OF NATURAL STONE, OF AGGLOMERATED NATURAL OR\nARTIFICIAL ABRASIVES, OR OF CERAMICS, WITH OR WITHOUT PARTS OF OTHER MATERIALS\nHAND SHARPENING OR POLISHING STONES: SHARPENING STONES", - "hsn_code": "68043020" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF WOVEN TEXTILE FABRIC ONLY: ABRASIVE CLOTH", - "hsn_code": "68051010" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF WOVEN TEXTILE FABRIC ONLY: OTHER", - "hsn_code": "68051090" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF PAPER OR PAPERBOARD ONLY: EMERY OR CORUNDUM\nCOATED PAPER", - "hsn_code": "68052010" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF PAPER OR PAPERBOARD ONLY: FLINT COATED PAPER", - "hsn_code": "68052020" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF PAPER OR PAPERBOARD ONLY: GLASS OR SAND\nCOATED PAPER", - "hsn_code": "68052030" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF PAPER OR PAPERBOARD ONLY: OTHER ABRASIVE PAPER", - "hsn_code": "68052040" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF PAPER OR PAPERBOARD ONLY: OTHER", - "hsn_code": "68052090" - }, - { - "description": "NATURAL OR ARTIFICIAL ABRASIVE POWDER OR GRAIN, ON A BASE OF TEXTILE MATERIAL, OF\nPAPER, OF PAPERBOARD OR OF OTHER MATERIALS, WHETHER OR NOT CUT TO SHAPE OR SEWN\nOR OTHERWISE MADE UP ON A BASE OF OTHER MATERIALS", - "hsn_code": "68053000" - }, - { - "description": "SLAG WOOL, ROCK WOOL AND SIMILAR MINERAL WOOLS; EXFOLIATED VERMICULITE,\nEXPANDED CLAYS, FOAMED SLAG AND SIMILAR EXPANDED MINERAL MATERIALS; MIXTURES\nAND ARTICLES OF HEAT-INSULATING, SOUND-INSULATING OR SOUND-ABSORBING MINERAL\nMATERIALS, OTHER THAN THOSE OF HEADING 6811 OR 6812 OR OF CHAPTER 69 SLAG WOOL,\nROCK WOOL AND SIMILAR MINERAL WOOLS (INCLUDING INTERMIXTURES THEREOF), IN BULK,\nSHEETS OR ROLLS", - "hsn_code": "68061000" - }, - { - "description": "SLAG WOOL, ROCK WOOL AND SIMILAR MINERAL WOOLS; EXFOLIATED VERMICULITE,\nEXPANDED CLAYS, FOAMED SLAG AND SIMILAR EXPANDED MINERAL MATERIALS; MIXTURES\nAND ARTICLES OF HEAT-INSULATING, SOUND-INSULATING OR SOUND-ABSORBING MINERAL\nMATERIALS, OTHER THAN THOSE OF HEADING 6811 OR 6812 OR OF CHAPTER 69 EXFOLIATED\nVERMICULITE, EXPANDED CLAYS, FOAMED SLAG AND SIMILAR EXPANDED MINERAL MATERIALS\n(INCLUDING INTERMIXTURES THEREOF)", - "hsn_code": "68062000" - }, - { - "description": "SLAG WOOL, ROCK WOOL AND SIMILAR MINERAL WOOLS; EXFOLIATED VERMICULITE,\nEXPANDED CLAYS, FOAMED SLAG AND SIMILAR EXPANDED MINERAL MATERIALS; MIXTURES\nAND ARTICLES OF HEAT-INSULATING, SOUND-INSULATING OR SOUND-ABSORBING MINERAL\nMATERIALS, OTHER THAN THOSE OF HEADING 6811 OR 6812 OR OF CHAPTER 69 OTHER", - "hsn_code": "68069000" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR\nCOAL TAR PITCH) IN-ROLLS: TARFELT ROOFING", - "hsn_code": "68071010" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR\nCOAL TAR PITCH) IN-ROLLS: OTHER", - "hsn_code": "68071090" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR\nCOAL TAR PITCH) OTHER: TARFELT ROOFING", - "hsn_code": "68079010" - }, - { - "description": "ARTICLES OF ASPHALT OR OF SIMILAR MATERIAL (FOR EXAMPLE, PETROLEUM BITUMEN OR\nCOAL TAR PITCH) OTHER: OTHER", - "hsn_code": "68079090" - }, - { - "description": "PANELS, BOARDS, TILES, BLOCKS AND SIMILAR ARTICLES OF VEGETABLE FIBRE, OF STRAW OR OF\nSHAVINGS, CHIPS,PARTICLES, SAWDUST OR OTHER WASTE, OF WOOD,AGGLOMERATED WITH\nCEMENT, PLASTER OR OTHER MINERAL BINDERS", - "hsn_code": "68080000" - }, - { - "description": "ARTICLES OF PLASTER OR OF COMPOSITIONS BASED ON PLASTER - BOARDS, SHEETS, PANELS,\nTILES AND SIMILAR ARTICLES, NOT ORNAMENTED : FACED OR REINFORCED WITH PAPER OR\nPAPERBOARD ONLY", - "hsn_code": "68091100" - }, - { - "description": "ARTICLES OF PLASTER OR OF COMPOSITIONS BASED ON PLASTER - BOARDS, SHEETS, PANELS,\nTILES AND SIMILAR ARTICLES, NOT ORNAMENTED : OTHER", - "hsn_code": "68091900" - }, - { - "description": "ARTICLES OF PLASTER OR OF COMPOSITIONS BASED ON PLASTER - BOARDS, SHEETS, PANELS,\nTILES AND SIMILAR ARTICLES, NOT ORNAMENTED : OTHER ARTICLES", - "hsn_code": "68099000" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED -\nTILES, FLAGSTONES, BRICKS AND SIMILAR ARTICLES: BUILDING BLOCKS AND BRICKS: CEMENT\nBRICKS", - "hsn_code": "68101110" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED -\nTILES, FLAGSTONES, BRICKS AND SIMILAR ARTICLES: BUILDING BLOCKS AND BRICKS: OTHER", - "hsn_code": "68101190" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED -\nTILES, FLAGSTONES, BRICKS AND SIMILAR ARTICLES: OTHER: CEMENT TILES FOR MOSAIC", - "hsn_code": "68101910" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED -\nTILES, FLAGSTONES, BRICKS AND SIMILAR ARTICLES: OTHER: OTHER", - "hsn_code": "68101990" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED\nOTHER ARTICLES: PREFABRICATED STRUCTURAL COMPONENTS FOR BUILDING OR CIVIL\nENGINEERING", - "hsn_code": "68109100" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED\nOTHER ARTICLES: OTHER:CONCRETE BOULDER", - "hsn_code": "68109910" - }, - { - "description": "ARTICLES OF CEMENT, OF CONCRETE OR OF ARTIFICIAL STONE, WHETHER OR NOT REINFORCED\nOTHER ARTICLES: OTHER: OTHER", - "hsn_code": "68109990" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE CORRUGATED\nSHEETS", - "hsn_code": "68111000" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE OTHER SHEETS,\nPANELS, TILES AND SIMILAR ARTICLES: ASBESTOS-CEMENT SHEETS", - "hsn_code": "68112010" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE OTHER SHEETS,\nPANELS, TILES AND SIMILAR ARTICLES: ASBESTOS-CEMENT TILES", - "hsn_code": "68112020" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE OTHER SHEETS,\nPANELS, TILES AND SIMILAR ARTICLES: OTHER", - "hsn_code": "68112090" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE TUBES, PIPES AND\nTUBE OR PIPE FITTINGS: ASBESTOS-CEMENT PIPES", - "hsn_code": "68113010" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE TUBES, PIPES AND\nTUBE OR PIPE FITTINGS: OTHER", - "hsn_code": "68113090" - }, - { - "description": "ASBESTOS CEMENT SHEETS", - "hsn_code": "68114010" - }, - { - "description": "ASBESTOS CEMENT TILES", - "hsn_code": "68114020" - }, - { - "description": "OTHERS", - "hsn_code": "68114090" - }, - { - "description": "CORRUGATED SHEETS NOT CONTAINING ASBESTOS", - "hsn_code": "68118100" - }, - { - "description": "OTHER SHEETS, TILES ETC. NOT CONTAINING ASBESTOS", - "hsn_code": "68118200" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRE-CEMENT OR THE LIKE-NOT CONTAINING\nASBESTOS--OTHER ARTICLES---TUBES,PIPES AND TUBE OR PIPE FITTINGS", - "hsn_code": "68118910" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRE-CEMENT OR THE LIKE-NOT CONTAINING\nASBESTOS--OTHER ARTICLES---OTHER", - "hsn_code": "68118990" - }, - { - "description": "ARTICLES OF ASBESTOS-CEMENT, OF CELLULOSE FIBRECEMENT OR THE LIKE OTHER ARTICLES", - "hsn_code": "68119000" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 CLOTHING, CLOTHING\nACCESSORIES, FOOTWEAR AND HEADGEAR", - "hsn_code": "68125000" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 PAPER, MILLBOARD AND\nFELT: MILLBOARD: ASBESTOS", - "hsn_code": "68126011" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 PAPER, MILLBOARD AND\nFELT: MILLBOARD: OTHER", - "hsn_code": "68126019" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 PAPER, MILLBOARD AND\nFELT: OTHER", - "hsn_code": "68126090" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 COMPRESSED ASBESTOS\nFIBRE JOINTING, IN SHEETS OR ROLLS", - "hsn_code": "68127000" - }, - { - "description": "GOODS, OF CROCIDOLITE", - "hsn_code": "68128000" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 OTHER: LAGGING\nCOMPOUNDS: ASBESTOS", - "hsn_code": "68129011" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 OTHER: LAGGING\nCOMPOUNDS: OTHER", - "hsn_code": "68129019" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 OTHER: ASBESTOS\nPACKING JOINTS AND GASKETS: PACKING JOINTS", - "hsn_code": "68129021" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 OTHER: ASBESTOS\nPACKING JOINTS AND GASKETS: GASKETS", - "hsn_code": "68129022" - }, - { - "description": "FABRICATED ASBESTOS FIBRES; MIXTURES WITH A BASIS OF ASBESTOS OR WITH A BASIS OF\nASBESTOS AND MAGNESIUM CARBONATE; ARTICLES OF SUCH MIXTURES OR OF ASBESTOS (FOR\nEXAMPLE, THREAD, WOVEN FABRIC, CLOTHING, HEADGEAR, FOOTWEAR, GASKETS), WHETHER\nOR NOT REINFORCED, OTHER THAN GOODS OF HEADING 6811 OR 6813 OTHER: ASBESTOS\nPACKING JOINTS AND GASKETS: OTHER", - "hsn_code": "68129090" - }, - { - "description": "CLOTHING, CLOTHING ACCESSORIES, FOOTWEAR AND HEADWEAR", - "hsn_code": "68129100" - }, - { - "description": "ASBESTOS MILLBOARD", - "hsn_code": "68129211" - }, - { - "description": "PAPER, MILLBOARD AND FELT", - "hsn_code": "68129219" - }, - { - "description": "PAPER, MILLBOARD AND FELT --- OTHERS", - "hsn_code": "68129290" - }, - { - "description": "COMPRESSED ASBESTOS FIBRE JOINTING IN SHEETS OR ROLLS", - "hsn_code": "68129300" - }, - { - "description": "ASBESTOS LAGGING COMPOUNDS", - "hsn_code": "68129911" - }, - { - "description": "LAGGING COMPOUNDS - OTHERS", - "hsn_code": "68129919" - }, - { - "description": "ASBESTOS PACKING JOINTS", - "hsn_code": "68129921" - }, - { - "description": "ASBESTOS GASKETS", - "hsn_code": "68129922" - }, - { - "description": "ASBESTOS PACKING JOINTS AND GASKETS - OTHERS", - "hsn_code": "68129990" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS,\nDISCS, WASHERS, PADS), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A\nBASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT\nCOMBINED WITH TEXTILE OR OTHER MATERIALS BRAKE LININGS AND PADS", - "hsn_code": "68131000" - }, - { - "description": "BRAKE LINING AND PADS CONTAINING ASBESTOS", - "hsn_code": "68132010" - }, - { - "description": "ASBESTOS FRICTION MATERIALS", - "hsn_code": "68132090" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS,\nDISCS, WASHERS, PADS), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A\nBASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT\nCOMBINED WITH TEXTILE OR OTHER MATERIALS OTHER: -- NOT CONTAINING ASBESTOS --\nBRAKE LINING AND PADS", - "hsn_code": "68138100" - }, - { - "description": "OTHER MATERIALS NOT CONTAINING ASBESTOS", - "hsn_code": "68138900" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS,\nDISCS, WASHERS, PADS), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A\nBASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT\nCOMBINED WITH TEXTILE OR OTHER MATERIALS OTHER: ASBESTOS FRICTION MATERIALS", - "hsn_code": "68139010" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS,\nDISCS, WASHERS, PADS), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A\nBASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT\nCOMBINED WITH TEXTILE OR OTHER MATERIALS OTHER: OTHER", - "hsn_code": "68139090" - }, - { - "description": "FRICTION MATERIAL AND ARTICLES THEREOF (FOR EXAMPLE, SHEETS, ROLLS, STRIPS, SEGMENTS,\nDISCS, WASHERS, PADS), NOT MOUNTED, FOR BRAKES, FOR CLUTCHES OR THE LIKE, WITH A\nBASIS OF ASBESTOS, OF OTHER MINERAL SUBSTANCES OR OF CELLULOSE, WHETHER OR NOT\nCOMBINED WITH TEXTILE OR OTHER MATERIALS OTHER: -- NOT CONTAINING ASBESTOS --\nOTHER", - "hsn_code": "68139100" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS PLATES,\nSHEETS AND STRIPS OF AGGLOMERATED OR RECONSTITUTED MICA, WHETHER OR NOT ON A\nSUPPORT: CUT MICA CONDENSER FILMS OR PLATES", - "hsn_code": "68141010" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS PLATES,\nSHEETS AND STRIPS OF AGGLOMERATED OR RECONSTITUTED MICA, WHETHER OR NOT ON A\nSUPPORT: SHEETS AND STRIPS CUT TO SHAPE", - "hsn_code": "68141020" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS PLATES,\nSHEETS AND STRIPS OF AGGLOMERATED OR RECONSTITUTED MICA, WHETHER OR NOT ON A\nSUPPORT: WASHERS AND DISCS", - "hsn_code": "68141030" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS PLATES,\nSHEETS AND STRIPS OF AGGLOMERATED OR RECONSTITUTED MICA, WHETHER OR NOT ON A\nSUPPORT: OTHER", - "hsn_code": "68141090" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER: MICA\nSTACKED UNITS", - "hsn_code": "68149010" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER:\nSILVERED MICA, CAPACITOR PLATES OR SILVERED MICA PLATES", - "hsn_code": "68149020" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER:\nMICANITE AND ALL SORTS OF BUILT UP MICA", - "hsn_code": "68149030" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER:\nMICAPAPER OR RECONSTITUTED MICA PAPER", - "hsn_code": "68149040" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER:\nMOULDED GLASS BONDED OR GLASS BONDED MICA", - "hsn_code": "68149050" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER: MICA\nBRICKS", - "hsn_code": "68149060" - }, - { - "description": "WORKED MICA AND ARTICLES OF MICA, INCLUDING AGGLOMERATED OR RECONSTITUTED MICA,\nWHETHER OR NOT ON A SUPPORT OF PAPER, PAPERBOARD OR OTHER MATERIALS OTHER:\nOTHER", - "hsn_code": "68149090" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nELECTRICAL ARTICLES OF GRAPHITE OR OTHER CARBON: GRAPHITE FILTER CANDLE", - "hsn_code": "68151010" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nELECTRICAL ARTICLES OF GRAPHITE OR OTHER CARBON: NON-ELECTRICAL ARTICLES OF\nGRAPHITE", - "hsn_code": "68151020" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nELECTRICAL ARTICLES OF GRAPHITE OR OTHER CARBON: OTHER", - "hsn_code": "68151090" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED NON\nELECTRICAL ARTICLES OF GRAPHITE OR OTHER CARBON: ARTICLES OF PEAT", - "hsn_code": "68152000" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER\nARTICLES: CONTAINING MAGNESITE, DOLOMITE OR CHROMITE", - "hsn_code": "68159100" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER\nARTICLES: OTHER: BRICKS AND TILES OF FLY ASH", - "hsn_code": "68159910" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER\nARTICLES: OTHER: SANITARY WARES, KITCHEN WARES AND OTHER MADE UP ARTICLES OF FLY\nASH", - "hsn_code": "68159920" - }, - { - "description": "ARTICLES OF STONE OR OF OTHER MINERAL SUBSTANCES (INCLUDING CARBON FIBRES, ARTICLES\nOF CARBON FIBRES AND ARTICLES OF PEAT), NOT ELSEWHERE SPECIFIED OR INCLUDED OTHER\nARTICLES: OTHER: OTHER", - "hsn_code": "68159990" - }, - { - "description": "BRICKS, BLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR\nEXAMPLE, KIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS - BRICKS,\nBLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR EXAMPLE,\nKIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS:BRICKS", - "hsn_code": "69010010" - }, - { - "description": "BRICKS, BLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR\nEXAMPLE, KIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS - BRICKS,\nBLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR EXAMPLE,\nKIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS:BLOCKS", - "hsn_code": "69010020" - }, - { - "description": "BRICKS, BLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR\nEXAMPLE, KIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS - BRICKS,\nBLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR EXAMPLE,\nKIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS:TILES", - "hsn_code": "69010030" - }, - { - "description": "BRICKS, BLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR\nEXAMPLE, KIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS - BRICKS,\nBLOCKS, TILES AND OTHER CERAMIC GOODS OF SILICEOUS FOSSIL MEALS (FOR EXAMPLE,\nKIESELGUHR, TRIPOLITE OR DIATOMITE) OR OF SIMILAR SILICEOUS EARTHS:OTHER", - "hsn_code": "69010090" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: MAGNESITE BRICKS AND SHAPES", - "hsn_code": "69021010" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: CHROME MAGNESITE BRICKS", - "hsn_code": "69021020" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: MAGNESITE CHROME BRICKS AND SHAPES", - "hsn_code": "69021030" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: MAGNESIA CARBON BRICKS AND SHAPES", - "hsn_code": "69021040" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: DIRECT BONDED BASIC BRICKS AND SHAPES", - "hsn_code": "69021050" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT, SINGLY OR TOGETHER, MORE THAN 50% OF THE ELEMENTS MG, CA\nOR CR, EXPRESSED AS MGO, CAO OR CR2O3: OTHER", - "hsn_code": "69021090" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: SILICA BRICKS AND SHAPES", - "hsn_code": "69022010" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: HIGH ALUMINA BRICKS AND SHAPES", - "hsn_code": "69022020" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: ALUMINA CARBON BRICKS AND SHAPES", - "hsn_code": "69022030" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: SILICON CARBIDE BRICKS AND SHAPES", - "hsn_code": "69022040" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: MULLITE BRICKS", - "hsn_code": "69022050" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nCONTAINING BY WEIGHT MORE THAN 50% OF ALUMINA (AL2O3), OF SILICA (SIO2) OR OF A\nMIXTURE OR COMPOUND OF THESE PRODUCTS: OTHER", - "hsn_code": "69022090" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nOTHER: FIRE CLAY BRICKS AND SHAPES", - "hsn_code": "69029010" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nOTHER: GRAPHITE BRICKS AND SHAPES", - "hsn_code": "69029020" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nOTHER: VERMICULITE INSULATION BRICKS", - "hsn_code": "69029030" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nOTHER: CLAY GRAPHITE STOPPER HEADS", - "hsn_code": "69029040" - }, - { - "description": "REFRACTORY BRICKS, BLOCKS, TILES AND SIMILAR REFRACTORY CERAMIC CONSTRUCTIONAL\nGOODS, OTHER THAN THOSE OF SILICEOUS FOSSIL MEALS OR SIMILAR SILICEOUS EARTHS -\nOTHER: OTHER", - "hsn_code": "69029090" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - CONTAINING BY WEIGHT MORE\nTHAN 50% OF GRAPHITE OR OTHER CARBON OR OF A MIXTURE OF THESE PRODUCTS :\nMAGNESIA CARBON BRICKS, SHAPES AND GRAPHETISED ALUMINA", - "hsn_code": "69031010" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - CONTAINING BY WEIGHT MORE\nTHAN 50% OF GRAPHITE OR OTHER CARBON OR OF A MIXTURE OF THESE PRODUCTS :OTHER", - "hsn_code": "69031090" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - CONTAINING BY WEIGHT MORE\nTHAN 50% OF ALUMINA (AL2O3) OR OF A MIXTURE OR COMPOUND OF ALUMINA AND OF SILICA\n(SIO2): SILICON CARBIDE CRUCIBLES", - "hsn_code": "69032010" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - CONTAINING BY WEIGHT MORE\nTHAN 50% OF ALUMINA (AL2O3) OR OF A MIXTURE OR COMPOUND OF ALUMINA AND OF SILICA\n(SIO2): OTHER", - "hsn_code": "69032090" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - OTHER: ZIRCON OR ZIRCON\nMULLITE REFRACTORIES", - "hsn_code": "69039010" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - OTHER: BASALT TILES", - "hsn_code": "69039020" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - OTHER: CERAMIC FIBRES", - "hsn_code": "69039030" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - OTHER: MONOLITHICS OR\nCASTABLES (FIRE-CLAY, BASIC, SILICA, HIGH ALUMINA, INSULATING)", - "hsn_code": "69039040" - }, - { - "description": "OTHER REFRACTORY CERAMIC GOODS (FOR EXAMPLE, RETORTS, CRUCIBLES, MUFFLES,\nNOZZLES, PLUGS, SUPPORTS, CUPELS, TUBES, PIPES, SHEATHS AND RODS), OTHER THAN THOSE\nOF SILICEOUS FOSSIL MEALS OR OF SIMILAR SILICEOUS EARTHS - OTHER: OTHER", - "hsn_code": "69039090" - }, - { - "description": "CERAMIC BUILDING BRICKS, FLOORING BLOCKS, SUPPORT OR FILLER TILES AND THE LIKE -\nBUILDING BRICKS", - "hsn_code": "69041000" - }, - { - "description": "CERAMIC BUILDING BRICKS, FLOORING BLOCKS, SUPPORT OR FILLER TILES AND THE LIKE - OTHER", - "hsn_code": "69049000" - }, - { - "description": "ROOFING TILES, CHIMNEY-POTS, COWLS, CHIMNEY LINERS, ARCHITECTURAL ORNAMENTS AND\nOTHER CERAMIC CONSTRUCTIONAL GOODS - ROOFING TILES", - "hsn_code": "69051000" - }, - { - "description": "ROOFING TILES, CHIMNEY-POTS, COWLS, CHIMNEY LINERS, ARCHITECTURAL ORNAMENTS AND\nOTHER CERAMIC CONSTRUCTIONAL GOODS - OTHER", - "hsn_code": "69059000" - }, - { - "description": "CERAMIC PIPES, CONDUITS, GUTTERING AND PIPE FITTINGS", - "hsn_code": "69060000" - }, - { - "description": "UNGLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; UNGLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - TILES, CUBES AND SIMILAR ARTICLES,\nWHETHER OR NOT RECTANGULAR, THE LARGEST SURFACE AREA OF WHICH IS CAPABLE OF\nBEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7 CM: VITRIFIED TILES,\nWHETHER POLISHED OR NOT", - "hsn_code": "69071010" - }, - { - "description": "UNGLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; UNGLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - TILES, CUBES AND SIMILAR ARTICLES,\nWHETHER OR NOT RECTANGULAR, THE LARGEST SURFACE AREA OF WHICH IS CAPABLE OF\nBEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7 CM: OTHER", - "hsn_code": "69071090" - }, - { - "description": "UNGLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; UNGLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - OTHER: VITRIFIED TILES, WHETHER\nPOLISHED OR NOT", - "hsn_code": "69079010" - }, - { - "description": "UNGLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; UNGLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - OTHER: OTHER", - "hsn_code": "69079090" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - TILES, CUBES AND SIMILAR ARTICLES,\nWHETHER OR NOT RECTANGULAR, THE LARGEST SURFACE AREA OF WHICH IS CAPABLE OF\nBEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7 CM: CERAMIC MOSAIC\nCUBES", - "hsn_code": "69081010" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - TILES, CUBES AND SIMILAR ARTICLES,\nWHETHER OR NOT RECTANGULAR, THE LARGEST SURFACE AREA OF WHICH IS CAPABLE OF\nBEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7 CM: CERAMIC MOSAIC TILES", - "hsn_code": "69081020" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - TILES, CUBES AND SIMILAR ARTICLES,\nWHETHER OR NOT RECTANGULAR, THE LARGEST SURFACE AREA OF WHICH IS CAPABLE OF\nBEING ENCLOSED IN A SQUARE THE SIDE OF WHICH IS LESS THAN 7 CM: OTHER", - "hsn_code": "69081090" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - OTHER: CERAMIC MOSAIC CUBES", - "hsn_code": "69089010" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - OTHER: CERAMIC MOSAIC TILES", - "hsn_code": "69089020" - }, - { - "description": "GLAZED CERAMIC FLAGS AND PAVING, HEARTH OR WALL TILES; GLAZED CERAMIC MOSAIC\nCUBES AND THE LIKE, WHETHER OR NOT ON A BACKING - OTHER: OTHER", - "hsn_code": "69089090" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC\nTROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS,\nJARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS -\nCERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES : OF PORCELAIN OR\nCHINA", - "hsn_code": "69091100" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC\nTROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS,\nJARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS -\nCERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES : ARTICLES HAVING\nA HARDNESS EQUIVALENT TO 9 OR MORE ON THE MOHS SCALE", - "hsn_code": "69091200" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC\nTROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS,\nJARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS -\nCERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES : OTHER: CERAMIC\nFILTER CANDLE", - "hsn_code": "69091910" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC\nTROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS,\nJARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS -\nCERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES : OTHER: OTHER", - "hsn_code": "69091990" - }, - { - "description": "CERAMIC WARES FOR LABORATORY, CHEMICAL OR OTHER TECHNICAL USES; CERAMIC\nTROUGHS, TUBS AND SIMILAR RECEPTACLES OF A KIND USED IN AGRICULTURE; CERAMIC POTS,\nJARS AND SIMILAR ARTICLES OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS\nOTHER", - "hsn_code": "69099000" - }, - { - "description": "CERAMIC SINKS, WASH BASINS, WASH BASIN PEDESTALS, BATHS, BIDETS, WATER CLOSET PANS,\nFLUSHING CISTERNS, URINALS AND SIMILAR SANITARY FIXTURES - OF PORCELAIN OR CHINA", - "hsn_code": "69101000" - }, - { - "description": "CERAMIC SINKS, WASH BASINS, WASH BASIN PEDESTALS, BATHS, BIDETS, WATER CLOSET PANS,\nFLUSHING CISTERNS, URINALS AND SIMILAR SANITARY FIXTURES - OTHER", - "hsn_code": "69109000" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA 6911 10 TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND\nTOILET ARTICLES, OF PORCELAIN OR CHINA - TABLEWARE AND KITCHENWARE:TABLEWARE: OF\nBONE CHINA AND SOFT PORCELAIN", - "hsn_code": "69111011" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA 6911 10 TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND\nTOILET ARTICLES, OF PORCELAIN OR CHINA - TABLEWARE AND KITCHENWARE:TABLEWARE:\nOTHER", - "hsn_code": "69111019" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA 6911 10 TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND\nTOILET ARTICLES, OF PORCELAIN OR CHINA - TABLEWARE AND KITCHENWARE:KITCHENWARE:\nOF BONE CHINA AND SOFT PORCELAIN", - "hsn_code": "69111021" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA 6911 10 TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND\nTOILET ARTICLES, OF PORCELAIN OR CHINA - TABLEWARE AND KITCHENWARE:KITCHENWARE:\nOTHER", - "hsn_code": "69111029" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA - OTHER: TOILET ARTICLES", - "hsn_code": "69119010" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA - OTHER: WATER FILTERS OF A CAPACITY NOT EXCEEDING 40 LITRES", - "hsn_code": "69119020" - }, - { - "description": "TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES, OF\nPORCELAIN OR CHINA - OTHER: OTHER", - "hsn_code": "69119090" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES,\nOTHER THAN OF PORCELAIN OR CHINA - CERAMIC TABLEWARE, KITCHENWARE, OTHER\nHOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA:\nTABLEWARE", - "hsn_code": "69120010" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES,\nOTHER THAN OF PORCELAIN OR CHINA - CERAMIC TABLEWARE, KITCHENWARE, OTHER\nHOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA:\nKITCHENWARE", - "hsn_code": "69120020" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES,\nOTHER THAN OF PORCELAIN OR CHINA - CERAMIC TABLEWARE, KITCHENWARE, OTHER\nHOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA: TOILET\nARTICLES", - "hsn_code": "69120030" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES,\nOTHER THAN OF PORCELAIN OR CHINA - CERAMIC TABLEWARE, KITCHENWARE, OTHER\nHOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA: CLAY\nARTICLES", - "hsn_code": "69120040" - }, - { - "description": "CERAMIC TABLEWARE, KITCHENWARE, OTHER HOUSEHOLD ARTICLES AND TOILET ARTICLES,\nOTHER THAN OF PORCELAIN OR CHINA - CERAMIC TABLEWARE, KITCHENWARE, OTHER\nHOUSEHOLD ARTICLES AND TOILET ARTICLES, OTHER THAN OF PORCELAIN OR CHINA: OTHER", - "hsn_code": "69120090" - }, - { - "description": "STATUETTES AND OTHER ORNAMENTAL CERAMIC ARTICLES - OF PORCELAIN OR CHINA", - "hsn_code": "69131000" - }, - { - "description": "STATUETTES AND OTHER ORNAMENTAL CERAMIC ARTICLES - OTHER", - "hsn_code": "69139000" - }, - { - "description": "OTHER CERAMIC ARTICLES - OF PORCELAIN OR CHINA", - "hsn_code": "69141000" - }, - { - "description": "OTHER CERAMIC ARTICLES - OTHER", - "hsn_code": "69149000" - }, - { - "description": "CULLET AND OTHER WASTE AND SCRAP OF GLASS; GLASS IN THE MASS - CULLET AND OTHER\nWASTE AND SCRAP OF GLASS; GLASS IN THE MASS: CULLET AND OTHER WASTE AND SCRAP OF\nGLASS", - "hsn_code": "70010010" - }, - { - "description": "CULLET AND OTHER WASTE AND SCRAP OF GLASS; GLASS IN THE MASS - CULLET AND OTHER\nWASTE AND SCRAP OF GLASS; GLASS IN THE MASS: ENAMEL GLASS IN THE MASS", - "hsn_code": "70010020" - }, - { - "description": "CULLET AND OTHER WASTE AND SCRAP OF GLASS; GLASS IN THE MASS - CULLET AND OTHER\nWASTE AND SCRAP OF GLASS; GLASS IN THE MASS: OTHER", - "hsn_code": "70010090" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- BALLS", - "hsn_code": "70021000" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- RODS: ENAMEL GLASS RODS", - "hsn_code": "70022010" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- RODS: OTHER", - "hsn_code": "70022090" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- TUBES: OF FUSED QUARTZ OR OTHER FUSED SILICA", - "hsn_code": "70023100" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- TUBES: OF OTHER GLASS HAVING A LINEAR COEFFICIENT OF EXPANSION NOT EXCEEDING 5 X\n10-6 PER KELVIN WITHIN A TEMPERATURE RANGE OF 00C TO 3000C", - "hsn_code": "70023200" - }, - { - "description": "GLASS IN BALLS (OTHER THAN MICROSPHERES OF HEADING 7018), RODS OR TUBES, UNWORKED\n- TUBES: OTHER", - "hsn_code": "70023900" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - NON\nWIRED SHEETS : COLOURED THROUGHOUT THE MASS (BODY-TINTED), OPACIFIED, FLASHED OR\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER: TINTED", - "hsn_code": "70031210" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - NON\nWIRED SHEETS : COLOURED THROUGHOUT THE MASS (BODY-TINTED), OPACIFIED, FLASHED OR\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER: OTHER", - "hsn_code": "70031290" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - NON\nWIRED SHEETS : OTHER: TINTED", - "hsn_code": "70031910" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - NON\nWIRED SHEETS : OTHER: OTHER", - "hsn_code": "70031990" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - WIRED\nSHEETS: TINTED", - "hsn_code": "70032010" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED - WIRED\nSHEETS: OTHER", - "hsn_code": "70032090" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED -\nPROFILES: TINTED", - "hsn_code": "70033010" - }, - { - "description": "CAST GLASS AND ROLLED GLASS, IN SHEETS OR PROFILES, WHETHER OR NOT HAVING AN\nABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE WORKED -\nPROFILES: OTHER", - "hsn_code": "70033090" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - GLASS, COLOURED\nTHROUGHOUT THE MASS (BODY TINTED), OPACIFIED, FLASHED OR HAVING AN ABSORBENT,\nREFLECTING OR NON-REFLECTING LAYER: WINDOW GLASS (SHEET GLASS): TINTED", - "hsn_code": "70042011" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - GLASS, COLOURED\nTHROUGHOUT THE MASS (BODY TINTED), OPACIFIED, FLASHED OR HAVING AN ABSORBENT,\nREFLECTING OR NON-REFLECTING LAYER: WINDOW GLASS (SHEET GLASS): OTHER", - "hsn_code": "70042019" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - GLASS, COLOURED\nTHROUGHOUT THE MASS (BODY TINTED), OPACIFIED, FLASHED OR HAVING AN ABSORBENT,\nREFLECTING OR NON-REFLECTING LAYER: WINDOW GLASS (SHEET GLASS): OTHER: TINTED", - "hsn_code": "70042091" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - GLASS, COLOURED\nTHROUGHOUT THE MASS (BODY TINTED), OPACIFIED, FLASHED OR HAVING AN ABSORBENT,\nREFLECTING OR NON-REFLECTING LAYER: WINDOW GLASS (SHEET GLASS): OTHER: OTHER", - "hsn_code": "70042099" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - OTHER GLASS:\nWINDOW GLASS (SHEET GLASS): TINTED", - "hsn_code": "70049011" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - OTHER GLASS:\nWINDOW GLASS (SHEET GLASS): OTHER", - "hsn_code": "70049019" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - OTHER GLASS: OTHER:\nTINTED", - "hsn_code": "70049091" - }, - { - "description": "DRAWN GLASS AND BLOWN GLASS, IN SHEETS, WHETHER OR NOT HAVING AN ABSORBENT,\nREFLECTING OR NONREFLECTING LAYER, BUT NOT OTHERWISE WORKED - OTHER GLASS: OTHER:\nOTHER", - "hsn_code": "70049099" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - NON-WIRED GLASS, HAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING\nLAYER: TINTED", - "hsn_code": "70051010" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - NON-WIRED GLASS, HAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING\nLAYER: OTHER", - "hsn_code": "70051090" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - OTHER NON-WIRED GLASS : COLOURED THROUGHOUT THE MASS (BODY TINTED)\nOPACIFIED, FLASHED OR MERELY SURFACE GROUND: TINTED", - "hsn_code": "70052110" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - OTHER NON-WIRED GLASS : COLOURED THROUGHOUT THE MASS (BODY TINTED)\nOPACIFIED, FLASHED OR MERELY SURFACE GROUND: OTHER", - "hsn_code": "70052190" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - OTHER NON-WIRED GLASS : OTHER: TINTED", - "hsn_code": "70052910" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - OTHER NON-WIRED GLASS : OTHER: OTHER", - "hsn_code": "70052990" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - WIRED GLASS: TINTED", - "hsn_code": "70053010" - }, - { - "description": "FLOAT GLASS AND SURFACE GROUND OR POLISHED GLASS, IN SHEETS, WHETHER OR NOT\nHAVING AN ABSORBENT, REFLECTING OR NON-REFLECTING LAYER, BUT NOT OTHERWISE\nWORKED - WIRED GLASS: OTHER", - "hsn_code": "70053090" - }, - { - "description": "GLASS OF HEADING 7003, 7004 OR 7005, BENT, EDGE-WORKED, ENGRAVED, DRILLED,\nENAMELLED OR OTHERWISE WORKED, BUT NOT FRAMED OR FITTED WITH OTHER MATERIALS", - "hsn_code": "70060000" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS - TOUGHENED\n(TEMPERED) SAFETY GLASS : OF SIZE AND SHAPE SUITABLE FOR INCORPORATION IN VEHICLES,\nAIRCRAFT, SPACECRAFT OR VESSELS", - "hsn_code": "70071100" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS - TOUGHENED\n(TEMPERED) SAFETY GLASS : OTHER", - "hsn_code": "70071900" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS - LAMINATED\nSAFETY GLASS : OF SIZE AND SHAPE SUITABLE FOR INCORPORATION IN VEHICLES, AIRCRAFT,\nSPACECRAFT OR VESSELS: BULLET PROOF GLASS", - "hsn_code": "70072110" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS - LAMINATED\nSAFETY GLASS : OF SIZE AND SHAPE SUITABLE FOR INCORPORATION IN VEHICLES, AIRCRAFT,\nSPACECRAFT OR VESSELS: OTHER", - "hsn_code": "70072190" - }, - { - "description": "SAFETY GLASS, CONSISTING OF TOUGHENED (TEMPERED) OR LAMINATED GLASS - LAMINATED\nSAFETY GLASS : OTHER", - "hsn_code": "70072900" - }, - { - "description": "MULTIPLE-WALLED INSULATING UNITS OF GLASS - MULTIPLE-WALLED INSULATING UNITS OF\nGLASS: GLAZED GLASS, DOUBLE WALLED", - "hsn_code": "70080010" - }, - { - "description": "MULTIPLE-WALLED INSULATING UNITS OF GLASS - MULTIPLE-WALLED INSULATING UNITS OF\nGLASS: GLAZED GLASS, MULTIPLE WALLED", - "hsn_code": "70080020" - }, - { - "description": "MULTIPLE-WALLED INSULATING UNITS OF GLASS - MULTIPLE-WALLED INSULATING UNITS OF\nGLASS: OTHER", - "hsn_code": "70080090" - }, - { - "description": "GLASS MIRRORS, WHETHER OR NOT FRAMED, INCLUDING REAR-VIEW MIRRORS - REAR-VIEW\nMIRRORS FOR VEHICLES: PRISMATIC REAR-VIEW MIRROR FOR VEHICLES", - "hsn_code": "70091010" - }, - { - "description": "GLASS MIRRORS, WHETHER OR NOT FRAMED, INCLUDING REAR-VIEW MIRRORS - REAR-VIEW\nMIRRORS FOR VEHICLES: OTHER", - "hsn_code": "70091090" - }, - { - "description": "GLASS MIRRORS, WHETHER OR NOT FRAMED, INCLUDING REAR-VIEW MIRRORS - OTHER :\nUNFRAMED", - "hsn_code": "70099100" - }, - { - "description": "GLASS MIRRORS, WHETHER OR NOT FRAMED, INCLUDING REAR-VIEW MIRRORS - OTHER :\nFRAMED", - "hsn_code": "70099200" - }, - { - "description": "CARBOYS, BOTTLES, FLASKS, JARS, POTS, PHIALS, AMPOULES AND OTHER CONTAINERS, OF\nGLASS, OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS; PRESERVING JARS OF\nGLASS; STOPPERS, LIDS AND OTHER CLOSURES, OF GLASS - AMPOULES", - "hsn_code": "70101000" - }, - { - "description": "CARBOYS, BOTTLES, FLASKS, JARS, POTS, PHIALS, AMPOULES AND OTHER CONTAINERS, OF\nGLASS, OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS; PRESERVING JARS OF\nGLASS; STOPPERS, LIDS AND OTHER CLOSURES, OF GLASS - STOPPERS, LIDS AND OTHER\nCLOSURES", - "hsn_code": "70102000" - }, - { - "description": "CARBOYS, BOTTLES, FLASKS, JARS, POTS, PHIALS, AMPOULES AND OTHER CONTAINERS, OF\nGLASS, OF A KIND USED FOR THE CONVEYANCE OR PACKING OF GOODS; PRESERVING JARS OF\nGLASS; STOPPERS, LIDS AND OTHER CLOSURES, OF GLASS - OTHER", - "hsn_code": "70109000" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - FOR ELECTRIC\nLIGHTING: GLASS ENVELOPES FOR FLUORESCENT LAMPS", - "hsn_code": "70111010" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - FOR ELECTRIC\nLIGHTING: GLASS ENVELOPES FOR FILAMENT LAMPS", - "hsn_code": "70111020" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - FOR ELECTRIC\nLIGHTING: OTHER", - "hsn_code": "70111090" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - FOR CATHODE\nRAY TUBES", - "hsn_code": "70112000" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - OTHER: GLASS\nENVELOPES FOR ELECTRONIC VALVES", - "hsn_code": "70119010" - }, - { - "description": "GLASS ENVELOPES (INCLUDING BULBS AND TUBES), OPEN, AND GLASS PARTS THEREOF,\nWITHOUT FITTINGS, FOR ELECTRIC LAMPS, CATHODE-RAY TUBES OR THE LIKE - OTHER: OTHER", - "hsn_code": "70119090" - }, - { - "description": "GLASS INNERS FOR VACUUM FLASKS OR FOR OTHER VACUUM VESSELS", - "hsn_code": "70120000" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) OF GLASS-CERAMICS", - "hsn_code": "70131000" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - DRINKING GLASSES OTHER\nTHAN OF GLASS-CERAMICS : OF LEAD CRYSTAL", - "hsn_code": "70132100" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - STEMWARE DRINKING\nGLASSES, OTHER THAN OF GLASS-CERAMICS: -- OF LEAD CRYSTAL", - "hsn_code": "70132200" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - STEMWARE DRINKING\nGLASSES, OTHER THAN OF GLASS-CERAMICS: -- OTHER", - "hsn_code": "70132800" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - DRINKING GLASSES OTHER\nTHAN OF GLASS-CERAMICS : OTHER", - "hsn_code": "70132900" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSES OTHER THAN OF\nGLASS-CERAMICS : OF LEAD CRYSTAL", - "hsn_code": "70133100" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSES OTHER THAN OF\nGLASS-CERAMICS : OF GLASS HAVING A LINEAR COEFFICIENT OF EXPANSION NOT EXCEEDING 5 X\n10-6 PER KELVIN WITHIN A TEMPERATURE RANGE OF 00C TO 3000C", - "hsn_code": "70133200" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER DRINKING\nGLASSES, OTHER THAN OF GLASS-CERAMICS: -- OF LEAD CRYSTAL", - "hsn_code": "70133300" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER DRINKING\nGLASSES, OTHER THAN OF GLASS-CERAMICS: -- OTHER", - "hsn_code": "70133700" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSES OTHER THAN OF\nGLASS-CERAMICS : OTHER", - "hsn_code": "70133900" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSED, OTHER THAN OF\nGLASS-CERAMICS: -- OF LEAD CRYSTAL", - "hsn_code": "70134100" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSED, OTHER THAN OF\nGLASS-CERAMICS: -- OF GLASS HAVING A LINEAR COEFICIENT OF EXPANSION NOT EXCEEDING 5\nX 10 TO THE POWER OF MINUS 6 PER KELVIN WITHIN A TEMPERATURE RANGE OF 0 DEGREE C\nTO 300 DEGREEE C", - "hsn_code": "70134200" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSED, OTHER THAN OF\nGLASS-CERAMICS: -- OTHER", - "hsn_code": "70134900" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSED, OTHER THAN OF\nGLASS-CERAMICS: - OTHER -- OF LEAD CRYSTAL", - "hsn_code": "70139100" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER GLASSWARE : OF\nLEAD CRYSTAL: GLASS STATUES", - "hsn_code": "70139110" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER GLASSWARE : OF\nLEAD CRYSTAL: OTHER", - "hsn_code": "70139190" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - GLASSWARE OF A KIND\nUSED FOR TABLE (OTHER THAN DRINKING GLASSES) OR KITCHEN PURPOSED, OTHER THAN OF\nGLASS-CERAMICS: - OTHER -- OTHER", - "hsn_code": "70139900" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER GLASSWARE :\nOTHER: GLASS STATUES", - "hsn_code": "70139910" - }, - { - "description": "GLASSWARE OF A KIND USED FOR TABLE, KITCHEN, TOILET, OFFICE, INDOOR DECORATION OR\nSIMILAR PURPOSES (OTHER THAN THAT OF HEADING 7010 OR 7018) - OTHER GLASSWARE :\nOTHER: OTHER", - "hsn_code": "70139990" - }, - { - "description": "SIGNALLING GLASSWARE AND OPTICAL ELEMENTS OF GLASS (OTHER THAN THOSE OF HEADING\n7015), NOT OPTICALLY WORKED - SIGNALLING GLASSWARE AND OPTICAL ELEMENTS OF GLASS\n(OTHER THAN THOSE OF HEADING 7015), NOT OPTICALLY WORKED: SIGNALLING GLASSWARE", - "hsn_code": "70140010" - }, - { - "description": "SIGNALLING GLASSWARE AND OPTICAL ELEMENTS OF GLASS (OTHER THAN THOSE OF HEADING\n7015), NOT OPTICALLY WORKED - SIGNALLING GLASSWARE AND OPTICAL ELEMENTS OF GLASS\n(OTHER THAN THOSE OF HEADING 7015), NOT OPTICALLY WORKED: OPTICAL ELEMENTS", - "hsn_code": "70140020" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nGLASSES FOR CORRECTIVE SPECTACLES: OPHTHALMIC ROUGH BLANKS", - "hsn_code": "70151010" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nGLASSES FOR CORRECTIVE SPECTACLES: FLINT BUTTON", - "hsn_code": "70151020" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nGLASSES FOR CORRECTIVE SPECTACLES: OTHER", - "hsn_code": "70151090" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nOTHER: CLOCK AND WATCH GLASSES AND SIMILAR GLASSES, CURVED, BENT, HOLLOWED AND\nTHE LIKE, GLASS SPHERES AND SEGMENTS OF SPHERES FOR THE MANUFACTURE OF SUCH\nGLASSES", - "hsn_code": "70159010" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nOTHER: GLASS FOR SUN GLASSES", - "hsn_code": "70159020" - }, - { - "description": "CLOCK OR WATCH GLASSES AND SIMILAR GLASSES, GLASSES FOR NON-CORRECTIVE OR\nCORRECTIVE SPECTACLES, CURVED, BENT, HOLLOWED OR THE LIKE; NOT OPTICALLY WORKED;\nHOLLOW GLASS SPHERES AND THEIR SEGMENTS, FOR THE MANUFACTURE OF SUCH GLASSES -\nOTHER: OTHER", - "hsn_code": "70159090" - }, - { - "description": "PAVING BLOCKS, SLABS, BRICKS, SQUARES, TILES AND OTHER ARTICLES OF PRESSED OR\nMOULDED GLASS, WHETHER OR NOT WIRED, OF A KIND USED FOR BUILDING OR\nCONSTRUCTION PURPOSES; GLASS CUBES AND OTHER GLASS SMALL WARES, WHETHER OR NOT\nON A BACKING, FOR MOSAICS OR SIMILAR DECORATIVE PURPOSES; LEADED LIGHTS AND THE\nLIKE; MULTI-CELLULAR OR FOAM GLASS IN BLOCKS, PANELS, PLATES, SHELLS OR SIMILAR FORMS -\nGLASS CUBES AND OTHER GLASS SMALLWARES, WHETHER OR NOT ON A BACKING, FOR\nMOSAICS OR SIMILAR DECORATIVE PURPOSES", - "hsn_code": "70161000" - }, - { - "description": "PAVING BLOCKS, SLABS, BRICKS, SQUARES, TILES AND OTHER ARTICLES OF PRESSED OR\nMOULDED GLASS, WHETHER OR NOT WIRED, OF A KIND USED FOR BUILDING OR\nCONSTRUCTION PURPOSES; GLASS CUBES AND OTHER GLASS SMALL WARES, WHETHER OR NOT\nON A BACKING, FOR MOSAICS OR SIMILAR DECORATIVE PURPOSES; LEADED LIGHTS AND THE\nLIKE; MULTI-CELLULAR OR FOAM GLASS IN BLOCKS, PANELS, PLATES, SHELLS OR SIMILAR FORMS -\nOTHER", - "hsn_code": "70169000" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OF FUSED QUARTZ OR OTHER FUSED SILICA", - "hsn_code": "70171000" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OF OTHER GLASS HAVING A LINEAR COEFFICIENT OF EXPANSION NOT EXCEEDING\n5 X 10-6 PER KELVIN WITHIN A TEMPERATURE RANGE OF 00C TO 3000C", - "hsn_code": "70172000" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OTHER: GRADUATED OR CALIBRATED LABORATORY GLASSWARE", - "hsn_code": "70179010" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OTHER: PHARMACEUTICAL GLASSWARE", - "hsn_code": "70179020" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OTHER: HYGIENIC GLASSWARE", - "hsn_code": "70179030" - }, - { - "description": "LABORATORY, HYGIENIC OR PHARMACEUTICAL GLASSWARE, WHETHER OR NOT GRADUATED OR\nCALIBRATED - OTHER: OTHER", - "hsn_code": "70179090" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR\nSEMI-PRECIOUS STONES AND SIMILAR GLASS SMALLWARES: BANGLES", - "hsn_code": "70181010" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR\nSEMI-PRECIOUS STONES AND SIMILAR GLASS SMALLWARES: BEADS", - "hsn_code": "70181020" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR\nSEMI-PRECIOUS STONES AND SIMILAR GLASS SMALLWARES: OTHER", - "hsn_code": "70181090" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - GLASS MICROSPHERES NOT EXCEEDING 1 MM IN DIAMETER", - "hsn_code": "70182000" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - OTHER: GLASS STATUES", - "hsn_code": "70189010" - }, - { - "description": "GLASS BEADS, IMITATION PEARLS, IMITATION PRECIOUS OR SEMI-PRECIOUS STONES AND\nSIMILAR GLASS SMALLWARES, AND ARTICLES THEREOF OTHER THAN IMITATION JEWELLERY,\nGLASS EYES OTHER THAN PROSTHETIC ARTICLES; STATUETTES AND OTHER ORNAMENTS OF\nLAMP-WORKED GLASS, OTHER THAN IMITATION JEWELLERY; GLASS MICROSPHERES NOT\nEXCEEDING 1 MM IN DIAMETER - OTHER: OTHER", - "hsn_code": "70189090" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - SLIVERS, ROVINGS, YARN AND CHOPPED STRANDS : CHOPPED STRANDS, OF A LENGTH\nOF NOT MORE THAN 50 MM", - "hsn_code": "70191100" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - SLIVERS, ROVINGS, YARN AND CHOPPED STRANDS : ROVINGS", - "hsn_code": "70191200" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - SLIVERS, ROVINGS, YARN AND CHOPPED STRANDS : OTHER", - "hsn_code": "70191900" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - THIN SHEETS (VOILES), WEBS, MATS, MATTRESSES, BOARDS AND SIMILAR NON\nWOVEN PRODUCTS : MATS", - "hsn_code": "70193100" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - THIN SHEETS (VOILES), WEBS, MATS, MATTRESSES, BOARDS AND SIMILAR NON\nWOVEN PRODUCTS : THIN SHEETS (VOILES)", - "hsn_code": "70193200" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - THIN SHEETS (VOILES), WEBS, MATS, MATTRESSES, BOARDS AND SIMILAR NON\nWOVEN PRODUCTS : OTHER", - "hsn_code": "70193900" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - WOVEN FABRICS OF ROVINGS", - "hsn_code": "70194000" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - OTHER WOVEN FABRICS : OF A WIDTH NOT EXCEEDING 30 CM", - "hsn_code": "70195100" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - OTHER WOVEN FABRICS : OF A WIDTH EXCEEDING 30 CM, PLAIN WEAVE, WEIGHING\nLESS THAN 250 G/SQ. METRE, OF FILAMENTS MEASURING PER SINGLE YARN NOT MORE THAN\n136 TEX", - "hsn_code": "70195200" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - OTHER WOVEN FABRICS : OTHER", - "hsn_code": "70195900" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - OTHER: GLASS WOOL OR GLASS FIBRE", - "hsn_code": "70199010" - }, - { - "description": "GLASS FIBRES (INCLUDING GLASS WOOL) AND ARTICLES THEREOF (FOR EXAMPLE, YARN, WOVEN\nFABRICS) - OTHER: OTHER", - "hsn_code": "70199090" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: GLASS SHELLS, GLASS GLOBES AND GLASS\nFOUNTS: GLOBES FOR LAMPS AND LANTERNS", - "hsn_code": "70200011" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: GLASS SHELLS, GLASS GLOBES AND GLASS\nFOUNTS: FOUNTS FOR KEROSENE WICK LAMPS", - "hsn_code": "70200012" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: GLASS SHELLS, GLASS GLOBES AND GLASS\nFOUNTS: OTHER", - "hsn_code": "70200019" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: GLASS CHIMNEYS: FOR LAMPS AND\nLANTERNS", - "hsn_code": "70200021" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: GLASS CHIMNEYS: OTHER", - "hsn_code": "70200029" - }, - { - "description": "OTHER ARTICLES OF GLASS OTHER ARTICLES OF GLASS: OTHER", - "hsn_code": "70200090" - }, - { - "description": "PEARLS, NATURAL OR CULTURED, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG,\nMOUNTED OR SET; PEARLS, NATURAL OR CULTURED, TEMPORARILY STRUNG FOR CONVENIENCE\nOF TRANSPORT - NATURAL PEARLS: UNWORKED", - "hsn_code": "71011010" - }, - { - "description": "PEARLS, NATURAL OR CULTURED, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG,\nMOUNTED OR SET; PEARLS, NATURAL OR CULTURED, TEMPORARILY STRUNG FOR CONVENIENCE\nOF TRANSPORT - NATURAL PEARLS: WORKED", - "hsn_code": "71011020" - }, - { - "description": "PEARLS, NATURAL OR CULTURED, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG,\nMOUNTED OR SET; PEARLS, NATURAL OR CULTURED, TEMPORARILY STRUNG FOR CONVENIENCE\nOF TRANSPORT - CULTURED PEARLS: UNWORKED", - "hsn_code": "71012100" - }, - { - "description": "PEARLS, NATURAL OR CULTURED, WHETHER OR NOT WORKED OR GRADED BUT NOT STRUNG,\nMOUNTED OR SET; PEARLS, NATURAL OR CULTURED, TEMPORARILY STRUNG FOR CONVENIENCE\nOF TRANSPORT - CULTURED PEARLS: WORKED", - "hsn_code": "71012200" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - UNSORTED", - "hsn_code": "71021000" - }, - { - "description": "21 DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - INDUSTRIAL :\nUNWORKED OR SIMPLY SAWN, CLEAVED OR BRUTED: SORTED", - "hsn_code": "71022110" - }, - { - "description": "21 DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - INDUSTRIAL :\nUNWORKED OR SIMPLY SAWN, CLEAVED OR BRUTED: UNSORTED", - "hsn_code": "71022120" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - INDUSTRIAL : OTHER:\nCRUSHED", - "hsn_code": "71022910" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - INDUSTRIAL : OTHER:\nOTHER", - "hsn_code": "71022990" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - NON-INDUSTRIAL:\nUNWORKED OR SIMPLY SAWN, CLEAVED OR BRUTED", - "hsn_code": "71023100" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - NON-INDUSTRIAL:\nOTHERS: DIAMOND, CUT OR OTHERWISE WORKED BUT NOT MOUNTED OR SET", - "hsn_code": "71023910" - }, - { - "description": "DIAMONDS, WHETHER OR NOT WORKED, BUT NOT MOUNTED OR SET - NON-INDUSTRIAL:\nOTHERS: OTHER", - "hsn_code": "71023990" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: PRECIOUS\nSTONES: EMERALD", - "hsn_code": "71031011" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: PRECIOUS\nSTONES: RUBY AND SAPPHIRE", - "hsn_code": "71031012" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: PRECIOUS\nSTONES: OTHER", - "hsn_code": "71031019" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: SEMI\nPRECIOUS STONES: FELDSPAR (MOON STONE)", - "hsn_code": "71031021" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: SEMI\nPRECIOUS STONES: GARNET", - "hsn_code": "71031022" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: SEMI\nPRECIOUS STONES: AGATE", - "hsn_code": "71031023" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: SEMI\nPRECIOUS STONES: GREEN AVENTURINE", - "hsn_code": "71031024" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED: SEMI\nPRECIOUS STONES: OTHER", - "hsn_code": "71031029" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: RUBY, SAPPHIRE AND EMERALDS", - "hsn_code": "71039100" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: OTHER: FELDSPAR (MOON STONE)", - "hsn_code": "71039910" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: OTHER: GARNET", - "hsn_code": "71039920" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: OTHER: AGATE", - "hsn_code": "71039930" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: OTHER: CHALCEDONY", - "hsn_code": "71039940" - }, - { - "description": "PRECIOUS STONES (OTHER THAN DIAMONDS) AND SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED PRECIOUS STONES\n(OTHER THAN DIAMONDS) AND SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHERWISE WORKED: OTHER: OTHER", - "hsn_code": "71039990" - }, - { - "description": "SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED SYNTHETIC OR\nRECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - PIEZO-ELECTRIC QUARTZ", - "hsn_code": "71041000" - }, - { - "description": "SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMIPRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG, MOUNTED OR SET; UNGRADED SYNTHETIC OR\nRECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT - OTHER, UNWORKED OR SIMPLY SAWN OR ROUGHLY SHAPED", - "hsn_code": "71042000" - }, - { - "description": "SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG,MOUNTED OR SET; UNGRADED SYNTHETIC OR\nRECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT-OTHER--LABORATORY CREATED OR LABORATORY GROWN OR\nMANMADE OR CULTURED OR SYNTHETIC DIAMONDS", - "hsn_code": "71049010" - }, - { - "description": "SYNTHETIC OR RECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, WHETHER OR NOT\nWORKED OR GRADED BUT NOT STRUNG,MOUNTED OR SET; UNGRADED SYNTHETIC OR\nRECONSTRUCTED PRECIOUS OR SEMI-PRECIOUS STONES, TEMPORARILY STRUNG FOR\nCONVENIENCE OF TRANSPORT-OTHER--LABORATORY CREATED OR LABORATORY GROWN OR\nMANMADE OR CULTURED OR SYNTHETIC DIAMONDS--OTHER", - "hsn_code": "71049090" - }, - { - "description": "DUST AND POWDER OF NATURAL OR SYNTHETIC PRECIOUS OR SEMI-PRECIOUS STONES - OF\nDIAMOND", - "hsn_code": "71051000" - }, - { - "description": "DUST AND POWDER OF NATURAL OR SYNTHETIC PRECIOUS OR SEMI-PRECIOUS STONES - OTHER", - "hsn_code": "71059000" - }, - { - "description": "SILVER (INCLUDING SILVER PLATED WITH GOLD OR PLATINUM), UNWROUGHT OR IN SEMI\nMANUFACTURED FORMS, OR IN POWDER FORM - POWDER", - "hsn_code": "71061000" - }, - { - "description": "SILVER (INCLUDING SILVER PLATED WITH GOLD OR PLATINUM), UNWROUGHT OR IN SEMI\nMANUFACTURED FORMS, OR IN POWDER FORM - OTHER : UNWROUGHT", - "hsn_code": "71069100" - }, - { - "description": "SILVER (INCLUDING SILVER PLATED WITH GOLD OR PLATINUM), UNWROUGHT OR IN SEMI\nMANUFACTURED FORMS, OR IN POWDER FORM SEMI-MANUFACTURED : SHEETS, PLATES,\nSTRIPS, TUBES AND PIPES", - "hsn_code": "71069210" - }, - { - "description": "SILVER (INCLUDING SILVER PLATED WITH GOLD OR PLATINUM), UNWROUGHT OR IN SEMI\nMANUFACTURED FORMS, OR IN POWDER FORM SEMI-MANUFACTURED : OTHER", - "hsn_code": "71069290" - }, - { - "description": "BASE METALS CLAD WITH SILVER, NOT FURTHER WORKED THAN SEMI-MANUFACTURED", - "hsn_code": "71070000" - }, - { - "description": "GOLD (INCLUDING GOLD PLATED WITH PLATINUM) UNWROUGHT OR IN SEMI-MANUFACTURED\nFORMS, OR IN POWDER FORM - NON-MONETARY : POWDER", - "hsn_code": "71081100" - }, - { - "description": "GOLD (INCLUDING GOLD PLATED WITH PLATINUM) UNWROUGHT OR IN SEMI-MANUFACTURED\nFORMS, OR IN POWDER FORM - NON-MONETARY : OTHER UNWROUGHT FORMS", - "hsn_code": "71081200" - }, - { - "description": "GOLD (INCLUDING GOLD PLATED WITH PLATINUM) UNWROUGHT OR IN SEMI-MANUFACTURED\nFORMS, OR IN POWDER FORM - NON-MONETARY : OTHER SEMI-MANUFACTURED FORMS", - "hsn_code": "71081300" - }, - { - "description": "GOLD (INCLUDING GOLD PLATED WITH PLATINUM) UNWROUGHT OR IN SEMI-MANUFACTURED\nFORMS, OR IN POWDER FORM MONETARY", - "hsn_code": "71082000" - }, - { - "description": "BASE METALS OR SILVER, CLAD WITH GOLD, NOT FURTHER WORKED THAN SEMI\nMANUFACTURED", - "hsn_code": "71090000" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nPLATINUM : UNWROUGHT OR IN POWDER FORM: UNWROUGHT FORM", - "hsn_code": "71101110" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nPLATINUM : UNWROUGHT OR IN POWDER FORM: IN POWDER FORM", - "hsn_code": "71101120" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nPLATINUM : OTHER", - "hsn_code": "71101900" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nPALLADIUM: UNWROUGHT OR IN POWDER FORM", - "hsn_code": "71102100" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nPALLADIUM: OTHER", - "hsn_code": "71102900" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nRHODIUM: UNWROUGHT OR IN POWDER FROM", - "hsn_code": "71103100" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM -\nRHODIUM: OTHER", - "hsn_code": "71103900" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM - IRIDIUM,\nOSMIUM AND RUTHENIUM: UNWROUGHT OR IN POWDER FROM", - "hsn_code": "71104100" - }, - { - "description": "PLATINUM, UNWROUGHT OR IN SEMI-MANUFACTURED FORM, OR IN POWDER FORM - IRIDIUM,\nOSMIUM AND RUTHENIUM: OTHER", - "hsn_code": "71104900" - }, - { - "description": "BASE METALS, SILVER OR GOLD, CLAD WITH PLATINUM, NOT FURTHER WORKED THAN SEMI\nMANUFACTURED", - "hsn_code": "71110000" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - ASH CONTAINING PRECIOUS\nMETAL OR PRECIOUS METAL COMPOUNDS", - "hsn_code": "71123000" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - OTHER : OF GOLD,\nINCLUDING METAL CLAD WITH GOLD BUT EXCLUDING SWEEPINGS CONTAINING OTHER\nPRECIOUS METALS", - "hsn_code": "71129100" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - OTHER : OF PLATINUM,\nINCLUDING METAL CLAD WITH PLATINUM BUT EXCLUDING SWEEPINGS CONTAINING OTHER\nPRECIOUS METALS", - "hsn_code": "71129200" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - OTHER : OTHER: OF SILVER,\nINCLUDING METAL CLAD WITH SILVER BUT EXCLUDING SWEEPINGS CONTAINING OTHER\nPRECIOUS METALS", - "hsn_code": "71129910" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - OTHER : OTHER: SWEEPINGS\nCONTAINING GOLD OR SILVER", - "hsn_code": "71129920" - }, - { - "description": "WASTE AND SCRAP OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL; OTHER\nWASTE AND SCRAP CONTAINING PRECIOUS METAL OR PRECIOUS METAL COMPOUNDS, OF A\nKIND USED PRINCIPALLY FOR THE RECOVERY OF PRECIOUS METAL - OTHER : OTHER: OTHER", - "hsn_code": "71129990" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH OTHER PRECIOUS METAL:\nJEWELLERY WITH FILIGREE WORK", - "hsn_code": "71131110" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH OTHER PRECIOUS METAL:\nJEWELLERY STUDDED WITH GEMS", - "hsn_code": "71131120" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH OTHER PRECIOUS METAL: OTHER\nARTICLES OF JEWELLERY", - "hsn_code": "71131130" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH OTHER PRECIOUS METAL: PARTS", - "hsn_code": "71131190" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OF GOLD, UNSTUDDED", - "hsn_code": "71131910" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OF GOLD, SET WITH PEARLS", - "hsn_code": "71131920" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OF GOLD, SET WITH DIAMONDS", - "hsn_code": "71131930" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OF GOLD, SET WITH OTHER PRECIOUS AND SEMI- PRECIOUS STONES", - "hsn_code": "71131940" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OF PLATINUM, UNSTUDDED", - "hsn_code": "71131950" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: PARTS", - "hsn_code": "71131960" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF PRECIOUS METAL WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL - OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR CLAD WITH PRECIOUS\nMETAL: OTHER", - "hsn_code": "71131990" - }, - { - "description": "ARTICLES OF JEWELLERY AND PARTS THEREOF, OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL - OF BASE METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "71132000" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF PRECIOUS METAL, WHETHER OR NOT PLATED\nOR CLAD WITH PRECIOUS METAL: OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH\nPRECIOUS METAL:ARTICLES", - "hsn_code": "71141110" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF PRECIOUS METAL, WHETHER OR NOT PLATED\nOR CLAD WITH PRECIOUS METAL: OF SILVER, WHETHER OR NOT PLATED OR CLAD WITH\nPRECIOUS METAL:PARTS", - "hsn_code": "71141120" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF PRECIOUS METAL, WHETHER OR NOT PLATED\nOR CLAD WITH PRECIOUS METAL: OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR\nCLAD WITH PRECIOUS METAL: ARTICLES OF GOLD", - "hsn_code": "71141910" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF PRECIOUS METAL, WHETHER OR NOT PLATED\nOR CLAD WITH PRECIOUS METAL: OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR\nCLAD WITH PRECIOUS METAL: ARTICLES OF PLATINUM", - "hsn_code": "71141920" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF PRECIOUS METAL, WHETHER OR NOT PLATED\nOR CLAD WITH PRECIOUS METAL: OF OTHER PRECIOUS METAL, WHETHER OR NOT PLATED OR\nCLAD WITH PRECIOUS METAL: PARTS", - "hsn_code": "71141930" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF BASE METAL CLAD WITH PRECIOUS METAL :\nARTICLES CLAD WITH GOLD", - "hsn_code": "71142010" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF BASE METAL CLAD WITH PRECIOUS METAL :\nOTHER ARTICLES", - "hsn_code": "71142020" - }, - { - "description": "ARTICLES OF GOLDSMITHS OR SILVERSMITHS WARES AND PARTS THEREOF, OF PRECIOUS METAL\nOR OF METAL CLAD WITH PRECIOUS METAL - OF BASE METAL CLAD WITH PRECIOUS METAL :\nPARTS", - "hsn_code": "71142030" - }, - { - "description": "OTHER ARTICLES OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - CATALYSTS\nIN THE FROM OF WIRE CLOTH OR GRILL, OF PLATINUM", - "hsn_code": "71151000" - }, - { - "description": "OTHER ARTICLES OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER:\nLABORATORY AND INDUSTRIAL ARTICLES OF PRECIOUS METAL", - "hsn_code": "71159010" - }, - { - "description": "OTHER ARTICLES OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER:\nSPINNERETS MADE MAINLY OF GOLD", - "hsn_code": "71159020" - }, - { - "description": "OTHER ARTICLES OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER:\nOTHER", - "hsn_code": "71159090" - }, - { - "description": "ARTICLES OF NATURAL OR CULTURED PEARLS, PRECIOUS OR SEMI-PRECIOUS STONES(NATURAL,\nSYNTHETIC OR RECONSTRUCTED) - OF NATURAL OR CULTURED PEARLS", - "hsn_code": "71161000" - }, - { - "description": "ARTICLES OF NATURAL OR CULTURED PEARLS, PRECIOUS OR SEMI-PRECIOUS STONES(NATURAL,\nSYNTHETIC OR RECONSTRUCTED) - OF PRECIOUS OR SEMI-PRECIOUS STONES (NATURAL,\nSYNTHETIC OR RECONSTRUCTED)", - "hsn_code": "71162000" - }, - { - "description": "IMITATION JEWELLERY - OF BASE METAL, WHETHER OR NOT PLATED WITH PRECIOUS METAL :\nCUFF-LINKS AND STUDS", - "hsn_code": "71171100" - }, - { - "description": "IMITATION JEWELLERY - OF BASE METAL, WHETHER OR NOT PLATED WITH PRECIOUS METAL :\nOTHER: BANGLES", - "hsn_code": "71171910" - }, - { - "description": "IMITATION JEWELLERY - OF BASE METAL, WHETHER OR NOT PLATED WITH PRECIOUS METAL :\nOTHER: GERMAN SILVER JEWELLERY", - "hsn_code": "71171920" - }, - { - "description": "IMITATION JEWELLERY - OF BASE METAL, WHETHER OR NOT PLATED WITH PRECIOUS METAL :\nOTHER: OTHER", - "hsn_code": "71171990" - }, - { - "description": "IMITATION JEWELLERY - OTHER: JEWELLERY STUDDED WITH IMITATION PEARLS OR IMITATION\nOR SYNTHETIC STONES", - "hsn_code": "71179010" - }, - { - "description": "IMITATION JEWELLERY - OTHER: OTHER", - "hsn_code": "71179090" - }, - { - "description": "COIN - COIN (OTHER THAN GOLD COIN), NOT BEING LEGAL TENDER", - "hsn_code": "71181000" - }, - { - "description": "COIN - OTHER", - "hsn_code": "71189000" - }, - { - "description": "PIG IRON AND SPIEGELEISEN IN PIGS, BLOCKS OR OTHER PRIMARY FORMS - NON-ALLOY PIG\nIRON CONTAINING BY WEIGHT 0.5% OR LESS OF PHOSPHORUS", - "hsn_code": "72011000" - }, - { - "description": "PIG IRON AND SPIEGELEISEN IN PIGS, BLOCKS OR OTHER PRIMARY FORMS - NON-ALLOY PIG\nIRON CONTAINING BY WEIGHT MORE THAN 0.5% OF PHOSPHORUS", - "hsn_code": "72012000" - }, - { - "description": "PIG IRON AND SPIEGELEISEN IN PIGS, BLOCKS OR OTHER PRIMARY FORMS - ALLOY PIG IRON;\nSPIEGELEISEN : CAST IRON", - "hsn_code": "72015010" - }, - { - "description": "PIG IRON AND SPIEGELEISEN IN PIGS, BLOCKS OR OTHER PRIMARY FORMS - ALLOY PIG IRON;\nSPIEGELEISEN : OTHER", - "hsn_code": "72015090" - }, - { - "description": "FERRO-ALLOYS - FERRO-MANGANESE : CONTAINING BY WEIGHT MORE THAN 2% OF CARBON", - "hsn_code": "72021100" - }, - { - "description": "FERRO-ALLOYS - FERRO-MANGANESE : OTHER", - "hsn_code": "72021900" - }, - { - "description": "FERRO-ALLOYS - FERRO-SILICON: CONTAINING BY WEIGHT MORE THAN 55% OF SILICON", - "hsn_code": "72022100" - }, - { - "description": "FERRO-ALLOYS - FERRO-SILICON: OTHER", - "hsn_code": "72022900" - }, - { - "description": "FERRO-ALLOYS - FERRO-SILICO-MANGANESE", - "hsn_code": "72023000" - }, - { - "description": "FERRO-ALLOYS - FERRO-CHROMIUM : CONTAINING BY WEIGHT MORE THAN 4% OF CARBON", - "hsn_code": "72024100" - }, - { - "description": "FERRO-ALLOYS - FERRO-CHROMIUM : OTHER", - "hsn_code": "72024900" - }, - { - "description": "FERRO-ALLOYS - FERRO-SILICO-CHROMIUM", - "hsn_code": "72025000" - }, - { - "description": "FERRO-ALLOYS - FERRO-NICKEL", - "hsn_code": "72026000" - }, - { - "description": "FERRO-ALLOYS - FERRO-MOLYBDENUM", - "hsn_code": "72027000" - }, - { - "description": "FERRO-ALLOYS - FERRO TUNGSTEN AND FERRO-SILICO-TUNGSTEN", - "hsn_code": "72028000" - }, - { - "description": "FERRO-ALLOYS - OTHER : FERRO-TITANIUM AND FERRO-SILICO-TITANIUM", - "hsn_code": "72029100" - }, - { - "description": "FERRO-ALLOYS - OTHER : FERRO-VANADIUM", - "hsn_code": "72029200" - }, - { - "description": "FERRO-ALLOYS - OTHER : FERRO-NIOBIUM", - "hsn_code": "72029300" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-PHOSPHORUS", - "hsn_code": "72029911" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-SELENIUM", - "hsn_code": "72029912" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-COBALT", - "hsn_code": "72029913" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-COLUMBIUM", - "hsn_code": "72029914" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-ZIRCONIUM", - "hsn_code": "72029915" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-PHOSPHORUS, FERRO-SELENIUM, FERROCOBALT,\nFERRO-COLUMBIUM, FERRO-ZIRCONIUM, FERRO-TANTALUM: FERRO-TANTALUM", - "hsn_code": "72029916" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-SILICO-ZIRCONIUM, FERRO-SILICO-MAGNESIUM: FERRO\nSILICO-ZIRCONIUM", - "hsn_code": "72029921" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-SILICO-ZIRCONIUM, FERRO-SILICO-MAGNESIUM: FERRO\nSILICO-MAGNESIUM", - "hsn_code": "72029922" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-BORON, CHARGE-CHROME : FERRO-BORON", - "hsn_code": "72029931" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : FERRO-BORON, CHARGE-CHROME : CHARGE-CHROME", - "hsn_code": "72029932" - }, - { - "description": "FERRO-ALLOYS - OTHER : OTHER : OTHER", - "hsn_code": "72029990" - }, - { - "description": "FERROUS PRODUCTS OBTAINED BY DIRECT REDUCTION OF IRON ORE AND OTHER SPONGY\nFERROUS PRODUCTS, IN LUMPS, PELLETS OR SIMILAR FORMS; IRON HAVING MINIMUM PURITY\nBY WEIGHT OF 99.94%, IN LUMPS, PELLETS OR SIMILAR FORMS - FERROUS PRODUCTS OBTAINED\nBY DIRECT REDUCTION OF IRON ORE", - "hsn_code": "72031000" - }, - { - "description": "FERROUS PRODUCTS OBTAINED BY DIRECT REDUCTION OF IRON ORE AND OTHER SPONGY\nFERROUS PRODUCTS, IN LUMPS, PELLETS OR SIMILAR FORMS; IRON HAVING MINIMUM PURITY\nBY WEIGHT OF 99.94%, IN LUMPS, PELLETS OR SIMILAR FORMS - OTHER", - "hsn_code": "72039000" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF CAST IRON", - "hsn_code": "72041000" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF ALLOY STEEL : OF STAINLESS STEEL : EMPTY OR DISCHARGED CARTRIDGES OF ALL\nBORES AND SIZES", - "hsn_code": "72042110" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF ALLOY STEEL : OF STAINLESS STEEL : OTHER", - "hsn_code": "72042190" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF ALLOY STEEL : OTHER : EMPTY OR DISCHARGED CARTRIDGES OF ALL BORES AND SIZES", - "hsn_code": "72042910" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF ALLOY STEEL : OTHER : OF HIGH SPEED STEEL", - "hsn_code": "72042920" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF ALLOY STEEL : OTHER : OTHER", - "hsn_code": "72042990" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - WASTE AND\nSCRAP OF TINNED IRON OR STEEL", - "hsn_code": "72043000" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - OTHER WASTE\nAND SCRAP : TURNINGS, SHAVINGS, CHIPS, MILLING WASTE, SAW DUST, FILLINGS, TRIMMINGS\nAND STAMPINGS, WHETHER OR NOT ` IN BUNDLES", - "hsn_code": "72044100" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - OTHER WASTE\nAND SCRAP : OTHER", - "hsn_code": "72044900" - }, - { - "description": "FERROUS WASTE AND SCRAP; REMELTING SCRAP INGOTS OF IRON OR STEEL - REMELTING SCRAP\nINGOTS", - "hsn_code": "72045000" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF IRON :\nSHOT AND ANGULAR GRIT", - "hsn_code": "72051011" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF IRON :\nWIRE PELLETS", - "hsn_code": "72051012" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF IRON :\nOTHER", - "hsn_code": "72051019" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF ALLOY\nSTEEL : SHOT AND ANGULAR GRIT", - "hsn_code": "72051021" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF ALLOY\nSTEEL : WIRE PELLETS", - "hsn_code": "72051022" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OF ALLOY\nSTEEL : OTHER", - "hsn_code": "72051029" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - GRANULES : OTHER", - "hsn_code": "72051090" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - POWDERS : OF ALLOY\nSTEEL", - "hsn_code": "72052100" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - POWDERS : OTHER : OF\nIRON", - "hsn_code": "72052910" - }, - { - "description": "GRANULES AND POWDERS, OF PIG IRON, SPIEGELEISEN, IRON OR STEEL - POWDERS : OTHER :\nOTHER", - "hsn_code": "72052990" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - INGOTS : OF IRON", - "hsn_code": "72061010" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - INGOTS : OF HIGH CARBON STEEL", - "hsn_code": "72061020" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - INGOTS : OTHER", - "hsn_code": "72061090" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OF IRON : PUDDLED BARS AND PILINGS", - "hsn_code": "72069011" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OF IRON : BLOCKS, LUMPS AND SIMILAR FORMS", - "hsn_code": "72069012" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OF IRON : OTHER", - "hsn_code": "72069019" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OTHER : PUDDLED BARS AND PILINGS", - "hsn_code": "72069091" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OTHER : BLOCKS, LUMPS AND SIMILAR FORMS", - "hsn_code": "72069092" - }, - { - "description": "IRON AND NON-ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS (EXCLUDING IRON OF\nHEADING 7203) - OTHER : OTHER : OTHER", - "hsn_code": "72069099" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : 7207 11 SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL -\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON : OF RECTANGULAR (INCLUDING\nSQUARE) CROSS-SECTION, THE WIDTH MEASURING LESS THAN TWICE THE THICKNESS:\nELECTRICAL QUALITY", - "hsn_code": "72071110" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : 7207 11 SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL -\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON : OF RECTANGULAR (INCLUDING\nSQUARE) CROSS-SECTION, THE WIDTH MEASURING LESS THAN TWICE THE THICKNESS: FORGING\nQUALITY", - "hsn_code": "72071120" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : 7207 11 SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL -\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON : OF RECTANGULAR (INCLUDING\nSQUARE) CROSS-SECTION, THE WIDTH MEASURING LESS THAN TWICE THE THICKNESS:\nSEAMLESS STEEL TUBE QUALITY", - "hsn_code": "72071130" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : 7207 11 SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL -\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON : OF RECTANGULAR (INCLUDING\nSQUARE) CROSS-SECTION, THE WIDTH MEASURING LESS THAN TWICE THE THICKNESS: OTHER", - "hsn_code": "72071190" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER, OF RECTANGULAR (OTHER THAN SQUARE) CROSSSECTION :\nELECTRICAL QUALITY", - "hsn_code": "72071210" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER, OF RECTANGULAR (OTHER THAN SQUARE) CROSSSECTION :\nFORGING QUALITY", - "hsn_code": "72071220" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER, OF RECTANGULAR (OTHER THAN SQUARE) CROSSSECTION :\nSEAMLESS STEEL TUBE QUALITY", - "hsn_code": "72071230" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER, OF RECTANGULAR (OTHER THAN SQUARE) CROSSSECTION : OTHER", - "hsn_code": "72071290" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER :FORGED BLANKS OF NON-ALLOY STEEL", - "hsn_code": "72071910" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER :MILD STEEL BILLETS", - "hsn_code": "72071920" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT LESS THAN\n0.25% OF CARBON : OTHER : OTHER", - "hsn_code": "72071990" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT 0.25% OR\nMORE OF CARBON : FORGING QUALITY", - "hsn_code": "72072010" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT 0.25% OR\nMORE OF CARBON : SPRING STEEL QUALITY", - "hsn_code": "72072020" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT 0.25% OR\nMORE OF CARBON : SEAMLESS STEEL TUBE QUALITY", - "hsn_code": "72072030" - }, - { - "description": "SEMI-FINISHED PRODUCTS OF IRON OR NON-ALLOY STEEL - CONTAINING BY WEIGHT 0.25% OR\nMORE OF CARBON : OTHER", - "hsn_code": "72072090" - }, - { - "description": "IN COILS, NOT FURTHER WORKED THAN HOT-ROLLED, WITH PATTERNS IN RELIEF", - "hsn_code": "72081000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 4.75 MM OR MORE : PLATES", - "hsn_code": "72082510" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 4.75 MM OR MORE : UNIVERSAL PLATES", - "hsn_code": "72082520" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 4.75 MM OR MORE : SHEETS", - "hsn_code": "72082530" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 4.75 MM OR MORE : STRIP", - "hsn_code": "72082540" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 4.75 MM OR MORE : OTHER", - "hsn_code": "72082590" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : PLATES", - "hsn_code": "72082610" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM :\nUNIVERSAL PLATES", - "hsn_code": "72082620" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : SHEETS", - "hsn_code": "72082630" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : STRIP", - "hsn_code": "72082640" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : OTHER", - "hsn_code": "72082690" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF LESS THAN 3 MM : PLATES", - "hsn_code": "72082710" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF LESS THAN 3 MM : UNIVERSAL PLATES", - "hsn_code": "72082720" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF LESS THAN 3 MM : SHEETS", - "hsn_code": "72082730" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF LESS THAN 3 MM : STRIP", - "hsn_code": "72082740" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOTROLLED, PICKLED : OF A THICKNESS OF LESS THAN 3 MM : OTHER", - "hsn_code": "72082790" - }, - { - "description": "36 FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS EXCEEDING 10 MM : PLATES", - "hsn_code": "72083610" - }, - { - "description": "36 FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS EXCEEDING 10 MM : UNIVERSAL PLATES", - "hsn_code": "72083620" - }, - { - "description": "36 FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS EXCEEDING 10 MM : SHEETS", - "hsn_code": "72083630" - }, - { - "description": "36 FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS EXCEEDING 10 MM : STRIP", - "hsn_code": "72083640" - }, - { - "description": "36 FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS EXCEEDING 10 MM : OTHER", - "hsn_code": "72083690" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : PLATES", - "hsn_code": "72083710" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : UNIVERSAL\nPLATES", - "hsn_code": "72083720" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : SHEETS", - "hsn_code": "72083730" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : STRIP", - "hsn_code": "72083740" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : OTHER", - "hsn_code": "72083790" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : PLATES", - "hsn_code": "72083810" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : UNIVERSAL PLATES", - "hsn_code": "72083820" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : SHEETS", - "hsn_code": "72083830" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : STRIP", - "hsn_code": "72083840" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : OTHER", - "hsn_code": "72083890" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF LESS THAN 3 MM : PLATES", - "hsn_code": "72083910" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF LESS THAN 3 MM : UNIVERSAL PLATES", - "hsn_code": "72083920" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF LESS THAN 3 MM : SHEETS", - "hsn_code": "72083930" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF LESS THAN 3 MM : STRIP", - "hsn_code": "72083940" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, IN COILS, NOT FURTHER WORKED THAN\nHOT-ROLLED: OF A THICKNESS OF LESS THAN 3 MM : OTHER", - "hsn_code": "72083990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED NOT IN COILS, NOT FURTHER WORKED THAN HOT\nROLLED, WITH PATTERNS IN RELIEF : PLATES", - "hsn_code": "72084010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED NOT IN COILS, NOT FURTHER WORKED THAN HOT\nROLLED, WITH PATTERNS IN RELIEF : UNIVERSAL PLATES", - "hsn_code": "72084020" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED NOT IN COILS, NOT FURTHER WORKED THAN HOT\nROLLED, WITH PATTERNS IN RELIEF : SHEETS", - "hsn_code": "72084030" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED NOT IN COILS, NOT FURTHER WORKED THAN HOT\nROLLED, WITH PATTERNS IN RELIEF : STRIP", - "hsn_code": "72084040" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED NOT IN COILS, NOT FURTHER WORKED THAN HOT\nROLLED, WITH PATTERNS IN RELIEF : OTHER", - "hsn_code": "72084090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS EXCEEDING 10 MM : PLATES", - "hsn_code": "72085110" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS EXCEEDING 10 MM : UNIVERSAL PLATES", - "hsn_code": "72085120" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS EXCEEDING 10 MM : SHEETS", - "hsn_code": "72085130" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS EXCEEDING 10 MM : STRIP", - "hsn_code": "72085140" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS EXCEEDING 10 MM : OTHER", - "hsn_code": "72085190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM :\nPLATES", - "hsn_code": "72085210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM :\nUNIVERSAL PLATES", - "hsn_code": "72085220" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM :\nSHEETS", - "hsn_code": "72085230" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM : STRIP", - "hsn_code": "72085240" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 4.75 MM OR MORE BUT NOT EXCEEDING 10 MM :\nOTHER", - "hsn_code": "72085290" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : PLATES", - "hsn_code": "72085310" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : UNIVERSAL\nPLATES", - "hsn_code": "72085320" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : SHEETS", - "hsn_code": "72085330" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : STRIP", - "hsn_code": "72085340" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF 3 MM OR MORE BUT LESS THAN 4.75 MM : OTHER", - "hsn_code": "72085390" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF LESS THAN 3 MM : PLATES", - "hsn_code": "72085410" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF LESS THAN 3 MM : UNIVERSAL PLATES", - "hsn_code": "72085420" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF LESS THAN 3 MM : SHEETS", - "hsn_code": "72085430" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF LESS THAN 3 MM : STRIP", - "hsn_code": "72085440" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER, NOT IN COILS, NOT FURTHER WORKED\nTHAN HOTROLLED : OF A THICKNESS OF LESS THAN 3 MM : OTHER", - "hsn_code": "72085490" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nHOT-ROLLED, NOT CLAD, PLATED OR COATED - OTHER", - "hsn_code": "72089000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : PLATES", - "hsn_code": "72091510" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : SHEETS", - "hsn_code": "72091520" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : STRIP", - "hsn_code": "72091530" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : OTHER", - "hsn_code": "72091590" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : PLATES", - "hsn_code": "72091610" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : SHEETS", - "hsn_code": "72091620" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : STRIP", - "hsn_code": "72091630" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : OTHER", - "hsn_code": "72091690" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : PLATES", - "hsn_code": "72091710" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : SHEETS", - "hsn_code": "72091720" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : STRIP", - "hsn_code": "72091730" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : OTHER", - "hsn_code": "72091790" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nPLATES", - "hsn_code": "72091810" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nSHEETS", - "hsn_code": "72091820" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM : STRIP", - "hsn_code": "72091830" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nOTHER", - "hsn_code": "72091890" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : PLATES", - "hsn_code": "72092510" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : SHEETS", - "hsn_code": "72092520" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : STRIP", - "hsn_code": "72092530" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM OR MORE : OTHER", - "hsn_code": "72092590" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : PLATES", - "hsn_code": "72092610" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : SHEETS", - "hsn_code": "72092620" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : STRIP", - "hsn_code": "72092630" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS EXCEEDING 1 MM BUT LESS\nTHAN 3 MM : OTHER", - "hsn_code": "72092690" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : PLATES", - "hsn_code": "72092710" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : SHEETS", - "hsn_code": "72092720" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : STRIP", - "hsn_code": "72092730" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 0.5 MM OR MORE BUT\nNOT EXCEEDING 1 MM : OTHER", - "hsn_code": "72092790" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nPLATES", - "hsn_code": "72092810" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nSHEETS", - "hsn_code": "72092820" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM : STRIP", - "hsn_code": "72092830" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - NOT IN COILS, NOT FURTHER\nWORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN 0.5 MM :\nOTHER", - "hsn_code": "72092890" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCOLD-ROLLED (COLDREDUCED), NOT CLAD, PLATED OR COATED - OTHER", - "hsn_code": "72099000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OF A THICKNESS OF 0.5 MM OR\nMORE : OTS/MR TYPE", - "hsn_code": "72101110" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OF A THICKNESS OF 0.5 MM OR\nMORE : OTHER", - "hsn_code": "72101190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OF A THICKNESS OF LESS THAN 0.5\nMM: OTS/MR TYPE", - "hsn_code": "72101210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OF A THICKNESS OF LESS THAN 0.5\nMM: OTHER", - "hsn_code": "72101290" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH LEAD, INCLUDING TERNE-PLATE", - "hsn_code": "72102000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - ELECTROLYTICALLY PLATED OR COATED WITH ZINC :CORRUGATED", - "hsn_code": "72103010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - ELECTROLYTICALLY PLATED OR COATED WITH ZINC :OTHER", - "hsn_code": "72103090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED WITH ZINC : CORRUGATED", - "hsn_code": "72104100" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED WITH ZINC : OTHER", - "hsn_code": "72104900" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH CHROMIUM OXIDES OR WITH\nCHROMIUM AND CHROMIUM OXIDES", - "hsn_code": "72105000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH ALUMINIUM : PLATED OR COATED WITH\nALUMINIUM-ZINC ALLOYS", - "hsn_code": "72106100" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH ALUMINIUM : OTHER", - "hsn_code": "72106900" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - PAINTED, VARNISHED OR COATED WITH PLASTICS", - "hsn_code": "72107000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - OTHER : LACQUERED", - "hsn_code": "72109010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE,\nCLAD, PLATED OR COATED - OTHER : OTHER", - "hsn_code": "72109090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : ROLLED ON FOUR\nFACES OR IN A CLOSED BOX PASS, OF A WIDTH EXCEEDING 150 MM AND A THICKNESS OF NOT\nLESS THAN 4 MM, NOT IN COILS AND WITHOUT PATTERNS IN RELIEF", - "hsn_code": "72111300" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : FLATS", - "hsn_code": "72111410" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : UNIVERSAL PLATES", - "hsn_code": "72111420" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : HOOPS", - "hsn_code": "72111430" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : SHEETS", - "hsn_code": "72111440" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : STRIP", - "hsn_code": "72111450" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : SKELP", - "hsn_code": "72111460" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER, OF A\nTHICKNESS OF 4.75 MM OR MORE : OTHER", - "hsn_code": "72111490" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : FLATS", - "hsn_code": "72111910" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER :\nUNIVERSAL PLATES", - "hsn_code": "72111920" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : HOOPS", - "hsn_code": "72111930" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : SHEETS", - "hsn_code": "72111940" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : STRIP", - "hsn_code": "72111950" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : SKELP", - "hsn_code": "72111960" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN HOT-ROLLED : OTHER : OTHER", - "hsn_code": "72111990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: FLATS", - "hsn_code": "72112310" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: UNIVERSAL PLATES", - "hsn_code": "72112320" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: HOOPS", - "hsn_code": "72112330" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: SHEETS", - "hsn_code": "72112340" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: STRIP", - "hsn_code": "72112350" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nCONTAINING BY WEIGHT LESS THAN 0.25% OF CARBON: OTHER", - "hsn_code": "72112390" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : FLATS", - "hsn_code": "72112910" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : UNIVERSAL PLATES", - "hsn_code": "72112920" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : HOOPS", - "hsn_code": "72112930" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : SHEETS", - "hsn_code": "72112940" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : STRIP", - "hsn_code": "72112950" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : SKELP", - "hsn_code": "72112960" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - NOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) :\nOTHER : OTHER", - "hsn_code": "72112990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - OTHER : UNIVERSAL PLATES : OF BOILER QUALITY", - "hsn_code": "72119011" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - OTHER : UNIVERSAL PLATES : OF HIGH TENSILE QUALITY", - "hsn_code": "72119012" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - OTHER : UNIVERSAL PLATES : OF SHIP BUILDING QUALITY", - "hsn_code": "72119013" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nNOT CLAD, PLATED OR COATED - OTHER : OTHER", - "hsn_code": "72119090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OTS OR MR TYPE", - "hsn_code": "72121010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - PLATED OR COATED WITH TIN : OTHER", - "hsn_code": "72121090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - ELECTROLYTICALLY PLATED OR COATED WITH ZINC : CORRUGATED", - "hsn_code": "72122010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - ELECTROLYTICALLY PLATED OR COATED WITH ZINC : OTHER", - "hsn_code": "72122090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED WITH ZINC : CORRUGATED", - "hsn_code": "72123010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED WITH ZINC : OTHER", - "hsn_code": "72123090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - PAINTED, VARNISHED OR COATED WITH PLASTICS", - "hsn_code": "72124000" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED : PLATED OR COATED WITH LEAD", - "hsn_code": "72125010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED : LACQUERED", - "hsn_code": "72125020" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - OTHERWISE PLATED OR COATED : OTHER", - "hsn_code": "72125090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF IRON OR NON-ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM,\nCLAD, PLATED OR COATED - CLAD", - "hsn_code": "72126000" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nCONTAINING INDENTATIONS, RIBS, GROOVES OR OTHER DEFORMATIONS PRODUCED DURING\nTHE ROLLING PROCESS : OF FREE CUTTING STEEL", - "hsn_code": "72131010" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nCONTAINING INDENTATIONS, RIBS, GROOVES OR OTHER DEFORMATIONS PRODUCED DURING\nTHE ROLLING PROCESS : OTHER", - "hsn_code": "72131090" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER, OF FREE-CUTTING STEEL : ELECTRODE QUALITY", - "hsn_code": "72132010" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER, OF FREE-CUTTING STEEL : COLD HEADING QUALITY", - "hsn_code": "72132020" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER, OF FREE-CUTTING STEEL : OTHER", - "hsn_code": "72132090" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OF CIRCULAR CROSS-SECTION MEASURING LESS THAN 14 MM IN DIAMETER :\nELECTRODE QUALITY", - "hsn_code": "72139110" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OF CIRCULAR CROSS-SECTION MEASURING LESS THAN 14 MM IN DIAMETER : COLD\nHEADING QUALITY", - "hsn_code": "72139120" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OF CIRCULAR CROSS-SECTION MEASURING LESS THAN 14 MM IN DIAMETER : OTHER", - "hsn_code": "72139190" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OTHER : ELECTRODE QUALITY", - "hsn_code": "72139910" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OTHER : COLD HEADING QUALITY", - "hsn_code": "72139920" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF IRON OR NON-ALLOY STEEL -\nOTHER : OTHER : OTHER", - "hsn_code": "72139990" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - FORGED : SPRING STEEL QUALITY", - "hsn_code": "72141010" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - FORGED : OTHER", - "hsn_code": "72141090" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - CONTAINING INDENTATIONS, RIBS, GROOVES OR OTHER DEFORMATIONS PRODUCED\nDURING THE ROLLING PROCESS OR TWISTED AFTER ROLLING : SPRING STEEL QUALITY", - "hsn_code": "72142010" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - CONTAINING INDENTATIONS, RIBS, GROOVES OR OTHER DEFORMATIONS PRODUCED\nDURING THE ROLLING PROCESS OR TWISTED AFTER ROLLING : OTHER", - "hsn_code": "72142090" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - OTHER, OF FREE CUTTING STEEL", - "hsn_code": "72143000" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - OTHER : OF RECTANGULAR (OTHER THAN SQUARE) CROSS-SECTION : MILD STEEL\nBRIGHT BAR", - "hsn_code": "72149110" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - OTHER : OF RECTANGULAR (OTHER THAN SQUARE) CROSS-SECTION : OTHER", - "hsn_code": "72149190" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - OTHER : OTHER : OF SPRING STEEL QUALITY", - "hsn_code": "72149910" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL, NOT FURTHER WORKED THAN FORGED,\nHOT-ROLLED, HOT-DRAWN OR HOT-EXTRUDED, BUT INCLUDING THOSE TWISTED AFTER\nROLLING - OTHER : OTHER : OTHER", - "hsn_code": "72149990" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OF FREE-CUTTING STEEL, NOT FURTHER\nWORKED THAN COLD-FORMED OR COLD-FINISHED", - "hsn_code": "72151000" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OTHER, NOT FURTHER WORKED THAN\nCOLD-FORMED OR COLD-FINISHED : MILD STEEL BRIGHT BAR", - "hsn_code": "72155010" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OTHER, NOT FURTHER WORKED THAN\nCOLD-FORMED OR COLD-FINISHED : OTHER", - "hsn_code": "72155090" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OTHER : PLATED OR COATED WITH ZINC", - "hsn_code": "72159010" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OTHER : PLATED OR COATED WITH\nOTHER BASE METALS", - "hsn_code": "72159020" - }, - { - "description": "OTHER BARS AND RODS OF IRON OR NON-ALLOY STEEL - OTHER : OTHER", - "hsn_code": "72159090" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL U, I OR H SECTIONS, NOT\nFURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED, OF A HEIGHT OF LESS THAN\n80 MM", - "hsn_code": "72161000" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - L OR T SECTIONS, NOT\nFURTHER WORKED THAN HOTROLLED, HOT-DRAWN OR EXTRUDED, OF A HEIGHT OF LESS THAN\n80 MM : L SECTIONS", - "hsn_code": "72162100" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - L OR T SECTIONS, NOT\nFURTHER WORKED THAN HOTROLLED, HOT-DRAWN OR EXTRUDED, OF A HEIGHT OF LESS THAN\n80 MM : T SECTIONS", - "hsn_code": "72162200" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - U, I OR H SECTIONS, NOT\nFURTHER WORKED THAN HOTROLLED, HOT-DRAWN OR EXTRUDED OF A HEIGHT OF 80 MM OR\nMORE : U SECTIONS", - "hsn_code": "72163100" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - U, I OR H SECTIONS, NOT\nFURTHER WORKED THAN HOTROLLED, HOT-DRAWN OR EXTRUDED OF A HEIGHT OF 80 MM OR\nMORE : I SECTIONS", - "hsn_code": "72163200" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - U, I OR H SECTIONS, NOT\nFURTHER WORKED THAN HOTROLLED, HOT-DRAWN OR EXTRUDED OF A HEIGHT OF 80 MM OR\nMORE : H SECTIONS", - "hsn_code": "72163300" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - L OR T SECTIONS, NOT\nFURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED, OF A HEIGHT OF 80 MM OR\nMORE", - "hsn_code": "72164000" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER ANGLES, SHAPES AND\nSECTIONS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED", - "hsn_code": "72165000" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - ANGLES, SHAPES AND\nSECTIONS, NOT FURTHER WORKED THAN COLD-FORMED OR COLD-FINISHED : OBTAINED FROM\nFLAT-ROLLED PRODUCTS", - "hsn_code": "72166100" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - ANGLES, SHAPES AND\nSECTIONS, NOT FURTHER WORKED THAN COLD-FORMED OR COLD-FINISHED : OTHER", - "hsn_code": "72166900" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: COLD-FORMED OR\nCOLD-FINISHED FROM FLAT ROLLED PRODUCTS", - "hsn_code": "72169100" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: OTHER : PLATED OR\nCOATED WITH ZINC", - "hsn_code": "72169910" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: OTHER : PLATED OR\nCOATED WITH BASE METALS OTHER THAN ZINC", - "hsn_code": "72169920" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: OTHER : SLOTTED\nANGLES AND SLOTTED CHANNELS", - "hsn_code": "72169930" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: OTHER : FORGED", - "hsn_code": "72169940" - }, - { - "description": "ANGLES, SHAPES AND SECTIONS OF IRON OR NON-ALLOY STEEL - OTHER: OTHER : OTHER", - "hsn_code": "72169990" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - NOT PLATED OR COATED, WHETHER OR NOT POLISHED :\nOF A THICKNESS OF 18 SWG AND BELOW", - "hsn_code": "72171010" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - NOT PLATED OR COATED, WHETHER OR NOT POLISHED :\nOF A THICKNESS ABOVE 18 SWG BUT UP TO 26 SWG", - "hsn_code": "72171020" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - NOT PLATED OR COATED, WHETHER OR NOT POLISHED :\nOF A THICKNESS ABOVE 26 SWG", - "hsn_code": "72171030" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH ZINC : OF A THICKNESS OF 18\nSWG AND BELOW", - "hsn_code": "72172010" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH ZINC : OF A THICKNESS ABOVE\n18 SWG BUT UP TO 26 SWG", - "hsn_code": "72172020" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH ZINC : OF A THICKNESS ABOVE\n26 SWG", - "hsn_code": "72172030" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH OTHER BASE METALS : OF A\nTHICKNESS OF 18 SWG AND BELOW", - "hsn_code": "72173010" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH OTHER BASE METALS : OF A\nTHICKNESS ABOVE 18 SWG BUT UP TO 26 SWG", - "hsn_code": "72173020" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - PLATED OR COATED WITH OTHER BASE METALS : OF A\nTHICKNESS ABOVE 26 SWG", - "hsn_code": "72173030" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRE : OF CROSS\nSECTION HALF ROUND", - "hsn_code": "72179011" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRE : OF CROSS\nSECTION FLAT AND RECTANGULAR", - "hsn_code": "72179012" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRE : OF CROSS\nSECTION `Z SHAPED", - "hsn_code": "72179013" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRE : OF CROSS\nSECTION OTHER SHAPES", - "hsn_code": "72179019" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : OTHER : HIGH TENSILE QUALITY", - "hsn_code": "72179091" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : OTHER : ELECTRODE QUALITY", - "hsn_code": "72179092" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : OTHER : ELECTRIC RESISTANCE WIRE (INCLUDING\nELECTRIC RESISTANCE HEATING WIRE)", - "hsn_code": "72179093" - }, - { - "description": "WIRE OF IRON OR NON-ALLOY STEEL - OTHER : OTHER : OTHER", - "hsn_code": "72179099" - }, - { - "description": "STAINLESS STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMIFINISHED PRODUCTS OF\nSTAINLESS STEEL - INGOTS AND OTHER PRIMARY FORMS", - "hsn_code": "72181000" - }, - { - "description": "STAINLESS STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMIFINISHED PRODUCTS OF\nSTAINLESS STEEL - OTHER : OF RECTANGULAR (OTHER THAN SQUARE) CROSS-SECTION", - "hsn_code": "72189100" - }, - { - "description": "STAINLESS STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMIFINISHED PRODUCTS OF\nSTAINLESS STEEL - OTHER : OTHER : BILLETS", - "hsn_code": "72189910" - }, - { - "description": "STAINLESS STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMIFINISHED PRODUCTS OF\nSTAINLESS STEEL - OTHER : OTHER : OTHER", - "hsn_code": "72189990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nCHROMIUM TYPE : NOT EXCEEDING 14 MM", - "hsn_code": "72191111" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nCHROMIUM TYPE : EXCEEDING 14 MM", - "hsn_code": "72191112" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nCHROMIUM TYPE : OTHER", - "hsn_code": "72191190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS OF 4.75 MM OR MORE BUT\nNOT EXCEEDING 10 MM", - "hsn_code": "72191200" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS OF 3 MM OR MORE BUT LESS\nTHAN 4.75 MM", - "hsn_code": "72191300" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, IN COILS : OF A THICKNESS OF LESS THAN 3 MM", - "hsn_code": "72191400" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nUNIVERSAL PLATES OF STAINLESS STEEL OR HEAT RESISTING STEEL AND CHROMIUM TYPE : NOT\nEXCEEDING 14 MM", - "hsn_code": "72192111" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nUNIVERSAL PLATES OF STAINLESS STEEL OR HEAT RESISTING STEEL AND CHROMIUM TYPE :\nEXCEEDING 14 MM", - "hsn_code": "72192112" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nUNIVERSAL PLATES OF STAINLESS STEEL HEAT RESISTING STEEL, NICKEL CHROMIUM AUSTENITIC\nTYPE: NOT EXCEEDING 14 MM", - "hsn_code": "72192121" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nUNIVERSAL PLATES OF STAINLESS STEEL HEAT RESISTING STEEL, NICKEL CHROMIUM AUSTENITIC\nTYPE: EXCEEDING 14 MM", - "hsn_code": "72192122" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nOTHER CHROMIUM TYPE : NOT EXCEEDING 14 MM", - "hsn_code": "72192131" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nOTHER CHROMIUM TYPE : EXCEEDING 14 MM", - "hsn_code": "72192132" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nOTHER NICKEL CHROMIUM AUSTENITIC TYPE : NOT EXCEEDING 14 MM", - "hsn_code": "72192141" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nOTHER NICKEL CHROMIUM AUSTENITIC TYPE : EXCEEDING 14 MM", - "hsn_code": "72192142" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS EXCEEDING 10 MM :\nOTHER", - "hsn_code": "72192190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : UNIVERSAL PLATES OF STAINLESS STEEL OR HEAT RESISTING STEEL\n: CHROMIUM TYPE", - "hsn_code": "72192211" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : UNIVERSAL PLATES OF STAINLESS STEEL OR HEAT RESISTING STEEL\n: NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72192212" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : UNIVERSAL PLATES OF STAINLESS STEEL OR HEAT RESISTING STEEL\n: OTHER", - "hsn_code": "72192219" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : OTHER : CHROMIUM TYPE", - "hsn_code": "72192291" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : OTHER : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72192292" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 4.75 MM OR MORE\nBUT NOT EXCEEDING 10 MM : OTHER : OTHER", - "hsn_code": "72192299" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 3 MM OR MORE BUT\nLESS THAN 4.75 MM : CHROMIUM TYPE", - "hsn_code": "72192310" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 3 MM OR MORE BUT\nLESS THAN 4.75 MM : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72192320" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 3 MM OR MORE BUT\nLESS THAN 4.75 MM : OTHER", - "hsn_code": "72192390" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nCHROMIUM TYPE, OF A THICKNESS : BELOW 0.35 MM", - "hsn_code": "72192411" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nCHROMIUM TYPE, OF A THICKNESS : 0.35 MM AND ABOVE BUT BELOW 0.56 MM", - "hsn_code": "72192412" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nCHROMIUM TYPE, OF A THICKNESS : 0.56 MM AND ABOVE BUT BELOW 0.90 MM", - "hsn_code": "72192413" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nCHROMIUM TYPE, OF A THICKNESS : OTHER", - "hsn_code": "72192419" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nNICKEL CHROMIUM AUSTENITIC TYPE, OF A THICKNESS : BELOW 0.35 MM", - "hsn_code": "72192421" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nNICKEL CHROMIUM AUSTENITIC TYPE, OF A THICKNESS : 0.35 MM AND ABOVE BUT BELOW 0.56\nMM", - "hsn_code": "72192422" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nNICKEL CHROMIUM AUSTENITIC TYPE, OF A THICKNESS : 0.56 MM AND ABOVE BUT BELOW 0.90\nMM", - "hsn_code": "72192423" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nNICKEL CHROMIUM AUSTENITIC TYPE, OF A THICKNESS : OTHER", - "hsn_code": "72192429" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF LESS THAN 3 MM :\nOTHER", - "hsn_code": "72192490" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 4.75 MM OR\nMORE : CHROMIUM TYPE : NOT EXCEEDING 14 MM", - "hsn_code": "72193111" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 4.75 MM OR\nMORE : CHROMIUM TYPE : EXCEEDING 14 MM", - "hsn_code": "72193112" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 4.75 MM OR\nMORE : NICKEL CHROMIUM AUSTENITIC TYPE : NOT EXCEEDING 14 MM", - "hsn_code": "72193121" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 4.75 MM OR\nMORE : NICKEL CHROMIUM AUSTENITIC TYPE : EXCEEDING 14 MM", - "hsn_code": "72193122" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 4.75 MM OR\nMORE : NICKEL CHROMIUM AUSTENITIC TYPE : OTHER", - "hsn_code": "72193190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 3 MM OR MORE\nBUT LESS THAN 4.75 MM : CHROMIUM TYPE", - "hsn_code": "72193210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 3 MM OR MORE\nBUT LESS THAN 4.75 MM : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72193220" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 3 MM OR MORE\nBUT LESS THAN 4.75 MM : OTHER", - "hsn_code": "72193290" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS EXCEEDING 1 MM\nBUT LESS THAN 3 MM : CHROMIUM TYPE", - "hsn_code": "72193310" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS EXCEEDING 1 MM\nBUT LESS THAN 3 MM : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72193320" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS EXCEEDING 1 MM\nBUT LESS THAN 3 MM : OTHER", - "hsn_code": "72193390" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 0.5 MM OR\nMORE BUT NOT EXCEEDING 1 MM : CHROMIUM TYPE", - "hsn_code": "72193410" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 0.5 MM OR\nMORE BUT NOT EXCEEDING 1 MM : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72193420" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF 0.5 MM OR\nMORE BUT NOT EXCEEDING 1 MM : OTHER", - "hsn_code": "72193490" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF LESS THAN 0.5\nMM : CHROMIUM TYPE", - "hsn_code": "72193510" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF LESS THAN 0.5\nMM : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72193520" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED) : OF A THICKNESS OF LESS THAN 0.5\nMM : OTHER", - "hsn_code": "72193590" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nSHEETS AND PLATES : THICKNESS MORE THAN 4.75 MM", - "hsn_code": "72199011" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nSHEETS AND PLATES : THICKNESS 3 MM TO 4.75 MM", - "hsn_code": "72199012" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nSHEETS AND PLATES : THICKNESS LESS THAN 3 MM", - "hsn_code": "72199013" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nOTHER", - "hsn_code": "72199090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 4.75 MM OR MORE : SKELP FOR\nPIPES AND TUBES", - "hsn_code": "72201110" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 4.75 MM OR MORE : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : CHROMIUM TYPE", - "hsn_code": "72201121" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 4.75 MM OR MORE : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72201122" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 4.75 MM OR MORE : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : OTHER", - "hsn_code": "72201129" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 4.75 MM OR MORE : OTHER", - "hsn_code": "72201190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF LESS THAN 4.75 MM : SKELP FOR\nPIPES AND TUBES", - "hsn_code": "72201210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF LESS THAN 4.75 MM : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : CHROMIUM TYPE", - "hsn_code": "72201221" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF LESS THAN 4.75 MM : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72201222" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF LESS THAN 4.75 MM : STRIPS FOR\nPIPES AND TUBES (OTHER THAN SKELP) : OTHER", - "hsn_code": "72201229" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF LESS THAN 4.75 MM : OTHER", - "hsn_code": "72201290" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED): SKELP FOR PIPES AND TUBES", - "hsn_code": "72202010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED): STRIPS FOR PIPES AND TUBES (OTHER\nTHAN SKELP) : CHROMIUM TYPE", - "hsn_code": "72202021" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED): STRIPS FOR PIPES AND TUBES (OTHER\nTHAN SKELP) : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72202022" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED): STRIPS FOR PIPES AND TUBES (OTHER\nTHAN SKELP) : OTHER", - "hsn_code": "72202029" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - NOT\nFURTHER WORKED THAN COLD-ROLLED (COLD REDUCED): OTHER", - "hsn_code": "72202090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER :\nSKELP (STRIPS FOR PIPES AND TUBES)", - "hsn_code": "72209010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER :\nSTRIPS FOR PIPES AND TUBES (OTHER THAN SKELP) : CHROMIUM TYPE", - "hsn_code": "72209021" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER :\nSTRIPS FOR PIPES AND TUBES (OTHER THAN SKELP) : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72209022" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER :\nSTRIPS FOR PIPES AND TUBES (OTHER THAN SKELP) : OTHER", - "hsn_code": "72209029" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF STAINLESS STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER\n:OTHER", - "hsn_code": "72209090" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL - BARS AND\nRODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL : BRIGHT BARS :\nCHROMIUM TYPE", - "hsn_code": "72210011" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL - BARS AND\nRODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL : BRIGHT BARS :\nNICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72210012" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL - BARS AND\nRODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL : BRIGHT BARS :\nOTHER", - "hsn_code": "72210019" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF STAINLESS STEEL - OTHER", - "hsn_code": "72210090" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : BRIGHT BARS : CHROMIUM TYPE", - "hsn_code": "72221111" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : BRIGHT BARS : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72221112" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : BRIGHT BARS : OTHER", - "hsn_code": "72221119" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : OTHER : CHROMIUM TYPE", - "hsn_code": "72221191" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : OTHER : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72221192" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OF CIRCULAR CROSS SECTION : OTHER : OTHER", - "hsn_code": "72221199" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : BRIGHT BARS : CHROMIUM TYPE", - "hsn_code": "72221911" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : BRIGHT BARS : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72221912" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : BRIGHT BARS : OTHER", - "hsn_code": "72221919" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : OTHER : CHROMIUM TYPE", - "hsn_code": "72221991" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : OTHER : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72221992" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN HOT ROLLED, HOT-DRAWN OR\nEXTRUDED: OTHER : OTHER : OTHER", - "hsn_code": "72221999" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nBRIGHT BARS : CHROMIUM TYPE", - "hsn_code": "72222011" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nBRIGHT BARS : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72222012" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nBRIGHT BARS : OTHER", - "hsn_code": "72222019" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nOTHER : CHROMIUM TYPE", - "hsn_code": "72222091" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nOTHER : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72222092" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - BARS AND RODS, NOT FURTHER WORKED THAN COLD FORMED OR COLD-FINISHED :\nOTHER : OTHER", - "hsn_code": "72222099" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : BRIGHT BARS : CHROMIUM TYPE", - "hsn_code": "72223011" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : BRIGHT BARS : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72223012" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : BRIGHT BARS : OTHER", - "hsn_code": "72223019" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : OTHER : CHROMIUM TYPE", - "hsn_code": "72223091" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : OTHER : NICKEL CHROMIUM AUSTENITIC TYPE", - "hsn_code": "72223092" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - OTHER BARS AND RODS : OTHER : OTHER", - "hsn_code": "72223099" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - ANGLES, SHAPES AND SECTIONS : OF THICKNESS OF 80 MM AND ABOVE", - "hsn_code": "72224010" - }, - { - "description": "OTHER BARS AND RODS OF STAINLESS STEEL; ANGLES, SHAPES AND SECTIONS OF STAINLESS\nSTEEL - ANGLES, SHAPES AND SECTIONS : OF BELOW 80 MM", - "hsn_code": "72224020" - }, - { - "description": "WIRE OF STAINLESS STEEL - WIRE OF STAINLESS STEEL :ELECTRODE QUALITY", - "hsn_code": "72230010" - }, - { - "description": "WIRE OF STAINLESS STEEL - WIRE OF STAINLESS STEEL : OTHER : OF THICKNESS OF ABOVE 1.5\nMM", - "hsn_code": "72230091" - }, - { - "description": "WIRE OF STAINLESS STEEL - WIRE OF STAINLESS STEEL : OTHER : OF THICKNESS OF 0.46 MM AND\nABOVE BUT NOT EXCEEDING 1.5 MM", - "hsn_code": "72230092" - }, - { - "description": "WIRE OF STAINLESS STEEL - WIRE OF STAINLESS STEEL : OTHER : OF THICKNESS OF BELOW 0.46\nMM", - "hsn_code": "72230099" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL INGOTS AND OTHER PRIMARY FORMS", - "hsn_code": "72241000" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : OF TOOL STEEL QUALITY", - "hsn_code": "72249010" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : OF DIE STEEL QUALITY", - "hsn_code": "72249020" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : OF COBALT BEARING HIGH SPEED STEEL QUALITY", - "hsn_code": "72249030" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : FORGED BLANKS OF ALLOY STEEL", - "hsn_code": "72249040" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : OTHER : BILLETS", - "hsn_code": "72249091" - }, - { - "description": "OTHER ALLOY STEEL IN INGOTS OR OTHER PRIMARY FORMS; SEMI-FINISHED PRODUCTS OF\nOTHER ALLOY STEEL - OTHER : OTHER : OTHER", - "hsn_code": "72249099" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF\nSILICON-ELECTRICAL STEEL : GRAIN-ORIENTED", - "hsn_code": "72251100" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - HOT ROLLED", - "hsn_code": "72251910" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - COLD ROLLED", - "hsn_code": "72251920" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - OTHER THAN HOT OR COLD\nROLLED", - "hsn_code": "72251990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF HIGH\nSPEED STEEL : HOT-ROLLED : IN COILS", - "hsn_code": "72252011" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF HIGH\nSPEED STEEL : HOT-ROLLED : NOT IN COILS", - "hsn_code": "72252019" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF HIGH\nSPEED STEEL : COLD-ROLLED : IN COILS", - "hsn_code": "72252021" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OF HIGH\nSPEED STEEL : COLD-ROLLED : NOT IN COILS", - "hsn_code": "72252029" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, IN COILS : OF SPRING STEEL QUALITY", - "hsn_code": "72253010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, IN COILS : OTHER", - "hsn_code": "72253090" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF ABOVE 4.75 MM\n: BOILER QUALITY", - "hsn_code": "72254011" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF ABOVE 4.75 MM\n: PRESSURE VESSEL QUALITY", - "hsn_code": "72254012" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF ABOVE 4.75 MM\n: HIGH TENSILE QUALITY", - "hsn_code": "72254013" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF ABOVE 4.75 MM\n: OTHER", - "hsn_code": "72254019" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF 3 MM AND\nABOVE BUT NOT EXCEEDING 4.75 MM", - "hsn_code": "72254020" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN HOT-ROLLED, NOT IN COILS : OF A THICKNESS OF BELOW 3 MM", - "hsn_code": "72254030" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF LESS THAN\n3 MM", - "hsn_code": "72255010" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF 3 MM TO\n4.75 MM", - "hsn_code": "72255020" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER,\nNOT FURTHER WORKED THAN COLD-ROLLED (COLD-REDUCED) : OF A THICKNESS OF ABOVE 4.75\nMM", - "hsn_code": "72255030" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nELECTROLYTICALLY PLATED OR COATED WITH ZINC", - "hsn_code": "72259100" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nOTHERWISE PLATED OR COATED WITH ZINC", - "hsn_code": "72259200" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF 600 MM OR MORE - OTHER :\nOTHER", - "hsn_code": "72259900" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF\nSILICON-ELECTRICAL STEEL : GRAIN-ORIENTED", - "hsn_code": "72261100" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM- OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - HOT ROLLED", - "hsn_code": "72261910" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM- OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - COLD ROLLED", - "hsn_code": "72261920" - }, - { - "description": "FLAT ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM- OF\nSILICON-ELECTRICAL STEEL - OTHER THAN GRAIN ORIENTED - OTHER THAN HOT ROLLED OR\nCOLD ROLLED", - "hsn_code": "72261990" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF HIGH\nSPEED STEEL : HOT-ROLLED : IN COILS", - "hsn_code": "72262011" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF HIGH\nSPEED STEEL : HOT-ROLLED : OTHER", - "hsn_code": "72262012" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF HIGH\nSPEED STEEL : COLD-ROLLED : IN COILS", - "hsn_code": "72262021" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF HIGH\nSPEED STEEL : COLD-ROLLED : OTHER", - "hsn_code": "72262022" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OF HIGH\nSPEED STEEL : HOOPS AND STRIPS", - "hsn_code": "72262030" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF BELOW 3 MM", - "hsn_code": "72269110" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN HOT-ROLLED : OF A THICKNESS OF 3 MM AND ABOVE BUT NOT\nEXCEEDING 4.75 MM", - "hsn_code": "72269120" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN HOT-ROLLED : HIGH TENSILE QUALITY OF A THICKNESS OF ABOVE\n4.75 MM", - "hsn_code": "72269130" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN HOT-ROLLED : OTHER", - "hsn_code": "72269190" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN COLD-ROLLED (COLDREDUCED): OF A THICKNESS OF BELOW 3\nMM", - "hsn_code": "72269210" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN COLD-ROLLED (COLDREDUCED): OF A THICKNESS OF 3 MM AND\nABOVE BUT NOT EXCEEDING 4.75 MM", - "hsn_code": "72269220" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nNOT FURTHER WORKED THAN COLD-ROLLED (COLDREDUCED): OF A THICKNESS OF ABOVE 4.75\nMM", - "hsn_code": "72269230" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nELECTROLYTICALLY PLATED OR COATED WITH ZINC", - "hsn_code": "72269300" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHERWISE PLATED OR COATED WITH ZINC", - "hsn_code": "72269400" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : OF A THICKNESS OF ABOVE 4.75 MM", - "hsn_code": "72269910" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : OF A THICKNESS OF ABOVE 3 MM AND BUT NOT EXCEEDING 4.75 MM", - "hsn_code": "72269920" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : OF A THICKNESS OF BELOW 3 MM", - "hsn_code": "72269930" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : SKELP (STRIPS FOR PIPES AND TUBES)", - "hsn_code": "72269940" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : HOOPS AND STRIPS : HOT ROLLED", - "hsn_code": "72269951" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : HOOPS AND STRIPS : COLD ROLLED", - "hsn_code": "72269952" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : HOOPS AND STRIPS : OF SPRING STEEL, OTHER THAN SKELP", - "hsn_code": "72269953" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : HOOPS AND STRIPS : SKELPS AND STRIPS FOR RAZOR BLADES AND SAW BLADES", - "hsn_code": "72269960" - }, - { - "description": "FLAT-ROLLED PRODUCTS OF OTHER ALLOY STEEL, OF A WIDTH OF LESS THAN 600 MM - OTHER:\nOTHER : HOOPS AND STRIPS : OTHER", - "hsn_code": "72269990" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OF\nHIGH SPEED STEEL", - "hsn_code": "72271000" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OF\nSILICO-MANGANESE STEEL", - "hsn_code": "72272000" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: VALVE SPRING STEEL QUALITY", - "hsn_code": "72279010" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: OTHER SPRING STEEL QUALITY", - "hsn_code": "72279020" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: BALL BEARING QUALITY", - "hsn_code": "72279030" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: COLD HEADING QUALITY", - "hsn_code": "72279040" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: LEAD-FREE CUTTING QUALITY", - "hsn_code": "72279050" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: SULPHUR FREE CUTTING QUALITY", - "hsn_code": "72279060" - }, - { - "description": "BARS AND RODS, HOT-ROLLED, IN IRREGULARLY WOUND COILS, OF OTHER ALLOY STEEL - OTHER\n: OTHER", - "hsn_code": "72279090" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - BARS AND\nRODS, OF HIGH SPEED STEEL : BRIGHT BARS", - "hsn_code": "72281010" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - BARS AND\nRODS, OF HIGH SPEED STEEL : OTHER", - "hsn_code": "72281090" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - BARS AND\nRODS, OF SILICO-MANGANESE STEEL", - "hsn_code": "72282000" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : BRIGHT\nBARS : OF ALLOY TOOL STEEL", - "hsn_code": "72283011" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : BRIGHT\nBARS : OTHER", - "hsn_code": "72283019" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : OTHER :\nLEAD BEARING STEEL", - "hsn_code": "72283021" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : OTHER :\nSPRING STEEL", - "hsn_code": "72283022" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : OTHER :\nSULPHUR BEARING STEEL", - "hsn_code": "72283023" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : OTHER :\nTOOL AND DIE STEEL", - "hsn_code": "72283024" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR EXTRUDED : OTHER :\nOTHER", - "hsn_code": "72283029" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN FORGED", - "hsn_code": "72284000" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN COLD-FORMED OR COLD-FINISHED : OF ENGINE\nVALVES AND COLD HEADING STEEL", - "hsn_code": "72285010" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS, NOT FURTHER WORKED THAN COLD-FORMED OR COLD-FINISHED : OTHER", - "hsn_code": "72285090" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : BRIGHT BARS : OF ALLOY TOOL STEEL", - "hsn_code": "72286011" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : BRIGHT BARS : OTHER", - "hsn_code": "72286012" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : OTHER : LEAD BEARING STEEL", - "hsn_code": "72286091" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : OTHER : SPRING STEEL", - "hsn_code": "72286092" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : OTHER : SULPHUR BEARING STEEL", - "hsn_code": "72286093" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : OTHER : TOOL AND DIE STEEL", - "hsn_code": "72286094" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - OTHER BARS\nAND RODS : OTHER : OTHER", - "hsn_code": "72286099" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - ANGLES,\nSHAPES AND SECTIONS : NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR\nEXTRUDED : OF 80 MM OR MORE", - "hsn_code": "72287011" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - ANGLES,\nSHAPES AND SECTIONS : NOT FURTHER WORKED THAN HOT-ROLLED, HOT-DRAWN OR\nEXTRUDED : OF LESS THAN 80 MM", - "hsn_code": "72287012" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - ANGLES,\nSHAPES AND SECTIONS : NOT FURTHER WORKED THAN COLD-FORMED OR COLD FINISHED: OF\n80 MM OR MORE", - "hsn_code": "72287021" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - ANGLES,\nSHAPES AND SECTIONS : NOT FURTHER WORKED THAN COLD-FORMED OR COLD FINISHED: OF\nLESS THAN 80 MM", - "hsn_code": "72287022" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - HOLLOW DRILL\nBARS AND RODS : OF ALLOY STEEL", - "hsn_code": "72288010" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - HOLLOW DRILL\nBARS AND RODS : OF NON ALLOY STEEL, FORGED", - "hsn_code": "72288020" - }, - { - "description": "OTHER BARS AND RODS OF OTHER ALLOY STEEL; ANGLES, SHAPES AND SECTIONS, OF OTHER\nALLOY STEEL; HOLLOW DRILL BARS AND RODS, OF ALLOY OR NON-ALLOY STEEL - HOLLOW DRILL\nBARS AND RODS : OTHER", - "hsn_code": "72288090" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL OF HIGH SPEED STEEL", - "hsn_code": "72291000" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL OF SILICO-MANGANESE STEEL", - "hsn_code": "72292000" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED :\nTINNED WIRE", - "hsn_code": "72299011" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED :\nBRONZE COATED WIRE", - "hsn_code": "72299012" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED :\nTRAPEZOIDAL WIRE", - "hsn_code": "72299013" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED : HALF\nROUND WIRE", - "hsn_code": "72299014" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED :\nCRIMPED WIRE", - "hsn_code": "72299015" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : TINNED WIRE, BRONZE COATED WIRE, TRAPEZOIDAL\nWIRE, HALF ROUND WIRE, CRIMPED WIRE AND COPPER COATED WIRE, NOT INSULATED :\nCOPPER COATED WIRE", - "hsn_code": "72299016" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : ELECTRODE QUALITY, WIRE ROPE QUALITY AND ACSR\nQUALITY NOT INSULATED : ELECTRODE QUALITY", - "hsn_code": "72299021" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : ELECTRODE QUALITY, WIRE ROPE QUALITY AND ACSR\nQUALITY NOT INSULATED : WIRE ROPE QUALITY", - "hsn_code": "72299022" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : ELECTRODE QUALITY, WIRE ROPE QUALITY AND ACSR\nQUALITY NOT INSULATED : ACSR QUALITY", - "hsn_code": "72299023" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : WIRE (EXCLUDING WIRE TYPE\nLEAD)", - "hsn_code": "72299031" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : SPRING WIRE", - "hsn_code": "72299032" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : HIGH TENSILE WIRE", - "hsn_code": "72299033" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : HARDENED AND TEMPERED\nWIRE", - "hsn_code": "72299034" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : OTHER WIRE", - "hsn_code": "72299040" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRES OF CROSS-SECTION : HALF\nROUND", - "hsn_code": "72299051" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRES OF CROSS-SECTION : FLAT\nAND RECTANGULAR", - "hsn_code": "72299052" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRES OF CROSS-SECTION : `L\nSHAPE", - "hsn_code": "72299053" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRES OF CROSS-SECTION : `Z\nSHAPE", - "hsn_code": "72299054" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : SHAPED AND PROFILED WIRES OF CROSS-SECTION :\nOTHER", - "hsn_code": "72299059" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : ELECTRIC RESISTANCE WIRE\n(INCLUDING ELECTRIC RESISTANCE HEATING WIRE)", - "hsn_code": "72299060" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : CRIMPED WIRE", - "hsn_code": "72299070" - }, - { - "description": "WIRE OF OTHER ALLOY STEEL - OTHER : WIRE (EXCLUDING WIRE TYPE LEAD), SPRING, HIGH\nTENSILE, HARDENED AND TEMPERED WIRES, NOT INSULATED : OTHER", - "hsn_code": "72299090" - }, - { - "description": "SHEET PILING OF IRON OR STEEL, WHETHER OR NOT DRILLED, PUNCHED OR MADE FROM\nASSEMBLED ELEMENTS; WELDED ANGLES, SHAPES AND SECTIONS, OF IRON OR STEEL - SHEET\nPILING", - "hsn_code": "73011000" - }, - { - "description": "SHEET PILING OF IRON OR STEEL, WHETHER OR NOT DRILLED, PUNCHED OR MADE FROM\nASSEMBLED ELEMENTS; WELDED ANGLES, SHAPES AND SECTIONS, OF IRON OR STEEL - ANGLES,\nSHAPES AND SECTIONS : STEEL SLOTTED ANGLES", - "hsn_code": "73012010" - }, - { - "description": "SHEET PILING OF IRON OR STEEL, WHETHER OR NOT DRILLED, PUNCHED OR MADE FROM\nASSEMBLED ELEMENTS; WELDED ANGLES, SHAPES AND SECTIONS, OF IRON OR STEEL - ANGLES,\nSHAPES AND SECTIONS : OTHER", - "hsn_code": "73012090" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- RAILS : FOR RAILWAYS", - "hsn_code": "73021010" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- RAILS : FOR TRAMWAYS", - "hsn_code": "73021020" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- RAILS : OTHER", - "hsn_code": "73021090" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- SWITCH BLADES, CROSSING FROGS, POINT RODS AND OTHER\nCROSSING PIECES", - "hsn_code": "73023000" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- FISH-PLATES AND SOLE PLATES", - "hsn_code": "73024000" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- - OTHER : MATERIAL FOR JOINTING OR FIXING RAILS", - "hsn_code": "73029010" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK CONSTRUCTION MATERIAL OF IRON OR STEEL, THE FOLLOWING:\nRAILS, CHECK-RAILS AND RACK RAILS, SWITCH BLADES, CROSSING FROGS, POINT RODS AND\nOTHER CROSSING PIECES, SLEEPERS (CROSS-TIES), FISH - PLATES, CHAIRS, CHAIR WEDGES, SOLE\nPLATES (BASE PLATES), RAIL CLIPS, BEDPLATES, TIES AND OTHER MATERIAL SPECIALIZED FOR\nJOINTING OR FIXING RAILS- - OTHER : OTHER", - "hsn_code": "73029090" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, OF CAST IRON - TUBES, PIPES AND HOLLOW PROFILES, OF\nCAST IRON: RAIN WATER PIPE", - "hsn_code": "73030010" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, OF CAST IRON - TUBES, PIPES AND HOLLOW PROFILES, OF\nCAST IRON: SOIL PIPE", - "hsn_code": "73030020" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, OF CAST IRON - TUBES, PIPES AND HOLLOW PROFILES, OF\nCAST IRON: SPUN PIPE", - "hsn_code": "73030030" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, OF CAST IRON - TUBES, PIPES AND HOLLOW PROFILES, OF\nCAST IRON: OTHER", - "hsn_code": "73030090" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : PIPES OF IRON OR STEEL : OF IRON", - "hsn_code": "73041011" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : PIPES OF IRON OR STEEL : OTHER", - "hsn_code": "73041019" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : BLANKS FOR TUBES AND PIPES: OF IRON", - "hsn_code": "73041021" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : BLANKS FOR TUBES AND PIPES: OTHER", - "hsn_code": "73041029" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OF STAINLESS STEEL: --- TUBES AND\nPIPES", - "hsn_code": "73041110" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OF STAINLESS STEEL: --- BLANKS FOR\nTUBES AND PIPES", - "hsn_code": "73041120" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OF STAINLESS STEEL: --- OTHER", - "hsn_code": "73041190" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OTHER --- TUBES AND PIPES", - "hsn_code": "73041910" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OTHER --- BLANKS FOR TUBES AND\nPIPES", - "hsn_code": "73041920" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nLINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : -- OTHER --- OTHER", - "hsn_code": "73041990" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS : DRILL PIPE : OF\nIRON", - "hsn_code": "73042110" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS : DRILL PIPE :\nOTHER", - "hsn_code": "73042190" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- DRILL PIPE OF\nSTAILESS STEEL", - "hsn_code": "73042200" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- OTHER DRILL\nPIPE: --- OF IRON", - "hsn_code": "73042310" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- OTHER DRILL\nPIPE: --- OTHER", - "hsn_code": "73042390" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- OTHER, OF\nSTAILESS STEEL", - "hsn_code": "73042400" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- OTHER --- OF\nIRON", - "hsn_code": "73042910" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nCASING, TUBING AND DRILL PIPE, OF A KIND USED IN DRILLING FOR OIL OR GAS: -- OTHER ---\nOTHER", - "hsn_code": "73042990" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- UP TO 114.3 MM OUTER DIAMETER: ---- OF IRON", - "hsn_code": "73043111" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- UP TO 114.3 MM OUTER DIAMETER: ---- OTHER", - "hsn_code": "73043119" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- ABOVE 114.3 MM BUT UP TO 219.1 MM OUTER DIAMETER: ---- OF\nIRON", - "hsn_code": "73043121" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- ABOVE 114.3 MM BUT UP TO 219.1 MM OUTER DIAMETER: ----\nOTHER", - "hsn_code": "73043129" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- ABOVE 219.1 MM DIAMETER: ---- OF IRON", - "hsn_code": "73043131" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- COLD-DRAWN OR COLD\nROLLED (COLD-REDUCED): --- ABOVE 219.1 MM DIAMETER: ---- OTHER", - "hsn_code": "73043139" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- UP TO 114.3\nMM OUTER DIAMETER -- OF IRON", - "hsn_code": "73043911" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- UP TO 114.3\nMM OUTER DIAMETER ---- OTHER", - "hsn_code": "73043919" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- ABOVE 114.3\nMM BUT UP TO 219.1 MM OUTER DIAMETER: ---- OF IRON", - "hsn_code": "73043921" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- ABOVE 114.3\nMM BUT UP TO 219.1 MM OUTER DIAMETER: ---- OTHER", - "hsn_code": "73043929" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- ABOVE 219.1\nMM DIAMETER: ---- OF IRON", - "hsn_code": "73043931" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF IORN OR NON-ALLOY STEEL: -- OTHER --- ABOVE 219.1\nMM DIAMETER: ---- OTHER", - "hsn_code": "73043939" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF STAILESS STEEL: -- COLD DRAWN OR COLD-ROLLED\n(COLD-REDUCED)", - "hsn_code": "73044100" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF STAILESS STEEL: -- OTHER", - "hsn_code": "73044900" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- COLD DRAWN OR COLD\nROLLED (COLD-REDUCED) --- UP TO 114.3 MM DIAMETER", - "hsn_code": "73045110" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- COLD DRAWN OR COLD\nROLLED (COLD-REDUCED) --- ABOVE 114.3 MM BUT UP TO 219.1 MM OUTER DIAMETER", - "hsn_code": "73045120" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- COLD DRAWN OR COLD\nROLLED (COLD-REDUCED) --- ABOVE 219.1 MM OUTER DIAMETER", - "hsn_code": "73045130" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- OTHER --- UPTO 114.3 MM\nDIAMETER", - "hsn_code": "73045910" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- OTHER --- ABOVE 114.3 MM\nBUT UP TO 219.1 MM OUTER DIAMETER", - "hsn_code": "73045920" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER, OF CIRCULAR CROSS-SECTION, OF OTHER ALLOY STEEL: -- OTHER --- ABOVE 219.1 MM\nOUTER DIAMETER", - "hsn_code": "73045930" - }, - { - "description": "TUBES, PIPES AND HOLLOW PROFILES, SEAMLESS, OF IRON (OTHER THAN CAST IRON) OR STEEL -\nOTHER", - "hsn_code": "73049000" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : LONGITUDINALLY\nSUBMERGED ARC WELDED : GALVANISED PIPES : OF IRON", - "hsn_code": "73051111" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : LONGITUDINALLY\nSUBMERGED ARC WELDED : GALVANISED PIPES : OTHER", - "hsn_code": "73051119" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : NON-GALVANISED PIPES : OF\nIRON", - "hsn_code": "73051121" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : NON-GALVANISED PIPES :\nOTHER", - "hsn_code": "73051129" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER, LONGITUDINALLY\nWELDED : GALVANISED PIPES : OF IRON", - "hsn_code": "73051211" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER, LONGITUDINALLY\nWELDED : GALVANISED PIPES : OTHER", - "hsn_code": "73051219" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER, LONGITUDINALLY\nWELDED : NON-GALVANISED PIPES : OF IRON", - "hsn_code": "73051221" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER, LONGITUDINALLY\nWELDED : NON-GALVANISED PIPES : OTHER", - "hsn_code": "73051229" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER: GALVANISED PIPES :\nOF IRON", - "hsn_code": "73051911" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER: GALVANISED PIPES :\nOTHER", - "hsn_code": "73051919" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER: NON-GALVANISED\n(BLACK) PIPES : OF IRON", - "hsn_code": "73051921" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINES : OTHER: NON-GALVANISED\n(BLACK) PIPES : OTHER", - "hsn_code": "73051929" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - CASING OF A KIND USED IN DRILLING FOR OIL OR GAS : OF IRON", - "hsn_code": "73052010" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - CASING OF A KIND USED IN DRILLING FOR OIL OR GAS : OTHER", - "hsn_code": "73052090" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER, WELDED : LONGITUDINALLY WELDED: OF IRON", - "hsn_code": "73053110" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER, WELDED : LONGITUDINALLY WELDED: OTHER", - "hsn_code": "73053190" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER, WELDED : OTHER : OF IRON", - "hsn_code": "73053910" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER, WELDED : OTHER : OTHER", - "hsn_code": "73053990" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER : HIGH PRESSURE HYDROELECTRIC CONDUITS OF STEEL", - "hsn_code": "73059010" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER : ERW PRECISION TUBES : OF IRON", - "hsn_code": "73059021" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER : ERW PRECISION TUBES : OTHER", - "hsn_code": "73059029" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER : OTHER : OF IRON", - "hsn_code": "73059091" - }, - { - "description": "OTHER TUBES AND PIPES (FOR EXAMPLE, WELDED, RIVETED OR SIMILARLY CLOSED), HAVING\nCIRCULAR CROSS-SECTIONS, THE EXTERNAL DIAMETER OF WHICH EXCEEDS 406.4 MM, OF IRON\nOR STEEL - OTHER : OTHER : OTHER", - "hsn_code": "73059099" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS\nPIPELINES : GALVANISED PIPES : OF IRON", - "hsn_code": "73061011" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS\nPIPELINES : GALVANISED PIPES : OTHER", - "hsn_code": "73061019" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS\nPIPELINES : NON-GALVANISED PIPES : OF IRON", - "hsn_code": "73061021" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS\nPIPELINES : NON-GALVANISED PIPES : OTHER", - "hsn_code": "73061029" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINE\n-- WELDED, OF STAILESS STEEL", - "hsn_code": "73061100" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINE\n-- OTHER --- GALVANIZED PIPES: ---- OF IRON", - "hsn_code": "73061911" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINE\n-- OTHER --- GALVANIZED PIPES: ---- OTHER", - "hsn_code": "73061919" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINE\n-- OTHER --- NON-GALVANIZED PIPES: ---- OF IRON", - "hsn_code": "73061921" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - LINE PIPE OF A KIND USED FOR OIL OR GAS PIPELINE\n-- OTHER --- NON-GALVANIZED PIPES: ---- OTHER", - "hsn_code": "73061929" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - CASING AND TUBING OF A KIND USED IN DRILLING\nFOR OIL OR GAS : OF IRON", - "hsn_code": "73062010" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - CASING AND TUBING OF A KIND USED IN DRILLING\nFOR OIL OR GAS : OTHER", - "hsn_code": "73062090" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - CASING AND TUBING OF A KIND USED IN DRILLING\nFOR OIL OR GAS -- WELDED, OF STAILESS STEEL", - "hsn_code": "73062100" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - CASING AND TUBING OF A KIND USED IN DRILLING\nFOR OIL OR GAS -- OTHER ---- OF IRON", - "hsn_code": "73062911" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - CASING AND TUBING OF A KIND USED IN DRILLING\nFOR OIL OR GAS -- OTHER ---- OTHER", - "hsn_code": "73062919" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF CIRCULAR CROSS-SECTION, OF\nIRON OR NON-ALLOY STEEL: --- OF IRON", - "hsn_code": "73063010" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF CIRCULAR CROSS-SECTION, OF\nIRON OR NON-ALLOY STEEL: --- OTHER", - "hsn_code": "73063090" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF CIRCULAR CROSS-SECTION, OF\nSTAILESS STEEL", - "hsn_code": "73064000" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF CIRCULAR CROSS-SECTION, OF\nOTHER ALLOY STEEL", - "hsn_code": "73065000" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF NON-CIRCULAR CROSS\nSECTION : OF IRON", - "hsn_code": "73066010" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF NON-CIRCULAR CROSS\nSECTION : OTHER", - "hsn_code": "73066090" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF NON-CIRCULAR CROSS\nSECTION: -- OF SQUARE OR RECTANGULAR CROSS-SECTION", - "hsn_code": "73066100" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER, WELDED, OF NON-CIRCULAR CROSS\nSECTION: -- OF OTHER NON-CIRCULAR CROSS-SECTION", - "hsn_code": "73066900" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER -- ERW PRECISION TUBES: ---- OF IRON", - "hsn_code": "73069011" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER -- ERW PRECISION TUBES: ---- OTHER", - "hsn_code": "73069019" - }, - { - "description": "OTHER TUBES, PIPES AND HOLLOW PROFILES (FOR EXAMPLE, OPEN SEAM OR WELDED, RIVETED\nOR SIMILARLY CLOSED), OF IRON OR STEEL - OTHER -- ERW PRECISION TUBES: --- OTHER", - "hsn_code": "73069090" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nCAST FITTINGS : OF NON-MALLEABLE CAST IRON : SPONGE IRON CAST FITTINGS", - "hsn_code": "73071110" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nCAST FITTINGS : OF NON-MALLEABLE CAST IRON : SG IRON CAST FITTINGS", - "hsn_code": "73071120" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nCAST FITTINGS : OF NON-MALLEABLE CAST IRON : OTHER", - "hsn_code": "73071190" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nCAST FITTINGS : OTHER", - "hsn_code": "73071900" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER, OF STAINLESS STEEL : FLANGES", - "hsn_code": "73072100" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER, OF STAINLESS STEEL : THREADED ELBOWS, BENDS AND SLEEVES", - "hsn_code": "73072200" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER, OF STAINLESS STEEL : BUTT WELDING FITTINGS", - "hsn_code": "73072300" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER, OF STAINLESS STEEL : OTHER", - "hsn_code": "73072900" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : FLANGES : GALVANISED", - "hsn_code": "73079110" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : FLANGES : OTHER", - "hsn_code": "73079190" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : THREADED ELBOWS, BENDS AND SLEEVES : GALVANISED", - "hsn_code": "73079210" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : THREADED ELBOWS, BENDS AND SLEEVES : OTHER", - "hsn_code": "73079290" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : BUTT WELDING FITTINGS : GALVANISED", - "hsn_code": "73079310" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : BUTT WELDING FITTINGS : OTHER", - "hsn_code": "73079390" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : OTHER : GALVANISED", - "hsn_code": "73079910" - }, - { - "description": "TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES), OF IRON OR STEEL -\nOTHER : OTHER : OTHER", - "hsn_code": "73079990" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - BRIDGES AND BRIDGE-SECTIONS", - "hsn_code": "73081000" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - TOWERS AND LATTICE MASTS : TOWERS, WHETHER OR NOT\nASSEMBLED : FOR TRANSMISSION LINE", - "hsn_code": "73082011" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - TOWERS AND LATTICE MASTS : TOWERS, WHETHER OR NOT\nASSEMBLED : OTHER", - "hsn_code": "73082019" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - TOWERS AND LATTICE MASTS : LATTICE MASTS", - "hsn_code": "73082020" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - DOORS, WINDOWS AND THEIR FRAMES AND THRESHOLDS\nFOR DOORS", - "hsn_code": "73083000" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - EQUIPMENT FOR SCAFFOLDING, SHUTTERING, PROPPING OR\nPIT-PROPPING", - "hsn_code": "73084000" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : BEAMS, CHANNELS, PILLARS AND GIRDERS PREPARED\nFOR USE IN STRUCTURES", - "hsn_code": "73089010" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : DROP RODS", - "hsn_code": "73089020" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : HATCHWAY, RAILS AND BULKHEADS FOR SHIPS OR\nBOATS AND PARTS OF HULL", - "hsn_code": "73089030" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : GALVANISED TENSION BARS", - "hsn_code": "73089040" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : STRUCTURES AND SUPER STRUCTURES FOR MINING", - "hsn_code": "73089050" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : TRUSS RODS", - "hsn_code": "73089060" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : TUBULAR STEEL POLES FOR ELECTRIC TRANSMISSION\nAND DISTRIBUTION LINES", - "hsn_code": "73089070" - }, - { - "description": "STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND PARTS OF\nSTRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, LOCK-GATES, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAME-WORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, SHUTTERS, BALUSTRADES, PILLARS AND COLUMNS), OF IRON OR\nSTEEL; PLATES, RODS, ANGLES, SHAPES, SECTIONS, TUBES AND THE LIKE, PREPARED FOR USE IN\nSTRUCTURES, OF IRON OR STEEL - OTHER : OTHER", - "hsn_code": "73089090" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN\nCOMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L,\nWHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY\nMATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY\nEXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH\nMECHANICAL OR THERMAL EQUIPMENT : GALVANIZED IRON TANKS", - "hsn_code": "73090010" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN\nCOMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L,\nWHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY\nMATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY\nEXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH\nMECHANICAL OR THERMAL EQUIPMENT : GALVANIZED IRON BARRELS AND DRUMS", - "hsn_code": "73090020" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN\nCOMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L,\nWHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY\nMATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY\nEXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH\nMECHANICAL OR THERMAL EQUIPMENT : PRESSED STEEL TANKS", - "hsn_code": "73090030" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN\nCOMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L,\nWHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY\nMATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY\nEXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH\nMECHANICAL OR THERMAL EQUIPMENT : PRESSURE VESSELS", - "hsn_code": "73090040" - }, - { - "description": "RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY MATERIAL (OTHER THAN\nCOMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY EXCEEDING 300 L,\nWHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS FOR ANY\nMATERIAL (OTHER THAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY\nEXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT-INSULATED, BUT NOT FITTED WITH\nMECHANICAL OR THERMAL EQUIPMENT : OTHER", - "hsn_code": "73090090" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT- OF A CAPACITY OF 50 L OR MORE : TIN PLATE CONTAINERS", - "hsn_code": "73101010" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT- OF A CAPACITY OF 50 L OR MORE : TRUNKS AND CASES", - "hsn_code": "73101020" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT- OF A CAPACITY OF 50 L OR MORE : OTHER", - "hsn_code": "73101090" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - OF A CAPACITY OF LESS THAN 50 L : CANS WHICH ARE TO BE CLOSED BY\nSOLDERING OR CRIMPING : TIN PLATE CONTAINERS", - "hsn_code": "73102110" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - OF A CAPACITY OF LESS THAN 50 L : CANS WHICH ARE TO BE CLOSED BY\nSOLDERING OR CRIMPING : OTHER", - "hsn_code": "73102190" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - OF A CAPACITY OF LESS THAN 50 L : OTHER : TIN PLATE CONTAINERS", - "hsn_code": "73102910" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - OF A CAPACITY OF LESS THAN 50 L : OTHER : TRUNKS AND CASES", - "hsn_code": "73102920" - }, - { - "description": "TANKS, CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF IRON OR STEEL, OF A CAPACITY NOT EXCEEDING 300\nL, WHETHER OR NOT LINED OR HEATINSULATED, BUT NOT FITTED WITH MECHANICAL OR\nTHERMAL EQUIPMENT - OF A CAPACITY OF LESS THAN 50 L : OTHER : OTHER", - "hsn_code": "73102990" - }, - { - "description": "CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL - CONTAINERS FOR\nCOMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL : LIQUEFIED PETROLEUM GAS (LPG)\nCYLINDER", - "hsn_code": "73110010" - }, - { - "description": "CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL - CONTAINERS FOR\nCOMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL : LOW PRESSURE CYLINDER (WORKING\nPRESSURE UP TO 35.2 KG/SQ.CM OTHER THAN LPG)", - "hsn_code": "73110020" - }, - { - "description": "CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL - CONTAINERS FOR\nCOMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL : HIGH PRESSURE CYLINDER (WORKING\nPRESSURE EXCEEDING 35.2 KG/SQ.CM)", - "hsn_code": "73110030" - }, - { - "description": "CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL - CONTAINERS FOR\nCOMPRESSED OR LIQUEFIED GAS, OF IRON OR STEEL : OTHER", - "hsn_code": "73110090" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL,\nNOT ELECTRICALLY INSULATED - STRANDED WIRE, ROPES AND CABLES : WIRE ROPES, BLACK", - "hsn_code": "73121010" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL,\nNOT ELECTRICALLY INSULATED - STRANDED WIRE, ROPES AND CABLES : WIRE ROPES,\nGALVANISED", - "hsn_code": "73121020" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL,\nNOT ELECTRICALLY INSULATED - STRANDED WIRE, ROPES AND CABLES : STRANDED WIRE", - "hsn_code": "73121030" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL,\nNOT ELECTRICALLY INSULATED - STRANDED WIRE, ROPES AND CABLES : OTHER", - "hsn_code": "73121090" - }, - { - "description": "STRANDED WIRE, ROPES, CABLES, PLAITED BANDS, SLINGS AND THE LIKE, OF IRON OR STEEL,\nNOT ELECTRICALLY INSULATED - OTHER", - "hsn_code": "73129000" - }, - { - "description": "BARBED WIRE OF IRON OR STEEL; TWISTED HOOP OR SINGLE FLAT WIRE, BARBED OR NOT, AND\nLOOSELY TWISTED DOUBLE WIRE, OF A KIND USED FOR FENCING, OF IRON OR STEEL - BARBED\nWIRE OF IRON OR STEEL; TWISTED HOOP OR SINGLE FLAT WIRE, BARBED OR NOT, AND LOOSELY\nTWISTED DOUBLE WIRE, OF A KIND USED FOR FENCING, OF IRON OR STEEL : BARBED WIRE", - "hsn_code": "73130010" - }, - { - "description": "BARBED WIRE OF IRON OR STEEL; TWISTED HOOP OR SINGLE FLAT WIRE, BARBED OR NOT, AND\nLOOSELY TWISTED DOUBLE WIRE, OF A KIND USED FOR FENCING, OF IRON OR STEEL - BARBED\nWIRE OF IRON OR STEEL; TWISTED HOOP OR SINGLE FLAT WIRE, BARBED OR NOT, AND LOOSELY\nTWISTED DOUBLE WIRE, OF A KIND USED FOR FENCING, OF IRON OR STEEL : TWISTED HOOP OR\nSINGLE FLAT WIRE, BARBED OR NOT, AND LOOSELY TWISTED DOUBLE WIRE, OF A KIND USED\nFOR FENCING", - "hsn_code": "73130020" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : ENDLESS BANDS FOR MACHINERY, OF\nSTAINLESS STEEL", - "hsn_code": "73141200" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : OTHER ENDLESS BANDS FOR\nMACHINERY", - "hsn_code": "73141300" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : OTHER WOVEN CLOTH, OF STAINLESS\nSTEEL : WIRE GAUZE (WIRE CLOTH, WIRE MESH)", - "hsn_code": "73141410" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : OTHER WOVEN CLOTH, OF STAINLESS\nSTEEL : OTHER", - "hsn_code": "73141490" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : OTHER : WIRE GAUZE (WIRE CLOTH,\nWIRE MESH)", - "hsn_code": "73141910" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - WOVEN CLOTH : OTHER : OTHER", - "hsn_code": "73141990" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - GRILL, NETTING AND FENCING, WELDED AT THE\nINTERSECTION, OF WIRE WITH A MAXIMUM CROSSSECTIONAL DIMENSION OF 3 MM OR MORE\nAND HAVING A MESH SIZE OF 100 CM2 OR MORE :WIRE NETTING", - "hsn_code": "73142010" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - GRILL, NETTING AND FENCING, WELDED AT THE\nINTERSECTION, OF WIRE WITH A MAXIMUM CROSSSECTIONAL DIMENSION OF 3 MM OR MORE\nAND HAVING A MESH SIZE OF 100 CM2 OR MORE :OTHER", - "hsn_code": "73142090" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER GRILL, NETTING AND FENCING, WELDED AT THE\nINTERSECTION : PLATED OR COATED WITH ZINC", - "hsn_code": "73143100" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER GRILL, NETTING AND FENCING, WELDED AT THE\nINTERSECTION : OTHER", - "hsn_code": "73143900" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : PLATED\nOR COATED WITH ZINC : WIRE NETTING", - "hsn_code": "73144110" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : PLATED\nOR COATED WITH ZINC : OTHER", - "hsn_code": "73144190" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : COATED\nWITH PLASTICS : WIRE NETTING", - "hsn_code": "73144210" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : COATED\nWITH PLASTICS : OTHER", - "hsn_code": "73144290" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : OTHER :\nWIRE NETTING", - "hsn_code": "73144910" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - OTHER CLOTH, GRILL, NETTING AND FENCING : OTHER :\nOTHER", - "hsn_code": "73144990" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL, NETTING AND FENCING, OF IRON OR STEEL WIRE;\nEXPANDED METAL OF IRON OR STEEL - EXPANDED METAL", - "hsn_code": "73145000" - }, - { - "description": "ROLLER CHAIN", - "hsn_code": "73151100" - }, - { - "description": "LIFTING AND HOISTING CHAIN", - "hsn_code": "73151210" - }, - { - "description": "SHIP CHAIN", - "hsn_code": "73151220" - }, - { - "description": "OTHER", - "hsn_code": "73151290" - }, - { - "description": "PARTS", - "hsn_code": "73151900" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL - ARTICULATED LINK CHAIN AND PARTS\nTHEREOF : SKID CHAIN", - "hsn_code": "73152000" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL - OTHER CHAIN : STUD-LINK", - "hsn_code": "73158100" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL - OTHER CHAIN : OTHER, WELDED LINK", - "hsn_code": "73158200" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL - OTHER CHAIN : OTHER", - "hsn_code": "73158900" - }, - { - "description": "CHAIN AND PARTS THEREOF, OF IRON OR STEEL - OTHER PARTS", - "hsn_code": "73159000" - }, - { - "description": "ANCHORS, GRAPNELS AND PARTS THEREOF, OF IRON OR STEEL - ANCHORS, GRAPNELS AND\nPARTS THEREOF, OF IRON OR STEEL : ANCHORS AND GRAPNELS", - "hsn_code": "73160010" - }, - { - "description": "ANCHORS, GRAPNELS AND PARTS THEREOF, OF IRON OR STEEL - ANCHORS, GRAPNELS AND\nPARTS THEREOF, OF IRON OR STEEL : PARTS", - "hsn_code": "73160090" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : NAILS : FOR ANIMAL SHOES", - "hsn_code": "73170011" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : NAILS : FOR FIXING HEEL STRIPS AND TOE\nPLATES", - "hsn_code": "73170012" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : NAILS : WIRE NAILS", - "hsn_code": "73170013" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : NAILS : OTHER", - "hsn_code": "73170019" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : SPIKES : DOG SPIKES", - "hsn_code": "73170021" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : SPIKES : OTHER", - "hsn_code": "73170029" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : TACKS", - "hsn_code": "73170030" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : OTHER : STAPLES OTHER THAN IN STRIPS,\nAND DRAWING PINS", - "hsn_code": "73170091" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING\n8305) AND SIMILAR ARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER\nMATERIAL, BUT EXCLUDING SUCH ARTICLES WITH HEADS OF COPPER - NAILS, TACKS, DRAWING\nPINS, CORRUGATED NAILS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF IRON OR STEEL, WHETHER OR NOT WITH HEADS OF OTHER MATERIAL, BUT\nEXCLUDING SUCH ARTICLES WITH HEADS OF COPPER : OTHER : OTHER", - "hsn_code": "73170099" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : COACH SCREWS : MACHINE SCREWS", - "hsn_code": "73181110" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : COACH SCREWS : OTHER", - "hsn_code": "73181190" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : OTHER WOOD SCREWS", - "hsn_code": "73181200" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : SCREW HOOKS AND SCREW RINGS", - "hsn_code": "73181300" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : SELF-TAPPING SCREWS", - "hsn_code": "73181400" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : OTHER SCREWS AND BOLTS, WHETHER OR NOT WITH THEIR NUTS OR\nWASHERS", - "hsn_code": "73181500" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : NUTS", - "hsn_code": "73181600" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL -\nTHREADED ARTICLES : OTHER", - "hsn_code": "73181900" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : SPRING WASHERS AND OTHER LOCK WASHERS", - "hsn_code": "73182100" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : OTHER WASHERS", - "hsn_code": "73182200" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : RIVETS", - "hsn_code": "73182300" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : COTTERS AND COTTER-PINS", - "hsn_code": "73182400" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : OTHER : CIRCLIPS", - "hsn_code": "73182910" - }, - { - "description": "SCREWS, BOLTS, NUTS, COACH-SCREWS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PINS,\nWASHERS (INCLUDING SPRING WASHERS) AND SIMILAR ARTICLES, OF IRON OR STEEL - NON\nTHREADED ARTICLES : OTHER : OTHER", - "hsn_code": "73182990" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - SEWING, DARNING OR\nEMBROIDERY NEEDLES : HARNESS NEEDLES", - "hsn_code": "73191010" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - SEWING, DARNING OR\nEMBROIDERY NEEDLES : OTHER SEWING NEEDLES", - "hsn_code": "73191020" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - SEWING, DARNING OR\nEMBROIDERY NEEDLES : OTHER", - "hsn_code": "73191090" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAFETY PINS AND OTHER\nPINS --- SAFETY PINS", - "hsn_code": "73194010" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAFETY PINS AND OTHER\nPINS --- OTHER PINS", - "hsn_code": "73194090" - }, - { - "description": "SEWING NEEDLES, KNITTING NEEDLES, BODKINS, CROCHET HOOKS, EMBROIDERY STILETTOS\nAND SIMILAR ARTICLES, FOR USE IN THE HAND, OF IRON OR STEEL; SAFETY PINS AND OTHER\nPINS, OF IRON OR STEEL, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER", - "hsn_code": "73199000" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - LEAF-SPRINGS AND LEAVES THEREFOR :\nLEAF-SPRINGS : FOR MOTOR VEHICLES", - "hsn_code": "73201011" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - LEAF-SPRINGS AND LEAVES THEREFOR :\nLEAF-SPRINGS : FOR RAILWAYS AND TRAMWAYS", - "hsn_code": "73201012" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - LEAF-SPRINGS AND LEAVES THEREFOR :\nLEAF-SPRINGS : OTHER", - "hsn_code": "73201019" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - LEAF-SPRINGS AND LEAVES THEREFOR: --\nLEAF SPRINGS --- LEAVES FOR SPRINGS", - "hsn_code": "73201020" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - HELICAL SPRINGS", - "hsn_code": "73202000" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - OTHER : COIL SPRING FOR RAILWAYS,\nTRAMWAYS", - "hsn_code": "73209010" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - OTHER : SPRING PINS", - "hsn_code": "73209020" - }, - { - "description": "SPRINGS AND LEAVES FOR SPRINGS, OF IRON OR STEEL - OTHER : OTHER", - "hsn_code": "73209090" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR GAS FUEL OR FOR BOTH GAS AND OTHER FUELS :\nCOOKERS AND KITCHEN STOVES", - "hsn_code": "73211110" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR GAS FUEL OR FOR BOTH GAS AND OTHER FUELS :\nOTHER STOVES", - "hsn_code": "73211120" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR GAS FUEL OR FOR BOTH GAS AND OTHER FUELS :\nOTHER", - "hsn_code": "73211190" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR LIQUID FUEL: COOKERS AND KITCHEN STOVES", - "hsn_code": "73211210" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR LIQUID FUEL: OTHER STOVES", - "hsn_code": "73211220" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR LIQUID FUEL: OTHER", - "hsn_code": "73211290" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR SOLID FUEL: COOKERS AND KITCHEN STOVES", - "hsn_code": "73211310" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR SOLID FUEL: OTHER STOVES", - "hsn_code": "73211320" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: FOR SOLID FUEL: OTHER", - "hsn_code": "73211390" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: -- OTHER, INCLUDING APPLIANCES FOR SOLID FUEL ---\nCOOKERS AND KITCHEN STOVES", - "hsn_code": "73211910" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: -- OTHER, INCLUDING APPLIANCES FOR SOLID FUEL ---\nOTHER STOVES AND APPLIANCES", - "hsn_code": "73211990" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - OTHER\nAPPLIANCES: FOR GAS FUEL OR FOR BOTH GAS AND OTHER FUELS", - "hsn_code": "73218100" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - OTHER\nAPPLIANCES: FOR LIQUID FUEL", - "hsn_code": "73218200" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - OTHER\nAPPLIANCES: FOR SOLID FUEL : CLAY TANDOOR (OVEN WITH IRON OR STEEL BODY AND\nEARTHEN GRATES)", - "hsn_code": "73218310" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - OTHER\nAPPLIANCES: FOR SOLID FUEL : OTHER", - "hsn_code": "73218390" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: -- OTHER, INCLUDING APPLIANCES FOR SOLID FUEL --- CLAY\nTANDOOR (OVEN WITH IRON OR STEEL BODY AND EARTHEN GRATES)", - "hsn_code": "73218910" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - COOKING\nAPPLIANCES AND PLATE WARMERS: -- OTHER, INCLUDING APPLIANCES FOR SOLID FUEL ---\nOTHER", - "hsn_code": "73218990" - }, - { - "description": "STOVES, RANGES, GRATES, COOKERS (INCLUDING THOSE WITH SUBSIDIARY BOILERS FOR\nCENTRAL HEATING), BARBECUES, BRAZIERS, GAS-RINGS, PLATE WARMERS AND SIMILAR NON\nELECTRIC DOMESTIC APPLIANCES, AND PARTS THEREOF, OF IRON OR STEEL - PARTS", - "hsn_code": "73219000" - }, - { - "description": "RADIATORS FOR CENTRAL HEATING, NOT ELECTRICALLY HEATED, AND PARTS THEREOF, OF IRON\nOR STEEL; AIR HEATERS AND HOT AIR DISTRIBUTORS (INCLUDING DISTRIBUTORS WHICH CAN\nALSO DISTRIBUTE FRESH OR CONDITIONED AIR), NOT ELECTRICALLY HEATED, INCORPORATING A\nMOTOR-DRIVEN FAN OR BLOWER, AND PARTS THEREOF, OF IRON OR STEEL - RADIATORS AND\nPARTS THEREOF : OF CAST IRON", - "hsn_code": "73221100" - }, - { - "description": "RADIATORS FOR CENTRAL HEATING, NOT ELECTRICALLY HEATED, AND PARTS THEREOF, OF IRON\nOR STEEL; AIR HEATERS AND HOT AIR DISTRIBUTORS (INCLUDING DISTRIBUTORS WHICH CAN\nALSO DISTRIBUTE FRESH OR CONDITIONED AIR), NOT ELECTRICALLY HEATED, INCORPORATING A\nMOTOR-DRIVEN FAN OR BLOWER, AND PARTS THEREOF, OF IRON OR STEEL - RADIATORS AND\nPARTS THEREOF : OTHER", - "hsn_code": "73221900" - }, - { - "description": "RADIATORS FOR CENTRAL HEATING, NOT ELECTRICALLY HEATED, AND PARTS THEREOF, OF IRON\nOR STEEL; AIR HEATERS AND HOT AIR DISTRIBUTORS (INCLUDING DISTRIBUTORS WHICH CAN\nALSO DISTRIBUTE FRESH OR CONDITIONED AIR), NOT ELECTRICALLY HEATED, INCORPORATING A\nMOTOR-DRIVEN FAN OR BLOWER, AND PARTS THEREOF, OF IRON OR STEEL - OTHER : AIR\nHEATERS AND HOT AIR DISTRIBUTORS", - "hsn_code": "73229010" - }, - { - "description": "RADIATORS FOR CENTRAL HEATING, NOT ELECTRICALLY HEATED, AND PARTS THEREOF, OF IRON\nOR STEEL; AIR HEATERS AND HOT AIR DISTRIBUTORS (INCLUDING DISTRIBUTORS WHICH CAN\nALSO DISTRIBUTE FRESH OR CONDITIONED AIR), NOT ELECTRICALLY HEATED, INCORPORATING A\nMOTOR-DRIVEN FAN OR BLOWER, AND PARTS THEREOF, OF IRON OR STEEL - OTHER : PARTS OF\nAIR HEATERS AND HOT AIR DISTRIBUTORS", - "hsn_code": "73229090" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL IRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING\nPADS, GLOVES AND THE LIKE", - "hsn_code": "73231000" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF CAST IRON, NOT ENAMELLED : PANS", - "hsn_code": "73239110" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF CAST IRON, NOT ENAMELLED : OTHER", - "hsn_code": "73239190" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF CAST IRON, ENAMELLED", - "hsn_code": "73239200" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF STAINLESS STEEL : PRESSURE COOKERS", - "hsn_code": "73239310" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF STAINLESS STEEL : OTHER", - "hsn_code": "73239390" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF IRON (OTHER THAN CAST IRON) OR STEEL, ENAMELLED :\nGHAMELLAS", - "hsn_code": "73239410" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF IRON (OTHER THAN CAST IRON) OR STEEL, ENAMELLED :\nUTENSILS", - "hsn_code": "73239420" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OF IRON (OTHER THAN CAST IRON) OR STEEL, ENAMELLED :\nOTHER", - "hsn_code": "73239490" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OTHER : UTENSILS OF GALVANISED IRON", - "hsn_code": "73239910" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OTHER : OTHER UTENSILS", - "hsn_code": "73239920" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF IRON OR STEEL;\nIRON OR STEEL WOOL; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE, OF IRON OR STEEL - OTHER : OTHER : OTHER", - "hsn_code": "73239990" - }, - { - "description": "SANITARY WARE AND PARTS THEREOF, OF IRON OR STEEL - SINKS AND WASH BASINS, OF\nSTAINLESS STEEL", - "hsn_code": "73241000" - }, - { - "description": "SANITARY WARE AND PARTS THEREOF, OF IRON OR STEEL - BATHS : OF CAST IRON, WHETHER OR\nNOT ENAMELLED", - "hsn_code": "73242100" - }, - { - "description": "SANITARY WARE AND PARTS THEREOF, OF IRON OR STEEL - BATHS : OTHER", - "hsn_code": "73242900" - }, - { - "description": "SANITARY WARE AND PARTS THEREOF, OF IRON OR STEEL - OTHER, INCLUDING PARTS", - "hsn_code": "73249000" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OF NON-MALLEABLE CAST IRON", - "hsn_code": "73251000" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : GRINDING BALLS AND SIMILAR ARTICLES FOR\nMILLS", - "hsn_code": "73259100" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OF IRON", - "hsn_code": "73259910" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OF ALLOY STEEL", - "hsn_code": "73259920" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OF STAINLESS STEEL", - "hsn_code": "73259930" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OTHER : RUDDERS FOR SHIPS OR\nBOATS", - "hsn_code": "73259991" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OTHER : DRAIN COVERS", - "hsn_code": "73259992" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OTHER : PLATES AND FRAMES FOR\nSEWAGE WATER OR SIMILAR SYSTEM", - "hsn_code": "73259993" - }, - { - "description": "OTHER CAST ARTICLES OF IRON OR STEEL - OTHER : OTHER : OTHER : OTHER", - "hsn_code": "73259999" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - FORGED OR STAMPED, BUT NOT FURTHER WORKED :\nGRINDING BALLS AND SIMILAR ARTICLES FOR MILLS", - "hsn_code": "73261100" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - FORGED OR STAMPED, BUT NOT FURTHER WORKED :\nOTHER : FOR AUTOMOBILES AND EARTH MOVING EQUIPMENTS", - "hsn_code": "73261910" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - FORGED OR STAMPED, BUT NOT FURTHER WORKED :\nOTHER : OTHER", - "hsn_code": "73261990" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - ARTICLES OF IRON OR STEEL WIRE : TYRE BEAD WIRE RINGS\nINTENDED FOR USE IN THE MANUFACTURE OF TYRES FOR CYCLES AND CYCLERICKSHAWS", - "hsn_code": "73262010" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - ARTICLES OF IRON OR STEEL WIRE : OTHER", - "hsn_code": "73262090" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER :BELT LACING OF STEEL", - "hsn_code": "73269010" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER :BELT FASTENERS FOR MACHINERY BELTS", - "hsn_code": "73269020" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER :DRAIN COVERS, PLATES, AND FRAMES FOR\nSEWAGES, WATER OR SIMILAR SYSTEM", - "hsn_code": "73269030" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER : ENAMELLED IRON WARE", - "hsn_code": "73269040" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER : GRINDING MEDIA BALLS AND CYLPEBS", - "hsn_code": "73269050" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER : MANUFACTURES OF STAINLESS STEEL", - "hsn_code": "73269060" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER :ARTICLES OF CLAD METAL", - "hsn_code": "73269070" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER :PARTS OF SHIPS, FLOATING STRUCTURE AND\nVESSELS (EXCLUDING HULL, PROPELLERS AND PADDLE-WHEELS)", - "hsn_code": "73269080" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER : OTHER : SHANKS", - "hsn_code": "73269091" - }, - { - "description": "OTHER ARTICLES OF IRON OR STEEL - OTHER : OTHER : OTHER", - "hsn_code": "73269099" - }, - { - "description": "COPPER MATTES; CEMENT COPPER (PRECIPITATED COPPER) - COPPER MATTES", - "hsn_code": "74010010" - }, - { - "description": "COPPER MATTES; CEMENT COPPER (PRECIPITATED COPPER) - CEMENT COPPER (PRECIPITATED\nCOPPER)", - "hsn_code": "74010090" - }, - { - "description": "COPPER MATTES; CEMENT COPPER (PRECIPITATED COPPER) - COPPER MATTES", - "hsn_code": "74011000" - }, - { - "description": "COPPER MATTES; CEMENT COPPER (PRECIPITATED COPPER) - CEMENT COPPER (PRECIPITATED\nCOPPER)", - "hsn_code": "74012000" - }, - { - "description": "UNREFINED COPPER; COPPER ANODES FOR ELECTROLYTIC REFINING - UNREFINED COPPER;\nCOPPER ANODES FOR ELECTROLYTIC REFINING : BLISTER COPPER", - "hsn_code": "74020010" - }, - { - "description": "UNREFINED COPPER; COPPER ANODES FOR ELECTROLYTIC REFINING - UNREFINED COPPER;\nCOPPER ANODES FOR ELECTROLYTIC REFINING : OTHER", - "hsn_code": "74020090" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - REFINED COPPER : CATHODES AND\nSECTIONS OF CATHODES", - "hsn_code": "74031100" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - REFINED COPPER : WIRE-BARS", - "hsn_code": "74031200" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - REFINED COPPER : BILLETS", - "hsn_code": "74031300" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - REFINED COPPER : OTHER", - "hsn_code": "74031900" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : COPPER-ZINC BASE\nALLOYS (BRASS)", - "hsn_code": "74032100" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : COPPER-TIN BASE\nALLOYS (BRONZE) : PHOSPHOR BRONZE", - "hsn_code": "74032210" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : COPPER-TIN BASE\nALLOYS (BRONZE) : OTHER", - "hsn_code": "74032290" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : COPPER-NICKEL BASE\nALLOYS( CUPRO-NICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : COPPER\nNICKEL BASE ALLOYS (CUPRO-NICKEL)", - "hsn_code": "74032310" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : COPPER-NICKEL BASE\nALLOYS( CUPRO-NICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : COPPER\nNICKEL-ZINC BASE ALLOYS(NICKEL SILVER)", - "hsn_code": "74032320" - }, - { - "description": "REFINED COPPER AND COPPER ALLOYS, UNWROUGHT - COPPER ALLOYS : OTHER COPPER\nALLOYS (OTHER THAN MASTER ALLOYS OF HEADING 7405)", - "hsn_code": "74032900" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER : EMPTY OR DISCHARGED\nCARTRIDGES OF ALL BORES AND SIZES", - "hsn_code": "74040011" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER :COPPER SCRAP, NAMELY\nTHE FOLLOWING : COPPER WIRE SCRAP COVERED BY ISRI CODE WORDS BARLEY, BERRY AND\nBIRCH; HEAVY COPPER SCRAP COVERED BY ISRI CODE WORD CANDY; UNALLOYED COPPER SCRAP\nCOVERED BY ISRI CODE WORD CLIFF; COPPER WIRE NODULES SCRAP COVERED BY ISRI CODE\nWORDS CLOVE, COBRA AND COCOA; LIGHT COPPER SCRAP COVERED BY ISRI CODE WORD\nDREAM; MUNTZ METAL TUBES COVERED BY ISRI CODE WORD PALMS", - "hsn_code": "74040012" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER :OTHER", - "hsn_code": "74040019" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER ALLOYS : EMPTY OR\nDISCHARGED CARTRIDGES OF ALL BORES AND SIZES", - "hsn_code": "74040021" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER ALLOYS : BRASS SCRAP,\nNAMELY THE FOLLOWING : REFINERY BRASS SCRAP COVERED BY ISRI CODE WORD DRINK;\nCOMPOSITION OF RED BRASS SCRAP COVERED BY ISRI CODE WORD EBONY; RED BRASS\nCOMPOSITION TURNINGS SCRAP COVERED BY ISRI CODE WORD ENERV; GENUINE BABBIT-LINED\nBRASS BUSHINGS SCRAP COVERED BY ISRI CODE WORD ELDER; MACHINERY OR HARD BRASS\nSOLIDS SCRAP COVERED BY ISRI CODE WORD ENGEL; MACHINERY OR HAND BRASS SOLIDS\nSCRAP COVERED BY ISRI CODE WORD ERIN; COCKS AND FAUCETS SCRAP COVERED BY ISRI CODE\nWORD GRAPE; YELLOW BRASS SCRAP COVERED BY ISRI CODE WORD HONEY; YELLOW BRASS\nCASTINGS COVERED BY ISRI CODE WORD IVORY; NEW BRASS CLIPPINGS COVERED BY ISRI CODE\nWORD LABEL; YELLOW BRASS PRIMER COVERED BY ISRI CODE WORD LARK; BRASS PIPE\nCOVERED BY ISRI CODE WORD MELON; YELLOW BRASS ROD TURNINGS COVERED BY ISRI CODE\nWORD NIGHT; NEW YELLOW BRASS ROD ENDS COVERED BY ISRI CODE WORD NOBLE; YELLOW\nBRASS TURNINGS COVERED BY ISRI CODE WORD NORMAD; MIXED UNSWEATED AUTO\nRADIATORS COVERED BY ISRI CODE WORD OCEAN; ADMIRALTY BRASS CONDENSER TUBES\nCOVERED BY ISRI CODE WORD PALES; ALUMINIUM BRASS CONDENSER TUBES COVERED BY ISRI\nCODE WORD PALLU; MANGANESE BRONZE SOLIDS COVERED BY ISRI CODE WORD PARCH", - "hsn_code": "74040022" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP--- OF COPPER ALLOYS ----NICKEL\nSILVER SCRAP NAMELY THE FOLLOWING: MIXED NEW NICKEL SILVER CLIPPINGS COVERED BY ISRI\nCODE WORD 'MAIZE', NEW NICKEL SILVER CLIPPINGS COVERED BY ISRI CODE WORD 'MAJOR',\nNEW SEGREGATED NICKEL SILVER CLIPPINGS COVERED BY ISRI CODE WORD 'MALAR', OLD\nNICKEL SILVER COVERED BY ISRI CODE WORD 'MALIC', NICKEL SILVER CASTINGS COVERED BY ISRI\nCODE WORD 'NAGGY', NICKEL SILVER TURNINGS COVERED BY ISRI CODE WORD 'NIECE'", - "hsn_code": "74040023" - }, - { - "description": "COPPER WASTE AND SCRAP - COPPER WASTE AND SCRAP: OF COPPER ALLOYS : OTHER", - "hsn_code": "74040029" - }, - { - "description": "MASTER ALLOYS OF COPPER", - "hsn_code": "74050000" - }, - { - "description": "COPPER POWDERS AND FLAKES - POWDERS OF NON-LAMELLAR STRUCTURE", - "hsn_code": "74061000" - }, - { - "description": "COPPER POWDERS AND FLAKES - POWDERS OF LAMELLAR STRUCTURE; FLAKES", - "hsn_code": "74062000" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER :ELECTROLYTIC COPPER RODS OR\nBLACK COPPER RODS", - "hsn_code": "74071010" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER :OTHER COPPER RODS", - "hsn_code": "74071020" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER : COPPER BARS (EXCLUDING HOLLOW\nBARS)", - "hsn_code": "74071030" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER :HOLLOW BARS OF COPPER", - "hsn_code": "74071040" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER : PROFILES : HOLLOW PROFILES", - "hsn_code": "74071051" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER : PROFILES : OTHER", - "hsn_code": "74071059" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF REFINED COPPER :OTHER", - "hsn_code": "74071090" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS\n(BRASS) : BARS", - "hsn_code": "74072110" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS\n(BRASS) : RODS", - "hsn_code": "74072120" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS\n(BRASS) : HOLLOW BARS", - "hsn_code": "74072130" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS\n(BRASS) : OTHER", - "hsn_code": "74072190" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS\n(CUPRO-NICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : HOLLOW BARS", - "hsn_code": "74072210" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS\n(CUPRO-NICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : BARS AND RODS", - "hsn_code": "74072220" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OTHER : RODS OF BRONZE AND\nSIMILAR ALLOYS", - "hsn_code": "74072910" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OTHER : PROFILES : HOLLOW", - "hsn_code": "74072921" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OTHER : PROFILES : OTHER", - "hsn_code": "74072929" - }, - { - "description": "COPPER BARS, RODS AND PROFILES - OF COPPER ALLOYS : OTHER : OTHER", - "hsn_code": "74072990" - }, - { - "description": "COPPER WIRE - OF REFINED COPPER : OF WHICH THE MAXIMUM CROSS-SECTIONAL DIMENSION\nEXCEEDS 6 MM : COPPER WELD WIRE", - "hsn_code": "74081110" - }, - { - "description": "COPPER WIRE - OF REFINED COPPER : OF WHICH THE MAXIMUM CROSS-SECTIONAL DIMENSION\nEXCEEDS 6 MM : OTHER", - "hsn_code": "74081190" - }, - { - "description": "COPPER WIRE - OF REFINED COPPER : OTHER : COPPER WELD WIRE", - "hsn_code": "74081910" - }, - { - "description": "COPPER WIRE - OF REFINED COPPER : OTHER : WELDING WIRE", - "hsn_code": "74081920" - }, - { - "description": "COPPER WIRE - OF REFINED COPPER : OTHER : OTHER", - "hsn_code": "74081990" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS (BRASS) : OF WHICH THE\nMAXIMUM CROSS-SECTIONAL DIMENSION EXCEEDS 6 MM", - "hsn_code": "74082110" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS (BRASS) : OTHER", - "hsn_code": "74082190" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS (CUPRO-NICKEL) OR\nCOPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : SILVER PLATED FLATTENED WIRE OF\nCOPPER (LAMETTA)", - "hsn_code": "74082210" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS (CUPRO-NICKEL) OR\nCOPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : OTHER OF WHICH THE MAXIMUM CROSS\nSECTIONAL DIMENSION EXCEEDS 6 MM", - "hsn_code": "74082220" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS (CUPRO-NICKEL) OR\nCOPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER) : OTHER", - "hsn_code": "74082290" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OTHER : WIRE OF BRONZE AND SIMILAR ALLOYS", - "hsn_code": "74082910" - }, - { - "description": "COPPER WIRE - OF COPPER ALLOYS : OTHER : OTHER", - "hsn_code": "74082990" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF REFINED COPPER\nIN COILS", - "hsn_code": "74091100" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF REFINED COPPER\nOTHER", - "hsn_code": "74091900" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF COPPER-ZINC\nBASE ALLOYS (BRASS) : IN COILS", - "hsn_code": "74092100" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF COPPER-ZINC\nBASE ALLOYS (BRASS) : OTHER", - "hsn_code": "74092900" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF COPPER-TIN\nBASE ALLOYS (BRONZE) : IN COILS", - "hsn_code": "74093100" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF COPPER-TIN\nBASE ALLOYS (BRONZE) : OTHER", - "hsn_code": "74093900" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF COPPER-NICKEL\nBASE ALLOYS (CUPRO-NICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER)", - "hsn_code": "74094000" - }, - { - "description": "COPPER PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.15 MM - OF OTHER COPPER\nALLOYS", - "hsn_code": "74099000" - }, - { - "description": "COPPER FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR\nSIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.15 MM - NOT BACKED : OF REFINED COPPER", - "hsn_code": "74101100" - }, - { - "description": "COPPER FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR\nSIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.15 MM - NOT BACKED : OF COPPER ALLOYS", - "hsn_code": "74101200" - }, - { - "description": "COPPER FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR\nSIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.15 MM - BACKED : OF REFINED COPPER", - "hsn_code": "74102100" - }, - { - "description": "COPPER FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR\nSIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.15 MM - BACKED : OF COPPER ALLOYS", - "hsn_code": "74102200" - }, - { - "description": "COPPER TUBES AND PIPES - OF REFINED COPPER", - "hsn_code": "74111000" - }, - { - "description": "COPPER TUBES AND PIPES - OF COPPER ALLOYS : OF COPPER-ZINC BASE ALLOYS (BRASS)", - "hsn_code": "74112100" - }, - { - "description": "COPPER TUBES AND PIPES - OF COPPER ALLOYS : OF COPPER-NICKEL BASE ALLOYS (CUPRO\nNICKEL) OR COPPER-NICKEL-ZINC BASE ALLOYS (NICKEL SILVER)", - "hsn_code": "74112200" - }, - { - "description": "COPPER TUBES AND PIPES - OF COPPER ALLOYS : OTHER", - "hsn_code": "74112900" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) OF REFINED\nCOPPER", - "hsn_code": "74121000" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) - OF COPPER\nALLOYS : BRASS : TUBE-WELL STRAINER", - "hsn_code": "74122011" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) - OF COPPER\nALLOYS : BRASS : HOSE CONNECTORS", - "hsn_code": "74122012" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) - OF COPPER\nALLOYS : BRASS : OTHER", - "hsn_code": "74122019" - }, - { - "description": "COPPER TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) - OF COPPER\nALLOYS : FITTINGS OF BRONZE OR OTHER ALLOYS OF COPPER", - "hsn_code": "74122090" - }, - { - "description": "STRANDED WIRE, CABLES, PLATED BANDS AND THE LIKE, OF COPPER, NOT ELECTRICALLY\nINSULATED", - "hsn_code": "74130000" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL AND NETTING, OF COPPER WIRE; EXPANDED METAL\nOF COPPER - CLOTH : ENDLESS BANDS, FOR MACHINERY", - "hsn_code": "74142010" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL AND NETTING, OF COPPER WIRE; EXPANDED METAL\nOF COPPER - CLOTH : OTHER", - "hsn_code": "74142090" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL AND NETTING, OF COPPER WIRE; EXPANDED METAL\nOF COPPER - OTHER :WIRE GAUZE AND NETTING", - "hsn_code": "74149010" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL AND NETTING, OF COPPER WIRE; EXPANDED METAL\nOF COPPER - OTHER :EXPANDED METAL OF COPPER AND COPPER ALLOYS", - "hsn_code": "74149020" - }, - { - "description": "CLOTH (INCLUDING ENDLESS BANDS), GRILL AND NETTING, OF COPPER WIRE; EXPANDED METAL\nOF COPPER - OTHER :OTHER", - "hsn_code": "74149090" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - NAILS AND TACKS, DRAWING PINS, STAPLES AND SIMILAR\nARTICLES", - "hsn_code": "74151000" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER ARTICLES, NOT THREADED : WASHERS (INCLUDING\nSPRING WASHERS)", - "hsn_code": "74152100" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER ARTICLES, NOT THREADED : OTHER", - "hsn_code": "74152900" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER THREADED ARTICLES : SCREWS; BOLTS AND NUTS :\nSCREWS FOR WOOD", - "hsn_code": "74153310" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER THREADED ARTICLES : SCREWS; BOLTS AND NUTS :\nOTHER", - "hsn_code": "74153390" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER THREADED ARTICLES : OTHER : RIVETS (EXCLUDING\nTUBULAR OR BIFURCATED)", - "hsn_code": "74153910" - }, - { - "description": "NAILS, TACKS, DRAWING PINS, STAPLES (OTHER THAN THOSE OF HEADING 8305) AND SIMILAR\nARTICLES, OF COPPER OR OF IRON OR STEEL WITH HEADS OF COPPER; SCREWS, BOLTS, NUTS,\nSCREW HOOKS, RIVETS, COTTERS, COTTERPINS, WASHERS (INCLUDING SPRING WASHERS) AND\nSIMILAR ARTICLES, OF COPPER - OTHER THREADED ARTICLES : OTHER : OTHER", - "hsn_code": "74153990" - }, - { - "description": "COPPER SPRINGS", - "hsn_code": "74160000" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : STOVE : OIL PRESSURE\nSTOVE", - "hsn_code": "74170011" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : STOVE : OTHER", - "hsn_code": "74170019" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : STOVE : OTHER\nCOOKING AND HEATING APPARATUS", - "hsn_code": "74170020" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : PARTS : BURNERS", - "hsn_code": "74170091" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : PARTS : OTHER PARTS\nOF STOVE", - "hsn_code": "74170092" - }, - { - "description": "COOKING OR HEATING APPARATUS OF A KIND USED FOR DOMESTIC PURPOSES, NON-ELECTRIC,\nAND PARTS THEREOF, OF COPPER - COOKING OR HEATING APPARATUS OF A KIND USED FOR\nDOMESTIC PURPOSES, NON-ELECTRIC, AND PARTS THEREOF, OF COPPER : PARTS : OTHER", - "hsn_code": "74170099" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE", - "hsn_code": "74181010" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---UTENSILS----OF BRASS", - "hsn_code": "74181021" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---UTENSILS----OF COPPER", - "hsn_code": "74181022" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---UTENSILS----OF OTHER COPPER ALLOYS", - "hsn_code": "74181023" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---UTENSILS----E.P.N/\\.S. WARE", - "hsn_code": "74181024" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---OTHER----OF E.P.N.S.", - "hsn_code": "74181031" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ----OTHER----OTHER", - "hsn_code": "74181039" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE ---OTHER----PARTS", - "hsn_code": "74181090" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES\nAND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE\nLIKE : POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE", - "hsn_code": "74181100" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - SANITARY WARE AND PARTS THEREOF : SANITARY\nWARE", - "hsn_code": "74182010" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF COPPER; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF COPPER; SANITARY\nWARE AND PARTS THEREOF, OF COPPER - SANITARY WARE AND PARTS THEREOF : PARTS OF\nSANITARY WARE", - "hsn_code": "74182020" - }, - { - "description": "OTHER ARTICLES OF COPPER - CHAIN AND PARTS THEREOF : CHAIN", - "hsn_code": "74191010" - }, - { - "description": "OTHER ARTICLES OF COPPER - CHAIN AND PARTS THEREOF : PARTS : OF COPPER CHAINS", - "hsn_code": "74191021" - }, - { - "description": "OTHER ARTICLES OF COPPER - CHAIN AND PARTS THEREOF : PARTS : OTHER", - "hsn_code": "74191029" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : CAST, MOULDED, STAMPED OR FORGED, BUT NOT\nFURTHER WORKED", - "hsn_code": "74199100" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : OTHER :RESERVOIRS, TANKS, VATS AND SIMILAR\nCONTAINERS OF A CAPCITY ABOVE 300 L", - "hsn_code": "74199910" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : OTHER :ARTICLES OF COPPER ALLOYS ELECTRO-PLATED\nWITH NICKEL-SILVER", - "hsn_code": "74199920" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : OTHER :ARTICLES OF BRASS", - "hsn_code": "74199930" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : OTHER :COPPER WORKED ARTICLES", - "hsn_code": "74199940" - }, - { - "description": "OTHER ARTICLES OF COPPER - OTHER : OTHER : OTHER ARTICLES OF COPPER", - "hsn_code": "74199990" - }, - { - "description": "NICKEL MATTES, NICKEL OXIDE SINTERS AND OTHER INTERMEDIATE PRODUCTS OF NICKEL\nMETALLURGY - NICKEL MATTES", - "hsn_code": "75011000" - }, - { - "description": "NICKEL MATTES, NICKEL OXIDE SINTERS AND OTHER INTERMEDIATE PRODUCTS OF NICKEL\nMETALLURGY - NICKEL OXIDE SINTERS AND OTHER INTERMEDIATE PRODUCTS OF NICKEL\nMETALLURGY", - "hsn_code": "75012000" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL, NOT ALLOYED", - "hsn_code": "75021000" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL ALLOYS :CUPRO-NICKEL CONTAINING MORE THAN 40% BY\nWEIGHT OF NICKEL", - "hsn_code": "75022010" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL ALLOYS :MONEL METAL INCLUDING `K MONEL", - "hsn_code": "75022020" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL ALLOYS :NICKEL ALLOYS CONTAINING MORE THAN 40% BY\nWEIGHT OF NICKEL", - "hsn_code": "75022030" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL ALLOYS :NICKEL ALLOYS CONTAINING MORE THAN 10 % BUT NOT\nMORE THAN 40 % BY WEIGHT OF NICKEL", - "hsn_code": "75022040" - }, - { - "description": "UNWROUGHT NICKEL - NICKEL ALLOYS :OTHER", - "hsn_code": "75022090" - }, - { - "description": "NICKEL WASTE AND SCRAP - NICKEL WASTE AND SCRAP : NICKEL SCRAP, NAMELY THE\nFOLLOWING : NEW NICKEL SCRAP COVERED BY ISRI CODE WORD `AROMA; OLD NICKEL SCRAP\nCOVERED BY ISRI CODE WORD `BURLY; NEW CUPRO NICKEL CLIPS AND SOLIDS COVERED BY ISRI\nCODE WORD `DANDY; CUPRO NICKEL SOLIDS COVERED BY ISRI CODE WORD `DAUNT; SOLDERED\nCUPRO-NICKEL SOLIDS COVERED BY ISRI CODE WORD `DELTA; CUPRO NICKEL SPINNINGS,\nTURNINGS, BORINGS COVERED BY ISRI CODE WORD `DECOY; MISCELLANEOUS NICKEL-COPPER\nAND NICKEL-COPPER IRON COVERED BY ISRI CODE WORD `DEPTH; MIXED NEW NICKEL SILVER\nCLIPPINGS COVERED BY ISRI CODE WORD `MAIZE; MIXED NEW NICKEL SILVER CLIPPINGS\nCOVERED BY ISRI CODE WORD `MAJOR; NEW SEGREGATED NICKEL SILVER CLIPPINGS COVERED\nBY ISRI CODE WORD `MALAR; OLD NICKEL SILVER COVERED BY ISRI CODE WORD `MALIC; NICKEL\nSILVER CASTINGS COVERED BY ISRI CODE WORD `NAGGY; NICKEL SILVER TURNINGS COVERED BY\nISRI CODE WORD `NIECE; NEW R-MONEL CLIPPINGS SOLIDS COVERED BY ISRI CODE WORD\n`HITCH; NEW MIXED MONEL SOLIDS AND CLIPPINGS COVERED BY ISRI CODE WORD `HOUSE; OLD\nMONEL SHEET AND SOLIDS COVERED BY ISRI CODE WORD `IDEAL; K-MONEL SOLIDS COVERED BY\nISRI CODE WORD `INDIAN; SOLDERED MONEL SHEET AND SOLIDS COVERED BY ISRI CODE WORD\n`JUNTO; MONEL CASTINGS COVERED BY ISRI CODE`LEMON; MONEL TURNINGS COVERED BY ISRI\nCODE WORD `LEMUR; NICKEL SCRAP OBTAINED BY BREAKING UP OF SHIPS, BOATS AND OTHER\nFLOATING STRUCTURES", - "hsn_code": "75030010" - }, - { - "description": "NICKEL WASTE AND SCRAP - NICKEL WASTE AND SCRAP : OTHER", - "hsn_code": "75030090" - }, - { - "description": "NICKEL POWDERS AND FLAKES", - "hsn_code": "75040000" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - BARS, RODS AND PROFILES : OF NICKEL, NOT\nALLOYED : HOLLOW BARS", - "hsn_code": "75051110" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - BARS, RODS AND PROFILES : OF NICKEL, NOT\nALLOYED : OTHER BARS; RODS AND PROFILES", - "hsn_code": "75051120" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - BARS, RODS AND PROFILES : OF NICKEL ALLOYS :\nHOLLOW BARS", - "hsn_code": "75051210" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - BARS, RODS AND PROFILES : OF NICKEL ALLOYS :\nOTHER BARS; RODS AND PROFILES", - "hsn_code": "75051220" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - WIRE : OF NICKEL, NOT ALLOYED", - "hsn_code": "75052100" - }, - { - "description": "NICKEL BARS, RODS, PROFILES AND WIRE - WIRE : OF NICKEL ALLOYS", - "hsn_code": "75052200" - }, - { - "description": "NICKEL PLATES, SHEETS, STRIP AND FOIL - OF NICKEL, NOT ALLOYED", - "hsn_code": "75061000" - }, - { - "description": "NICKEL PLATES, SHEETS, STRIP AND FOIL - OF NICKEL ALLOYS", - "hsn_code": "75062000" - }, - { - "description": "NICKEL TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS,\nSLEEVES) - TUBES AND PIPES : OF NICKEL, NOT ALLOYED", - "hsn_code": "75071100" - }, - { - "description": "NICKEL TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS,\nSLEEVES) - TUBES AND PIPES : OF NICKEL ALLOYS", - "hsn_code": "75071200" - }, - { - "description": "NICKEL TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS,\nSLEEVES) - TUBE OR PIPE FITTINGS", - "hsn_code": "75072000" - }, - { - "description": "OTHER ARTICLES OF NICKEL - CLOTH, GRILL AND NETTING, OF NICKEL WIRE", - "hsn_code": "75081000" - }, - { - "description": "OTHER ARTICLES OF NICKEL - OTHER : ELECTROPLATING ANODES OF NICKEL", - "hsn_code": "75089010" - }, - { - "description": "OTHER ARTICLES OF NICKEL - OTHER : BLANKS ORDINARILY USED FOR MANUFACTURING TUBES\nAND PIPES OF NICKEL", - "hsn_code": "75089020" - }, - { - "description": "OTHER ARTICLES OF NICKEL - OTHER : NICKEL SCREEN", - "hsn_code": "75089030" - }, - { - "description": "OTHER ARTICLES OF NICKEL - OTHER : OTHER ARTICLES OF NICKEL AND NICKEL ALLOY", - "hsn_code": "75089090" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM, NOT ALLOYED : INGOTS", - "hsn_code": "76011010" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM, NOT ALLOYED : BILLETS", - "hsn_code": "76011020" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM, NOT ALLOYED : WIRE BARS", - "hsn_code": "76011030" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM, NOT ALLOYED : WIRE RODS", - "hsn_code": "76011040" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM, NOT ALLOYED : OTHER", - "hsn_code": "76011090" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM ALLOYS : INGOTS", - "hsn_code": "76012010" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM ALLOYS : BILLETS", - "hsn_code": "76012020" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM ALLOYS : WIRE BARS", - "hsn_code": "76012030" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM ALLOYS : WIRE RODS", - "hsn_code": "76012040" - }, - { - "description": "UNWROUGHT ALUMINIUM - ALUMINIUM ALLOYS : OTHER", - "hsn_code": "76012090" - }, - { - "description": "ALUMINIUM WASTE AND SCRAP - ALUMINIUM WASTE AND SCRAP : ALUMINIUM SCRAP,\nNAMELY THE FOLLOWING : CLEAN ALUMINIUM LITHOGRAPHIC SHEETS (ISRI) NEW, CLEAN\nALUMINIUM LITHOGRAPHIC SHEETS (ISRI)MIXED LOW COPPER ALUMINIUM CLIPPINGS AND\nSOLIDS (ISRI) CLEAN MIXED OLD ALLOY SHEET ALUMINIUM (ISRI) NEW ALUMINIUM CAN STOCK\n(ISRI) OLD CAN STOCK (ISRI) SHREDDED ALUMINIUM USED BEVERAGES CAN (U) SCRAP (ISRI)\nDENSIFIED ALUMINIUM USED BEVERAGES CAN (UBC) SCRAP (ISRI)BALED ALUMINIUM USED\nBEVERAGE CAN (UBC) SCRAP (ISRI) BRIQUETTED ALUMINIUM USED BEVERAGE CAN (UBC) SCRAP\n(ISRI) PAINTED SIDING (ISRI) COATED SCRAP (ISRI) ALUMINIUM SCRAP RADIATORS (ISRI) E.C.\nALUMINIUM NODULES (ISRI) NEW PURE ALUMINIUM WIRE AND CABLE (ISRI) NEW MIXED\nALUMINIUM WIRE AND CABLE (ISRI) OLD PURE ALUMINIUM WIRE AND CABLE (ISRI) OLD MIXED\nALUMINIUM WIRE AND CABLE (ISRI) ALUMINIUM PISTONS (ISRI) SEGREGATED ALUMINIUM\nBORINGS AND TURNINGS (ISRI) MIXED ALUMINIUM CASTINGS (ISRI) MIXED ALUMINIUM\nCASTINGS (ISRI) WRECKED AIRPLANE SHEET ALUMINIUM (ISRI) NEW ALUMINIUM FOIL (ISRI)\nOLD ALUMINIUM FOIL (ISRI) ALUMINIUM GRINDINGS (ISRI) SWEATED ALUMINIUM (ISRI)\nSEGREGATED NEW ALUMINIUM ALLOY CLIPPINGS AND SOLIDS (ISRI) MIXED NEW ALUMINIUM\nALLOY CLIPPINGS AND SOLIDS (ISRI) SEGREGATED NEW ALUMINIUM CASTINGS, FORGINGS AND\nEXTRUSIONS (ISRI) ALUMINIUM AUTO CASTINGS (ISRI) INSULATED ALUMINIUM WIRE SCRAP\n(ISRI) ALUMINIUM AIRPLANE CASTINGS (ISRI) FRAGMENTIZER ALUMINIUM SCRAP", - "hsn_code": "76020010" - }, - { - "description": "ALUMINIUM WASTE AND SCRAP - ALUMINIUM WASTE AND SCRAP : OTHER WASTE AND SCRAP", - "hsn_code": "76020090" - }, - { - "description": "ALUMINIUM POWDERS AND FLAKES - POWDERS OF NON-LAMELLAR STRUCTURE : ALUMINIUM\nPOWDER FOR THERMIT PROCESS", - "hsn_code": "76031010" - }, - { - "description": "ALUMINIUM POWDERS AND FLAKES - POWDERS OF NON-LAMELLAR STRUCTURE : OTHER", - "hsn_code": "76031090" - }, - { - "description": "ALUMINIUM POWDERS AND FLAKES - POWDERS OF LAMELLAR STRUCTURE; FLAKES", - "hsn_code": "76032000" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM, NOT ALLOYED : WIRE RODS", - "hsn_code": "76041010" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM, NOT ALLOYED : BARS AND RODS,\nOTHER THAN WIRE RODS", - "hsn_code": "76041020" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM, NOT ALLOYED : PROFILES : HOLLOW", - "hsn_code": "76041031" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM, NOT ALLOYED : PROFILES : OTHER", - "hsn_code": "76041039" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM ALLOYS : HOLLOW PROFILES", - "hsn_code": "76042100" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM ALLOYS : OTHER : HARD DRAWN BARE\nALUMINIUM CONDUCTORS STEEL RE-INFORCED (A.C.S.R.)", - "hsn_code": "76042910" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM ALLOYS : OTHER : WIRE RODS", - "hsn_code": "76042920" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM ALLOYS : OTHER : BARS AND RODS,\nOTHER THAN WIRE RODS", - "hsn_code": "76042930" - }, - { - "description": "ALUMINIUM BARS, RODS AND PROFILES - OF ALUMINIUM ALLOYS : OTHER : OTHER", - "hsn_code": "76042990" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM, NOT ALLOYED : OF WHICH THE MAXIMUM CROSS\nSECTIONAL DIMENSION EXCEEDS 7 MM", - "hsn_code": "76051100" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM, NOT ALLOYED : OTHER : OF WHICH THE MAXIMUM CROSS\nSECTIONAL DIMENSION EXCEEDS 6 MM BUT DOES NOT EXCEED 7 MM", - "hsn_code": "76051910" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM, NOT ALLOYED : OTHER : OTHER : HARD DRAWN BARE\nSOLID", - "hsn_code": "76051991" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM, NOT ALLOYED : OTHER : OTHER : OTHER", - "hsn_code": "76051999" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM ALLOYS : OF WHICH THE MAXIMUM CROSS-SECTIONAL\nDIMENSION EXCEEDS 7 MM", - "hsn_code": "76052100" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM ALLOYS : OTHER : OF WHICH THE MAXIMUM CROSS\nSECTIONAL DIMENSION EXCEEDS 6 MM BUT DOES NOT EXCEED 7 MM", - "hsn_code": "76052910" - }, - { - "description": "ALUMINIUM WIRE - OF ALUMINIUM ALLOYS : OTHER : OTHER", - "hsn_code": "76052990" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - RECTANGULAR\n(INCLUDING SQUARE) : OF ALUMINIUM, NOT ALLOYED : ELECTROLYTIC PLATES OR SHEETS", - "hsn_code": "76061110" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - RECTANGULAR\n(INCLUDING SQUARE) : OF ALUMINIUM, NOT ALLOYED : OTHER", - "hsn_code": "76061190" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - RECTANGULAR\n(INCLUDING SQUARE) : OF ALUMINIUM ALLOYS", - "hsn_code": "76061200" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - OTHER : OF\nALUMINIUM, NOT ALLOYED : CIRCLES", - "hsn_code": "76069110" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - OTHER : OF\nALUMINIUM, NOT ALLOYED : ELECTROLYTIC PLATES OR SHEETS", - "hsn_code": "76069120" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - OTHER : OF\nALUMINIUM, NOT ALLOYED : OTHER", - "hsn_code": "76069190" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - OTHER : OF\nALUMINIUM ALLOYS : CIRCLES", - "hsn_code": "76069210" - }, - { - "description": "ALUMINIUM PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - OTHER : OF\nALUMINIUM ALLOYS : OTHER", - "hsn_code": "76069290" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : ROLLED BUT NOT FURTHER WORKED : ORDINARILY USED\nFOR TEA CHEST LINING", - "hsn_code": "76071110" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : ROLLED BUT NOT FURTHER WORKED : OTHER", - "hsn_code": "76071190" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : ORDINARILY USED FOR TEA CHEST LINING", - "hsn_code": "76071910" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : PLAIN", - "hsn_code": "76071991" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : EMBOSSED", - "hsn_code": "76071992" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : PERFORATED OR CUT-TO-SHAPE", - "hsn_code": "76071993" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : COATED", - "hsn_code": "76071994" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : PRINTED", - "hsn_code": "76071995" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - NOT BACKED : OTHER : OTHER : OTHER", - "hsn_code": "76071999" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - BACKED : ORDINARILY USED FOR TEA CHEST LINING", - "hsn_code": "76072010" - }, - { - "description": "ALUMINIUM FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD,\nPLASTICS OR SIMILAR BACKING MATERIALS) OF A THICKNESS (EXCLUDING ANY BACKING) NOT\nEXCEEDING 0.2 MM - BACKED : OTHER", - "hsn_code": "76072090" - }, - { - "description": "ALUMINIUM TUBES AND PIPE - OF ALUMINIUM, NOT ALLOYED", - "hsn_code": "76081000" - }, - { - "description": "ALUMINIUM TUBES AND PIPE - OF ALUMINIUM ALLOYS", - "hsn_code": "76082000" - }, - { - "description": "ALUMINIUM TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)", - "hsn_code": "76090000" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND\nPARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS,\nPROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES - DOORS, WINDOWS AND\nTHEIR FRAMES AND THRESHOLDS FOR DOORS", - "hsn_code": "76101000" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND\nPARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS,\nPROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES - OTHER : STRUCTURES", - "hsn_code": "76109010" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND\nPARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS,\nPROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES - OTHER : PARTS OF\nSTRUCTURES, NOT ELSEWHERE SPECIFIED", - "hsn_code": "76109020" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND\nPARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS,\nPROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES - OTHER : ALUMINIUM\nPLATES , RODS, PROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURE", - "hsn_code": "76109030" - }, - { - "description": "ALUMINIUM STRUCTURES (EXCLUDING PREFABRICATED BUILDINGS OF HEADING 9406) AND\nPARTS OF STRUCTURES (FOR EXAMPLE, BRIDGES AND BRIDGE-SECTIONS, TOWERS, LATTICE\nMASTS, ROOFS, ROOFING FRAMEWORKS, DOORS AND WINDOWS AND THEIR FRAMES AND\nTHRESHOLDS FOR DOORS, BALUSTRADES, PILLARS AND COLUMNS); ALUMINIUM PLATES, RODS,\nPROFILES, TUBES AND THE LIKE, PREPARED FOR USE IN STRUCTURES - OTHER : OTHER", - "hsn_code": "76109090" - }, - { - "description": "ALUMINIUM RESERVOIRS, TANKS, VATS AND SIMILAR CONTAINERS, FOR ANY MATERIAL (OTHER\nTHAN COMPRESSED OR LIQUEFIED GAS), OF A CAPACITY EXCEEDING 300 L, WHETHER OR NOT\nLINED OR HEAT-INSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT", - "hsn_code": "76110000" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - COLLAPSIBLE\nTUBULAR CONTAINERS : PLAIN", - "hsn_code": "76121010" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - COLLAPSIBLE\nTUBULAR CONTAINERS : LACQUERED", - "hsn_code": "76121020" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - COLLAPSIBLE\nTUBULAR CONTAINERS : PRINTED", - "hsn_code": "76121030" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - COLLAPSIBLE\nTUBULAR CONTAINERS : OTHER", - "hsn_code": "76121090" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - OTHER : PLAIN", - "hsn_code": "76129010" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - OTHER :\nLACQUERED", - "hsn_code": "76129020" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - OTHER : PRINTED", - "hsn_code": "76129030" - }, - { - "description": "ALUMINIUM CASKS, DRUMS, CANS, BOXES AND SIMILAR CONTAINERS (INCLUDING RIGID OR\nCOLLAPSIBLE TUBULAR CONTAINERS), FOR ANY MATERIAL (OTHER THAN COMPRESSED OR\nLIQUEFIED GAS), OF A CAPACITY NOT EXCEEDING 300 L, WHETHER OR NOT LINED OR HEAT\nINSULATED, BUT NOT FITTED WITH MECHANICAL OR THERMAL EQUIPMENT - OTHER : OTHER", - "hsn_code": "76129090" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : LOW PRESSURE CYLINDERS : PLAIN", - "hsn_code": "76130011" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : LOW PRESSURE CYLINDERS : LACQUERED", - "hsn_code": "76130012" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : LOW PRESSURE CYLINDERS : PRINTED", - "hsn_code": "76130013" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : LOW PRESSURE CYLINDERS : OTHER", - "hsn_code": "76130019" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : HIGH PRESSURE CYLINDERS : PLAIN", - "hsn_code": "76130021" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : HIGH PRESSURE CYLINDERS : LACQUERED", - "hsn_code": "76130022" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : HIGH PRESSURE CYLINDERS : PRINTED", - "hsn_code": "76130023" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : HIGH PRESSURE CYLINDERS : OTHER", - "hsn_code": "76130029" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : OTHER : PLAIN", - "hsn_code": "76130091" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : OTHER : LACQUERED", - "hsn_code": "76130092" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : OTHER : PRINTED", - "hsn_code": "76130093" - }, - { - "description": "ALUMINIUM CONTAINERS FOR COMPRESSED OR LIQUEFIED GAS - ALUMINIUM CONTAINERS\nFOR COMPRESSED OR LIQUEFIED GAS : OTHER : OTHER", - "hsn_code": "76130099" - }, - { - "description": "STRANDED WIRE, CABLES, PLAITED BANDS AND THE LIKE, OF ALUMINIUM, NOT ELECTRICALLY\nINSULATED - WITH STEEL CORE", - "hsn_code": "76141000" - }, - { - "description": "STRANDED WIRE, CABLES, PLAITED BANDS AND THE LIKE, OF ALUMINIUM, NOT ELECTRICALLY\nINSULATED - OTHER", - "hsn_code": "76149000" - }, - { - "description": "PRESSURE COOKERS", - "hsn_code": "76151011" - }, - { - "description": "SOLAR COLLECTORS", - "hsn_code": "76151012" - }, - { - "description": "NON-STICK", - "hsn_code": "76151021" - }, - { - "description": "OTHER", - "hsn_code": "76151029" - }, - { - "description": "OTHER TABLE,KITCHEN OR HOUSEHOLD ARTICLES", - "hsn_code": "76151030" - }, - { - "description": "POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE", - "hsn_code": "76151040" - }, - { - "description": "PARTS", - "hsn_code": "76151090" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF ALUMINIUM; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF ALUMINIUM;\nSANITARY WARE AND PARTS THEREOF, OF ALUMINIUM - TABLE, KITCHEN OR OTHER\nHOUSEHOLD ARTICLES AND PARTS THEREOF; POT SCOURERS AND SCOURING OR POLISHING\nPADS, GLOVES AND THE LIKE : POT SCOURERS AND SCOURING OR POLISHING PADS, GLOVES\nAND THE LIKE", - "hsn_code": "76151100" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF ALUMINIUM; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF ALUMINIUM;\nSANITARY WARE AND PARTS THEREOF, OF ALUMINIUM- SANITARY WARE AND PARTS THEREOF :\nSANITARY WARE OF ALUMINIUM AND ALUMINIUM ALLOYS FOR INDOOR USE", - "hsn_code": "76152010" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF ALUMINIUM; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF ALUMINIUM;\nSANITARY WARE AND PARTS THEREOF, OF ALUMINIUM- SANITARY WARE AND PARTS THEREOF :\nPARTS", - "hsn_code": "76152020" - }, - { - "description": "TABLE, KITCHEN OR OTHER HOUSEHOLD ARTICLES AND PARTS THEREOF, OF ALUMINIUM; POT\nSCOURERS AND SCOURING OR POLISHING PADS, GLOVES AND THE LIKE, OF ALUMINIUM;\nSANITARY WARE AND PARTS THEREOF, OF ALUMINIUM- SANITARY WARE AND PARTS THEREOF :\nOTHER", - "hsn_code": "76152090" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - NAILS, TACKS, STAPLES (OTHER THAN THOSE OF HEADING\n8305), SCREWS, BOLTS, NUTS, SCREW HOOKS, RIVETS, COTTERS, COTTER-PMILAR ARTICLES", - "hsn_code": "76161000" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - OTHER : CLOTH, GRILL, NETTING AND FENCING, OF\nALUMINIUM WIRE", - "hsn_code": "76169100" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - OTHER : OTHER : EXPANDED METAL OF ALUMINIUM AND\nALUMINIUM ALLOYS", - "hsn_code": "76169910" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - OTHER : OTHER :CHAINS", - "hsn_code": "76169920" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - OTHER : OTHER : BOBBINS", - "hsn_code": "76169930" - }, - { - "description": "OTHER ARTICLES OF ALUMINIUM - OTHER : OTHER : OTHER", - "hsn_code": "76169990" - }, - { - "description": "UNWROUGHT LEAD : REFINED LEAD", - "hsn_code": "78011000" - }, - { - "description": "UNWROUGHT LEAD - OTHER: CONTAINING BY WEIGHT ANTIMONY AS THE PRINCIPAL OTHER\nELEMENT", - "hsn_code": "78019100" - }, - { - "description": "UNWROUGHT LEAD - OTHER: OTHER: PIG LEAD", - "hsn_code": "78019910" - }, - { - "description": "UNWROUGHT LEAD - OTHER: OTHER: UNREFINED LEAD", - "hsn_code": "78019920" - }, - { - "description": "UNWROUGHT LEAD - OTHER: OTHER: UNREFINED LEAD ALLOYS", - "hsn_code": "78019930" - }, - { - "description": "UNWROUGHT LEAD - OTHER: OTHER: OTHER", - "hsn_code": "78019990" - }, - { - "description": "LEAD WASTE AND SCRAP - LEAD WASTE AND SCRAP: LEAD SCRAP, NAMELY THE FOLLOWING:\nSCRAP LEAD-SOFT COVERED BY ISRI CODE WORD `RACKS; MIXED HARD OR SOFT SCRAP LEAD\nCOVERED BY ISRI CODE WORD `RADIO; LEAD COVERED COPPER CABLE COVERED BY ISRI CODE\nWORD `RELAY; WHEEL WEIGHTS COVERED BY ISRI CODE WORD `ROPES; MIXED COMMON\nBABBIT COVERED BY ISRI CODE WORD `ROSES", - "hsn_code": "78020010" - }, - { - "description": "LEAD WASTE AND SCRAP - LEAD WASTE AND SCRAP: OTHER", - "hsn_code": "78020090" - }, - { - "description": "LEAD BARS, RODS, PROFILES AND WIRE - LEAD BARS, RODS, PROFILES AND WIRE: BARS AND\nRODS: HOLLOW BARS", - "hsn_code": "78030011" - }, - { - "description": "LEAD BARS, RODS, PROFILES AND WIRE - LEAD BARS, RODS, PROFILES AND WIRE: BARS AND\nRODS: OTHER", - "hsn_code": "78030019" - }, - { - "description": "LEAD BARS, RODS, PROFILES AND WIRE - LEAD BARS, RODS, PROFILES AND WIRE: PROFILES:\nHOLLOW", - "hsn_code": "78030021" - }, - { - "description": "LEAD BARS, RODS, PROFILES AND WIRE - LEAD BARS, RODS, PROFILES AND WIRE: PROFILES:\nOTHER", - "hsn_code": "78030029" - }, - { - "description": "LEAD BARS, RODS, PROFILES AND WIRE - LEAD BARS, RODS, PROFILES AND WIRE: WIRE", - "hsn_code": "78030030" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES - PLATES, SHEETS, STRIP\nAND FOIL: SHEETS, STRIP AND FOIL OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.2 MM: SHEETS AND STRIP", - "hsn_code": "78041110" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES - PLATES, SHEETS, STRIP\nAND FOIL: SHEETS, STRIP AND FOIL OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING\n0.2 MM: FOIL", - "hsn_code": "78041120" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES - PLATES, SHEETS, STRIP\nAND FOIL: OTHER: PLATES", - "hsn_code": "78041910" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES - PLATES, SHEETS, STRIP\nAND FOIL: OTHER: OTHER", - "hsn_code": "78041990" - }, - { - "description": "LEAD PLATES, SHEETS, STRIP AND FOIL; LEAD POWDERS AND FLAKES : POWDERS AND FLAKES", - "hsn_code": "78042000" - }, - { - "description": "LEAD TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLING, ELBOWS, SLEEVES) -\nLEAD TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLING, ELBOWS, SLEEVES):\nTUBES AND PIPES", - "hsn_code": "78050010" - }, - { - "description": "LEAD TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLING, ELBOWS, SLEEVES) -\nLEAD TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLING, ELBOWS, SLEEVES):\nTUBE OR PIPE FITTINGS", - "hsn_code": "78050020" - }, - { - "description": "OTHER ARTICLES OF LEAD - OTHER ARTICLES OF LEAD : SANITARY FIXTURES", - "hsn_code": "78060010" - }, - { - "description": "OTHER ARTICLES OF LEAD - OTHER ARTICLES OF LEAD : INDIAN LEAD SEALS", - "hsn_code": "78060020" - }, - { - "description": "OTHER ARTICLES OF LEAD - OTHER ARTICLES OF LEAD : BLANKS", - "hsn_code": "78060030" - }, - { - "description": "OTHER ARTICLES OF LEAD - OTHER ARTICLES OF LEAD : OTHER", - "hsn_code": "78060090" - }, - { - "description": "UNWROUGHT ZINC - ZINC, NOT ALLOYED : CONTAINING BY WEIGHT 99.99% OR MORE OF ZINC", - "hsn_code": "79011100" - }, - { - "description": "UNWROUGHT ZINC - ZINC, NOT ALLOYED : CONTAINING BY WEIGHT LESS THAN 99.99% OF ZINC", - "hsn_code": "79011200" - }, - { - "description": "UNWROUGHT ZINC - ZINC ALLOYS :MOZAK OR ALLOYS OF ZINC AND ALUMINIUM CONTAINING\nNOT LESS THAN 94% BY WEIGHT OF ZINC", - "hsn_code": "79012010" - }, - { - "description": "UNWROUGHT ZINC - ZINC ALLOYS : OTHER", - "hsn_code": "79012090" - }, - { - "description": "ZINC WASTE AND SCRAP - ZINC WASTE AND SCRAP : ZINC SCRAP, NAMELY THE FOLLOWING :\nOLD ZINC DIE CAST SCRAP COVERED BY ISRI CODE WORD `SAVES; NEW ZINC DIE CAST SCRAP\nCOVERED BY ISRI CODE WORD `SCABS; NEW PLATED ZINC DIE CAST SCRAP COVERED BY ISRI\nCODE WORD `SCOPE; ZINC DIE CAST AUTOMOTIVE GRILLS COVERED BY ISRI CODE WORD\n`SCOOT; OLD SCRAP ZINC (ISRI) `SCORE; NEW ZINC CLIPPINGS (ISRI) `SCREEN; ZINC DIE CAST\nSLABS OR PIGS COVERED BY ISRI CODE WORD `SCULL; CRUSHED CLEAN SORTED FRAGMENTIZERS\nDIE CAST SCRAP, AS PRODUCED FROM AUTOMOBILE FRAGMENTIZERS (ISRI) `SCRIBE; HOT DIP\nGALVANIZERS SLAB ZINC DROSS (BATCH PROCESS) (ISRI) `SCRUB (MINIMUM 92% ZINC) FREE OF\nSKIMMINGS; CONTINUOUS LINE GALVANIZING SLAB ZINC TOP DROSS (ISRI) `SEAL (MINIMUM\n90% ZINC) FREE OF SKIMMINGS; CONTINUOUS LINE GALVANIZING SLAB ZINC BOTTOM DROSS\n(ISRI) `SEAM (MINIMUM 92% ZINC) FREE OF SKIMMINGS; PRIME ZINC DIE CAST (ISRI) `SHELF\n(85% ZINC) FREE FROM CORROSION OR OXIDATION", - "hsn_code": "79020010" - }, - { - "description": "ZINC WASTE AND SCRAP - ZINC WASTE AND SCRAP :OTHER", - "hsn_code": "79020090" - }, - { - "description": "ZINC DUST, POWDERS AND FLAKES : ZINC DUST", - "hsn_code": "79031000" - }, - { - "description": "ZINC DUST, POWDERS AND FLAKES : OTHER", - "hsn_code": "79039000" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : BARS AND\nRODS :HOLLOW BARS", - "hsn_code": "79040011" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : BARS AND\nRODS :RODS, INCLUDING WIRE RODS", - "hsn_code": "79040012" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : BARS AND\nRODS :OTHER", - "hsn_code": "79040019" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : PROFILES :\nHOLLOW", - "hsn_code": "79040021" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : PROFILES :\nANGLES, SHAPES AND SECTIONS", - "hsn_code": "79040022" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : PROFILES :\nOTHER", - "hsn_code": "79040029" - }, - { - "description": "ZINC BARS, RODS, PROFILES AND WIRE - ZINC BARS, RODS, PROFILES AND WIRE : WIRE", - "hsn_code": "79040030" - }, - { - "description": "ZINC PLATES, SHEETS, STRIP AND FOIL - ZINC PLATES, SHEETS, STRIP AND FOIL :CALOTS", - "hsn_code": "79050010" - }, - { - "description": "ZINC PLATES, SHEETS, STRIP AND FOIL - ZINC PLATES, SHEETS, STRIP AND FOIL :PLATES", - "hsn_code": "79050020" - }, - { - "description": "ZINC PLATES, SHEETS, STRIP AND FOIL - ZINC PLATES, SHEETS, STRIP AND FOIL :SHEETS, STRIP\nAND CIRCLES", - "hsn_code": "79050030" - }, - { - "description": "ZINC PLATES, SHEETS, STRIP AND FOIL - ZINC PLATES, SHEETS, STRIP AND FOIL :FOIL", - "hsn_code": "79050040" - }, - { - "description": "ZINC TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)-\nZINC TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)\n:TUBES AND PIPES", - "hsn_code": "79060010" - }, - { - "description": "ZINC TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)-\nZINC TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) :\nTUBE OR PIPE FITTINGS", - "hsn_code": "79060020" - }, - { - "description": "OTHER ARTICLES OF ZINC : SANITARY FIXTURES", - "hsn_code": "79070010" - }, - { - "description": "OTHER ARTICLES OF ZINC : OTHER", - "hsn_code": "79070090" - }, - { - "description": "UNWROUGHT TIN - TIN, NOT ALLOYED : BLOCKS", - "hsn_code": "80011010" - }, - { - "description": "UNWROUGHT TIN - TIN, NOT ALLOYED : INGOTS, PIGS, SLABS AND OTHER PRIMARY FORMS OF\nTIN", - "hsn_code": "80011090" - }, - { - "description": "UNWROUGHT TIN TIN ALLOYS", - "hsn_code": "80012000" - }, - { - "description": "TIN WASTE AND SCRAP - TIN WASTE AND SCRAP : TIN SCRAP, NAMELY THE FOLLOWING : BLOCK\nTIN COVERED BY ISRI CODE WORD `RANCH; HIGH TIN BASE BABBIT COVERED BY ISRI CODE\nWORD `RAVES; PEWTER COVERED BY ISRI CODE WORD `RANKS", - "hsn_code": "80020010" - }, - { - "description": "TIN WASTE AND SCRAP - TIN WASTE AND SCRAP : OTHER", - "hsn_code": "80020090" - }, - { - "description": "TIN BARS, RODS, PROFILES AND WIRE - TIN BARS, RODS, PROFILES AND WIRE : HOLLOW BARS", - "hsn_code": "80030010" - }, - { - "description": "TIN BARS, RODS, PROFILES AND WIRE - TIN BARS, RODS, PROFILES AND WIRE : BARS, OTHER\nTHAN HOLLOW BARS; RODS", - "hsn_code": "80030020" - }, - { - "description": "TIN BARS, RODS, PROFILES AND WIRE - TIN BARS, RODS, PROFILES AND WIRE : PROFILES", - "hsn_code": "80030030" - }, - { - "description": "TIN BARS, RODS, PROFILES AND WIRE - TIN BARS, RODS, PROFILES AND WIRE : WIRE", - "hsn_code": "80030040" - }, - { - "description": "TIN PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - TIN PLATES, SHEETS AND\nSTRIP, OF A THICKNESS EXCEEDING 0.2 MM : ELECTROLYTIC PLATES AND SHEETS", - "hsn_code": "80040010" - }, - { - "description": "TIN PLATES, SHEETS AND STRIP, OF A THICKNESS EXCEEDING 0.2 MM - TIN PLATES, SHEETS AND\nSTRIP, OF A THICKNESS EXCEEDING 0.2 MM : OTHER", - "hsn_code": "80040090" - }, - { - "description": "TIN FOIL (WHETHER OR NOT PRINTED OR BACKED WITH PAPER, PAPERBOARD, PLASTICS OR\nSIMILAR BACKING MATERIALS), OF A THICKNESS (EXCLUDING ANY BACKING) NOT EXCEEDING 0.2\nMM; TIN POWDERS AND FLAKES", - "hsn_code": "80050000" - }, - { - "description": "TIN TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)-\nTIN TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) :\nTUBES AND PIPES", - "hsn_code": "80060010" - }, - { - "description": "TIN TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES)-\nTIN TUBES, PIPES AND TUBE OR PIPE FITTINGS (FOR EXAMPLE, COUPLINGS, ELBOWS, SLEEVES) :\nTUBE OR PIPE FITTINGS", - "hsn_code": "80060020" - }, - { - "description": "OTHER ARTICLES OF TIN - OTHER ARTICLES OF TIN : BLANKS", - "hsn_code": "80070010" - }, - { - "description": "OTHER ARTICLES OF TIN - OTHER ARTICLES OF TIN : OTHER", - "hsn_code": "80070090" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP POWDERS", - "hsn_code": "81011000" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:\nUNWROUGHT TUNGSTEN, INCLUDING BARS AND RODS OBTAINED SIMPLY BY SINTERING", - "hsn_code": "81019400" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: -\nBARS AND RODS, OTHER THAN THOSE OBTAINED SIMPLY BY SINTERING, PROFILES, PLATES,\nSHEETS, STRIP AND FOIL: HOLLOW BARS AND RODS", - "hsn_code": "81019510" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: -\nBARS AND RODS, OTHER THAN THOSE OBTAINED SIMPLY BY SINTERING, PROFILES, PLATES,\nSHEETS, STRIP AND FOIL: OTHER", - "hsn_code": "81019590" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: WIRE", - "hsn_code": "81019600" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:\nWASTE AND SCRAP", - "hsn_code": "81019700" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: -\nOTHER: TUNGSTEN FILAMENT", - "hsn_code": "81019910" - }, - { - "description": "TUNGSTEN (WOLFRAM) AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: -\nOTHER: OTHER", - "hsn_code": "81019990" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP POWDERS", - "hsn_code": "81021000" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: UNWROUGHT\nMOLYBDENUM, INCLUDING BARS AND RODS OBTAINED SIMPLY BY SINTERING", - "hsn_code": "81029400" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: - BARS AND\nRODS, OTHER THAN THOSE OBTAINED SIMPLY BY SINTERING, PROFILES, PLATES, SHEETS, STRIP\nAND FOIL: HOLLOW BARS", - "hsn_code": "81029510" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: - BARS AND\nRODS, OTHER THAN THOSE OBTAINED SIMPLY BY SINTERING, PROFILES, PLATES, SHEETS, STRIP\nAND FOIL: OTHER", - "hsn_code": "81029590" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: WIRE", - "hsn_code": "81029600" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: WASTE AND\nSCRAP", - "hsn_code": "81029700" - }, - { - "description": "MOLYBDENUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER: OTHER", - "hsn_code": "81029900" - }, - { - "description": "TANTALUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - UNWROUGHT\nTANTALUM, INCLUDING BARS AND RODS OBTAINED SIMPLY BY SINTERING; POWDERS: HOLLOW\nBARS", - "hsn_code": "81032010" - }, - { - "description": "TANTALUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - UNWROUGHT\nTANTALUM, INCLUDING BARS AND RODS OBTAINED SIMPLY BY SINTERING; POWDERS: OTHER", - "hsn_code": "81032090" - }, - { - "description": "TANTALUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - WASTE AND SCRAP", - "hsn_code": "81033000" - }, - { - "description": "TANTALUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER", - "hsn_code": "81039000" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - UNWROUGHT\nMAGNESIUM:CONTAINING AT LEAST 99.8% BY WEIGHT OF MAGNESIUM", - "hsn_code": "81041100" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - UNWROUGHT\nMAGNESIUM:OTHER", - "hsn_code": "81041900" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - WASTE AND\nSCRAP:MAGNESIUM SCRAP, NAMELY THE FOLLOWING: MAGNESIUM CLIPS COVERED BY ISRI\nCODE WORD `WAFER; MAGNESIUM SCRAP COVERED BY ISRI CODE WORD `WALNUT;\nMAGNESIUM ENGRAVER PLATES COVERED BY ISRI CODE WORD `WINE; MAGNESIUM DOCK\nBOARDS COVERED BY ISRI CODE WORD `WOOD; MAGNESIUM TURNINGS COVERED BY ISRI CODE\nWORD `WORLD", - "hsn_code": "81042010" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - WASTE AND SCRAP:\nOTHER", - "hsn_code": "81042090" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - RASPINGS, TURNINGS\nAND GRANULES, GRADED ACCORDING TO SIZE; POWDERS:RASPINGS, TURNINGS AND\nGRANULES, GRADED ACCORDING TO SIZE", - "hsn_code": "81043010" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - RASPINGS, TURNINGS\nAND GRANULES, GRADED ACCORDING TO SIZE; POWDERS:POWDERS", - "hsn_code": "81043020" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:OTHER\nMAGNESIUM AND MAGNESIUM BASE ALLOYS, WROUGHT", - "hsn_code": "81049010" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:FLAKES", - "hsn_code": "81049020" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:WIRE", - "hsn_code": "81049030" - }, - { - "description": "MAGNESIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:OTHER", - "hsn_code": "81049090" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP - COBALT MATTES AND OTHER\nINTERMEDIATE PRODUCTS OF COBALT METALLURGY; UNWROUGHT COBALT; POWDERS: COBALT\nMATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY", - "hsn_code": "81052010" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP - COBALT MATTES AND OTHER\nINTERMEDIATE PRODUCTS OF COBALT METALLURGY; UNWROUGHT COBALT; POWDERS:COBALT\nUNWROUGHT", - "hsn_code": "81052020" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP - COBALT MATTES AND OTHER\nINTERMEDIATE PRODUCTS OF COBALT METALLURGY; UNWROUGHT COBALT;\nPOWDERS:POWDERS", - "hsn_code": "81052030" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP WASTE AND SCRAP", - "hsn_code": "81053000" - }, - { - "description": "COBALT MATTES AND OTHER INTERMEDIATE PRODUCTS OF COBALT METALLURGY; COBALT AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP OTHER", - "hsn_code": "81059000" - }, - { - "description": "BISMUTH AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - BISMUTH AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:BISMUTH, UNWROUGHT", - "hsn_code": "81060010" - }, - { - "description": "BISMUTH AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - BISMUTH AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:WASTE AND SCRAP OF BISMUTH AND BISMUTH\nALLOYS", - "hsn_code": "81060020" - }, - { - "description": "BISMUTH AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - BISMUTH AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:BISMUTH, WROUGHT", - "hsn_code": "81060030" - }, - { - "description": "BISMUTH AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - BISMUTH AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:OTHER", - "hsn_code": "81060090" - }, - { - "description": "CADMIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - UNWROUGHT CADMIUM;\nPOWDERS", - "hsn_code": "81072000" - }, - { - "description": "CADMIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - WASTE AND SCRAP", - "hsn_code": "81073000" - }, - { - "description": "CADMIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:CADMIUM,\nWROUGHT", - "hsn_code": "81079010" - }, - { - "description": "CADMIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:OTHER", - "hsn_code": "81079090" - }, - { - "description": "TITANIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP UNWROUGHT TITANIUM;\nPOWDERS", - "hsn_code": "81082000" - }, - { - "description": "TITANIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP WASTE AND SCRAP", - "hsn_code": "81083000" - }, - { - "description": "TITANIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:TITANIUM,\nWROUGHT", - "hsn_code": "81089010" - }, - { - "description": "TITANIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - OTHER:OTHER", - "hsn_code": "81089090" - }, - { - "description": "ZIRCONIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP UNWROUGHT ZIRCONIUM;\nPOWDERS", - "hsn_code": "81092000" - }, - { - "description": "ZIRCONIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP WASTE AND SCRAP", - "hsn_code": "81093000" - }, - { - "description": "ZIRCONIUM AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP OTHER", - "hsn_code": "81099000" - }, - { - "description": "ANTIMONY AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP UNWROUGHT ANTIMONY;\nPOWDERS", - "hsn_code": "81101000" - }, - { - "description": "ANTIMONY AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP WASTE AND SCRAP", - "hsn_code": "81102000" - }, - { - "description": "ANTIMONY AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP OTHER", - "hsn_code": "81109000" - }, - { - "description": "MANGANESE AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - MANGANESE AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP:UNWROUGHT MANGANESE AND\nMANGANESE BASE ALLOYS", - "hsn_code": "81110010" - }, - { - "description": "MANGANESE AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - MANGANESE AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP:WASTE AND SCRAP OF MANGANESE BASE\nALLOYS", - "hsn_code": "81110020" - }, - { - "description": "MANGANESE AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - MANGANESE AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP:WROUGHT MANGANESE", - "hsn_code": "81110030" - }, - { - "description": "MANGANESE AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - MANGANESE AND\nARTICLES THEREOF, INCLUDING WASTE AND SCRAP:OTHER", - "hsn_code": "81110090" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - BERYLLIUM: UNWROUGHT; POWDERS", - "hsn_code": "81121200" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - BERYLLIUM: WASTE AND SCRAP", - "hsn_code": "81121300" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - BERYLLIUM: OTHER", - "hsn_code": "81121900" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - CHROMIUM: UNWROUGHT; POWDERS", - "hsn_code": "81122100" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - CHROMIUM: WASTE AND SCRAP", - "hsn_code": "81122200" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - CHROMIUM: OTHER", - "hsn_code": "81122900" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - GERMANIUM:UNWROUGHT", - "hsn_code": "81123010" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - GERMANIUM: WASTE AND SCRAP", - "hsn_code": "81123020" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - GERMANIUM:WROUGHT", - "hsn_code": "81123030" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - GERMANIUM:OTHER", - "hsn_code": "81123090" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - VANADIUM:UNWROUGHT", - "hsn_code": "81124010" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - VANADIUM:WASTE AND SCRAP", - "hsn_code": "81124020" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - VANADIUM: WROUGHT", - "hsn_code": "81124030" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - VANADIUM:OTHER", - "hsn_code": "81124090" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - THALLIUM: UNWROUGHT; POWDERS", - "hsn_code": "81125100" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - THALLIUM: WASTE AND SCRAP", - "hsn_code": "81125200" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - THALLIUM: OTHER", - "hsn_code": "81125900" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - OTHER: UNWROUGHT; WASTE AND SCRAP; POWDERS", - "hsn_code": "81129200" - }, - { - "description": "BERYLLIUM, CHROMIUM, GERMANIUM, VANADIUM, GALLIUM, HAFNIUM, INDIUM, NIOBIUM\n(COLUMBIUM), RHENIUM AND THALLIUM, AND ARTICLES OF THESE METALS, INCLUDING WASTE\nAND SCRAP - OTHER: OTHER", - "hsn_code": "81129900" - }, - { - "description": "CERMETS AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - CERMETS AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:UNWROUGHT CERMETS", - "hsn_code": "81130010" - }, - { - "description": "CERMETS AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - CERMETS AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:WASTE AND SCRAP OF CERMETS", - "hsn_code": "81130020" - }, - { - "description": "CERMETS AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - CERMETS AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:ARTICLES OF CERMETS", - "hsn_code": "81130030" - }, - { - "description": "CERMETS AND ARTICLES THEREOF, INCLUDING WASTE AND SCRAP - CERMETS AND ARTICLES\nTHEREOF, INCLUDING WASTE AND SCRAP:OTHER", - "hsn_code": "81130090" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : SPADES AND SHOVELS", - "hsn_code": "82011000" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : MATTOCKS, PICKS, HOES AND RAKES", - "hsn_code": "82013000" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : AXES, BILL HOOKS AND SIMILAR HEWING\nTOOLS", - "hsn_code": "82014000" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : SECATEURS AND SIMILAR ONE-HANDED\nPRUNERS AND SHEARS (INCLUDING POULTRY SHEARS)", - "hsn_code": "82015000" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : HEDGE SHEARS, TWO-HANDED PRUNING\nSHEARS AND SIMILAR TWO-HANDED SHEARS", - "hsn_code": "82016000" - }, - { - "description": "HAND TOOLS, THE FOLLOWING : SPADES, SHOVELS, MATTOCKS, PICKS, HOES, FORKS AND RAKES;\nAXES, BILL HOOKS AND SIMILAR HEWING TOOLS; SECATEURS AND PRUNERS OF ANY KIND;\nSCYTHES, SICKLES, HAY KNIVES, HEDGE SHEARS, TIMBER WEDGES AND OTHER TOOLS OF A KIND\nUSED IN AGRICULTURE, HORTICULTURE OR FORESTRY : OTHER HAND TOOLS OF A KIND USED IN\nAGRICULTURE, HORTICULTURE OR FORESTRY", - "hsn_code": "82019000" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES) - HAND SAWS : METAL WORKING HAND SAWS", - "hsn_code": "82021010" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES) - HAND SAWS : WOOD WORKING AND SIMILAR HAND SAWS", - "hsn_code": "82021020" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES) - HAND SAWS : OTHER", - "hsn_code": "82021090" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)BAND SAW BLADES", - "hsn_code": "82022000" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- CIRCULAR SAW BLADES (INCLUDING SLITTING OR SLOTTING SAW BLADES) : WITH\nWORKING PART OF STEEL", - "hsn_code": "82023100" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- CIRCULAR SAW BLADES (INCLUDING SLITTING OR SLOTTING SAW BLADES) :\nOTHER, INCLUDING PARTS", - "hsn_code": "82023900" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)CHAIN SAW BLADES", - "hsn_code": "82024000" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- OTHER SAW BLADES : - STRAIGHT SAW BLADES, FOR WORKING METAL : MACHINE\nOPERATED", - "hsn_code": "82029110" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- OTHER SAW BLADES : - STRAIGHT SAW BLADES, FOR WORKING METAL : HAND\nOPERATED", - "hsn_code": "82029120" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- OTHER SAW BLADES : - OTHER : HACKSAW FRAMES", - "hsn_code": "82029910" - }, - { - "description": "HAND SAWS; BLADES FOR SAWS OF ALL KINDS (INCLUDING SLITTING, SLOTTING OR TOOTHLESS\nSAW BLADES)- OTHER SAW BLADES : - OTHER : OTHER", - "hsn_code": "82029990" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING\nSHEARS, PIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS -\nFILES, RASPS AND SIMILAR TOOLS", - "hsn_code": "82031000" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING\nSHEARS, PIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS -\nPLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS AND SIMILAR TOOLS", - "hsn_code": "82032000" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING\nSHEARS, PIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS -\nMETAL CUTTING SHEARS AND SIMILAR TOOLS", - "hsn_code": "82033000" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING\nSHEARS, PIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS -\nPIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR TOOLS : PERFORATING\nPUNCHES AND PIPE CUTTERS", - "hsn_code": "82034010" - }, - { - "description": "FILES, RASPS, PLIERS (INCLUDING CUTTING PLIERS), PINCERS, TWEEZERS, METAL CUTTING\nSHEARS, PIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR HAND TOOLS -\nPIPE- CUTTERS, BOLT CROPPERS, PERFORATING PUNCHES AND SIMILAR TOOLS : OTHER", - "hsn_code": "82034090" - }, - { - "description": "HAND- OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT\nNOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT\nHANDLES - HAND- OPERATED SPANNERS AND WRENCHES : NON- ADJUSTABLE : SPANNERS", - "hsn_code": "82041110" - }, - { - "description": "HAND- OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT\nNOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT\nHANDLES - HAND- OPERATED SPANNERS AND WRENCHES : NON- ADJUSTABLE : WRENCHES", - "hsn_code": "82041120" - }, - { - "description": "HAND- OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT\nNOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT\nHANDLES - HAND- OPERATED SPANNERS AND WRENCHES : ADJUSTABLE : SPANNERS", - "hsn_code": "82041210" - }, - { - "description": "HAND- OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT\nNOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT\nHANDLES - HAND- OPERATED SPANNERS AND WRENCHES : ADJUSTABLE : WRENCHES", - "hsn_code": "82041220" - }, - { - "description": "HAND- OPERATED SPANNERS AND WRENCHES (INCLUDING TORQUE METER WRENCHES BUT\nNOT INCLUDING TAP WRENCHES); INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT\nHANDLES - INTERCHANGEABLE SPANNER SOCKETS, WITH OR WITHOUT HANDLES", - "hsn_code": "82042000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - DRILLING, THREADING OR TAPPING TOOLS", - "hsn_code": "82051000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - HAMMERS AND SLEDGE HAMMERS", - "hsn_code": "82052000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - PLANES, CHISELS, GOUGES AND SIMILAR CUTTING TOOLS FOR WORKING\nWOOD", - "hsn_code": "82053000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - SCREWDRIVERS", - "hsn_code": "82054000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS- OTHER HAND TOOLS (INCLUDING GLAZIERS DIAMONDS) : - HOUSEHOLD\nTOOLS : CAN OR CORK OPENERS", - "hsn_code": "82055110" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS- OTHER HAND TOOLS (INCLUDING GLAZIERS DIAMONDS) : - HOUSEHOLD\nTOOLS : OTHER", - "hsn_code": "82055190" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS- OTHER HAND TOOLS (INCLUDING GLAZIERS DIAMONDS) : OTHER : GREASE\nGUNS (EXCLUDING COMPRESSED AIR TYPE)", - "hsn_code": "82055910" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS- OTHER HAND TOOLS (INCLUDING GLAZIERS DIAMONDS) : OTHER : METAL\nWORKING HAND TOOLS", - "hsn_code": "82055920" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS- OTHER HAND TOOLS (INCLUDING GLAZIERS DIAMONDS) : OTHER : HAND\nTOOLS FOR SPECIFIED USES, SUCH AS WATCH MAKING TOOLS, GOLDSMITH TOOLS", - "hsn_code": "82055930" - }, - { - "description": "FORKS OTHER THAN THOSE OF HEADING 8201 AND 8215", - "hsn_code": "82055940" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS)- OTHER HAND TOOLS (INCLUDING GLAZIERS\nDIAMONDS) : OTHER : OTHER", - "hsn_code": "82055990" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - BLOW LAMPS", - "hsn_code": "82056000" - }, - { - "description": "HAND TOOLS (INCLUDING GLAZIERS DIAMONDS), NOT ELSEWHERE SPECIFIED OR INCLUDED;\nBLOW LAMPS; VICES; CLAMPS AND THE LIKE, OTHER THAN ACCESSORIES FOR AND PARTS OF,\nMACHINE TOOLS; ANVILS; PORTABLE FORGES; HAND- OR PEDAL- OPERATED GRINDING WHEELS\nWITH FRAMEWORKS - VICES, CLAMPS AND THE LIKE", - "hsn_code": "82057000" - }, - { - "description": "ANVILS AND PORTABLE FORGES", - "hsn_code": "82059010" - }, - { - "description": "GRINDING WHEELS WITH FRAME, HAND-OR- PEDAL-OPERATED", - "hsn_code": "82059020" - }, - { - "description": "SETS OF ARTICLES OF TWO OR MORE OF THE FOREGOING SUB-HEADINGS", - "hsn_code": "82059030" - }, - { - "description": "OTHER", - "hsn_code": "82059090" - }, - { - "description": "TOOLS OF TWO OR MORE OF THE HEADINGS 8202 TO 8205, PUT UP IN SETS FOR RETAIL SALE -\nTOOLS OF TWO OR MORE OF THE HEADINGS 8202 TO 8205, PUT UP IN SETS FOR RETAIL SALE :\nGARAGE TOOLS IN SETS", - "hsn_code": "82060010" - }, - { - "description": "TOOLS OF TWO OR MORE OF THE HEADINGS 8202 TO 8205, PUT UP IN SETS FOR RETAIL SALE -\nTOOLS OF TWO OR MORE OF THE HEADINGS 8202 TO 8205, PUT UP IN SETS FOR RETAIL SALE :\nOTHER", - "hsn_code": "82060090" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- ROCK\nDRILLING OR EARTH BORING TOOLS : WITH WORKING PART OF CERMETS", - "hsn_code": "82071300" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- ROCK\nDRILLING OR EARTH BORING TOOLS : OTHER, INCLUDING PARTS", - "hsn_code": "82071900" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - DIES FOR\nDRAWING OR EXTRUDING METAL", - "hsn_code": "82072000" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - TOOLS FOR\nPRESSING, STAMPING OR PUNCHING", - "hsn_code": "82073000" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nTAPPING OR THREADING : CHASERS", - "hsn_code": "82074010" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nTAPPING OR THREADING : OTHER", - "hsn_code": "82074090" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS TOOLS FOR\nDRILLING, OTHER THAN FOR ROCK DRILLING", - "hsn_code": "82075000" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nBORING OR BROACHING : REAMERS", - "hsn_code": "82076010" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nBORING OR BROACHING : OTHER", - "hsn_code": "82076090" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nMILLING : CUTTERS", - "hsn_code": "82077010" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS- TOOLS FOR\nMILLING : OTHER", - "hsn_code": "82077090" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - TOOLS FOR\nTURNING", - "hsn_code": "82078000" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - OTHER\nINTERCHANGEABLE TOOLS : FOR METAL WORKING HAND TOOLS", - "hsn_code": "82079010" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - OTHER\nINTERCHANGEABLE TOOLS : FOR WOOD WORKING HAND TOOLS", - "hsn_code": "82079020" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - OTHER\nINTERCHANGEABLE TOOLS : LATHE TOOLS AND TOOL BELTS", - "hsn_code": "82079030" - }, - { - "description": "INTERCHANGEABLE TOOLS FOR HAND TOOLS, WHETHER OR NOT POWER- OPERATED, OR FOR\nMACHINE- TOOLS (FOR EXAMPLE, FOR PRESSING, STAMPING, PUNCHING, TAPPING, THREADING,\nDRILLING, BORING, BROACHING, MILLING, TURNING OR SCREW DRIVING), INCLUDING DIES FOR\nDRAWING OR EXTRUDING METAL, AND ROCK DRILLING OR EARTH BORING TOOLS - OTHER\nINTERCHANGEABLE TOOLS : OTHER", - "hsn_code": "82079090" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - FOR METAL\nWORKING", - "hsn_code": "82081000" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - FOR WOOD\nWORKING", - "hsn_code": "82082000" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - FOR KITCHEN\nAPPLIANCES OR FOR MACHINES USED BY THE FOOD INDUSTRY", - "hsn_code": "82083000" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - FOR\nAGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINES", - "hsn_code": "82084000" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - OTHER :\nKNIVES AND CUTTING BLADES FOR PAPER CUTTING MACHINES", - "hsn_code": "82089010" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - OTHER : BELL\nSKIVING KNIVES", - "hsn_code": "82089020" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - OTHER :\nBAND KNIVES FOR SPLITTING MACHINE", - "hsn_code": "82089030" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - OTHER :\nCUTTING AND CLICKING DIES", - "hsn_code": "82089040" - }, - { - "description": "KNIVES AND CUTTING BLADES, FOR MACHINES OR FOR MECHANICAL APPLIANCES - OTHER :\nOTHER", - "hsn_code": "82089090" - }, - { - "description": "PLATES, STICKS, TIPS AND THE LIKE FOR TOOLS, UNMOUNTED, OF CERMETS - PLATES, STICKS,\nTIPS AND THE LIKE FOR TOOLS, UNMOUNTED, OF CERMETS : TUNGSTEN CARBIDE TIPS", - "hsn_code": "82090010" - }, - { - "description": "PLATES, STICKS, TIPS AND THE LIKE FOR TOOLS, UNMOUNTED, OF CERMETS - PLATES, STICKS,\nTIPS AND THE LIKE FOR TOOLS, UNMOUNTED, OF CERMETS : OTHER", - "hsn_code": "82090090" - }, - { - "description": "HAND-OPERATED MECHANICAL APPLIANCES, WEIGHING 10 KG OR LESS, USED IN THE\nPREPARATION, CONDITIONING OR SERVING OF FOOD OR DRINK", - "hsn_code": "82100000" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - SETS OF ASSORTED ARTICLES", - "hsn_code": "82111000" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : TABLE KNIVES HAVING FIXED\nBLADES", - "hsn_code": "82119100" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : OTHER KNIVES HAVING FIXED\nBLADES", - "hsn_code": "82119200" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : - KNIVES HAVING OTHER THAN\nFIXED BLADES : POCKET KNIVES", - "hsn_code": "82119310" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : - KNIVES HAVING OTHER THAN\nFIXED BLADES : OTHER", - "hsn_code": "82119390" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : BLADES", - "hsn_code": "82119400" - }, - { - "description": "KNIVES WITH CUTTING BLADES, SERRATED OR NOT (INCLUDING PRUNING KNIVES), OTHER THAN\nKNIVES OF HEADING 8208, AND BLADES THEREFOR - OTHER : HANDLES OF BASE METAL", - "hsn_code": "82119500" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)- RAZORS : TWIN TYPE\nSHAVING", - "hsn_code": "82121010" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)- RAZORS : OTHER", - "hsn_code": "82121090" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)- SAFETY RAZOR\nBLADES, INCLUDING RAZOR BLADE BLANKS IN STRIPS : - SAFETY RAZOR BLADES : DISPOSABLE\nCATRIDGE BLADES", - "hsn_code": "82122011" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)- SAFETY RAZOR\nBLADES, INCLUDING RAZOR BLADE BLANKS IN STRIPS : - SAFETY RAZOR BLADES : OTHER", - "hsn_code": "82122019" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)- SAFETY RAZOR\nBLADES, INCLUDING RAZOR BLADE BLANKS IN STRIPS : SAFETY RAZOR BLADE BLANKS, IN STRIPS", - "hsn_code": "82122020" - }, - { - "description": "RAZORS AND RAZOR BLADES (INCLUDING RAZOR BLADE BLANKS IN STRIPS)OTHER PARTS", - "hsn_code": "82129000" - }, - { - "description": "SCISSORS, TAILORS SHEARS AND SIMILAR SHEARS, AND BLADES THEREFOR", - "hsn_code": "82130000" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - PAPER KNIVES, LETTER OPENERS, ERASING KNIVES,\nPENCIL SHARPENERS AND BLADES THEREFOR : PAPER KNIVES, LETTER OPENERS, ERASING\nKNIVES, PENCIL SHARPENERS", - "hsn_code": "82141010" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - PAPER KNIVES, LETTER OPENERS, ERASING KNIVES,\nPENCIL SHARPENERS AND BLADES THEREFOR : BLADES", - "hsn_code": "82141090" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - MANICURE OR PEDICURE SETS AND INSTRUMENTS\n(INCLUDING NAIL FILES) : NAIL CUTTERS", - "hsn_code": "82142010" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - MANICURE OR PEDICURE SETS AND INSTRUMENTS\n(INCLUDING NAIL FILES) : OTHER", - "hsn_code": "82142090" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - OTHER : HANDLES OF CUTLERY OF BASE METAL", - "hsn_code": "82149010" - }, - { - "description": "OTHER ARTICLES OF CUTLERY (FOR EXAMPLE, HAIR CLIPPERS, BUTCHERS OR KITCHEN CLEAVERS,\nCHOPPERS AND MINCING KNIVES, PAPER KNIVES); MANICURE OR PEDICURE SETS AND\nINSTRUMENTS (INCLUDING NAIL FILES) - OTHER : OTHER", - "hsn_code": "82149090" - }, - { - "description": "SPOONS, FORKS, LADLES, SKIMMERS, CAKE- SERVERS, FISHKNIVES, BUTTER- KNIVES, SUGAR\nTONGS AND SIMILAR KITCHEN OR TABLEWARE SETS OF ASSORTED ARTICLES CONTAINING AT\nLEAST ONE ARTICLE PLATED WITH PRECIOUS METAL", - "hsn_code": "82151000" - }, - { - "description": "SPOONS, FORKS, LADLES, SKIMMERS, CAKE- SERVERS, FISHKNIVES, BUTTER- KNIVES, SUGAR\nTONGS AND SIMILAR KITCHEN OR TABLEWARE OTHER SETS OF ASSORTED ARTICLES", - "hsn_code": "82152000" - }, - { - "description": "SPOONS, FORKS, LADLES, SKIMMERS, CAKE- SERVERS, FISHKNIVES, BUTTER- KNIVES, SUGAR\nTONGS AND SIMILAR KITCHEN OR TABLEWARE - OTHER : PLATED WITH PRECIOUS METAL", - "hsn_code": "82159100" - }, - { - "description": "SPOONS, FORKS, LADLES, SKIMMERS, CAKE- SERVERS, FISHKNIVES, BUTTER- KNIVES, SUGAR\nTONGS AND SIMILAR KITCHEN OR TABLEWARE - OTHER : OTHER", - "hsn_code": "82159900" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - PADLOCKS", - "hsn_code": "83011000" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - LOCKS OF A KIND USED FOR MOTOR VEHICLES", - "hsn_code": "83012000" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - LOCKS OF A KIND USED FOR FURNITURE", - "hsn_code": "83013000" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - OTHER LOCKS: COMBINATION LOCKS", - "hsn_code": "83014010" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - OTHER LOCKS: OTHER", - "hsn_code": "83014090" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - CLASPS AND FRAMES WITH CLASPS,\nINCORPORATING LOCKS", - "hsn_code": "83015000" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - PARTS", - "hsn_code": "83016000" - }, - { - "description": "PADLOCKS AND LOCKS (KEY, COMBINATION OR ELECTRICALLY OPERATED), OF BASE METAL;\nCLASPS AND FRAMES WITH CLASPS, INCORPORATING LOCKS, OF BASE METAL; KEYS FOR ANY OF\nTHE FOREGOING ARTICLES, OF BASE METAL - KEYS PRESENTED SEPARATELY", - "hsn_code": "83017000" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - HINGES:OF STEEL", - "hsn_code": "83021010" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - HINGES:OF BRASS", - "hsn_code": "83021020" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - HINGES:OTHER", - "hsn_code": "83021090" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL CASTORS", - "hsn_code": "83022000" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR MOTOR VEHICLES:CURVE DRIVE\nSTAKES", - "hsn_code": "83023010" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR MOTOR VEHICLES:OTHER", - "hsn_code": "83023090" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES: - SUITABLE FOR BUILDINGS:FITTINGS FOR DOORS\nAND WINDOWS", - "hsn_code": "83024110" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES: - SUITABLE FOR BUILDINGS:TOWER BOLTS", - "hsn_code": "83024120" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES: - SUITABLE FOR BUILDINGS:OTHER", - "hsn_code": "83024190" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES: OTHER, SUITABLE FOR FURNITURE", - "hsn_code": "83024200" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL - OTHER\nMOUNTINGS, FITTINGS AND SIMILAR ARTICLES: OTHER", - "hsn_code": "83024900" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL HAT - RACKS, HAT -\nPEGS, BRACKETS AND SIMILAR FIXTURES", - "hsn_code": "83025000" - }, - { - "description": "BASE METAL MOUNTINGS, FITTINGS AND SIMILAR ARTICLES SUITABLE FOR FURNITURE, DOORS,\nSTAIRCASES, WINDOWS, BLINDS, COACHWORK, SADDLERY, TRUNKS, CHESTS, CASKETS OR THE\nLIKE; BASE METAL HAT - RACKS, HAT - PEGS, BRACKETS AND SIMILAR FIXTURES; CASTORS WITH\nMOUNTINGS OF BASE METAL; AUTOMATIC DOOR CLOSERS OF BASE METAL AUTOMATIC DOOR\nCLOSERS", - "hsn_code": "83026000" - }, - { - "description": "ARMOURED OR REINFORCED SAFES, STRONG - BOXES - AND DOORS AND SAFE DEPOSIT LOCKERS\nFOR STRONG - ROOMS, CASH OR DEED BOXES AND THE LIKE, OF BASE METAL", - "hsn_code": "83030000" - }, - { - "description": "FILING, CABINETS, CARD - INDEX CABINETS, PAPER TRAYS, PAPER RESTS, PEN TRAYS, OFFICE\nSTAMP STANDS AND SIMILAR OFFICE OR DESK EQUIPMENT, OF BASE METAL, OTHER THAN\nOFFICE FURNITURE OF HEADING 9403", - "hsn_code": "83040000" - }, - { - "description": "FITTINGS FOR LOOSE-LEAF BINDERS OR FILES, LETTER CLIPS, LETTER CORNERS, PAPER CLIPS,\nINDEXING TAGS AND SIMILAR OFFICE ARTICLES, OF BASE METAL; STAPLES IN STRIPS (FOR\nEXAMPLE, FOR OFFICES, UPHOLSTERY, PACKAGING), OF BASE METAL - FITTINGS FOR LOOSE-LEAF\nBINDERS OR FILES", - "hsn_code": "83051000" - }, - { - "description": "FITTINGS FOR LOOSE-LEAF BINDERS OR FILES, LETTER CLIPS, LETTER CORNERS, PAPER CLIPS,\nINDEXING TAGS AND SIMILAR OFFICE ARTICLES, OF BASE METAL; STAPLES IN STRIPS (FOR\nEXAMPLE, FOR OFFICES, UPHOLSTERY, PACKAGING), OF BASE METAL - STAPLES IN STRIPS", - "hsn_code": "83052000" - }, - { - "description": "FITTINGS FOR LOOSE-LEAF BINDERS OR FILES, LETTER CLIPS, LETTER CORNERS, PAPER CLIPS,\nINDEXING TAGS AND SIMILAR OFFICE ARTICLES, OF BASE METAL; STAPLES IN STRIPS (FOR\nEXAMPLE, FOR OFFICES, UPHOLSTERY, PACKAGING), OF BASE METAL - OTHER, INCLUDING\nPARTS:PINS (OTHER THAN THOSE OF HEADING 7317)", - "hsn_code": "83059010" - }, - { - "description": "FITTINGS FOR LOOSE-LEAF BINDERS OR FILES, LETTER CLIPS, LETTER CORNERS, PAPER CLIPS,\nINDEXING TAGS AND SIMILAR OFFICE ARTICLES, OF BASE METAL; STAPLES IN STRIPS (FOR\nEXAMPLE, FOR OFFICES, UPHOLSTERY, PACKAGING), OF BASE METAL - OTHER, INCLUDING PARTS\n: CLIPS", - "hsn_code": "83059020" - }, - { - "description": "FITTINGS FOR LOOSE-LEAF BINDERS OR FILES, LETTER CLIPS, LETTER CORNERS, PAPER CLIPS,\nINDEXING TAGS AND SIMILAR OFFICE ARTICLES, OF BASE METAL; STAPLES IN STRIPS (FOR\nEXAMPLE, FOR OFFICES, UPHOLSTERY, PACKAGING), OF BASE METAL - OTHER, INCLUDING\nPARTS:OTHER", - "hsn_code": "83059090" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - BELLS, GONGS AND THE LIKE", - "hsn_code": "83061000" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - PLATED WITH PRECIOUS\nMETAL:STATUETTES", - "hsn_code": "83062110" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - PLATED WITH PRECIOUS\nMETAL:TROPHIES", - "hsn_code": "83062120" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - PLATED WITH PRECIOUS\nMETAL:OTHER", - "hsn_code": "83062190" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - OTHER:STATUETTES", - "hsn_code": "83062910" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - OTHER:TROPHIES", - "hsn_code": "83062920" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - STATUETTES AND OTHER ORNAMENTS: - OTHER:OTHER", - "hsn_code": "83062990" - }, - { - "description": "BELLS, GONGS AND THE LIKE, NON-ELECTRIC, OF BASE METAL; STATUETTES AND OTHER\nORNAMENTS, OF BASE METAL; PHOTOGRAPH, PICTURE OR SIMILAR FRAMES, OF BASE METAL;\nMIRRORS OF BASE METAL - PHOTOGRAPH, PICTURE OR SIMILAR FRAMES; MIRRORS", - "hsn_code": "83063000" - }, - { - "description": "FLEXIBLE TUBING OF BASE METAL, WITH OR WITHOUT FITTINGS OF IRON OR STEEL", - "hsn_code": "83071000" - }, - { - "description": "FLEXIBLE TUBING OF BASE METAL, WITH OR WITHOUT FITTINGS OF OTHER BASE METAL", - "hsn_code": "83079000" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - HOOKS, EYES AND EYELETS:HOOKS AND EYES", - "hsn_code": "83081010" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - HOOKS, EYES AND EYELETS: - EYELETS: FOR\nFOOTWEAR", - "hsn_code": "83081021" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - HOOKS, EYES AND EYELETS: - EYELETS: OTHER", - "hsn_code": "83081029" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - TUBULAR OR BIFURCATED RIVETS", - "hsn_code": "83082000" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - BUCKLES:FOR\nFOOTWEAR", - "hsn_code": "83089011" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - BUCKLES:OTHER", - "hsn_code": "83089019" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: IMITATION ZARI\nSPANGLES", - "hsn_code": "83089020" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - BEADS AND SPANGLES\nOF BASE METAL: FOR GARMENTS, MADE UPS, KNITWEAR, PLASTIC AND LEATHER GOODS", - "hsn_code": "83089031" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - BEADS AND SPANGLES\nOF BASE METAL: OTHER", - "hsn_code": "83089039" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: FITTINGS FOR TRAVEL\nREQUISITES AND LEATHER GOODS", - "hsn_code": "83089040" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - OTHER: FOR GARMENTS,\nMADE UPS, KNITWEAR, PLASTIC AND LEATHER GOODS", - "hsn_code": "83089091" - }, - { - "description": "CLASPS, FRAMES WITH CLASPS, BUCKLES, BUCKLE-CLASPS, HOOKS, EYES, EYELETS AND THE LIKE,\nOF BASE METAL, OF A KIND USED FOR CLOTHING, FOOTWEAR, AWNINGS, HANDBAGS, TRAVEL\nGOODS OR OTHER MADE UP ARTICLES; TUBULAR OR BIFURCATED RIVETS, OF BASE METAL;\nBEADS AND SPANGLES, OF BASE METALS - OTHER, INCLUDING PARTS: - OTHER: OTHER", - "hsn_code": "83089099" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS),\nCAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING\nACCESSORIES, OF BASE METAL CROWN CORKS", - "hsn_code": "83091000" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS),\nCAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING\nACCESSORIES, OF BASE METAL - OTHER : PILFER PROOF CAPS FOR PACKAGING, ALL SORTS, WITH\nOR WITHOUT WASHERS OR OTHER FITTINGS, OF CORK, RUBBER, POLYETHYLENE OR ANY OTHER\nMATERIAL", - "hsn_code": "83099010" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS),\nCAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING\nACCESSORIES, OF BASE METAL - OTHER:ALUMINIUM CAPS, SEALS, CAPSULES AND CLOSERS", - "hsn_code": "83099020" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS),\nCAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING\nACCESSORIES, OF BASE METAL - OTHER:OTHER SEALS", - "hsn_code": "83099030" - }, - { - "description": "STOPPERS, CAPS AND LIDS (INCLUDING CROWN CORKS, SCREW CAPS AND POURING STOPPERS),\nCAPSULES FOR BOTTLES, THREADED BUNGS, BUNG COVERS, SEALS AND OTHER PACKING\nACCESSORIES, OF BASE METAL - OTHER:OTHER", - "hsn_code": "83099090" - }, - { - "description": "SIGN - PLATES, NAME - PLATES, ADDRESS - PLATES AND SIMILAR PLATES, NUMBERS, LETTERS\nAND OTHER SYMBOLS, OF BASE METAL, EXCLUDING THOSE OF HEADING 9405 - SIGN - PLATES,\nNAME - PLATES, ADDRESS - PLATES AND SIMILAR PLATES, NUMBERS, LETTERS AND OTHER\nSYMBOLS, OF BASE METAL, EXCLUDING THOSE OF HEADING 9405:ENAMEL IRON SIGNBOARD", - "hsn_code": "83100010" - }, - { - "description": "SIGN - PLATES, NAME - PLATES, ADDRESS - PLATES AND SIMILAR PLATES, NUMBERS, LETTERS\nAND OTHER SYMBOLS, OF BASE METAL, EXCLUDING THOSE OF HEADING 9405 - SIGN - PLATES,\nNAME - PLATES, ADDRESS - PLATES AND SIMILAR PLATES, NUMBERS, LETTERS AND OTHER\nSYMBOLS, OF BASE METAL, EXCLUDING THOSE OF HEADING 9405:OTHER", - "hsn_code": "83100090" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF\nMETAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING,\nBRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF\nAGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING - COATED ELECTRODES OF\nBASE METAL, FOR ELECTRIC ARC - WELDING", - "hsn_code": "83111000" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF\nMETAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING,\nBRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF\nAGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING - CORED WIRE OF BASE\nMETAL, FOR ELECTRIC ARC - WELDING", - "hsn_code": "83112000" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF\nMETAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING,\nBRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF\nAGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING - COATED RODS AND\nCORED WIRE, OF BASE METAL, FOR SOLDERING, BRAZING OR WELDING BY FLAME:WIRE AND\nRODS OF AGGLOMERATED BASE METAL", - "hsn_code": "83113010" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF\nMETAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING,\nBRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF\nAGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING - COATED RODS AND\nCORED WIRE, OF BASE METAL, FOR SOLDERING, BRAZING OR WELDING BY FLAME:OTHER", - "hsn_code": "83113090" - }, - { - "description": "WIRE, RODS, TUBES, PLATES, ELECTRODES AND SIMILAR PRODUCTS, OF BASE METAL OR OF\nMETAL CARBIDES, COATED OR CORED WITH FLUX MATERIAL, OF A KIND USED FOR SOLDERING,\nBRAZING, WELDING OR DEPOSITION OF METAL OR OF METAL CARBIDES; WIRE AND RODS, OF\nAGGLOMERATED BASE METAL POWDER, USED FOR METAL SPRAYING OTHER", - "hsn_code": "83119000" - }, - { - "description": "NUCLEAR REACTORS; FUEL ELEMENTS (CARTRIDGES), NON-IRRADIATED, FOR NUCLEAR\nREACTORS; MACHINERY AND APPARATUS FOR ISOTOPIC SEPARATION NUCLEAR REACTORS", - "hsn_code": "84011000" - }, - { - "description": "NUCLEAR REACTORS; FUEL ELEMENTS (CARTRIDGES), NON-IRRADIATED, FOR NUCLEAR\nREACTORS; MACHINERY AND APPARATUS FOR ISOTOPIC SEPARATION MACHINERY AND\nAPPARATUS FOR ISOTOPIC SEPARATION, AND PARTS THEREOF", - "hsn_code": "84012000" - }, - { - "description": "NUCLEAR REACTORS; FUEL ELEMENTS (CARTRIDGES), NON-IRRADIATED, FOR NUCLEAR\nREACTORS; MACHINERY AND APPARATUS FOR ISOTOPIC SEPARATION FUEL ELEMENTS\n(CARTRIDGES), NON-IRRADIATED", - "hsn_code": "84013000" - }, - { - "description": "NUCLEAR REACTORS; FUEL ELEMENTS (CARTRIDGES), NON-IRRADIATED, FOR NUCLEAR\nREACTORS; MACHINERY AND APPARATUS FOR ISOTOPIC SEPARATION PARTS OF NUCLEAR\nREACTORS", - "hsn_code": "84014000" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- STEAM OR OTHER VAPOUR GENERATING BOILERS: WATERTUBE BOILERS WITH A STEAM\nPRODUCTION EXCEEDING 45 T PER HOUR", - "hsn_code": "84021100" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- STEAM OR OTHER VAPOUR GENERATING BOILERS: WATER TUBE BOILERS WITH A STEAM\nPRODUCTION NOT EXCEEDING 45 T PER HOUR", - "hsn_code": "84021200" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- STEAM OR OTHER VAPOUR GENERATING BOILERS: OTHER VAPOUR GENERATING BOILERS,\nINCLUDING HYBRID BOILERS: FIRE TUBE HORIZONTAL (LANCASHIRE) BOILERS", - "hsn_code": "84021910" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- STEAM OR OTHER VAPOUR GENERATING BOILERS: OTHER VAPOUR GENERATING BOILERS,\nINCLUDING HYBRID BOILERS:FIRE TUBE BOILERS VERTICAL", - "hsn_code": "84021920" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- STEAM OR OTHER VAPOUR GENERATING BOILERS: OTHER VAPOUR GENERATING BOILERS,\nINCLUDING HYBRID BOILERS:OTHER", - "hsn_code": "84021990" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- SUPER-HEATED WATER BOILERS", - "hsn_code": "84022000" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- PARTS: PARTS OF FIRE TUBE BOILERS", - "hsn_code": "84029010" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- PARTS: PARTS OF WATERTUBE BOILERS", - "hsn_code": "84029020" - }, - { - "description": "STEAM OR OTHER VAPOUR GENERATING BOILERS (OTHER THAN CENTRAL HEATING HOT WATER\nBOILERS CAPABLE ALSO OF PRODUCING LOW PRESSURE STEAM); SUPERHEATED WATER BOILERS\n- PARTS: OTHER", - "hsn_code": "84029090" - }, - { - "description": "CENTRAL HEATING BOILERS OTHER THAN THOSE OF HEADING 8402 - BOILERS", - "hsn_code": "84031000" - }, - { - "description": "CENTRAL HEATING BOILERS OTHER THAN THOSE OF HEADING 8402 - PARTS", - "hsn_code": "84039000" - }, - { - "description": "AUXILIARY PLANT FOR USE WITH BOILERS OF HEADING 8402 OR 8403 (FOR EXAMPLE,\nECONOMISERS, SUPERHEATERS, SOOT REMOVERS, GAS RECOVERERS); CONDENSERS FOR STEAM\nOR OTHER VAPOUR POWER UNITS AUXILIARY PLANTS FOR USE WITH BOILERS OF HEADING 8402\nOR 8403", - "hsn_code": "84041000" - }, - { - "description": "AUXILIARY PLANT FOR USE WITH BOILERS OF HEADING 8402 OR 8403 (FOR EXAMPLE,\nECONOMISERS, SUPERHEATERS, SOOT REMOVERS, GAS RECOVERERS); CONDENSERS FOR STEAM\nOR OTHER VAPOUR POWER UNITS CONDENSERS FOR STEAM OR OTHER VAPOUR POWER UNITS", - "hsn_code": "84042000" - }, - { - "description": "AUXILIARY PLANT FOR USE WITH BOILERS OF HEADING 8402 OR 8403 (FOR EXAMPLE,\nECONOMISERS, SUPERHEATERS, SOOT REMOVERS, GAS RECOVERERS); CONDENSERS FOR STEAM\nOR OTHER VAPOUR POWER UNITS PARTS", - "hsn_code": "84049000" - }, - { - "description": "PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS; ACETYLENE\nGAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR WITHOUT THEIR\nPURIFIERS - PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS;\nACETYLENE GAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR\nWITHOUT THEIR PURIFIERS: PRODUCER GAS OR WATER GAS GENERATORS", - "hsn_code": "84051010" - }, - { - "description": "PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS; ACETYLENE\nGAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR WITHOUT THEIR\nPURIFIERS - PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS;\nACETYLENE GAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR\nWITHOUT THEIR PURIFIERS:ACETYLENE GAS GENERATORS", - "hsn_code": "84051020" - }, - { - "description": "PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS; ACETYLENE\nGAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR WITHOUT THEIR\nPURIFIERS - PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS;\nACETYLENE GAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR\nWITHOUT THEIR PURIFIERS: OTHER", - "hsn_code": "84051090" - }, - { - "description": "PRODUCER GAS OR WATER GAS GENERATORS, WITH OR WITHOUT THEIR PURIFIERS; ACETYLENE\nGAS GENERATORS AND SIMILAR WATER PROCESS GAS GENERATORS, WITH OR WITHOUT THEIR\nPURIFIERS - PARTS", - "hsn_code": "84059000" - }, - { - "description": "STEAM TURBINES AND OTHER VAPOUR TURBINES TURBINES FOR MARINE PROPULSION", - "hsn_code": "84061000" - }, - { - "description": "STEAM TURBINES AND OTHER VAPOUR TURBINES - OTHER TURBINES: OF AN OUTPUT\nEXCEEDING 40 MW", - "hsn_code": "84068100" - }, - { - "description": "STEAM TURBINES AND OTHER VAPOUR TURBINES - OTHER TURBINES: OF AN OUTPUT NOT\nEXCEEDING 40 MW", - "hsn_code": "84068200" - }, - { - "description": "STEAM TURBINES AND OTHER VAPOUR TURBINES - PARTS", - "hsn_code": "84069000" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES\nAIRCRAFT ENGINES", - "hsn_code": "84071000" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nMARINE PROPULSION ENGINES: OUTBOARD MOTORS", - "hsn_code": "84072100" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nMARINE PROPULSION ENGINES: OTHER", - "hsn_code": "84072900" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY NOT EXCEEDING 50 CC: FOR MOTOR CYCLES", - "hsn_code": "84073110" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY NOT EXCEEDING 50 CC: OTHER", - "hsn_code": "84073190" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC: FOR\nMOTOR CYCLES", - "hsn_code": "84073210" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC: OTHER", - "hsn_code": "84073290" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 1,000 CC : FOR\nMOTOR CARS", - "hsn_code": "84073310" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 1,000 CC : FOR\nMOTOR CYCLES", - "hsn_code": "84073320" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 1,000 CC :\nOTHER", - "hsn_code": "84073390" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 1,000 CC:FOR MOTOR CARS", - "hsn_code": "84073410" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES -\nRECIPROCATING PISTON ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF\nCHAPTER 87: OF A CYLINDER CAPACITY EXCEEDING 1,000 CC:OTHER", - "hsn_code": "84073490" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES - OTHER\nENGINES: PETROL ENGINES", - "hsn_code": "84079010" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES - OTHER\nENGINES: KEROSENE ENGINES", - "hsn_code": "84079020" - }, - { - "description": "SPARK-IGNITION RECIPROCATING OR ROTARY INTERNAL COMBUSTION PISTON ENGINES - OTHER\nENGINES: OTHER", - "hsn_code": "84079090" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - MARINE PROPULSION ENGINES:OUTBOARD ENGINES", - "hsn_code": "84081010" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - MARINE PROPULSION ENGINES: OTHER OF A CYLINDER CAPACITY NOT EXCEEDING\n100 CC", - "hsn_code": "84081091" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - MARINE PROPULSION ENGINES: OTHER OF A CYLINDER CAPACITY EXCEEDING 100 CC\nBUT NOT EXCEEDING 250 CC", - "hsn_code": "84081092" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - MARINE PROPULSION ENGINES: OTHER OF A CYLINDER CAPACITY EXCEEDING 250 CC", - "hsn_code": "84081093" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF CHAPTER 87: OF\nCYLINDER CAPACITY NOT EXCEEDING 250 CC", - "hsn_code": "84082010" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - ENGINES OF A KIND USED FOR THE PROPULSION OF VEHICLES OF CHAPTER 87:\nENGINES OF CYLINDER CAPACITY EXCEEDING 250 CC", - "hsn_code": "84082020" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - OTHER ENGINES: STATIONARY ENGINES OF CYLINDER CAPACITY EXCEEDING 50 CC", - "hsn_code": "84089010" - }, - { - "description": "COMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES) - OTHER ENGINES: OTHER", - "hsn_code": "84089090" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 FOR AIRCRAFT ENGINES", - "hsn_code": "84091000" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: VALVES, INLET AND EXHAUST, PISTON, PISTON\nRINGS, PISTON ASSEMBLIES : VALVES, INLET AND EXHAUST", - "hsn_code": "84099111" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: VALVES, INLET AND EXHAUST, PISTON, PISTON\nRINGS, PISTON ASSEMBLIES : PISTONS", - "hsn_code": "84099112" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: VALVES, INLET AND EXHAUST, PISTON, PISTON\nRINGS, PISTON ASSEMBLIES : PISTON RINGS", - "hsn_code": "84099113" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: VALVES, INLET AND EXHAUST, PISTON, PISTON\nRINGS, PISTON ASSEMBLIES : PISTON ASSEMBLIES", - "hsn_code": "84099114" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: FUEL INJECTION EQUIPMENT EXCLUDING INJECTION\nPUMPS", - "hsn_code": "84099120" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: OTHER : OF PETROL ENGINES FOR MOTOR VEHICLES", - "hsn_code": "84099191" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: OTHER : OF OTHER PETROL ENGINES", - "hsn_code": "84099192" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: OTHER : OF KEROSENE ENGINES", - "hsn_code": "84099193" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: OTHER : OF GAS ENGINES", - "hsn_code": "84099194" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : 8409 91 - SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH SPARK IGNITION\nINTERNAL COMBUSTION PISTON ENGINES: OTHER : OTHER", - "hsn_code": "84099199" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : VALVES, INLET AND EXHAUST, PISTON, PISTON RINGS, PISTON\nASSEMBLIES : VALVE, INLET AND EXHAUST", - "hsn_code": "84099911" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : VALVES, INLET AND EXHAUST, PISTON, PISTON RINGS, PISTON\nASSEMBLIES :PISTONS", - "hsn_code": "84099912" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : VALVES, INLET AND EXHAUST, PISTON, PISTON RINGS, PISTON\nASSEMBLIES :PISTON RINGS", - "hsn_code": "84099913" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : VALVES, INLET AND EXHAUST, PISTON, PISTON RINGS, PISTON\nASSEMBLIES : PISTON ASSEMBLIES", - "hsn_code": "84099914" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : FUEL NOZZLES", - "hsn_code": "84099920" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : FUEL INJECTION EQUIPMENT EXCLUDING INJECTION PUMPS", - "hsn_code": "84099930" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : OTHER PARTS OF DIESEL ENGINE: OF DIESEL ENGINES FOR MOTOR\nVEHICLES", - "hsn_code": "84099941" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : OTHER PARTS OF DIESEL ENGINE: OF OUTBOARD ENGINE", - "hsn_code": "84099942" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : OTHER PARTS OF DIESEL ENGINE: OTHER", - "hsn_code": "84099949" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE ENGINES OF HEADING 8407 OR\n8408 - OTHER : OTHER : OTHER", - "hsn_code": "84099990" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - HYDRAULIC TURBINES\nAND WATER WHEELS : OF A POWER NOT EXCEEDING 1,000 KW", - "hsn_code": "84101100" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - HYDRAULIC TURBINES\nAND WATER WHEELS : OF A POWER EXCEEDING 1,000 KW BUT NOT EXCEEDING 10,000 KW: OF\nPOWER EXCEEDING 1,000 KW BUT NOT EXCEEDING 5,000 KW", - "hsn_code": "84101210" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - HYDRAULIC TURBINES\nAND WATER WHEELS : OF A POWER EXCEEDING 1,000 KW BUT NOT EXCEEDING 10,000 KW: OF\nPOWER EXCEEDING 5,000 KW BUT NOT EXCEEDING 10,000 KW", - "hsn_code": "84101220" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - OF A POWER EXCEEDING\n10,000 KW: OF POWER EXCEEDING 10,000 KW BUT NOT EXCEEDING 30,000 KW", - "hsn_code": "84101310" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - OF A POWER EXCEEDING\n10,000 KW: OF POWER EXCEEDING 30,000 KW BUT NOT EXCEEDING 80,000 KW", - "hsn_code": "84101320" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - OF A POWER EXCEEDING\n10,000 KW: OF POWER EXCEEDING 80,000 KW", - "hsn_code": "84101390" - }, - { - "description": "HYDRAULIC TURBINES, WATER WHEELS, AND REGULATORS THEREFOR - PARTS, INCLUDING\nREGULATORS", - "hsn_code": "84109000" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - TURBO-JETS: OF A THRUST NOT\nEXCEEDING 25KN", - "hsn_code": "84111100" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - TURBO-JETS: OF A THRUST\nEXCEEDING 25 KN", - "hsn_code": "84111200" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - TURBO-PROPELLERS: OF A\nPOWER NOT EXCEEDING 1,100 KW", - "hsn_code": "84112100" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - TURBO-PROPELLERS: OF A\nPOWER EXCEEDING 1,100 KW", - "hsn_code": "84112200" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES: OF A\nPOWER NOT EXCEEDING 5,000 KW", - "hsn_code": "84118100" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 5,000 KW BUT NOT EXCEEDING 15,000\nKW", - "hsn_code": "84118210" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 15,000 KW BUT NOT EXCEEDING 30,000\nKW", - "hsn_code": "84118220" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 30,000 KW BUT NOT EXCEEDING 60,000\nKW", - "hsn_code": "84118230" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 60,000 KW BUT NOT EXCEEDING 90,000\nKW", - "hsn_code": "84118240" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 90,000 KW BUT NOT EXCEEDING 1,15,000\nKW", - "hsn_code": "84118250" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - OTHER GAS TURBINES:- OF A\nPOWER EXCEEDING 5,000 KW: OF POWER EXCEEDING 1,15,000 KW", - "hsn_code": "84118260" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - PARTS: OF TURBO-JETS OR TURBO\nPROPELLERS", - "hsn_code": "84119100" - }, - { - "description": "TURBO-JETS, TURBO-PROPELLERS AND OTHER GAS TURBINES - PARTS: OTHER", - "hsn_code": "84119900" - }, - { - "description": "OTHER ENGINES AND MOTORS REACTION ENGINES OTHER THAN TURBO JETS", - "hsn_code": "84121000" - }, - { - "description": "OTHER ENGINES AND MOTORS - HYDRAULIC POWER ENGINES AND MOTORS: LINEAR ACTING\n(CYLINDERS)", - "hsn_code": "84122100" - }, - { - "description": "OTHER ENGINES AND MOTORS HYDRAULIC POWER ENGINES AND MOTORS: OTHER : HYDROJET\n(HYDRAULIC JET ENGINES)", - "hsn_code": "84122910" - }, - { - "description": "OTHER ENGINES AND MOTORS HYDRAULIC POWER ENGINES AND MOTORS: OTHER : OTHER", - "hsn_code": "84122990" - }, - { - "description": "OTHER ENGINES AND MOTORS - PNEUMATIC POWER ENGINES AND MOTORS: LINEAR ACTING\n(CYLINDERS)", - "hsn_code": "84123100" - }, - { - "description": "OTHER ENGINES AND MOTORS - PNEUMATIC POWER ENGINES AND MOTORS: OTHER", - "hsn_code": "84123900" - }, - { - "description": "OTHER ENGINES AND MOTORS OTHER: STEAM OR OTHER VAPOUR POWER : STATIONARY", - "hsn_code": "84128011" - }, - { - "description": "OTHER ENGINES AND MOTORS OTHER: STEAM OR OTHER VAPOUR POWER : OTHER", - "hsn_code": "84128019" - }, - { - "description": "OTHER ENGINES AND MOTORS OTHER: MOTORS, SPRING OPERATED EXCLUDING CLOCK AND\nWATCH MOVEMENTS", - "hsn_code": "84128020" - }, - { - "description": "OTHER ENGINES AND MOTORS OTHER: WIND TURBINE OR ENGINE", - "hsn_code": "84128030" - }, - { - "description": "OTHER ENGINES AND MOTORS OTHER: OTHER", - "hsn_code": "84128090" - }, - { - "description": "OTHER ENGINES AND MOTORS PARTS: OF STEAM ENGINES INCORPORATING BOILERS", - "hsn_code": "84129010" - }, - { - "description": "OTHER ENGINES AND MOTORS PARTS: OF OTHER STEAM ENGINES AND OTHER VAPOUR POWER\nUNITS NOT INCORPORATING BOILERS", - "hsn_code": "84129020" - }, - { - "description": "OTHER ENGINES AND MOTORS PARTS: OF HYDRAULIC ENGINES AND MOTORS", - "hsn_code": "84129030" - }, - { - "description": "OTHER ENGINES AND MOTORS PARTS: OTHER", - "hsn_code": "84129090" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PUMPS FITTED OR DESIGNED TO BE FITTED WITH A MEASURING DEVICE: 8413 11 -\nPUMPS FOR DISPENSING FUEL OR LUBRICANTS, OF THE TYPE USED IN FILLING STATIONS OR IN\nGARAGES: HAND PUMPS", - "hsn_code": "84131110" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PUMPS FITTED OR DESIGNED TO BE FITTED WITH A MEASURING DEVICE: 8413 11 -\nPUMPS FOR DISPENSING FUEL OR LUBRICANTS, OF THE TYPE USED IN FILLING STATIONS OR IN\nGARAGES: OTHER :PUMPS FOR DISPENSING FUEL", - "hsn_code": "84131191" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PUMPS FITTED OR DESIGNED TO BE FITTED WITH A MEASURING DEVICE: 8413 11 -\nPUMPS FOR DISPENSING FUEL OR LUBRICANTS, OF THE TYPE USED IN FILLING STATIONS OR IN\nGARAGES: OTHER :OTHER", - "hsn_code": "84131199" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PUMPS FITTED OR DESIGNED TO BE FITTED WITH A MEASURING DEVICE: OTHER :-\nOTHER: HAND PUMPS", - "hsn_code": "84131910" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PUMPS FITTED OR DESIGNED TO BE FITTED WITH A MEASURING DEVICE: OTHER :-\nOTHER: OTHER", - "hsn_code": "84131990" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - HAND PUMPS, OTHER THAN THOSE OF SUB-HEADING 8413 11 OR 8413 19", - "hsn_code": "84132000" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - FUEL, LUBRICATING OR COOLING MEDIUM PUMPS FOR INTERNAL COMBUSTION\nPISTON ENGINES: INJECTION PUMPS FOR DIESEL ENGINES", - "hsn_code": "84133010" - }, - { - "description": "- PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - FUEL, LUBRICATING OR COOLING MEDIUM PUMPS FOR INTERNAL COMBUSTION\nPISTON ENGINES: OIL PUMP", - "hsn_code": "84133020" - }, - { - "description": "- PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - FUEL, LUBRICATING OR COOLING MEDIUM PUMPS FOR INTERNAL COMBUSTION\nPISTON ENGINES: WATER PUMP", - "hsn_code": "84133030" - }, - { - "description": "- PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - FUEL, LUBRICATING OR COOLING MEDIUM PUMPS FOR INTERNAL COMBUSTION\nPISTON ENGINES: OTHER", - "hsn_code": "84133090" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS CONCRETE PUMPS", - "hsn_code": "84134000" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER RECIPROCATING POSITIVE DISPLACEMENT PUMPS: METERING AND DOSING\nPUMPS", - "hsn_code": "84135010" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER RECIPROCATING POSITIVE DISPLACEMENT PUMPS: PRIMARILY DESIGNED\nFOR HANDLING WATER : DEEP TUBE WELL TURBINE PUMP", - "hsn_code": "84135021" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER RECIPROCATING POSITIVE DISPLACEMENT PUMPS: PRIMARILY DESIGNED\nFOR HANDLING WATER : OTHER", - "hsn_code": "84135029" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER RECIPROCATING POSITIVE DISPLACEMENT PUMPS: OTHER", - "hsn_code": "84135090" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER ROTARY POSITIVE DISPLACEMENT PUMPS: GEAR TYPE PUMPS", - "hsn_code": "84136010" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER ROTARY POSITIVE DISPLACEMENT PUMPS: SCREW TYPE PUMPS", - "hsn_code": "84136020" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER ROTARY POSITIVE DISPLACEMENT PUMPS: OTHER", - "hsn_code": "84136090" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: PRIMARILY DESIGNED TO HANDLE WATER", - "hsn_code": "84137010" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: SINGLE AND MULTISTAGE CHEMICAL\nPROCESS PUMPS", - "hsn_code": "84137091" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: HORIZONTAL SPLIT CASING PUMPS", - "hsn_code": "84137092" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: HORIZONTAL SELF PRIMING PUMPS", - "hsn_code": "84137093" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: VERTICAL TURBINE DRIVEN PUMPS", - "hsn_code": "84137094" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: BOILER FEED PUMPS", - "hsn_code": "84137095" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: SLURRY PUMPS", - "hsn_code": "84137096" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: DREDGER PUMPS", - "hsn_code": "84137097" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER CENTRIFUGAL PUMPS: OTHER: OTHER", - "hsn_code": "84137099" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER PUMPS-LIQUID ELEVATORS: 8413 81 - PUMPS : GAS PUMPS", - "hsn_code": "84138110" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER PUMPS-LIQUID ELEVATORS: 8413 81 - PUMPS : HYDRAULIC RAM", - "hsn_code": "84138120" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER PUMPS-LIQUID ELEVATORS: 8413 81 - PUMPS : AXIAL FLOW AND MIXED\nFLOW VERTICAL PUMP DESIGNED PRIMARILY FOR HANDLING WATER", - "hsn_code": "84138130" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER PUMPS-LIQUID ELEVATORS: 8413 81 - PUMPS : OTHER", - "hsn_code": "84138190" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - OTHER PUMPS-LIQUID ELEVATORS: 8413 81 - LIQUID ELEVATORS", - "hsn_code": "84138200" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: 8413 91 - OF PUMPS: OF RECIPROCATING PUMPS", - "hsn_code": "84139110" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: 8413 91 - OF PUMPS: OF CENTRIFUGAL PUMPS", - "hsn_code": "84139120" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: 8413 91 - OF PUMPS: OF DEEP WELL TURBINE PUMPS AND OF OTHER\nROTARY PUMPS", - "hsn_code": "84139130" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: 8413 91 - OF PUMPS: OF HAND PUMP FOR HANDLING WATER", - "hsn_code": "84139140" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: 8413 91 - OF PUMPS: OTHER", - "hsn_code": "84139190" - }, - { - "description": "PUMPS FOR LIQUIDS, WHETHER OR NOT FITTED WITH A MEASURING DEVICE; LIQUID\nELEVATORS - PARTS: OF LIQUID ELEVATORS", - "hsn_code": "84139200" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS VACUUM\nPUMPS", - "hsn_code": "84141000" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - HAND OR\nFOOT-OPERATED AIR PUMPS : BICYCLE PUMPS", - "hsn_code": "84142010" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - HAND OR\nFOOT-OPERATED AIR PUMPS : OTHER HAND PUMPS", - "hsn_code": "84142020" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - HAND OR\nFOOT-OPERATED AIR PUMPS : OTHER", - "hsn_code": "84142090" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS\nCOMPRESSORS OF A KIND USED IN REFRIGERATING EQUIPMENT", - "hsn_code": "84143000" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - AIR\nCOMPRESSORS MOUNTED ON A WHEELED CHASSIS FOR TOWING: RECIPROCATING AIR\nCOMPRESSORS", - "hsn_code": "84144010" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - AIR\nCOMPRESSORS MOUNTED ON A WHEELED CHASSIS FOR TOWING: CENTRIFUGAL AIR\nCOMPRESSORS", - "hsn_code": "84144020" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - AIR\nCOMPRESSORS MOUNTED ON A WHEELED CHASSIS FOR TOWING: SCREW AIR COMPRESSORS", - "hsn_code": "84144030" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - AIR\nCOMPRESSORS MOUNTED ON A WHEELED CHASSIS FOR TOWING: OTHER", - "hsn_code": "84144090" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS FANS :\n8414 51 - TABLE, FLOOR, WALL, WINDOW, CEILING OR ROOF FANS, WITH A SELF-CONTAINED\nELECTRIC MOTOR OF AN OUTPUT NOT EXCEEDING 125 W: TABLE FANS", - "hsn_code": "84145110" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\n8414 51 - TABLE, FLOOR, WALL, WINDOW, CEILING OR ROOF FANS, WITH A SELF-CONTAINED\nELECTRIC MOTOR OF AN OUTPUT NOT EXCEEDING 125 W: CEILING FANS", - "hsn_code": "84145120" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\n8414 51 - TABLE, FLOOR, WALL, WINDOW, CEILING OR ROOF FANS, WITH A SELF-CONTAINED\nELECTRIC MOTOR OF AN OUTPUT NOT EXCEEDING 125 W: PEDESTAL FANS", - "hsn_code": "84145130" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\n8414 51 - TABLE, FLOOR, WALL, WINDOW, CEILING OR ROOF FANS, WITH A SELF-CONTAINED\nELECTRIC MOTOR OF AN OUTPUT NOT EXCEEDING 125 W: RAILWAY CARRIAGE FANS", - "hsn_code": "84145140" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\n8414 51 - TABLE, FLOOR, WALL, WINDOW, CEILING OR ROOF FANS, WITH A SELF-CONTAINED\nELECTRIC MOTOR OF AN OUTPUT NOT EXCEEDING 125 W: OTHER", - "hsn_code": "84145190" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\nOTHER: AIR CIRCULATOR", - "hsn_code": "84145910" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\nOTHER: BLOWERS, PORTABLE", - "hsn_code": "84145920" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\nOTHER: INDUSTRIAL FANS AND BLOWERS", - "hsn_code": "84145930" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - FANS :\nOTHER: OTHER", - "hsn_code": "84145990" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS HOODS\nHAVING A MAXIMUM HORIZONTAL SIDE NOT EXCEEDING 120 CM", - "hsn_code": "84146000" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - OTHER:\nGAS COMPRESSORS: OF A KIND USED IN AIR CONDITIONING EQUIPMENT", - "hsn_code": "84148011" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - OTHER:\nGAS COMPRESSORS: OTHER", - "hsn_code": "84148019" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - OTHER:\nFREE PISTON GENERATORS FOR GAS TURBINE", - "hsn_code": "84148020" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - OTHER:\nTURBO CHARGER", - "hsn_code": "84148030" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - OTHER:\nOTHER", - "hsn_code": "84148090" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF AIR OR VACUUM PUMPS AND COMPRESSORS: OF GAS COMPRESSORS OF A KIND USED IN\nREFRIGERATING AND AIR CONDITIONING APPLIANCES AND MACHINERY", - "hsn_code": "84149011" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF AIR OR VACUUM PUMPS AND COMPRESSORS: OF BICYCLE PUMPS", - "hsn_code": "84149012" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF AIR OR VACUUM PUMPS AND COMPRESSORS: OTHER", - "hsn_code": "84149019" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF FREE PISTON GENERATORS", - "hsn_code": "84149020" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF ELECTRIC FANS", - "hsn_code": "84149030" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOF INDUSTRIAL FANS, BLOWERS", - "hsn_code": "84149040" - }, - { - "description": "AIR OR VACUUM PUMPS, AIR OR OTHER GAS COMPRESSORS AND FANS; VENTILATING OR\nRECYCLING HOODS INCORPORATING A FAN, WHETHER OR NOT FITTED WITH FILTERS - PARTS :\nOTHER", - "hsn_code": "84149090" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED 8415 10 - WINDOW OR WALL TYPES, SELF\nCONTAINED OR SPLIT SYSTEM: SPLIT SYSTEM", - "hsn_code": "84151010" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED 8415 10 - WINDOW OR WALL TYPES, SELF\nCONTAINED OR SPLIT SYSTEM: OTHER", - "hsn_code": "84151090" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OF A KIND USED FOR PERSONS IN MOTOR\nVEHICLES : FOR BUSES", - "hsn_code": "84152010" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OF A KIND USED FOR PERSONS IN MOTOR\nVEHICLES : OTHER", - "hsn_code": "84152090" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : INCORPORATING A REFRIGERATING\nUNIT AND A VALVE FOR REVERSAL OF THE COOLING OR HEAT CYCLE (REVERSIBLE HEAT PUMPS):\nSPLIT AIR CONDITIONER TWO TONNES AND ABOVE", - "hsn_code": "84158110" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : INCORPORATING A REFRIGERATING\nUNIT AND A VALVE FOR REVERSAL OF THE COOLING OR HEAT CYCLE (REVERSIBLE HEAT PUMPS):\nOTHER", - "hsn_code": "84158190" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : OTHER, INCORPORATING A\nREFRIGERATING UNIT: SPLIT AIR CONDITIONER TWO TONNES AND ABOVE", - "hsn_code": "84158210" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : OTHER, INCORPORATING A\nREFRIGERATING UNIT: OTHER", - "hsn_code": "84158290" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : NOT INCORPORATING A\nREFRIGERATING UNIT : SPLIT AIR CONDITIONER TWO TONNES AND ABOVE", - "hsn_code": "84158310" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - OTHER : NOT INCORPORATING A\nREFRIGERATING UNIT : OTHER", - "hsn_code": "84158390" - }, - { - "description": "AIR CONDITIONING MACHINES, COMPRISING A MOTORDRIVEN FAN AND ELEMENTS FOR\nCHANGING THE TEMPERATURE AND HUMIDITY, INCLUDING THOSE MACHINES IN WHICH THE\nHUMIDITY CANNOT BE SEPARATELY REGULATED - PARTS", - "hsn_code": "84159000" - }, - { - "description": "FURNACE BURNERS FOR LIQUID FUEL, FOR PULVERISED SOLID FUEL OR FOR GAS; MECHANICAL\nSTOKERS, INCLUDING THEIR MECHANICAL GRATES, MECHANICAL ASH DISCHARGERS AND\nSIMILAR APPLIANCES - FURNACE BURNERS FOR LIQUID FUEL", - "hsn_code": "84161000" - }, - { - "description": "FURNACE BURNERS FOR LIQUID FUEL, FOR PULVERISED SOLID FUEL OR FOR GAS; MECHANICAL\nSTOKERS, INCLUDING THEIR MECHANICAL GRATES, MECHANICAL ASH DISCHARGERS AND\nSIMILAR APPLIANCES - OTHER FURNACE BURNERS, INCLUDING COMBINATION BURNERS", - "hsn_code": "84162000" - }, - { - "description": "FURNACE BURNERS FOR LIQUID FUEL, FOR PULVERISED SOLID FUEL OR FOR GAS; MECHANICAL\nSTOKERS, INCLUDING THEIR MECHANICAL GRATES, MECHANICAL ASH DISCHARGERS AND\nSIMILAR APPLIANCES - MECHANICAL STOKERS, MECHANICAL GRATES, MECHANICAL ASH\nDISCHARGERS AND SIMILAR APPLIANCES", - "hsn_code": "84163000" - }, - { - "description": "FURNACE BURNERS FOR LIQUID FUEL, FOR PULVERISED SOLID FUEL OR FOR GAS; MECHANICAL\nSTOKERS, INCLUDING THEIR MECHANICAL GRATES, MECHANICAL ASH DISCHARGERS AND\nSIMILAR APPLIANCES - PARTS", - "hsn_code": "84169000" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON\nELECTRIC - FURNACES AND OVENS FOR THE ROASTING, MELTING OR OTHER HEAT TREATMENT\nOF ORES, PYRITES OR OF METALS", - "hsn_code": "84171000" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON\nELECTRIC - BAKERY OVENS, INCLUDING BISCUIT OVENS", - "hsn_code": "84172000" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON\nELECTRIC - OTHER : FOR CEMENT INDUSTRY", - "hsn_code": "84178010" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON\nELECTRIC - OTHER : OTHER", - "hsn_code": "84178090" - }, - { - "description": "INDUSTRIAL OR LABORATORY FURNACES AND OVENS, INCLUDING INCINERATORS, NON\nELECTRIC - PARTS", - "hsn_code": "84179000" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 8418\n10 - COMBINED REFRIGERATOR-FREEZERS, FITTED WITH SEPARATE EXTERNAL DOORS:\nCOMMERCIAL TYPE", - "hsn_code": "84181010" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 8418\n10 - COMBINED REFRIGERATOR-FREEZERS, FITTED WITH SEPARATE EXTERNAL DOORS: OTHER", - "hsn_code": "84181090" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nREFRIGERATORS, HOUSEHOLD TYPE: COMPRESSION TYPE", - "hsn_code": "84182100" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nREFRIGERATORS, HOUSEHOLD TYPE: ABSORPTION/TYPE, ELECTRICAL", - "hsn_code": "84182200" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nREFRIGERATORS, HOUSEHOLD TYPE: OTHER", - "hsn_code": "84182900" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nFREEZERS OF THE CHEST TYPE, NOT EXCEEDING 800 L CAPACITY: COMMERCIAL TYPE ELECTRICAL", - "hsn_code": "84183010" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nFREEZERS OF THE CHEST TYPE, NOT EXCEEDING 800 L CAPACITY: OTHER", - "hsn_code": "84183090" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415-\nFREEZERS OF THE UPRIGHT TYPE, NOT EXCEEDING 900 L CAPACITY: ELECTRICAL", - "hsn_code": "84184010" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415-\nFREEZERS OF THE UPRIGHT TYPE, NOT EXCEEDING 900 L CAPACITY: OTHER", - "hsn_code": "84184090" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415 -\nOTHER FURNITURE (CHESTS, CABINETS, DISPLAY COUNTERS, SHOWCASES AND THE LIKE) FOR\nSTORAGE AND DISPLAY,INCORPORATING REFRIGERATING OR FREEZING EQUIPMENT? ;", - "hsn_code": "84185000" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS:--HEAT PUMPS OTHER THAN AIR\nCONDITIONING MACHINES OF HEADING 8415", - "hsn_code": "84186100" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: ICE MAKING MACHINERY", - "hsn_code": "84186910" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: WATER COOLER", - "hsn_code": "84186920" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: VENDING MACHINE, OTHER\nTHAN AUTOMATIC VENDING MACHINE", - "hsn_code": "84186930" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: REFRIGERATION EQUIPMENT\nOR DEVICES SPECIALLY USED IN LEATHER INDUSTRIES FOR MANUFACTURING OF LEATHER\nARTICLES", - "hsn_code": "84186940" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: REFRIGERATED FARM TANKS,\nINDUSTRIAL ICE CREAM FREEZER", - "hsn_code": "84186950" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415- OTHER\nREFRIGERATING OR FREEZING EQUIPMENT; HEAT PUMPS: OTHER: OTHER", - "hsn_code": "84186990" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415-\nPARTS: FURNITURE DESIGNED TO RECEIVE REFRIGERATING OR FREEZING EQUIPMENT", - "hsn_code": "84189100" - }, - { - "description": "REFRIGERATORS, FREEZERS AND OTHER REFRIGERATING OR FREEZING EQUIPMENT, ELECTRIC\nOR OTHER; HEAT PUMPS OTHER THAN AIR CONDITIONING MACHINES OF HEADING 8415-\nPARTS: OTHER", - "hsn_code": "84189900" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - INSTANTANEOUS OR STORAGE WATER HEATERS\nNON-ELECTRIC: 8419 11 - INSTANTANEOUS GAS WATER HEATERS : DOMESTIC TYPE", - "hsn_code": "84191110" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - INSTANTANEOUS OR STORAGE WATER HEATERS\nNON-ELECTRIC: 8419 11 - INSTANTANEOUS GAS WATER HEATERS : OTHER", - "hsn_code": "84191190" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - INSTANTANEOUS GAS WATER HEATERS : OTHER:\nDOMESTIC TYPE", - "hsn_code": "84191910" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - INSTANTANEOUS GAS WATER HEATERS : OTHER:\nOTHER", - "hsn_code": "84191920" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC- MEDICAL, SURGICAL OR LABORATORY\nSTERILISERS:AUTO CLAVES", - "hsn_code": "84192010" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC- MEDICAL, SURGICAL OR LABORATORY STERILISERS:\nOTHER", - "hsn_code": "84192090" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DRYERS: FOR AGRICULTURAL PRODUCTS", - "hsn_code": "84193100" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DRYERS: FOR WOOD, PAPER PULP, PAPER OR\nPAPER, BOARD", - "hsn_code": "84193200" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DRYERS: OTHER", - "hsn_code": "84193900" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DISTILLING OR RECTIFYING PLANT: FOR PETROLEUM\nREFINING", - "hsn_code": "84194010" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DISTILLING OR RECTIFYING PLANT: OTHER\nDISTILLING EQUIPMENT", - "hsn_code": "84194020" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - DISTILLING OR RECTIFYING PLANT: OTHER", - "hsn_code": "84194090" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - HEAT EXCHANGE UNITS: SHELL AND TUBE TYPE", - "hsn_code": "84195010" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - HEAT EXCHANGE UNITS: PLATE TYPE", - "hsn_code": "84195020" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - HEAT EXCHANGE UNITS: SPIRAL TYPE", - "hsn_code": "84195030" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - HEAT EXCHANGE UNITS: OTHER", - "hsn_code": "84195090" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC MACHINERY FOR LIQUEFYING AIR OR OTHER GASES", - "hsn_code": "84196000" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT: FOR\nMAKING HOT DRINKS OR FOR COOKING OR HEATING FOOD: FRIERS", - "hsn_code": "84198110" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT: FOR\nMAKING HOT DRINKS OR FOR COOKING OR HEATING FOOD: OTHER KITCHEN MACHINES", - "hsn_code": "84198120" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT: FOR\nMAKING HOT DRINKS OR FOR COOKING OR HEATING FOOD: OTHER", - "hsn_code": "84198190" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: PRESSURE VESSELS, REACTORS, COLUMNS OR TOWERS OR CHEMICAL STORAGE TANKS", - "hsn_code": "84198910" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: GLASS LINED EQUIPMENT", - "hsn_code": "84198920" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: AUTO CLAVES OTHER THAN FOR COOKING OR HEATING FOOD, NOT ELSEWHERE\nSPECIFIED OR INCLUDED", - "hsn_code": "84198930" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: COOLING TOWERS AND SIMILAR PLANTS FOR DIRECT COOLING (WITHOUT A\nSEPARATING WALL) BY MEANS OF RE-CIRCULATED WATER", - "hsn_code": "84198940" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: PASTEURIZERS", - "hsn_code": "84198950" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: PLANT GROWTH CHAMBERS AND ROOMS AND TISSUE CULTURE CHAMBERS AND\nROOMS HAVING TEMPERATURE, HUMIDITY OR LIGHT CONTROL", - "hsn_code": "84198960" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: APPARATUS FOR RAPID HEATING OF SEMI CONDUCTOR DEVICES; APPARATUS FOR\nCHEMICAL OR PHYSICAL VAPOUR DEPOSITION ON SEMICONDUCTOR WAFERS; APPARATUS FOR\nCHEMICAL VAPOUR DEPOSITION ON LCD SUBSTRATUS", - "hsn_code": "84198970" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: VACUUM VAPOUR PLANT FOR DEPOSITION OF METALS", - "hsn_code": "84198980" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - OTHER MACHINERY, PLANT AND EQUIPMENT -\nOTHER: OTHER", - "hsn_code": "84198990" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - PARTS: PARTS OF INSTANTANEOUS OR STORAGE\nWATER HEATERS (DOMESTIC TYPE)", - "hsn_code": "84199010" - }, - { - "description": "MACHINERY, PLANT OR LABORATORY EQUIPMENT, WHETHER OR NOT ELECTRICALLY HEATED\n(EXCLUDING FURNACES, OVENS AND OTHER EQUIPMENT OF HEADING 8514), FOR THE\nTREATMENT OF MATERIALS BY A PROCESS INVOLVING A CHANGE OF TEMPERATURE SUCH AS\nHEATING, COOKING, ROASTING, DISTILLING, RECTIFYING, STERILISING, PASTEURISING,\nSTEAMING, DRYING, EVAPORATING, VAPORISING, CONDENSING OR COOLING, OTHER THAN\nMACHINERY OR PLANT OF A KIND USED FOR DOMESTIC PURPOSES; INSTANTANEOUS OR\nSTORAGE WATER HEATERS, NON-ELECTRIC - PARTS: OTHER", - "hsn_code": "84199090" - }, - { - "description": "CALENDERING OR OTHER ROLLING MACHINES, OTHER THAN FOR METALS OR GLASS, AND\nCYLINDERS THEREFOR CALENDERING OR OTHER ROLLING MACHINES", - "hsn_code": "84201000" - }, - { - "description": "CALENDERING OR OTHER ROLLING MACHINES, OTHER THAN FOR METALS OR GLASS, AND\nCYLINDERS THEREFOR - PARTS: CYLINDERS", - "hsn_code": "84209100" - }, - { - "description": "CALENDERING OR OTHER ROLLING MACHINES, OTHER THAN FOR METALS OR GLASS, AND\nCYLINDERS THEREFOR - PARTS: OTHER", - "hsn_code": "84209900" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS: CREAM\nSEPARATORS", - "hsn_code": "84211100" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:\nCLOTHES DRYERS", - "hsn_code": "84211200" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nBOWL CENTRIFUGES", - "hsn_code": "84211910" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nBASKET CENTRIFUGES", - "hsn_code": "84211920" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nCONTINUOUS AUTOMATIC CENTRIFUGES", - "hsn_code": "84211930" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nSELF CLEANING CENTRIFUGES", - "hsn_code": "84211940" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nDECANTER CENTRIFUGES HORIZONTAL BOWL", - "hsn_code": "84211950" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:\nSCREW CONVEYOR CENTRIFUGES", - "hsn_code": "84211960" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:-\nOTHER : FOR CHEMICAL INDUSTRIES", - "hsn_code": "84211991" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS:- OTHER:-\nOTHER : OTHER", - "hsn_code": "84211999" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - - FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS - FOR FILTERING OR PURIFYING WATER : ION EXCHANGER PLANT OR APPARATUS", - "hsn_code": "84212110" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - - FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS - FOR FILTERING OR PURIFYING WATER :HOUSEHOLD TYPE FILTERS", - "hsn_code": "84212120" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - - FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS - FOR FILTERING OR PURIFYING WATER : OTHER", - "hsn_code": "84212190" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS: FOR FILTERING OR PURIFYING BEVERAGES OTHER THAN WATER", - "hsn_code": "84212200" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS: OIL OR PETROL-FILTERS FOR INTERNAL COMBUSTION ENGINES", - "hsn_code": "84212300" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR LIQUIDS: OTHER", - "hsn_code": "84212900" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR GASES: INTAKE AIR FILTERS FOR INTERNAL COMBUSTION ENGINES", - "hsn_code": "84213100" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR GASES: OTHER: AIR SEPARATORS TO BE EMPLOYED IN THE PROCESSING, SMELTING OR\nREFINING OF MINERALS, ORES OR METALS; AIR STRIPPERS", - "hsn_code": "84213910" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR GASES: OTHER: AIR PURIFIERS OR CLEANERS", - "hsn_code": "84213920" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES FILTERING OR PURIFYING MACHINERY AND APPARATUS\nFOR GASES: OTHER: OTHER", - "hsn_code": "84213990" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - PARTS: OF CENTRIFUGES, INCLUDING CENTRIFUGAL\nDRYERS", - "hsn_code": "84219100" - }, - { - "description": "CENTRIFUGES, INCLUDING CENTRIFUGAL DRYERS; FILTERING OR PURIFYING MACHINERY AND\nAPPARATUS, FOR LIQUIDS OR GASES - PARTS: OTHER", - "hsn_code": "84219900" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES - DISH WASHING MACHINES:\nOF THE HOUSEHOLD TYPE", - "hsn_code": "84221100" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES - DISH WASHING MACHINES:\nOTHER", - "hsn_code": "84221900" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES MACHINERY FOR CLEANING\nOR DRYING BOTTLES OR OTHER CONTAINERS", - "hsn_code": "84222000" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES MACHINERY FOR FILLING,\nCLOSING, SEALING OR LABELLING BOTTLES, CANS, BOXES, BAGS OR OTHER CONTAINERS;\nMACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND SIMILAR CONTAINERS; MACHINERY\nFOR AERATING BEVERAGES", - "hsn_code": "84223000" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES OTHER PACKING OR\nWRAPPING MACHINERY (INCLUDING HEAT SHRINK WRAPPING MACHINERY)", - "hsn_code": "84224000" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES - PARTS: OF MACHINERY FOR\nCLEANING OR DRYING BOTTLES OR OTHER CONTAINERS", - "hsn_code": "84229010" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES - PARTS: OF DISH WASHING\nMACHINES OF HOUSEHOLD TYPE", - "hsn_code": "84229020" - }, - { - "description": "DISH WASHING MACHINES; MACHINERY FOR CLEANING OR DRYING BOTTLES OR OTHER\nCONTAINERS; MACHINERY FOR FILLING, CLOSING, SEALING OR LABELLING BOTTLES, CANS,\nBOXES, BAGS OR OTHER CONTAINERS; MACHINERY FOR CAPSULING BOTTLES, JARS, TUBES AND\nSIMILAR CONTAINERS; OTHER PACKING OR WRAPPING MACHINERY (INCLUDING HEAT-SHRINK\nWRAPPING MACHINERY); MACHINERY FOR AERATING BEVERAGES - PARTS: OF OTHER\nMACHINERY", - "hsn_code": "84229090" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS PERSONAL WEIGHING MACHINES, INCLUDING BABY SCALES;\nHOUSEHOLD SCALES", - "hsn_code": "84231000" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS SCALES FOR CONTINUOUS WEIGHING OF GOODS ON\nCONVEYORS", - "hsn_code": "84232000" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS CONSTANT WEIGHT SCALES AND SCALES FORDISCHARGING A\nPREDETERMINED WEIGHT OF MATERIAL INTO A BAG OR CONTAINER, INCLUDING HOPPER\nSCALES", - "hsn_code": "84233000" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - OTHER WEIGHING MACHINERY- HAVING A MAXIMUM\nWEIGHING CAPACITY NOT EXCEEDING 30 KG : BEAM SCALE", - "hsn_code": "84238110" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - OTHER WEIGHING MACHINERY- HAVING A MAXIMUM\nWEIGHING CAPACITY NOT EXCEEDING 30 KG : OTHER", - "hsn_code": "84238190" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - OTHER WEIGHING MACHINERY- HAVING A MAXIMUM\nWEIGHING CAPACITY EXCEEDING 30 KG BUT NOT EXCEEDING 5,000 KG: BEAM SCALE", - "hsn_code": "84238210" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - OTHER WEIGHING MACHINERY- HAVING A MAXIMUM\nWEIGHING CAPACITY EXCEEDING 30 KG BUT NOT EXCEEDING 5,000 KG: OTHER", - "hsn_code": "84238290" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - OTHER WEIGHING MACHINERY- OTHER", - "hsn_code": "84238900" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - WEIGHING MACHINE WEIGHTS OF ALL KINDS; PARTS OF\nWEIGHING MACHINERY: WEIGHING MACHINE WEIGHTS OF ALL KINDS", - "hsn_code": "84239010" - }, - { - "description": "WEIGHING MACHINERY (EXCLUDING BALANCES OF A SENSITIVITY OF 5 CENTIGRAMS OR\nBETTER), INCLUDING WEIGHT OPERATED COUNTING OR CHECKING MACHINES; WEIGHING\nMACHINE WEIGHTS OF ALL KINDS - WEIGHING MACHINE WEIGHTS OF ALL KINDS; PARTS OF\nWEIGHING MACHINERY: PARTS OF WEIGHING MACHINERY", - "hsn_code": "84239020" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED", - "hsn_code": "84241000" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES SPRAY GUNS AND SIMILAR APPLIANCES", - "hsn_code": "84242000" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES STEAM OR SAND BLASTING MACHINES AND SIMILAR JET PROJECTING\nMACHINES", - "hsn_code": "84243000" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES- OTHER APPLIANCES: AGRICULTURAL OR HORTICULTURAL", - "hsn_code": "84248100" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES- OTHER APPLIANCES: OTHER: PAINTING EQUIPMENT, INCLUDING\nELECTROSTATIC PHOSPHATING AND POWDER COATING EQUIPMENT", - "hsn_code": "84248910" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES- OTHER APPLIANCES: OTHER: INDUSTRIAL BELLOWS", - "hsn_code": "84248920" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES- OTHER APPLIANCES: OTHER: OTHER", - "hsn_code": "84248990" - }, - { - "description": "MECHANICAL APPLIANCES (WHETHER OR NOT HANDOPERATED) FOR PROJECTING, DISPERSING\nOR SPRAYING LIQUIDS OR POWDERS; FIRE EXTINGUISHERS, WHETHER OR NOT CHARGED; SPRAY\nGUNS AND SIMILAR APPLIANCES; STEAM OR SAND BLASTING MACHINES AND SIMILAR JET\nPROJECTING MACHINES- PARTS", - "hsn_code": "84249000" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nPULLEY TACKLES AND HOISTS OTHER THAN SKIP HOISTS OR HOISTS OF A KIND USED FOR\nRAISING VEHICLES: POWERED BY ELECTRIC MOTOR: HOISTS", - "hsn_code": "84251110" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nPULLEY TACKLES AND HOISTS OTHER THAN SKIP HOISTS OR HOISTS OF A KIND USED FOR\nRAISING VEHICLES: POWERED BY ELECTRIC MOTOR: PULLEY TACKLE", - "hsn_code": "84251120" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nPULLEY TACKLES AND HOISTS OTHER THAN SKIP HOISTS OR HOISTS OF A KIND USED FOR\nRAISING VEHICLES: OTHER : HOISTS MACHINE", - "hsn_code": "84251910" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nPULLEY TACKLES AND HOISTS OTHER THAN SKIP HOISTS OR HOISTS OF A KIND USED FOR\nRAISING VEHICLES: OTHER : PULLEY TACKLE", - "hsn_code": "84251920" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS PIT\nHEAD WINDING GEAR; WINCHES SPECIALLY DESIGNED FOR USE UNDERGROUND", - "hsn_code": "84252000" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nOTHER WINCHES; CAPSTANS: POWERED BY ELECTRIC MOTOR", - "hsn_code": "84253100" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS -\nOTHER WINCHES; CAPSTANS: OTHER", - "hsn_code": "84253900" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS - JACKS;\nHOISTS OF A KIND USED FOR RAISING VEHICLES: BUILT-IN JACKING SYSTEM OF A TYPE USED IN\nGARAGES", - "hsn_code": "84254100" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS - JACKS;\nHOISTS OF A KIND USED FOR RAISING VEHICLES: OTHER JACKS AND HOISTS, HYDRAULIC", - "hsn_code": "84254200" - }, - { - "description": "PULLEY TACKLE AND HOISTS OTHER THAN SKIP HOISTS; WINCHES AND CAPSTANS; JACKS - JACKS;\nHOISTS OF A KIND USED FOR RAISING VEHICLES: OTHER", - "hsn_code": "84254900" - }, - { - "description": "SHIPRRICKS;CRANESINCLUDINGCABLECRANES;MOBILELIFTINGFRAMES,STRADDLECARRIERSAND\nWORKSTRUCKSFITTEDWITHACRANE\nOVERHEADTRAVELLINGCRANES,TRANSPORTERCRANES,GANTRYCRANES,BRIDGECRANES,MOBILE\nLIFTINGFRAMESANDSTRADDLECARRIERS", - "hsn_code": "84261100" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OVERHEAD TRAVELLING CRANES,\nTRANSPORTER CRANES, GANTRY CRANES, BRIDGE CRANES, MOBILE LIFTING FRAMES AND\nSTRADDLE CARRIERS: MOBILE LIFTING FRAMES ON TYRES AND STRADDLE CARRIERS", - "hsn_code": "84261200" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OVERHEAD TRAVELLING CRANES,\nTRANSPORTER CRANES, GANTRY CRANES, BRIDGE CRANES, MOBILE LIFTING FRAMES AND\nSTRADDLE CARRIERS: OTHER", - "hsn_code": "84261900" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - TOWER CRANES", - "hsn_code": "84262000" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - PORTAL OR PEDESTAL JIB CRANES", - "hsn_code": "84263000" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OTHER MACHINERY, SELF-PROPELLED:\nON TYRES", - "hsn_code": "84264100" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OTHER MACHINERY, SELF-PROPELLED:\nOTHER", - "hsn_code": "84264900" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OTHER MACHINERY : DESIGNED FOR\nMOUNTING ON ROAD VEHICLES", - "hsn_code": "84269100" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OTHER MACHINERY : OTHER: ROPEWAY\nAND TELPHERS", - "hsn_code": "84269910" - }, - { - "description": "SHIPS DERRICKS; CRANES INCLUDING CABLE CRANES; MOBILE LIFTING FRAMES, STRADDLE\nCARRIERS AND WORKS TRUCKS FITTED WITH A CRANE - OTHER MACHINERY : OTHER: OTHER", - "hsn_code": "84269990" - }, - { - "description": "FORK-LIFT TRUCKS; OTHER WORKS TRUCKS FITTED WITH LIFTING OR HANDLING EQUIPMENT\nSELF-PROPELLED TRUCKS POWERED BY AN ELECTRIC MOTOR", - "hsn_code": "84271000" - }, - { - "description": "8427 FORK-LIFT TRUCKS; OTHER WORKS TRUCKS FITTED WITH LIFTING OR HANDLING\nEQUIPMENT OTHER SELF-PROPELLED TRUCKS", - "hsn_code": "84272000" - }, - { - "description": "8427 FORK-LIFT TRUCKS; OTHER WORKS TRUCKS FITTED WITH LIFTING OR HANDLING\nEQUIPMENT OTHER TRUCKS", - "hsn_code": "84279000" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) 8428 10 - LIFTS AND SKIP HOISTS: LIFTS: LIFTS OF A KIND\nUSED IN BUILDINGS", - "hsn_code": "84281011" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) 8428 10 - LIFTS AND SKIP HOISTS: LIFTS: OTHER", - "hsn_code": "84281019" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - LIFTS AND SKIP HOISTS: SKIP HOISTS", - "hsn_code": "84281020" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - PNEUMATIC ELEVATORS AND CONVEYORS:\nCONVEYORS: BELT CONVEYORS", - "hsn_code": "84282011" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - PNEUMATIC ELEVATORS AND CONVEYORS:\nCONVEYORS: OTHER", - "hsn_code": "84282019" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - PNEUMATIC ELEVATORS AND CONVEYORS PNEUMATIC\nELEVATORS", - "hsn_code": "84282020" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER CONTINUOUS-ACTION ELEVATORS AND\nCONVEYORS, FOR GOODS OR MATERIALS: SPECIALLY DESIGNED FOR UNDERGROUND USE", - "hsn_code": "84283100" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER CONTINUOUS-ACTION ELEVATORS AND\nCONVEYORS, FOR GOODS OR MATERIALS: OTHER, BUCKET TYPE", - "hsn_code": "84283200" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER CONTINUOUS-ACTION ELEVATORS AND\nCONVEYORS, FOR GOODS OR MATERIALS: OTHER, BELT TYPE", - "hsn_code": "84283300" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER CONTINUOUS-ACTION ELEVATORS AND\nCONVEYORS, FOR GOODS OR MATERIALS: OTHER", - "hsn_code": "84283900" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - ESCALATORS AND MOVING WALKWAYS", - "hsn_code": "84284000" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - MINE WAGON PUSHERS, LOCOMOTIVE OR WAGON\nTRAVERSERS, WAGON TIPPERS AND SIMILAR RAILWAY WAGON HANDLING EQUIPMENT:\nWAGON MARSHALLING EQUIPMENT", - "hsn_code": "84285010" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - MINE WAGON PUSHERS, LOCOMOTIVE OR WAGON\nTRAVERSERS, WAGON TIPPERS AND SIMILAR RAILWAY WAGON HANDLING EQUIPMENT:\nWAGON TIPPERS", - "hsn_code": "84285020" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - MINE WAGON PUSHERS, LOCOMOTIVE OR WAGON\nTRAVERSERS, WAGON TIPPERS AND SIMILAR RAILWAY WAGON HANDLING EQUIPMENT: OTHER", - "hsn_code": "84285090" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - TELEFERICS, CHAIR-LIFTS, SKI-RAGLINES, TRACTION\nMECHANISMS FOR FUNICULARS", - "hsn_code": "84286000" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER MACHINERY : FOR COAL HANDLING", - "hsn_code": "84289010" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER MACHINERY : FOR ASH HANDLING", - "hsn_code": "84289020" - }, - { - "description": "OTHER LIFTING, HANDLING, LOADING OR UNLOADING MACHINERY (FOR EXAMPLE, LIFTS,\nESCALATORS, CONVEYORS, TELEFERICS) - OTHER MACHINERY : OTHER", - "hsn_code": "84289090" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nBULLDOZERS AND ANGLEDOZERS - TRACK LAYING :ANGLEDOZERS", - "hsn_code": "84291110" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nBULLDOZERS AND ANGLEDOZERS - TRACK LAYING : BULLDOZERS", - "hsn_code": "84291120" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nBULLDOZERS AND ANGLEDOZERS - OTHER: ANGLEDOZERS", - "hsn_code": "84291910" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nBULLDOZERS AND ANGLEDOZERS - OTHER:BULLDOZERS", - "hsn_code": "84291920" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS - GRADERS\nAND LEVELLERS", - "hsn_code": "84292000" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nSCRAPPERS", - "hsn_code": "84293000" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nTAMPING MACHINES AND ROAD ROLLERS :ROAD ROLLERS UPTO 5 TONS CAPACITY", - "hsn_code": "84294010" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nTAMPING MACHINES AND ROAD ROLLERS :ROAD ROLLERS ABOVE 5 TONS CAPACITY", - "hsn_code": "84294020" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nTAMPING MACHINES AND ROAD ROLLERS :TAMPING MACHINES", - "hsn_code": "84294030" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nMECHANICAL SHOVELS, EXCAVATORS AND SHOVEL LOADERS: FRONT-END SHOVEL LOADERS", - "hsn_code": "84295100" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nMECHANICAL SHOVELS, EXCAVATORS AND SHOVEL LOADERS: MACHINERY WITH A 360 DEGREES\nREVOLVING SUPERSTRUCTURE", - "hsn_code": "84295200" - }, - { - "description": "SELF-PROPELLED BULLDOZERS, ANGLEDOZERS, GRADERS, LEVELLERS, SCRAPERS, MECHANICAL\nSHOVELS, EXCAVATORS, SHOVEL LOADERS, TAMPING MACHINES AND ROAD ROLLERS -\nMECHANICAL SHOVELS, EXCAVATORS AND SHOVEL LOADERS: OTHER", - "hsn_code": "84295900" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - PILE-DRIVERS AND PILE-EXTRACTORS:\nPILE-DRIVERS", - "hsn_code": "84301010" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - PILE-DRIVERS AND PILE-EXTRACTORS:\nPILE-EXTRACTORS", - "hsn_code": "84301020" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - SNOW-PLOUGHS AND SNOW-BLOWERS", - "hsn_code": "84302000" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - COAL OR ROCK CUTTERS AND\nTUNNELING MACHINERY: SELF-PROPELLED: COAL CUTTERS", - "hsn_code": "84303110" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - COAL OR ROCK CUTTERS AND\nTUNNELING MACHINERY: SELF-PROPELLED: TUNNELING MACHINERY", - "hsn_code": "84303120" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - COAL OR ROCK CUTTERS AND\nTUNNELING MACHINERY: SELF-PROPELLED: OTHER", - "hsn_code": "84303190" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - COAL OR ROCK CUTTERS AND\nTUNNELING MACHINERY: OTHER", - "hsn_code": "84303900" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - - OTHER BORING OR SINKING\nMACHINERY - SELF-PROPELLED: TUBE WELL DRILLING AND CORE DRILLING MACHINERY", - "hsn_code": "84304110" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - - OTHER BORING OR SINKING\nMACHINERY - SELF-PROPELLED: PETROLEUM AND GAS WELL DRILLING MACHINERY", - "hsn_code": "84304120" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - - OTHER BORING OR SINKING\nMACHINERY - SELF-PROPELLED: ROCK DRILLING MACHINERY", - "hsn_code": "84304130" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - - OTHER BORING OR SINKING\nMACHINERY - SELF-PROPELLED: OTHER", - "hsn_code": "84304190" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - OTHER BORING OR SINKING MACHINERY\n- OTHER", - "hsn_code": "84304900" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - OTHER MACHINERY, SELF-PROPELLED:\nMINING MACHINERY (EXCLUDING COAL MINING)", - "hsn_code": "84305010" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - OTHER MACHINERY, SELF-PROPELLED:\nOTHER", - "hsn_code": "84305090" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - OTHER MACHINERY, NOT SELF\nPROPELLED: TAMPING OR COMPACTING MACHINERY", - "hsn_code": "84306100" - }, - { - "description": "OTHER MOVING, GRADING, LEVELLING, SCRAPING, EXCAVATING, TAMPING, COMPACTING,\nEXTRACTING OR BORING MACHINERY, FOR EARTH, MINERALS OR ORES; PILEDRIVERS AND PILE\nEXTRACTORS; SNOW-PLOUGHS AND SNOW-BLOWERS - OTHER MACHINERY, NOT SELF\nPROPELLED: OTHER", - "hsn_code": "84306900" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8425 :OF PULLEY TACKLE AND HOISTS, OTHER THAN SHIP\nHOISTS, WINCHES OR CAPSTANS", - "hsn_code": "84311010" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8425 :OTHER", - "hsn_code": "84311090" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8427 :OF FORK LIFT TRUCKS", - "hsn_code": "84312010" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8427 :OTHER", - "hsn_code": "84312090" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8428: OF LIFTS, SKIP HOISTS OR ESCALATORS", - "hsn_code": "84313100" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8428: OTHER : OF ELEVATORS, CONVEYORS AND MOVING\nEQUIPMENTS", - "hsn_code": "84313910" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8428: OTHER : OTHER", - "hsn_code": "84313990" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430 :BUCKETS, SHOVELS, GRABS AND GRIPS", - "hsn_code": "84314100" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430 :BULLDOZERS OR ANGLEDOZER BLADES", - "hsn_code": "84314200" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- PARTS OF BORING OR SINKING\nMACHINERY OF SUB-HEADING 8430 41 OR 8430 49: OF BORING OR SINKING MACHINERY, SELF\nPROPELLED", - "hsn_code": "84314310" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- PARTS OF BORING OR SINKING\nMACHINERY OF SUB-HEADING 8430 41 OR 8430 49: OTHER", - "hsn_code": "84314390" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- OTHER : OF ROAD ROLLERS,\nMECHANICALLY PROPELLED", - "hsn_code": "84314910" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- OTHER : OF SHIPS DERRICKS AND\nCRANES", - "hsn_code": "84314920" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- OTHER : OF OTHER EXCAVATING,\nLEVELLING, TAMPING OR EXCAVATING MACHINERY FOR EARTH, MINERAL OR ORES", - "hsn_code": "84314930" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- OTHER : OF PILE DRIVER, SNOW\nPLOUGH, NOT SELF- PROPELLED", - "hsn_code": "84314940" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINERY OF HEADINGS 8425 TO\n8430 - OF MACHINERY OF HEADING 8426, 8429 OR 8430- OTHER : OTHER", - "hsn_code": "84314990" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS 8432 10 - PLOUGHS: DISC PLOUGHS", - "hsn_code": "84321010" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS 8432 10 - PLOUGHS: OTHER TRACTOR\nPLOUGHS", - "hsn_code": "84321020" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS 8432 10 - PLOUGHS: OTHER", - "hsn_code": "84321090" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - HARROWS, SCARIFIERS, CULTIVATORS,\nWEEDERS AND HOES: DISC HARROWS", - "hsn_code": "84322100" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - HARROWS, SCARIFIERS, CULTIVATORS,\nWEEDERS AND HOES: OTHER: ROTARY HOES", - "hsn_code": "84322910" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - HARROWS, SCARIFIERS, CULTIVATORS,\nWEEDERS AND HOES: OTHER: OTHER", - "hsn_code": "84322990" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS SEEDERS, PLANTERS AND TRANSPLANTERS", - "hsn_code": "84323000" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS MANURE SPREADERS AND FERTILIZER\nDISTRIBUTORS", - "hsn_code": "84324000" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - OTHER MACHINERY: LAWN OR SPORTS\nGROUND ROLLERS", - "hsn_code": "84328010" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - OTHER MACHINERY: ROTARY TILLER", - "hsn_code": "84328020" - }, - { - "description": "AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - OTHER MACHINERY: OTHER", - "hsn_code": "84328090" - }, - { - "description": "90 AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - PARTS: PARTS OF AGRICULTURAL\nMACHINERY FALLING WITHIN HEADINGS 8432 10, 8432 21, 8432 29, 8432 30 AND 8432 40", - "hsn_code": "84329010" - }, - { - "description": "90 AGRICULTURAL, HORTICULTURAL OR FORESTRY MACHINERY FOR SOIL PREPARATION OR\nCULTIVATION; LAWN OR SPORTSGROUND ROLLERS - PARTS: OTHER", - "hsn_code": "84329090" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - MOWERS FOR LAWNS,\nPARKS OR SPORTS-GROUNDS - POWERED WITH THE CUTTING DEVICE ROTATING IN A\nHORIZONTAL PLANE: POWERED WITH 3 HP OR MORE", - "hsn_code": "84331110" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - MOWERS FOR LAWNS,\nPARKS OR SPORTS-GROUNDS - POWERED WITH THE CUTTING DEVICE ROTATING IN A\nHORIZONTAL PLANE: OTHER", - "hsn_code": "84331190" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - MOWERS FOR LAWNS,\nPARKS OR SPORTS-GROUNDS - OTHER: NON-POWERED MOWERS, HAVING WIDTH OF 75 CM OR\nMORE", - "hsn_code": "84331910" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - MOWERS FOR LAWNS,\nPARKS OR SPORTS-GROUNDS - OTHER: OTHER", - "hsn_code": "84331990" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - OTHER MOWERS,\nINCLUDING CUTTER BARS FOR TRACTOR MOUNTING", - "hsn_code": "84332000" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - OTHER HAYMAKING\nMACHINERY", - "hsn_code": "84333000" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - STRAW OR FODDER\nBALERS, INCLUDING PICK-UP BALERS", - "hsn_code": "84334000" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- OTHER HARVESTING\nMACHINERY; THRESHING MACHINERY: COMBINE HARVESTER- THRESHERS", - "hsn_code": "84335100" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- OTHER HARVESTING\nMACHINERY; THRESHING MACHINERY : OTHER THRESHING MACHINERY", - "hsn_code": "84335200" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- OTHER HARVESTING\nMACHINERY; THRESHING MACHINERY :ROOT OR TUBER HARVESTING MACHINES", - "hsn_code": "84335300" - }, - { - "description": "HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- OTHER HARVESTING\nMACHINERY; THRESHING MACHINERY: OTHER", - "hsn_code": "84335900" - }, - { - "description": "60 HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- MACHINES FOR\nCLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER AGRICULTURAL PRODUCE: MACHINES\nFOR CLEANING", - "hsn_code": "84336010" - }, - { - "description": "60 HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437- MACHINES FOR\nCLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER AGRICULTURAL PRODUCE: MACHINES\nFOR SORTING OR GRADING", - "hsn_code": "84336020" - }, - { - "description": "60 HARVESTING OR THRESHING MACHINERY, INCLUDING STRAW OR FODDER BALERS; GRASS OR\nHAY MOWERS; MACHINES FOR CLEANING, SORTING OR GRADING EGGS, FRUIT OR OTHER\nAGRICULTURAL PRODUCE, OTHER THAN MACHINERY OF HEADING 8437 - PARTS", - "hsn_code": "84339000" - }, - { - "description": "MILKING MACHINES AND DAIRY MACHINERY MILKING MACHINES", - "hsn_code": "84341000" - }, - { - "description": "MILKING MACHINES AND DAIRY MACHINERY DAIRY MACHINERY", - "hsn_code": "84342000" - }, - { - "description": "MILKING MACHINES AND DAIRY MACHINERY - PARTS :OF MILKING MACHINERY", - "hsn_code": "84349010" - }, - { - "description": "MILKING MACHINES AND DAIRY MACHINERY - PARTS :OF DAIRY MACHINERY", - "hsn_code": "84349020" - }, - { - "description": "PRESSES, CRUSHERS AND SIMILAR MACHINERY USED IN THE MANUFACTURE OF WINE, CIDER,\nFRUIT JUICES OR SIMILAR BEVERAGES -MACHINERY", - "hsn_code": "84351000" - }, - { - "description": "PRESSES, CRUSHERS AND SIMILAR MACHINERY USED IN THE MANUFACTURE OF WINE, CIDER,\nFRUIT JUICES OR SIMILAR BEVERAGES - PARTS", - "hsn_code": "84359000" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - MACHINERY FOR PREPARING ANIMAL\nFEEDING STUFFS", - "hsn_code": "84361000" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - POULTRY-KEEPING MACHINERY; POULTRY\nINCUBATORS AND BROODERS :POULTRY INCUBATORS AND BROODERS", - "hsn_code": "84362100" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - POULTRY-KEEPING MACHINERY; POULTRY\nINCUBATORS AND BROODERS: OTHER", - "hsn_code": "84362900" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - OTHER MACHINERY: GERMINATION\nPLANT FITTED WITH MECHANICAL AND THERMAL EQUIPMENT", - "hsn_code": "84368010" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - OTHER MACHINERY: OTHER", - "hsn_code": "84368090" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - PARTS: OF POULTRY-KEEPING\nMACHINERY OR POULTRY INCUBATORS AND BROODERS", - "hsn_code": "84369100" - }, - { - "description": "OTHER AGRICULTURAL, HORTICULTURAL, FORESTRY, POULTRY-KEEPING OR BEE-KEEPING\nMACHINERY, INCLUDING GERMINATION PLANT FITTED WITH MECHANICAL OR THERMAL\nEQUIPMENT; POULTRY INCUBATORS AND BROODERS - PARTS: OTHER", - "hsn_code": "84369900" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY MACHINES FOR\nCLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS VEGETABLES", - "hsn_code": "84371000" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - OTHER\nMACHINERY: FLOUR MILL MACHINERY", - "hsn_code": "84378010" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - OTHER\nMACHINERY: RICE MILL MACHINERY", - "hsn_code": "84378020" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - OTHER\nMACHINERY: OTHER", - "hsn_code": "84378090" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - PARTS : OF FLOUR\nMILL MACHINERY", - "hsn_code": "84379010" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - PARTS : OF RICE\nMILL MACHINERY", - "hsn_code": "84379020" - }, - { - "description": "MACHINES FOR CLEANING, SORTING OR GRADING SEED, GRAIN OR DRIED LEGUMINOUS\nVEGETABLES; MACHINERY USED IN THE MILLING INDUSTRY OR FOR THE WORKING OF CEREALS\nOR DRIED LEGUMINOUS VEGETABLES, OTHER THAN FARM-TYPE MACHINERY - PARTS : OTHER", - "hsn_code": "84379090" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nBAKERY MACHINERY AND MACHINERY FOR THE MANUFACTURE OF MACARONI, SPAGHETTI OR\nSIMILAR PRODUCTS: BAKERY MACHINERY", - "hsn_code": "84381010" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nBAKERY MACHINERY AND MACHINERY FOR THE MANUFACTURE OF MACARONI, SPAGHETTI OR\nSIMILAR PRODUCTS: MACHINERY FOR MANUFACTURE OF MACARONI OR SPAGHETTI OR SIMILAR\nPRODUCTS", - "hsn_code": "84381020" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nMACHINERY FOR THE MANUFACTURE OF CONFECTIONERY, COCOA OR CHOCOLATE", - "hsn_code": "84382000" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nMACHINERY FOR SUGAR MANUFACTURE: SUGAR CANE CRUSHERS", - "hsn_code": "84383010" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nMACHINERY FOR SUGAR MANUFACTURE: OTHER", - "hsn_code": "84383090" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nBREWERY MACHINERY", - "hsn_code": "84384000" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nMACHINERY FOR THE PREPARATION OF MEAT OR POULTRY", - "hsn_code": "84385000" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 -\nMACHINERY FOR THE PREPARATION OF FRUITS, NUTS OR VEGETABLES", - "hsn_code": "84386000" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nOTHER MACHINERY: AUXILIARY EQUIPMENT FOR EXTRUSION COOKING PLANT", - "hsn_code": "84388010" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nOTHER MACHINERY: FOR PRODUCTION OF SOYA MILK OR OTHER SOYA PRODUCTS (OTHER THAN\nSOYA OIL)", - "hsn_code": "84388020" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nOTHER MACHINERY: DIFFUSING MACHINES (DIFFUSERS)", - "hsn_code": "84388030" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nOTHER MACHINERY: TEA LEAF ROLLING OR CUTTING MACHINE", - "hsn_code": "84388040" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - -\nOTHER MACHINERY: OTHER", - "hsn_code": "84388090" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - PARTS:\nOF SUGAR MANUFACTURING MACHINERY", - "hsn_code": "84389010" - }, - { - "description": "MACHINERY, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER, FOR THE INDUSTRIAL\nPREPARATION OR MANUFACTURE OF FOOD OR DRINK, OTHER THAN MACHINERY FOR THE\nEXTRACTION OR PREPARATION OF ANIMAL OR FIXED VEGETABLE FATS OR OILS 8438 10 - PARTS:\nOF OTHER MACHINERY", - "hsn_code": "84389090" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC\nMATERIAL", - "hsn_code": "84391000" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD MACHINERY FOR MAKING PAPER OR PAPERBOARD", - "hsn_code": "84392000" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD - MACHINERY FOR FINISHING PAPER OR PAPERBOARD:\nPAPER LAMINATING MACHINE", - "hsn_code": "84393010" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD - MACHINERY FOR FINISHING PAPER OR PAPERBOARD:\nOTHER", - "hsn_code": "84393090" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD - PARTS: OF MACHINERY FOR MAKING PULP OF FIBROUS\nCELLULOSIC MATERIAL", - "hsn_code": "84399100" - }, - { - "description": "MACHINERY FOR MAKING PULP OF FIBROUS CELLULOSIC MATERIAL OR FOR MAKING OR\nFINISHING PAPER OR PAPERBOARD - PARTS: OTHER", - "hsn_code": "84399900" - }, - { - "description": "BOOK-BINDING MACHINERY, INCLUDING BOOK-SEWING MACHINES - MACHINERY: WIRE\nSTITCHING MACHINERY, SINGLE HEADED", - "hsn_code": "84401010" - }, - { - "description": "BOOK-BINDING MACHINERY, INCLUDING BOOK-SEWING MACHINES - MACHINERY: OTHER", - "hsn_code": "84401090" - }, - { - "description": "BOOK-BINDING MACHINERY, INCLUDING BOOK-SEWING MACHINES - PARTS", - "hsn_code": "84409000" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - CUTTING MACHINES: PAPER CUTTING MACHINES,\nEXCLUDING MACHINES WITH DEVICES SUCH AS AUTOMATIC PROGRAMME CUTTING OR THREE\nKNIFE TRIMMERS", - "hsn_code": "84411010" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - CUTTING MACHINES: OTHER", - "hsn_code": "84411090" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - MACHINES FOR MAKING BAGS, SACKS OR ENVELOPES", - "hsn_code": "84412000" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - MACHINES FOR MAKING CARTONS, BOXES, CASES, TUBES,\nDRUMS OR SIMILAR CONTAINERS, OTHER THAN BY MOULDING", - "hsn_code": "84413000" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - MACHINES FOR MOULDING ARTICLES IN PAPER PULP, PAPER\nOR PAPERBOARD", - "hsn_code": "84414000" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - OTHER MACHINERY", - "hsn_code": "84418000" - }, - { - "description": "OTHER MACHINERY FOR MAKING UP PAPER PULP, PAPER OR PAPERBOARD, INCLUDING\nCUTTING MACHINES OF ALL KINDS - PARTS", - "hsn_code": "84419000" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) PHOTOTYPE-SETTING AND COMPOSING MACHINES", - "hsn_code": "84421000" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) MACHINERY, APPARATUS AND EQUIPMENT FOR TYPE-SETTING OR COMPOSING\nBY OTHER PROCESSES, WITH OR WITHOUT FOUNDING DEVICE: STEREO-TYPING APPARATUS", - "hsn_code": "84422010" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) - MACHINERY, APPARATUS AND EQUIPMENT FOR TYPE-SETTING OR COMPOSING\nBY OTHER PROCESSES, WITH OR WITHOUT FOUNDING DEVICE: TYPE-CASTING (FOUNDING)\nMACHINES", - "hsn_code": "84422020" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) - MACHINERY, APPARATUS AND EQUIPMENT FOR TYPE-SETTING OR COMPOSING\nBY OTHER PROCESSES, WITH OR WITHOUT FOUNDING DEVICE: TYPE-SETTING MACHINES", - "hsn_code": "84422030" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) - MACHINERY, APPARATUS AND EQUIPMENT FOR TYPE-SETTING OR COMPOSING\nBY OTHER PROCESSES, WITH OR WITHOUT FOUNDING DEVICE: OTHER", - "hsn_code": "84422090" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR\nPOLISHED);MACHINERY, APPARATUS AND EQUIPMENT:--- BRASS RULES", - "hsn_code": "84423010" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR\nPOLISHED);MACHINERY, APPARATUS AND EQUIPMENT:---CHASES", - "hsn_code": "84423020" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR\nPOLISHED);MACHINERY, APPARATUS AND EQUIPMENT:---OTHER", - "hsn_code": "84423090" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED);-\nPARTS OF THE FOREGOING MACHINERY, APPARATUS OR EQUIPMENT", - "hsn_code": "84424000" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):--- PLATES AND CYLINDERS", - "hsn_code": "84425010" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):-- LITHOGRAPHIC PLATES", - "hsn_code": "84425020" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):--- PLATE, CYLINDER AND LITHOGRAPHIC STONES PREPARED FOR PRINTING\nPURPOSES:---- PLATE AND CYLINDER FOR TEXTILE PRINTING MACHINE", - "hsn_code": "84425031" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) - PRINTING TYPE, BLOCKS, PLATES, CYLINDERS AND OTHER PRINTING\nCOMPONENTS; BLOCKS, PLATES, CYLINDERS AND LITHOGRAPHIC STONES, PREPARED FOR\nPRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED) - PLATE, BLOCK,\nCYLINDER AND LITHOGRAPHIC STONES PREPARED FOR PRINTING PURPOSES: PRINTING BLOCKS", - "hsn_code": "84425032" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):--- PLATE, CYLINDER AND LITHOGRAPHIC STONES PREPARED FOR PRINTING\nPURPOSES:---- OTHER", - "hsn_code": "84425039" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED): --- HIGHLY POLISHED COPPER SHEETS FOR MAKING BLOCKS", - "hsn_code": "84425040" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):--- HIGHLY POLISHED ZINC SHEETS FOR MAKING PROCESS BLOCKS", - "hsn_code": "84425050" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE-TOOLS OF HEADINGS\n8456 TO 8465), FOR TYPE-FOUNDING OR TYPE-SETTING, FOR PREPARING OR MAKING PRINTING\nBLOCKS, PLATES, CYLINDERS OR OTHER PRINTING COMPONENTS; PRINTING TYPE, BLOCKS,\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; BLOCKS, PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED) - PRINTING TYPE, BLOCKS, PLATES, CYLINDERS AND OTHER PRINTING\nCOMPONENTS; BLOCKS, PLATES, CYLINDERS AND LITHOGRAPHIC STONES, PREPARED FOR\nPRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED): HIGHLY POLISHED ZINC\nSHEETS FOR MAKING PROCESS BLOCKS", - "hsn_code": "84425060" - }, - { - "description": "MACHINERY, APPARATUS AND EQUIPMENT (OTHER THAN THE MACHINE TOOLS OF HEADINGS\n8456 TO 8465) FOR PREPARING OR MAKING PLATES, PRINTING COMPONENTS; PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND LITHOGRAPHIC\nSTONES, PREPARED FOR PRINTING PURPOSES (FOR EXAMPLE, PLANED, GRAINED OR POLISHED); -\nPLATES, CYLINDERS AND OTHER PRINTING COMPONENTS; PLATES, CYLINDERS AND\nLITHOGRAPHIC STONES, PREPARED FOR PRINTING PURPOSES ( FOR EXAMPLE, PLANED, GRAINED\nOR POLISHED):--- OTHER", - "hsn_code": "84425090" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OFFSET PRINTING MACHINERY, REEL-FED", - "hsn_code": "84431100" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OFFSET PRINTING MACHINERY, SHEET-FED\nOFFICE TYPE (USING SHEETS WITH ONE SIDE NOT EXCEEDING 22 CM AND THE OTHER SIDE NOT\nEXCEEDING 36 CM IN THE UNFOLDED STATE)", - "hsn_code": "84431200" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER OFFSET PRINTING MACHINERY", - "hsn_code": "84431300" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- LETTERPRESS PRINTING MACHINERY, REEL FED,\nEXCLUDING FLEXOGRAPHIC PRINTING", - "hsn_code": "84431400" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- LETTERPRESS PRINTING MACHINERY, OTHER\nTHAN REEL FED, EXCLUDING FLEXOGRAPHIC PRINTING", - "hsn_code": "84431500" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- FLEXOGRAPHIC PRINTING MACHINERY", - "hsn_code": "84431600" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- GRAVURE PRINTING MACHINERY", - "hsn_code": "84431700" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OFFSET PRINTING MACHINERY: OTHER", - "hsn_code": "84431900" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER:---- FLAT BED PRINTING PRESSES", - "hsn_code": "84431910" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER: --- PLATEN PRINTING PRESSES", - "hsn_code": "84431920" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER:--- PROOF PRESSES", - "hsn_code": "84431930" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : --- MACHINERY FOR PRINTING REPETITIVE WORD\nOR DESIGN OR COLOUR: ---- ON COTTON TEXTILE", - "hsn_code": "84431941" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : --- MACHINERY FOR PRINTING REPETITIVE WORD\nOR DESIGN OR COLOUR: ---- OTHER", - "hsn_code": "84431949" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : --- MACHINERY FOR PRINTING REPETITIVE WORD\nOR DESIGN OR COLOUR: --- OTHER", - "hsn_code": "84431990" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - LETTERPRESS PRINTING MACHINERY, EXCLUDING FLEXOGRAPHIC PRINTING: REEL\nFED", - "hsn_code": "84432100" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - LETTERPRESS PRINTING MACHINERY, EXCLUDING FLEXOGRAPHIC PRINTING: OTHER", - "hsn_code": "84432900" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING FLEXOGRAPHIC PRINTING MACHINERY", - "hsn_code": "84433000" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :- OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED:-- MACHINES WHICH PERFORM TWO\nOR MORE OF THE FUNCTIONS OF PRINTING, COPYING OR FACSIMILE TRANSMISSION, CAPABLE\nOF CONNECTING TO AN AUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK", - "hsn_code": "84433100" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK:--- LINE PRINTER", - "hsn_code": "84433210" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK:--- DOT MATRIX PRINTER", - "hsn_code": "84433220" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- LETTER QUALITY DAISY\nWHEEL PRINTER", - "hsn_code": "84433230" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- LASER JET PRINTER", - "hsn_code": "84433240" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- INK JET PRINTER", - "hsn_code": "84433250" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- FACSIMILE MACHINE", - "hsn_code": "84433260" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- OTHER", - "hsn_code": "84433290" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :OTHER, CAPABLE OF CONNECTING TO AN\nAUTOMATIC DATA PROCESSING MACHINE OR TO A NETWORK: --- OTHER", - "hsn_code": "84433910" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- ELECTROSTATIC PHOTOCOPYING\nAPPARATUS OPERATED BY REPRODUCING THE ORIGINAL IMAGE DIRECTLY ONTO THE COPY\n(DIRECT PROCESS)", - "hsn_code": "84433920" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- ELECTROSTATIC PHOTOCOPYING\nAPPARATUS OPERATED BY REPRODUCING THE ORIGINAL IMAGE VIA AN INTERMEDIATE ONTO\nTHE COPY (INDIRECT PROCESS)", - "hsn_code": "84433930" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- OTHER PHOTOCOPYING APPARATUS\nINCORPORATING AN OPTICAL SYSTEM", - "hsn_code": "84433940" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- OTHER PHOTOCOPYING APPARATUS\nOF THE CONTACT TYPE", - "hsn_code": "84433950" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- THERMO-COPYING APPARATUS", - "hsn_code": "84433960" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- FACSIMILE MACHINE NOT CAPABLE OF\nGETTING CONNECTED TO AUTOMATIC DATA PROCESSING MACHINE", - "hsn_code": "84433970" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- OTHER", - "hsn_code": "84433990" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING:- GRAVURE PRINTING MACHINERY", - "hsn_code": "84434000" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: INK-JET PRINTING MACHINES", - "hsn_code": "84435100" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: FLAT BED PRINTING PRESSES", - "hsn_code": "84435910" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: PLATEN PRINTING PRESSES", - "hsn_code": "84435920" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: PROOF PRESSES", - "hsn_code": "84435930" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: MACHINERY FOR PRINTING REPETITIVE\nWORD OR DESIGN OR COLOUR: ON COTTON TEXTILE", - "hsn_code": "84435941" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: MACHINERY FOR PRINTING REPETITIVE\nWORD OR DESIGN OR COLOUR: OTHER", - "hsn_code": "84435949" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: OTHER: OTHER", - "hsn_code": "84435990" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: MACHINES FOR USES ANCILLARY TO PRINTING:\nAUTOMATIC FEEDERS AND SHEET DELIVERING MACHINE", - "hsn_code": "84436010" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: MACHINES FOR USES ANCILLARY TO PRINTING:\nSERIAL NUMBERING MACHINES", - "hsn_code": "84436020" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: MACHINES FOR USES ANCILLARY TO PRINTING:\nFOLDERS, GUZMNOS PERFORATORS AND STAPLERS", - "hsn_code": "84436030" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - OTHER PRINTING MACHINERY: MACHINES FOR USES ANCILLARY TO PRINTING:\nOTHER", - "hsn_code": "84436090" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - - PARTS: PARTS OF PRINTING PRESSES", - "hsn_code": "84439010" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF THE PRINTING TYPE, BLOCKS, PLATES,\nCYLINDERS AND OTHER PRINTING COMPONENTS OF HEADING 8442; INK-JET PRINTING\nMACHINES, OTHER THAN THOSE OF HEADING 8471; MACHINES FOR USES ANCILLARY TO\nPRINTING - - PARTS: OTHER", - "hsn_code": "84439090" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 :-- PARTS AND ACCESSORIES OF PRINTING\nMACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER PRINTING\nCOMPONENTS OF HEADING 8442", - "hsn_code": "84439100" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER :--- AUTOMATIC DOCUMENT FEEDERES\nOF COPYING MACHINES", - "hsn_code": "84439910" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER --- PAPER FEEDERS OF COPYING\nMACHINES", - "hsn_code": "84439920" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER : --- SORTERS OF COPYING MACHINES", - "hsn_code": "84439930" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER :--- OTHER PARTS OF COPYING MACHINES", - "hsn_code": "84439940" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER :--- PARTS AND ACCESSORIES OF GOODS\nOF SUBHEADINGS 844331,844332", - "hsn_code": "84439950" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPARTS AND ACCESSORIES -- OTHER --- OF SUBHEADING 8443 31, 8443 32 ---- INK CARTRIDGES,\nWITH PRINT HEAD ASSEMBLY", - "hsn_code": "84439951" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES AND\nFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPARTS AND ACCESSORIES -- OTHER --- OF SUBHEADING 8443 31, 8443 32 ---- INK SPRAY NOZZLE", - "hsn_code": "84439952" - }, - { - "description": "INK SPRAY NOZZLE", - "hsn_code": "84439953" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPARTS AND ACCESSORIES -- OTHER --- OF SUBHEADING 8443 31, 8443 32 ---- OTHER", - "hsn_code": "84439959" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPARTS AND ACCESSORIES -- OTHER --- OF SUBHEADING 8443 39", - "hsn_code": "84439960" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER : --- PARTS AND ACCESSORIES OF GOODS\nOF SUBHEADING 844339", - "hsn_code": "84439970" - }, - { - "description": "PRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND\nOTHERPRINTING COMPONENTS OF HEADING 8442; OTHER PRINTERS, COPYING MACHINES\nANDFACSIMILE MACHINES, WHETHER OR NOT COMBINED; PARTS AND ACCESSORIES THEREOF -\nPRINTING MACHINERY USED FOR PRINTING BY MEANS OF PLATES, CYLINDERS AND OTHER\nPRINTING COMPONENTS OF HEADING 8442 : -- OTHER :--- OTHER", - "hsn_code": "84439990" - }, - { - "description": "MACHINES FOR EXTRUDING, DRAWING, TEXTURING OR CUTTING MAN-MADE TEXTILE\nMATERIALS 8444 00 - MACHINES FOR EXTRUDING, DRAWING, TEXTURING OR CUTTING MAN\nMADE TEXTILE MATERIALS: MACHINES FOR EXTRUDING MAN-MADE TEXTILE MATERIALS", - "hsn_code": "84440010" - }, - { - "description": "MACHINES FOR EXTRUDING, DRAWING, TEXTURING OR CUTTING MAN-MADE TEXTILE\nMATERIALS 8444 00 - MACHINES FOR EXTRUDING, DRAWING, TEXTURING OR CUTTING MAN\nMADE TEXTILE MATERIALS: OTHER", - "hsn_code": "84440090" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- CARDING MACHINES : COTTON CARDING MACHINES", - "hsn_code": "84451110" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- CARDING MACHINES : OTHER", - "hsn_code": "84451190" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- COMBING MACHINES: COTTON COMBING MACHINES", - "hsn_code": "84451210" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- COMBING MACHINES: OTHER", - "hsn_code": "84451290" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- DRAWING OR ROVING MACHINES", - "hsn_code": "84451300" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:COTTON PROCESSING MACHINES (INCLUDING COTTON GINNING MACHINE)", - "hsn_code": "84451910" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:JUTE FIBRE PROCESSING MACHINES", - "hsn_code": "84451920" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:REGENERATED FIBRES AND SYNTHETIC FIBRES PROCESSING MACHINES", - "hsn_code": "84451930" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:SILK PROCESSING MACHINES", - "hsn_code": "84451940" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:WOOL PROCESSING MACHINES", - "hsn_code": "84451950" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:BLOWROOM MACHINES", - "hsn_code": "84451960" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - MACHINES FOR PREPARING TEXTILE FIBRES\n- OTHER:OTHER", - "hsn_code": "84451990" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : COTTON\nSPINNING MACHINES : DRAWING FRAMES", - "hsn_code": "84452011" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : COTTON\nSPINNING MACHINES : INTERMEDIATE FRAMES", - "hsn_code": "84452012" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : COTTON\nSPINNING MACHINES : RING FRAMES", - "hsn_code": "84452013" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : COTTON\nSPINNING MACHINES : ROVING FRAMES", - "hsn_code": "84452014" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : COTTON\nSPINNING MACHINES : OTHER", - "hsn_code": "84452019" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : JUTE FIBRES\nSPINNING MACHINES", - "hsn_code": "84452020" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES :\nREGENERATED FIBRES AND SYNTHETIC FIBRES SPINNING MACHINES", - "hsn_code": "84452030" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : SILK FIBRES\nSPINNING MACHINES", - "hsn_code": "84452040" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : WOOL\nSPINNING MACHINES", - "hsn_code": "84452050" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE SPINNING MACHINES : OTHER", - "hsn_code": "84452090" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : COTTON FIBRE DOUBLING OR TWISTING MACHINES : DOUBLING FRAMES", - "hsn_code": "84453011" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : COTTON FIBRE DOUBLING OR TWISTING MACHINES : OTHER", - "hsn_code": "84453019" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : JUTE FIBRE DOUBLING OR TWISTING MACHINES", - "hsn_code": "84453020" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : REGENERATED FIBRE AND SYNTHETIC FIBRE YARN DOUBLING OR TWISTING\nMACHINES", - "hsn_code": "84453030" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : SILK FIBRE DOUBLING OR TWISTING MACHINES", - "hsn_code": "84453040" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : WOOL FIBRE DOUBLING OR TWISTING MACHINES", - "hsn_code": "84453050" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE DOUBLING OR TWISTING\nMACHINES : OTHER FIBRE DOUBLING OR TWISTING MACHINES", - "hsn_code": "84453090" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: COTTON FIBRE WINDING (INCLUDING WEFT-WINDING) OR\nREELING MACHINES, AUTOMATIC OR OTHERWISE", - "hsn_code": "84454010" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: JUTE FIBRE REELING (INCLUDING WEFT-WINDING)\nMACHINES", - "hsn_code": "84454020" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: REGENERATED FIBRES YARN AND SYNTHETIC FIBRES YARN\nREELING (INCLUDING WEFT-WINDING) MACHINES", - "hsn_code": "84454030" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: SILK FIBRE REELING (INCLUDING WEFT-WINDING) MACHINES", - "hsn_code": "84454040" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: WOOL FIBRE REELING (INCLUDING WEFT-WINDING)\nMACHINES", - "hsn_code": "84454050" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - TEXTILE WINDING (INCLUDING WEFT\nWINDING) OR REELING MACHINES: OTHER", - "hsn_code": "84454090" - }, - { - "description": "MACHINES FOR PREPARING TEXTILE FIBRES; SPINNING, DOUBLING OR TWISTING MACHINES\nAND OTHER MACHINERY FOR PRODUCING TEXTILE YARNS; TEXTILE REELING OR WINDING\n(INCLUDING WEFT-WINDING) MACHINES AND MACHINES FOR PREPARING TEXTILE YARNS FOR\nUSE ON THE MACHINES OF HEADING 8446 OR 8447 - OTHER", - "hsn_code": "84459000" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM:\nCOTTON WEAVING MACHINES : AUTOMATIC, POWERLOOM", - "hsn_code": "84461011" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM:\nCOTTON WEAVING MACHINES : PLAIN, POWERLOOM", - "hsn_code": "84461012" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM:\nCOTTON WEAVING MACHINES : OTHER", - "hsn_code": "84461019" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM:\nOTHER", - "hsn_code": "84461090" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM,\nSHUTTLE TYPE - POWER LOOMS: COTTON WEAVING MACHINES, AUTOMATIC", - "hsn_code": "84462110" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM,\nSHUTTLE TYPE - POWER LOOMS: OTHER", - "hsn_code": "84462190" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM,\nSHUTTLE TYPE - OTHER : COTTON WEAVING MACHINES", - "hsn_code": "84462910" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH NOT EXCEEDING 30 CM,\nSHUTTLE TYPE - OTHER : OTHER", - "hsn_code": "84462990" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH EXCEEDING 30 CM,\nSHUTTLELESS TYPE: COTTON WEAVING MACHINES : AUTOMATIC, POWERLOOM", - "hsn_code": "84463011" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH EXCEEDING 30 CM,\nSHUTTLELESS TYPE: COTTON WEAVING MACHINES :PLAIN, POWERLOOM", - "hsn_code": "84463012" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH EXCEEDING 30 CM,\nSHUTTLELESS TYPE: COTTON WEAVING MACHINES : OTHER", - "hsn_code": "84463019" - }, - { - "description": "WEAVING MACHINES (LOOMS) - FOR WEAVING FABRICS OF A WIDTH EXCEEDING 30 CM,\nSHUTTLELESS TYPE: OTHER", - "hsn_code": "84463090" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER NOT EXCEEDING 165 MM: WOOL\nKNITTING MACHINES : HAND KNITTING MACHINES", - "hsn_code": "84471111" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER NOT EXCEEDING 165 MM: WOOL\nKNITTING MACHINES : OTHER", - "hsn_code": "84471119" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER NOT EXCEEDING 165 MM: COTTON\nHOSIERY MACHINES", - "hsn_code": "84471120" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER NOT EXCEEDING 165 MM: OTHER", - "hsn_code": "84471190" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER EXCEEDING 165 MM: WOOL\nKNITTING MACHINES: HAND KNITTING MACHINES", - "hsn_code": "84471211" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER EXCEEDING 165 MM: WOOL\nKNITTING MACHINES: OTHER", - "hsn_code": "84471219" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER EXCEEDING 165 MM: COTTON\nHOSIERY MACHINES", - "hsn_code": "84471220" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING -\nCIRCULAR KNITTING MACHINES - WITH CYLINDER DIAMETER EXCEEDING 165 MM: OTHER", - "hsn_code": "84471290" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - FLAT\nKNITING MACHINES; STITCH-BONDING MACHINES: HAND KNITTING MACHINES FOR WOOL", - "hsn_code": "84472010" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - FLAT\nKNITING MACHINES; STITCH-BONDING MACHINES: OTHER KNITTING MACHINES FOR WOOL", - "hsn_code": "84472020" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - FLAT\nKNITING MACHINES; STITCH-BONDING MACHINES: COTTON HOSIERY MACHINES", - "hsn_code": "84472030" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - FLAT\nKNITING MACHINES; STITCH-BONDING MACHINES: OTHER", - "hsn_code": "84472090" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - OTHER:\nMACHINES FOR MAKING OF TULLE AND LACE", - "hsn_code": "84479010" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - OTHER:\nMACHINES FOR MAKING EMBROIDERY", - "hsn_code": "84479020" - }, - { - "description": "KNITTING MACHINES, STITCH-BONDING MACHINES AND MACHINES FOR MAKING GIMPED YARN,\nTULLE, LACE, EMBROIDERY, TRIMMINGS, BRAID OR NET AND MACHINES FOR TUFTING - OTHER:\nOTHER", - "hsn_code": "84479030" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - AUXILIARY MACHINERY FOR MACHINES OF\nHEADING 8444, 8445, 8446 OR 8447: DOBBIES AND JACQUARDS; CARD REDUCING, COPYING,\nPUNCHING OR ASSEMBLING MACHINES FOR USE THEREWITH: JACQUARDS AND HARNESS LINER\nCARDS FOR COTTON TEXTILE MACHINERY", - "hsn_code": "84481110" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - AUXILIARY MACHINERY FOR MACHINES OF\nHEADING 8444, 8445, 8446 OR 8447: DOBBIES AND JACQUARDS; CARD REDUCING, COPYING,\nPUNCHING OR ASSEMBLING MACHINES FOR USE THEREWITH: OTHER", - "hsn_code": "84481190" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - AUXILIARY MACHINERY FOR MACHINES OF\nHEADING 8444, 8445, 8446 OR 8447: OTHER", - "hsn_code": "84481900" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8444 OR OF THEIR AUXILIARY MACHINERY", - "hsn_code": "84482000" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: CARD CLOTHING", - "hsn_code": "84483100" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OF MACHINES FOR PREPARING TEXTILE\nFIBRES, OTHER THAN CARD CLOTHING: FOR COTTON PROCESSING MACHINES", - "hsn_code": "84483210" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OF MACHINES FOR PREPARING TEXTILE\nFIBRES, OTHER THAN CARD CLOTHING: FOR JUTE PROCESSING MACHINES", - "hsn_code": "84483220" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OF MACHINES FOR PREPARING TEXTILE\nFIBRES, OTHER THAN CARD CLOTHING: FOR SILK AND MANMADE (REGENERATED AND\nSYNTHETIC FIBRES PROCESSING MACHINES)", - "hsn_code": "84483230" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OF MACHINES FOR PREPARING TEXTILE\nFIBRES, OTHER THAN CARD CLOTHING: FOR WOOL PROCESSING MACHINES", - "hsn_code": "84483240" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OF MACHINES FOR PREPARING TEXTILE\nFIBRES, OTHER THAN CARD CLOTHING: OTHER", - "hsn_code": "84483290" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: SPINDLES, SPINDLE FLYERS, SPINNING\nRINGS AND RING TRAVELLERS: FOR COTTON SPINNING MACHINES", - "hsn_code": "84483310" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: SPINDLES, SPINDLE FLYERS, SPINNING\nRINGS AND RING TRAVELLERS:FOR JUTE SPINNING MACHINES", - "hsn_code": "84483320" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: SPINDLES, SPINDLE FLYERS, SPINNING\nRINGS AND RING TRAVELLERS:FOR SILK AND MAN- MADE (REGENERATED AND SYNTHETIC) FIBRE\nSPINNING MACHINES", - "hsn_code": "84483330" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: SPINDLES, SPINDLE FLYERS, SPINNING\nRINGS AND RING TRAVELLERS:FOR WOOL SPINNING MACHINES", - "hsn_code": "84483340" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: SPINDLES, SPINDLE FLYERS, SPINNING\nRINGS AND RING TRAVELLERS:FOR OTHER TEXTILE FIBRE SPINNING MACHINES", - "hsn_code": "84483390" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OTHER: COMBS FOR COTTON TEXTILE\nMACHINERY", - "hsn_code": "84483910" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OTHER: GILLS FOR GILL BOXES", - "hsn_code": "84483920" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8445 OR OF THEIR AUXILIARY MACHINERY: OTHER: OTHER", - "hsn_code": "84483990" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES: OF COTTON\nWEAVING MACHINERY", - "hsn_code": "84484110" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES:OF JUTE\nWEAVING MACHINERY", - "hsn_code": "84484120" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES: OF SILK AND\nMAN-MADE FIBRES WEAVING MACHINERY", - "hsn_code": "84484130" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES: OF WOOL\nWEAVING MACHINERY", - "hsn_code": "84484140" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES:OF OTHER\nTEXTILE FIBRES WEAVING MACHINERY", - "hsn_code": "84484150" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES: OF AUXILIARY\nMACHINERY OF HEADING 8448", - "hsn_code": "84484160" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY : 8448 41 - SHUTTLES:OTHER", - "hsn_code": "84484190" - }, - { - "description": "42 AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447\n(FOR EXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - REEDS FOR LOOMS, HEALDS AND\nHEALD-FRAMES: HEALDS (EXCLUDING WIRE HEALDS) AND REEDS FOR COTTON MACHINERY", - "hsn_code": "84484210" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - REEDS FOR LOOMS, HEALDS AND\nHEALD-FRAMES: HEALDS, WIRE", - "hsn_code": "84484220" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - REEDS FOR LOOMS, HEALDS AND\nHEALD-FRAMES: OTHER", - "hsn_code": "84484290" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: PARTS OF COTTON WEAVING\nMACHINERY", - "hsn_code": "84484910" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: PARTS OF JUTE WEAVING\nMACHINERY", - "hsn_code": "84484920" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: PARTS OF SILK AND MAN\nMADE FIBRES WEAVING MACHINERY", - "hsn_code": "84484930" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: PARTS OF WOOL WEAVING\nMACHINERY", - "hsn_code": "84484940" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: PARTS OF OTHER TEXTILE\nWEAVING MACHINERY", - "hsn_code": "84484950" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF WEAVING\nMACHINES (LOOMS) OR OF THEIR AUXILIARY MACHINERY - OTHER: OTHER", - "hsn_code": "84484990" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8447 OR OF THEIR AUXILIARY MACHINERY: 8448 51 - SINKERS, NEEDLES AND OTHER\nARTICLES USED IN FORMING STITCHES: OF COTTON HOSIERY MACHINE", - "hsn_code": "84485110" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8447 OR OF THEIR AUXILIARY MACHINERY: 8448 51 - SINKERS, NEEDLES AND OTHER\nARTICLES USED IN FORMING STITCHES: OF WOOL KNITTING MACHINES", - "hsn_code": "84485120" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8447 OR OF THEIR AUXILIARY MACHINERY: 8448 51 - SINKERS, NEEDLES AND OTHER\nARTICLES USED IN FORMING STITCHES: OF MACHINES FOR TULLE, LACE", - "hsn_code": "84485130" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8447 OR OF THEIR AUXILIARY MACHINERY: 8448 51 - SINKERS, NEEDLES AND OTHER\nARTICLES USED IN FORMING STITCHES: OTHER", - "hsn_code": "84485190" - }, - { - "description": "AUXILIARY MACHINERY FOR USE WITH MACHINES OF HEADING 8444, 8445, 8446 OR 8447 (FOR\nEXAMPLE, DOBBIES, JACQUARDS, AUTOMATIC STOP MOTIONS, SHUTTLE CHANGING\nMECHANISMS); PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE\nMACHINES OF THIS HEADING OR OF HEADING 8444, 8445, 8446 OR 8447 (FOR EXAMPLE,\nSPINDLES AND SPINDLE FLYERS, CARD CLOTHING, COMBS, EXTRUDING NIPPLES, SHUTTLES,\nHEALDS AND HEALD FRAMES, HOSIERY NEEDLES) - PARTS AND ACCESSORIES OF MACHINES OF\nHEADING 8447 OR OF THEIR AUXILIARY MACHINERY: 8448 51 OTHER", - "hsn_code": "84485900" - }, - { - "description": "MACHINERY FOR THE MANUFACTURE OR FINISHING OF FELT OR NONWOVENS IN THE PIECE OR\nIN SHAPES, INCLUDING MACHINERY FOR MAKING FELT HATS; BLOCKS FOR MAKING HATS 8449\n00 - MACHINERY FOR THE MANUFACTURE OR FINISHING OF FELT OR NONWOVENS IN THE PIECE\nOR IN SHAPES, INCLUDING MACHINERY FOR MAKING FELT HATS; BLOCKS FOR MAKING HATS:\nMACHINERY FOR MANUFACTURE OR FINISHING OF FELT IN PIECE OR IN SHAPES (INCLUDING\nFELT HAT-MAKING MACHINES AND HAT MAKING BLOCKS)", - "hsn_code": "84490010" - }, - { - "description": "MACHINERY FOR THE MANUFACTURE OR FINISHING OF FELT OR NONWOVENS IN THE PIECE OR\nIN SHAPES, INCLUDING MACHINERY FOR MAKING FELT HATS; BLOCKS FOR MAKING HATS 8449\n00 - MACHINERY FOR THE MANUFACTURE OR FINISHING OF FELT OR NONWOVENS IN THE PIECE\nOR IN SHAPES, INCLUDING MACHINERY FOR MAKING FELT HATS; BLOCKS FOR MAKING HATS:\nOTHER", - "hsn_code": "84490090" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY - MACHINES, EACH OF A DRY LINEN CAPACITY NOT EXCEEDING 10 KG: FULLY\nAUTOMATIC MACHINES", - "hsn_code": "84501100" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY - MACHINES, EACH OF A DRY LINEN CAPACITY NOT EXCEEDING 10 KG: OTHER\nMACHINES, WITH BUILT-IN CENTRIFUGAL DRIER", - "hsn_code": "84501200" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY - MACHINES, EACH OF A DRY LINEN CAPACITY NOT EXCEEDING 10 KG: OTHER", - "hsn_code": "84501900" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY MACHINES, EACH OF A DRY LINEN CAPACITY EXCEEDING 10 KG", - "hsn_code": "84502000" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY - PARTS: PARTS OF HOUSEHOLD TYPE MACHINES", - "hsn_code": "84509010" - }, - { - "description": "HOUSEHOLD OR LAUNDRY-TYPE WASHING MACHINES, INCLUDING MACHINES WHICH BOTH\nWASH AND DRY - PARTS: OTHER", - "hsn_code": "84509090" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - DRY-CLEANING\nMACHINES: DRY-CLEANING MACHINES FOR COTTON TEXTILE", - "hsn_code": "84511010" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - DRY-CLEANING\nMACHINES:OTHER", - "hsn_code": "84511090" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- DRYING\nMACHINES:EACH OF A DRY LINEN CAPACITY NOT EXCEEDING10 KG", - "hsn_code": "84512100" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- DRYING\nMACHINES:OTHER", - "hsn_code": "84512900" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - IRONING\nMACHINES AND PRESSES (INCLUDING FUSING PRESSES): HAND IRONING PRESS", - "hsn_code": "84513010" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - IRONING\nMACHINES AND PRESSES (INCLUDING FUSING PRESSES): OTHER", - "hsn_code": "84513090" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- WASHING,\nBLEACHING OR DYEING MACHINES: BLEACHING MACHINE:FOR COTTON TEXTILE", - "hsn_code": "84514011" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- WASHING,\nBLEACHING OR DYEING MACHINES: BLEACHING MACHINE:OTHER", - "hsn_code": "84514019" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- WASHING,\nBLEACHING OR DYEING MACHINES: DYEING MACHINES: FOR COTTON TEXTILE", - "hsn_code": "84514021" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS- WASHING,\nBLEACHING OR DYEING MACHINES: DYEING MACHINES: FOR OTHER TEXTILE", - "hsn_code": "84514029" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - WASHING,\nBLEACHING OR DYEING MACHINES: OTHER: FOR WASHING AND CLEANING FOR WOOLLEN\nTEXTILE", - "hsn_code": "84514091" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - WASHING,\nBLEACHING OR DYEING MACHINES: OTHER: OTHER", - "hsn_code": "84514099" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - MACHINES FOR\nREELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS", - "hsn_code": "84515000" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY: SIZING AND DRESSING MACHINES: FOR COTTON TEXTILE", - "hsn_code": "84518011" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY: SIZING AND DRESSING MACHINES: OTHER", - "hsn_code": "84518019" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY: FINISHING MACHINES: FOR COATING OR IMPREGNATING YARNOR FABRICS", - "hsn_code": "84518021" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY: FINISHING MACHINES: OTHER FINISHING PROCESSES FOR COTTON TEXTILE", - "hsn_code": "84518022" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY: FINISHING MACHINES: OTHER", - "hsn_code": "84518029" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS - OTHER\nMACHINERY - OTHER", - "hsn_code": "84518090" - }, - { - "description": "MACHINERY (OTHER THAN MACHINES OF HEADING 8450) FOR WASHING, CLEANING,\nWRINGING, DRYING, IRONING, PRESSING (INCLUDING FUSING PRESSES), BLEACHING, DYEING,\nDRESSING, FINISHING, COATING OR IMPREGNATING TEXTILE YARNS, FABRICS OR MADE UP\nTEXTILE ARTICLES AND MACHINES FOR APPLYING THE PASTE TO THE BASE FABRIC OR OTHER\nSUPPORT USED IN THE MANUFACTURE OF FLOOR COVERINGS SUCH AS LINOLEUM; MACHINES\nFOR REELING, UNREELING, FOLDING, CUTTING OR PINKING TEXTILE FABRICS PARTS", - "hsn_code": "84519000" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nSEWING MACHINES OF THE HOUSEHOLD TYPE: COMPLETE, WITH STAND OR TABLE:WITH\nELECTRONIC CONTROLS OR ELECTRIC MOTORS", - "hsn_code": "84521011" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nSEWING MACHINES OF THE HOUSEHOLD TYPE: COMPLETE, WITH STAND OR TABLE:HAND\nOPERATED", - "hsn_code": "84521012" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nSEWING MACHINES OF THE HOUSEHOLD TYPE: COMPLETE, WITH STAND OR TABLE:OTHER", - "hsn_code": "84521019" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES\n8452 10 - SEWING MACHINES OF THE HOUSEHOLD TYPE:- WITHOUT STAND OR TABLE (HEADS):\nWITH ELECTRONIC CONTROLS OR ELECTRIC MOTORS", - "hsn_code": "84521021" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES\n8452 10 - SEWING MACHINES OF THE HOUSEHOLD TYPE:- WITHOUT STAND OR TABLE (HEADS):\nHAND OPERATED", - "hsn_code": "84521022" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES\n8452 10 - SEWING MACHINES OF THE HOUSEHOLD TYPE:- WITHOUT STAND OR TABLE (HEADS):\nOTHER", - "hsn_code": "84521029" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nOTHER SEWING MACHINES: AUTOMATIC UNITS: INDUSTRIAL SEWING MACHINES HAVING A\nMOTOR OF 150 WATTS CAPACITY AND ABOVE AND HAVING A SPEED OF 1,500 STITCHES PER\nMINUTE OR MORE", - "hsn_code": "84522110" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nOTHER SEWING MACHINES: AUTOMATIC UNITS: OTHER WITH ELECTRONIC CONTROLS OR\nELECTRIC MOTORS", - "hsn_code": "84522120" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nOTHER SEWING MACHINES: AUTOMATIC UNITS: OTHER", - "hsn_code": "84522190" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES\nOTHER", - "hsn_code": "84522900" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nSEWING MACHINE NEEDLES : FOR HOUSEHOLD TYPE SEWING MACHINES", - "hsn_code": "84523010" - }, - { - "description": "SEWING MACHINES, OTHER THAN BOOK-SEWING MACHINES OF HEADING 8440; FURNITURE,\nBASES AND COVERS SPECIALLY DESIGNED FOR SEWING MACHINES; SEWING MACHINE NEEDLES -\nSEWING MACHINE NEEDLES : OTHER", - "hsn_code": "84523090" - }, - { - "description": "FURNITURE, BASES AND COVERS", - "hsn_code": "84529011" - }, - { - "description": "PARTS OF FURNITURE, BASES AND COVER FOR SEWING MACHINES", - "hsn_code": "84529019" - }, - { - "description": "OF HOUSEHOLD SEWING MACHINES", - "hsn_code": "84529091" - }, - { - "description": "OTHER", - "hsn_code": "84529099" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR\nMAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER\nTHAN SEWING MACHINES - MACHINERY FOR PREPARING, TANNING OR WORKINGHIDES, SKINS\nOR LEATHER", - "hsn_code": "84531000" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR\nMAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER\nTHAN SEWING MACHINES - MACHINERY FOR MAKING OR REPAIRING FOOTWEAR", - "hsn_code": "84532000" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR\nMAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER\nTHAN SEWING MACHINES - OTHER MACHINERY", - "hsn_code": "84538000" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR\nMAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER\nTHAN SEWING MACHINES - PARTS : OF BOOT AND SHOE MANUFACTURING MACHINERY", - "hsn_code": "84539010" - }, - { - "description": "MACHINERY FOR PREPARING, TANNING OR WORKING HIDES, SKINS OR LEATHER OR FOR\nMAKING OR REPAIRING FOOTWEAR OR OTHER ARTICLES OF HIDES, SKINS OR LEATHER, OTHER\nTHAN SEWING MACHINES - PARTS : OTHER", - "hsn_code": "84539090" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES CONVERTERS", - "hsn_code": "84541000" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES - INGOT MOULDS AND LADLES : LADLES", - "hsn_code": "84542010" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES - INGOT MOULDS AND LADLES : INGOT MOULDS", - "hsn_code": "84542020" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES - CASTING MACHINES: DIE-CASTING MACHINES", - "hsn_code": "84543010" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES - CASTING MACHINES: CONTINUOUS CASTING\nMACHINES", - "hsn_code": "84543020" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES - CASTING MACHINES: OTHER", - "hsn_code": "84543090" - }, - { - "description": "CONVERTERS, LADLES, INGOT MOULDS AND CASTING MACHINES, OF A KIND USED IN\nMETALLURGY OR IN METAL FOUNDRIES PARTS", - "hsn_code": "84549000" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR TUBE MILLS", - "hsn_code": "84551000" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR - OTHER ROLLING MILLS: HOT OR COMBINATION\nHOT AND COLD: HOT", - "hsn_code": "84552110" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR - OTHER ROLLING MILLS: HOT OR COMBINATION\nHOT AND COLD: COMBINATION HOT AND COLD", - "hsn_code": "84552120" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR - OTHER ROLLING MILLS: COLD", - "hsn_code": "84552200" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR - ROLLS FOR ROLLING MILLS", - "hsn_code": "84553000" - }, - { - "description": "METAL-ROLLING MILLS AND ROLLS THEREFOR - OTHER PARTS", - "hsn_code": "84559000" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OPERATED BY LASER OR OTHER\nLIGHT OR PHOTONBEAM PROCESSES", - "hsn_code": "84561000" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OPERATED BY ULTRASONIC\nPROCESSES", - "hsn_code": "84562000" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OPERATED BY ELECTRO\nDISCHARGE PROCESSES", - "hsn_code": "84563000" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: --- FOR DRY ETCH PATTERN\nON SEMI CONDUCTOR MATERIAL", - "hsn_code": "84569010" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: --- ELECTRO CHEMICAL\nMACHINES", - "hsn_code": "84569020" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: --- OTHER", - "hsn_code": "84569090" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: FOR DRY-ETCHING\nPATTERNS ON SEMI-CONDUCTOR MATERIALS", - "hsn_code": "84569100" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: OTHER - ELECTRO\nCHEMICAL MACHINES", - "hsn_code": "84569910" - }, - { - "description": "MACHINE-TOOLS FOR WORKING ANY MATERIAL BY REMOVAL OF MATERIAL, BY LASER OR\nOTHER LIGHT OR PHOTON BEAM, ULTRA-SONIC, ELECTRO-DISCHARGE, ELECTROCHEMICAL,\nELECTRON BEAM, IONIC-BEAM OR PLASMA ARC PROCESSES - OTHER: OTHER - OTHER", - "hsn_code": "84569990" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - MACHINING CENTRES:HORIZONTAL", - "hsn_code": "84571010" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - MACHINING CENTRES:VERTICAL", - "hsn_code": "84571020" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - UNIT CONSTRUCTION MACHINES (SINGLE\nSTATION): UNIT HEAD BORING", - "hsn_code": "84572010" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - UNIT CONSTRUCTION MACHINES (SINGLE\nSTATION): UNIT HEAD DRILLING", - "hsn_code": "84572020" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - UNIT CONSTRUCTION MACHINES (SINGLE\nSTATION): OTHER", - "hsn_code": "84572090" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - MULTI-STATION TRANSFER MACHINES:ROTARY\nTYPE", - "hsn_code": "84573010" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - MULTI-STATION TRANSFER MACHINES: IN-LINE\nTYPE", - "hsn_code": "84573020" - }, - { - "description": "MACHINING CENTRES, UNIT CONSTRUCTION MACHINES (SINGLE STATION) AND MULTI-STATION\nTRANSFER MACHINES FOR WORKING METAL - MULTI-STATION TRANSFER MACHINES:OTHER", - "hsn_code": "84573090" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL\nLATHES:NUMERICALLY CONTROLLED", - "hsn_code": "84581100" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL LATHES:-\nOTHER: AUTOMATIC, SINGLE SPINDLE: HORIZONTAL BAR, SWISS TYPE", - "hsn_code": "84581911" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL LATHES:-\nOTHER: AUTOMATIC, SINGLE SPINDLE: BASE SLIDING HEAD TYPE", - "hsn_code": "84581912" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL LATHES:-\nOTHER: AUTOMATIC, SINGLE SPINDLE: HORIZONTAL CHUCKING", - "hsn_code": "84581913" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL LATHES:-\nOTHER: AUTOMATIC, SINGLE SPINDLE: OTHER", - "hsn_code": "84581919" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - HORIZONTAL LATHES:-\nOTHER: OTHER", - "hsn_code": "84581990" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: NUMERICALLY\nCONTROLLED", - "hsn_code": "84589100" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nAUTOMATIC, MULTI SPINDLE BAR", - "hsn_code": "84589910" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nAUTOMATIC, MULTI SPINDLE CHUCKING", - "hsn_code": "84589920" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCAPSTANS, TURRETS, CAPSTAN AND TURRET COMBINATION, COPING, MULTI TOOL AND\nPRODUCTION LATHES: CAPSTANS LATHES", - "hsn_code": "84589931" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCAPSTANS, TURRETS, CAPSTAN AND TURRET COMBINATION, COPING, MULTI TOOL AND\nPRODUCTION LATHES: TURRETS LATHES", - "hsn_code": "84589932" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCAPSTANS, TURRETS, CAPSTAN AND TURRET COMBINATION, COPING, MULTI TOOL AND\nPRODUCTION LATHES: CAPSTAN AND TURRET COMBINATION LATHES", - "hsn_code": "84589933" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCAPSTANS, TURRETS, CAPSTAN AND TURRET COMBINATION, COPING, MULTI TOOL AND\nPRODUCTION LATHES: COPYING LATHES", - "hsn_code": "84589934" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCAPSTANS, TURRETS, CAPSTAN AND TURRET COMBINATION, COPING, MULTI TOOL AND\nPRODUCTION LATHES: MULTI-TOOL AND PRODUCTION LATHES", - "hsn_code": "84589935" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCRANKSHAFT, RELIEVING, WHEEL AND AXLE LATHES: CRANKSHAFT LATHES", - "hsn_code": "84589941" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCRANKSHAFT, RELIEVING, WHEEL AND AXLE LATHES: RELIEVING LATHES", - "hsn_code": "84589942" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCRANKSHAFT, RELIEVING, WHEEL AND AXLE LATHES: WHEEL AND AXLE LATHES", - "hsn_code": "84589943" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCENTRE LATHES: TOOL-ROOM TYPE", - "hsn_code": "84589951" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nCENTRE LATHES: OTHER", - "hsn_code": "84589959" - }, - { - "description": "LATHES (INCLUDING TURNING CENTRES) FOR REMOVING METAL - OTHER LATHES: OTHER:\nOTHER", - "hsn_code": "84589990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 WAY TYPE UNIT HEAD MACHINES", - "hsn_code": "84591000" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES:NUMERICALLY\nCONTROLLED", - "hsn_code": "84592100" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: BENCH AND\nPILLAR", - "hsn_code": "84592910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: PILLAR OR\nCOLUMNS, MULTI SPINDLE", - "hsn_code": "84592920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: RADIAL", - "hsn_code": "84592930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: DEEP HOLE", - "hsn_code": "84592940" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: MULTI HEAD\nDRILLING MACHINES", - "hsn_code": "84592950" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER DRILLING MACHINES: OTHER: OTHER", - "hsn_code": "84592990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING-MILLING MACHINES: NUMERICALLY\nCONTROLLED", - "hsn_code": "84593100" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING-MILLING MACHINES: OTHER: VERTICAL\nTURNING OR BORING", - "hsn_code": "84593910" - }, - { - "description": "OTHER", - "hsn_code": "84593990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING MACHINES : JIG BORING MACHINES\nHORIZONTAL", - "hsn_code": "84594010" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING MACHINES : FINE BORING MACHINES,\nHORIZONTAL", - "hsn_code": "84594020" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING MACHINES : FINE BORING MACHINES,\nVERTICAL", - "hsn_code": "84594030" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER BORING MACHINES : OTHER", - "hsn_code": "84594090" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: NUMERICALLY\nCONTROLLED: HORIZONTAL", - "hsn_code": "84595110" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: NUMERICALLY\nCONTROLLED: VERTICAL", - "hsn_code": "84595120" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: NUMERICALLY\nCONTROLLED: UNIVERSAL", - "hsn_code": "84595130" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: NUMERICALLY\nCONTROLLED: OTHER", - "hsn_code": "84595190" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: HORIZONTAL", - "hsn_code": "84595910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: VERTICAL", - "hsn_code": "84595920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: UNIVERSAL", - "hsn_code": "84595930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: RAM TYPE", - "hsn_code": "84595940" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: DIE-SINKING OR\nPANTOGRAPH", - "hsn_code": "84595950" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - MILLING MACHINE, KNEE TYPE: OTHER: OTHER", - "hsn_code": "84595990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER MILLING MACHINES: NUMERICALLY\nCONTROLLED: PIANO MILLING", - "hsn_code": "84596110" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458 - OTHER MILLING MACHINES: NUMERICALLY\nCONTROLLED: OTHER", - "hsn_code": "84596190" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER: BED TYPE, HORIZONTAL", - "hsn_code": "84596910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER: BED TYPE, VERTICAL", - "hsn_code": "84596920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER: PIANO MILLING, SINGLE COLUMN", - "hsn_code": "84596930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER: PIANO MILLING, DOUBLE COLUMN", - "hsn_code": "84596940" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER: OTHER", - "hsn_code": "84596990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER THREADING OR TAPPING MACHINES :THREADING\nMACHINES", - "hsn_code": "84597010" - }, - { - "description": "MACHINE-TOOLS (INCLUDING WAY-TYPE UNIT HEAD MACHINES) FOR DRILLING, BORING,\nMILLING, THREADING OR TAPPING BY REMOVING METAL, OTHER THAN LATHES (INCLUDING\nTURNING CENTRES) OF HEADING 8458- OTHER THREADING OR TAPPING MACHINES :TAPPING\nMACHINES", - "hsn_code": "84597020" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - FLAT-SURFACE GRINDING MACHINES, IN WHICH THE\nPOSITIONING IN ANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01\nMM:NUMERICALLY CONTROLLED", - "hsn_code": "84601100" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - FLAT-SURFACE GRINDING MACHINES, IN WHICH THE\nPOSITIONING IN ANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM:OTHER", - "hsn_code": "84601900" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: NUMERICALLY\nCONTROLLED", - "hsn_code": "84602100" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: OTHER: CYLINDRICAL\nGRINDERS", - "hsn_code": "84602910" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: OTHER: INTERNAL\nGRINDERS", - "hsn_code": "84602920" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: OTHER: CENTRELESS\nGRINDERS", - "hsn_code": "84602930" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: OTHER: PROFILE\nGRINDERS", - "hsn_code": "84602940" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER GRINDING MACHINES, IN WHICH THE POSITIONING IN\nANY ONE AXIS CAN BE SET UP TO AN ACCURACY OF AT LEAST 0.01 MM: OTHER: OTHER", - "hsn_code": "84602990" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - SHARPENING (TOOL OR CUTTER GRINDING) MACHINES:\nNUMERICALLY CONTROLLED", - "hsn_code": "84603100" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - SHARPENING (TOOL OR CUTTER GRINDING) MACHINES: OTHER:\nGRINDER, TOOL OR CUTTER", - "hsn_code": "84603910" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - SHARPENING (TOOL OR CUTTER GRINDING) MACHINES: OTHER:\nOTHER", - "hsn_code": "84603990" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - HONING OR LAPPING MACHINES: HONING MACHINES: VERTICAL,\nSINGLE SPINDLE", - "hsn_code": "84604011" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - HONING OR LAPPING MACHINES: HONING MACHINES: VERTICAL,\nMULTI SPINDLE", - "hsn_code": "84604012" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - HONING OR LAPPING MACHINES: - HONING MACHINES:\nHORIZONTAL", - "hsn_code": "84604013" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - HONING OR LAPPING MACHINES: HONING MACHINES: OTHER", - "hsn_code": "84604019" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - HONING OR LAPPING MACHINES: LAPPING MACHINES", - "hsn_code": "84604020" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER: POLISHING AND BUFFING MACHINES", - "hsn_code": "84609010" - }, - { - "description": "MACHINE-TOOLS FOR DEBURRING, SHARPENING, GRINDING, HONING, LAPPING, POLISHING OR\nOTHERWISE FINISHING METAL, OR CERMETS BY MEANS OF GRINDING STONES, ABRASIVES OR\nPOLISHING PRODUCTS, OTHER THAN GEAR CUTTING, GEAR GRINDING OR GEAR FINISHING\nMACHINES OF HEADING 8461 - OTHER: OTHER", - "hsn_code": "84609090" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SHAPING OR\nSLOTTING MACHINES: SHAPING MACHINES: DIE AND PUNCH SHAPING MACHINES", - "hsn_code": "84612011" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SHAPING OR\nSLOTTING MACHINES: SHAPING MACHINES: OTHER", - "hsn_code": "84612019" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SHAPING OR\nSLOTTING MACHINES: SLOTTING MACHINES", - "hsn_code": "84612020" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - BROACHING\nMACHINES: VERTICAL", - "hsn_code": "84613010" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - BROACHING\nMACHINES: HORIZONTAL", - "hsn_code": "84613020" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - BROACHING\nMACHINES: OTHER", - "hsn_code": "84613090" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES: GEAR CUTTING MACHINES: BEVEL GEAR\nCUTTING", - "hsn_code": "84614011" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES: GEAR CUTTING MACHINES: GEAR CUTTING\nSPIRAL BEVEL AND /OR HYPOID", - "hsn_code": "84614012" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES: GEAR CUTTING MACHINES: GEAR SLOTTER OR\nPLANAR FORMED CUTTER TYPE", - "hsn_code": "84614013" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES: GEAR CUTTING MACHINES: GEAR MILLING\nFORMED DISC CUTTER TYPE", - "hsn_code": "84614014" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES: GEAR CUTTING MACHINES: OTHER", - "hsn_code": "84614019" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : SINGLE OR DOUBLE WHEEL DISC TYPE GEAR GRINDER", - "hsn_code": "84614021" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : FORMED WHEEL GEAR GRINDER", - "hsn_code": "84614022" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : GEAR SHAVER", - "hsn_code": "84614023" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : GEAR TOOTH, ROUNDING, CHAMFERING OR BURRING", - "hsn_code": "84614024" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : GEAR SHAPER, SPUR AND HELICAL", - "hsn_code": "84614025" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : GEAR HOBBER, SPUR AND HELICAL", - "hsn_code": "84614026" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - GEAR CUTTING,\nGEAR GRINDING OR GEAR FINISHING MACHINES- GEAR GRINDING OR GEAR FINISHING\nMACHINES : OTHER", - "hsn_code": "84614029" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: BAND SAW, HORIZONTAL", - "hsn_code": "84615011" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: BAND SAW, VERTICAL", - "hsn_code": "84615012" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: CIRCULAR SAW, COLD", - "hsn_code": "84615013" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: CIRCULAR SAW, HOT", - "hsn_code": "84615014" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: HACK SAW", - "hsn_code": "84615015" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: SAWING MACHINES: OTHER", - "hsn_code": "84615019" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: CUTTING-OFF MACHINES: ABRASIVE WHEEL CUTTING-OFF MACHINES", - "hsn_code": "84615021" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - SAWING OR\nCUTTING-OFF MACHINES: CUTTING-OFF MACHINES: OTHER", - "hsn_code": "84615029" - }, - { - "description": "MACHINE-TOOLS FOR PLANING, SHAPING, SLOTTING, BROACHING, GEAR CUTTING, GEAR\nGRINDING OR GEAR FINISHING, SAWING, CUTTING-OFF AND OTHER MACHINE TOOLS WORKING\nBY REMOVING METAL, OR CERMETS, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER", - "hsn_code": "84619000" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: HAMMERS: STEAM OR AIR, SINGLE FRAME", - "hsn_code": "84621011" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: HAMMERS: STEAM OR AIR, DOUBLE FRAME", - "hsn_code": "84621012" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: HAMMERS: HEADERS AND UPSETTERS", - "hsn_code": "84621013" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: HAMMERS: DOUBLE ACTING COUNTER\nBLOW, AIR OR STEAM", - "hsn_code": "84621014" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: HAMMERS: OTHER", - "hsn_code": "84621019" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: FORGING MACHINES", - "hsn_code": "84621020" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - FORGING OR DIE-STAMPING\nMACHINES (INCLUDING PRESSES) AND HAMMERS: DIE STAMPING MACHINES", - "hsn_code": "84621030" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - BENDING, FOLDING,\nSTRAIGHTENING OR FLATTENING MACHINES (INCLUDING PRESSES): NUMERICALLY CONTROLLED", - "hsn_code": "84622100" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - BENDING, FOLDING,\nSTRAIGHTENING OR FLATTENING MACHINES (INCLUDING PRESSES): OTHER: BENDING AND\nSTRAIGHTENING MACHINES", - "hsn_code": "84622910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - BENDING, FOLDING,\nSTRAIGHTENING OR FLATTENING MACHINES (INCLUDING PRESSES): OTHER: PRESS BRAKES", - "hsn_code": "84622920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - BENDING, FOLDING,\nSTRAIGHTENING OR FLATTENING MACHINES (INCLUDING PRESSES): OTHER: OTHER ROTARY\nHEAD AND RAM TYPE", - "hsn_code": "84622930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - BENDING, FOLDING,\nSTRAIGHTENING OR FLATTENING MACHINES (INCLUDING PRESSES): OTHER: OTHER", - "hsn_code": "84622990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- SHEARING MACHINES\n(INCLUDING PRESSES), OTHER THAN COMBINED PUNCHING AND SHEARING MACHINES :\nNUMERICALLY CONTROLLED", - "hsn_code": "84623100" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- SHEARING MACHINES\n(INCLUDING PRESSES), OTHER THAN COMBINED PUNCHING AND SHEARING MACHINES : OTHER:\nPLATE AND SHEET SHEARS (GUILLOTINE)", - "hsn_code": "84623910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- SHEARING MACHINES\n(INCLUDING PRESSES), OTHER THAN COMBINED PUNCHING AND SHEARING MACHINES : OTHER:\nBAR AND ANGLE SHEARING AND CROPPING", - "hsn_code": "84623920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- SHEARING MACHINES\n(INCLUDING PRESSES), OTHER THAN COMBINED PUNCHING AND SHEARING MACHINES : OTHER:\nOTHER", - "hsn_code": "84623990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- PUNCHING OR NOTCHING\nMACHINES (INCLUDING PRESSES), INCLUDING COMBINED PUNCHING AND SHEARING\nMACHINES: NUMERICALLY CONTROLLED", - "hsn_code": "84624100" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- PUNCHING OR NOTCHING\nMACHINES (INCLUDING PRESSES), INCLUDING COMBINED PUNCHING AND SHEARING\nMACHINES: OTHER: PUNCHING MACHINES (INCLUDING TURRET)", - "hsn_code": "84624910" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- PUNCHING OR NOTCHING\nMACHINES (INCLUDING PRESSES), INCLUDING COMBINED PUNCHING AND SHEARING\nMACHINES: OTHER: COMBINATION OF PUNCHING, SHEARING AND CROPPING MACHINES", - "hsn_code": "84624920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- PUNCHING OR NOTCHING\nMACHINES (INCLUDING PRESSES), INCLUDING COMBINED PUNCHING AND SHEARING\nMACHINES: OTHER: NIBBLING MACHINES", - "hsn_code": "84624930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE- PUNCHING OR NOTCHING\nMACHINES (INCLUDING PRESSES), INCLUDING COMBINED PUNCHING AND SHEARING\nMACHINES: OTHER: OTHER", - "hsn_code": "84624990" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - HYDRAULIC PRESSES:\nHYDRAULIC EXTENSION", - "hsn_code": "84629110" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - HYDRAULIC\nPRESSES:OTHER", - "hsn_code": "84629190" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: PNEUMATIC PRESSES", - "hsn_code": "84629911" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: INCLINABLE PRESSES", - "hsn_code": "84629912" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: VERTICAL GAP OF FRAME PRESSES", - "hsn_code": "84629913" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: VERTICAL STRAIGHT PRESSES", - "hsn_code": "84629914" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: VERTICAL FORGING PRESSES", - "hsn_code": "84629915" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - PNEUMATIC,\nINCLINABLE AND VERTICAL PRESSES: OTHER", - "hsn_code": "84629919" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER -DIEING OR LOBBING\nMACHINE PRESSES", - "hsn_code": "84629920" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER -TRANSFER AND\nMULTIPLE PRESSES", - "hsn_code": "84629930" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - HORIZONTAL PRESSES", - "hsn_code": "84629940" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - FRICTION SCREW\nPRESSES", - "hsn_code": "84629950" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - KNUCKLE JOINT\nPRESSES", - "hsn_code": "84629960" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER -COINING JOINT PRESSES", - "hsn_code": "84629970" - }, - { - "description": "MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY FORGING, HAMMERING OR\nDIE-STAMPING; MACHINE-TOOLS (INCLUDING PRESSES) FOR WORKING METAL BY BENDING,\nFOLDING, STRAIGHTENING, FLATTENING, SHEARING, PUNCHING OR NOTCHING; PRESSES FOR\nWORKING METAL OR METAL CARBIDES, NOT SPECIFIED ABOVE - OTHER - OTHER", - "hsn_code": "84629990" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nDRAW-BENCHES FOR BARS, TUBES, PROFILES, WIRE OR THE LIKE:WIRE AND METAL RIBBON\nDRAWING MACHINES", - "hsn_code": "84631010" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nDRAW-BENCHES FOR BARS, TUBES, PROFILES, WIRE OR THE LIKE:OTHER WIRE MAKING\nMACHINES", - "hsn_code": "84631020" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nDRAW-BENCHES FOR BARS, TUBES, PROFILES, WIRE OR THE LIKE:TUBE DRAWING MACHINES", - "hsn_code": "84631030" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nDRAW-BENCHES FOR BARS, TUBES, PROFILES, WIRE OR THE LIKE:OTHER", - "hsn_code": "84631090" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL\nTHREAD ROLLING MACHINES", - "hsn_code": "84632000" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nMACHINES FOR WORKING WIRE : WIRE GRILL OR KNITTING MACHINE", - "hsn_code": "84633010" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nMACHINES FOR WORKING WIRE : SPRING COILING", - "hsn_code": "84633020" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nMACHINES FOR WORKING WIRE : CHAIN MAKING", - "hsn_code": "84633030" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nMACHINES FOR WORKING WIRE : NAIL MAKING MACHINE", - "hsn_code": "84633040" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nOTHER: RIVETING MACHINES (EXCLUDING PORTABLE HAND OPERATED MACHINE)", - "hsn_code": "84639010" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nOTHER: STRIP PROFILING", - "hsn_code": "84639020" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nOTHER: SEAMING MACHINE FOR EXAMPLE FOR CANS", - "hsn_code": "84639030" - }, - { - "description": "OTHER MACHINE-TOOLS FOR WORKING METAL, OR CERMETS, WITHOUT REMOVING MATERIAL -\nOTHER: OTHER", - "hsn_code": "84639090" - }, - { - "description": "MACHINE-TOOLS FOR WORKING STONE, CERAMICS, CONCRETE, ASBESTOS-CEMENT OR LIKE\nMINERAL MATERIALS OR FOR COLD WORKING GLASS - SAWING MACHINE: GRANITE CUTTING\nMACHINES OR EQUIPMENT", - "hsn_code": "84641010" - }, - { - "description": "MACHINE-TOOLS FOR WORKING STONE, CERAMICS, CONCRETE, ASBESTOS-CEMENT OR LIKE\nMINERAL MATERIALS OR FOR COLD WORKING GLASS - SAWING MACHINE: OTHER", - "hsn_code": "84641090" - }, - { - "description": "MACHINE-TOOLS FOR WORKING STONE, CERAMICS, CONCRETE, ASBESTOS-CEMENT OR LIKE\nMINERAL MATERIALS OR FOR COLD WORKING GLASS GRINDING OR POLISHING MACHINES", - "hsn_code": "84642000" - }, - { - "description": "MACHINE-TOOLS FOR WORKING STONE, CERAMICS, CONCRETE, ASBESTOS-CEMENT OR LIKE\nMINERAL MATERIALS OR FOR COLD WORKING GLASS OTHER", - "hsn_code": "84649000" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - MACHINES WHICH CAN CARRY OUT DIFFERENT TYPES OF MACHINING\nOPERATIONS WITHOUT TOOL CHANGE BETWEEN SUCH OPERATIONS", - "hsn_code": "84651000" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : SAWING MACHINES", - "hsn_code": "84659100" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : PLANING, MILLING OR MOULDING (BY CUTTING) MACHINES", - "hsn_code": "84659200" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : GRINDING, SANDING OR POLISHING MACHINES", - "hsn_code": "84659300" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : BENDING OR ASSEMBLING MACHINES", - "hsn_code": "84659400" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : DRILLING OR MORTICING MACHINES", - "hsn_code": "84659500" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : SPLITTING, SLICING OR PARING MACHINES", - "hsn_code": "84659600" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : OTHER: LATHES", - "hsn_code": "84659910" - }, - { - "description": "MACHINE TOOLS (INCLUDING MACHINES FOR NAILING, STAPLING, GLUEING OR OTHERWISE\nASSEMBLING) FOR WORKING WOOD, CORK, BONE, HARD RUBBER, HARD PLASTICS OR SIMILAR\nHARD MATERIALS - OTHER : OTHER: OTHER", - "hsn_code": "84659990" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - TOOL HOLDERS AND SELF-OPENING\nDIEHEADS: TOOL HOLDERS", - "hsn_code": "84661010" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - TOOL HOLDERS AND SELF-OPENING\nDIEHEADS: SELF-OPENING DIEHEADS", - "hsn_code": "84661020" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND WORK HOLDERS", - "hsn_code": "84662000" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - DIVIDING HEADS AND OTHER SPECIAL\nATTACHMENTS FOR MACHINE-TOOLS: CHUCKS", - "hsn_code": "84663010" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - DIVIDING HEADS AND OTHER SPECIAL\nATTACHMENTS FOR MACHINE-TOOLS: JIGS AND FIXTURES", - "hsn_code": "84663020" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - DIVIDING HEADS AND OTHER SPECIAL\nATTACHMENTS FOR MACHINE-TOOLS: OTHER", - "hsn_code": "84663090" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - OTHER:FOR MACHINES OF HEADING\n8464", - "hsn_code": "84669100" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - OTHER:FOR MACHINES OF HEADING\n8465", - "hsn_code": "84669200" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - OTHER - FOR MACHINES OF HEADINGS\n8456 TO 8461: PARTS AND ACCESSORIES OF MACHINE TOOLS, FOR WORKING METALS", - "hsn_code": "84669310" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - OTHER - FOR MACHINES OF HEADINGS\n8456 TO 8461:OTHER", - "hsn_code": "84669390" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF\nHEADINGS 8456 TO 8465, INCLUDING WORK OR TOOL HOLDERS, SELF-OPENING DIEHEADS,\nDIVIDING HEADS AND OTHER SPECIAL ATTACHMENTS FOR MACHINE-TOOLS; TOOL HOLDERS\nFOR ANY TYPE OF TOOL, FOR WORKING IN THE HAND - OTHER: FOR MACHINES OF HEADING\n8462 OR 8463", - "hsn_code": "84669400" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - ROTARY TYPE (INCLUDING COMBINED\nROTARY PERCUSSION): DRILLS", - "hsn_code": "84671110" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - ROTARY TYPE (INCLUDING COMBINED\nROTARY PERCUSSION): HAMMERS", - "hsn_code": "84671120" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - ROTARY TYPE (INCLUDING COMBINED\nROTARY PERCUSSION): OTHER", - "hsn_code": "84671190" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - OTHER", - "hsn_code": "84671900" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - WITH SELF-CONTAINED ELECTRIC MOTOR:\nDRILLS OF ALL KINDS", - "hsn_code": "84672100" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - WITH SELF-CONTAINED ELECTRIC MOTOR:\nSAWS", - "hsn_code": "84672200" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PNEUMATIC - WITH SELF-CONTAINED ELECTRIC MOTOR:\nOTHER", - "hsn_code": "84672900" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - OTHER TOOLS: CHAIN SAWS", - "hsn_code": "84678100" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - OTHER TOOLS: OTHER: COMPRESSED AIR GREASE GUNS,\nLUBRICATORS AND SIMILAR APPLIANCES", - "hsn_code": "84678910" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - OTHER TOOLS: OTHER: VIBRATORS", - "hsn_code": "84678920" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - OTHER TOOLS: OTHER: OTHER", - "hsn_code": "84678990" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PARTS: OF CHAIN SAWS", - "hsn_code": "84679100" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PARTS: OF PNEUMATIC TOOLS", - "hsn_code": "84679200" - }, - { - "description": "TOOLS FOR WORKING IN THE HAND, PNEUMATIC, HYDRAULIC OR WITH SELF-CONTAINED\nELECTRIC OR NON-ELECTRIC MOTOR - PARTS: OTHER", - "hsn_code": "84679900" - }, - { - "description": "8468 MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING, WHETHER OR NOT\nCAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8515; GAS-OPERATED SURFACE\nTEMPERING MACHINES AND APPLIANCES HAND-HELD BLOW PIPES", - "hsn_code": "84681000" - }, - { - "description": "MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING, WHETHER OR NOT\nCAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8515; GAS-OPERATED SURFACE\nTEMPERING MACHINES AND APPLIANCES - OTHER GAS-OPERATED MACHINERY AND\nAPPARATUS: WELDING OR CUTTING MACHINES", - "hsn_code": "84682010" - }, - { - "description": "MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING, WHETHER OR NOT\nCAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8515; GAS-OPERATED SURFACE\nTEMPERING MACHINES AND APPLIANCES - OTHER GAS-OPERATED MACHINERY AND\nAPPARATUS: OTHER", - "hsn_code": "84682090" - }, - { - "description": "MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING, WHETHER OR NOT\nCAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8515; GAS-OPERATED SURFACE\nTEMPERING MACHINES AND APPLIANCES OTHER MACHINERY AND APPARATUS", - "hsn_code": "84688000" - }, - { - "description": "MACHINERY AND APPARATUS FOR SOLDERING, BRAZING OR WELDING, WHETHER OR NOT\nCAPABLE OF CUTTING, OTHER THAN THOSE OF HEADING 8515; GAS-OPERATED SURFACE\nTEMPERING MACHINES AND APPLIANCES PARTS", - "hsn_code": "84689000" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8443; WORD-PROCESSING MACHINES --\nTYPEWRITERS OTHER THAN PRINTERS OF HEADING 8443; WORD-PROCESSING MACHINES ---\nWORD-PROCESSING MACHINES", - "hsn_code": "84690010" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES --\nTYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES ---\nAUTOMATIC TYPEWRITERS", - "hsn_code": "84690020" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES --\nTYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES ---\nBRAIELLE TYPEWRITERS ELECTRIC", - "hsn_code": "84690030" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES --\nTYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES ---\nBRAIELLE TYPEWRITERS NON-ELECTRIC", - "hsn_code": "84690040" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES --\nTYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES ---\nOTHER TYPEWRITERS, ELECTRIC OR NON-ELECTRIC", - "hsn_code": "84690090" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nAUTOMATIC TYPEWRITERS AND WORD-PROCESSING MACHINES: WORD-PROCESSING MACHINES", - "hsn_code": "84691100" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nAUTOMATIC TYPEWRITERS AND WORD-PROCESSING MACHINES: AUTOMATIC TYPEWRITERS", - "hsn_code": "84691200" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nOTHER TYPEWRITERS ,ELECTRIC : BRAILLE TYPEWRITERS", - "hsn_code": "84692010" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nOTHER TYPEWRITERS ,ELECTRIC : OTHER", - "hsn_code": "84692090" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nOTHER TYPEWRITERS, NON-ELECTRIC: BRAILLE TYPEWRITERS", - "hsn_code": "84693010" - }, - { - "description": "TYPEWRITERS OTHER THAN PRINTERS OF HEADING 8471; WORD-PROCESSING MACHINES -\nOTHER TYPEWRITERS, NON-ELECTRIC: OTHER", - "hsn_code": "84693090" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS ELECTRONIC CALCULATORS CAPABLE OF\nOPERATIONWITHOUT AN EXTERNAL SOURCE OF ELECTRIC POWER AND POCKET-SIZE DATA\nRECORDING, REPRODUCING AND DISPLAYING MACHINES WITH CALCULATING FUNCTIONS", - "hsn_code": "84701000" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - OTHER ELECTRONIC CALCULATING MACHINES:\nINCORPORATING A PRINTING DEVICE", - "hsn_code": "84702100" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - OTHER ELECTRONIC CALCULATING MACHINES: OTHER", - "hsn_code": "84702900" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS OTHER CALCULATING MACHINES", - "hsn_code": "84703000" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - ACCOUNTING MACHINES : ELECTRICALLY OPERATED", - "hsn_code": "84704010" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - ACCOUNTING MACHINES : MANUALLY OPERATED", - "hsn_code": "84704020" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - CASH REGISTERS: ELECTRICALLY OPERATED", - "hsn_code": "84705010" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - CASH REGISTERS: MANUALLY OPERATED", - "hsn_code": "84705020" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - OTHER: ELECTRICALLY OPERATED", - "hsn_code": "84709010" - }, - { - "description": "CALCULATING MACHINES AND POCKET-SIZE DATA RECORDING, REPRODUCING AND DISPLAYING\nMACHINES WITH CALCULATING FUNCTIONS; ACCOUNTING MACHINES, POSTAGE-FRANKING\nMACHINES, TICKET-ISSUING MACHINES AND SIMILAR MACHINES, INCORPORATING A\nCALCULATING DEVICE; CASH REGISTERS - OTHER: MANUALLY OPERATED", - "hsn_code": "84709020" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED ANALOGUE\nOR HYBRID AUTOMATIC DATA PROCESSING MACHINES", - "hsn_code": "84711000" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - PORTABLE\nAUTOMATIC DATA PROCESSING MACHINES, WEIGHING NOT MORE THAN 10 KG, CONSISTING OF\nAT LEAST A CENTRAL PROCESSING UNIT, A KEYBOARD AND A DISPLAY:PERSONAL COMPUTER", - "hsn_code": "84713010" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - PORTABLE\nAUTOMATIC DATA PROCESSING MACHINES, WEIGHING NOT MORE THAN 10 KG, CONSISTING OF\nAT LEAST A CENTRAL PROCESSING UNIT, A KEYBOARD AND A DISPLAY:OTHER", - "hsn_code": "84713090" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER\nDIGITAL AUTOMATIC DATA PROCESSING MACHINES - COMPRISING IN THE SAME HOUSING AT\nLEAST A CENTRAL PROCESSING UNIT AND AN INPUT AND OUTPUT UNIT, WHETHER OR NOT\nCOMBINED :MICRO COMPUTER", - "hsn_code": "84714110" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER\nDIGITAL AUTOMATIC DATA PROCESSING MACHINES - COMPRISING IN THE SAME HOUSING AT\nLEAST A CENTRAL PROCESSING UNIT AND AN INPUT AND OUTPUT UNIT, WHETHER OR NOT\nCOMBINED :LARGE OR MAIN FRAME COMPUTER", - "hsn_code": "84714120" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER\nDIGITAL AUTOMATIC DATA PROCESSING MACHINES - COMPRISING IN THE SAME HOUSING AT\nLEAST A CENTRAL PROCESSING UNIT AND AN INPUT AND OUTPUT UNIT, WHETHER OR NOT\nCOMBINED :OTHER", - "hsn_code": "84714190" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER\nDIGITAL AUTOMATIC DATA PROCESSING MACHINES - OTHER, PRESENTED IN THE FORM OF\nSYSTEMS", - "hsn_code": "84714900" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED -\nPROCESSING UNITS OTHER THAN THOSE OFSUB-HEADINGS 8471 41 OR 8471 49, WHETHER OR\nNOT CONTAINING IN THE SAME HOUSING ONE OR TWO OF THE FOLLOWING TYPES OF UNIT:\nSTORAGE UNITS, INPUT UNITS, OUTPUT UNITS", - "hsn_code": "84715000" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nCOMBINED INPUT OR OUT PUT UNITS", - "hsn_code": "84716010" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: LINE PRINTER", - "hsn_code": "84716021" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: DOT MATRIX PRINTER", - "hsn_code": "84716022" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: LETTER QUALITY DAISY WHEEL PRINTER", - "hsn_code": "84716023" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: GRAPHIC PRINTER", - "hsn_code": "84716024" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: PLOTTER", - "hsn_code": "84716025" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: LASER JET PRINTER", - "hsn_code": "84716026" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: INK JET PRINTER", - "hsn_code": "84716027" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nPRINTER: OTHER", - "hsn_code": "84716029" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nMONITOR", - "hsn_code": "84716030" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nKEYBOARD", - "hsn_code": "84716040" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nSCANNERS", - "hsn_code": "84716050" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nMOUSE", - "hsn_code": "84716060" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - INPUT OR\nOUTPUT UNITS, WHETHER OR NOT CONTAINING STORAGE UNITS IN THE SAME HOUSING:\nOTHER", - "hsn_code": "84716090" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: FLOPPY DISC DRIVES", - "hsn_code": "84717010" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: HARD DISC DRIVES", - "hsn_code": "84717020" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: REMOVABLE OR EXCHANGEABLE DISC DRIVES", - "hsn_code": "84717030" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: MAGNETIC TAPE DRIVES", - "hsn_code": "84717040" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: CARTRIDGE TAPE DRIVE", - "hsn_code": "84717050" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: CD-ROM DRIVE", - "hsn_code": "84717060" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: DIGITAL VIDEO DISC DRIVE", - "hsn_code": "84717070" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - STORAGE\nUNITS: OTHER", - "hsn_code": "84717090" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER\nUNITS OF AUTOMATIC DATA PROCESSING MACHINES", - "hsn_code": "84718000" - }, - { - "description": "AUTOMATIC DATA PROCESSING MACHINES AND UNITS THEREOF; MAGNETIC OR OPTICAL\nREADERS, MACHINES FOR TRANSCRIBING DATA ON TO DATA MEDIA IN CODED FORM AND\nMACHINES FOR PROCESSING SUCH DATA, NOT ELSEWHERE SPECIFIED OR INCLUDED - OTHER", - "hsn_code": "84719000" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) DUPLICATING MACHINES", - "hsn_code": "84721000" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) ADDRESSING MACHINES AND ADDRESS PLATE EMBOSSING MACHINES", - "hsn_code": "84722000" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) MACHINES FOR SORTING OR FOLDING MAIL OR FOR INSERTING MAIL IN\nENVELOPES OR BANDS, MACHINES FOR OPENING, CLOSING OR SEALING MAIL AND MACHINES\nFOR AFFIXING OR CANCELING POSTAGE STAMPS", - "hsn_code": "84723000" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) - OTHER: STAPLING MACHINES (STAPLERS)", - "hsn_code": "84729010" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) - OTHER: DIGITAL DUPLICATOR", - "hsn_code": "84729020" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) - OTHER: AUTOMATIC BANK NOTE DISPENSERS", - "hsn_code": "84729030" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) - OTHER: COIN SORTING MACHINES, COIN-COUNTING OR WRAPPING\nMACHINES", - "hsn_code": "84729040" - }, - { - "description": "OTHER OFFICE MACHINES (FOR EXAMPLE, HECTOGRAPH OR STENCIL DUPLICATING MACHINES,\nADDRESSING MACHINES, AUTOMATIC BANKNOTE DISPENSERS, COIN SORTING MACHINES, COIN\nCOUNTING OR WRAPPING MACHINES, PENCIL-SHARPENING MACHINES, PERFORATING OR\nSTAPLING MACHINES) - OTHER: OTHER", - "hsn_code": "84729090" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8469", - "hsn_code": "84731000" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8470: OF THE ELECTRONIC CALCULATING\nMACHINES OF SUB-HEADING 8470 10, 8470 21 OR 8471 29", - "hsn_code": "84732100" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8470: OTHER", - "hsn_code": "84732900" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: MICROPROCESSORS", - "hsn_code": "84733010" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: MOTHERBOARDS", - "hsn_code": "84733020" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: OTHER MOUNTED PRINTED CIRCUIT\nBOARDS", - "hsn_code": "84733030" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: HEAD STACK", - "hsn_code": "84733040" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: INK CARTRIDGES WITH PRINT HEAD\nASSEMBLY", - "hsn_code": "84733050" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471: INK SPRAY NOZZLE", - "hsn_code": "84733060" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471:- OTHER : NETWORK ACCESS CONTROLLERS", - "hsn_code": "84733091" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471:- OTHER :GRAPHIC AND INTELLIGENCE\nBASED SCRIPT TECHNOLOGY (GIST) CARDS FOR MULTILINGUAL COMPUTERS", - "hsn_code": "84733092" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8471:- OTHER :OTHER", - "hsn_code": "84733099" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8472: PARTS OF DUPLICATING, HECTOGRAPH OR\nSTENCIL MACHINES", - "hsn_code": "84734010" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 - PARTS AND\nACCESSORIES OF THE MACHINES OF HEADING 8472: OTHER", - "hsn_code": "84734090" - }, - { - "description": "PARTS AND ACCESSORIES (OTHER THAN COVERS, CARRYING CASES AND THE LIKE) SUITABLE FOR\nUSE SOLELY OR PRINCIPALLY WITH MACHINES OF HEADINGS 8469 TO 8472 PARTS AND\nACCESSORIES EQUALLY SUITABLE FOR USE WITH MACHINES OF TWO OR MORE OF THE\nHEADINGS 8469 TO 8472", - "hsn_code": "84735000" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - SORTING, SCREENING, SEPARATING OR WASHING MACHINES: FOR COAL", - "hsn_code": "84741010" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - SORTING, SCREENING, SEPARATING OR WASHING MACHINES: OTHER", - "hsn_code": "84741090" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - CRUSHING OR GRINDING MACHINES: FOR STONE AND MINERAL", - "hsn_code": "84742010" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - CRUSHING OR GRINDING MACHINES: FOR COAL", - "hsn_code": "84742020" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - CRUSHING OR GRINDING MACHINES: OTHER", - "hsn_code": "84742090" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - MIXING OR KNEADING MACHINES - CONCRETE OR MORTAR MIXERS :\nCONCRETE MIXERS", - "hsn_code": "84743110" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - MIXING OR KNEADING MACHINES - CONCRETE OR MORTAR MIXERS :\nMORTAR MIXERS", - "hsn_code": "84743120" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - MIXING OR KNEADING MACHINES - MACHINES FOR MIXING MINERAL\nSUBSTANCES WITH BITUMEN", - "hsn_code": "84743200" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - MIXING OR KNEADING MACHINES - OTHER", - "hsn_code": "84743900" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - OTHER MACHINERY: BRICK AND TILE MAKING MACHINERY", - "hsn_code": "84748010" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - OTHER MACHINERY: CERAMIC AND CLAY MAKING MACHINERY", - "hsn_code": "84748020" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - OTHER MACHINERY: MACHINERY FOR FORMING FOUNDRY MOULDS OF\nSAND", - "hsn_code": "84748030" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - OTHER MACHINERY: OTHER", - "hsn_code": "84748090" - }, - { - "description": "MACHINERY FOR SORTING, SCREENING, SEPARATING, WASHING, CRUSHING, GRINDING, MIXING\nOR KNEADING EARTH, STONE, ORES OR OTHER MINERAL SUBSTANCES, IN SOLID (INCLUDING\nPOWDER OR PASTE) FORM; MACHINERY FOR AGGLOMERATING, SHAPING OR MOULDING SOLID\nMINERAL FUELS, CERAMIC PASTE, UNHARDENED CEMENTS, PLASTERING MATERIALS OR OTHER\nMINERAL PRODUCTS IN POWDER OR PASTE FORM; MACHINES FOR FORMING FOUNDRY\nMOULDS OF SAND - PARTS", - "hsn_code": "84749000" - }, - { - "description": "MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES OR FLASH\nBULBS, IN GLASS ENVELOPES; MACHINES OR MANUFACTURING OR HOT WORKING GLASS OR\nGLASSWARE MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES\nOR FLASH-BULBS, IN GLASS ENVELOPES", - "hsn_code": "84751000" - }, - { - "description": "MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES OR FLASH\nBULBS, IN GLASS ENVELOPES; MACHINES OR MANUFACTURING OR HOT WORKING GLASS OR\nGLASSWARE - MACHINES FOR MANUFACTURING OR HOT WORKING GLASS OR GLASSWARE:\nMACHINES FOR MAKING OPTICAL FIBRES AND PREFORMS THEREOF", - "hsn_code": "84752100" - }, - { - "description": "MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES OR FLASH\nBULBS, IN GLASS ENVELOPES; MACHINES OR MANUFACTURING OR HOT WORKING GLASS OR\nGLASSWARE - MACHINES FOR MANUFACTURING OR HOT WORKING GLASS OR GLASSWARE:\nOTHER", - "hsn_code": "84752900" - }, - { - "description": "MACHINES FOR ASSEMBLING ELECTRIC OR ELECTRONIC LAMPS, TUBES OR VALVES OR FLASH\nBULBS, IN GLASS ENVELOPES; MACHINES OR MANUFACTURING OR HOT WORKING GLASS OR\nGLASSWARE - PARTS", - "hsn_code": "84759000" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - AUTOMATIC BEVERAGE\nVENDING MACHINE - INCORPORATING HEATING OR REFRIGERATING DEVICES: INCORPORATING\nREFRIGERATING DEVICES", - "hsn_code": "84762110" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - AUTOMATIC BEVERAGE\nVENDING MACHINE - INCORPORATING HEATING OR REFRIGERATING DEVICES: NCORPORATING\nHEATING DEVICES", - "hsn_code": "84762120" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - AUTOMATIC BEVERAGE\nVENDING MACHINE - OTHER", - "hsn_code": "84762900" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nINCORPORATING HEATING OR REFRIGERATING DEVICES: INCORPORATING REFRIGERATING\nDEVICES", - "hsn_code": "84768110" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nINCORPORATING HEATING OR REFRIGERATING DEVICES: INCORPORATING HEATING DEVICES", - "hsn_code": "84768120" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nOTHER: MONEY CHANGING MACHINES", - "hsn_code": "84768910" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nOTHER: POSTAGE STAMPS VENDING MACHINES", - "hsn_code": "84768920" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nOTHER: CIGARETTE VENDING MACHINES", - "hsn_code": "84768930" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - OTHER MACHINES -\nOTHER: OTHER", - "hsn_code": "84768990" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - PARTS:OF MACHINES OF\nSUB-HEADING 8476 21", - "hsn_code": "84769010" - }, - { - "description": "AUTOMATIC GOODS-VENDING MACHINES (FOR EXAMPLE, POSTAGE STAMPS, CIGARETTE, FOOD\nOR BEVERAGE MACHINES), INCLUDING MONEY CHANGING MACHINES - PARTS:OTHER", - "hsn_code": "84769090" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER INJECTION\nMOULDING MACHINES", - "hsn_code": "84771000" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER\nEXTRUDERS", - "hsn_code": "84772000" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER BLOW\nMOULDING MACHINES", - "hsn_code": "84773000" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER VACUUM\nMOULDING MACHINES AND OTHER THERMOFORMING MACHINES", - "hsn_code": "84774000" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER - OTHER\nMACHINERY FOR MOULDING OR OTHERWISE FORMING: FOR MOULDING OR RETREADING\nPNEUMATIC TYRES OR FOR MOULDING OR OTHERWISE FORMING INNER TUBES", - "hsn_code": "84775100" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER - OTHER\nMACHINERY FOR MOULDING OR OTHERWISE FORMING: OTHER", - "hsn_code": "84775900" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER - OTHER\nMACHINERY: MACHINERY FOR MAKING RUBBER GOODS", - "hsn_code": "84778010" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER - OTHER\nMACHINERY: OTHER", - "hsn_code": "84778090" - }, - { - "description": "MACHINERY FOR WORKING RUBBER OR PLASTICS OR FOR THE MANUFACTURE OF PRODUCTS\nFROM THESE MATERIALS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER PARTS", - "hsn_code": "84779000" - }, - { - "description": "MACHINERY FOR PREPARING OR MAKING UP TOBACCO, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MACHINERY: CIGAR MAKING MACHINERY", - "hsn_code": "84781010" - }, - { - "description": "MACHINERY FOR PREPARING OR MAKING UP TOBACCO, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MACHINERY: CIGARETTE MAKING MACHINERY", - "hsn_code": "84781020" - }, - { - "description": "MACHINERY FOR PREPARING OR MAKING UP TOBACCO, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MACHINERY: OTHER", - "hsn_code": "84781090" - }, - { - "description": "MACHINERY FOR PREPARING OR MAKING UP TOBACCO, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - PARTS", - "hsn_code": "84789000" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER MACHINERY FOR PUBLIC WORKS, BUILDING OR THE\nLIKE", - "hsn_code": "84791000" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - MACHINERY FOR THE EXTRACTION OR PREPARATION\nOF ANIMAL OR FIXED VEGETABLE FATS OR OILS: OIL-SEED CRUSHING OR GRINDING MACHINERY\nINCLUDING PURIFYING TANKS", - "hsn_code": "84792010" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - MACHINERY FOR THE EXTRACTION OR PREPARATION\nOF ANIMAL OR FIXED VEGETABLE FATS OR OILS: OTHER", - "hsn_code": "84792090" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER PRESSES FOR THE MANUFACTURE OF PARTICLE BOARD\nOR FIBRE BUILDING BOARD OF WOOD OR OTHER LIGNEOUS MATERIALS AND OTHER\nMACHINERY FOR TREATING WOOD OR CORK", - "hsn_code": "84793000" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER ROPE OR CABLE-MAKING MACHINES", - "hsn_code": "84794000" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER INDUSTRIAL ROBOTS, NOT ELSEWHERE SPECIFIED OR\nINCLUDED", - "hsn_code": "84795000" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER EVAPORATIVE AIR COOLERS", - "hsn_code": "84796000" - }, - { - "description": "OF A KIND USED IN AIRPORTS", - "hsn_code": "84797100" - }, - { - "description": "OTHER", - "hsn_code": "84797900" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nFOR TREATING METAL, INCLUDING ELECTRIC WIRE COIL-WINDERS", - "hsn_code": "84798100" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nMIXING, KNEADING, CRUSHING, GRINDING, SCREENING, SIFTING, HOMOGENISING,\nEMULSIFYING OR STIRRING MACHINES", - "hsn_code": "84798200" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: SOAP CUTTING OR MOULDING MACHINERY", - "hsn_code": "84798910" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: AIR HUMIDIFIERS OR DEHUMIDIFIERS (OTHER THAN THOSE FALLING UNDER HEADING\n8415 OR 8424)", - "hsn_code": "84798920" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: MECHANICAL SHIFTING MACHINES", - "hsn_code": "84798930" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: ULTRASONIC TRANSDUCERS", - "hsn_code": "84798940" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: CAR WASHING MACHINES AND RELATED APPLIANCES", - "hsn_code": "84798950" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: COKE OVEN PLANTS", - "hsn_code": "84798960" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: MACHINERY FOR THE MANUFACTURE OF CHEMICAL AND PHARMACEUTICALS GOODS", - "hsn_code": "84798970" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: OTHER : INDUSTRIAL VACUUM CLEANERS", - "hsn_code": "84798991" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: OTHER : BRIQUETTING PLANT AND MACHINERY INTENDED FOR MANUFACTURE OF\nBRIQUETTES FROM AGRICULTURAL AND MUNICIPAL WASTE", - "hsn_code": "84798992" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND MECHANICAL APPLIANCES:\nOTHER: OTHER : OTHER", - "hsn_code": "84798999" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS: OF MACHINES FOR PUBLIC WORKS, BUILDING\nOR THE LIKE", - "hsn_code": "84799010" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS: OF MACHINES FOR THE EXTRACTION OF\nANIMAL OR FRUIT AND VEGETABLE FATS OR OIL", - "hsn_code": "84799020" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS: OF MACHINES AND MECHANICAL APPLIANCES\nFOR TREATING WOOD", - "hsn_code": "84799030" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS: OF MACHINERY USED FOR MANUFACTURE OF\nCHEMICALS AND PHARMACEUTICALS", - "hsn_code": "84799040" - }, - { - "description": "MACHINES AND MECHANICAL APPLIANCES HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS: OTHER", - "hsn_code": "84799090" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS MOULDING BOXES FOR METAL FOUNDRY", - "hsn_code": "84801000" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS MOULD BASES", - "hsn_code": "84802000" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS MOULDING PATTERNS", - "hsn_code": "84803000" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS - MOULDS FOR METAL OR METAL CARBIDES: INJECTION OR COMPRESSION TYPES", - "hsn_code": "84804100" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS - MOULDS FOR METAL OR METAL CARBIDES: OTHER", - "hsn_code": "84804900" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS MOULDS FOR GLASS", - "hsn_code": "84805000" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS MOULDS FOR MINERAL MATERIALS", - "hsn_code": "84806000" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS - MOULDS FOR RUBBER OR PLASTICS: INJECTION OR COMPRESSION TYPES", - "hsn_code": "84807100" - }, - { - "description": "MOULDING BOXES FOR METAL FOUNDRY; MOULD BASES; MOULDING PATTERNS; MOULDS FOR\nMETAL (OTHER THAN INGOT MOULDS), METAL CARBIDES, GLASS, MINERAL MATERIALS, RUBBER\nOR PLASTICS - MOULDS FOR RUBBER OR PLASTICS: OTHER", - "hsn_code": "84807900" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES\nPRESSURE-REDUCING VALVES", - "hsn_code": "84811000" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES\nVALVES FOR OLEOHYDRAULIC OR PNEUMATIC TRANSMISSIONS", - "hsn_code": "84812000" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES\nCHECK (NON-RETURN) VALVES", - "hsn_code": "84813000" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES\nSAFETY OR RELIEF VALVES", - "hsn_code": "84814000" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: TAPS, COCKS AND SIMILAR APPLIANCES OF IRON OR STEEL", - "hsn_code": "84818010" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: TAPS, COCKS AND SIMILAR APPLIANCES OF NON-FERROUS METAL", - "hsn_code": "84818020" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: INDUSTRIAL VALVES (EXCLUDING PRESSURE-REDUCING VALVES, AND\nTHERMOSTATICALLY CONTROLLED VALVES)", - "hsn_code": "84818030" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: INNER TUBE VALVES: FOR BICYCLES", - "hsn_code": "84818041" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: INNER TUBE VALVES: OTHER", - "hsn_code": "84818049" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: EXPANSION VALVES AND SOLENOID VALVES FOR REFRIGERATING AND AIR\nCONDITIONING APPLIANCES AND MACHINERY", - "hsn_code": "84818050" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nOTHER APPLIANCES: OTHER", - "hsn_code": "84818090" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nPARTS : BICYCLES VALVES", - "hsn_code": "84819010" - }, - { - "description": "TAPS, COCKS, VALVES AND SIMILAR APPLIANCES FOR PIPES, BOILER SHELLS, TANKS, VATS OR THE\nLIKE, INCLUDING PRESSURE-REDUCING VALVES AND THERMOSTATICALLY CONTROLLED VALVES -\nPARTS : OTHER", - "hsn_code": "84819090" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS: ADAPTER BALL BEARINGS (RADIAL TYPE) :NOT\nEXCEEDING 50MM OF BORE DIAMETER", - "hsn_code": "84821011" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS: ADAPTER BALL BEARINGS (RADIAL TYPE) :OF BORE\nDIAMETER EXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84821012" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS: ADAPTER BALL BEARINGS (RADIAL TYPE) :OF BORE\nDIAMETER EXCEEDING 100 MM", - "hsn_code": "84821013" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS:OTHER BALL BEARING (RADIAL TYPE) OF BORE\nDIAMETER NOT EXCEEDING 50 MM", - "hsn_code": "84821020" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS - OTHER BALL BEARING (RADIAL TYPE) OF BORE\nDIAMETER EXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84821030" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS OF BORE DIAMETER EXCEEDING 100 MM", - "hsn_code": "84821040" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS - THRUST BALL BEARINGS :OF BORE DIAMETER NOT\nEXCEEDING 50 MM", - "hsn_code": "84821051" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS - THRUST BALL BEARINGS :OF BORE DIAMETER\nEXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84821052" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS - THRUST BALL BEARINGS :OF BORE DIAMETER\nEXCEEDING 100 MM", - "hsn_code": "84821053" - }, - { - "description": "BALL OR ROLLER BEARINGS - BALL BEARINGS - THRUST BALL BEARINGS :OTHER", - "hsn_code": "84821090" - }, - { - "description": "BALL OR ROLLER BEARINGS - TAPERED ROLLER BEARINGS, INCLUDING CONE AND TAPERED\nROLLER ASSEMBLIES: TAPERED ROLLER BEARINGS (RADIAL TYPE) : OF BORE DIAMETER NOT\nEXCEEDING 50 MM", - "hsn_code": "84822011" - }, - { - "description": "BALL OR ROLLER BEARINGS - TAPERED ROLLER BEARINGS, INCLUDING CONE AND TAPERED\nROLLER ASSEMBLIES: TAPERED ROLLER BEARINGS (RADIAL TYPE) : OF BORE DIAMETER\nEXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84822012" - }, - { - "description": "BALL OR ROLLER BEARINGS - TAPERED ROLLER BEARINGS, INCLUDING CONE AND TAPERED\nROLLER ASSEMBLIES: TAPERED ROLLER BEARINGS (RADIAL TYPE) : OF BORE DIAMETER\nEXCEEDING 100 MM", - "hsn_code": "84822013" - }, - { - "description": "BALL OR ROLLER BEARINGS - TAPERED ROLLER BEARINGS, INCLUDING CONE AND TAPERED\nROLLER ASSEMBLIES: OTHER", - "hsn_code": "84822090" - }, - { - "description": "BALL OR ROLLER BEARINGS SPHERICAL ROLLER BEARINGS", - "hsn_code": "84823000" - }, - { - "description": "BALL OR ROLLER BEARINGS NEEDLE ROLLER BEARINGS", - "hsn_code": "84824000" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS: RADIAL TYPE : OF BORE\nDIAMETER NOT EXCEEDING 50 MM", - "hsn_code": "84825011" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS: RADIAL TYPE : OF BORE\nDIAMETER EXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84825012" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS: RADIAL TYPE : OF BORE\nDIAMETER EXCEEDING 100 MM", - "hsn_code": "84825013" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS:- THRUST ROLLER\nBEARINGS: OF BORE DIAMETER NOT EXCEEDING 50 MM", - "hsn_code": "84825021" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS:- THRUST ROLLER\nBEARINGS: OF BORE DIAMETER EXCEEDING 50 MM BUT NOT EXCEEDING 100 MM", - "hsn_code": "84825022" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER CYLINDRICAL ROLLER BEARINGS:- THRUST ROLLER\nBEARINGS: OF BORE DIAMETER EXCEEDING 100 MM", - "hsn_code": "84825023" - }, - { - "description": "BALL OR ROLLER BEARINGS - OTHER, INCLUDING COMBINED BALL OR ROLLER BEARINGS", - "hsn_code": "84828000" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS: BALLS, NEEDLES AND ROLLERS: BALLS: OF NICKEL ALLOYS", - "hsn_code": "84829111" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS: BALLS, NEEDLES AND ROLLERS: BALLS: OF TUNGSTEN\nCARBIDE", - "hsn_code": "84829112" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS: BALLS, NEEDLES AND ROLLERS: BALLS: OF SPECIAL\nSTAINLESS STEEL", - "hsn_code": "84829113" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS: BALLS, NEEDLES AND ROLLERS: BALLS: OF HIGH SPEED STEEL", - "hsn_code": "84829114" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS: BALLS, NEEDLES AND ROLLERS: BALLS: OTHER", - "hsn_code": "84829119" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS NEEDLES", - "hsn_code": "84829120" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS ROLLERS", - "hsn_code": "84829130" - }, - { - "description": "BALL OR ROLLER BEARINGS - PARTS OTHER", - "hsn_code": "84829900" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS)\nAND CRANKS : CRANK SHAFTS FOR SEWING MACHINES", - "hsn_code": "84831010" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - OTHER : CRANK SHAFT FOR ENGINES OF HEADING 8407", - "hsn_code": "84831091" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - OTHER : CRANK SHAFT FOR ENGINES OF HEADING 8408", - "hsn_code": "84831092" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - OTHER : OTHER", - "hsn_code": "84831099" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) -BEARING HOUSINGS, INCORPORATING BALL OR ROLLER BEARINGS", - "hsn_code": "84832000" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) -BEARING HOUSINGS, NOT INCORPORATING BALL OR ROLLER BEARINGS;\nPLAIN SHAFT BEARINGS", - "hsn_code": "84833000" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) -GEARS AND GEARING, OTHER THAN TOOTHED WHEELS, CHAIN SPROCKETS\nAND OTHER TRANSMISSION ELEMENTS PRESENTED SEPARATELY; BALL OR ROLLER SCREWS;\nGEAR BOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS", - "hsn_code": "84834000" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - FLYWHEELS AND PULLEYS, INCLUDING PULLEY BLOCKS: PULLEYS, POWER\nTRANSMISSION", - "hsn_code": "84835010" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - FLYWHEELS AND PULLEYS, INCLUDING PULLEY BLOCKS: OTHER", - "hsn_code": "84835090" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) ? CLUTCHES AND SHAFT COUPLINGS (INCLUDING UNIVERSAL JOINTS):\nFLEXIBLE COUPLING", - "hsn_code": "84836010" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) ? CLUTCHES AND SHAFT COUPLINGS (INCLUDING UNIVERSAL JOINTS): FLUID\nCOUPLING", - "hsn_code": "84836020" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) ? CLUTCHES AND SHAFT COUPLINGS (INCLUDING UNIVERSAL JOINTS):\nOTHER", - "hsn_code": "84836090" - }, - { - "description": "TRANSMISSION SHAFTS (INCLUDING CAM SHAFTS AND CRANK SHAFTS) AND CRANKS; BEARING\nHOUSINGS AND PLAIN SHAFT BEARINGS; GEARS AND GEARING; BALL OR ROLLER SCREWS; GEAR\nBOXES AND OTHER SPEED CHANGERS, INCLUDING TORQUE CONVERTERS; FLYWHEELS AND\nPULLEYS, INCLUDING PULLEY BLOCKS; CLUTCHES AND SHAFT COUPLINGS (INCLUDING\nUNIVERSAL JOINTS) - TOOTHED WHEELS, CHAIN SPROCKETS AND OTHER TRANSMISSION\nELEMENTS PARTS PRESENTED SEPARATELY", - "hsn_code": "84839000" - }, - { - "description": "GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH OTHER MATERIAL OR OF\nTWO OR MORE LAYERS OF METAL; SETS OR ASSORTMENTS OF GASKETS AND SIMILAR JOINTS,\nDISSIMILAR IN COMPOSITION, PUT UP IN POUCHES, ENVELOPES OR SIMILAR PACKINGS;\nMECHANICAL SEALS - GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH\nOTHER MATERIAL OR OF TWO OR MORE LAYERS OF METAL: ASBESTOS METALLIC PACKINGS AND\nGASKETS (EXCLUDING GASKETS OF ASBESTOS BOARD REINFORCED WITH METAL GAUZE OR\nWIRE)", - "hsn_code": "84841010" - }, - { - "description": "GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH OTHER MATERIAL OR OF\nTWO OR MORE LAYERS OF METAL; SETS OR ASSORTMENTS OF GASKETS AND SIMILAR JOINTS,\nDISSIMILAR IN COMPOSITION, PUT UP IN POUCHES, ENVELOPES OR SIMILAR PACKINGS;\nMECHANICAL SEALS - GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH\nOTHER MATERIAL OR OF TWO OR MORE LAYERS OF METAL: OTHER", - "hsn_code": "84841090" - }, - { - "description": "GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH OTHER MATERIAL OR OF\nTWO OR MORE LAYERS OF METAL; SETS OR ASSORTMENTS OF GASKETS AND SIMILAR JOINTS,\nDISSIMILAR IN COMPOSITION, PUT UP IN POUCHES, ENVELOPES OR SIMILAR PACKINGS;\nMECHANICAL SEALS - MECHANICAL SEALS", - "hsn_code": "84842000" - }, - { - "description": "GASKETS AND SIMILAR JOINTS OF METAL SHEETING COMBINED WITH OTHER MATERIAL OR OF\nTWO OR MORE LAYERS OF METAL; SETS OR ASSORTMENTS OF GASKETS AND SIMILAR JOINTS,\nDISSIMILAR IN COMPOSITION, PUT UP IN POUCHES, ENVELOPES OR SIMILAR PACKINGS;\nMECHANICAL SEALS - OTHER", - "hsn_code": "84849000" - }, - { - "description": "MACHINERY PARTS, NOT CONTAINING ELECTRICAL CONNECTORS, INSULATORS, COILS,\nCONTACTS OR OTHER ELECTRICAL FEATURES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS\nCHAPTER SHIPR OR BOATR PROPELLERS AND BLADES THEREFOR", - "hsn_code": "84851000" - }, - { - "description": "MACHINERY PARTS, NOT CONTAINING ELECTRICAL CONNECTORS, INSULATORS, COILS,\nCONTACTS OR OTHER ELECTRICAL FEATURES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS\nCHAPTER - OTHER", - "hsn_code": "84859000" - }, - { - "description": "MACHINES AND APPARUTUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE\nOF SEMI CONDUCTOR BOULES OR WAFERS,SEMI CONDUCTOR DEVICES,ELECTRONIC\nINTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARUTUS SPECIFIED IN\nNOTE 9(C) TO THIS CHAPTER ; PARTS AND ACCESSORIES - MACHINES AND APPARUTUS FOR THE\nMANUFACTURE OF BOULES OR WAFERS", - "hsn_code": "84861000" - }, - { - "description": "MACHINES AND APPARUTUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE\nOF SEMI CONDUCTOR BOULES OR WAFERS,SEMI CONDUCTOR DEVICES,ELECTRONIC\nINTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARUTUS SPECIFIED IN\nNOTE 9(C) TO THIS CHAPTER ; PARTS AND ACCESSORIES - MACHINES AND APPARUTUS FOR THE\nMANUFACTURE OF SEMI CONDUCTOR DEVICES OR OF ELECTRONIC INTEGRATED CIRCUITS", - "hsn_code": "84862000" - }, - { - "description": "MACHINES AND APPARUTUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE\nOF SEMI CONDUCTOR BOULES OR WAFERS,SEMI CONDUCTOR DEVICES,ELECTRONIC\nINTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARUTUS SPECIFIED IN\nNOTE 9(C) TO THIS CHAPTER ; PARTS AND ACCESSORIES - MACHINES AND APPARUTUS FOR THE\nMANUFACTURE OF FLAT PANEL DISPLAYS", - "hsn_code": "84863000" - }, - { - "description": "MACHINES AND APPARUTUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE\nOF SEMI CONDUCTOR BOULES OR WAFERS,SEMI CONDUCTOR DEVICES,ELECTRONIC\nINTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARUTUS SPECIFIED IN\nNOTE 9(C) TO THIS CHAPTER ; PARTS AND ACCESSORIES - MACHINES AND APPARUTUS\nSPECIFIED IN NOTE 9(C) TO THIS CHAPTER", - "hsn_code": "84864000" - }, - { - "description": "MACHINES AND APPARUTUS OF A KIND USED SOLELY OR PRINCIPALLY FOR THE MANUFACTURE\nOF SEMI CONDUCTOR BOULES OR WAFERS,SEMI CONDUCTOR DEVICES,ELECTRONIC\nINTEGRATED CIRCUITS OR FLAT PANEL DISPLAYS; MACHINES AND APPARUTUS SPECIFIED IN\nNOTE 9(C) TO THIS CHAPTER ; PARTS AND ACCESSORIES - PARTS AND ACCESSORIES", - "hsn_code": "84869000" - }, - { - "description": "MACHINERY PARTS, NOT CONTAINING ELECTRICAL CONNECTORS,INSULATORS,COILS, CONTACTS\nOR OTHER ELECTRICAL FEATURES NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER; -\nSHIPS OR BOATS PROPELLERS", - "hsn_code": "84871000" - }, - { - "description": "MACHINERY PARTS, NOT CONTAINING ELECTRICAL CONNECTORS,INSULATORS,COILS, CONTACTS\nOR OTHER ELECTRICAL FEATURES NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER;-\nOTHER", - "hsn_code": "84879000" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) MOTORS OF AN OUTPUT\nNOT EXCEEDING 37.5 W: - DC MOTOR: MICRO MOTOR", - "hsn_code": "85011011" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) MOTORS OF AN OUTPUT\nNOT EXCEEDING 37.5 W: - DC MOTOR: STEPPER MOTOR", - "hsn_code": "85011012" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) MOTORS OF AN OUTPUT\nNOT EXCEEDING 37.5 W: - DC MOTOR: WIPER MOTOR", - "hsn_code": "85011013" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) MOTORS OF AN OUTPUT\nNOT EXCEEDING 37.5 W: - DC MOTOR: OTHER", - "hsn_code": "85011019" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) MOTORS OF AN OUTPUT\nNOT EXCEEDING 37.5 W:AC MOTOR", - "hsn_code": "85011020" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) UNIVERSAL AC OR DC\nMOTORS OF AN OUTPUT EXCEEDING 37.5 W", - "hsn_code": "85012000" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT NOT EXCEEDING 750 W: - DC MOTORS: MICRO MOTOR", - "hsn_code": "85013111" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT NOT EXCEEDING 750 W: - DC MOTORS: STEPPER MOTOR", - "hsn_code": "85013112" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT NOT EXCEEDING 750 W: - DC MOTORS: WIPER MOTOR", - "hsn_code": "85013113" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT NOT EXCEEDING 750 W: - DC MOTORS: OTHER", - "hsn_code": "85013119" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT NOT EXCEEDING 750 W: DC GENERATORS", - "hsn_code": "85013120" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT EXCEEDING 750 W BUT NOT EXCEEDING 75 KW: DC MOTOR", - "hsn_code": "85013210" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS: - OF AN OUTPUT EXCEEDING 750 W BUT NOT EXCEEDING 75 KW: DC\nGENERATORS", - "hsn_code": "85013220" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 75 KW BUT NOT EXCEEDING 375 KW: DC MOTORS", - "hsn_code": "85013310" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 75 KW BUT NOT EXCEEDING 375 KW: DC\nGENERATORS", - "hsn_code": "85013320" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 375 KW:OF AN OUTPUT EXCEEDING 375 KW BUT NOT\nEXCEEDING 1,000 KW", - "hsn_code": "85013410" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 375 KW:OF AN OUTPUT EXCEEDING 1,000 KW BUT\nNOT EXCEEDING 2,000 KW", - "hsn_code": "85013420" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 375 KW:OF AN OUTPUT EXCEEDING 2,000 KW BUT\nNOT EXCEEDING 5,000 KW", - "hsn_code": "85013430" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 375 KW:OF AN OUTPUT EXCEEDING 5,000 KW BUT\nNOT EXCEEDING 10,000 KW", - "hsn_code": "85013440" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER DC MOTORS; DC\nGENERATORS:- OF AN OUTPUT EXCEEDING 375 KW: OF AN OUTPUT EXCEEDING 10,000 KW", - "hsn_code": "85013450" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:FRACTIONAL HORSE POWER MOTOR", - "hsn_code": "85014010" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:THER", - "hsn_code": "85014090" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE: - OF AN OUTPUT NOT EXCEEDING 750 W:\nSQUIRREL CAGE INDUCTION MOTOR, 3 PHASE TYPE", - "hsn_code": "85015110" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE: - OF AN OUTPUT NOT EXCEEDING 750 W:\nSLIPRING MOTOR", - "hsn_code": "85015120" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE: - OF AN OUTPUT NOT EXCEEDING 750 W:\nOTHER", - "hsn_code": "85015190" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:- OF AN OUTPUT EXCEEDING 750 W BUT NOT\nEXCEEDING 75 KW: SQUIRREL CAGE INDUCTION MOTOR, 3 PHASE TYPE", - "hsn_code": "85015210" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:- OF AN OUTPUT EXCEEDING 750 W BUT NOT\nEXCEEDING 75 KW: SLIPRING MOTOR", - "hsn_code": "85015220" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:- OF AN OUTPUT EXCEEDING 750 W BUT NOT\nEXCEEDING 75 KW: OTHER", - "hsn_code": "85015290" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:-- OF AN OUTPUT EXCEEDING 75 KW:\nSQUIRREL CAGE INDUCTION MOTOR, 3 PHASE TYPE", - "hsn_code": "85015310" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:-- OF AN OUTPUT EXCEEDING 75 KW:\nSLIPRING MOTOR", - "hsn_code": "85015320" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:-- OF AN OUTPUT EXCEEDING 75 KW:\nTRACTION MOTOR", - "hsn_code": "85015330" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - OTHER AC MOTORS,\nSINGLE-PHASE:- OTHER AC MOTORS, MULTI-PHASE:-- OF AN OUTPUT EXCEEDING 75 KW: OTHER", - "hsn_code": "85015390" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): OF AN OUTPUT NOT EXCEEDING 75 KVA", - "hsn_code": "85016100" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): OF AN OUTPUT EXCEEDING 75 KVA BUT NOT EXCEEDING 375 KVA", - "hsn_code": "85016200" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): OF AN OUTPUT EXCEEDING 375 KVA BUT NOT EXCEEDING 750 KVA", - "hsn_code": "85016300" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 750 KVA BUT\nNOT EXCEEDING 2,000 KVA", - "hsn_code": "85016410" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 2,000 KVA\nBUT NOT EXCEEDING 5,000 KVA", - "hsn_code": "85016420" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 5,000 KVA\nBUT NOT EXCEEDING 15,000 KVA", - "hsn_code": "85016430" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 15,000 KVA\nBUT NOT EXCEEDING 37,500 KVA", - "hsn_code": "85016440" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 37,500 KVA\nBUT NOT EXCEEDING 75,000 KVA", - "hsn_code": "85016450" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 75,000 KVA\nBUT NOT EXCEEDING 1,37,500 KVA", - "hsn_code": "85016460" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 1,37,500\nKVA BUT NOT EXCEEDING 3,12,500 KVA", - "hsn_code": "85016470" - }, - { - "description": "ELECTRIC MOTORS AND GENERATORS (EXCLUDING GENERATING SETS) - AC GENERATORS\n(ALTERNATORS): - OF AN OUTPUT EXCEEDING 750 KVA: OF AN OUTPUT EXCEEDING 3,12,500\nKVA", - "hsn_code": "85016480" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): OF AN OUTPUT NOT EXCEEDING 75 KVA", - "hsn_code": "85021100" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): OF AN OUTPUT EXCEEDING 75 KVA BUT NOT EXCEEDING 375 KVA", - "hsn_code": "85021200" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 375 KVA BUT NOT\nEXCEEDING 1,000 KVA", - "hsn_code": "85021310" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 1,000 KVA BUT\nNOT EXCEEDING 1,500 KVA", - "hsn_code": "85021320" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 1,500 KVA BUT\nNOT EXCEEDING 2,000 KVA", - "hsn_code": "85021330" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 2,000 KVA BUT\nNOT EXCEEDING 5,000 KVA", - "hsn_code": "85021340" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 5,000 KVA BUT\nNOT EXCEEDING 10,000 KVA", - "hsn_code": "85021350" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - GENERATING SETS WITH\nCOMPRESSION-IGNITION INTERNAL COMBUSTION PISTON ENGINES (DIESEL OR SEMI-DIESEL\nENGINES): - OF AN OUTPUT EXCEEDING 375 KVA : OF AN OUTPUT EXCEEDING 10,000 KVA", - "hsn_code": "85021360" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS -GENERATING SETS WITH SPARK\nIGNITION INTERNAL COMBUSTION PISTON ENGINES:ELECTRIC PORTABLE GENERATORS OF AN\nOUTPUT NOT EXCEEDING 3.5 KVA", - "hsn_code": "85022010" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS -GENERATING SETS WITH SPARK\nIGNITION INTERNAL COMBUSTION PISTON ENGINES:OTHER", - "hsn_code": "85022090" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - OTHER GENERATING SETS : WIND\nPOWERED", - "hsn_code": "85023100" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - OTHER GENERATING SETS : - OTHER:\nPOWERED BY STEAM ENGINE", - "hsn_code": "85023910" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - OTHER GENERATING SETS : - OTHER:\nPOWERED BY WATER TURBINE", - "hsn_code": "85023920" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - OTHER GENERATING SETS : - OTHER:\nOTHER", - "hsn_code": "85023990" - }, - { - "description": "ELECTRIC GENERATING SETS AND ROTARY CONVERTERS - ELECTRIC ROTARY CONVERTERS", - "hsn_code": "85024000" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING 8501 OR\n8502 - PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING\n8501 OR 8502:PARTS OF GENERATOR (AC OR DC)", - "hsn_code": "85030010" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING 8501 OR\n8502 - PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING\n8501 OR 8502:- PARTS OF ELECTRIC MOTOR : OF DC MOTOR", - "hsn_code": "85030021" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING 8501 OR\n8502 - PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING\n8501 OR 8502:- PARTS OF ELECTRIC MOTOR : OTHER", - "hsn_code": "85030029" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE MACHINES OF HEADING 8501 OR\n8502 - OTHER", - "hsn_code": "85030090" - }, - { - "description": "8504 ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND\nINDUCTORS -BALLASTS FOR DISCHARGE LAMPS OR TUBES: CONVENTIONAL TYPE", - "hsn_code": "85041010" - }, - { - "description": "8504 ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND\nINDUCTORS -BALLASTS FOR DISCHARGE LAMPS OR TUBES: FOR COMPACT FLUORESCENT LAMPS", - "hsn_code": "85041020" - }, - { - "description": "8504 ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND\nINDUCTORS -BALLASTS FOR DISCHARGE LAMPS OR TUBES: OTHER", - "hsn_code": "85041090" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: HAVING A POWER HANDLING CAPACITY NOT EXCEEDING\n650 KVA", - "hsn_code": "85042100" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: HAVING A POWER HANDLING CAPACITY EXCEEDING 650\nKVA BUT NOT EXCEEDING 10,000 KVA", - "hsn_code": "85042200" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: - HAVING A POWER HANDLING CAPACITY EXCEEDING\n10,000 KVA: HAVING A POWER HANDLING CAPACITY EXCEEDING 10,000 KVA BUT NOT\nEXCEEDING 50,000 KVA", - "hsn_code": "85042310" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: - HAVING A POWER HANDLING CAPACITY EXCEEDING\n10,000 KVA: HAVING A POWER HANDLING CAPACITY EXCEEDING 50,000 KVA BUT NOT\nEXCEEDING 1,00,000 KVA", - "hsn_code": "85042320" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: - HAVING A POWER HANDLING CAPACITY EXCEEDING\n10,000 KVA: HAVING A POWER HANDLING CAPACITY EXCEEDING 1,00,000 KVA BUT NOT\nEXCEEDING 2,50,000 KVA", - "hsn_code": "85042330" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nLIQUID DIELECTRIC TRANSFORMERS: - HAVING A POWER HANDLING CAPACITY EXCEEDING\n10,000 KVA: HAVING A POWER HANDLING CAPACITY EXCEEDING 2,50,000 KVA", - "hsn_code": "85042340" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER TRANSFORMERS: HAVING A POWER HANDLING CAPACITY NOT EXCEEDING 1 KVA", - "hsn_code": "85043100" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER TRANSFORMERS: HAVING A POWER HANDLING CAPACITY EXCEEDING 1 KVA BUT NOT\nEXCEEDING 16 KVA", - "hsn_code": "85043200" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER TRANSFORMERS: HAVING A POWER HANDLING CAPACITY EXCEEDING 16 KVA BUT NOT\nEXCEEDING 500 KVA", - "hsn_code": "85043300" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER TRANSFORMERS: HAVING A POWER HANDLING CAPACITY EXCEEDING 500 KVA", - "hsn_code": "85043400" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: ELECTRIC INVERTER", - "hsn_code": "85044010" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: - RECTIFIER: DIP BRIDGE RECTIFIER", - "hsn_code": "85044021" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: - RECTIFIER: OTHER", - "hsn_code": "85044029" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: BATTERY CHARGERS", - "hsn_code": "85044030" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: VOLTAGE REGULATOR AND STABILIZERS (OTHER THAN AUTOMATIC)", - "hsn_code": "85044040" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nSTATIC CONVERTERS: OTHER", - "hsn_code": "85044090" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER INDUCTORS: CHOKE COILS (CHOKES)", - "hsn_code": "85045010" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER INDUCTORS: OTHER", - "hsn_code": "85045090" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER INDUCTORS: -PARTS : OF TRANSFORMERS", - "hsn_code": "85049010" - }, - { - "description": "ELECTRICAL TRANSFORMERS, STATIC CONVERTERS (FOR EXAMPLE, RECTIFIERS) AND INDUCTORS -\nOTHER INDUCTORS: -PARTS : OTHER", - "hsn_code": "85049090" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - PERMANENT MAGNETS AND ARTICLES INTENDED\nTO BECOME PERMANENT MAGNETS AFTER MAGNETISATION: - OF METAL:FERRITE CORES", - "hsn_code": "85051110" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - PERMANENT MAGNETS AND ARTICLES INTENDED\nTO BECOME PERMANENT MAGNETS AFTER MAGNETISATION: - OF METAL:OTHER", - "hsn_code": "85051190" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - PERMANENT MAGNETS AND ARTICLES INTENDED\nTO BECOME PERMANENT MAGNETS AFTER MAGNETISATION: - OTHER", - "hsn_code": "85051900" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES", - "hsn_code": "85052000" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - ELECTRO-MAGNETIC LIFTING HEADS", - "hsn_code": "85053000" - }, - { - "description": "ELECTRO-MAGNETS; PERMANENT MAGNETS AND ARTICLES INTENDED TO BECOME PERMANENT\nMAGNETS AFTER MAGNETISATION; ELECTRO-MAGNETIC OR PERMANENT MAGNET CHUCKS,\nCLAMPS AND SIMILAR HOLDING DEVICES; ELECTRO-MAGNETIC COUPLINGS, CLUTCHES AND\nBRAKES; ELECTRO-MAGNETIC LIFTING HEADS - OTHER, INCLUDING PARTS", - "hsn_code": "85059000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES MANGANESE DIOXIDE", - "hsn_code": "85061000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES MERCURIC OXIDE", - "hsn_code": "85063000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES SILVER OXIDE", - "hsn_code": "85064000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES LITHIUM", - "hsn_code": "85065000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES AIR-ZINC", - "hsn_code": "85066000" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES - OTHER PRIMARY CELLS AND PRIMARY\nBATTERIES:BUTTON CELLS", - "hsn_code": "85068010" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES - OTHER PRIMARY CELLS AND PRIMARY\nBATTERIES:OTHER", - "hsn_code": "85068090" - }, - { - "description": "PRIMARY CELLS AND PRIMARY BATTERIES -PARTS", - "hsn_code": "85069000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) LEAD-ACID, OF A KIND USED FOR STARTING PISTON\nENGINES", - "hsn_code": "85071000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) OTHER LEAD-ACID ACCUMULATORS", - "hsn_code": "85072000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) NICKEL-CADMIUM", - "hsn_code": "85073000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) NICKEL-IRON", - "hsn_code": "85074000" - }, - { - "description": "NICKEL-METAL HYDRIDE", - "hsn_code": "85075000" - }, - { - "description": "LITHIUM-ION", - "hsn_code": "85076000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) OTHER ACCUMULATORS", - "hsn_code": "85078000" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) -PARTS: ACCUMULATOR CASES MADE OF HARD RUBBER\nAND SEPARATORS", - "hsn_code": "85079010" - }, - { - "description": "ELECTRIC ACCUMULATORS, INCLUDING SEPARATORS THEREFOR, WHETHER OR NOT\nRECTANGULAR (INCLUDING SQUARE) -PARTS: OTHER", - "hsn_code": "85079090" - }, - { - "description": "VACCUM CLEANERS - WITH SELF-CONTAINED ELECTIC MOTOR: -- OF A POWER NOT EXCEEDING\n1500 W AND HAVING A DUST BAG OR OTHER RECEPTACLE CAPACITY NOT EXCEEDING 20 L", - "hsn_code": "85081100" - }, - { - "description": "VACCUM CLEANERS - WITH SELF-CONTAINED ELECTIC MOTOR: -- OTHER", - "hsn_code": "85081900" - }, - { - "description": "VACCUM CLEANERS - OTHER VACCUM CLEANERS", - "hsn_code": "85086000" - }, - { - "description": "VACCUM CLEANERS - PARTS", - "hsn_code": "85087000" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR\nVACUUM CLEANERS, INCLUDING DRY AND WET VACUUM CLEANERS", - "hsn_code": "85091000" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR\nFLOOR POLISHERS", - "hsn_code": "85092000" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR\nKITCHEN WASTE DISPOSERS", - "hsn_code": "85093000" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR,\nOTHER THAN VACUUM CLEANERS OF HEADING 8508 -FOOD GRINDERS AND MIXERS; FRUIT OR\nVEGETABLE JUICE EXTRACTORS: --- FOOD GRINDERS", - "hsn_code": "85094010" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR,\nOTHER THAN VACUUM CLEANERS OF HEADING 8508 -FOOD GRINDERS AND MIXERS; FRUIT OR\nVEGETABLE JUICE EXTRACTORS: --- OTHER", - "hsn_code": "85094090" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR,\nOTHER THAN VACUUM CLEANERS OF HEADING 8508 - OTHER APPLIANCES", - "hsn_code": "85098000" - }, - { - "description": "ELECTRO-MECHANICAL DOMESTIC APPLIANCES, WITH SELF-CONTAINED ELECTRIC MOTOR,\nOTHER THAN VACUUM CLEANERS OF HEADING 8508 - PARTS", - "hsn_code": "85099000" - }, - { - "description": "SHAVERS, HAIR CLIPPERS AND HAIR-REMOVING APPLIANCES, WITH SELF-CONTAINED ELECTRIC\nMOTOR SHAVERS", - "hsn_code": "85101000" - }, - { - "description": "SHAVERS, HAIR CLIPPERS AND HAIR-REMOVING APPLIANCES, WITH SELF-CONTAINED ELECTRIC\nMOTOR HAIR CLIPPERS", - "hsn_code": "85102000" - }, - { - "description": "SHAVERS, HAIR CLIPPERS AND HAIR-REMOVING APPLIANCES, WITH SELF-CONTAINED ELECTRIC\nMOTOR HAIR-REMOVING APPLIANCES", - "hsn_code": "85103000" - }, - { - "description": "SHAVERS, HAIR CLIPPERS AND HAIR-REMOVING APPLIANCES, WITH SELF-CONTAINED ELECTRIC\nMOTOR PARTS", - "hsn_code": "85109000" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES SPARKING PLUGS", - "hsn_code": "85111000" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES -IGNITION MAGNETOS; MAGNETO\nDYNAMOS; MAGNETIC FLYWHEELS: ELECTRONIC IGNITION MAGNETOS", - "hsn_code": "85112010" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES -IGNITION MAGNETOS; MAGNETO\nDYNAMOS; MAGNETIC FLYWHEELS: OTHER", - "hsn_code": "85112090" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES -DISTRIBUTORS; IGNITION COILS:\nDISTRIBUTORS", - "hsn_code": "85113010" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES -DISTRIBUTORS; IGNITION COILS: IGNITION\nCOILS", - "hsn_code": "85113020" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES STARTER MOTORS AND DUAL PURPOSE\nSTARTER- GENERATORS", - "hsn_code": "85114000" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES OTHER GENERATORS", - "hsn_code": "85115000" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES OTHER EQUIPMENT", - "hsn_code": "85118000" - }, - { - "description": "ELECTRICAL IGNITION OR STARTING EQUIPMENT OF A KIND USED FOR SPARK-IGNITION OR\nCOMPRESSION-IGNITION INTERNAL COMBUSTION ENGINES (FOR EXAMPLE, IGNITION\nMAGNETOS, MAGNETO-DYNAMOS, IGNITION COILS, SPARKING PLUGS AND GLOW PLUGS,\nSTARTER MOTORS); GENERATORS (FOR EXAMPLE, DYNAMOS, ALTERNATORS) AND CUTOUTS OF\nA KIND USED IN CONJUNCTION WITH SUCH ENGINES PARTS", - "hsn_code": "85119000" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES LIGHTING OR VISUAL SIGNALLING EQUIPMENT OF A KIND USED ON BICYCLES", - "hsn_code": "85121000" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES - OTHER LIGHTING OR VISUAL SIGNALLING EQUIPMENT: HEAD LAMPS, TAIL LAMPS,\nSTOP LAMPS, SIDE LAMPS AND BLINKERS", - "hsn_code": "85122010" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES - OTHER LIGHTING OR VISUAL SIGNALLING EQUIPMENT: OTHER AUTOMOBILE\nLIGHTING EQUIPMENT", - "hsn_code": "85122020" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES - OTHER LIGHTING OR VISUAL SIGNALLING EQUIPMENT: OTHER", - "hsn_code": "85122090" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES -SOUND SIGNALLING EQUIPMENT: HORNS", - "hsn_code": "85123010" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES -SOUND SIGNALLING EQUIPMENT: OTHER", - "hsn_code": "85123090" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES WINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS", - "hsn_code": "85124000" - }, - { - "description": "ELECTRICAL LIGHTING OR SIGNALLING EQUIPMENT (EXCLUDING ARTICLES OF HEADING 8539),\nWINDSCREEN WIPERS, DEFROSTERS AND DEMISTERS, OF A KIND USED FOR CYCLES OR MOTOR\nVEHICLES PARTS", - "hsn_code": "85129000" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 -LAMPS: TORCH", - "hsn_code": "85131010" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 -LAMPS: OTHER FLASH-LIGHTS EXCLUDING\nTHOSE FOR PHOTOGRAPHIC PURPOSES", - "hsn_code": "85131020" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 -LAMPS: MINERS SAFETY LAMPS", - "hsn_code": "85131030" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 -LAMPS: MAGNETO LAMPS", - "hsn_code": "85131040" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 -LAMPS: OTHER", - "hsn_code": "85131090" - }, - { - "description": "PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN SOURCE OF ENERGY (FOR\nEXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER THAN LIGHTING EQUIPMENT\nOF HEADING 8512 8513 10 PORTABLE ELECTRIC LAMPS DESIGNED TO FUNCTION BY THEIR OWN\nSOURCE OF ENERGY (FOR EXAMPLE, DRY BATTERIES, ACCUMULATORS, MAGNETOS), OTHER\nTHAN LIGHTING EQUIPMENT OF HEADING 8512 - PARTS", - "hsn_code": "85139000" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS\nRESISTANCE HEATED FURNACES AND OVENS", - "hsn_code": "85141000" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS\nFURNACES AND OVENS FUNCTIONING BY INDUCTION OR DIELECTRIC LOSS", - "hsn_code": "85142000" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS -\nOTHER FURNACES AND OVENS: FOR MELTING", - "hsn_code": "85143010" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS -\nOTHER FURNACES AND OVENS: OTHER", - "hsn_code": "85143090" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS\nOTHER EQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC\nLOSS", - "hsn_code": "85144000" - }, - { - "description": "INDUSTRIAL OR LABORATORY ELECTRIC FURNACES AND OVENS (INCLUDING THOSE\nFUNCTIONING BY INDUCTION OR DIELECTRIC LOSS); OTHER INDUSTRIAL OR LABORATORY\nEQUIPMENT FOR THE HEAT TREATMENT OF MATERIALS BY INDUCTION OR DIELECTRIC LOSS\nPARTS", - "hsn_code": "85149000" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - BRAZING OR\nSOLDERING MACHINES AND APPARATUS: SOLDERING IRONS AND GUNS", - "hsn_code": "85151100" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - BRAZING OR\nSOLDERING MACHINES AND APPARATUS: OTHER", - "hsn_code": "85151900" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR RESISTANCE WELDING OF METAL: - FULLY OR PARTLY AUTOMATIC: AUTOMATIC\nSPOT WELDING MACHINERY", - "hsn_code": "85152110" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR RESISTANCE WELDING OF METAL: - FULLY OR PARTLY AUTOMATIC: AUTOMATIC\nBUTT WELDING MACHINERY", - "hsn_code": "85152120" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR RESISTANCE WELDING OF METAL: - FULLY OR PARTLY AUTOMATIC: OTHER", - "hsn_code": "85152190" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR RESISTANCE WELDING OF METAL: OTHER", - "hsn_code": "85152900" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR ARC (INCLUDING PLASMA ARC) WELDING OF METALS: FULLY OR PARTLY\nAUTOMATIC", - "hsn_code": "85153100" - }, - { - "description": "39 ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR ARC (INCLUDING PLASMA ARC) WELDING OF METALS: - OTHER: AC ARC\nWELDING MACHINERY", - "hsn_code": "85153910" - }, - { - "description": "39 ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR ARC (INCLUDING PLASMA ARC) WELDING OF METALS: - OTHER: ARGON ARC\nWELDING MACHINERY", - "hsn_code": "85153920" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - MACHINES AND\nAPPARATUS FOR ARC (INCLUDING PLASMA ARC) WELDING OF METALS: - OTHER: OTHER", - "hsn_code": "85153990" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - OTHER MACHINES\nAND APPARATUS: HIGH-FREQUENCY PLASTIC WELDING MACHINE", - "hsn_code": "85158010" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS - OTHER MACHINES\nAND APPARATUS: OTHER", - "hsn_code": "85158090" - }, - { - "description": "ELECTRIC (INCLUDING ELECTRICALLY HEATED GAS), LASER OR OTHER LIGHT OR PHOTO BEAM,\nULTRASONIC, ELECTRON BEAM, MAGNETIC PULSE OR PLASMA ARC SOLDERING, BRAZING OR\nWELDING MACHINES AND APPARATUS, WHETHER OR NOT CAPABLE OF CUTTING; ELECTRIC\nMACHINES AND APPARATUS FOR HOT SPRAYING OF METALS OR CERMETS PARTS", - "hsn_code": "85159000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS", - "hsn_code": "85161000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - ELECTRIC SPACE HEATING APPARATUS AND ELECTRIC SOIL HEATING APPARATUS:\nSTORAGE HEATING RADIATORS", - "hsn_code": "85162100" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - ELECTRIC SPACE HEATING APPARATUS AND ELECTRIC SOIL HEATING APPARATUS: OTHER", - "hsn_code": "85162900" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - ELECTRO-THERMIC HAIR-DRESSING OR HAND-DRYING APPARATUS : HAIR DRYERS", - "hsn_code": "85163100" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - ELECTRO-THERMIC HAIR-DRESSING OR HAND-DRYING APPARATUS : OTHER HAIR\nDRESSING APPARATUS", - "hsn_code": "85163200" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - ELECTRO-THERMIC HAIR-DRESSING OR HAND-DRYING APPARATUS : HAND-DRYING\nAPPARATUS", - "hsn_code": "85163300" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 ELECTRIC SMOOTHING IRONS", - "hsn_code": "85164000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 MICROWAVE OVENS", - "hsn_code": "85165000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 OTHER OVENS; COOKERS, COOKING PLATES, BOILING RINGS, GRILLERS AND ROASTERS", - "hsn_code": "85166000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - OTHER ELECTRO-THERMIC APPLIANCES: COFFEE OR TEA MAKERS", - "hsn_code": "85167100" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - OTHER ELECTRO-THERMIC APPLIANCES: TOASTERS", - "hsn_code": "85167200" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - OTHER ELECTRO-THERMIC APPLIANCES: - OTHER: ELECTRO-THERMIC FLUID HEATERS", - "hsn_code": "85167910" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - OTHER ELECTRO-THERMIC APPLIANCES: - OTHER: ELECTRICAL OR ELECTRONIC DEVICES\nFOR REPELLING INSECTS (FOR EXAMPLE, MOSQUITOES OR OTHER SIMILAR KIND OF INSECTS)", - "hsn_code": "85167920" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 - OTHER ELECTRO-THERMIC APPLIANCES: - OTHER: OTHER", - "hsn_code": "85167990" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 ELECTRIC HEATING RESISTORS", - "hsn_code": "85168000" - }, - { - "description": "ELECTRIC INSTANTANEOUS OR STORAGE WATER HEATERS AND IMMERSION HEATERS; ELECTRIC\nSPACE HEATING APPARATUS AND SOIL HEATING APPARATUS; ELECTROTHERMIC HAIR-DRESSING\nAPPARATUS (FOR EXAMPLE, HAIR DRYERS, HAIR CURLERS, CURLING TONG HEATERS) AND HAND\nDRYERS; ELECTRIC SMOOTHING IRONS; OTHER ELECTRO-THERMIC APPLIANCES OF A KIND USED\nFOR DOMESTIC PURPOSES; ELECTRIC HEATING RESISTORS, OTHER THAN THOSE OF HEADING\n8545 PARTS", - "hsn_code": "85169000" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS: --- PUSH BUTTON TYPE", - "hsn_code": "85171110" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS: --- OTHER", - "hsn_code": "85171190" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- TELEPHONES\nFOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: --- PUSH BUTTON TYPE", - "hsn_code": "85171210" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- TELEPHONES\nFOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: --- OTHER", - "hsn_code": "85171290" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- OTHER: ---\nPUSH BUTTON TYPE", - "hsn_code": "85171810" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - TELEPHONE SETS, INCLUDING\nTELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS NETWORKS: -- OTHER: ---\nOTHER", - "hsn_code": "85171890" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - TELEPHONE\nSETS; VIDEOPHONES: - OTHER: - TELEPHONE SETS: PUSH BUTTON TYPE", - "hsn_code": "85171911" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - TELEPHONE\nSETS; VIDEOPHONES: - OTHER: - TELEPHONE SETS: ROTARY DIAL TYPE", - "hsn_code": "85171912" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - TELEPHONE\nSETS; VIDEOPHONES: - OTHER: - TELEPHONE SETS: OTHER", - "hsn_code": "85171919" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - TELEPHONE\nSETS; VIDEOPHONES: - OTHER: VIDEOPHONES", - "hsn_code": "85171920" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - FACSIMILE\nMACHINES AND TELEPRINTERS: FASCIMILE MACHINES", - "hsn_code": "85172100" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - FACSIMILE\nMACHINES AND TELEPRINTERS: TELEPRINTERS", - "hsn_code": "85172200" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES TELEPHONIC\nOR TELEGRAPHIC SWITCHING APPARATUS", - "hsn_code": "85173000" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: PLCC\nEQUIPMENT", - "hsn_code": "85175010" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: VOICE\nFREQUENCY TELEGRAPHY", - "hsn_code": "85175020" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: MODEMS\n(MODULATORS-DEMODULATORS)", - "hsn_code": "85175030" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: HIGH BIT\nRATE DIGITAL SUBSCRIBER LINE SYSTEM (HDSL)", - "hsn_code": "85175040" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: DIGITAL\nLOOP CARRIER SYSTEM (DLC)", - "hsn_code": "85175050" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS:\nSYNCHRONOUS DIGITAL HIERARCHY SYSTEM (SDH)", - "hsn_code": "85175060" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS:\nMULTIPLEXER, STATISTICAL MULTIPLEXER", - "hsn_code": "85175070" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: - OTHER:\nISDN TERMINALS", - "hsn_code": "85175091" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: - OTHER:\nISDN TERMINAL ADAPTERS", - "hsn_code": "85175092" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: - OTHER:\nROUTERS", - "hsn_code": "85175093" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: - OTHER: X25\nPADS", - "hsn_code": "85175094" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS, FOR CARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS: - OTHER:\nOTHER", - "hsn_code": "85175099" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- BASE STATIONS", - "hsn_code": "85176100" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- PLCC EQUIPMENT", - "hsn_code": "85176210" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- VOICE FREQUENCY TELEGRAPHY", - "hsn_code": "85176220" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- MODEMS (MODULATORS-DEMODULATORS)", - "hsn_code": "85176230" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- HIGH BIT RATE DIGITAL SUBSCRIBER LINE SYSTEM (HSDL)", - "hsn_code": "85176240" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- DIGIAL LOOP CARRIER SYSTEM (DLC)", - "hsn_code": "85176250" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- SYNCHRONOUS DIGITAL HIERARCHY SYSTEM (SDH)", - "hsn_code": "85176260" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- MULTIPLEXERS, STATISTICAL MULTIPLEXERS", - "hsn_code": "85176270" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- MACHINES FOR THE RECEPTION, CONVERSION AND TRANSMISSION OR\nREGENRATION OF VOICE, IMAGES OR OTHER DATA, INCLUDING SWITCHING AND ROUTING\nAPPARATUS: --- OTHER", - "hsn_code": "85176290" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- ISDN SYSTEM", - "hsn_code": "85176910" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- ISDN TERMINAL ADAPTOR", - "hsn_code": "85176920" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- ROUTERS", - "hsn_code": "85176930" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- X25 PADS", - "hsn_code": "85176940" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- SUBSCRIBER END EQUIPMENT", - "hsn_code": "85176950" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- SET TOP BOXES FOR GAINING ACCESS TO INTERNET", - "hsn_code": "85176960" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- ATTACHMENT FOR TELEPHONES", - "hsn_code": "85176970" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - OTHER APPARATUS FOR THE\nTRANSMISSION OR RECEPTION OF VOICE, IMAGES OR OTHER DATA, INCLUDING APPARATUS FOR\nCOMMUNICATION IN A WIRED OR WIRELESS NETWORK (SUCH AS A LOCAL OR WIDE AREA\nNETWORK) -- OTHER: --- OTHER", - "hsn_code": "85176990" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - PARTS --- POPULATED,\nLOADED OR STUFFED PRINTED CIRCUIT BOARDS", - "hsn_code": "85177010" - }, - { - "description": "TELEPHONE SETS, INCLUDING TELEPHONES FOR CELLULAR NETWORKS OR FOR OTHER WIRELESS\nNETWORKS; OTHER APPARATUS FOR THE TRANSMISSION OR RECEPTION OF VOICE, IMAGES OR\nOTHER DATA, INCLUDING APPARATUS FOR COMMUNICATION IN A WIRED OR WIRELESS\nNETWORK (SUCH AS A LOCAL OR WIDE AREA NETWORK), OTHER THAN TRANSMISSION OR\nRECEPTION APPARATUS OF HEADING 8443, 8525, 8527 OR 8528 - PARTS --- OTHER", - "hsn_code": "85177090" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS: ATTACHMENTS FOR TELEPHONES", - "hsn_code": "85178010" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS: SUBSCRIBER END EQUIPMENT", - "hsn_code": "85178020" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS: SET TOP BOXES FOR GAINING ACCESS TO THE INTERNET", - "hsn_code": "85178030" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - OTHER\nAPPARATUS: OTHER", - "hsn_code": "85178090" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - PARTS:\nPOPULATED, LOADED OR STUFFED PRINTED CIRCUIT BOARDS", - "hsn_code": "85179010" - }, - { - "description": "ELECTRICAL APPARATUS FOR LINE TELEPHONY OR LINE TELEGRAPHY, INCLUDING LINE\nTELEPHONE SETS WITH CORDLESS HANDSETS AND TELECOMMUNICATION APPARATUS FOR\nCARRIER-CURRENT LINE SYSTEMS OR FOR DIGITAL LINE SYSTEMS; VIDEOPHONES - PARTS: OTHER", - "hsn_code": "85179090" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET MICROPHONES AND\nSTANDS THEREFOR", - "hsn_code": "85181000" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET - LOUDSPEAKERS,\nWHETHER OR NOT MOUNTED IN THEIR ENCLOSURES: SINGLE LOUDSPEAKERS, MOUNTED IN\nTHEIR ENCLOSURES", - "hsn_code": "85182100" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET - LOUDSPEAKERS,\nWHETHER OR NOT MOUNTED IN THEIR ENCLOSURES: MULTIPLE LOUDSPEAKERS, MOUNTED IN\nTHE SAME ENCLOSURE", - "hsn_code": "85182200" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET - LOUDSPEAKERS,\nWHETHER OR NOT MOUNTED IN THEIR ENCLOSURES: OTHER", - "hsn_code": "85182900" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET HEADPHONES AND\nEARPHONES, WHETHER OR NOT COMBINED WITH A MICROPHONE, AND SETS CONSISTING OF A\nMICROPHONE AND ONE OR MORE LOUDSPEAKERS", - "hsn_code": "85183000" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET AUDIO-FREQUENCY\nELECTRIC AMPLIFIERS", - "hsn_code": "85184000" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET ELECTRIC SOUND\nAMPLIFIER SETS", - "hsn_code": "85185000" - }, - { - "description": "MICROPHONES AND STANDS THEREFOR; LOUDSPEAKERS, WHETHER OR NOT MOUNTED IN\nTHEIR ENCLOSURES; HEADPHONES AND EARPHONES, WHETHER OR NOT COMBINED WITH A\nMICROPHONE, AND SETS CONSISTING OF A MICROPHONE AND ONE OR MORE LOUDSPEAKERS;\nAUDIOFREQUENCY ELECTRIC AMPLIFIERS; ELECTRIC SOUND AMPLIFIER SET PARTS", - "hsn_code": "85189000" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE COIN OR DISC\nOPERATED RECORD-PLAYERS", - "hsn_code": "85191000" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - APPARATUS OPERATED BY COINS, BANK\nNOTES, BANK CARDS, TOKENS OR BY OTHER MEANS OF PAYMENT", - "hsn_code": "85192000" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER\nRECORD-PLAYERS: WITHOUT LOUDSPEAKER", - "hsn_code": "85192100" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER\nRECORD-PLAYERS: OTHER", - "hsn_code": "85192900" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS -TURNTABLES (RECORD-DECKS)", - "hsn_code": "85193000" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - TURNTABLES\n(RECORD-DECKS): WITH AUTOMATIC RECORD CHANGING MECHANISM", - "hsn_code": "85193100" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - TURNTABLES\n(RECORD-DECKS): OTHER", - "hsn_code": "85193900" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE TRANSCRIBING\nMACHINES", - "hsn_code": "85194000" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS -TELEPHONE ANSWERING MACHINES", - "hsn_code": "85195000" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- USING MAGNETIC,\nOPTICAL OR SEMICONDUCTOR MEDIA", - "hsn_code": "85198100" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- OTHER --- AUDIO\nCOMPACT DISC PLAYER", - "hsn_code": "85198910" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- OTHER --- COMPACT\nDISC CHANGER INCLUDING MINI DISC PLAYER OR LASER DISC PLAYER", - "hsn_code": "85198920" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- OTHER --- TIME CODE\nRECORDER", - "hsn_code": "85198930" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- OTHER --- MP-3\nPLAYER", - "hsn_code": "85198940" - }, - { - "description": "SOUND RECORDING OR REPRODUCING APPARATUS - OTHER APPARATUS -- OTHER --- OTHER", - "hsn_code": "85198990" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER\nSOUND REPRODUCING APPARATUS: POCKET-SIZE CASSETTE PLAYERS", - "hsn_code": "85199200" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER\nSOUND REPRODUCING APPARATUS: OTHER, CASSETTE-TYPE", - "hsn_code": "85199300" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER : -\nOTHER SOUND REPRODUCING APPARATUS: AUDIO COMPACT DISC PLAYERS", - "hsn_code": "85199910" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER : -\nOTHER SOUND REPRODUCING APPARATUS: COMPACT DISC CHANGER INCLUDING MINI DISC\nPLAYER OR LASER DISC PLAYER", - "hsn_code": "85199920" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER : -\nOTHER SOUND REPRODUCING APPARATUS: TIME CODE READERS", - "hsn_code": "85199930" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER\nSOUND REPRODUCING APPARATUS: - OTHER : MP-3 PLAYER", - "hsn_code": "85199940" - }, - { - "description": "TURNTABLES (RECORD-DECKS), RECORD-PLAYERS, CASSETTE-PLAYERS AND OTHER SOUND\nREPRODUCING APPARATUS, NOT INCORPORATING A SOUND RECORDING DEVICE - OTHER : -\nOTHER SOUND REPRODUCING APPARATUS: OTHER", - "hsn_code": "85199990" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE DICTATING MACHINES NOT CAPABLE OF\nOPERATING WITHOUT AN EXTERNAL SOURCE OF POWER", - "hsn_code": "85201000" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE TELEPHONE ANSWERING MACHINES", - "hsn_code": "85202000" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER MAGNETIC TAPE RECORDERS\nINCORPORATING SOUND REPRODUCING APPARATUS: DIGITAL AUDIO TYPE", - "hsn_code": "85203200" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER MAGNETIC TAPE RECORDERS\nINCORPORATING SOUND REPRODUCING APPARATUS: - OTHER, CASSETTE-TYPE: HEAVY-DUTY\nTAPE RECORDERS", - "hsn_code": "85203310" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER MAGNETIC TAPE RECORDERS\nINCORPORATING SOUND REPRODUCING APPARATUS: - OTHER, CASSETTE-TYPE: OTHER", - "hsn_code": "85203390" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER MAGNETIC TAPE RECORDERS\nINCORPORATING SOUND REPRODUCING APPARATUS: - OTHER : HEAVY-DUTY TAPE RECORDERS", - "hsn_code": "85203910" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER MAGNETIC TAPE RECORDERS\nINCORPORATING SOUND REPRODUCING APPARATUS: - OTHER : OTHER", - "hsn_code": "85203990" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER: COMPACT DISC RECORDING\nAPPARATUS", - "hsn_code": "85209010" - }, - { - "description": "MAGNETIC TAPE RECORDERS AND OTHER SOUND RECORDING APPARATUS, WHETHER OR NOT\nINCORPORATING A SOUND REPRODUCING DEVICE - OTHER: OTHER", - "hsn_code": "85209090" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - CASSETTE TAPE-TYPE: PROFESSIONAL VIDEO TAPE RECORDERS\nWITH OR 1 TAPE", - "hsn_code": "85211011" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - CASSETTE TAPE-TYPE: VIDEO RECORDERS BETACAM OR\nBETACAM SP OR DIGITAL BETACAM S-VHS OR DIGITAL-S", - "hsn_code": "85211012" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - CASSETTE TAPE-TYPE: OTHER", - "hsn_code": "85211019" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - SPOOL TYPE: PROFESSIONAL VIDEO TAPE RECORDERS WITH OR\n1 TAPE", - "hsn_code": "85211021" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - SPOOL TYPE: VIDEO RECORDERS BETACAM OR BETACAM SP OR\nDIGITAL BETACAM S-VHS OR DIGITAL-S", - "hsn_code": "85211022" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - SPOOL TYPE: OTHER", - "hsn_code": "85211029" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - OTHER: PROFESSIONAL VIDEO TAPE RECORDERS WITH OR 1\nTAPE SOLID STATE OR OTHERWISE", - "hsn_code": "85211091" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - OTHER: VIDEO RECORDERS BETACAM OR BETACAM SP OR\nDIGITAL BETACAM S-VHS OR DIGITAL-S", - "hsn_code": "85211092" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER -MAGNETIC TAPE-TYPE: - OTHER: OTHER", - "hsn_code": "85211099" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER OTHER : VIDEO DUPLICATING SYSTEM WITH MASTER AND SLAVE CONTROL", - "hsn_code": "85219010" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER OTHER : DVD PLAYER", - "hsn_code": "85219020" - }, - { - "description": "VIDEO RECORDING OR REPRODUCING APPARATUS, WHETHER OR NOT INCORPORATING A VIDEO\nTUNER OTHER : OTHER", - "hsn_code": "85219090" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF\nHEADINGS 8519 TO 8521PICK-UP CARTRIDGES", - "hsn_code": "85221000" - }, - { - "description": "PARTS AND ACCESSORIES SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF\nHEADINGS 8519 TO 8521- OTHER", - "hsn_code": "85229000" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM : - FOR RECORDING SOUND : AUDIO CASSETTES", - "hsn_code": "85231111" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM : - FOR RECORDING SOUND : OTHER", - "hsn_code": "85231119" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM : - FOR RECORDING PHENOMENA OTHER THAN SOUND: VIDEO CASSETTES", - "hsn_code": "85231121" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM : - FOR RECORDING PHENOMENA OTHER THAN SOUND: OTHER VIDEO\nMAGNETIC TAPE INCLUDING THOSE IN HUBS AND REELS, ROLLS, PANCAKES AND JUMBO ROLLS", - "hsn_code": "85231122" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM : - FOR RECORDING PHENOMENA OTHER THAN SOUND: OTHER", - "hsn_code": "85231129" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 4 MM BUT NOT EXCEEDING 6.5 MM: - FOR RECORDING SOUND: AUDIO CASSETTES", - "hsn_code": "85231211" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 4 MM BUT NOT EXCEEDING 6.5 MM: - FOR RECORDING SOUND: OTHER", - "hsn_code": "85231219" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 4 MM BUT NOT EXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN\nSOUND : VIDEO CASSETTES", - "hsn_code": "85231221" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 4 MM BUT NOT EXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN\nSOUND : OTHER VIDEO MAGNETIC TAPE INCLUDING THOSE IN HUBS AND REELS, ROLLS,\nPANCAKES AND JUMBO ROLLS", - "hsn_code": "85231222" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 4 MM BUT NOT EXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN\nSOUND : OTHER", - "hsn_code": "85231229" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING SOUND : AUDIO CASSETTE TAPE OF WIDTH EXCEEDING\n6.5 MM BUT NOT EXCEEDING 35 MM, AND 16 MM SPROCKET TAPES", - "hsn_code": "85231311" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING SOUND : OTHER AUDIO CASSETTE TAPE", - "hsn_code": "85231312" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING SOUND : OTHER AUDIO MAGNETIC TAPE OF WIDTH\nEXCEEDING6.5 MM BUT NOT EXCEEDING 35 MM, AND 16 MM SPROCKET TAPES", - "hsn_code": "85231313" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING SOUND : OTHER", - "hsn_code": "85231319" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND : AND 1 VIDEO\nCASSETTES", - "hsn_code": "85231321" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND :# VIDEO CASSETTE\nSUITABLE TO WORK WITH BETACAM, BETACAM SP/M II AND VHS TYPE VCR", - "hsn_code": "85231322" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND : OTHER VIDEO\nCASSETTES", - "hsn_code": "85231323" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND : AND 1 VIDEO\nTAPES", - "hsn_code": "85231324" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND : OTHER VIDEO\nTAPES", - "hsn_code": "85231325" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC TAPES: - OF A WIDTH\nEXCEEDING 6.5 MM: - FOR RECORDING PHENOMENA OTHER THAN SOUND : OTHER", - "hsn_code": "85231329" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC DISCS: HARD DISC PACK", - "hsn_code": "85232010" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC DISCS: FLOPPY DISC OR\nDISKETTES", - "hsn_code": "85232020" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - MAGNETIC DISCS: OTHER", - "hsn_code": "85232090" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- CARDS INCORPORATING A MAGNETIC STRIPE", - "hsn_code": "85232100" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- AUDIO CASSETTES", - "hsn_code": "85232910" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- VIDEO CASSETTES", - "hsn_code": "85232920" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- VIDEO MAGNETIC TAPE INCLUDING\nTHOSE IN HUBS AND REELS, ROLLS, PANCAKES AND JUMBO ROLLS", - "hsn_code": "85232930" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- 3/4 INCH AND 1 INCH VIDEO\nCASSETTES", - "hsn_code": "85232940" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- 1/2 INCH VIDEO CASSETTES\nSUITABLE TO WORK WITH BETACAM, BETACAM SP/M II AND VHS TYPE VCR", - "hsn_code": "85232950" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- OTHER VIDEO CASSETTES AND\nTAPES 3/4 INCH AND 1 INCH VIDEO CASSETTES", - "hsn_code": "85232960" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- ALL KINDS OF MAGNETIC DISCS", - "hsn_code": "85232970" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- CARTRIDGE TAPE", - "hsn_code": "85232980" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - MAGNETIC MEDIA -- OTHER --- OTHER", - "hsn_code": "85232990" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 CARDS INCORPORATING A MAGNETIC\nSTRIPE", - "hsn_code": "85233000" - }, - { - "description": "COMPACT DISC (AUDIO/VIDEO)", - "hsn_code": "85234110" - }, - { - "description": "BLANK MASTER DISCS (THAT IS, SUBSTRATE) FOR PRODUCING STAMPER FOR COMPACT DISC", - "hsn_code": "85234120" - }, - { - "description": "MATRICES FOR PRODUCTION OF RECORDS; PREPARED RECORD BLANKS", - "hsn_code": "85234130" - }, - { - "description": "CARTRIDGE TAPE", - "hsn_code": "85234140" - }, - { - "description": "1/2 INCH VIDEO CASSETTE SUITABLE TO WORK WITH DIGITAL VCR", - "hsn_code": "85234150" - }, - { - "description": "DVD", - "hsn_code": "85234160" - }, - { - "description": "OTHER", - "hsn_code": "85234190" - }, - { - "description": "COMPACT DISC (AUDIO)", - "hsn_code": "85234910" - }, - { - "description": "COMPACT DISC (VIDEO)", - "hsn_code": "85234920" - }, - { - "description": "STAMPER FOR CD AUDIO, CD VIDEO AND CD-ROM", - "hsn_code": "85234930" - }, - { - "description": "DVD", - "hsn_code": "85234940" - }, - { - "description": "MATRICES FOR PRODUCTION OF RECORDS; PREPARED RECORD BLANKS", - "hsn_code": "85234950" - }, - { - "description": "CARTRIDGE TAPE", - "hsn_code": "85234960" - }, - { - "description": "1/2 INCH VIDEO CASSETTE SUITABLE TO WORK WITH DIGITAL VCR", - "hsn_code": "85234970" - }, - { - "description": "OTHER", - "hsn_code": "85234990" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- SOLID-STATE NON-VOLATILE STORAGE\nDEVICES", - "hsn_code": "85235100" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- SMART CARDS --- SIM CARDS", - "hsn_code": "85235210" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- SMART CARDS --- MEMORY CARDS", - "hsn_code": "85235220" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- SMART CARDS --- OTHER", - "hsn_code": "85235290" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- OTHER --- PROXIMITY CARDS AND\nTAGS", - "hsn_code": "85235910" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - SEMI-CONDUCTOR MEDIA -- OTHER --- OTHER", - "hsn_code": "85235990" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- GRAMAPHONE RECORDS", - "hsn_code": "85238010" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- INFORMATION TECHNOLOGY SOFTWARE", - "hsn_code": "85238020" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- AUDIO-VISUAL NEWS OR AUDIO VISUAL VIEWS", - "hsn_code": "85238030" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- CHILDRENS VIDEO FILMS", - "hsn_code": "85238040" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- VIDEO TAPES OF EDUCATIONAL NATURE", - "hsn_code": "85238050" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- 2-D/3-D COMPUTER GRAPHICS", - "hsn_code": "85238060" - }, - { - "description": "DISCS, TAPES, SOLID-STATE NON-VOLATILE STORAGE DEVICES, SMART CARDS AND OTHER\nMEDIA FOR THE RECORDING OF SOUND OR OF OTHER PHENOMENA, WHETHER OR NOT\nRECORDED, INCLUDING MATRICES AND MASTERS PRODUCTION OF DISCS, BUT EXCLUDING\nPRODUCTS OF CHAPTER 37 - OTHER --- OTHER", - "hsn_code": "85238090" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: MATRICES FOR THE\nPRODUCTION OF RECORDS; PREPARED RECORD BLANKS", - "hsn_code": "85239010" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: CARTRIDGE TAPE", - "hsn_code": "85239020" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: VIDEO CASSETTE SUITABLE TO\nWORK WITH DIGITAL TYPE VCR", - "hsn_code": "85239030" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: UNRECORDED COMPACT DISC\n(AUDIO)", - "hsn_code": "85239040" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: COMPACT DISC RECORDABLE", - "hsn_code": "85239050" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: BLANK MASTER DISC (I.E.\nSUBSTRATE) FOR PRODUCING STAMPER FOR COMPACT DISC", - "hsn_code": "85239060" - }, - { - "description": "PREPARED UNRECORDED MEDIA FOR SOUND RECORDING OR SIMILAR RECORDING OF OTHER\nPHENOMENA, OTHER THAN PRODUCTS OF CHAPTER 37 - OTHER: OTHER", - "hsn_code": "85239090" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - GRAMOPHONE RECORDS: LEARNING AIDS, SUCH AS,\nLANGUAGE RECORDS", - "hsn_code": "85241010" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - GRAMOPHONE RECORDS: OTHER", - "hsn_code": "85241090" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - FOR\nREPRODUCING PHENOMENA OTHER THAN SOUND OR IMAGE: - SOFTWARE: INFORMATION\nTECHNOLOGY SOFTWARE", - "hsn_code": "85243111" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - FOR\nREPRODUCING PHENOMENA OTHER THAN SOUND OR IMAGE: - SOFTWARE: OTHER", - "hsn_code": "85243119" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - FOR\nREPRODUCING PHENOMENA OTHER THAN SOUND OR IMAGE: OTHER", - "hsn_code": "85243190" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - FOR\nREPRODUCING SOUND ONLY: PRE-RECORDED AUDIO COMPACT DISCS OR PRE-RECORDED AUDIO\nMINI DISCS", - "hsn_code": "85243210" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - FOR\nREPRODUCING SOUND ONLY: OTHER", - "hsn_code": "85243290" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - OTHER: VIDEO\nCOMPACT DISC OF EDUCATIONAL NATURE", - "hsn_code": "85243910" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - OTHER: OTHER\nVIDEO COMPACT DISCS", - "hsn_code": "85243920" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - OTHER: DIGITAL\nVIDEO DISCS", - "hsn_code": "85243930" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - DISCS FOR LASER READING SYSTEMS: - OTHER: OTHER", - "hsn_code": "85243990" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 -MAGNETIC TAPES FOR REPRODUCING PHENOMENA\nOTHER THAN SOUND OR IMAGE: - SOFTWARE: INFORMATION TECHNOLOGY SOFTWARE", - "hsn_code": "85244011" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 -MAGNETIC TAPES FOR REPRODUCING PHENOMENA\nOTHER THAN SOUND OR IMAGE: - SOFTWARE: OTHER", - "hsn_code": "85244019" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 -MAGNETIC TAPES FOR REPRODUCING PHENOMENA\nOTHER THAN SOUND OR IMAGE: OTHER", - "hsn_code": "85244090" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: - LEARNING AIDS: AUDIO CASSETTES", - "hsn_code": "85245111" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: - LEARNING AIDS: VIDEO TAPES OF EDUCATIONAL NATURE", - "hsn_code": "85245112" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: - LEARNING AIDS: OTHER", - "hsn_code": "85245119" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: AUDIO-VISUAL NEWS OR AUDIO-VISUAL VIEWS MATERIAL INCLUDING NEWS\nCLIPPINGS", - "hsn_code": "85245120" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: CHILDRENS VIDEO FILMS", - "hsn_code": "85245130" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: OTHER VIDEO FILMS", - "hsn_code": "85245140" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH NOT\nEXCEEDING 4 MM: OTHER", - "hsn_code": "85245190" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: - LEARNING AIDS: AUDIO CASSETTES", - "hsn_code": "85245211" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: - LEARNING AIDS: VIDEO TAPES OF EDUCATIONAL NATURE", - "hsn_code": "85245212" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: - LEARNING AIDS: OTHER", - "hsn_code": "85245219" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: AUDIO-VISUAL NEWS OR AUDIO-VISUAL VIEWS MATERIAL\nINCLUDING NEWS CLIPPINGS", - "hsn_code": "85245220" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: CHILDRENS VIDEO FILMS", - "hsn_code": "85245230" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: OTHER VIDEO FILMS", - "hsn_code": "85245240" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 4\nMM BUT NOT EXCEEDING 6.5 MM: OTHER", - "hsn_code": "85245290" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : - LEARNING AIDS: AUDIO CASSETTES", - "hsn_code": "85245311" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : - LEARNING AIDS: VIDEO TAPES OF EDUCATIONAL NATURE", - "hsn_code": "85245312" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : - LEARNING AIDS: OTHER", - "hsn_code": "85245319" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : AUDIO-VISUAL NEWS OR AUDIO-VISUAL MATERIAL INCLUDING NEWS CLIPPINGS", - "hsn_code": "85245320" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : CHILDREMS VIDEO FILMS", - "hsn_code": "85245330" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : OTHER VIDEO FILMS", - "hsn_code": "85245340" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER MAGNETIC TAPES: - OF A WIDTH EXCEEDING 6.5\nMM : OTHER", - "hsn_code": "85245390" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - CARDS INCORPORATING A MAGNETIC STRIPE", - "hsn_code": "85246000" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - FOR REPRODUCING PHENOMENA OTHER\nTHAN SOUND OR IMAGE: - SOFTWARE: INFORMATION TECHNOLOGY SOFTWARE ON FLOPPY\nDISC OR CARTRIDGE TAPE", - "hsn_code": "85249111" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - FOR REPRODUCING PHENOMENA OTHER\nTHAN SOUND OR IMAGE: - SOFTWARE: INFORMATION TECHNOLOGY SOFTWARE ON DISC OR ON\nCD ROM", - "hsn_code": "85249112" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - FOR REPRODUCING PHENOMENA OTHER\nTHAN SOUND OR IMAGE: - SOFTWARE: INFORMATION TECHNOLOGY SOFTWARE ON OTHER\nMEDIA", - "hsn_code": "85249113" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - FOR REPRODUCING PHENOMENA OTHER\nTHAN SOUND OR IMAGE: - SOFTWARE: OTHER", - "hsn_code": "85249119" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - FOR REPRODUCING PHENOMENA OTHER\nTHAN SOUND OR IMAGE: OTHER", - "hsn_code": "85249190" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - OTHER : AUDIO-VISUAL NEWS OR AUDIO\nVISUAL VIEWS MATERIAL INCLUDING NEWS CLIPPINGS", - "hsn_code": "85249910" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - OTHER : 2-D/3D COMPUTER GRAPHICS", - "hsn_code": "85249920" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - OTHER : STAMPER FOR CD AUDIO, CD VIDEO\nAND CD-ROM", - "hsn_code": "85249930" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - OTHER : - OTHER: MATRICES FOR THE\nPRODUCTION OF RECORDS; PREPARED RECORD BLANKS", - "hsn_code": "85249991" - }, - { - "description": "RECORDS, TAPES AND OTHER RECORDED MEDIA FOR SOUND OR OTHER SIMILARLY RECORDED\nPHENOMENA, INCLUDING MATRICES AND MASTERS FOR THE PRODUCTION OF RECORDS, BUT\nEXCLUDING PRODUCTS OF CHAPTER 37 - OTHER: - OTHER : - OTHER: OTHER", - "hsn_code": "85249999" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: RADIO BROADCAST TRANSMITTER", - "hsn_code": "85251010" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: TV BROADCAST TRANSMITTER", - "hsn_code": "85251020" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: BROADCAST EQUIPMENT SUB-SYSTEM", - "hsn_code": "85251030" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85251040" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: WIRELESS MICROPHONE", - "hsn_code": "85251050" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS: OTHER", - "hsn_code": "85251090" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: WALKIE TALKIE SET", - "hsn_code": "85252011" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: CORDLESS HANDSET", - "hsn_code": "85252012" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: CAR TELEPHONE", - "hsn_code": "85252013" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: TRANSPORTABLE TELEPHONE", - "hsn_code": "85252014" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: MARINE RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85252015" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: AMATEUR RADIO EQUIPMENT", - "hsn_code": "85252016" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: CELLULAR TELEPHONE", - "hsn_code": "85252017" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - TWO WAY RADIO COMMUNICATION\nEQUIPMENT: OTHER", - "hsn_code": "85252019" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - OTHER: VSAT TERMINALS", - "hsn_code": "85252091" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - OTHER: OTHER SATELLITE\nCOMMUNICATION EQUIPMENT", - "hsn_code": "85252092" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS - TRANSMISSION\nAPPARATUS INCORPORATING RECEPTION APPARATUS: - OTHER: OTHER", - "hsn_code": "85252099" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERASTELEVISION\nCAMERAS", - "hsn_code": "85253000" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY, RADIO\nBROADCASTING OR TELEVISION, WHETHER OR NOT INCORPORATING RECEPTION APPARATUS\nOR SOUND RECORDING OR REPRODUCING APPARATUS; TELEVISION CAMERAS; STILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERASSTILL IMAGE\nVIDEO CAMERAS AND OTHER VIDEO CAMERA RECORDERS; DIGITAL CAMERAS", - "hsn_code": "85254000" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS --- RADIO BROADCAST TRANSMITTER", - "hsn_code": "85255010" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS --- TV BROADCAST TRANSMITTER", - "hsn_code": "85255020" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS --- BROADCAST EQUIPMENT SUB-SYSTEM", - "hsn_code": "85255030" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS --- COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85255040" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS --- OTHER", - "hsn_code": "85255090" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- TWO WAY RADIO\nCOMMUNICATION EQUIPMENT ---- WALKIE TALKIE SET", - "hsn_code": "85256011" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- TWO WAY RADIO\nCOMMUNICATION EQUIPMENT ---- MARINE RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85256012" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- TWO WAY RADIO\nCOMMUNICATION EQUIPMENT ---- AMATEUR RADIO EQUIPMENT", - "hsn_code": "85256013" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- TWO WAY RADIO\nCOMMUNICATION EQUIPMENT ---- OTHER", - "hsn_code": "85256019" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- OTHER ---- VSAT\nTERMINALS", - "hsn_code": "85256091" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- OTHER ---- OTHER\nSATELLITE COMMUNICATION EQUIPMENT", - "hsn_code": "85256092" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTRANSMISSION APPARATUS INCORPORATING RECEPTION APPARATUS --- OTHER ---- OTHER", - "hsn_code": "85256099" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS --- TELEVISION\nCAMERAS", - "hsn_code": "85258010" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS --- DIGITAL\nCAMERAS", - "hsn_code": "85258020" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS --- VIDEO CAMERA\nRECORDERS", - "hsn_code": "85258030" - }, - { - "description": "TRANSMISSION APPARATUS FOR RADIO BROADCASTING OR TELEVISION, WHETHER OR NOT\nINCORPORATING RECEPTION APPARATUS OR SOUND RECORDING OR REPRODUCING\nAPPARATUS; TELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS -\nTELEVISION CAMERAS, DIGITAL CAMERAS AND VIDEO CAMERA RECORDERS --- OTHER", - "hsn_code": "85258090" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS RADAR APPARATUS", - "hsn_code": "85261000" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS - OTHER: - RADIO NAVIGATIONAL AID APPARATUS: DIRECTION MEASURING\nEQUIPMENT", - "hsn_code": "85269110" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS - OTHER: - RADIO NAVIGATIONAL AID APPARATUS: INSTRUMENT LANDING SYSTEM", - "hsn_code": "85269120" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS - OTHER: - RADIO NAVIGATIONAL AID APPARATUS: DIRECTION FINDING EQUIPMENT", - "hsn_code": "85269130" - }, - { - "description": "NON-DIRECTIONAL BEACON", - "hsn_code": "85269140" - }, - { - "description": "VHF OMNI RANGE EQUIPMENT", - "hsn_code": "85269150" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS - OTHER: - RADIO NAVIGATIONAL AID APPARATUS: OTHER", - "hsn_code": "85269190" - }, - { - "description": "RADAR APPARATUS, RADIO NAVIGATIONAL AID APPARATUS AND RADIO REMOTE CONTROL\nAPPARATUS - OTHER: RADIO REMOTE CONTROL APPARATUS", - "hsn_code": "85269200" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - RADIO\nBROADCAST RECEIVERS CAPABLE OF OPERATING WITHOUT AN EXTERNAL SOURCE OF POWER --\nPOCKET-SIZE RADIO CASSETTE-PLAYERS", - "hsn_code": "85271200" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - RADIO\nBROADCAST RECEIVERS CAPABLE OF OPERATING WITHOUT AN EXTERNAL SOURCE OF POWER --\nOTHER APPARATUS COMBINED WITH SOUND RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "85271300" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - RADIO\nBROADCAST RECEIVERS CAPABLE OF OPERATING WITHOUT AN EXTERNAL SOURCE OF POWER --\nOTHER", - "hsn_code": "85271900" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - RADIO\nRECEIVERS NOT CAPABLE OF OPERATING WITHOUT AN EXTERNAL SOURCE OF POWER, OF A\nKIND USED IN MOTOR VEHICLES -- COMBINED WITH SOUND RECORDING OR REPRODUCING\nAPPARATUS", - "hsn_code": "85272100" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK -- OTHER", - "hsn_code": "85272900" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER RADIO-BROADCAST RECEIVERS, INCLUDING\nAPPARATUS CAPABLE OF RECEIVING ALSO RADIOTELEPHONY OR RADIO-TELEGRAPHY:\nCOMBINED WITH SOUND RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "85273100" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER RADIO-BROADCAST RECEIVERS, INCLUDING\nAPPARATUS CAPABLE OF RECEIVING ALSO RADIOTELEPHONY OR RADIO-TELEGRAPHY: NOT\nCOMBINED WITH SOUND RECORDING OR REPRODUCING APPARATUS BUT COMBINED WITH A\nCLOCK", - "hsn_code": "85273200" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER RADIO-BROADCAST RECEIVERS, INCLUDING\nAPPARATUS CAPABLE OF RECEIVING ALSO RADIOTELEPHONY OR RADIO-TELEGRAPHY: OTHER", - "hsn_code": "85273900" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER APPARATUS: - RADIO COMMUNICATION\nRECEIVERS: RADIO PAGERS", - "hsn_code": "85279011" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER APPARATUS: - RADIO COMMUNICATION\nRECEIVERS: DEMODULATORS", - "hsn_code": "85279012" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER APPARATUS: - RADIO COMMUNICATION\nRECEIVERS: OTHER", - "hsn_code": "85279019" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-TELEPHONY, RADIOTELEGRAPHY OR RADIO-BROADCASTING,\nWHETHER OR NOT COMBINED, IN THE SAME HOUSING, WITH SOUND RECORDING OR\nREPRODUCING APPARATUS OR A CLOCK - OTHER APPARATUS: OTHER", - "hsn_code": "85279090" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- COMBINED WITH SOUND RECORDING OR REPRODUCING APPARATUS", - "hsn_code": "85279100" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- NOT COMBINED WITH SOUND RECORDING OR REPRODUCING APPARATUS BUT COMBINED\nWITH A CLOCK", - "hsn_code": "85279200" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- OTHER --- RADIO COMMUNICATION RECEIVERS ---- RADIO PAGERS", - "hsn_code": "85279911" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- OTHER --- RADIO COMMUNICATION RECEIVERS ---- DEMODULATORS", - "hsn_code": "85279912" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- OTHER --- RADIO COMMUNICATION RECEIVERS ---- OTHER", - "hsn_code": "85279919" - }, - { - "description": "RECEPTION APPARATUS FOR RADIO-BROADCASTING, WHETHER OR NOT COMBINED, IN THE\nSAME HOUSING, WITH SOUND RECORDING OR REPRODUCING APPARATUS OR A CLOCK - OTHER -\n- OTHER --- OTHER", - "hsn_code": "85279990" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE UPTO\n36 CM", - "hsn_code": "85281211" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 36 CM BUT NOT EXCEEDING 54 CM", - "hsn_code": "85281212" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 54 CM BUT NOT EXCEEDING 68 CM", - "hsn_code": "85281213" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 68 CM BUT NOT EXCEEDING 74 CM", - "hsn_code": "85281214" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 74 CM BUT NOT EXCEEDING 87 CM", - "hsn_code": "85281215" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 87 CM BUT NOT EXCEEDING 105 CM", - "hsn_code": "85281216" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : TELEVISION SET OF SCREEN SIZE\nEXCEEDING 105 CM", - "hsn_code": "85281217" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : LIQUID CRYSTAL DISPLAY TELEVISION\nSET OF SCREEN SIZE BELOW 63 CM", - "hsn_code": "85281218" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : OTHER", - "hsn_code": "85281219" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : OTHER - SATELLITE RECEIVERS", - "hsn_code": "85281291" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: - COLOUR : OTHER - OTHER", - "hsn_code": "85281299" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: BLACK AND WHITE OR OTHER MONOCHROME:\nLIQUID CRYSTAL DISPLAY TELEVISION SET OF SCREEN SIZE BELOW 25 CM", - "hsn_code": "85281310" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - RECEPTION APPARATUS FOR TELEVISION,\nWHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR VIDEO\nRECORDING OR REPRODUCING APPARATUS: BLACK AND WHITE OR OTHER MONOCHROME:\nOTHER", - "hsn_code": "85281390" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO MONITORS: - COLOUR: PROFESSIONAL\nMONITORS FOR STUDIO USE (OF RESOLUTION 800 LINES AND ABOVE)", - "hsn_code": "85282110" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO MONITORS: - COLOUR: OTHER", - "hsn_code": "85282190" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO MONITORS: BLACK AND WHITE OR OTHER\nMONOCHROME", - "hsn_code": "85282200" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO PROJECTORS: COLOUR, WITH FLAT PANEL\nSCREEN", - "hsn_code": "85283010" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO PROJECTORS: COLOUR", - "hsn_code": "85283020" - }, - { - "description": "RECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS;\nVIDEO MONITORS AND VIDEO PROJECTORS - VIDEO PROJECTORS: BLACK AND WHITE OR OTHER\nMONOCHOROME", - "hsn_code": "85283030" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nCATHODE-RAY TUBE MONITORS -- OF A KIND SOLELY OR PRINCIPALLY USED IN AN AUTOMATIC\nDATA PROCESSING SYSTEM OF HEADING 8471", - "hsn_code": "85284100" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nCATHODE-RAY TUBE MONITORS -- OTHER", - "hsn_code": "85284900" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nOTHER MONITORS -- OF A KIND SOLELY OR PRINCIPALLY USED IN AN AUTOMATIC DATA\nPROCESSING SYSTEM OF HEADING 8471", - "hsn_code": "85285100" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nOTHER MONITORS -- OTHER", - "hsn_code": "85285900" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nPROJECTORS", - "hsn_code": "85286100" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nPROJECTORS -- OTHER", - "hsn_code": "85286900" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -- NOT\nDESIGNED TO INCORPORATE A VIDEO DISPLAY OR SCREEN", - "hsn_code": "85287100" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- TELEVISION SET OF SCREEN SIZE UPTO 36 CM", - "hsn_code": "85287211" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECO", - "hsn_code": "85287212" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- TELEVISION SET OF SCREEN SIZE EXCEEDING 54 CM BUT NOT EXCEEDING 68\nCM", - "hsn_code": "85287213" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- TELEVISION SET OF SCREEN SIZE EXCEEDING 68 CM BUT NOT EXCEEDING 74\nCM", - "hsn_code": "85287214" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- TELEVISION SET OF SCREEN SIZE EXCEEDING 74 CM BUT NOT EXCEEDING 87\nCM", - "hsn_code": "85287215" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- TELEVISION SET OF SCREEN SIZE EXCEEDING 87 CM BUT NOT EXCEEDING 105\nCM", - "hsn_code": "85287216" - }, - { - "description": "SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS - RECEPTION APPARATUS FOR\nTELEVISION, WHETHER OR NOT INCORPORATING RADIO-BROADCAST RECEIVERS OR SOUND OR\nVIDEO RECORDING ON REPRODUCING APPARATUS -- OTHER, COLOUR --- TELEVISION SET OF\nSCREEN SIZE EXCEEDING 105 CM", - "hsn_code": "85287217" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- LIQUID CRYSTAL DISPLAY TELEVISION SET OF SCREEN SIZE BELOW 63 CM", - "hsn_code": "85287218" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, COLOUR --- OTHER", - "hsn_code": "85287219" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER, BLACK AND WHITE OR OTHER MONOCHROME ---LIQUID CRYSTAL DISPLAY\nTELEVISIONSET OF SCREEN SIZE BELOW 25 CM", - "hsn_code": "85287310" - }, - { - "description": "MONITORS AND PROJECTORS, NOT INCORPORATING TELEVISION RECEPTION APPARATUS.\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVER OR SOUND OR VIDEO RECORDING OR REPRODUCING APPARATUS -\nRECEPTION APPARATUS FOR TELEVISION, WHETHER OR NOT INCORPORATING RADIO\nBROADCAST RECEIVERS OR SOUND OR VIDEO RECORDING ON REPRODUCING APPARATUS --\nOTHER", - "hsn_code": "85287390" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nDISH ANTENNA: FOR COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85291011" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nDISH ANTENNA: FOR AMATEUR RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85291012" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nDISH ANTENNA: OTHER", - "hsn_code": "85291019" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nOTHER AERIALS OR ANTENNA: FOR COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85291021" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nOTHER AERIALS OR ANTENNA: FOR AMATEUR RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85291022" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH: -\nOTHER AERIALS OR ANTENNA: OTHER", - "hsn_code": "85291029" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH:\nOTHER: FOR COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85291091" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH:\nOTHER: FOR AMATEUR RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85291092" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 -AERIALS AND AERIAL REFLECTORS OF ALL KINDS; PARTS SUITABLE FOR USE THEREWITH:\nOTHER: OTHER", - "hsn_code": "85291099" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 - OTHER: FOR COMMUNICATION JAMMING EQUIPMENT", - "hsn_code": "85299010" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 - OTHER: FOR AMATEUR RADIO COMMUNICATION EQUIPMENT", - "hsn_code": "85299020" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8525 TO\n8528 - OTHER: OTHER", - "hsn_code": "85299090" - }, - { - "description": "ELECTRICAL SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAYS,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATIONS OR\nAIRFIELDS (OTHER THAN THOSE OF HEADING 8608) -EQUIPMENT FOR RAILWAYS OR\nTRAMWAYS: FOR RAILWAYS", - "hsn_code": "85301010" - }, - { - "description": "ELECTRICAL SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAYS,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATIONS OR\nAIRFIELDS (OTHER THAN THOSE OF HEADING 8608) -EQUIPMENT FOR RAILWAYS OR\nTRAMWAYS: FOR TRAMWAYS", - "hsn_code": "85301020" - }, - { - "description": "ELECTRICAL SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAYS,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATIONS OR\nAIRFIELDS (OTHER THAN THOSE OF HEADING 8608) - OTHER EQUIPMENT", - "hsn_code": "85308000" - }, - { - "description": "ELECTRICAL SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAYS,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATIONS OR\nAIRFIELDS (OTHER THAN THOSE OF HEADING 8608) - PARTS", - "hsn_code": "85309000" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530 -BURGLAR\nOR FIRE ALARMS AND SIMILAR APPARATUS: BURGLAR ALARM", - "hsn_code": "85311010" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530 -BURGLAR\nOR FIRE ALARMS AND SIMILAR APPARATUS: FIRE ALARM", - "hsn_code": "85311020" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530 -\nBURGLAR OR FIRE ALARMS AND SIMILAR APPARATUS: OTHER", - "hsn_code": "85311090" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530\nINDICATOR PANELS INCORPORATING LIQUID CRYSTALDEVICES (LCD) OR LIGHT EMITTING DIODES\n(LED)", - "hsn_code": "85312000" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530 OTHER\nAPPARATUS", - "hsn_code": "85318000" - }, - { - "description": "ELECTRIC SOUND OR VISUAL SIGNALLING APPARATUS (FOR EXAMPLE, BELLS, SIRENS, INDICATOR\nPANELS, BURGLAR OR FIRE ALARMS), OTHER THAN THOSE OF HEADING 8512 OR 8530 PARTS", - "hsn_code": "85319000" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) FIXED CAPACITORS\nDESIGNED FOR USE IN 50 OR 60 HZ CIRCUITS AND HAVING A REACTIVE POWER HANDLING\nCAPACITY OF NOT LESS THAN 0.5 KVAR (POWER CAPACITORS)", - "hsn_code": "85321000" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: TANTALUM", - "hsn_code": "85322100" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: ALUMINIUM ELECTROLYTIC", - "hsn_code": "85322200" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: CERAMIC DIELECTRIC, SINGLE LAYER", - "hsn_code": "85322300" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: CERAMIC DIELECTRIC, MULTILAYER", - "hsn_code": "85322400" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: DIELECTRIC OF PAPER OR PLASTICS", - "hsn_code": "85322500" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: - OTHER: OF DIELECTRIC OF MICA", - "hsn_code": "85322910" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) - OTHER FIXED\nCAPACITORS: - OTHER: OTHER", - "hsn_code": "85322990" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) VARIABLE OR ADJUSTABLE\n(PRE-SET) CAPACITORS", - "hsn_code": "85323000" - }, - { - "description": "ELECTRICAL CAPACITORS, FIXED, VARIABLE OR ADJUSTABLE (PRE-SET) PARTS", - "hsn_code": "85329000" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS FIXED CARBON RESISTORS, COMPOSITION OR FILM TYPES", - "hsn_code": "85331000" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20\nW: - OF BARE WIRE : OF NICHROME", - "hsn_code": "85332111" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20\nW: - OF BARE WIRE : OTHER", - "hsn_code": "85332119" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20\nW: - OF INSULATED WIRE : OF NICHROME", - "hsn_code": "85332121" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20\nW: - OF INSULATED WIRE : OTHER", - "hsn_code": "85332129" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - OTHER: - OF BARE WIRE: OF NICHROME", - "hsn_code": "85332911" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - OTHER: - OF BARE WIRE: OTHER", - "hsn_code": "85332919" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - OTHER: - OF INSULATED WIRE : OF NICHROME", - "hsn_code": "85332921" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER FIXED RESISTORS: - OTHER: - OF INSULATED WIRE : OTHER", - "hsn_code": "85332929" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20 W:\nPOTENTIOMETERS", - "hsn_code": "85333110" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20 W: RHEOSTATS", - "hsn_code": "85333120" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - FOR A POWER HANDLING CAPACITY NOT EXCEEDING 20 W: OTHER", - "hsn_code": "85333190" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - OTHER: POTENTIOMETERS", - "hsn_code": "85333910" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - OTHER: RHEOSTATS", - "hsn_code": "85333920" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - WIREWOUND VARIABLE RESISTORS, INCLUDING RHEOSTATS AND\nPOTENTIOMETERS: - OTHER: OTHER", - "hsn_code": "85333990" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER VARIABLE RESISTORS, INCLUDING RHEOSTATS AND POTENTIOMETERS:\nPOTENTIOMETERS", - "hsn_code": "85334010" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER VARIABLE RESISTORS, INCLUDING RHEOSTATS AND POTENTIOMETERS:\nRHEOSTATS", - "hsn_code": "85334020" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER VARIABLE RESISTORS, INCLUDING RHEOSTATS AND POTENTIOMETERS:\nTHERMISTORS", - "hsn_code": "85334030" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - OTHER VARIABLE RESISTORS, INCLUDING RHEOSTATS AND POTENTIOMETERS:\nOTHER", - "hsn_code": "85334090" - }, - { - "description": "ELECTRICAL RESISTORS (INCLUDING RHEOSTATS AND POTENTIOMETERS), OTHER THAN HEATING\nRESISTORS - PARTS", - "hsn_code": "85339000" - }, - { - "description": "PRINTED CIRCUITS", - "hsn_code": "85340000" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: FOR SWITCHES HAVING RATING UPTO 15\nAMPS, REWIREABLE", - "hsn_code": "85351010" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: FOR SWITCHES HAVING RATING ABOVE 15\nAMPS, HIGH RUPTURING CAPACITY OR REWIREABLE", - "hsn_code": "85351020" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: OTHER REWIREABLE FUSES", - "hsn_code": "85351030" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: OTHER HIGH RUPTURING CAPACITY FUSES", - "hsn_code": "85351040" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: FUSES GEAR", - "hsn_code": "85351050" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS -FUSES: OTHER", - "hsn_code": "85351090" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A VOLTAGE OF\nLESS THAN 72.5 KV: - SF6 CIRCUIT BREAKERS : FOR A VOLTAGE OF 11 KV", - "hsn_code": "85352111" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A VOLTAGE OF\nLESS THAN 72.5 KV: - SF6 CIRCUIT BREAKERS : FOR A VOLTAGE OF 33 KV", - "hsn_code": "85352112" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A VOLTAGE OF\nLESS THAN 72.5 KV: - SF6 CIRCUIT BREAKERS : FOR A VOLTAGE OF 66 KV", - "hsn_code": "85352113" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, FUSES,\nLIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION BOXES),\nFOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A VOLTAGE OF\nLESS THAN 72.5 KV: - SF6 CIRCUIT BREAKERS : OTHER", - "hsn_code": "85352119" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A\nVOLTAGE OF LESS THAN 72.5 KV: - VACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 11 KV", - "hsn_code": "85352121" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A\nVOLTAGE OF LESS THAN 72.5 KV: - VACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 33 KV", - "hsn_code": "85352122" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A\nVOLTAGE OF LESS THAN 72.5 KV: - VACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 66 KV", - "hsn_code": "85352123" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A\nVOLTAGE OF LESS THAN 72.5 KV: - VACUUM CIRCUIT BREAKERS : OTHER", - "hsn_code": "85352129" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - FOR A\nVOLTAGE OF LESS THAN 72.5 KV: OTHER", - "hsn_code": "85352190" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nSF6 CIRCUITS BREAKERS : FOR A VOLTAGE OF 132 KV", - "hsn_code": "85352911" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nSF6 CIRCUITS BREAKERS : FOR A VOLTAGE OF 220 KV", - "hsn_code": "85352912" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nSF6 CIRCUITS BREAKERS : FOR A VOLTAGE OF 400 KV", - "hsn_code": "85352913" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nSF6 CIRCUITS BREAKERS : OTHER", - "hsn_code": "85352919" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nVACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 132 KV", - "hsn_code": "85352921" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nVACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 220 KV", - "hsn_code": "85352922" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nVACUUM CIRCUIT BREAKERS : FOR A VOLTAGE OF 400 KV", - "hsn_code": "85352923" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER : -\nVACUUM CIRCUIT BREAKERS : OTHER", - "hsn_code": "85352929" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - AUTOMATIC CIRCUIT BREAKERS: - OTHER :\nOTHER", - "hsn_code": "85352990" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - ISOLATING SWITCHES AND MAKE-AND\nBREAK SWITCHES: OF PLASTIC", - "hsn_code": "85353010" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - ISOLATING SWITCHES AND MAKE-AND\nBREAK SWITCHES: OTHER", - "hsn_code": "85353090" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - LIGHTNING ARRESTERS, VOLTAGE LIMITERS\nAND SURGE SUPPRESSORS: LIGHTNING ARRESTERS", - "hsn_code": "85354010" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - LIGHTNING ARRESTERS, VOLTAGE LIMITERS\nAND SURGE SUPPRESSORS: VOLTAGE LIMITERS", - "hsn_code": "85354020" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - LIGHTNING ARRESTERS, VOLTAGE LIMITERS\nAND SURGE SUPPRESSORS: SURGE SUPPRESSORS", - "hsn_code": "85354030" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - OTHER : MOTOR STARTERS FOR AC MOTORS", - "hsn_code": "85359010" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - OTHER : CONTROL GEAR AND STARTERS FOR\nDC MOTORS", - "hsn_code": "85359020" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - OTHER : OTHER CONTROL AND\nSWITCHGEARS", - "hsn_code": "85359030" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - OTHER : JUNCTION BOXES", - "hsn_code": "85359040" - }, - { - "description": "FUSES, LIGHTNING ARRESTERS, VOLTAGE LIMITERS, SURGE SUPPRESSORS, PLUGS, JUNCTION\nBOXES), FOR A VOLTAGE EXCEEDING 1,000 VOLTS - OTHER : OTHER", - "hsn_code": "85359090" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: FOR SWITCHES HAVING RATING UPTO 15 AMPS,\nREWIREABLE", - "hsn_code": "85361010" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: FOR SWITCHES HAVING RATING ABOVE 15\nAMPS, HIGH RUPTURING CAPACITY OR REWIREABLE", - "hsn_code": "85361020" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: OTHER REWIREABLE FUSES", - "hsn_code": "85361030" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: OTHER HIGH RUPTURING CAPACITY FUSES", - "hsn_code": "85361040" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: FUSES GEAR", - "hsn_code": "85361050" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: ELECTRONIC FUSES", - "hsn_code": "85361060" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - FUSES: OTHER", - "hsn_code": "85361090" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS -AUTOMATIC CIRCUIT BREAKERS: AIR CIRCUIT BREAKERS", - "hsn_code": "85362010" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS -AUTOMATIC CIRCUIT BREAKERS: MOULDED CASE\nCIRCUIT BREAKERS", - "hsn_code": "85362020" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS -AUTOMATIC CIRCUIT BREAKERS: MINIATURE CIRCUIT\nBREAKERS", - "hsn_code": "85362030" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS -AUTOMATIC CIRCUIT BREAKERS: EARTH LEAK CIRCUIT\nBREAKERS", - "hsn_code": "85362040" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS -AUTOMATIC CIRCUIT BREAKERS: OTHER", - "hsn_code": "85362090" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS OTHER APPARATUS FOR PROTECTING ELECTRICAL\nCIRCUITS", - "hsn_code": "85363000" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - RELAYS: FOR A VOLTAGE NOT EXCEEDING 60 V", - "hsn_code": "85364100" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - RELAYS: OTHER", - "hsn_code": "85364900" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER SWITCHES: CONTROL AND SWITCH GEARS", - "hsn_code": "85365010" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER SWITCHES: OTHER SWITCHES OF PLASTIC", - "hsn_code": "85365020" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER SWITCHES: OTHER", - "hsn_code": "85365090" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - LAMP-HOLDERS, PLUGS AND SOCKETS: - LAMP\nHOLDERS: OF PLASTIC", - "hsn_code": "85366110" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - LAMP-HOLDERS, PLUGS AND SOCKETS: - LAMP\nHOLDERS: OF OTHER MATERIALS", - "hsn_code": "85366190" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - LAMP-HOLDERS, PLUGS AND SOCKETS: - OTHER: OF\nPLASTIC", - "hsn_code": "85366910" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - LAMP-HOLDERS, PLUGS AND SOCKETS: - OTHER: OF\nOTHER MATERIALS", - "hsn_code": "85366990" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - CONNECTORS FOR OPTICAL FIBRES,OPTICAL FIBRE\nBUNDLES OR CABLES", - "hsn_code": "85367000" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER APPARATUS: MOTOR STARTERS FOR AC\nMOTORS", - "hsn_code": "85369010" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER APPARATUS: MOTOR STARTERS FOR DC\nMOTORS", - "hsn_code": "85369020" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER APPARATUS: JUNCTION BOXES", - "hsn_code": "85369030" - }, - { - "description": "ELECTRICAL APPARATUS FOR SWITCHING OR PROTECTING ELECTRICAL CIRCUITS, OR FOR\nMAKING CONNECTIONS TO OR IN ELECTRICAL CIRCUITS (FOR EXAMPLE, SWITCHES, RELAYS,\nFUSES, SURGE SUPPRESSORS, PLUGS, SOCKETS, LAMP-HOLDERS, JUNCTION BOXES), FOR A\nVOLTAGE NOT EXCEEDING 1,000 VOLTS - OTHER APPARATUS: OTHER", - "hsn_code": "85369090" - }, - { - "description": "BOARDS, PANELS, CONSOLES, DESKS, CABINETS AND OTHER BASES, EQUIPPED WITH TWO OR\nMORE APPARATUS OF HEADING 8535 OR 8536, FOR ELECTRIC CONTROL OR THE DISTRIBUTION\nOF ELECTRICITY, INCLUDING THOSE INCORPORATING INSTRUMENTS OR APPARATUS OF\nCHAPTER 90, AND NUMERICAL CONTROL APPARATUS, OTHER THAN SWITCHING APPARATUS OF\nHEADING 8517 FOR A VOLTAGE NOT EXCEEDING 1,000 V", - "hsn_code": "85371000" - }, - { - "description": "BOARDS, PANELS, CONSOLES, DESKS, CABINETS AND OTHER BASES, EQUIPPED WITH TWO OR\nMORE APPARATUS OF HEADING 8535 OR 8536, FOR ELECTRIC CONTROL OR THE DISTRIBUTION\nOF ELECTRICITY, INCLUDING THOSE INCORPORATING INSTRUMENTS OR APPARATUS OF\nCHAPTER 90, AND NUMERICAL CONTROL APPARATUS, OTHER THAN SWITCHING APPARATUS OF\nHEADING 8517 FOR A VOLTAGE EXCEEDING 1,000 V", - "hsn_code": "85372000" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8535,\n8536 OR 8537 -BOARDS, PANELS, CONSOLES, DESKS, CABINETS AND OTHER BASES FOR THE\nGOODS OF HEADING 8537, NOT EQUIPPED WITH THEIR APPARATUS: FOR INDUSTRIAL USE", - "hsn_code": "85381010" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8535,\n8536 OR 8537 -BOARDS, PANELS, CONSOLES, DESKS, CABINETS AND OTHER BASES FOR THE\nGOODS OF HEADING 8537, NOT EQUIPPED WITH THEIR APPARATUS: OTHER", - "hsn_code": "85381090" - }, - { - "description": "PARTS SUITABLE FOR USE SOLELY OR PRINCIPALLY WITH THE APPARATUS OF HEADINGS 8535,\n8536 OR 8537 OTHER", - "hsn_code": "85389000" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS SEALED BEAM LAMP UNITS", - "hsn_code": "85391000" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - TUNGSTEN HALOGEN: - OTHER: MINIATURE HALOGEN LAMPS\nWITH FITTINGS", - "hsn_code": "85392110" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - TUNGSTEN HALOGEN: - OTHER: OTHER FOR AUTOMOBILES", - "hsn_code": "85392120" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - TUNGSTEN HALOGEN: - OTHER: OTHER", - "hsn_code": "85392190" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: OTHER, OF A POWER NOT EXCEEDING 200 W AND FOR A\nVOLTAGE EXCEEDING 100 V", - "hsn_code": "85392200" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - OTHER: OF RETAIL SALE PRICE NOT EXCEEDING RUPEES 20 PER\nBULB", - "hsn_code": "85392910" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - OTHER: BULB, FOR TORCHES", - "hsn_code": "85392920" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - OTHER: MINIATURE BULBS", - "hsn_code": "85392930" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - OTHER: OTHER FOR AUTOMOBILE LAMPS", - "hsn_code": "85392940" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - OTHER FILAMENT LAMPS, EXCLUDING ULTRA\nVIOLET OR INFRA-RED LAMPS: - OTHER: OTHER", - "hsn_code": "85392990" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - FLUORESCENT, HOT CATHODE: COMPACT FLUORESCENT LAMPS", - "hsn_code": "85393110" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - FLUORESCENT, HOT CATHODE: OTHER", - "hsn_code": "85393190" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - MERCURY OR SODIUM VAPOUR LAMPS; METAL HALIDE LAMPS: MERCURY VAPOUR\nLAMPS", - "hsn_code": "85393210" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - MERCURY OR SODIUM VAPOUR LAMPS; METAL HALIDE LAMPS: SODIUM VAPOUR\nLAMPS", - "hsn_code": "85393220" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - MERCURY OR SODIUM VAPOUR LAMPS; METAL HALIDE LAMPS: METAL HALIDE LAMPS", - "hsn_code": "85393230" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - OTHER: ENERGY EFFICIENT TRIPHOSPHOR FLUORESCENT LAMPS", - "hsn_code": "85393910" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - DISCHARGE LAMPS, OTHER THAN ULTRA-VIOLET\nLAMPS: - OTHER: OTHER", - "hsn_code": "85393990" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - ULTRA-VIOLET OR INFRA-RED LAMPS; ARC-LAMPS :\nARC-LAMPS", - "hsn_code": "85394100" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - ULTRA-VIOLET OR INFRA-RED LAMPS; ARC-LAMPS :\nOTHER", - "hsn_code": "85394900" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - PARTS: PARTS OF FLUORESCENT TUBE LAMPS", - "hsn_code": "85399010" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - PARTS: PARTS OF ARC-LAMPS", - "hsn_code": "85399020" - }, - { - "description": "ELECTRIC FILAMENT OR DISCHARGE LAMPS, INCLUDING SEALED BEAM LAMP UNITS AND ULTRA\nVIOLET OR INFRA RED LAMPS; ARC-LAMPS - PARTS: OTHER", - "hsn_code": "85399090" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - CATHODE-RAY TELEVISION\nPICTURE TUBES, INCLUDING VIDEO MONITOR CATHODE-RAY TUBES: - COLOUR: TELEVISION\nPICTURE TUBES OF 20 AND 21 SIZE, EXCEPT 21 FLAT AND FULL SQUARE (F AND FST) COLOUR TV\nPICTURE TUBES", - "hsn_code": "85401110" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - CATHODE-RAY TELEVISION\nPICTURE TUBES, INCLUDING VIDEO MONITOR CATHODE-RAY TUBES: - COLOUR: VIDEO MONITOR\nCATHODE-RAY TUBES", - "hsn_code": "85401120" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - CATHODE-RAY TELEVISION\nPICTURE TUBES, INCLUDING VIDEO MONITOR CATHODE-RAY TUBES: - COLOUR: OTHER", - "hsn_code": "85401190" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - CATHODE-RAY TELEVISION\nPICTURE TUBES, INCLUDING VIDEO MONITOR CATHODE-RAY TUBES: BLACK AND WHITE OR\nOTHER MONOCHROME", - "hsn_code": "85401200" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) TELEVISION CAMERA TUBES;\nIMAGE CONVERTERS AND INTENSIFIERS; OTHER PHOTOS-CATHODE TUBES", - "hsn_code": "85402000" - }, - { - "description": "DATA OR GRAPHIC DISPLAY TUBES, MONOCHROME", - "hsn_code": "85404010" - }, - { - "description": "DATA OR GRAPHIC DISPLAY TUBES, COLOUR, WITH A PHOSPHOR DOT SCREEN PITCH SMALLER\nTHAN 0.4 MM", - "hsn_code": "85404020" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) OTHER CATHODE-RAY TUBES", - "hsn_code": "85406000" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - MICROWAVE TUBES (FOR\nEXAMPLE, MAGNETRONS, KLYSTRONS, TRAVELLING WAVE TUBES, CARCINOTRONS), EXCLUDING\nGRID-CONTROLLED TUBES: MAGNETRONS", - "hsn_code": "85407100" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - MICROWAVE TUBES (FOR\nEXAMPLE, MAGNETRONS, KLYSTRONS, TRAVELLING WAVE TUBES, CARCINOTRONS), EXCLUDING\nGRID-CONTROLLED TUBES: OTHER", - "hsn_code": "85407900" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - OTHER VALVES AND TUBES:\nRECEIVER OR AMPLIFIER VALVES AND TUBES", - "hsn_code": "85408100" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - OTHER VALVES AND TUBES:\nOTHER", - "hsn_code": "85408900" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - PARTS: OF CATHODE-RAY\nTUBES", - "hsn_code": "85409100" - }, - { - "description": "THERMIONIC, COLD CATHODE OR PHOTO-CATHODE VALVES AND TUBES (FOR EXAMPLE,\nVACUUM OR VAPOUR OR GAS FILLED VALVES AND TUBES, MERCURY ARC RECTIFYING VALVES\nAND TUBES, CATHODE-RAY TUBES, TELEVISION CAMERA TUBES) - PARTS: OTHER", - "hsn_code": "85409900" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS DIODES, OTHER THAN PHOTOSENSITIVE OR LIGHT EMITTING DIODES", - "hsn_code": "85411000" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS - TRANSISTORS, OTHER THAN PHOTOSENSITIVE TRANSISTORSWITH A DISSIPATION\nRATE OF LESS THAN 1 W", - "hsn_code": "85412100" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS - TRANSISTORS, OTHER THAN PHOTOSENSITIVE TRANSISTORSOTHER", - "hsn_code": "85412900" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -THYRISTORS, DIACS AND TRIACS, OTHER THAN PHOTOSENSITIVE DEVICES:\nTHYRISTORS", - "hsn_code": "85413010" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -THYRISTORS, DIACS AND TRIACS, OTHER THAN PHOTOSENSITIVE DEVICES: OTHER", - "hsn_code": "85413090" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -PHOTOSENSITIVE SEMI-CONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS\nWHETHER OR NOT ASSEMBLED IN MODULES OR MADE UP INTO PANELS; LIGHT EMITTING\nDIODES: - PHOTOCELLS: SOLAR CELLS WHETHER OR NOT ASSEMBLED IN MODULES OR PANELS", - "hsn_code": "85414011" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -PHOTOSENSITIVE SEMI-CONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS\nWHETHER OR NOT ASSEMBLED IN MODULES OR MADE UP INTO PANELS; LIGHT EMITTING\nDIODES: - PHOTOCELLS: OTHER", - "hsn_code": "85414019" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -PHOTOSENSITIVE SEMI-CONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS\nWHETHER OR NOT ASSEMBLED IN MODULES OR MADE UP INTO PANELS; LIGHT EMITTING\nDIODES: LIGHT EMITTING DIODES (ELECTRO-LUMINESCENT)", - "hsn_code": "85414020" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS -PHOTOSENSITIVE SEMI-CONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS\nWHETHER OR NOT ASSEMBLED IN MODULES OR MADE UP INTO PANELS; LIGHT EMITTING\nDIODES: OTHER", - "hsn_code": "85414090" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS OTHER SEMI-CONDUCTORS DEVICES", - "hsn_code": "85415000" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS MOUNTED PIEZO-ELECTRIC CRYSTALS", - "hsn_code": "85416000" - }, - { - "description": "DIODES, TRANSISTORS AND SIMILAR SEMI-CONDUCTOR DEVICES; PHOTOSENSITIVE SEMI\nCONDUCTOR DEVICES, INCLUDING PHOTOVOLTAIC CELLS WHETHER OR NOT ASSEMBLED IN\nMODULES OR MADE UP INTO PANELS; LIGHT EMITTING DIODES; MOUNTED PIEZO-ELECTRIC\nCRYSTALS PARTS", - "hsn_code": "85419000" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES -CARDS INCORPORATING AN\nELECTRONIC INTEGRATED CIRCUIT *SMARV CARDS): SIM CARDS", - "hsn_code": "85421010" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES -CARDS INCORPORATING AN\nELECTRONIC INTEGRATED CIRCUIT *SMARV CARDS): MEMORY CARDS", - "hsn_code": "85421020" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES -CARDS INCORPORATING AN\nELECTRONIC INTEGRATED CIRCUIT *SMARV CARDS): OTHER", - "hsn_code": "85421090" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES - MONOLITHIC INTEGRATED\nCIRCUITS: DIGITAL", - "hsn_code": "85422100" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES - MONOLITHIC INTEGRATED\nCIRCUITS: - OTHER: CARDS INCORPORATING ONLY A SINGLE ELECTRONIC INTEGRATED CIRCUIT\nWITH OPTICAL STRIP", - "hsn_code": "85422910" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES - MONOLITHIC INTEGRATED\nCIRCUITS: - OTHER: OTHER", - "hsn_code": "85422990" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS - ELECTRONIC INTEGRATED CIRCUITS -- PROCESSORS AND\nCONTROLLERS, WHETHER OR NOT COMBINED WITH MEMORIES, CONVERTERS, LOGIC\nCIRCUITS,AMPLIFIERS, CLOCK AND TIMING CIRCUITS, OR OTHER CIRCUITS", - "hsn_code": "85423100" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS - ELECTRONIC INTEGRATED CIRCUITS -- MEMORIES", - "hsn_code": "85423200" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS - ELECTRONIC INTEGRATED CIRCUITS - AMPLIFIERS", - "hsn_code": "85423300" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS - ELECTRONIC INTEGRATED CIRCUITS -- OTHER", - "hsn_code": "85423900" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES HYBRID INTEGRATED CIRCUITS", - "hsn_code": "85426000" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS AND MICRO-ASSEMBLIES ELECTRONIC MICROASSEMBLIES", - "hsn_code": "85427000" - }, - { - "description": "ELECTRONIC INTEGRATED CIRCUITS - PARTS", - "hsn_code": "85429000" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS --- ION IMPLANTERS FOR\nDOPING SEMI CONDUCTOR MATERIAL", - "hsn_code": "85431010" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS --- VANE GRAFF, COCK\nCROFT, WALTON ACCELERATORS", - "hsn_code": "85431020" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS --- SYNCHROCYCLOTRONS,\nSYNCHROTRONS", - "hsn_code": "85431030" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS --- OTHER INCLUDING\nCYCLOTRONS", - "hsn_code": "85431090" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS: ION IMPLANTERS FOR\nDOPING SEMI-CONDUCTOR MATERIALS", - "hsn_code": "85431100" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS: - OTHER: VANE GRAFF,\nCOCK-CROFT, WALTON ACCELERATORS", - "hsn_code": "85431910" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS: - OTHER:\nSYNCHROCYCLOTRONS, SYNCHROTRONS", - "hsn_code": "85431920" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTICLE ACCELERATORS: - OTHER: OTHER\nINCLUDING CYCLOTRONS", - "hsn_code": "85431990" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - SIGNAL GENERATORS: SWEEP GENERATORS", - "hsn_code": "85432010" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - SIGNAL GENERATORS: IMPULSE GENERATORS", - "hsn_code": "85432020" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - SIGNAL GENERATORS: TACHO GENERATORS", - "hsn_code": "85432030" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - SIGNAL GENERATORS: OTHER", - "hsn_code": "85432090" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER MACHINES AND APPARATUS FOR ELECTROPLATING,\nELECTROLYSIS OR ELECTROPHORESIS", - "hsn_code": "85433000" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER ELECTRIC FENCE ENERGISERS", - "hsn_code": "85434000" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS ---- METAL\nDETECTOR", - "hsn_code": "85437012" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS ---- MINE\nDETECTOR", - "hsn_code": "85437013" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS ---- OTHER", - "hsn_code": "85437019" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AUDIO SPECIAL\nEFFECT EQUIPMENT ---- DIGITAL REVERBERATORS", - "hsn_code": "85437021" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AUDIO SPECIAL\nEFFECT EQUIPMENT ---- MIXING SYSTEM OR CONSOLES", - "hsn_code": "85437022" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AUDIO SPECIAL\nEFFECT EQUIPMENT ---- OTHER", - "hsn_code": "85437029" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- VIDEO MIXING SYSTEM OR CONSOLES", - "hsn_code": "85437031" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- VIDEO EFFECT SYSTEM", - "hsn_code": "85437032" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- DIGITAL LAYERING MACHINE", - "hsn_code": "85437033" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- PAINT BOX", - "hsn_code": "85437034" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- VIDEO TYPEWRITER", - "hsn_code": "85437035" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- VIDEO MATTING MACHINE", - "hsn_code": "85437036" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- VIDEO SPECIAL\nEFFECT EQUIPMENTS ---- OTHER", - "hsn_code": "85437039" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- EDIT CONTROL\nUNIT ---- COMPUTERISED EDITING SYSTEM CONTROLLING MORE THAN THREE VIDEO EDITING\nMACHINES", - "hsn_code": "85437041" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- EDIT CONTROL\nUNIT ---- OTHER VIDEO CONTROL UNIT", - "hsn_code": "85437042" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- EDIT CONTROL\nUNIT ---- OTHER", - "hsn_code": "85437049" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- EDIT CONTROL\nUNIT ---- COLOUR CORRECTOR", - "hsn_code": "85437050" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AMPLIFIER ----\nBROADCAST AMPLIFIER", - "hsn_code": "85437061" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AMPLIFIER ----\nLIMITING AMPLIFIER, VIDEO DISTRIBUTION AMPLIFIER AND STABILIZING AMPLIFIERS", - "hsn_code": "85437062" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- AMPLIFIER ----\nOTHER", - "hsn_code": "85437069" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- GRAPHIC\nEQUALIZER AND SYNTHESIZED RECEIVERS ---- GRAPHIC EQUALIZER", - "hsn_code": "85437071" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- GRAPHIC\nEQUALIZER AND SYNTHESIZED RECEIVERS ---- SYNTHESISED , RECEIVERS", - "hsn_code": "85437072" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ---- RF\n(RADIO FREQUENCY) POWER AMPLIFIER AND NOISE GENERATORS FOR COMMUNICATION\nJAMMING EQUIPMENT STATIC AND MOBILE OR MAN-PORTABLE", - "hsn_code": "85437091" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ----\nEQUIPMENT GADGETS BASED ON SOLAR ENERGY", - "hsn_code": "85437092" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ----\nPROFESSIONAL BEAUTY CARE EQUIPMENT", - "hsn_code": "85437093" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ----\nAUDIO VISUAL STEREO ENCODERS", - "hsn_code": "85437094" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ----\nTIME CODE GENERATOR", - "hsn_code": "85437095" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS --- OTHER ----\nOTHER", - "hsn_code": "85437099" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: PROXIMITY\nCARDS AND TAGS", - "hsn_code": "85438100" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: METAL\nDETECTORS", - "hsn_code": "85438910" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: MINE\nDETECTORS", - "hsn_code": "85438920" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAUDIO SPECIAL EFFECT EQUIPMENTS: DIGITAL REVERBERATORS", - "hsn_code": "85438931" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAUDIO SPECIAL EFFECT EQUIPMENTS: MIXING SYSTEMS OR CONSOLES", - "hsn_code": "85438932" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAUDIO SPECIAL EFFECT EQUIPMENTS: OTHER", - "hsn_code": "85438939" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: VIDEO MIXING SYSTEM OR CONSOLES", - "hsn_code": "85438941" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: VIDEO EFFECT SYSTEM", - "hsn_code": "85438942" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: DIGITAL LAYERING MACHINE", - "hsn_code": "85438943" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: PAINT BOX", - "hsn_code": "85438944" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: VIDEO TYPEWRITER", - "hsn_code": "85438945" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: VIDEO MATTING MACHINES", - "hsn_code": "85438946" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - VIDEO\nSPECIAL EFFECT EQUIPMENTS: OTHER", - "hsn_code": "85438949" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - EDIT\nCONTROL UNIT: COMPUTERISED EDITING SYSTEM CONTROLLING MORE THAN THREE VIDEO\nEDITING MACHINES", - "hsn_code": "85438951" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - EDIT\nCONTROL UNIT: OTHER VIDEO CONTROL UNITS", - "hsn_code": "85438952" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: - EDIT\nCONTROL UNIT: OTHER", - "hsn_code": "85438959" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER:\nCOLOUR CORRECTORS", - "hsn_code": "85438960" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAMPLIFIER: BROADCAST AMPLIFIER", - "hsn_code": "85438971" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAMPLIFIER: LIMITING AMPLIFIER, VIDEO DISTRIBUTION AMPLIFIER AND STABILISING AMPLIFIERS", - "hsn_code": "85438972" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nAMPLIFIER: OTHER", - "hsn_code": "85438979" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nGRAPHIC EQUALISER AND SYNTHESISED RECEIVERS: GRAPHIC EQUALISERS", - "hsn_code": "85438981" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nGRAPHIC EQUALISER AND SYNTHESISED RECEIVERS: SYNTHESISED RECEIVERS", - "hsn_code": "85438982" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : RF (RADIO FREQUENCY) POWER AMPLIFIERS AND NOISE GENERATORS FOR\nCOMMUNICATION JAMMING EQUIPMENT, STATIC OR MOBILE OR MANPORTABLE", - "hsn_code": "85438991" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : EQUIPMENT OR GADGETS BASED ON SOLAR ENERGY", - "hsn_code": "85438992" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : PROFESSIONAL BEAUTY CARE EQUIPMENT", - "hsn_code": "85438993" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : AUDIO VIDEO STEREO ENCODERS", - "hsn_code": "85438994" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : TIME CODE GENERATOR", - "hsn_code": "85438995" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - OTHER MACHINES AND APPARATUS: - OTHER: -\nOTHER : OTHER", - "hsn_code": "85438999" - }, - { - "description": "ELECTRICAL MACHINES AND APPARATUS HAVING INDIVIDUAL FUNCTIONS, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER - PARTS", - "hsn_code": "85439000" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: - OF\nCOPPER: ENAMELLED", - "hsn_code": "85441110" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: - OF\nCOPPER: OTHER", - "hsn_code": "85441190" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: -\nOTHER: ASBESTOS COVERED", - "hsn_code": "85441910" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: -\nOTHER: PLASTIC INSULATED", - "hsn_code": "85441920" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: -\nOTHER: RUBBER INSULATED", - "hsn_code": "85441930" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - WINDING WIRE: -\nOTHER: OTHER", - "hsn_code": "85441990" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS- CO-AXIAL CABLE AND\nOTHER CO-AXIAL ELECTRIC CONDUCTORS: CO-AXIAL CABLE", - "hsn_code": "85442010" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS- CO-AXIAL CABLE AND\nOTHER CO-AXIAL ELECTRIC CONDUCTORS: OTHER", - "hsn_code": "85442090" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - IGNITION WIRING\nSETS AND OTHER WIRING SETS OF A KIND USED IN VEHICLES, AIRCRAFT OR SHIPS", - "hsn_code": "85443000" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: -\nTELEPHONE CABLES: DRY CORE PAPER INSULATED", - "hsn_code": "85444111" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: -\nTELEPHONE CABLES: OTHER", - "hsn_code": "85444119" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: PAPER\nINSULATED", - "hsn_code": "85444120" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: PLASTIC\nINSULATED", - "hsn_code": "85444130" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: RUBBER\nINSULATED", - "hsn_code": "85444140" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - FITTED WITH CONNECTORS: OTHER", - "hsn_code": "85444190" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS --- PAPER\nINSULATED", - "hsn_code": "85444210" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS ---\nPLASTIC INSULATED", - "hsn_code": "85444220" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS ---\nRUBBER INSULATED", - "hsn_code": "85444230" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS --- OTHER\n: PAPER INSULATED OF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444291" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS --- OTHER\n: PLASTIC INSULATED OF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444292" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS --- OTHER\n: RUBBER INSULATED , OF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444293" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 1000 V -- FITTED WITH CONNECTORS --- OTHER\n: ----OTHER", - "hsn_code": "85444299" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- PAPER INSULATED", - "hsn_code": "85444910" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - OTHER : - TELEPHONE CABLES : DRY\nCORE PAPER INSULATED", - "hsn_code": "85444911" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - OTHER : - TELEPHONE CABLES : OTHER", - "hsn_code": "85444919" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- PLASTIC INSULATED", - "hsn_code": "85444920" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- RUBBER INSULATED", - "hsn_code": "85444930" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V: - OTHER : OTHER", - "hsn_code": "85444990" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- OTHER ----PAPER INSULATED\nOF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444991" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- OTHER : ---- PLASTIC\nINSULATED OF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444992" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- OTHER ----RUBBER INSULATED\nOF A KIND USED IN TELECOMMUNICATION", - "hsn_code": "85444993" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE NOT EXCEEDING 80 V -- OTHER --- OTHER ---- OTHER", - "hsn_code": "85444999" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: PAPER INSULATED", - "hsn_code": "85445110" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: PLASTIC INSULATED, OF A KIND USED FOR TELECOMMUNICATION", - "hsn_code": "85445120" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: OTHER PLASTIC INSULATED", - "hsn_code": "85445130" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: RUBBER INSULATED OF A KIND USED FOR TELECOMMUNICATION", - "hsn_code": "85445140" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: OTHER RUBBER INSULATED", - "hsn_code": "85445150" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - FITTED WITH\nCONNECTORS: OTHER", - "hsn_code": "85445190" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER : PAPER\nINSULATED", - "hsn_code": "85445910" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER :\nPLASTIC INSULATED OF A KIND USED FOR TELECOMMUNICATION", - "hsn_code": "85445920" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER : OTHER\nPLASTIC INSULATED", - "hsn_code": "85445930" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER :\nRUBBER INSULATED OF A KIND USED FOR TELECOMMUNICATION", - "hsn_code": "85445940" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER : OTHER\nRUBBER INSULATED", - "hsn_code": "85445950" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 80 V BUT NOT EXCEEDING 1,000 V: - OTHER : OTHER", - "hsn_code": "85445990" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 1000 V: PAPER INSULATED", - "hsn_code": "85446010" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 1000 V: PLASTIC INSULATED", - "hsn_code": "85446020" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 1000 V: RUBBER INSULATED", - "hsn_code": "85446030" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OTHER ELECTRIC\nCONDUCTORS, FOR A VOLTAGE EXCEEDING 1000 V: OTHER", - "hsn_code": "85446090" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OPTICAL FIBRE\nCABLES: LEAD ALLOY SHEATHED CABLES FOR LIGHTING PURPOSES", - "hsn_code": "85447010" - }, - { - "description": "INSULATED (INCLUDING ENAMELLED OR ANODISED) WIRE, CABLE (INCLUDING CO-AXIAL CABLE)\nAND OTHER INSULATED ELECTRIC CONDUCTORS, WHETHER OR NOT FITTED WITH CONNECTORS;\nOPTICAL FIBRE CABLES, MADE UP OF INDIVIDUALLY SHEATHED FIBRES, WHETHER OR NOT\nASSEMBLED WITH ELECTRIC CONDUCTORS OR FITTED WITH CONNECTORS - OPTICAL FIBRE\nCABLES: OTHER", - "hsn_code": "85447090" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES - ELECTRODES: OF A KIND USED FOR FURNACES", - "hsn_code": "85451100" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES - ELECTRODES: OTHER", - "hsn_code": "85451900" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES BRUSHES", - "hsn_code": "85452000" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES ARC-LAMP CARBON", - "hsn_code": "85459010" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES BATTERY CARBON", - "hsn_code": "85459020" - }, - { - "description": "CARBON ELECTRODES, CARBON BRUSHES, LAMP CARBONS, BATTERY CARBONS AND OTHER\nARTICLES OF GRAPHITE OR OTHER CARBON, WITH OR WITHOUT METAL, OF A KIND USED FOR\nELECTRICAL PURPOSES OTHER", - "hsn_code": "85459090" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF GLASS", - "hsn_code": "85461000" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS: - PORCELAIN DISCS AND STRINGS :\nPORCELAIN BELOW 6.6 KV", - "hsn_code": "85462011" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS: - PORCELAIN DISCS AND STRINGS :\nOTHER", - "hsn_code": "85462019" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS:- PORCELAIN POST INSULATORS :\nBELOW 6.6 KV", - "hsn_code": "85462021" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS:- PORCELAIN POST INSULATORS : 6.6\nKV OR ABOVE BUT UPTO 11 KV", - "hsn_code": "85462022" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS:- PORCELAIN POST INSULATORS :\nABOVE 11 KV BUT UPTO 66 KV", - "hsn_code": "85462023" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS:- PORCELAIN POST INSULATORS :\nABOVE 66 KV BUT UPTO 132 KV", - "hsn_code": "85462024" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS:- PORCELAIN POST INSULATORS :\nABOVE 132 KV", - "hsn_code": "85462029" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - PORCELAIN PIN INSULATORS:\nBELOW 6.6 KV", - "hsn_code": "85462031" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - PORCELAIN PIN INSULATORS: 6.6\nKV OR ABOVE BUT UP TO 11 KV", - "hsn_code": "85462032" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - PORCELAIN PIN INSULATORS:\nABOVE 11 KV BUT UPTO 66 KV", - "hsn_code": "85462033" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - PORCELAIN PIN INSULATORS:\nABOVE 66 KV", - "hsn_code": "85462039" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - OTHER HIGH TENSION PROCELAIN\nSOLID CORE INSULATORS", - "hsn_code": "85462040" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - OTHER LOW TENSION PROCELAIN\nINSULATORS INCLUDING TELEGRAPH AND TELEPHONE INSULATORS", - "hsn_code": "85462050" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL - OF CERAMICS - PORCELAIN PIN INSULATORS:\nOTHER", - "hsn_code": "85462090" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL OTHER : HEAT SHRINKABLE COMPONENTS", - "hsn_code": "85469010" - }, - { - "description": "ELECTRICAL INSULATORS OF ANY MATERIAL OTHER : OTHER", - "hsn_code": "85469090" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF CERAMICS: PORCELAIN BUSHING BELOW 6.6 KV", - "hsn_code": "85471010" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF CERAMICS: PORCELAIN BUSHINGS FOR VOLTAGE 6.6 KV OR ABOVE BUT\nBELOW 11 KV", - "hsn_code": "85471020" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF CERAMICS: PORCELAIN BUSHINGS FOR VOLTAGE 11 KV OR ABOVE BUT\nUPTO 66 KV", - "hsn_code": "85471030" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF CERAMICS: PORCELAIN BUSHINGS FOR VOLTAGE 66 KV OR ABOVE", - "hsn_code": "85471040" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF CERAMICS: OTHER", - "hsn_code": "85471090" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nINSULATING FITTINGS OF PLASTICS", - "hsn_code": "85472000" - }, - { - "description": "INSULATING FITTINGS FOR ELECTRICAL MACHINES, APPLIANCES OR EQUIPMENT, BEING\nFITTINGS WHOLLY OF INSULATING MATERIAL APART FROM ANY MINOR COMPONENTS OF\nMETAL (FOR EXAMPLE, THREADED SOCKETS) INCORPORATED DURING MOULDING SOLELY FOR\nTHE PURPOSES OF ASSEMBLY, OTHER THAN INSULATORS OF HEADING 8546; ELECTRICAL\nCONDUIT TUBING AND JOINTS THEREFOR, OF BASE METAL LINED WITH INSULATING MATERIAL -\nOTHER : ELECTRICAL INSULATING FITTINGS OF GLASS", - "hsn_code": "85479010" - }, - { - "description": "ELECTRICAL CONDUIT TUBING AND JOINS THEREFOR", - "hsn_code": "85479020" - }, - { - "description": "OTHER", - "hsn_code": "85479090" - }, - { - "description": "WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC ACCUMULATORS;\nSPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC CCUMULATORS;\nELECTRICAL PARTS OF MACHINERY OR APPARATUS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN\nTHIS CHAPTER - WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC\nACCUMULATORS; SPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC\nACCUMULATORS: BATTERY SCRAP, NAMELY THE FOLLOWING: LEAD BATTERY PLATES COVERED\nBY ISRI CODE WORD RAILS; BATTERY LUGS COVERED BY ISRI CODE WORD RAKES.", - "hsn_code": "85481010" - }, - { - "description": "WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC ACCUMULATORS;\nSPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC CCUMULATORS;\nELECTRICAL PARTS OF MACHINERY OR APPARATUS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN\nTHIS CHAPTER - WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC\nACCUMULATORS; SPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC\nACCUMULATORS: BATTERY WASTE, NAMELY THE FOLLOWING: SCRAP DRAINED OR DRY WHILE\nINTACT, LEAD BATTERIES COVERED BY ISRI CODE WORD RAINS; SCRAP WET WHOLE INTACT LEAD\nBATTERIES COVERED BY ISRI CODE WORD RINK; SCRAP INDUSTRIAL INTACT LEAD CELLS\nCOVERED BY ISRI CODE WORD RONO; SCRAP WHOLE INTACT INDUSTRIAL LEAD BATTERIES\nCOVERED BY ISRI CODE WORD ROPER; EDISON BATTERIES COVERED BY ISRI CODE WORD VAUNT", - "hsn_code": "85481020" - }, - { - "description": "WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC ACCUMULATORS;\nSPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC CCUMULATORS;\nELECTRICAL PARTS OF MACHINERY OR APPARATUS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN\nTHIS CHAPTER - WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC\nACCUMULATORS; SPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC\nACCUMULATORS: OTHER WASTE AND SCRAP", - "hsn_code": "85481090" - }, - { - "description": "WASTE AND SCRAP OF PRIMARY CELLS, PRIMARY BATTERIES AND ELECTRIC ACCUMULATORS;\nSPENT PRIMARY CELLS, SPENT PRIMARY BATTERIES AND SPENT ELECTRIC CCUMULATORS;\nELECTRICAL PARTS OF MACHINERY OR APPARATUS, NOT SPECIFIED OR INCLUDED ELSEWHERE IN\nTHIS CHAPTER - OTHER", - "hsn_code": "85489000" - }, - { - "description": "RAIL LOCOMOTIVES POWERED FROM AN EXTERNAL SOURCE OF ELECTRICITY OR BY ELECTRIC\nACCUMULATORS POWERED FROM AN EXTERNAL SOURCE OF ELECTRICITY", - "hsn_code": "86011000" - }, - { - "description": "RAIL LOCOMOTIVES POWERED FROM AN EXTERNAL SOURCE OF ELECTRICITY OR BY ELECTRIC\nACCUMULATORS POWERED BY ELECTRIC ACCUMULATORS", - "hsn_code": "86012000" - }, - { - "description": "OTHER RAIL LOCOMOTIVES; LOCOMOTIVE TENDERS DIESEL-ELECTRIC LOCOMOTIVES", - "hsn_code": "86021000" - }, - { - "description": "OTHER RAIL LOCOMOTIVES; LOCOMOTIVE TENDERS - OTHER : STEAM LOCOMOTIVES AND\nTENDERS THEREOF", - "hsn_code": "86029010" - }, - { - "description": "OTHER RAIL LOCOMOTIVES; LOCOMOTIVE TENDERS - OTHER : OTHER", - "hsn_code": "86029090" - }, - { - "description": "SELF-PROPELLED RAILWAY OR TRAMWAY COACHES, VANS AND TRUCKS, OTHER THAN THOSE OF\nHEADING 8604 POWERED FROM AN EXTERNAL SOURCE OF ELECTRICITY", - "hsn_code": "86031000" - }, - { - "description": "SELF-PROPELLED RAILWAY OR TRAMWAY COACHES, VANS AND TRUCKS, OTHER THAN THOSE OF\nHEADING 8604 OTHER", - "hsn_code": "86039000" - }, - { - "description": "RAILWAY OR TRAMWAY MAINTENANCE OR SERVICE VEHICLES WHETHER OR NOT SELF\nPROPELLED (FOR EXAMPLE, WORKSHOPS, CRANES, BALLAST TAMPERS, TRACK-LINERS, TESTING\nCOACHES AND TRACK INSPECTION VEHICLES)", - "hsn_code": "86040000" - }, - { - "description": "RAILWAY OR TRAMWAY PASSENGER COACHES, NOT SELF-PROPELLED; LUGGAGE VANS, POST\nOFFICE COACHES AND OTHER SPECIAL PURPOSE RAILWAY OR TRAMWAY COACHES, NOT SELF\nPROPELLED (EXCLUDING THOSE OF HEADING 8604)", - "hsn_code": "86050000" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - TANK WAGONS\nAND THE LIKE : FOUR WHEELER TANK WAGONS OF PAY-LOAD EXCEEDING 23 TONNES", - "hsn_code": "86061010" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - TANK WAGONS\nAND THE LIKE : EIGHT WHEELER TANK WAGONS OF PAY-LOAD NOT EXCEEDING 60 TONNES", - "hsn_code": "86061020" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - RAILWAY OR\nTRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - TANK WAGONS AND THE LIKE :\nOTHER", - "hsn_code": "86061090" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - INSULATED OR\nREFRIGERATED VANS AND WAGONS, OTHER THAN THOSE OF SUB-HEADING 8606 10", - "hsn_code": "86062000" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - SELF\nDISCHARGING VANS AND WAGONS, OTHER THAN THOSE OF SUB-HEADING 8606 10", - "hsn_code": "86063000" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: COVERED\nAND CLOSED : METER GUAGE EIGHT WHEELER COVERED WAGONS OF PAY-LOAD NOT\nEXCEEDING 38 TONNES", - "hsn_code": "86069110" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: COVERED\nAND CLOSED : BROAD GUAGE EIGHT WHEELER COVERED WAGONS OF PAY-LOAD NOT\nEXCEEDING 60 TONNES", - "hsn_code": "86069120" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: COVERED\nAND CLOSED : OTHER", - "hsn_code": "86069190" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: OPEN\nWITH NON-REMOVABLE SIDES OF A HEIGHT EXCEEDING 60 CMS: BOGIE EIGHT WHEELER\nWAGONS OF PAY-LOAD NOT EXCEEDING 60 TONNES", - "hsn_code": "86069210" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: OPEN\nWITH NON-REMOVABLE SIDES OF A HEIGHT EXCEEDING 60 CMS: BROAD GUAGE BOGIE EIGHT\nWHEELER WAGONS OF PAY-LOAD EXCEEDING 60 TONNES BUT NOT EXCEEDING 67 TONNES", - "hsn_code": "86069220" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: OPEN\nWITH NON-REMOVABLE SIDES OF A HEIGHT EXCEEDING 60 CMS: OTHER", - "hsn_code": "86069290" - }, - { - "description": "RAILWAY OR TRAMWAY GOODS VANS AND WAGONS, NOT SELF-PROPELLED - OTHER: OTHER", - "hsn_code": "86069900" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : DRIVING BOGIES AND BISSEL-BOGIES", - "hsn_code": "86071100" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : OTHER BOGIES AND BISSEL-BOGIES", - "hsn_code": "86071200" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : OTHER INCLUDING PARTS : AXLES, WHEELS FOR\nCOACHES, VAN AND WAGONS (ROLLING-STOCK)", - "hsn_code": "86071910" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : OTHER INCLUDING PARTS : AXLES AND WHEELS FOR\nLOCOMOTIVES", - "hsn_code": "86071920" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : OTHER INCLUDING PARTS : AXLE BOXES\n(LUBRICATING OR GREASE BOX)", - "hsn_code": "86071930" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BOGIES, BISSEL-BOGIES,\nAXLES AND WHEELS, AND PARTS THEREOF : OTHER INCLUDING PARTS : OTHER PARTS OF AXLES\nAND WHEELS", - "hsn_code": "86071990" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BRAKES AND PARTS\nTHEREOF : AIR BRAKES AND PARTS THEREOF", - "hsn_code": "86072100" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - BRAKES AND PARTS\nTHEREOF : OTHER", - "hsn_code": "86072900" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK HOOKS AND OTHER\nCOUPLING DEVICES, BUFFERS AND PARTS THEREOF: BUFFERS AND COUPLING DEVICES", - "hsn_code": "86073010" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK HOOKS AND OTHER\nCOUPLING DEVICES, BUFFERS AND PARTS THEREOF: OTHER", - "hsn_code": "86073090" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - OTHER : OF\nLOCOMOTIVES", - "hsn_code": "86079100" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - OTHER : OTHER : PARTS\nOF COACH WORK OF RAILWAY RUNNING STOCK", - "hsn_code": "86079910" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - OTHER : OTHER : PARTS\nOF TRAMWAY, LOCOMOTIVES AND RUNNING STOCK", - "hsn_code": "86079920" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - OTHER : OTHER :\nHYDRAULIC SHOCK ABSORBERS FOR RAILWAY BOGIES", - "hsn_code": "86079930" - }, - { - "description": "PARTS OF RAILWAY OR TRAMWAY LOCOMOTIVES OR ROLLING-STOCK - OTHER : OTHER : OTHER", - "hsn_code": "86079990" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTO\nMECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR\nFIELDS; PARTS OF THE FOREGOING - RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS;\nMECHANICAL (INCLUDING ELECTO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAY, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES,\nPORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING : RAILWAY AND TRAMWAY\nTRACK FIXTURES AND FITTINGS", - "hsn_code": "86080010" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTO\nMECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR\nFIELDS; PARTS OF THE FOREGOING - RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS;\nMECHANICAL (INCLUDING ELECTO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAY, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES,\nPORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING : MECHANICAL EQUIPMENT,\nNOT ELECTRICALLY POWERED FOR SIGNALLING TO, OR CONTROLLING, ROAD RAIL OR OTHER\nVEHICLES, SHIPS OR AIRCRAFT", - "hsn_code": "86080020" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTO\nMECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR\nFIELDS; PARTS OF THE FOREGOING - RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS;\nMECHANICAL (INCLUDING ELECTO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAY, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES,\nPORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING : OTHER TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAYS", - "hsn_code": "86080030" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTO\nMECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR\nFIELDS; PARTS OF THE FOREGOING - RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS;\nMECHANICAL (INCLUDING ELECTO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAY, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES,\nPORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING : OTHER TRAFFIC CONTROL\nEQUIPMENT FOR ROADS OR INLAND WATERWAYS INCLUDING AUTOMATIC TRAFFIC CONTROL\nEQUIPMENT FOR USE AT PORTS AND AIRPORTS", - "hsn_code": "86080040" - }, - { - "description": "RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS; MECHANICAL (INCLUDING ELECTO\nMECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL EQUIPMENT FOR RAILWAY,\nTRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES, PORT INSTALLATION OR AIR\nFIELDS; PARTS OF THE FOREGOING - RAILWAY OR TRAMWAY TRACK FIXTURES AND FITTINGS;\nMECHANICAL (INCLUDING ELECTO-MECHANICAL) SIGNALLING, SAFETY OR TRAFFIC CONTROL\nEQUIPMENT FOR RAILWAY, TRAMWAYS, ROADS, INLAND WATERWAYS, PARKING FACILITIES,\nPORT INSTALLATION OR AIR-FIELDS; PARTS OF THE FOREGOING : OTHER", - "hsn_code": "86080090" - }, - { - "description": "CONTAINERS (INCLUDING CONTAINERS FOR THE TRANSPORT OF FLUIDS) SPECIALLY DESIGNED\nAND EQUIPPED FOR CARRIAGE BY ONE OR MORE MODES OF TRANSPORT", - "hsn_code": "86090000" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OF HEADING 8709) PEDESTRIAN CONTROLLED TRACTORS", - "hsn_code": "87011000" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OF HEADING 8709) ROAD TRACTORS FOR SEMI-TRAILERS OF\nENGINE CAPACITY NOT EXCEEDING 1,800 CC", - "hsn_code": "87012010" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OFHEADING 8709) ROAD TRACTORS FOR SEMI-TRAILERS\nOTHER", - "hsn_code": "87012090" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OFHEADING 8709 TRACK-LAYING TRACTORS : GARDEN\nTRACTORS:OF ENGINE CAPACITY NOT EXCEEDING 1,800 CC", - "hsn_code": "87013011" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OFHEADING 8709 TRACK-LAYING TRACTORS GARDEN\nTRACTORS: OTHER", - "hsn_code": "87013019" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OF HEADING 8709 OTHER :OF ENGINE CAPACITY NOT\nEXCEEDING 1,800 CC", - "hsn_code": "87013091" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OFHEADING 8709 OTHER OTHER", - "hsn_code": "87013099" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OF HEADING 8709 OTHER : OF ENGINE CAPACITY NOT\nEXCEEDING 1,800 CC", - "hsn_code": "87019010" - }, - { - "description": "TRACTORS (OTHER THAN TRACTORS OFHEADING 8709 OTHER :TRACTORS (OTHER THAN\nTRACTORS OFHEADING 8709 OTHER", - "hsn_code": "87019090" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR SEMIDIESEL)\nVEHICLES FOR TRANSPORT OF NOT MORE THAN3 PERSONS, INCLUDING THE DRIVER:\nINTEGRATED MONOCOQUE VEHICLE", - "hsn_code": "87021011" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR SEMIDIESEL)\nVEHICLES FOR TRANSPORT OF NOT MORE THAN 13 PERSONS, INCLUDING THE DRIVER:AIR\nCONDITIONED VEHICLE", - "hsn_code": "87021012" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE\nDRIVERWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR\nSEMIDIESEL) VEHICLES FOR TRANSPORT OF NOT MORE THAN 13 PERSONS, INCLUDING THE\nDRIVER:OTHER", - "hsn_code": "87021019" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE\nDRIVERWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR\nSEMIDIESEL)OTHER : INTEGRATED MONCOQUE VEHICLE", - "hsn_code": "87021091" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR\nSEMIDIESEL)OTHER : AIR-CONDITIONED VEHICLE", - "hsn_code": "87021092" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nWITH COMPRESSION-IGNITION INTERNALCOMBUSTION PISTON ENGINE (DIESEL OR\nSEMIDIESEL)OTHER :OTHER", - "hsn_code": "87021099" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER VEHICLES FOR TRANSPORT OF NOT MORE THAN13 PERSONS, INCLUDING THE DRIVER:\nINTEGRATED MONOCOQUE VEHICLE", - "hsn_code": "87029011" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER : VEHICLES FOR TRANSPORT OF NOT MORE THAN13 PERSONS, INCLUDING THE\nDRIVER:AIR-CONDITIONED VEHICLE", - "hsn_code": "87029012" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER : VEHICLES FOR TRANSPORT OF NOT MORE THAN13 PERSONS, INCLUDING THE DRIVER:\nELECTRICALLY OPERATED", - "hsn_code": "87029013" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER VEHICLES FOR TRANSPORT OF NOT MORE THAN13 PERSONS, INCLUDING THE DRIVER\nOTHER", - "hsn_code": "87029019" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER VEHICLES FOR TRANSPORT OF NOT MORE THAN13 PERSONS, INCLUDING THE\nDRIVER:ELECTRICALLY OPERATED VEHICLES NOT ELSEWHERE INCLUDED OR SPECIFIED", - "hsn_code": "87029020" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER INTEGRATED MONOCOQUE VEHICLE", - "hsn_code": "87029091" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER :AIR-CONDITIONED VEHICLE", - "hsn_code": "87029092" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF TEN OR MORE PERSONS, INCLUDING THE DRIVER\nOTHER :OTHER", - "hsn_code": "87029099" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THANTHOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS VEHICLES SPECIALLY DESIGNED FOR TRAVELLING ONSNOW; GOLF CARS AND SIMILAR\nVEHICLES ELECTRICALLY OPERATED", - "hsn_code": "87031010" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONSAND RACING\nCARSVEHICLES SPECIALLY DESIGNED FOR TRAVELLING ONSNOW; GOLF CARS AND SIMILAR\nVEHICLESOTHER", - "hsn_code": "87031090" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY NOT EXCEEDING 1,000 CC : VEHICLES PRINCIPALLY DESIGNED\nFOR THE TRANSPORT OF MORE THAN SEVEN PERSONS, INCLUDING THE DRIVER", - "hsn_code": "87032110" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY NOT EXCEEDING 1,000 CC : THREE-WHEELED VEHICLES", - "hsn_code": "87032120" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY NOT EXCEEDING 1,000 CC : OTHERS MOTOR CARS", - "hsn_code": "87032191" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY NOT EXCEEDING 1,000 CC : OTHERS SPECIALISED TRANSPORT\nVEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87032192" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY NOT EXCEEDING 1,000 CC : OTHERS OTHER", - "hsn_code": "87032199" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,000 CC BUT NOT EXCEEDING 1,500 CC\nVEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF MORE THAN SEVEN PERSONS,\nINCLUDING THE DRIVER", - "hsn_code": "87032210" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,000 CC BUT NOT EXCEEDING 1,500 CC\nSPECIALISED TRANSPORT VEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87032220" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,000 CC BUT NOT EXCEEDING 1,500 CC THREE\nWHEELED VEHICLES", - "hsn_code": "87032230" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,000 CC BUT NOT EXCEEDING 1,500 CC OTHER\nMOTOR CARS", - "hsn_code": "87032291" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,000 CC BUT NOT EXCEEDING 1,500 CC OTHER\nOTHER", - "hsn_code": "87032299" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING 3,000 CC :\nVEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF MORE THAN SEVEN PERSONS\nINCLUDING THE DRIVER", - "hsn_code": "87032310" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING 3,000 CC THREE\nWHEELED VEHICLES", - "hsn_code": "87032320" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING 3,000 CC OTHERS\nMOTOR CARS", - "hsn_code": "87032391" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING 3,000 CC\nSPECIALISED TRANSPORT VEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87032392" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING 3,000 CC OTHER", - "hsn_code": "87032399" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 3,000 CC : VEHICLES PRINCIPALLY DESIGNED FOR\nTHE TRANSPORT OF MORE THAN SEVEN PERSONS, INCLUDING THE DRIVER", - "hsn_code": "87032410" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 3,000 CC : THREE-WHEELED VEHICLES", - "hsn_code": "87032420" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 3,000 CC : OTHERS MOTOR CARS", - "hsn_code": "87032491" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 3,000 CC : OTHERS SPECIALISED TRANSPORT\nVEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87032492" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH SPARK-IGNITION INTERNAL COMBUSTION RECIPROCATING PISTON\nENGINE : OF A CYLINDER CAPACITY EXCEEDING 3,000 CC : OTHERS OTHER", - "hsn_code": "87032499" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY NOT EXCEEDING 1,500 CC : VEHICLES\nPRINCIPALLY DESIGNED FOR THE TRANSPORT OF MORE THAN SEVEN PERSONS, INCLUDING THE\nDRIVER", - "hsn_code": "87033110" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY NOT EXCEEDING 1,500 CC : THREE-WHEELED\nVEHICLES", - "hsn_code": "87033120" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY NOT EXCEEDING 1,500 CC : OTHER MOTOR\nCARS", - "hsn_code": "87033191" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY NOT EXCEEDING 1,500 CC : OTHER\nSPECIALISED TRANSPORT VEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87033192" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY NOT EXCEEDING 1,500 CC : OTHER", - "hsn_code": "87033199" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : ? OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING\n2,500 CC : VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF MORE THAN SEVEN\nPERSONS, INCLUDING THE DRIVER", - "hsn_code": "87033210" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING\n2,500 CC THREE-WHEELED VEHICLES", - "hsn_code": "87033220" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING\n2,500 CC OTHERS: MOTOR CARS", - "hsn_code": "87033291" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING\n2,500 CC OTHERS: SPECIALIZED TRANSPORT VEHICLES SUCH AS AMBULANCES, PRISON VANS\nAND THE LIKE", - "hsn_code": "87033292" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 1,500 CC BUT NOT EXCEEDING\n2,500 CC OTHERS: OTHER", - "hsn_code": "87033299" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 2,500 CC : VEHICLES\nPRINCIPALLY DESIGNED FOR THE TRANSPORT OF MORE THAN SEVEN PERSONS, INCLUDING THE\nDRIVER", - "hsn_code": "87033310" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 2,500 CC : THREE-WHEELED\nVEHICLES", - "hsn_code": "87033320" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 2,500 CC OTHERS:: MOTOR\nCARS", - "hsn_code": "87033391" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 2,500 CC OTHERS:: SPECIALISED\nTRANSPORT VEHICLES SUCH AS AMBULANCES, PRISON VANS AND THE LIKE", - "hsn_code": "87033392" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHER VEHICLES, WITH COMPRESSION IGNITION INTERNAL COMBUSTION PISTON ENGINE\n(DIESEL OR SEMI-DIESEL) : OF A CYLINDER CAPACITY EXCEEDING 2,500 CC OTHERS:: OTHER", - "hsn_code": "87033399" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHERS: ELECTRICALLY OPERATED", - "hsn_code": "87039010" - }, - { - "description": "MOTOR CARS AND OTHER MOTOR VEHICLES PRINCIPALLY DESIGNED FOR THE TRANSPORT OF\nPERSONS (OTHER THAN THOSE OF HEADING 8702), INCLUDING STATION WAGONS AND RACING\nCARS OTHERS: OTHER", - "hsn_code": "87039090" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS DUMPERS DESIGNED FOR OFF-HIGHWAY\nUSE: :WITH NET WEIGHT (EXCLUDING PAY-LOAD) EXCEEDING 8 TONNES AND MAXIMUM PAY\nLOAD CAPACITY NOT LESS THAN 10 TONNES", - "hsn_code": "87041010" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS DUMPERS DESIGNED FOR OFF-HIGHWAY\nUSE: OTHER", - "hsn_code": "87041090" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. NOT EXCEEDING 5\nTONNES REFRIGERATED", - "hsn_code": "87042110" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. NOT EXCEEDING 5\nTONNES THREE-WHEELED MOTOR VEHICLES", - "hsn_code": "87042120" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. NOT EXCEEDING 5\nTONNES OTHER", - "hsn_code": "87042190" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 5\nTONNES BUT NOT EXCEEDING 20 TONNES LORRIES AND TRUCKS REFRIGERATED", - "hsn_code": "87042211" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 5\nTONNES BUT NOT EXCEEDING 20 TONNES LORRIES AND TRUCKS OTHER", - "hsn_code": "87042219" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 5\nTONNES BUT NOT EXCEEDING 20 TONNES OTHER", - "hsn_code": "87042290" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 20\nTONNES : LORRIES AND TRUCKS: REFRIGERATED", - "hsn_code": "87042311" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 20\nTONNES : LORRIES AND TRUCKS: OTHER", - "hsn_code": "87042319" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH COMPRESSION-IGNITION\nINTERNAL COMBUSTION PISTON ENGINE (DIESEL OR SEMI-DIESEL) : G.V.W. EXCEEDING 20\nTONNES OTHER", - "hsn_code": "87042390" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE : G.V.W. NOT EXCEEDING 5 TONNES : REFRIGERATED", - "hsn_code": "87043110" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE : G.V.W. NOT EXCEEDING 5 TONNES THREE-WHEELED MOTOR\nVEHICLES", - "hsn_code": "87043120" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE : G.V.W. NOT EXCEEDING 5 TONNES OTHER", - "hsn_code": "87043190" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE G.V.W. EXCEEDING 5 TONNES: LORRIES AND TRUCKS\nREFRIGERATED", - "hsn_code": "87043211" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE G.V.W. EXCEEDING 5 TONNES: LORRIES AND TRUCKS OTHER", - "hsn_code": "87043219" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER, WITH SPARK-IGNITION INTERNAL\nCOMBUSTION PISTON ENGINE G.V.W. EXCEEDING 5 TONNES: OTHER", - "hsn_code": "87043290" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER : LORRIES AND TRUCKS:\nREFRIGERATED", - "hsn_code": "87049011" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER : LORRIES AND TRUCKS: ELECTRICALLY\nOPERATED", - "hsn_code": "87049012" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER : LORRIES AND TRUCKS: OTHER", - "hsn_code": "87049019" - }, - { - "description": "MOTOR VEHICLES FOR THE TRANSPORT OF GOODS OTHER : LORRIES AND TRUCKS: OTHER\nOTHER", - "hsn_code": "87049090" - }, - { - "description": "8705 SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE\nTRANSPORT OF PERSONS OR GOODS (FOR EXAMPLE, BREAKDOWN LORRIES, CRANE LORRIES,\nFIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE\nWORKSHOPS, MOBILE RADIOLOGICAL UNITS) CRANE LORRIES", - "hsn_code": "87051000" - }, - { - "description": "8705 SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE\nTRANSPORT OF PERSONS OR GOODS (FOR EXAMPLE, BREAKDOWN LORRIES, CRANE LORRIES,\nFIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE\nWORKSHOPS, MOBILE RADIOLOGICAL UNITS) MOBILE DRILLING DERRICKS", - "hsn_code": "87052000" - }, - { - "description": "8705 SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE\nTRANSPORT OF PERSONS OR GOODS (FOR EXAMPLE, BREAKDOWN LORRIES, CRANE LORRIES,\nFIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE\nWORKSHOPS, MOBILE RADIOLOGICAL UNITS) FIRE FIGHTING VEHICLES", - "hsn_code": "87053000" - }, - { - "description": "8705 SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE\nTRANSPORT OF PERSONS OR GOODS (FOR EXAMPLE, BREAKDOWN LORRIES, CRANE LORRIES,\nFIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE\nWORKSHOPS, MOBILE RADIOLOGICAL UNITS) CONCRETE-MIXER LORRIES", - "hsn_code": "87054000" - }, - { - "description": "8705 SPECIAL PURPOSE MOTOR VEHICLES, OTHER THAN THOSE PRINCIPALLY DESIGNED FOR THE\nTRANSPORT OF PERSONS OR GOODS (FOR EXAMPLE, BREAKDOWN LORRIES, CRANE LORRIES,\nFIRE FIGHTING VEHICLES, CONCRETE-MIXERS LORRIES, SPRAYING LORRIES, MOBILE\nWORKSHOPS, MOBILE RADIOLOGICAL UNITS) OTHER", - "hsn_code": "87059000" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nCHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705: ? FOR\nTHE TRACTORS OF HEADING 8701 : OF ENGINE CAPACITY NOT EXCEEDING 1,800 CC", - "hsn_code": "87060011" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nCHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705: ? FOR\nTHE TRACTORS OF HEADING 8701 : OTHER", - "hsn_code": "87060019" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE VEHICLES OF HEADING 8702 FOR TRANSPORT OF NOT MORE THAN THIRTEEN PERSONS,\nINCLUDING THE DRIVER", - "hsn_code": "87060021" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE VEHICLES OF HEADING 8702 OTHER", - "hsn_code": "87060029" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8703 FOR THREE-WHEELED VEHICLES", - "hsn_code": "87060031" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8703 OTHER", - "hsn_code": "87060039" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8704: FOR THREE-WHEELED MOTOR VEHICLE", - "hsn_code": "87060041" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8704: FOR VEHICLES, OTHER THAN PETROL DRIVEN", - "hsn_code": "87060042" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8704: FOR DUMPERS COVERED IN THE HEADING 8704", - "hsn_code": "87060043" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8704: OTHER", - "hsn_code": "87060049" - }, - { - "description": "8706 CHASSIS FITTED WITH ENGINES, FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705\nFOR THE MOTOR VEHICLES OF HEADING 8705", - "hsn_code": "87060050" - }, - { - "description": "BODIES (INCLUDING CABS), FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 FOR THE\nVEHICLES OF HEADING 8703", - "hsn_code": "87071000" - }, - { - "description": "BODIES (INCLUDING CABS), FOR THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 OTHER", - "hsn_code": "87079000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 BUMPERS AND\nPARTS THEREOF FOR TRACTORS", - "hsn_code": "87081010" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 BUMPERS AND\nPARTS THEREOF OTHER", - "hsn_code": "87081090" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 OTHER PARTS\nAND ACCESSORIES OF BODIES (INCLUDING CABS) : SAFETY SEAT BELTS", - "hsn_code": "87082100" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES OF BODIES (INCLUDING CABS) -- OTHER", - "hsn_code": "87082900" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - BRAKES AND\nSERVO-BRAKES ; PARTS THEREOF", - "hsn_code": "87083000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 BRAKES AND\nSERVO-BRAKES AND PARTS THEREOF MOUNTED BRAKE LININGS", - "hsn_code": "87083100" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 BRAKES AND\nSERVO-BRAKES AND PARTS THEREOF OTHER", - "hsn_code": "87083900" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - GEAR BOXES\nAND PARTS THEREOF", - "hsn_code": "87084000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - DRIVE-AXLES\nWITH DIFFERENTIAL, WHETHER OR NOT PROVIDED WITH OTHER TRANSMISSION COMPONENTS,\nAND NON-DRIVING AXLES, PARTS THEREOF", - "hsn_code": "87085000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 BRAKES AND\nSERVO-BRAKES AND PARTS THEREOF NON-DRIVING AXLES AND PARTS THEREOF", - "hsn_code": "87086000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - ROAD WHEELS\nAND PARTS AND ACCESSORIES THEREOF", - "hsn_code": "87087000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - SUSPENSION\nSYSTEMS AND PARTS THEREOF (INCLUDING SHOCK ABSORBERS)", - "hsn_code": "87088000" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- RADIATORS AND PARTS THEREOF", - "hsn_code": "87089100" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- SILENCERS (MUFFLERS) AND EXHAUST PIPES; PARTS THEREOF", - "hsn_code": "87089200" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- CLUTCHES AND PARTS THEREOF", - "hsn_code": "87089300" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- STEERING WHEELS, STEERING COLUMNS AND STEERING BOXES, PARTS\nTHEREOF", - "hsn_code": "87089400" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- SAFETY AIRBAGS WITH INFLATER SYSTEM; PARTS THEREOF", - "hsn_code": "87089500" - }, - { - "description": "PARTS AND ACCESSORIES OF THE MOTOR VEHICLES OF HEADINGS 8701 TO 8705 - OTHER PARTS\nAND ACCESSORIES -- OTHER", - "hsn_code": "87089900" - }, - { - "description": "WORKS TRUCKS, SELF-PROPELLED, NOT FITTED WITH LIFTING OR HANDLING EQUIPMENT, OF\nTHE TYPE USED IN FACTORIES, WAREHOUSES, DOCK AREAS OR AIRPORTS FOR SHORT DISTANCE\nTRANSPORT OF GOODS; TRACTORS OF THE TYPE USED ON RAILWAY STATION PLATFORMS;\nPARTS OF THE FOREGOING VEHICLES VEHICLES : ELECTRICAL", - "hsn_code": "87091100" - }, - { - "description": "WORKS TRUCKS, SELF-PROPELLED, NOT FITTED WITH LIFTING OR HANDLING EQUIPMENT, OF\nTHE TYPE USED IN FACTORIES, WAREHOUSES, DOCK AREAS OR AIRPORTS FOR SHORT DISTANCE\nTRANSPORT OF GOODS; TRACTORS OF THE TYPE USED ON RAILWAY STATION PLATFORMS;\nPARTS OF THE FOREGOING VEHICLES VEHICLES : OTHER", - "hsn_code": "87091900" - }, - { - "description": "WORKS TRUCKS, SELF-PROPELLED, NOT FITTED WITH LIFTING OR HANDLING EQUIPMENT, OF\nTHE TYPE USED IN FACTORIES, WAREHOUSES, DOCK AREAS OR AIRPORTS FOR SHORT DISTANCE\nTRANSPORT OF GOODS; TRACTORS OF THE TYPE USED ON RAILWAY STATION PLATFORMS;\nPARTS OF THE FOREGOING VEHICLES PARTS", - "hsn_code": "87099000" - }, - { - "description": "TANKS AND OTHER ARMOURED FIGHTING VEHICLES, MOTORISED, WHETHER OR NOT FITTED\nWITH WEAPONS, AND PARTS OF SUCH VEHICLES", - "hsn_code": "87100000" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY NOT EXCEEDING 50 CC: MOPEDS", - "hsn_code": "87111010" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY NOT EXCEEDING 50 CC MOTORISED CYCLES", - "hsn_code": "87111020" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY NOT EXCEEDING 50 CC OTHER", - "hsn_code": "87111090" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : SCOOTERS : OF CYLINDER\nCAPACITY NOT EXCEEDING 75 CC", - "hsn_code": "87112011" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : SCOOTERS : OTHER", - "hsn_code": "87112019" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : MOTOR CYCLES OF\nCYLINDER CAPACITY NOT EXCEEDING 75 CC", - "hsn_code": "87112021" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : MOTOR CYCLES OTHER", - "hsn_code": "87112029" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : MOPEDS : OF CYLINDER\nCAPACITY NOT EXCEEDING 75 CC", - "hsn_code": "87112031" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : MOPEDS : OTHER", - "hsn_code": "87112039" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : OTHER : OF CYLINDER\nCAPACITY NOT EXCEEDING 75 CC", - "hsn_code": "87112091" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 50 CC BUT NOT EXCEEDING 250 CC : OTHER : OTHER", - "hsn_code": "87112099" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 500 CC : SCOOTERS", - "hsn_code": "87113010" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 500 CC : MOTOR-CYCLES", - "hsn_code": "87113020" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 250 CC BUT NOT EXCEEDING 500 CC : OTHER", - "hsn_code": "87113090" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 500 CC BUT NOT EXCEEDING 800 CC : MOTOR-CYCLES", - "hsn_code": "87114010" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 500 CC BUT NOT EXCEEDING 800 CC : OTHER", - "hsn_code": "87114090" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; WITH RECIPROCATING INTERNAL COMBUSTION PISTON ENGINE OF A\nCYLINDER CAPACITY EXCEEDING 800 CC", - "hsn_code": "87115000" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; OTHER : SIDE-CARS", - "hsn_code": "87119010" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; OTHER : OTHER : ELECTRICALLY OPERATED", - "hsn_code": "87119091" - }, - { - "description": "MOTORCYCLES (INCLUDING MOPEDS) AND CYCLES FITTED WITH AN AUXILIARY MOTOR, WITH\nOR WITHOUT SIDE-CARS; OTHER : OTHER : OTHER", - "hsn_code": "87119099" - }, - { - "description": "BICYCLES AND OTHER CYCLES (INCLUDING DELIVERY TRICYCLES), NOT MOTORISED BICYCLES AND\nOTHER CYCLES (INCLUDING DELIVERY TRICYCLES), NOT MOTORISED BICYCLES", - "hsn_code": "87120010" - }, - { - "description": "BICYCLES AND OTHER CYCLES (INCLUDING DELIVERY TRICYCLES), NOT MOTORISED BICYCLES AND\nOTHER CYCLES (INCLUDING DELIVERY TRICYCLES), NOT MOTORIZED OTHER", - "hsn_code": "87120090" - }, - { - "description": "CARRIAGES FOR DISABLED PERSONS, WHETHER OR NOT MOTORISED OR OTHERWISE\nMECHANICALLY PROPELLED NOT MECHANICALLY PROPELLED WHEEL CHAIRS FOR INVALID", - "hsn_code": "87131010" - }, - { - "description": "CARRIAGES FOR DISABLED PERSONS, WHETHER OR NOT MOTORISED OR OTHERWISE\nMECHANICALLY PROPELLED NOT MECHANICALLY PROPELLED OTHER", - "hsn_code": "87131090" - }, - { - "description": "CARRIAGES FOR DISABLED PERSONS, WHETHER OR NOT MOTORISED OR OTHERWISE\nMECHANICALLY PROPELLED OTHER WHEEL CHAIRS FOR INVALID", - "hsn_code": "87139010" - }, - { - "description": "CARRIAGES FOR DISABLED PERSONS, WHETHER OR NOT MOTORISED OR OTHERWISE\nMECHANICALLY PROPELLED OTHER OTHER", - "hsn_code": "87139090" - }, - { - "description": "SADDLES", - "hsn_code": "87141010" - }, - { - "description": "OTHER", - "hsn_code": "87141090" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OF CARRIAGES FOR DISABLED\nPERSONS MECHANICALLY PROPELLED", - "hsn_code": "87142010" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OF CARRIAGES FOR DISABLED\nPERSONS NON-MECHANICALLY PROPELLED", - "hsn_code": "87142020" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OF CARRIAGES FOR DISABLED\nPERSONS OTHER", - "hsn_code": "87142090" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OTHER : FRAMES AND\nFORKS, AND PARTS THEREOF", - "hsn_code": "87149100" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 WHEEL RIMS AND SPOKES :\nBICYCLE RIMS", - "hsn_code": "87149210" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 WHEEL RIMS AND SPOKES\nBICYCLE SPOKES", - "hsn_code": "87149220" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 WHEEL RIMS AND SPOKES\nOTHER", - "hsn_code": "87149290" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 HUBS, OTHER THAN\nCOASTER BRAKING HUBS AND HUB BRAKES, AND FREE-WHEEL SPROCKET-WHEELS : BICYCLE\nHUBS", - "hsn_code": "87149310" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 HUBS, OTHER THAN\nCOASTER BRAKING HUBS AND HUB BRAKES, AND FREE-WHEEL SPROCKET-WHEELS : BICYCLE\nFREE-WHEELS", - "hsn_code": "87149320" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 HUBS, OTHER THAN\nCOASTER BRAKING HUBS AND HUB BRAKES, AND FREE-WHEEL SPROCKET-WHEELS : OTHER", - "hsn_code": "87149390" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 BRAKES, INCLUDING\nCOASTER BRAKING HUBS AND HUB BRAKES, AND PARTS THEREOF", - "hsn_code": "87149400" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 SADDLES : BICYCLE SADDLES", - "hsn_code": "87149510" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 SADDLES OTHER", - "hsn_code": "87149590" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 PEDALS AND CRANK-GEAR,\nAND PARTS THEREOF", - "hsn_code": "87149600" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OTHER : BICYCLE CHAINS", - "hsn_code": "87149910" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OTHER BICYCLE WHEELS", - "hsn_code": "87149920" - }, - { - "description": "PARTS AND ACCESSORIES OF VEHICLES OF HEADINGS 8711TO 8713 OTHER OTHER", - "hsn_code": "87149990" - }, - { - "description": "BABY CARRIAGES AND PARTS THEREOF BABY CARRIAGES AND PARTS THEREOF: BABY CARRIAGES", - "hsn_code": "87150010" - }, - { - "description": "BABY CARRIAGES AND PARTS THEREOF BABY CARRIAGES AND PARTS THEREOF PARTS", - "hsn_code": "87150020" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF TRAILERS AND SEMI-TRAILERS OF THE CARAVAN TYPE, FOR HOUSING OR CAMPING", - "hsn_code": "87161000" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF SELF-LOADING OR SELF-UNLOADING TRAILERS AND SEMI-TRAILERS FOR\nAGRICULTURAL PURPOSES", - "hsn_code": "87162000" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER TRAILERS AND SEMI-TRAILERS FOR THE TRANSPORT OF GOODS : TANKER\nTRAILERS AND TANKER SEMI-TRAILERS", - "hsn_code": "87163100" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER TRAILERS AND SEMI-TRAILERS FOR THE TRANSPORT OF GOODS : OTHER", - "hsn_code": "87163900" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER TRAILERS AND SEMI-TRAILERS FOR THE TRANSPORT OF GOODS : OTHER\nTRAILERS AND SEMI-TRAILERS", - "hsn_code": "87164000" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER VEHICLES HAND PROPELLED VEHICLES (E.G. HAND CARTS, RICKSHAWS AND THE\nLIKE)", - "hsn_code": "87168010" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER VEHICLES ANIMAL DRAWN VEHICLES", - "hsn_code": "87168020" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF OTHER VEHICLES OTHER", - "hsn_code": "87168090" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF PARTS : PARTS AND ACCESSORIES OF TRAILERS", - "hsn_code": "87169010" - }, - { - "description": "TRAILERS AND SEMI-TRAILERS; OTHER VEHICLES, NOT MECHANICALLY PROPELLED; PARTS\nTHEREOF PARTS OTHER", - "hsn_code": "87169090" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT -\nBALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT:---\nGLIDERS AND HANG GLIDERS", - "hsn_code": "88010010" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT\nBALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT: --\nBALLOONS", - "hsn_code": "88010020" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT\nBALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT:---\nOTHER", - "hsn_code": "88010090" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT\nGLIDERS AND HANG GLIDERS", - "hsn_code": "88011000" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT -\nOTHER: BALLOONS", - "hsn_code": "88019010" - }, - { - "description": "BALLOONS AND DIRIGIBLES; GLIDERS, HANG GLIDERS AND OTHER NON-POWERED AIRCRAFT -\nOTHER: OTHER", - "hsn_code": "88019090" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES - HELICOPTERS: OF AN\nUNLADEN WEIGHT NOT EXCEEDING 2,000 KG", - "hsn_code": "88021100" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES - HELICOPTERS: OF AN\nUNLADEN WEIGHT EXCEEDING 2,000 KG", - "hsn_code": "88021200" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES AEROPLANES AND OTHER\nAIRCRAFT, OF AN UNLADEN WEIGHT NOT EXCEEDING 2,000 KG", - "hsn_code": "88022000" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES AEROPLANES AND OTHER\nAIRCRAFT, OF AN UNLADEN WEIGHT EXCEEDING 2,000 KG BUT NOT EXCEEDING 15,000 KG", - "hsn_code": "88023000" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES AEROPLANES AND OTHER\nAIRCRAFT, OF AN UNLADEN WEIGHT EXCEEDING 15,000 KG", - "hsn_code": "88024000" - }, - { - "description": "OTHER AIRCRAFT (FOR EXAMPLE, HELICOPTERS, AEROPLANES); SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES SPACECRAFT (INCLUDING\nSATELLITES) AND SUBORBITAL AND SPACECRAFT LAUNCH VEHICLES", - "hsn_code": "88026000" - }, - { - "description": "PARTS OF GOODS OF HEADING 8801 OR 8802 - - PROPELLERS AND ROTORS AND PARTS THEREOF", - "hsn_code": "88031000" - }, - { - "description": "PARTS OF GOODS OF HEADING 8801 OR 8802 - - UNDER-CARRIAGES AND PARTS THEREOF", - "hsn_code": "88032000" - }, - { - "description": "PARTS OF GOODS OF HEADING 8801 OR 8802 - - OTHER PARTS OF AEROPLANES OR HELICOPTERS", - "hsn_code": "88033000" - }, - { - "description": "PARTS OF GOODS OF HEADING 8801 OR 8802 - OTHER", - "hsn_code": "88039000" - }, - { - "description": "PARACHUTES (INCLUDING DIRIGIBLE PARACHUTES AND PARAGLIDERS) AND ROTOCHUTES;\nPARTS THEREOF AND ACCESSORIES THERETO - PARACHUTES (INCLUDING DIRIGIBLE\nPARACHUTES AND PARAGLIDERS) AND ROTOCHUTES; PARTS THEREOF AND ACCESSORIES\nTHERETO: PARACHUTES (INCLUDING DIRIGIBLE PARACHUTES AND PARAGLIDERS) AND PARTS\nAND ACCESSORIES THEREOF", - "hsn_code": "88040010" - }, - { - "description": "PARACHUTES (INCLUDING DIRIGIBLE PARACHUTES AND PARAGLIDERS) AND ROTOCHUTES;\nPARTS THEREOF AND ACCESSORIES THERETO - PARACHUTES (INCLUDING DIRIGIBLE\nPARACHUTES AND PARAGLIDERS) AND ROTOCHUTES; PARTS THEREOF AND ACCESSORIES\nTHERETO: ROTOCHUTES; PARTS AND ACCESSORIES THEREOF", - "hsn_code": "88040020" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS;\nPARTS OF THE FOREGOING ARTICLES - AIRCRAFT LAUNCHING GEAR AND PARTS THEREOF; DECK\nARRESTOR OR SIMILAR GEAR AND PARTS THEREOF: AIRCRAFT LAUNCHING GEAR", - "hsn_code": "88051010" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS;\nPARTS OF THE FOREGOING ARTICLES - AIRCRAFT LAUNCHING GEAR AND PARTS THEREOF; DECK\nARRESTOR OR SIMILAR GEAR AND PARTS THEREOF: DECK ARRESTOR OR SIMILAR GEAR", - "hsn_code": "88051020" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS;\nPARTS OF THE FOREGOING ARTICLES - AIRCRAFT LAUNCHING GEAR AND PARTS THEREOF; DECK\nARRESTOR OR SIMILAR GEAR AND PARTS THEREOF: PART OF AIRCRAFT LAUNCHING GEAR AND\nDECK-ARRESTOR OR SIMILAR GEAR", - "hsn_code": "88051030" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS;\nPARTS OF THE FOREGOING ARTICLES - GROUND FLYING TRAINERS AND PARTS THEREOF: AIR\nCOMBAT SIMULATORS AND PARTS THEREOF", - "hsn_code": "88052100" - }, - { - "description": "AIRCRAFT LAUNCHING GEAR; DECK-ARRESTOR OR SIMILAR GEAR; GROUND FLYING TRAINERS;\nPARTS OF THE FOREGOING ARTICLES - GROUND FLYING TRAINERS AND PARTS THEREOF: OTHER", - "hsn_code": "88052900" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - CRUISE SHIPS, EXCURSION BOATS AND SIMILAR\nVESSELS PRINCIPALLY DESIGNED FOR THE TRANSPORT OF PERSONS; FERRY-BOATS OF ALL KINDS:\nSHIPS", - "hsn_code": "89011010" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - CRUISE SHIPS, EXCURSION BOATS AND SIMILAR\nVESSELS PRINCIPALLY DESIGNED FOR THE TRANSPORT OF PERSONS; FERRY-BOATS OF ALL KINDS:\nLAUNCHES", - "hsn_code": "89011020" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - CRUISE SHIPS, EXCURSION BOATS AND SIMILAR\nVESSELS PRINCIPALLY DESIGNED FOR THE TRANSPORT OF PERSONS; FERRY-BOATS OF ALL KINDS:\nBOATS", - "hsn_code": "89011030" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - CRUISE SHIPS, EXCURSION BOATS AND SIMILAR\nVESSELS PRINCIPALLY DESIGNED FOR THE TRANSPORT OF PERSONS; FERRY-BOATS OF ALL KINDS:\nBARGES", - "hsn_code": "89011040" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - CRUISE SHIPS, EXCURSION BOATS AND SIMILAR\nVESSELS PRINCIPALLY DESIGNED FOR THE TRANSPORT OF PERSONS; FERRY-BOATS OF ALL KINDS:\nOTHER", - "hsn_code": "89011090" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - TANKERS", - "hsn_code": "89012000" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - REFRIGERATED VESSELS, OTHER THAN THOSE OF\nSUB-HEADING 8901 20", - "hsn_code": "89013000" - }, - { - "description": "CRUISE SHIPS, EXCURSION BOATS , FERRY-BOATS, CARGO SHIPS, BARGES AND SIMILAR VESSELS\nFOR THE TRANSPORT OF PERSONS OR GOODS - OTHER VESSELS FOR TRANSPORT OF THE GOODS\nAND OTHER VESSELS FOR THE TRANSPORT OF BOTH PERSONS AND GOODS", - "hsn_code": "89019000" - }, - { - "description": "FISHING VESSELS; FACTORY SHIPS AND OTHER VESSELS FOR PROCESSING OR PRESERVING\nFISHERY PRODUCTS 8902 00 - FISHING VESSELS; FACTORY SHIPS AND OTHER VESSELS FOR\nPROCESSING OR PRESERVING FISHERY PRODUCTS : TRAWLERS AND OTHER FISHING VESSELS", - "hsn_code": "89020010" - }, - { - "description": "FISHING VESSELS; FACTORY SHIPS AND OTHER VESSELS FOR PROCESSING OR PRESERVING\nFISHERY PRODUCTS 8902 00 - FISHING VESSELS; FACTORY SHIPS AND OTHER VESSELS FOR\nPROCESSING OR PRESERVING FISHERY PRODUCTS : OTHER", - "hsn_code": "89020090" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES\nINFLATABLE", - "hsn_code": "89031000" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES - OTHER\n: SAIL BOATS, WITH OR WITHOUT AUXILIARY MOTOR", - "hsn_code": "89039100" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES - OTHER\n: MOTORBOATS, OTHER THAN OUTBOARD MOTORBOATS", - "hsn_code": "89039200" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES - OTHER\n: - OTHER : CANOES", - "hsn_code": "89039910" - }, - { - "description": "YACHTS AND OTHER VESSELS FOR PLEASURE OR SPORTS; ROWING BOATS AND CANOES - OTHER\n: - OTHER : OTHER", - "hsn_code": "89039990" - }, - { - "description": "TUGS AND PUSHER CRAFT", - "hsn_code": "89040000" - }, - { - "description": "LIGHT-VESSELS, FIRE-FLOATS, DREDGERS, FLOATING CRANES, AND OTHER VESSELS THE\nNAVIGABILITY OF WHICH IS SUBSIDIARY TO THEIR MAIN FUNCTION; FLOATING DOCKS; FLOATING\nOR SUBMERSIBLE DRILLING OR PRODUCTION PLATFORMS DREDGERS", - "hsn_code": "89051000" - }, - { - "description": "LIGHT-VESSELS, FIRE-FLOATS, DREDGERS, FLOATING CRANES, AND OTHER VESSELS THE\nNAVIGABILITY OF WHICH IS SUBSIDIARY TO THEIR MAIN FUNCTION; FLOATING DOCKS; FLOATING\nOR SUBMERSIBLE DRILLING OR PRODUCTION PLATFORMS FLOATING OR SUBMERSIBLE DRILLING\nOR PRODUCTION PLATFORMS", - "hsn_code": "89052000" - }, - { - "description": "LIGHT-VESSELS, FIRE-FLOATS, DREDGERS, FLOATING CRANES, AND OTHER VESSELS THE\nNAVIGABILITY OF WHICH IS SUBSIDIARY TO THEIR MAIN FUNCTION; FLOATING DOCKS; FLOATING\nOR SUBMERSIBLE DRILLING OR PRODUCTION PLATFORMS - OTHER : FLOATING DOCKS", - "hsn_code": "89059010" - }, - { - "description": "LIGHT-VESSELS, FIRE-FLOATS, DREDGERS, FLOATING CRANES, AND OTHER VESSELS THE\nNAVIGABILITY OF WHICH IS SUBSIDIARY TO THEIR MAIN FUNCTION; FLOATING DOCKS; FLOATING\nOR SUBMERSIBLE DRILLING OR PRODUCTION PLATFORMS - OTHER : OTHER", - "hsn_code": "89059090" - }, - { - "description": "OTHER VESSELS, INCLUDING WARSHIPS AND LIFEBOATS OTHER THAN ROWING BOATS\nWARSHIPS", - "hsn_code": "89061000" - }, - { - "description": "OTHER VESSELS, INCLUDING WARSHIPS AND LIFEBOATS OTHER THAN ROWING BOATS OTHER", - "hsn_code": "89069000" - }, - { - "description": "OTHER FLOATING STRUCTURES ( FOR EXAMPLE, RAFTS, TANKS, COFFER-DAMS, LANDING\nSTAGES, BUOYS AND BEACONS) INFLATABLE RAFTS", - "hsn_code": "89071000" - }, - { - "description": "OTHER FLOATING STRUCTURES ( FOR EXAMPLE, RAFTS, TANKS, COFFER-DAMS, LANDING\nSTAGES, BUOYS AND BEACONS) OTHER", - "hsn_code": "89079000" - }, - { - "description": "VESSELS AND OTHER FLOATING STRUCTURES FORBREAKING UP", - "hsn_code": "89080000" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED OPTICAL FIBRES, OPTICAL\nFIBRES BUNDLES AND CABLES", - "hsn_code": "90011000" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED SHEETS AND PLATES OF\nPOLARISING MATERIAL", - "hsn_code": "90012000" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED CONTACT LENSES", - "hsn_code": "90013000" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED - SPECTACLE LENSES OF\nGLASS : POLARISED GLASS", - "hsn_code": "90014010" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED - SPECTACLE LENSES OF\nGLASS : OTHER", - "hsn_code": "90014090" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED SPECTACLE LENSES OF OTHER\nMATERIALS", - "hsn_code": "90015000" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED - OTHER: OPTICAL CALCITE\nCRYSTAL", - "hsn_code": "90019010" - }, - { - "description": "OPTICAL FIBRES AND OPTICAL FIBRE BUNDLES; OPTICAL FIBRE CABLES OTHER THAN THOSE OF\nHEADING 8544; SHEETS AND PLATES OF POLARISING MATERIAL; LENSES (INCLUDING CONTACT\nLENSES), PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, UNMOUNTED,\nOTHER THAN SUCH ELEMENTS OF GLASS NOT OPTICALLY WORKED - OTHER: OTHER", - "hsn_code": "90019090" - }, - { - "description": "LENSES, PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, MOUNTED,\nBEING PARTS OF OR FITTINGS FOR INSTRUMENTS OR APPARATUS, OTHER THAN SUCH\nELEMENTS OF GLASS NOT OPTICALLY WORKED - OBJECTIVE LENSES: FOR CAMERAS, PROJECTORS\nOR PHOTOGRAPHIC ENLARGERS OR REDUCERS", - "hsn_code": "90021100" - }, - { - "description": "LENSES, PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, MOUNTED,\nBEING PARTS OF OR FITTINGS FOR INSTRUMENTS OR APPARATUS, OTHER THAN SUCH\nELEMENTS OF GLASS NOT OPTICALLY WORKED - OBJECTIVE LENSES: OTHER", - "hsn_code": "90021900" - }, - { - "description": "LENSES, PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, MOUNTED,\nBEING PARTS OF OR FITTINGS FOR INSTRUMENTS OR APPARATUS, OTHER THAN SUCH\nELEMENTS OF GLASS NOT OPTICALLY WORKED - OBJECTIVE LENSES: FILTERS", - "hsn_code": "90022000" - }, - { - "description": "LENSES, PRISMS, MIRRORS AND OTHER OPTICAL ELEMENTS, OF ANY MATERIAL, MOUNTED,\nBEING PARTS OF OR FITTINGS FOR INSTRUMENTS OR APPARATUS, OTHER THAN SUCH\nELEMENTS OF GLASS NOT OPTICALLY WORKED OTHER", - "hsn_code": "90029000" - }, - { - "description": "FRAMES AND MOUNTINGS FOR SPECTACLES, GOGGLES OR THE LIKE, AND PARTS THEREOF -\nFRAMES AND MOUNTINGS: OF PLASTICS", - "hsn_code": "90031100" - }, - { - "description": "FRAMES AND MOUNTINGS FOR SPECTACLES, GOGGLES OR THE LIKE, AND PARTS THEREOF -\nFRAMES AND MOUNTINGS: OF OTHER MATERIALS", - "hsn_code": "90031900" - }, - { - "description": "FRAMES AND MOUNTINGS FOR SPECTACLES, GOGGLES OR THE LIKE, AND PARTS THEREOF PARTS", - "hsn_code": "90039000" - }, - { - "description": "SPECTACLES, GOGGLES AND THE LIKE, CORRECTIVE, PROTECTIVE OR OTHER SUNGLASSES", - "hsn_code": "90041000" - }, - { - "description": "SPECTACLES, GOGGLES AND THE LIKE, CORRECTIVE, PROTECTIVE OR OTHER - OTHER: PASSIVE\nNIGHT VISION GOGGLES", - "hsn_code": "90049010" - }, - { - "description": "SPECTACLES, GOGGLES AND THE LIKE, CORRECTIVE, PROTECTIVE OR OTHER - OTHER: PRISMATIC\nEYEGLASSES FOR READING", - "hsn_code": "90049020" - }, - { - "description": "SPECTACLES, GOGGLES AND THE LIKE, CORRECTIVE, PROTECTIVE OR OTHER - OTHER: OTHER", - "hsn_code": "90049090" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY BINOCULARS", - "hsn_code": "90051000" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY - OTHER INSTRUMENTS: MONOCULAR AND\nREFRACTING TELESCOPES", - "hsn_code": "90058010" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY - OTHER INSTRUMENTS: ASTRONOMICAL INSTRUMENTS", - "hsn_code": "90058020" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY - OTHER INSTRUMENTS: OTHER", - "hsn_code": "90058090" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY PARTS AND ACCESSORIES (INCLUDING MOUNTINGS): OF\nBINOCULAR OR TELESCOPES OF HEADING 9005, OTHER THAN MOUNTINGS", - "hsn_code": "90059010" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY PARTS AND ACCESSORIES (INCLUDING MOUNTINGS):\nMOUNTINGS FOR ASTRONOMICAL INSTRUMENTS", - "hsn_code": "90059020" - }, - { - "description": "BINOCULARS, MONOCULARS, OTHER OPTICAL TELESCOPES, AND MOUNTINGS THEREFOR;\nOTHER ASTRONOMICAL INSTRUMENTS AND MOUNTINGS THEREFOR, BUT NOT INCLUDING\nINSTRUMENTS FOR RADIO-ASTRONOMY PARTS AND ACCESSORIES (INCLUDING MOUNTINGS):\nOTHER", - "hsn_code": "90059090" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 CAMERAS OF\nA KIND USED FOR PREPARING PRINTING PLATES OR CYLINDERS", - "hsn_code": "90061000" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 CAMERAS OF\nA KIND USED FOR RECORDING DOCUMENTS ON MICROFILM, MICROFICHE OR OTHER\nMICROFORMS", - "hsn_code": "90062000" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 CAMERAS\nSPECIALLY DESIGNED FOR UNDERWATER USE, FOR AERIAL SURVEY OR FOR MEDICAL OR\nSURGICAL EXAMINATION OF INTERNAL ORGANS; COMPARISON CAMERAS FOR FORENSIC OR\nCRIMINOLOGICAL PURPOSES", - "hsn_code": "90063000" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 INSTANT\nPRINT CAMERAS", - "hsn_code": "90064000" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: WITH A THROUGH-THE-LENS VIEW-FINDER [SINGLE LENS REFLEX (SLR)] FOR ROLL\nFILM OF A WIDTH NOT EXCEEDING 35 MM", - "hsn_code": "90065100" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: OTHER, FOR ROLL FILM OF A WIDTH LESS THAN 35 MM", - "hsn_code": "90065200" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: - OTHER, FOR ROLL FILM OF A WIDTH OF 35 MM: FIXED FOCUS 35 MM CAMERAS", - "hsn_code": "90065310" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: - OTHER, FOR ROLL FILM OF A WIDTH OF 35 MM: OTHER", - "hsn_code": "90065390" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: - OTHER: FIXED FOCUS 110 MM CAMERAS", - "hsn_code": "90065910" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - OTHER\nCAMERAS: - OTHER: OTHER", - "hsn_code": "90065990" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 -\nPHOTOGRAPHIC FLASHLIGHT APPARATUS AND FLASHBULBS: DISCHARGE LAMP (\"ELECTRONIC\")\nFLASHLIGHT APPARATUS", - "hsn_code": "90066100" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 -\nPHOTOGRAPHIC FLASHLIGHT APPARATUS AND FLASHBULBS: FLASHBULBS, FLASHCUBES AND\nTHE LIKE", - "hsn_code": "90066200" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 -\nPHOTOGRAPHIC FLASHLIGHT APPARATUS AND FLASHBULBS: OTHER", - "hsn_code": "90066900" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - PARTS AND\nACCESSORIES: FOR CAMERAS", - "hsn_code": "90069100" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) CAMERAS; PHOTOGRAPHIC FLASHLIGHT\nAPPARATUS AND FLASH BULBS OTHER THAN DISCHARGE LAMPS OF HEADING 8539 - PARTS AND\nACCESSORIES: OTHER", - "hsn_code": "90069900" - }, - { - "description": "FOR FILM OF LESS THAN 16 MM WIDTH OR FOR DOUBLE- 8 MM FILM", - "hsn_code": "90071010" - }, - { - "description": "OTHER", - "hsn_code": "90071090" - }, - { - "description": "CINEMATOGRAPHIC CAMERAS AND PROJECTORS, WHETHER OR NOT INCORPORATING SOUND\nRECORDING OR REPRODUCING APPARATUS - PROJECTORS: FOR FILM OF LESS THAN 16 MM\nWIDTH", - "hsn_code": "90072010" - }, - { - "description": "CINEMATOGRAPHIC CAMERAS AND PROJECTORS, WHETHER OR NOT INCORPORATING SOUND\nRECORDING OR REPRODUCING APPARATUS - PROJECTORS: OTHER", - "hsn_code": "90072090" - }, - { - "description": "CINEMATOGRAPHIC CAMERAS AND PROJECTORS, WHETHER OR NOT INCORPORATING SOUND\nRECORDING OR REPRODUCING APPARATUS - PARTS AND ACCESSORIES: FOR CAMERAS", - "hsn_code": "90079100" - }, - { - "description": "CINEMATOGRAPHIC CAMERAS AND PROJECTORS, WHETHER OR NOT INCORPORATING SOUND\nRECORDING OR REPRODUCING APPARATUS - PARTS AND ACCESSORIES: FOR PROJECTORS", - "hsn_code": "90079200" - }, - { - "description": "SLIDE PROJECTORS", - "hsn_code": "90085010" - }, - { - "description": "MICROFILM, MICROFICHE OR OTHER MICROFORM READERS, WHETHER OR NOT CAPABLE OF\nPRODUCING COPIES", - "hsn_code": "90085020" - }, - { - "description": "OTHER IMAGE PROJECTORS", - "hsn_code": "90085030" - }, - { - "description": "PHOTOGRAPHIC (OTHER THAN CINEMATOGRAPHIC) ENLARGERS AND REDUCERS", - "hsn_code": "90085040" - }, - { - "description": "IMAGE PROJECTORS, OTHER THAN CINEMATOGRAPHIC; PHOTOGRAPHIC (OTHER THAN\nCINEMATOGRAPHIC) ENLARGERS AND REDUCERS PARTS AND ACCESSORIES", - "hsn_code": "90089000" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - ELECTROSTATIC PHOTOCOPYING APPARATUS: OPERATING\nBY REPRODUCING THE ORIGINAL IMAGE DIRECTLY ONTO THE COPY (DIRECT PROCESS)", - "hsn_code": "90091100" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - ELECTROSTATIC PHOTOCOPYING APPARATUS: OPERATING\nBY REPRODUCING THE ORIGINAL IMAGE VIA AN INTERMEDIATE ONTO THE COPY (INDIRECT\nPROCESS)", - "hsn_code": "90091200" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - OTHER PHOTOCOPYING APPARATUS: INCORPORATING AN\nOPTICAL SYSTEM", - "hsn_code": "90092100" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - OTHER PHOTOCOPYING APPARATUS: OF THE CONTACT\nTYPE", - "hsn_code": "90092200" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS THERMO-COPYING APPARATUS", - "hsn_code": "90093000" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - PARTS AND ACCESSORIES: AUTOMATIC DOCUMENT\nFEEDERS", - "hsn_code": "90099100" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - PARTS AND ACCESSORIES: PAPER FEEDERS", - "hsn_code": "90099200" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - PARTS AND ACCESSORIES: SORTERS", - "hsn_code": "90099300" - }, - { - "description": "PHOTOCOPYING APPARATUS INCORPORATING AN OPTICAL SYSTEM OR OF THE CONTACT TYPE\nAND THERMO-COPYING APPARATUS - PARTS AND ACCESSORIES: OTHER", - "hsn_code": "90099900" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES, NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER; NEGATOSCOPES;\nPROJECTION SCREENS - APPARATUS AND EQUIPMENT FOR AUTOMATICALLY DEVELOPING\nPHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC) FILM OR PAPER IN ROLLS OR FOR\nAUTOMATICALLY EXPOSING DEVELOPED FILM TO ROLLS OF PHOTOGRAPHIC PAPER", - "hsn_code": "90101000" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS - APPARATUS FOR THE\nPROJECTION OR DRAWING OF CIRCUIT PATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS:\nDIRECT WRITE-ON-WAFER APPARATUS", - "hsn_code": "90104100" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS - APPARATUS FOR THE\nPROJECTION OR DRAWING OF CIRCUIT PATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS:\nSTEP AND REPEAT ALIGNERS", - "hsn_code": "90104200" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS - APPARATUS FOR THE\nPROJECTION OR DRAWING OF CIRCUIT PATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS:\nOTHER", - "hsn_code": "90104900" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS OTHER APPARATUS AND\nEQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC) LABORATORIES;\nNEGATOSCOPES", - "hsn_code": "90105000" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS PROJECTION SCREENS", - "hsn_code": "90106000" - }, - { - "description": "APPARATUS AND EQUIPMENT FOR PHOTOGRAPHIC (INCLUDING CINEMATOGRAPHIC)\nLABORATORIES (INCLUDING APPARATUS FOR THE PROJECTION OR DRAWING OF CIRCUIT\nPATTERNS ON SENSITISED SEMICONDUCTOR MATERIALS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; NEGATOSCOPES; PROJECTION SCREENS PARTS AND ACCESSORIES", - "hsn_code": "90109000" - }, - { - "description": "COMPOUND OPTICAL MICROSCOPES, INCLUDING THOSE FOR PHOTOMICRO-GRAPHY,\nCINEPHOTOMICROGRAPHY OR MICROPROJECTION - STEREOSCOPIC MICROSCOPES", - "hsn_code": "90111000" - }, - { - "description": "COMPOUND OPTICAL MICROSCOPES, INCLUDING THOSE FOR PHOTOMICRO-GRAPHY,\nCINEPHOTOMICROGRAPHY OR MICROPROJECTION - OTHER MICROSCOPES, FOR\nPHOTOMICROGRAPHY, CINEPHOTOMICROGRAPHY OR MICROPROJECTION", - "hsn_code": "90112000" - }, - { - "description": "COMPOUND OPTICAL MICROSCOPES, INCLUDING THOSE FOR PHOTOMICRO-GRAPHY,\nCINEPHOTOMICROGRAPHY OR MICROPROJECTION - OTHER MICROSCOPES", - "hsn_code": "90118000" - }, - { - "description": "COMPOUND OPTICAL MICROSCOPES, INCLUDING THOSE FOR PHOTOMICRO-GRAPHY,\nCINEPHOTOMICROGRAPHY OR MICROPROJECTION - PARTS AND ACCESSORIES", - "hsn_code": "90119000" - }, - { - "description": "MICROSCOPES OTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS - MICROSCOPES\nOTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS: ELECTRON MICROSCOPES\nFITTED WITH EQUIPMENT SPECIFICALLY DESIGNED FOR THE HANDLING AND TRANSPORT OF\nSEMICONDUCTOR WAFERS OR RETICLES", - "hsn_code": "90121010" - }, - { - "description": "MICROSCOPES OTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS - MICROSCOPES\nOTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS: OTHER", - "hsn_code": "90121090" - }, - { - "description": "MICROSCOPES OTHER THAN OPTICAL MICROSCOPES; DIFFRACTION APPARATUS PARTS AND\nACCESSORIES", - "hsn_code": "90129000" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - TELESCOPIC\nSIGHTS FOR FITTING TO ARMS; PERISCOPES; TELESCOPES DESIGNED TO FORM PARTS OF\nMACHINES, APPLIANCES, INSTRUMENTS OR APPARATUS OF THIS CHAPTER OR SECTION XVI:\nTELESCOPIC SIGHTS FOR FITTING TO ARMS", - "hsn_code": "90131010" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - TELESCOPIC\nSIGHTS FOR FITTING TO ARMS; PERISCOPES; TELESCOPES DESIGNED TO FORM PARTS OF\nMACHINES, APPLIANCES, INSTRUMENTS OR APPARATUS OF THIS CHAPTER OR SECTION XVI:\nPERISCOPES", - "hsn_code": "90131020" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - TELESCOPIC\nSIGHTS FOR FITTING TO ARMS; PERISCOPES; TELESCOPES DESIGNED TO FORM PARTS OF\nMACHINES, APPLIANCES, INSTRUMENTS OR APPARATUS OF THIS CHAPTER OR SECTION XVI:\nOTHER", - "hsn_code": "90131090" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER LASERS, OTHER\nTHAN LASER DIODES", - "hsn_code": "90132000" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - OTHER DEVICES,\nAPPLIANCES AND INSTRUMENTS: LIQUID CRYSTAL DEVICES (LCD)", - "hsn_code": "90138010" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - OTHER DEVICES,\nAPPLIANCES AND INSTRUMENTS: OTHER", - "hsn_code": "90138090" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - PARTS AND\nACCESSORIES: FOR LIQUID CRYSTAL DEVICES (LCD)", - "hsn_code": "90139010" - }, - { - "description": "LIQUID CRYSTAL DEVICES NOT CONSTITUTING ARTICLES PROVIDED FOR MORE SPECIFICALLY IN\nOTHER HEADINGS; LASERS, OTHER THAN LASER DIODES; OTHER OPTICAL APPLIANCES AND\nINSTRUMENTS, NOT SPECIFIED OR INCLUDED ELSE WHERE IN THIS CHAPTER - PARTS AND\nACCESSORIES: OTHER", - "hsn_code": "90139090" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES\nDIRECTION FINDING COMPASSES", - "hsn_code": "90141000" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES\nINSTRUMENTS AND APPLIANCES FOR AERONAUTICAL OR SPACE NAVIGATION (OTHER THAN\nCOMPASSES)", - "hsn_code": "90142000" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES -\nOTHER INSTRUMENTS AND APPLIANCES: ECHO SOUNDING INSTRUMENT", - "hsn_code": "90148010" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES -\nOTHER INSTRUMENTS AND APPLIANCES: SEXTANTS", - "hsn_code": "90148020" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES -\nOTHER INSTRUMENTS AND APPLIANCES: OTHER", - "hsn_code": "90148090" - }, - { - "description": "DIRECTION FINDING COMPASSES; OTHER NAVIGATIONAL INSTRUMENTS AND APPLIANCES\nPARTS AND ACCESSORIES", - "hsn_code": "90149000" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS RANGEFINDERS", - "hsn_code": "90151000" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS THEODOLITIES AND TACHYMETERS\n(TACHEOMETERS)", - "hsn_code": "90152000" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - LEVELS: DUMPY LEVELS OR ENGINEER'S\nLEVELS OR BUILDERS LEVELS (NOT AUTOMATIC) AND QUICK SET LEVELS WITH OR WITHOUT\nHORIZONTAL CIRCLES", - "hsn_code": "90153010" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - LEVELS: OTHER", - "hsn_code": "90153090" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS PHOTOGRAMMETRICAL SURVEYING\nINSTRUMENTS AND APPLIANCES", - "hsn_code": "90154000" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - OTHER INSTRUMENTS AND\nAPPLIANCES: HYDROGRAPHIC INSTRUMENTS", - "hsn_code": "90158010" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - OTHER INSTRUMENTS AND\nAPPLIANCES: METEOROLOGICAL INSTRUMENTS", - "hsn_code": "90158020" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - OTHER INSTRUMENTS AND\nAPPLIANCES: GEOPHYSICAL INSTRUMENTS", - "hsn_code": "90158030" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS - OTHER INSTRUMENTS AND\nAPPLIANCES: OTHER", - "hsn_code": "90158090" - }, - { - "description": "SURVEYING (INCLUDING PHOTOGRAMMETRICAL SURVEYING), HYDROGRAPHIC,\nOCEANOGRAPHIC, HYDROLOGICAL, METEOROLOGICAL OR GEOPHYSICAL INSTRUMENTS AND\nAPPLIANCES, EXCLUDING COMPASSES; RANGEFINDERS PARTS AND ACCESSORIES", - "hsn_code": "90159000" - }, - { - "description": "BALANCES OF A SENSITIVITY OF 5 CG OR BETTER, WITH OR WITHOUT WEIGHTS - BALANCES OF A\nSENSITIVITY OF 5CG OR BETTER, WITH OR WITHOUT WEIGHTS: ELECTRIC BALANCES", - "hsn_code": "90160010" - }, - { - "description": "BALANCES OF A SENSITIVITY OF 5 CG OR BETTER, WITH OR WITHOUT WEIGHTS - BALANCES OF A\nSENSITIVITY OF 5CG OR BETTER, WITH OR WITHOUT WEIGHTS: OTHER BALANCES", - "hsn_code": "90160020" - }, - { - "description": "BALANCES OF A SENSITIVITY OF 5 CG OR BETTER, WITH OR WITHOUT WEIGHTS - BALANCES OF A\nSENSITIVITY OF 5CG OR BETTER, WITH OR WITHOUT WEIGHTS: PARTS", - "hsn_code": "90160090" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER DRAFTING TABLES AND MACHINES, WHETHER OR NOT\nAUTOMATIC", - "hsn_code": "90171000" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER DRAWING, MARKING-OUT OR MATHEMATICAL\nCALCULATING INSTRUMENTS: DRAWING AND MARKING-OUT INSTRUMENTS", - "hsn_code": "90172010" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER DRAWING, MARKING-OUT OR MATHEMATICAL\nCALCULATING INSTRUMENTS: MATHEMATICAL CALCULATING INSTRUMENTS", - "hsn_code": "90172020" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER DRAWING, MARKING-OUT OR MATHEMATICAL\nCALCULATING INSTRUMENTS: PANTOGRAPH", - "hsn_code": "90172030" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER DRAWING, MARKING-OUT OR MATHEMATICAL\nCALCULATING INSTRUMENTS: OTHER", - "hsn_code": "90172090" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MICROMETERS, CALIPERS AND GAUGES: MICRO-METERS AND\nCALIPERS", - "hsn_code": "90173010" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MICROMETERS, CALIPERS AND GAUGES: - GAUGES: PLUG", - "hsn_code": "90173021" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MICROMETERS, CALIPERS AND GAUGES: - GAUGES: RING", - "hsn_code": "90173022" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MICROMETERS, CALIPERS AND GAUGES: - GAUGES: SLIP", - "hsn_code": "90173023" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - MICROMETERS, CALIPERS AND GAUGES: - GAUGES: OTHER", - "hsn_code": "90173029" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER INSTRUMENTS: MEASURING RODS AND TAPES AND\nDIVIDED SCALES", - "hsn_code": "90178010" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER - OTHER INSTRUMENTS: OTHER", - "hsn_code": "90178090" - }, - { - "description": "DRAWING, MARKING-OUT OR MATHEMATICAL CALCULATING INSTRUMENTS (FOR EXAMPLE,\nDRAFTING MACHINES, PANTOGRAPHS, PROTRACTORS, DRAWING SETS, SLIDE RULES, DISC\nCALCULATORS); INSTRUMENTS FOR MEASURING LENGTH, FOR USE IN THE HAND (FOR EXAMPLE,\nMEASURING RODS AND TAPES, MICROMETERS, CALLIPERS), NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER PARTS AND ACCESSORIES", - "hsn_code": "90179000" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS):\nELECTRO-CARDIOGRAPHS", - "hsn_code": "90181100" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS): -\nULTRASONIC SCANNING APPARATUS: LINEAR ULTRASOUND SCANNER", - "hsn_code": "90181210" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS): -\nULTRASONIC SCANNING APPARATUS: OTHER", - "hsn_code": "90181290" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS):\nMAGNETIC RESONANCE IMAGING APPARATUS", - "hsn_code": "90181300" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS):\nSCIENTIGRAPHIC APPARATUS", - "hsn_code": "90181400" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS): -\nOTHER: ELECTRO ENCEPHALOGRAPHS", - "hsn_code": "90181910" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS): -\nOTHER: ECHO CARDIOGRAPH", - "hsn_code": "90181920" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - ELECTRO-DIAGNOSTIC APPARATUS (INCLUDING APPARATUS FOR\nFUNCTIONAL EXPLORATORY EXAMINATIONS OR FOR CHECKING PHYSIOLOGICAL PARAMETERS): -\nOTHER: OTHER", - "hsn_code": "90181990" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS ULTRA-VIOLET OR INFRA-RED RAY APPARATUS", - "hsn_code": "90182000" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE:\nSYRINGES, WITH OR WITHOUT NEEDLES", - "hsn_code": "90183100" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nTUBULAR METAL NEEDLES AND NEEDLES FOR SUTURES: NEEDLES FOR SUTURE", - "hsn_code": "90183210" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nTUBULAR METAL NEEDLES AND NEEDLES FOR SUTURES: HOLLOW NEEDLES FOR INJECTION,\nASPIRATION, BIOPSY AND TRANSFUSION", - "hsn_code": "90183220" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nTUBULAR METAL NEEDLES AND NEEDLES FOR SUTURES: HILERIO VENUS FISTULA NEEDLES", - "hsn_code": "90183230" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nTUBULAR METAL NEEDLES AND NEEDLES FOR SUTURES: OTHER", - "hsn_code": "90183290" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nOTHER: CATHETERS (FOR URINE, STOOL)", - "hsn_code": "90183910" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nOTHER: CARDIAC CATHETERS", - "hsn_code": "90183920" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nOTHER: CANNULAE", - "hsn_code": "90183930" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - SYRINGES, NEEDLES, CATHETERS, CANNULAE AND THE LIKE: -\nOTHER: OTHER", - "hsn_code": "90183990" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES, USED IN DENTAL\nSCIENCES: DENTAL DRILL ENGINES, WHETHER OR NOT COMBINED ON A SINGLE BASE WITH\nOTHER DENTAL EQUIPMENT", - "hsn_code": "90184100" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES, USED IN DENTAL\nSCIENCES: OTHER", - "hsn_code": "90184900" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER OPHTHALMIC INSTRUMENTS AND APPLIANCES:\nOPHTHALMOSCOPES", - "hsn_code": "90185010" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER OPHTHALMIC INSTRUMENTS AND APPLIANCES:\nTONOMETERS", - "hsn_code": "90185020" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER OPHTHALMIC INSTRUMENTS AND APPLIANCES:\nOPHTHALMIC LASERS", - "hsn_code": "90185030" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER OPHTHALMIC INSTRUMENTS AND APPLIANCES: OTHER", - "hsn_code": "90185090" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - DIAGNOSTIC\nINSTRUMENTS AND APPARATUS: INSTRUMENT AND APPARATUS FOR MEASURING BLOOD\nPRESSURE", - "hsn_code": "90189011" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - DIAGNOSTIC\nINSTRUMENTS AND APPARATUS: STETHOSCOPES", - "hsn_code": "90189012" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - DIAGNOSTIC\nINSTRUMENTS AND APPARATUS: OTHER", - "hsn_code": "90189019" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nBONE SAWS, DRILLS AND TREPHINES", - "hsn_code": "90189021" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nKNIVES, SCISSORS AND BLADES", - "hsn_code": "90189022" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nFORCEPS, FORCEP CLAMPS, CLIPS, NEEDLE HOLDERS, INTRODUCERS, CEPHALOTRIBE BONE\nHOLDING AND OTHER HOLDING INSTRUMENTS", - "hsn_code": "90189023" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nCHISEL, GAUGES, ELEVATORS, RASPATONES, OSTEOTOME, CRANIOTOME, BONE CUTTERS", - "hsn_code": "90189024" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nRETRACTORS, SPATULAPROBES, HOOKS DIALATORS, SOUNDS, MALLETS", - "hsn_code": "90189025" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - SURGICAL TOOLS:\nOTHER", - "hsn_code": "90189029" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - RENAL DIALYSIS\nEQUIPMENT, BLOOD TRANSFUSION APPARATUS AND HAEMOFILTRATION INSTRUMENTS: RENAL\nDIALYSIS EQUIPMENT(ARTIFICIAL KIDNEYS, KIDNEY MACHINES AND DIALYSERS)", - "hsn_code": "90189031" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - RENAL DIALYSIS\nEQUIPMENT, BLOOD TRANSFUSION APPARATUS AND HAEMOFILTRATION INSTRUMENTS: BLOOD\nTRANFUSION APPARATUS", - "hsn_code": "90189032" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - RENAL DIALYSIS\nEQUIPMENT, BLOOD TRANSFUSION APPARATUS AND HAEMOFILTRATION INSTRUMENTS:\nHAEMOFILTRATION INSTRUMENTS", - "hsn_code": "90189033" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - ANESTHETIC\nAPPARATUS AND INSTRUMENTS, ENT PRECISION INSTRUMENTS, ACUPUNCTURE APPARATUS,\nAND ENDOSCOPES: ANESTHETIC APPARATUS AND INSTRUMENTS", - "hsn_code": "90189041" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - ANESTHETIC\nAPPARATUS AND INSTRUMENTS, ENT PRECISION INSTRUMENTS, ACUPUNCTURE APPARATUS,\nAND ENDOSCOPES: ENT PRECISION INSTRUMENTS", - "hsn_code": "90189042" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - ANESTHETIC\nAPPARATUS AND INSTRUMENTS, ENT PRECISION INSTRUMENTS, ACUPUNCTURE APPARATUS,\nAND ENDOSCOPES: ACUPUNCTURE APPARATUS", - "hsn_code": "90189043" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - ANESTHETIC\nAPPARATUS AND INSTRUMENTS, ENT PRECISION INSTRUMENTS, ACUPUNCTURE APPARATUS,\nAND ENDOSCOPES: ENDOSCOPES", - "hsn_code": "90189044" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: HILERIAL OR\nVENOUS SHUNTS", - "hsn_code": "90189091" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: BABY\nINCUBATORS", - "hsn_code": "90189092" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: HEART-LUNG\nMACHINES", - "hsn_code": "90189093" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER:\nDEFIBRILLATORS", - "hsn_code": "90189094" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: FIBRESCOPES", - "hsn_code": "90189095" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER:\nLAPROSCOPES", - "hsn_code": "90189096" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: VETRASONIC\nLITHOTRIPSY INSTRUMENTS", - "hsn_code": "90189097" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: APPARATUS\nFOR NERVE STIMULATION", - "hsn_code": "90189098" - }, - { - "description": "INSTRUMENTS AND APPLIANCES USED IN MEDICAL, SURGICAL, DENTAL OR VETERINARY\nSCIENCES, INCLUDING SCIENTIGRAPHIC APPARATUS, OTHER ELECTROMEDICAL APPARATUS AND\nSIGHT-TESTING INSTRUMENTS - OTHER INSTRUMENTS AND APPLIANCES: - OTHER: OTHER", - "hsn_code": "90189099" - }, - { - "description": "MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING\nAPPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION\nOR OTHER THERAPEUTIC RESPIRATION APPARATUS- MECHANO-THERAPY APPLIANCES;\nMASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING APPARATUS: MECHANO-THERAPY\nAPPLIANCES", - "hsn_code": "90191010" - }, - { - "description": "MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING\nAPPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION\nOR OTHER THERAPEUTIC RESPIRATION APPARATUS- MECHANO-THERAPY APPLIANCES;\nMASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING APPARATUS: MASSAGE APPARATUS", - "hsn_code": "90191020" - }, - { - "description": "MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING\nAPPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION\nOR OTHER THERAPEUTIC RESPIRATION APPARATUS- MECHANO-THERAPY APPLIANCES;\nMASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE-TESTING APPARATUS: OTHER", - "hsn_code": "90191090" - }, - { - "description": "20 MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE\nTESTING APPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL\nRESPIRATION OR OTHER THERAPEUTIC RESPIRATION APPARATUS- OZONE THERAPY, OXYGEN\nTHERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION OR OTHER THERAPEUTIC RESPIRATION\nAPPARATUS: OXYGEN THERAPY APPARATUS", - "hsn_code": "90192010" - }, - { - "description": "20 MECHANO-THERAPY APPLIANCES; MASSAGE APPARATUS; PSYCHOLOGICAL APTITUDE\nTESTING APPARATUS; OZONE THERAPY, OXYGEN THERAPY, AEROSOL THERAPY, ARTIFICIAL\nRESPIRATION OR OTHER THERAPEUTIC RESPIRATION APPARATUS- OZONE THERAPY, OXYGEN\nTHERAPY, AEROSOL THERAPY, ARTIFICIAL RESPIRATION OR OTHER THERAPEUTIC RESPIRATION\nAPPARATUS: OTHER", - "hsn_code": "90192090" - }, - { - "description": "OTHER BREATHING APPLIANCES AND GAS MASKS, EXCLUDING PROTECTIVE MASKS HAVING\nNEITHER MECHANICAL PARTS NOR REPLACEABLE FILTERS", - "hsn_code": "90200000" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY ORTHOPEAEDIC OR FRACTURE APPLIANCES", - "hsn_code": "90211000" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - ARTIFICIAL TEETH AND DENTAL FITTINGS: ARTIFICIAL TEETH", - "hsn_code": "90212100" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - ARTIFICIAL TEETH AND DENTAL FITTINGS: OTHER", - "hsn_code": "90212900" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY OTHER ARTIFICIAL PARTS OF THE BODY : ARTIFICIAL JOINTS", - "hsn_code": "90213100" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY OTHER ARTIFICIAL PARTS OF THE BODY : OTHER", - "hsn_code": "90213900" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - HEARING AIDS, EXCLUDING PARTS AND ACCESSORIES:\nFREQUENCY MODULATED HEARING AID SYSTEM USED FOR HEARING BY HANDICAPPED PERSONS\nIN GROUP SITUATION", - "hsn_code": "90214010" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - HEARING AIDS, EXCLUDING PARTS AND ACCESSORIES: OTHER", - "hsn_code": "90214090" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY PACEMAKERS FOR STIMULATING HEART MUSCLES, EXCLUDING\nPARTS AND ACCESSORIES", - "hsn_code": "90215000" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - OTHER: PARTS AND ACCESSORIES OF HEARING AIDS", - "hsn_code": "90219010" - }, - { - "description": "ORTHOPAEDIC APPLIANCES, INCLUDING CRUTCHES, SURGICAL BELTS AND TRUSSES; SPLINTS\nAND OTHER FRACTURE APPLIANCES; ARTIFICIAL PARTS OF THE BODY; HEARING AIDS AND OTHER\nAPPLIANCES WHICH ARE WORN OR CARRIED, OR IMPLANTED IN THE BODY, TO COMPENSATE\nFOR A DEFECT OR DISABILITY - OTHER: OTHER", - "hsn_code": "90219090" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: COMPUTED TOMOGRAPHY APPARATUS", - "hsn_code": "90221200" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: OTHER, FOR DENTAL USES", - "hsn_code": "90221300" - }, - { - "description": "14 APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: - OTHER, FOR MEDICAL, SURGICAL OR\nVETERINARY USES: X-RAY GENERATORS AND APPARATUS (NON-PORTABLE)", - "hsn_code": "90221410" - }, - { - "description": "14 APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: - OTHER, FOR MEDICAL, SURGICAL OR\nVETERINARY USES: PORTABLE X-RAY MACHINE", - "hsn_code": "90221420" - }, - { - "description": "14 APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: - OTHER, FOR MEDICAL, SURGICAL OR\nVETERINARY USES: OTHER", - "hsn_code": "90221490" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF X-RAYS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS: FOR OTHER USES", - "hsn_code": "90221900" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF ALPHA, BETA\nOR GAMMA RADIATION, WHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY\nUSES, INCLUDING RADIOGRAPHY OR RADIOTHERAPY APPARATUS: FOR MEDICAL, SURGICAL,\nDENTAL OR VETERINARY USES", - "hsn_code": "90222100" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - APPARATUS BASED ON THE USE OF ALPHA, BETA\nOR GAMMA RADIATION, WHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY\nUSES, INCLUDING RADIOGRAPHY OR RADIOTHERAPY APPARATUS: FOR OTHER USES", - "hsn_code": "90222900" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE X-RAY TUBES", - "hsn_code": "90223000" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - OTHER, INCLUDING PARTS AND ACCESSORIES: X\nRAY VALVES", - "hsn_code": "90229010" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - OTHER, INCLUDING PARTS AND ACCESSORIES:\nRADIATION GENERATION UNITS", - "hsn_code": "90229020" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - OTHER, INCLUDING PARTS AND ACCESSORIES:\nRADIATION BEAM DELIVERY UNITS", - "hsn_code": "90229030" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - OTHER, INCLUDING PARTS AND ACCESSORIES: X\nRAY EXAMINATION OR TREATMENT TABLE, CHAIRS AND THE LIKE", - "hsn_code": "90229040" - }, - { - "description": "APPARATUS BASED ON THE USE OF X-RAYS OR OF ALPHA, BETA OR GAMMA RADIATIONS,\nWHETHER OR NOT FOR MEDICAL, SURGICAL, DENTAL OR VETERINARY USES, INCLUDING\nRADIOGRAPHY OR RADIOTHERAPY APPARATUS, X-RAY TUBES AND OTHER X-RAY GENERATORS,\nHIGH TENSION GENERATORS, CONTROL PANELS AND DESKS, SCREENS, EXAMINATION OR\nTREATMENT TABLES, CHAIRS AND THE LIKE - OTHER, INCLUDING PARTS AND ACCESSORIES:\nOTHER", - "hsn_code": "90229090" - }, - { - "description": "INSTRUMENTS, APPARATUS AND MODELS, DESIGNED FOR DEMONSTRATIONAL PURPOSES (FOR\nEXAMPLE, IN EDUCATION OR EXHIBITIONS), UNSUITABLE FOR OTHER USES - INSTRUMENTS,\nAPPARATUS AND MODELS, DESIGNED FOR DEMONSTRATIONAL PURPOSES (FOR EXAMPLE, IN\nEDUCATION OR EXHIBITIONS), UNSUITABLE FOR OTHER USES: TEACHING AIDS", - "hsn_code": "90230010" - }, - { - "description": "INSTRUMENTS, APPARATUS AND MODELS, DESIGNED FOR DEMONSTRATIONAL PURPOSES (FOR\nEXAMPLE, IN EDUCATION OR EXHIBITIONS), UNSUITABLE FOR OTHER USES - INSTRUMENTS,\nAPPARATUS AND MODELS, DESIGNED FOR DEMONSTRATIONAL PURPOSES (FOR EXAMPLE, IN\nEDUCATION OR EXHIBITIONS), UNSUITABLE FOR OTHER USES: OTHER", - "hsn_code": "90230090" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY,\nELASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS,\nWOOD, TEXTILES, PAPER, PLASTICS) MACHINES AND APPLIANCES FOR TESTING METALS", - "hsn_code": "90241000" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY,\nELASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS,\nWOOD, TEXTILES, PAPER, PLASTICS) - OTHER MACHINES AND APPLIANCES: FOR TESTING\nTEXTILES, PAPER AND PAPERBOARD", - "hsn_code": "90248010" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY,\nELASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS,\nWOOD, TEXTILES, PAPER, PLASTICS) - OTHER MACHINES AND APPLIANCES: - OTHER: FOR\nTESTING HARDNESS", - "hsn_code": "90248091" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY,\nELASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS,\nWOOD, TEXTILES, PAPER, PLASTICS) - OTHER MACHINES AND APPLIANCES: - OTHER: OTHER", - "hsn_code": "90248099" - }, - { - "description": "MACHINES AND APPLIANCES FOR TESTING THE HARDNESS, STRENGTH, COMPRESSIBILITY,\nELASTICITY OR OTHER MECHANICAL PROPERTIES OF MATERIALS (FOR EXAMPLE, METALS,\nWOOD, TEXTILES, PAPER, PLASTICS) - OTHER MACHINES AND APPLIANCES: - OTHER: PARTS AND\nACCESSORIES", - "hsn_code": "90249000" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - THERMOMETERS AND PYROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS: - LIQUID-FILLED, FOR DIRECT READING: CLINICAL THERMOMETERS", - "hsn_code": "90251110" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - THERMOMETERS AND PYROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS: - LIQUID-FILLED, FOR DIRECT READING: OTHER", - "hsn_code": "90251190" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - THERMOMETERS AND PYROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS: - OTHER: DIGITAL THERMOMETERS", - "hsn_code": "90251910" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - THERMOMETERS AND PYROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS: - OTHER: PYROMETERS", - "hsn_code": "90251920" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - THERMOMETERS AND PYROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS: - OTHER: OTHER", - "hsn_code": "90251990" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - OTHER INSTRUMENTS: HYDROMETERS AND SIMILAR\nFLOATING INSTRUMENTS", - "hsn_code": "90258010" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - OTHER INSTRUMENTS: BAROMETERS, NOT COMBINED\nWITH OTHER INSTRUMENTS", - "hsn_code": "90258020" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - OTHER INSTRUMENTS: LACTOMETER", - "hsn_code": "90258030" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS - OTHER INSTRUMENTS: OTHER", - "hsn_code": "90258090" - }, - { - "description": "HYDROMETERS AND SIMILAR FLOATING INSTRUMENTS, THERMOMETERS, PYROMETERS,\nBAROMETERS, HYGROMETERS AND PSYCHROMETERS, RECORDING OR NOT, AND ANY\nCOMBINATION OF THESE INSTRUMENTS PARTS AND ACCESSORIES", - "hsn_code": "90259000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 - FOR MEASURING OR CHECKING THE FLOW OR LEVEL OF LIQUIDS: FLOW\nMETERS", - "hsn_code": "90261010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 - FOR MEASURING OR CHECKING THE FLOW OR LEVEL OF LIQUIDS: LEVEL\nGAUGES", - "hsn_code": "90261020" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 - FOR MEASURING OR CHECKING THE FLOW OR LEVEL OF LIQUIDS: OTHER", - "hsn_code": "90261090" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 FOR MEASURING OR CHECKING PRESSURE", - "hsn_code": "90262000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 - OTHER INSTRUMENTS OR APPARATUS: HEAT METERS", - "hsn_code": "90268010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 - OTHER INSTRUMENTS OR APPARATUS: OTHER", - "hsn_code": "90268090" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING THE FLOW, LEVEL, PRESSURE\nOR OTHER VARIABLES OF LIQUIDS OR GASES (FOR EXAMPLE, FLOW METERS, LEVEL GAUGES,\nMANOMETERS, HEAT METERS), EXCLUDING INSTRUMENTS AND APPARATUS OF HEADING 9014,\n9015, 9028 OR 9032 PARTS AND ACCESSORIES", - "hsn_code": "90269000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES GAS OR SMOKE ANALYSIS APPARATUS", - "hsn_code": "90271000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES CHROMATOGRAPHS AND ELECTROPHORESIS INSTRUMENTS", - "hsn_code": "90272000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - SPECTROMETERS, SPECTROPHOTOMETERS AND SPECTROGRAPHS USING\nOPTICAL RADIATIONS (UV, VISIBLE, IR): SPECTROMETERS", - "hsn_code": "90273010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - SPECTROMETERS, SPECTROPHOTOMETERS AND SPECTROGRAPHS USING\nOPTICAL RADIATIONS (UV, VISIBLE, IR): SPECTROPHOTOMETERS", - "hsn_code": "90273020" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - SPECTROMETERS, SPECTROPHOTOMETERS AND SPECTROGRAPHS USING\nOPTICAL RADIATIONS (UV, VISIBLE, IR): OTHER", - "hsn_code": "90273090" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES EXPOSURE METERS", - "hsn_code": "90274000" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS USING OPTICAL RADIATIONS (UV,\nVISIBLE, IR): PHOTOMETERS", - "hsn_code": "90275010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS USING OPTICAL RADIATIONS (UV,\nVISIBLE, IR): REFRACTOMETERS", - "hsn_code": "90275020" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS USING OPTICAL RADIATIONS (UV,\nVISIBLE, IR): POLARIMETERS", - "hsn_code": "90275030" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS USING OPTICAL RADIATIONS (UV,\nVISIBLE, IR): OTHER", - "hsn_code": "90275090" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS: VISCOMETERS", - "hsn_code": "90278010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS: CALORIMETERS", - "hsn_code": "90278020" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS: INSTRUMENTS AND APPARATUS FOR\nMEASURING THE SURFACE OR INTERFOCIAL TENSION OF LIQUIDS", - "hsn_code": "90278030" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS: NUCLEAR MAGNETIC RESONANCE\nINSTRUMENTS", - "hsn_code": "90278040" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - OTHER INSTRUMENTS AND APPARATUS: OTHER", - "hsn_code": "90278090" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - MICROTOMES; PARTS AND ACCESSORIES : MICROTOMES, INCLUDING PARTS\nAND ACCESSORIES THEREOF", - "hsn_code": "90279010" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - MICROTOMES; PARTS AND ACCESSORIES : PRINTED CIRCUIT ASSEMBLIES FOR\nTHE GOODS OF SUB-HEADING 9027 80", - "hsn_code": "90279020" - }, - { - "description": "INSTRUMENTS AND APPARATUS FOR PHYSICAL OR CHEMICAL ANALYSIS (FOR EXAMPLE,\nPOLARIMETERS, REFRACTOMETERS, SPECTROMETERS, GAS OR SMOKE ANALYSIS APPARATUS);\nINSTRUMENTS AND APPARATUS FOR MEASURING OR CHECKING VISCOSITY, POROSITY,\nEXPANSION, SURFACE TENSION OR THE LIKE; INSTRUMENTS AND APPARATUS FOR MEASURING\nOR CHECKING QUANTITIES OF HEAT, SOUND OR LIGHT (INCLUDING EXPOSURE METERS);\nMICROTOMES - MICROTOMES; PARTS AND ACCESSORIES : OTHER", - "hsn_code": "90279090" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR GAS METERS", - "hsn_code": "90281000" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR LIQUID METERS", - "hsn_code": "90282000" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR - ELECTRICITY METERS: FOR ALTERNATING CURRENT", - "hsn_code": "90283010" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR - ELECTRICITY METERS: OTHER", - "hsn_code": "90283090" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR - PARTS AND ACCESSORIES : FOR ELECTRICITY METERS", - "hsn_code": "90289010" - }, - { - "description": "GAS, LIQUID OR ELECTRICITY SUPPLY OR PRODUCTION METERS, INCLUDING CALIBRATING\nMETERS THEREFOR - PARTS AND ACCESSORIES : OTHER", - "hsn_code": "90289090" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS,\nMILEOMETERS, PEDOMETERS AND THE LIKE: TAXIMETERS", - "hsn_code": "90291010" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS,\nMILEOMETERS, PEDOMETERS AND THE LIKE: OTHER", - "hsn_code": "90291090" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - SPEED INDICATORS AND TACHOMETERS; STROBOSCOPES:\nTACHOMETERS, NON-ELECTRICAL", - "hsn_code": "90292010" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - SPEED INDICATORS AND TACHOMETERS; STROBOSCOPES:\nSPEEDOMETERS, NON-ELECTRICAL", - "hsn_code": "90292020" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - SPEED INDICATORS AND TACHOMETERS; STROBOSCOPES:\nSTROBOSCOPES", - "hsn_code": "90292030" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES - SPEED INDICATORS AND TACHOMETERS; STROBOSCOPES: OTHER", - "hsn_code": "90292090" - }, - { - "description": "REVOLUTION COUNTERS, PRODUCTION COUNTERS, TAXIMETERS, MILEOMETERS, PEDOMETERS\nAND THE LIKE; SPEED INDICATORS AND TACHOMETERS, OTHER THAN THOSE OF HEADING 9014\nOR 9015; STROBOSCOPES PARTS AND ACCESSORIES", - "hsn_code": "90299000" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS INSTRUMENTS AND APPARATUS FOR MEASURING OR\nDETECTING IONISING RADIATIONS", - "hsn_code": "90301000" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OSCILLOSCOPES AND OSCILLOGRAPHS", - "hsn_code": "90302000" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- MULTIMETERS\nWITHOUT A RECORDING DEVICE", - "hsn_code": "90303100" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- MULTIMETERS WITH\nA RECORDING DEVICE", - "hsn_code": "90303200" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:AMMETERS, VOLT METERS AND WATT METERS", - "hsn_code": "90303310" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:SPECTRUM RESISTANCE METERS", - "hsn_code": "90303320" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:CAPACITANCE METER", - "hsn_code": "90303330" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:FREQUENCY MEASURING APPARATUS", - "hsn_code": "90303340" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:MEGA METERS", - "hsn_code": "90303350" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITHOUT A\nRECORDING DEVICE:OTHER", - "hsn_code": "90303390" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER: -- OTHER, WITH A\nRECORDING DEVICE", - "hsn_code": "90303900" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: AMMETERS, VOLT METERS AND WATT METERS", - "hsn_code": "90303910" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: SPECTRUM RESISTANCE METERS", - "hsn_code": "90303920" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: CAPACITANCE METER", - "hsn_code": "90303930" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: FREQUENCY MEASURING APPARATUS", - "hsn_code": "90303940" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: MEGA METERS", - "hsn_code": "90303950" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS - OTHER INSTRUMENTS AND APPARATUS, FOR\nMEASURING OR CHECKING VOLTAGE, CURRENT, RESISTANCE OR POWER, WITHOUT A\nRECORDING DEVICE: - OTHER: OTHER", - "hsn_code": "90303990" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS OTHER INSTRUMENTS AND APPARATUS, SPECIALLY\nDESIGNED FOR TELECOMMUNICATIONS (FOR EXAMPLE, CROSS-TALK METERS, GAIN MEASURING\nINSTRUMENTS, DISTORTION FACTOR METERS, PSOPHOMETERS)", - "hsn_code": "90304000" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: FOR\nMEASURING OR CHECKING SEMICONDUCTOR WAFERS OR DEVICES", - "hsn_code": "90308200" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: OTHER,\nWITH A RECORDING DEVICE", - "hsn_code": "90308300" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: OTHER,\nWITH A RECORDING DEVICE", - "hsn_code": "90308400" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: - OTHER:\nSCINTILLATOR COUNTERS", - "hsn_code": "90308910" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: - OTHER:\nVECTROSCOPE", - "hsn_code": "90308920" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS- OTHER INSTRUMENTS AND APPARATUS: - OTHER:\nOTHER", - "hsn_code": "90308990" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS-PARTS AND ACCESSORIES:OF METERS AND COUNTERS", - "hsn_code": "90309010" - }, - { - "description": "OSCILLOSCOPES, SPECTRUM ANALYSERS AND OTHER INSTRUMENTS AND APPARATUS FOR\nMEASURING OR CHECKING ELECTRICAL QUANTITIES, EXCLUDING METERS OF HEADING 9028;\nINSTRUMENTS AND APPARATUS FOR MEASURING OR DETECTING ALPHA, BETA, GAMMA, X-RAY,\nCOSMIC OR OTHER IONISING RADIATIONS-PARTS AND ACCESSORIES: OTHER", - "hsn_code": "90309090" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS MACHINES FOR BALANCING\nMECHANICAL PARTS", - "hsn_code": "90311000" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS TEST BENCHES", - "hsn_code": "90312000" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS PROFILE PROJECTORS", - "hsn_code": "90313000" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS - OTHER OPTICAL INSTRUMENTS\nAND APPLIANCES: FOR INSPECTING SEMICONDUCTOR WAFERS, OR DEVICES OR FOR INSPECTING\nPHOTO-MASKS OR RETICLES USED IN MANUFACTURING SEMICONDUCTOR DEVICES", - "hsn_code": "90314100" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS - OTHER OPTICAL INSTRUMENTS\nAND APPLIANCES: OTHER", - "hsn_code": "90314900" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS OTHER INSTRUMENTS,\nAPPLIANCES AND MACHINES", - "hsn_code": "90318000" - }, - { - "description": "MEASURING OR CHECKING INSTRUMENTS, APPLIANCES AND MACHINES, NOT SPECIFIED OR\nINCLUDED ELSEWHERE IN THIS CHAPTER; PROFILE PROJECTORS PARTS AND ACCESSORIES", - "hsn_code": "90319000" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS 9032 10\nAUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - THERMOSTATS:\nFOR REFRIGERATING AND AIR-CONDITIONING APPLIANCES AND MACHINERY", - "hsn_code": "90321010" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS 9032 10\nAUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - THERMOSTATS:\nOTHER", - "hsn_code": "90321090" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - MANOSTATS:\nFOR REFRIGERATING AND AIR-CONDITIONING APPLIANCES AND MACHINERY", - "hsn_code": "90322010" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - MANOSTATS:\nOTHER", - "hsn_code": "90322090" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - OTHER\nINSTRUMENTS AND APPARATUS: HYDRAULIC OR PNEUMATIC", - "hsn_code": "90328100" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - OTHER\nINSTRUMENTS AND APPARATUS: - OTHER: ELECTRONIC AUTOMATIC REGULATORS", - "hsn_code": "90328910" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS - OTHER\nINSTRUMENTS AND APPARATUS: - OTHER: OTHER", - "hsn_code": "90328990" - }, - { - "description": "AUTOMATIC REGULATING OR CONTROLLING INSTRUMENTS AND APPARATUS PARTS AND\nACCESSORIES", - "hsn_code": "90329000" - }, - { - "description": "PARTS AND ACCESSORIES (NOT SPECIFIED OR INCLUDED ELSEWHERE IN THIS CHAPTER) FOR\nMACHINES, APPLIANCES, INSTRUMENTS OR APPARATUS OF CHAPTER 90", - "hsn_code": "90330000" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - WRIST-WATCHES,\nELECTRICALLY OPERATED WHETHER OR NOT INCORPORATING A STOP-WATCH FACILITY: WITH\nMECHANICAL DISPLAY ONLY", - "hsn_code": "91011100" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - WRIST-WATCHES,\nELECTRICALLY OPERATED WHETHER OR NOT INCORPORATING A STOP-WATCH FACILITY: WITH\nOPTO-ELECTRONIC DISPLAY ONLY", - "hsn_code": "91011200" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - WRIST-WATCHES,\nELECTRICALLY OPERATED WHETHER OR NOT INCORPORATING A STOP-WATCH FACILITY: OTHER", - "hsn_code": "91011900" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER WRIST\nWATCHES, WHETHER OR NOT INCORPORATING A STOP-WATCH FACILITY: WITH AUTOMATIC\nWINDING", - "hsn_code": "91012100" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER WRIST\nWATCHES, WHETHER OR NOT INCORPORATING A STOP-WATCH FACILITY: OTHER", - "hsn_code": "91012900" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : - ELECTRICALLY\nOPERATED: POCKET WATCHES", - "hsn_code": "91019110" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : - ELECTRICALLY\nOPERATED: STOP WATCHES", - "hsn_code": "91019120" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : - ELECTRICALLY\nOPERATED: OTHER", - "hsn_code": "91019190" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : OTHER:\nPOCKET WATCHES", - "hsn_code": "91019910" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : OTHER: STOP\nWATCHES", - "hsn_code": "91019920" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP-WATCHES, WITH\nCASE OF PRECIOUS METAL OR OF METAL CLAD WITH PRECIOUS METAL - OTHER : OTHER: OTHER", - "hsn_code": "91019990" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING 9101 - WRIST-WATCHES, ELECTRICALLY OPERATED, WHETHER OR NOT\nINCORPORATING A STOP-WATCH FACILITY: WITH MECHANICAL DISPLAY ONLY", - "hsn_code": "91021100" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING 9101 - WRIST-WATCHES, ELECTRICALLY OPERATED, WHETHER OR NOT\nINCORPORATING A STOP-WATCH FACILITY: WITH OPTO-ELECTRONIC DISPLAY ONLY", - "hsn_code": "91021200" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING 9101 - WRIST-WATCHES, ELECTRICALLY OPERATED, WHETHER OR NOT\nINCORPORATING A STOP-WATCH FACILITY: OTHER", - "hsn_code": "91021900" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING 9101- OTHER WRIST-WATCHES, WHETHER OR NOT INCORPORATING\nA STOP-WATCH FACILITY: WITH AUTOMATIC WINDING", - "hsn_code": "91022100" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING 9101- OTHER WRIST-WATCHES, WHETHER OR NOT INCORPORATING\nA STOP-WATCH FACILITY: OTHER", - "hsn_code": "91022900" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER: ELECTRICALLY OPERATED: POCKET WATCHES", - "hsn_code": "91029110" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER: ELECTRICALLY OPERATED: STOP WATCHES", - "hsn_code": "91029120" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER: ELECTRICALLY OPERATED: OTHER", - "hsn_code": "91029190" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER - OTHER: POCKET WATCHES", - "hsn_code": "91029910" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER - OTHER: STOP WATCHES", - "hsn_code": "91029920" - }, - { - "description": "WRIST-WATCHES, POCKET-WATCHES AND OTHER WATCHES, INCLUDING STOP WATCHES, OTHER\nTHAN THOSE OF HEADING - OTHER - OTHER: OTHER", - "hsn_code": "91029990" - }, - { - "description": "CLOCKS WITH WATCH MOVEMENTS, EXCLUDING CLOCKS OF HEADING 9104 - ELECTRICALLY\nOPERATED", - "hsn_code": "91031000" - }, - { - "description": "CLOCKS WITH WATCH MOVEMENTS, EXCLUDING CLOCKS OF HEADING 9104 - OTHER", - "hsn_code": "91039000" - }, - { - "description": "INSTRUMENT PANEL CLOCKS AND CLOCKS OF A SIMILAR TYPE FOR VEHICLES, AIRCRAFT,\nSPACECRAFT OR VESSELS", - "hsn_code": "91040000" - }, - { - "description": "other", - "hsn_code": "91051090" - }, - { - "description": "OTHER CLOCKS - ALARM CLOCKS: ELECTRICALLY OPERATED", - "hsn_code": "91051100" - }, - { - "description": "OTHER CLOCKS - ALARM CLOCKS: OTHER", - "hsn_code": "91051900" - }, - { - "description": "OTHER CLOCKS - WALL CLOCKS: ELECTRICALLY OPERATED", - "hsn_code": "91052100" - }, - { - "description": "OTHER CLOCKS - WALL CLOCKS: OTHER", - "hsn_code": "91052900" - }, - { - "description": "OTHER CLOCKS - OTHER: ELECTRICALLY OPERATED", - "hsn_code": "91059100" - }, - { - "description": "OTHER CLOCKS - OTHER: OTHER: TIME PIECES", - "hsn_code": "91059910" - }, - { - "description": "OTHER CLOCKS - OTHER: OTHER: OTHER", - "hsn_code": "91059990" - }, - { - "description": "TIME OF DAY RECORDING APPARATUS AND APPARATUS FOR MEASURING, RECORDING OR\nOTHERWISE INDICATING INTERVALS OF TIME, WITH CLOCK OR WATCH MOVEMENT OR WITH\nSYNCHRONOUS MOTOR (FOR EXAMPLE, TIME-REGISTERS, TIMERECORDERS) TIME-REGISTERS;\nTIME-RECORDERS", - "hsn_code": "91061000" - }, - { - "description": "TIME OF DAY RECORDING APPARATUS AND APPARATUS FOR MEASURING, RECORDING OR\nOTHERWISE INDICATING INTERVALS OF TIME, WITH CLOCK OR WATCH MOVEMENT OR WITH\nSYNCHRONOUS MOTOR (FOR EXAMPLE, TIME-REGISTERS, TIMERECORDERS) PARKING METERS", - "hsn_code": "91062000" - }, - { - "description": "TIME OF DAY RECORDING APPARATUS AND APPARATUS FOR MEASURING, RECORDING OR\nOTHERWISE INDICATING INTERVALS OF TIME, WITH CLOCK OR WATCH MOVEMENT OR WITH\nSYNCHRONOUS MOTOR (FOR EXAMPLE, TIME-REGISTERS, TIMERECORDERS) OTHER", - "hsn_code": "91069000" - }, - { - "description": "TIME SWITCHES WITH CLOCK OR WATCH MOVEMENT OR WITH SYNCHRONOUS MOTOR", - "hsn_code": "91070000" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED - ELECTRICALLY OPERATED: WITH\nMECHANICAL DISPLAY ONLY OR WITH A DEVICE TO WHICH A MECHANICAL DISPLAY CAN BE\nINCORPORATED", - "hsn_code": "91081100" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED - ELECTRICALLY OPERATED: WITH OPTO\nELECTRONIC DISPLAY ONLY", - "hsn_code": "91081200" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED - ELECTRICALLY OPERATED: OTHER", - "hsn_code": "91081900" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED WITH AUTOMATIC WINDING", - "hsn_code": "91082000" - }, - { - "description": "WATCH MOVEMENTS, COMPLETE AND ASSEMBLED OTHER", - "hsn_code": "91089000" - }, - { - "description": "of alarm clocks", - "hsn_code": "91091010" - }, - { - "description": "CLOCK MOVEMENTS, COMPLETE AND ASSEMBLED - ELECTRICALLY OPERATED ---OTHER", - "hsn_code": "91091090" - }, - { - "description": "CLOCK MOVEMENTS, COMPLETE AND ASSEMBLED - OTHER", - "hsn_code": "91099000" - }, - { - "description": "COMPLETE WATCH OR CLOCK MOVEMENTS, UNASSEMBLED OR PARTLY ASSEMBLED\n(MOVEMENT SETS); INCOMPLETE WATCH OR CLOCK MOVEMENTS, ASSEMBLED; ROUGH WATCH\nOR CLOCK MOVEMENTS - OF WATCHES: COMPLETE MOVEMENTS, UNASSEMBLED OR PARTLY\nASSEMBLED (MOVEMENT SETS)", - "hsn_code": "91101100" - }, - { - "description": "COMPLETE WATCH OR CLOCK MOVEMENTS, UNASSEMBLED OR PARTLY ASSEMBLED\n(MOVEMENT SETS); INCOMPLETE WATCH OR CLOCK MOVEMENTS, ASSEMBLED; ROUGH WATCH\nOR CLOCK MOVEMENTS - OF WATCHES: INCOMPLETE MOVEMENTS, ASSEMBLED", - "hsn_code": "91101200" - }, - { - "description": "COMPLETE WATCH OR CLOCK MOVEMENTS, UNASSEMBLED OR PARTLY ASSEMBLED\n(MOVEMENT SETS); INCOMPLETE WATCH OR CLOCK MOVEMENTS, ASSEMBLED; ROUGH WATCH\nOR CLOCK MOVEMENTS - OF WATCHES: ROUGH MOVEMENTS", - "hsn_code": "91101900" - }, - { - "description": "COMPLETE WATCH OR CLOCK MOVEMENTS, UNASSEMBLED OR PARTLY ASSEMBLED\n(MOVEMENT SETS); INCOMPLETE WATCH OR CLOCK MOVEMENTS, ASSEMBLED; ROUGH WATCH\nOR CLOCK MOVEMENTS - OTHER", - "hsn_code": "91109000" - }, - { - "description": "WATCH CASES AND PARTS THEREOF CASES OF PRECIOUS METAL OR OF METAL CLAD WITH\nPRECIOUS METAL", - "hsn_code": "91111000" - }, - { - "description": "WATCH CASES AND PARTS THEREOF CASES OF BASE METAL, WHETHER OR NOT GOLD- OR SILVER\nPLATED", - "hsn_code": "91112000" - }, - { - "description": "WATCH CASES AND PARTS THEREOF WATCH CASES AND PARTS THEREOF OTHER CASES", - "hsn_code": "91118000" - }, - { - "description": "PARTS", - "hsn_code": "91119000" - }, - { - "description": "CLOCK CASES AND CASES OF A SIMILAR TYPE FOR OTHER GOODS OF THIS CHAPTER, AND PARTS\nTHEREOF CASES", - "hsn_code": "91122000" - }, - { - "description": "CLOCK CASES AND CASES OF A SIMILAR TYPE FOR OTHER GOODS OF THIS CHAPTER, AND PARTS\nTHEREOF PARTS", - "hsn_code": "91129000" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF OF PRECIOUS\nMETAL OR OF METAL CLAD WITH PRECIOUS METAL", - "hsn_code": "91131000" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF OF BASE METAL,\nWHETHER OR NOT GOLD- OR SILVERPLATED:PARTS", - "hsn_code": "91132010" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF OF BASE METAL,\nWHETHER OR NOT GOLD- OR SILVERPLATED:OTHER", - "hsn_code": "91132090" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF - OTHER: PARTS", - "hsn_code": "91139010" - }, - { - "description": "WATCH STRAPS, WATCH BANDS AND WATCH BRACELETS, AND PARTS THEREOF - OTHER: OTHER", - "hsn_code": "91139090" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS SPRINGS, INCLUDING HAIR-SPRINGS:FOR WATCHES", - "hsn_code": "91141010" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS SPRINGS, INCLUDING HAIR-SPRINGS:FOR CLOCKS", - "hsn_code": "91141020" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS- DIALS:FOR WATCHES", - "hsn_code": "91143010" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS- DIALS:FOR CLOCKS", - "hsn_code": "91143020" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS- PLATES AND BRIDGES:FOR WATCHES", - "hsn_code": "91144010" - }, - { - "description": "OTHER CLOCK OR WATCH PARTS- PLATES AND BRIDGES:FOR CLOCKS", - "hsn_code": "91144020" - }, - { - "description": "JEWELS", - "hsn_code": "91149030" - }, - { - "description": "FOR WATCHES", - "hsn_code": "91149091" - }, - { - "description": "FOR CLOCKS", - "hsn_code": "91149092" - }, - { - "description": "PIANOS, INCLUDING AUTOMATIC PIANOS; HARPSI-CHORDS AND OTHER KEYBOARD STRINGED\nINSTRUMENTS Upright pianos", - "hsn_code": "92011000" - }, - { - "description": "PIANOS, INCLUDING AUTOMATIC PIANOS; HARPSI-CHORDS AND OTHER KEYBOARD STRINGED\nINSTRUMENTS Grand pianos", - "hsn_code": "92012000" - }, - { - "description": "PIANOS, INCLUDING AUTOMATIC PIANOS; HARPSI-CHORDS AND OTHER KEYBOARD STRINGED\nINSTRUMENTS Other", - "hsn_code": "92019000" - }, - { - "description": "OTHER STRING MUSICAL INSTRUMENTS (FOR EXAMPLE, GUITARS, VIOLINS, HARPS) Played with a\nbow", - "hsn_code": "92021000" - }, - { - "description": "OTHER STRING MUSICAL INSTRUMENTS (FOR EXAMPLE, GUITARS, VIOLINS, HARPS) Other", - "hsn_code": "92029000" - }, - { - "description": "KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR KEYBOARD INSTRUMENTS WITH FREE\nMETAL REEDS 9203 00? KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR KEYBOARD\nINSTRUMENTS WITH FREE METAL REEDS KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR\nKEYBOARD INSTRUMENTS WITH FREE METAL REEDS: HARMONIUMS AND SIMILAR KEY BOARD\nINSTRUMENTS WITH FREE METAL REEDS", - "hsn_code": "92030010" - }, - { - "description": "KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR KEYBOARD INSTRUMENTS WITH FREE\nMETAL REEDS 9203 00? KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR KEYBOARD\nINSTRUMENTS WITH FREE METAL REEDS KEYBOARD PIPE ORGANS; HARMONIUMS AND SIMILAR\nKEYBOARD INSTRUMENTS WITH FREE METAL REEDS: OTHER", - "hsn_code": "92030090" - }, - { - "description": "ACCORDIONS AND SIMILAR INSTRUMENTS; MOUTH ORGANS ACCORDIONS AND SIMILAR\nINSTRUMENTS", - "hsn_code": "92041000" - }, - { - "description": "ACCORDIONS AND SIMILAR INSTRUMENTS; MOUTH ORGANS MOUTH ORGANS", - "hsn_code": "92042000" - }, - { - "description": "OTHER WIND MUSICAL INSTRUMENTS (FOR EXAMPLE, CLARINETS, TRUMPETS, BAGPIPES) Brass\nwind instruments", - "hsn_code": "92051000" - }, - { - "description": "OTHER WIND MUSICAL INSTRUMENTS (FOR EXAMPLE, CLARINETS, TRUMPETS, BAGPIPES) -\nOther: Flutes", - "hsn_code": "92059010" - }, - { - "description": "OTHER WIND MUSICAL INSTRUMENTS (FOR EXAMPLE, CLARINETS, TRUMPETS, BAGPIPES) -\nOther: Clarinets", - "hsn_code": "92059020" - }, - { - "description": "OTHER WIND MUSICAL INSTRUMENTS (FOR EXAMPLE, CLARINETS, TRUMPETS, BAGPIPES) -\nOther: Other", - "hsn_code": "92059090" - }, - { - "description": "PERCUSSION MUSICAL INSTRUMENTS (FOR EXAMPLE, DRUMS, XYLOPHONES, CYMBOLS,\nCASTANETS, MARACAS)", - "hsn_code": "92060000" - }, - { - "description": "MUSICAL INSTRUMENTS, THE SOUND OF WHICH IS PRODUCED, OR MUST BE AMPLIFIED,\nELECTRICALLY (FOR EXAMPLE, ORGANS, GUITARS, ACCORDIONS)Keyboard instruments, other\nthan accordions", - "hsn_code": "92071000" - }, - { - "description": "MUSICAL INSTRUMENTS, THE SOUND OF WHICH IS PRODUCED, OR MUST BE AMPLIFIED,\nELECTRICALLY (FOR EXAMPLE, ORGANS, GUITARS, ACCORDIONS)Other", - "hsn_code": "92079000" - }, - { - "description": "MUSICAL BOXES, FAIRGROUND ORGANS, MECHANICAL STREET ORGANS, MECHANICAL SINGING\nBIRDS, MUSICAL SAWS AND OTHER MUSICAL INSTRUMENTS NOT FALLING WITHIN ANY OTHER\nHEADING OF THIS CHAPTER; DECOY CALLS OF ALL KINDS; WHISTLES, CALL HORNS AND OTHER\nMOUTH-BLOWN SOUND SIGNALLING INSTRUMENTS Musical boxes", - "hsn_code": "92081000" - }, - { - "description": "MUSICAL BOXES, FAIRGROUND ORGANS, MECHANICAL STREET ORGANS, MECHANICAL SINGING\nBIRDS, MUSICAL SAWS AND OTHER MUSICAL INSTRUMENTS NOT FALLING WITHIN ANY OTHER\nHEADING OF THIS CHAPTER; DECOY CALLS OF ALL KINDS; WHISTLES, CALL HORNS AND OTHER\nMOUTH-BLOWN SOUND SIGNALLING INSTRUMENTS OTHER", - "hsn_code": "92082000" - }, - { - "description": "MUSICAL BOXES, FAIRGROUND ORGANS, MECHANICAL STREET ORGANS, MECHANICAL SINGING\nBIRDS, MUSICAL SAWS AND OTHER MUSICAL INSTRUMENTS NOT FALLING WITHIN ANY OTHER\nHEADING OF THIS CHAPTER; DECOY CALLS OF ALL KINDS; WHISTLES, CALL HORNS AND OTHER\nMOUTH-BLOWN SOUND SIGNALLING INSTRUMENTS OTHER", - "hsn_code": "92089000" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDSMETRONOMES, TUNING FORKS\nAND PITCH PIPES", - "hsn_code": "92091000" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDSMECHANISMS FOR MUSICAL\nBOXES", - "hsn_code": "92092000" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDSMusical instrument strings", - "hsn_code": "92093000" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS- Other: Parts and accessories for\npianos", - "hsn_code": "92099100" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS- Other: Parts and accessories for\nthe musical instruments of heading 9202", - "hsn_code": "92099200" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS- OTHER: PARTS AND\nACCESSORIES FOR THE MUSICAL INSTRUMENTS OF HEADING 9203", - "hsn_code": "92099300" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS- Other: Parts and accessories for\nthe musical instruments of heading 9207", - "hsn_code": "92099400" - }, - { - "description": "PARTS (FOR EXAMPLE, MECHANISMS FOR MUSICAL BOXES) AND ACCESSORIES (FOR EXAMPLE,\nCARDS, DISCS AND ROLLS FOR MECHANICAL INSTRUMENTS) OF MUSICAL INSTRUMENTS;\nMETRONOMES, TUNING FORKS AND PITCH PIPES OF ALL KINDS- Other: Other", - "hsn_code": "92099900" - }, - { - "description": "SELF PROPELLED", - "hsn_code": "93011010" - }, - { - "description": "OTHER", - "hsn_code": "93011090" - }, - { - "description": "MILITARY WEAPONS, OTHER THAN REVOLVERS, PISTOLS AND THE ARMS OF HEADING 9307 -\nRocket launchers; flame-throwers; grenade launchers; torpedo tubes and similar projectors", - "hsn_code": "93012000" - }, - { - "description": "MILITARY WEAPONS, OTHER THAN REVOLVERS, PISTOLS AND THE ARMS OF HEADING 9307 -\nOther", - "hsn_code": "93019000" - }, - { - "description": "REVOLVERS AND PISTOLS, OTHER THAN THOSE OF HEADING 9303 OR 9304", - "hsn_code": "93020000" - }, - { - "description": "OTHER FIREARMS AND SIMILAR DEVICES WHICH OPERATE BY THE FIRING OF AN EXPLOSIVE\nCHARGE (FOR EXAMPLE, SPORTING SHOTGUNS AND RIFLES, MUZZLE-LOADING FIREARMS, VERY\nPISTOLS AND OTHER DEVICES DESIGNED TO PROJECT ONLY SIGNAL FLARES, PISTOLS AND\nREVOLVERS FOR FIRING BLANK AMMUNITION, CAPTIVE-BOLT HUMANE KILLERS, LINE\nTHROWING GUNS) Muzzle-loading firearms", - "hsn_code": "93031000" - }, - { - "description": "OTHER FIREARMS AND SIMILAR DEVICES WHICH OPERATE BY THE FIRING OF AN EXPLOSIVE\nCHARGE (FOR EXAMPLE, SPORTING SHOTGUNS AND RIFLES, MUZZLE-LOADING FIREARMS, VERY\nPISTOLS AND OTHER DEVICES DESIGNED TO PROJECT ONLY SIGNAL FLARES, PISTOLS AND\nREVOLVERS FOR FIRING BLANK AMMUNITION, CAPTIVE-BOLT HUMANE KILLERS, LINE\nTHROWING GUNS) Other sporting, hunting or target-shooting shotguns, including combination\nshotgun-rifles", - "hsn_code": "93032000" - }, - { - "description": "OTHER FIREARMS AND SIMILAR DEVICES WHICH OPERATE BY THE FIRING OF AN EXPLOSIVE\nCHARGE (FOR EXAMPLE, SPORTING SHOTGUNS AND RIFLES, MUZZLE-LOADING FIREARMS, VERY\nPISTOLS AND OTHER DEVICES DESIGNED TO PROJECT ONLY SIGNAL FLARES, PISTOLS AND\nREVOLVERS FOR FIRING BLANK AMMUNITION, CAPTIVE-BOLT HUMANE KILLERS, LINE\nTHROWING GUNS) Other sporting, hunting or target-shooting rifles", - "hsn_code": "93033000" - }, - { - "description": "OTHER FIREARMS AND SIMILAR DEVICES WHICH OPERATE BY THE FIRING OF AN EXPLOSIVE\nCHARGE (FOR EXAMPLE, SPORTING SHOTGUNS AND RIFLES, MUZZLE-LOADING FIREARMS, VERY\nPISTOLS AND OTHER DEVICES DESIGNED TO PROJECT ONLY SIGNAL FLARES, PISTOLS AND\nREVOLVERS FOR FIRING BLANK AMMUNITION, CAPTIVE-BOLT HUMANE KILLERS, LINE\nTHROWING GUNS) Other", - "hsn_code": "93039000" - }, - { - "description": "OTHER ARMS (FOR EXAMPLE, SPRING, AIR OR GAS GUNS AND PISTOLS, TRUNCHEONS),\nEXCLUDING THOSE OF HEADING 9307", - "hsn_code": "93040000" - }, - { - "description": "PARTS AND ACCESSORIES OF ARTICLES OF HEADINGS 9301 TO 9304 Of revolvers or pistols", - "hsn_code": "93051000" - }, - { - "description": "SHOTGUN BARRELS", - "hsn_code": "93052010" - }, - { - "description": "OTHER", - "hsn_code": "93052090" - }, - { - "description": "PARTS AND ACCESSORIES OF ARTICLES OF HEADINGS 9301 TO 9304 - Other : Of military weapons\nof heading 9301", - "hsn_code": "93059100" - }, - { - "description": "PARTS AND ACCESSORIES OF ARTICLES OF HEADINGS 9301 TO 9304 - Other : Other", - "hsn_code": "93059900" - }, - { - "description": "BOMBS , GRENADES, TORPEDOES, MINES, MISSILES, AND SIMILAR MUNITIONS OF WAR AND\nPARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS\nTHEREOF, INCLUDING SHOT AND CARTRIDGE WADS CARTRIDGES FOR RIVETING OR SIMILAR\nTOOLS OR FOR CAPTIVE-BOLT HUMANE KILLERS AND PARTS THEREOF", - "hsn_code": "93061000" - }, - { - "description": "BOMBS , GRENADES, TORPEDOES, MINES, MISSILES, AND SIMILAR MUNITIONS OF WAR AND\nPARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS\nTHEREOF, INCLUDING SHOT AND CARTRIDGE WADS - Shotgun cartridges and parts thereof; air\ngun pellets: Cartridges", - "hsn_code": "93062100" - }, - { - "description": "BOMBS , GRENADES, TORPEDOES, MINES, MISSILES, AND SIMILAR MUNITIONS OF WAR AND\nPARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS\nTHEREOF, INCLUDING SHOT AND CARTRIDGE WADS - Shotgun cartridges and parts thereof; air\ngun pellets: Other", - "hsn_code": "93062900" - }, - { - "description": "BOMBS , GRENADES, TORPEDOES, MINES, MISSILES, AND SIMILAR MUNITIONS OF WAR AND\nPARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS\nTHEREOF, INCLUDING SHOT AND CARTRIDGE WADS Other cartridges and parts thereof", - "hsn_code": "93063000" - }, - { - "description": "BOMBS , GRENADES, TORPEDOES, MINES, MISSILES, AND SIMILAR MUNITIONS OF WAR AND\nPARTS THEREOF; CARTRIDGES AND OTHER AMMUNITION AND PROJECTILES AND PARTS\nTHEREOF, INCLUDING SHOT AND CARTRIDGE WADS Other", - "hsn_code": "93069000" - }, - { - "description": "SWORDS, CUT LASSES, BAYONETS, LANCES AND SIMILAR ARMS AND PARTS THEREOF AND\nSCABBARDS AND SHEATHS THEREFOR", - "hsn_code": "93070000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Seats of a kind used for aircraft", - "hsn_code": "94011000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Seats of a kind used for motor vehicles", - "hsn_code": "94012000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Swivel seats and variable height adjustment", - "hsn_code": "94013000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Seats other than garden seats or camping equipment, convertible into\nbeds", - "hsn_code": "94014000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF SEATS OF CANE, OSIER, BAMBOO OR SIMILAR MATERIALS", - "hsn_code": "94015000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF -SEATS OF CANE, OSIER, BAMBOO OR SIMILAR MATERIALS: -- OF BAMBOO\nOR RATTAN", - "hsn_code": "94015100" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF - SEATS OF CANE, OSIER, BAMBOO OR SIMILAR MATERIALS: -- OTHER", - "hsn_code": "94015900" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF - Other seats, with wooden frames: Upholstered", - "hsn_code": "94016100" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF - Other seats, with wooden frames: Other", - "hsn_code": "94016900" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF - Other seats, with metal frames: Upholstered", - "hsn_code": "94017100" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF - Other seats, with metal frames: Other", - "hsn_code": "94017900" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Other seats", - "hsn_code": "94018000" - }, - { - "description": "SEATS (OTHER THAN THOSE OF HEADING 9402), WHETHER OR NOT CONVERTIBLE INTO BEDS,\nAND PARTS THEREOF Parts", - "hsn_code": "94019000" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES,\nEXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS' CHAIRS);\nBARBERS' CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND\nELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES - Dentists', barbers' or similar\nchairs and parts thereof: Dentists' chairs and parts thereof", - "hsn_code": "94021010" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES,\nEXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS' CHAIRS);\nBARBERS' CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND\nELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES - Dentists', barbers' or similar\nchairs and parts thereof: Other", - "hsn_code": "94021090" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES,\nEXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS' CHAIRS);\nBARBERS' CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND\nELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES- Other : Hospital beds with\nmechanical fittings", - "hsn_code": "94029010" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES,\nEXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS' CHAIRS);\nBARBERS' CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND\nELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES- Other : Parts", - "hsn_code": "94029020" - }, - { - "description": "MEDICAL, SURGICAL, DENTAL OR VETERINARY FURNITURE (FOR EXAMPLE, OPERATING TABLES,\nEXAMINATION TABLES, HOSPITAL BEDS WITH MECHANICAL FITTINGS, DENTISTS' CHAIRS);\nBARBERS' CHAIRS AND SIMILAR CHAIRS, HAVING ROTATING AS WELL AS BOTH RECLINING AND\nELEVATING MOVEMENTS; PARTS OF THE FOREGOING ARTICLES- Other : Other", - "hsn_code": "94029090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Metal furniture of a kind used in offices: Of steel", - "hsn_code": "94031010" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Metal furniture of a kind used in offices: Other", - "hsn_code": "94031090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Other metal furniture:Of steel", - "hsn_code": "94032010" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Other metal furniture:Other", - "hsn_code": "94032090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Wooden furniture of a kind used in\noffices:Cabinetware", - "hsn_code": "94033010" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Wooden furniture of a kind used in offices: Other", - "hsn_code": "94033090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - Wooden furniture of a kind used in the kitchen", - "hsn_code": "94034000" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - - Wooden furniture of a kind used in the bed room:\nBed stead", - "hsn_code": "94035010" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - - Wooden furniture of a kind used in the bed room:\nOther", - "hsn_code": "94035090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF -Other wooden furniture", - "hsn_code": "94036000" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF -Furniture of plastics", - "hsn_code": "94037000" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - FURNITURE OF OTHER MATERIALS, INCLUDING CANE,\nOSIER, BAMBOO OR SIMILAR MATERIALS: FURNITURE OF WICKER WORK OR BAMBOO", - "hsn_code": "94038010" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - FURNITURE OF OTHER MATERIALS, INCLUDING CANE,\nOSIER, BAMBOO OR SIMILAR MATERIALS: OTHER", - "hsn_code": "94038090" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - FURNITURE OF OTHER MATERIALS, INCLUDING CANE,\nOSIER, BAMBOO OR SIMILAR MATERIALS: OF BAMBOO OR RATTAN", - "hsn_code": "94038100" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF - FURNITURE OF OTHER MATERIALS, INCLUDING CANE,\nOSIER, BAMBOO OR SIMILAR MATERIALS: OTHER", - "hsn_code": "94038900" - }, - { - "description": "OTHER FURNITURE AND PARTS THEREOF -Parts", - "hsn_code": "94039000" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED Mattress supports", - "hsn_code": "94041000" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Mattresses: Of cellular rubber or plastics, whether or\nnot covered: Of rubber", - "hsn_code": "94042110" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Mattresses: Of cellular rubber or plastics, whether or\nnot covered: Of plastic", - "hsn_code": "94042190" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Mattresses: Of other materials: Spring interior", - "hsn_code": "94042910" - }, - { - "description": "MATTRESS SUPPORTS;ARTICLES OF BEDDING AND SIMILAR FURNISHING - OF RUBBERISED COIR\nWITH OR WITHOUT COMBINATION OF OTHER MATERIALS, WHETHER OR NOT WITH METALLIC\nSPRINGS", - "hsn_code": "94042920" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Mattresses: Of other materials: other", - "hsn_code": "94042990" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Sleeping bags: Filled with feathers or down", - "hsn_code": "94043010" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Sleeping bags: Other", - "hsn_code": "94043090" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Other : - Quilts: Filled with feathers or down", - "hsn_code": "94049011" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Other : - Quilts: Other", - "hsn_code": "94049019" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Other : - Other : Filled with feathers or down", - "hsn_code": "94049091" - }, - { - "description": "MATTRESS SUPPORTS; ARTICLES OF BEDDING AND SIMILAR FURNISHING (FOR EXAMPLE,\nMATTRESSES, QUILTS, EIDERDOWNS, CUSHIONS, POUFFES AND PILLOWS) FITTED WITH SPRINGS\nOR STUFFED OR INTERNALLY FITTED WITH ANY MATERIAL OR OF CELLULAR RUBBER OR\nPLASTICS, WHETHER OR NOT COVERED - Other : - Other : Other", - "hsn_code": "94049099" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Chandeliers and other electric ceiling or wall lighting\nfittings, excluding those of a kind used for lighting public open spaces or thorough fares: Hanging\nlamps, complete fittings", - "hsn_code": "94051010" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Chandeliers and other electric ceiling or wall lighting\nfittings, excluding those of a kind used for lighting public open spaces or thorough fares: Wall\nlamps", - "hsn_code": "94051020" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Chandeliers and other electric ceiling or wall lighting\nfittings, excluding those of a kind used for lighting public open spaces or thorough fares: Other", - "hsn_code": "94051090" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Electric table, desk, bedside or floor-standing lamps:\nTable lamps, complete fittings", - "hsn_code": "94052010" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Electric table, desk, bedside or floor-standing lamps:\nOther", - "hsn_code": "94052090" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDEDLighting sets of a kind used for Christmas trees", - "hsn_code": "94053000" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Other electric lamps and lighting fittings:\nSearchlights and sportlights", - "hsn_code": "94054010" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Other electric lamps and lighting fittings: Other", - "hsn_code": "94054090" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: Hurricane\nlanterns", - "hsn_code": "94055010" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: Miner's\nsafety lamps", - "hsn_code": "94055020" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: - Oil\npressure lamps: Kerosene pressure lanterns", - "hsn_code": "94055031" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: - Oil\npressure lamps: Other", - "hsn_code": "94055039" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: Solar\nlanterns or lamps", - "hsn_code": "94055040" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: - Other oil\nlamps: Metal", - "hsn_code": "94055051" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Non-electrical lamps and lighting fittings: - Other oil\nlamps: Other", - "hsn_code": "94055059" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Illuminated signs, illuminated name-plates and the\nlike : Of plastic", - "hsn_code": "94056010" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED- Illuminated signs, illuminated name-plates and the\nlike : Of other materials", - "hsn_code": "94056090" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Parts: Of glass", - "hsn_code": "94059100" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Parts: Of plastics", - "hsn_code": "94059200" - }, - { - "description": "LAMPS AND LIGHTING FITTINGS INCLUDING SEARCHLIGHTS AND SPOTLIGHTS AND PARTS\nTHEREOF, NOT ELSEWHERE SPECIFIED OR INCLUDED; ILLUMINATED SIGNS, ILLUMINATED NAME\nPLATES AND THE LIKE, HAVING A PERMANENTLY FIXED LIGHT SOURCE, AND PARTS THEREOF\nNOT ELSEWHERE SPECIFIED OR INCLUDED - Parts: Other", - "hsn_code": "94059900" - }, - { - "description": "PREFABRICATED BUILDINGS - Green houses: Green house-in ready to assemble sets", - "hsn_code": "94060011" - }, - { - "description": "PREFABRICATED BUILDINGS - Green houses: Other", - "hsn_code": "94060019" - }, - { - "description": "PREFABRICATED BUILDINGS - Other : Prefabricated housing material", - "hsn_code": "94060091" - }, - { - "description": "PREFABRICATED BUILDINGS - Other : Prefabricated construction for cold storage", - "hsn_code": "94060092" - }, - { - "description": "PREFABRICATED BUILDINGS - Other : Silos for storing ensilage", - "hsn_code": "94060093" - }, - { - "description": "PREFABRICATED BUILDINGS - Other : Other", - "hsn_code": "94060099" - }, - { - "description": "WHEELED TOYS DESIGNED TO BE RIDDEN BY CHILDREN (FOR EXAMPLE, TRICYCLES, SCOOTERS,\nPEDAL CARS); DOLLR CARRIAGES - WHEELED TOYS DESIGNED TO BE RIDDEN BY CHILDREN (FOR\nEXAMPLE, TRICYCLES, SCOOTERS, PEDAL CARS); DOLLR CARRIAGES: WHEEL TOYS DESIGNED TO\nBE RIDDEN BY CHILDREN; DOLLS CARRIAGES", - "hsn_code": "95010010" - }, - { - "description": "WHEELED TOYS DESIGNED TO BE RIDDEN BY CHILDREN (FOR EXAMPLE, TRICYCLES, SCOOTERS,\nPEDAL CARS); DOLLR CARRIAGES - WHEELED TOYS DESIGNED TO BE RIDDEN BY CHILDREN (FOR\nEXAMPLE, TRICYCLES, SCOOTERS, PEDAL CARS); DOLLR CARRIAGES: PARTS", - "hsn_code": "95010090" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: OF WOOD", - "hsn_code": "95021010" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: OF METAL", - "hsn_code": "95021020" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: OF PLASTICS", - "hsn_code": "95021030" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: OTHER", - "hsn_code": "95021090" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: - PARTS AND\nACCESSORIES: GARMENTS AND ACCESSORIES THEREFOR, FOOT-WEAR AND HEADGEAR", - "hsn_code": "95029100" - }, - { - "description": "DOLLS REPRESENTING ONLY HUMAN BEINGS - DOLLS, WHETHER OR NOT DRESSED: - PARTS AND\nACCESSORIES: OTHER", - "hsn_code": "95029900" - }, - { - "description": "TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR WHEELED TOYS; DOLLS CARRIAGES; DOLLS;\nOTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR\nWHEELED TOYS; DOLLS` CARRIAGES ; DOLLS` OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS\nAND SIMILAR RECREATIONAL MODELS, WORKING OR NOT; PUZZLES OF ALL KINDS --- OF WOOD", - "hsn_code": "95030010" - }, - { - "description": "TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR WHEELED TOYS; DOLLS CARRIAGES; DOLLS;\nOTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR\nWHEELED TOYS; DOLLS CARRIAGES; DOLLS; OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND\nSIMILAR RECREATIONAL MODELS, WORKING OR NOT; PUZZLES OF ALL KINDS --- OF METAL", - "hsn_code": "95030020" - }, - { - "description": "TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR WHEELED TOYS; DOLLS CARRIAGES; DOLLS;\nOTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR\nWHEELED TOYS; DOLLS CARRIAGES; DOLLS; OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND\nSIMILAR RECREATIONAL MODELS, WORKING OR NOT; PUZZLES OF ALL KINDS --- OF PLASTICS", - "hsn_code": "95030030" - }, - { - "description": "TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR WHEELED TOYS; DOLLS CARRIAGES; DOLLS;\nOTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS -TRICYCLES, SCOOTERS, PEDAL CARS AND SIMILAR\nWHEELED TOYS; DOLLS CARRIAGES; DOLLS; OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS\nAND SIMILAR RECREATIONAL MODELS, WORKING OR NOT; PUZZLES OF ALL KINDS --- OTHER", - "hsn_code": "95030090" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS ELECTRIC TRAINS, INCLUDING TRACKS, SIGNALS AND\nOTHER ACCESSORIES THEREFORE", - "hsn_code": "95031000" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (SCALE) MODELS AND SIMILAR RECREATIONAL MODELS, WORKING\nOR NOT; PUZZLES OF ALL KINDS REDUCED-SIZE (SCALE) MODEL ASSEMBLY KITS, WHETHER OR\nNOT WORKING MODELS, EXCLUDING THOSE OF SUB-HEADING 9503 10", - "hsn_code": "95032000" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS OTHER CONSTRUCTION SETS AND CONSTRUCTIONAL\nTOYS", - "hsn_code": "95033000" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOYS REPRESENTING ANIMALS OR NON-HUMAN\nCREATURES: STUFFED", - "hsn_code": "95034100" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (SCALE) MODELS AND SIMILAR RECREATIONAL MODELS, WORKING\nOR NOT; PUZZLES OF ALL KINDS - TOYS REPRESENTING ANIMALS OR NON-HUMAN CREATURES: -\nOTHER : OF WOOD", - "hsn_code": "95034910" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOYS REPRESENTING ANIMALS OR NON-HUMAN\nCREATURES: - OTHER : OF METAL", - "hsn_code": "95034920" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOYS REPRESENTING ANIMALS OR NON-HUMAN\nCREATURES: - OTHER : OF PLASTICS", - "hsn_code": "95034930" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOYS REPRESENTING ANIMALS OR NON-HUMAN\nCREATURES: - OTHER : OTHER", - "hsn_code": "95034990" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOY MUSICAL INSTRUMENTS AND APPARATUS:\nINSTRUMENTS AND APPARATUS", - "hsn_code": "95035010" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - TOY MUSICAL INSTRUMENTS AND APPARATUS:\nPARTS", - "hsn_code": "95035090" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - PUZZLES: OF WOOD", - "hsn_code": "95036010" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - PUZZLES: OTHER", - "hsn_code": "95036090" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER TOYS, PUT UP IN SETS OR OUTFITS : OF\nPLASTICS", - "hsn_code": "95037010" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER TOYS, PUT UP IN SETS OR OUTFITS : OTHER", - "hsn_code": "95037090" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER TOYS AND MODELS, INCORPORATING A\nMOTOR: TOYS AND MODELS", - "hsn_code": "95038010" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER TOYS AND MODELS, INCORPORATING A\nMOTOR: PARTS", - "hsn_code": "95038090" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER: TOY WEAPONS", - "hsn_code": "95039010" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER: OTHER TOYS", - "hsn_code": "95039020" - }, - { - "description": "OTHER TOYS; REDUCED-SIZE (*SCALE*) MODELS AND SIMILAR RECREATIONAL MODELS,\nWORKING OR NOT; PUZZLES OF ALL KINDS - OTHER: PARTS", - "hsn_code": "95039090" - }, - { - "description": "ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL\nTABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT- ARTICLES AND\nACCESSORIES FOR BILLIARDS OF ALL KINDS", - "hsn_code": "95042000" - }, - { - "description": "ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL\nTABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT - OTHER GAMES,\nOPERATED BY COINS, BANK NOTES, BANK CARDS, TOKENS OR BY OTHER MEANS OF PAYMENT,\nOTHER THAN BOWLING ALLEY EQUIPMENT", - "hsn_code": "95043000" - }, - { - "description": "ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL\nTABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT - PLAYING CARDS", - "hsn_code": "95044000" - }, - { - "description": "VIDEO GAME CONSOLES AND MACHINES OTHER THAN SUB-HEADING 9504 30", - "hsn_code": "95045000" - }, - { - "description": "ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL\nTABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT - Other : Chess set,\nall types", - "hsn_code": "95049010" - }, - { - "description": "CAROM BOARD, WITH OR WITHOUT COINS AND STRIKERS", - "hsn_code": "95049020" - }, - { - "description": "ARTICLES FOR FUNFAIR, TABLE OR PARLOUR GAMES, INCLUDING PINTABLES, BILLIARDS, SPECIAL\nTABLES FOR CASINO GAMES AND AUTOMATIC BOWLING ALLEY EQUIPMENT - Other : Other", - "hsn_code": "95049090" - }, - { - "description": "FESTIVE, CARNIVAL OR OTHER ENTERTAINMENT ARTICLES, INCLUDING CONJURING TRICKS AND\nNOVELTY JOKES - Articles for Christmas festivities", - "hsn_code": "95051000" - }, - { - "description": "FESTIVE, CARNIVAL OR OTHER ENTERTAINMENT ARTICLES, INCLUDING CONJURING TRICKS AND\nNOVELTY JOKES - Other : Magical equipments", - "hsn_code": "95059010" - }, - { - "description": "FESTIVE, CARNIVAL OR OTHER ENTERTAINMENT ARTICLES, INCLUDING CONJURING TRICKS AND\nNOVELTY JOKES - Other : Other", - "hsn_code": "95059090" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Snow-skis and other\nsnow-ski equipment : Skis", - "hsn_code": "95061100" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Snow-skis and other\nsnow-ski equipment : Ski-fastenings (ski-bindings)", - "hsn_code": "95061200" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Snow-skis and other\nsnow-ski equipment : Other", - "hsn_code": "95061900" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Water-skis, surf\nboards, sailboards and other water-sport equipment: Sailboards", - "hsn_code": "95062100" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Water-skis, surf\nboards, sailboards and other water-sport equipment: Other", - "hsn_code": "95062900" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Golf clubs and other\ngolf equipment: Clubs, complete", - "hsn_code": "95063100" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Golf clubs and other\ngolf equipment: Balls", - "hsn_code": "95063200" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Golf clubs and other\ngolf equipment: Other", - "hsn_code": "95063900" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS Articles and\nequipment for table-tennis", - "hsn_code": "95064000" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Tennis, badminton or\nsimilar rackets, whether or not strung: Lawn-tennis rackets, whether or not strung", - "hsn_code": "95065100" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Tennis, badminton or\nsimilar rackets, whether or not strung: - Other : Squash or racketball badminton rackets, whether\nor not strung", - "hsn_code": "95065910" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Tennis, badminton or\nsimilar rackets, whether or not strung: - Other : Other", - "hsn_code": "95065990" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: Lawn-tennis balls", - "hsn_code": "95066100" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Inflatable: Football", - "hsn_code": "95066210" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Inflatable: Volley ball", - "hsn_code": "95066220" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Inflatable: Basket ball", - "hsn_code": "95066230" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Inflatable: Other", - "hsn_code": "95066290" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Other : Hockey ball", - "hsn_code": "95066910" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Other : Cricket ball", - "hsn_code": "95066920" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Other : Golf ball", - "hsn_code": "95066930" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Other : Rugby ball", - "hsn_code": "95066940" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Balls, other than golf\nballs and table-tennis balls: - Other : Other", - "hsn_code": "95066990" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS Ice skates and roller\nskates, including skating boots with skates attached", - "hsn_code": "95067000" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Articles and\nequipment for general physical exercise, gymnastics or athletics: Boxing equipment", - "hsn_code": "95069110" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Articles and\nequipment for general physical exercise, gymnastics or athletics: Other", - "hsn_code": "95069190" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nBadminton shuttle cocks", - "hsn_code": "95069910" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other : Leg\npads and bats for cricket", - "hsn_code": "95069920" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nShoulder pads for football", - "hsn_code": "95069930" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nHockey sticks and blades", - "hsn_code": "95069940" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other : Polo\nsticks including blades, shafts and heads", - "hsn_code": "95069950" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nSports net", - "hsn_code": "95069960" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nTennis and badminton racket pressures", - "hsn_code": "95069970" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other : Shin\nguards and elbow or shoulders pads excluding those for football; waist, thigh and hip protective\nequipment", - "hsn_code": "95069980" - }, - { - "description": "ARTICLES AND EQUIPMENT FOR GENERAL PHYSICAL EXERCISE, GYMNASTICS, ATHLETICS, OTHER\nSPORTS (INCLUDING TABLETENNIS) OR OUT-DOOR GAMES, NOT SPECIFIED OR INCLUDED\nELSEWHERE IN THIS CHAPTER; SWIMMING POOLS AND PADDLING POOLS - Other : - Other :\nOther", - "hsn_code": "95069990" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY\nNETS AND SIMILAR NETS; DECOY BIRDS (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND\nSIMILAR HUNTING OR SHOOTING REQUISITES Fishing rods", - "hsn_code": "95071000" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY\nNETS AND SIMILAR NETS; DECOY BIRDS (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND\nSIMILAR HUNTING OR SHOOTING REQUISITES Fish-hooks, whether or not snelled", - "hsn_code": "95072000" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY\nNETS AND SIMILAR NETS; DECOY BIRDS (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND\nSIMILAR HUNTING OR SHOOTING REQUISITES Fishing reels", - "hsn_code": "95073000" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY\nNETS AND SIMILAR NETS; DECOY BIRDS (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND\nSIMILAR HUNTING OR SHOOTING REQUISITES - Other : Fish landing and butterfly nets", - "hsn_code": "95079010" - }, - { - "description": "FISHING RODS, FISH-HOOKS AND OTHER LINE FISHING TACKLE; FISH LANDING NETS, BUTTERFLY\nNETS AND SIMILAR NETS; DECOY BIRDS (OTHER THAN THOSE OF HEADING 9208 OR 9705) AND\nSIMILAR HUNTING OR SHOOTING REQUISITES - Other : Other", - "hsn_code": "95079090" - }, - { - "description": "ROUNDABOUTS, SWINGS, SHOOTING GALLERIES AND OTHER FAIRGROUND AMUSEMENTS;\nTRAVELLING CIRCUSES, TRAVELLING MENAGERIES AND TRAVELLING THEATRES Travelling\ncircuses and travelling menageries", - "hsn_code": "95081000" - }, - { - "description": "ROUNDABOUTS, SWINGS, SHOOTING GALLERIES AND OTHER FAIRGROUND AMUSEMENTS;\nTRAVELLING CIRCUSES, TRAVELLING MENAGERIES AND TRAVELLING THEATRES Other", - "hsn_code": "95089000" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) Worked ivory and articles of ivory", - "hsn_code": "96011000" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) - Other : Worked tortoise-shell and articles thereof", - "hsn_code": "96019010" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) - Other : Worked mother-of-pearl and articles thereof", - "hsn_code": "96019020" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) - Other : Worked bone (excluding whale bone) and articles thereof", - "hsn_code": "96019030" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) - Other : Worked horn, coral and other animal carving material and\narticles thereof", - "hsn_code": "96019040" - }, - { - "description": "WORKED IVORY, BONE, TORTOISE-SHELL, HORN, ANTLERS, CORAL, MOTHER-OF-PEARL AND\nOTHER ANIMAL CARVING MATERIAL, AND ARTICLES OF THESE MATERIALS (INCLUDING ARTICLES\nOBTAINED BY MOULDING) - Other : Other", - "hsn_code": "96019090" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS\nMOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS\nOR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE\nSPECIFIED OR INCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503)\nAND ARTICLES OF UNHARDENED GELATIN - Worked vegetable or mineral carving material and\narticles of these materials moulded or carved articles of wax, of stearin, of natural gums or\nnatural resins or of modelling pastes, and other moulded or carved articles, not elsewhere\nspecified or included; worked, unhardened gelatin (except gelatin of heading 3503) and articles\nof unhardened gelatin: Worked vegetable carving material and articles thereof", - "hsn_code": "96020010" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS\nMOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS\nOR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE\nSPECIFIED OR INCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503)\nAND ARTICLES OF UNHARDENED GELATIN - Worked vegetable or mineral carving material and\narticles of these materials moulded or carved articles of wax, of stearin, of natural gums or\nnatural resins or of modelling pastes, and other moulded or carved articles, not elsewhere\nspecified or included; worked, unhardened gelatin (except gelatin of heading 3503) and articles\nof unhardened gelatin: Moulded or carved articles of wax, stearin, natural gums and resins and\nother moulded or carved articles", - "hsn_code": "96020020" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS\nMOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS\nOR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE\nSPECIFIED OR INCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503)\nAND ARTICLES OF UNHARDENED GELATIN - Worked vegetable or mineral carving material and\narticles of these materials moulded or carved articles of wax, of stearin, of natural gums or\nnatural resins or of modelling pastes, and other moulded or carved articles, not elsewhere\nspecified or included; worked, unhardened gelatin (except gelatin of heading 3503) and articles\nof unhardened gelatin: Gelatin capsules, empty", - "hsn_code": "96020030" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS\nMOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS\nOR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE\nSPECIFIED OR INCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503)\nAND ARTICLES OF UNHARDENED GELATIN - Worked vegetable or mineral carving material and\narticles of these materials moulded or carved articles of wax, of stearin, of natural gums or\nnatural resins or of modelling pastes, and other moulded or carved articles, not elsewhere\nspecified or included; worked, unhardened gelatin (except gelatin of heading 3503) and articles\nof unhardened gelatin: Other articles of unhardened gelatin", - "hsn_code": "96020040" - }, - { - "description": "WORKED VEGETABLE OR MINERAL CARVING MATERIAL AND ARTICLES OF THESE MATERIALS\nMOULDED OR CARVED ARTICLES OF WAX, OF STEARIN, OF NATURAL GUMS OR NATURAL RESINS\nOR OF MODELLING PASTES, AND OTHER MOULDED OR CARVED ARTICLES, NOT ELSEWHERE\nSPECIFIED OR INCLUDED; WORKED, UNHARDENED GELATIN (EXCEPT GELATIN OF HEADING 3503)\nAND ARTICLES OF UNHARDENED GELATIN - Worked vegetable or mineral carving material and\narticles of these materials moulded or carved articles of wax, of stearin, of natural gums or\nnatural resins or of modelling pastes, and other moulded or carved articles, not elsewhere\nspecified or included; worked, unhardened gelatin (except gelatin of heading 3503) and articles\nof unhardened gelatin: Other", - "hsn_code": "96020090" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) Brooms and brushes, consisting\nof twigs or other vegetable materials, bound together, with or without handles", - "hsn_code": "96031000" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Tooth brushes, shaving brushes,\nhair brushes, nail brushes, eyelash brushes and other toilet brushes for use on the person,\nincluding such brushes constituting parts of appliances: Tooth brushes including dental-plate\nbrushes", - "hsn_code": "96032100" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Tooth brushes, shaving brushes,\nhair brushes, nail brushes, eyelash brushes and other toilet brushes for use on the person,\nincluding such brushes constituting parts of appliances: Other", - "hsn_code": "96032900" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Artists' brushes, writing brushes\nand similar brushes for the application of cosmetics: Artist brushes", - "hsn_code": "96033010" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Artists' brushes, writing brushes\nand similar brushes for the application of cosmetics: Brushes for the application of cosmetics", - "hsn_code": "96033020" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Artists' brushes, writing brushes\nand similar brushes for the application of cosmetics: Other", - "hsn_code": "96033090" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Paint, distemper, varnish or\nsimilar brushes (other than brushes of sub-heading 9603 30); paint pads and rollers:Paint,\ndistemper, varnish or similar brushes (other than brushes of sub-heading 9603 30);", - "hsn_code": "96034010" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) - Paint, distemper, varnish or\nsimilar brushes (other than brushes of sub-heading 9603 30); paint pads and rollers:Paint pads\nand rollers", - "hsn_code": "96034020" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) Other brushes constituting parts\nof machines, appliances or vehicles", - "hsn_code": "96035000" - }, - { - "description": "BROOMS, BRUSHES (INCLUDING BRUSHES CONSTITUTING PARTS OF MACHINES, APPLIANCES OR\nVEHICLES), HAND-OPERATED MECHANICAL FLOOR SWEEPERS, NOT MOTORISED, MOPS AND\nFEATHER DUSTERS; PREPARED KNOTS AND TUFTS FOR BROOM OR BRUSH MAKING; PAINT PADS\nAND ROLLERS; SQUEEGEES (OTHER THAN ROLLER SQUEEGEES) Other", - "hsn_code": "96039000" - }, - { - "description": "HAND SIEVES AND HAND RIDDLES", - "hsn_code": "96040000" - }, - { - "description": "TRAVEL SETS FOR PERSONAL TOILET, SEWING OR SHOE OR CLOTHES CLEANING - Travel sets for\npersonal toilet, sewing or shoe or clothes cleaning : For personal toilet", - "hsn_code": "96050010" - }, - { - "description": "TRAVEL SETS FOR PERSONAL TOILET, SEWING OR SHOE OR CLOTHES CLEANING - Travel sets for\npersonal toilet, sewing or shoe or clothes cleaning : Other", - "hsn_code": "96050090" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Press-fasteners, snap-fasteners and press\nstuds and parts thereof : Press-fasteners, snap-fasteners and press-studs", - "hsn_code": "96061010" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Press-fasteners, snap-fasteners and press\nstuds and parts thereof : Parts", - "hsn_code": "96061020" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Buttons : Of plastics, not covered with\ntextile material", - "hsn_code": "96062100" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Buttons : Of base metals, not covered with\ntextile material", - "hsn_code": "96062200" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Buttons : - Other : Button of coconut shell\nor wood", - "hsn_code": "96062910" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Buttons : - Other : Other", - "hsn_code": "96062990" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Button moulds and other parts of buttons;\nbutton blanks : Button blanks", - "hsn_code": "96063010" - }, - { - "description": "BUTTONS, PRESS-FASTENERS, SNAP-FASTENERS AND PRESSSTUDS, BUTTON MOULDS AND\nOTHER PARTS OF THESE ARTICLES; BUTTON BLANKS - Button moulds and other parts of buttons;\nbutton blanks : Other", - "hsn_code": "96063090" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF - Slide fasteners : - Fitted with chain scoops of base metal\n: Zip fasteners", - "hsn_code": "96071110" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF - Slide fasteners : - Fitted with chain scoops of base metal\n: Other", - "hsn_code": "96071190" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF - Slide fasteners : - Other : Zip fasteners", - "hsn_code": "96071910" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF - Slide fasteners : - Other : Other", - "hsn_code": "96071990" - }, - { - "description": "SLIDE FASTENERS AND PARTS THEREOF Parts", - "hsn_code": "96072000" - }, - { - "description": "HIGH VALU BALL POINT PENS", - "hsn_code": "96081011" - }, - { - "description": "BALL POINT PENS With body or cap of precious metal or rolled precious metal", - "hsn_code": "96081012" - }, - { - "description": "OTHER", - "hsn_code": "96081019" - }, - { - "description": "HIGH VALU BALL POINT PENS", - "hsn_code": "96081091" - }, - { - "description": "BALL POINT PENS With body or cap of precious metal or rolled precious metal", - "hsn_code": "96081092" - }, - { - "description": "other", - "hsn_code": "96081099" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 Felt tipped and\nother porous-tipped pens and markers", - "hsn_code": "96082000" - }, - { - "description": "HIGH VALUE FOUNTAIN PENS", - "hsn_code": "96083011" - }, - { - "description": "With body or cap of precious metal or rolled precious metal", - "hsn_code": "96083012" - }, - { - "description": "OTHER", - "hsn_code": "96083019" - }, - { - "description": "HIGH VALUE PENS", - "hsn_code": "96083021" - }, - { - "description": "With body or cap of precious metal or rolled precious metal", - "hsn_code": "96083022" - }, - { - "description": "OTHER", - "hsn_code": "96083029" - }, - { - "description": "HIGH VALUE PENS", - "hsn_code": "96083091" - }, - { - "description": "With body or cap of precious metal or rolled precious metal", - "hsn_code": "96083092" - }, - { - "description": "OTHER", - "hsn_code": "96083099" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 Propelling or\nsliding pencils", - "hsn_code": "96084000" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 Sets of articles\nfrom two or more of the foregoing sub-headings", - "hsn_code": "96085000" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : With liquid ink (for rolling ball-pen)", - "hsn_code": "96086010" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : Other", - "hsn_code": "96086090" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Pen nibs and nib points : Nib\npoints for pen", - "hsn_code": "96089110" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Pen nibs and nib points : Nibs\nof wool felt or plastics for use in the manufacture of porous tip pen or markers", - "hsn_code": "96089120" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Pen nibs and nib points :\nOther pen nibs", - "hsn_code": "96089130" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Pen nibs and nib points : -\nOther : Of metal", - "hsn_code": "96089191" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Pen nibs and nib points : -\nOther : Other", - "hsn_code": "96089199" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Other : Pen holders, pencil\nholders and similar holders", - "hsn_code": "96089910" - }, - { - "description": "BALL POINT PENS; FELT TIPPED AND OTHER POROUS-TIPPED PENS AND MARKERS; FOUNTAIN\nPENS; STYLOGRAPH PENS AND OTHER PENS; DUPLICATING STYLOS; PROPELLING OR SLIDING\nPENCILS; PEN HOLDERS, PENCIL HOLDERS AND SIMILAR HOLDERS; PARTS (INCLUDING CAPS AND\nCLIPS) OF THE FOREGOING ARTICLES, OTHER THAN THOSE OF HEADING 9609 - Refills for ball\npoint pens, comprising the ball point and ink-reservoir : - Other : - Other : Other", - "hsn_code": "96089990" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Pencils and\ncrayons, with leads encased in a rigid sheath", - "hsn_code": "96091000" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Pencil leads,\nblack or coloured", - "hsn_code": "96092000" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Other : Slate\npencils", - "hsn_code": "96099010" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Other : Other\npencils", - "hsn_code": "96099020" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Other : Pastels,\ndrawing charcoals and writing or drawing chalks and tailors chalks", - "hsn_code": "96099030" - }, - { - "description": "PENCILS (OTHER THAN PENCILS OF HEADING 9608 ), CRAYONS, PENCIL LEADS, PASTELS,\nDRAWING CHARCOALS, WRITING OR DRAWING CHALKS AND TAILORS' CHALKS - Other : Other", - "hsn_code": "96099090" - }, - { - "description": "SLATES AND BOARDS, WITH WRITING OR DRAWING SURFACES, WHETHER OR NOT FRAMED", - "hsn_code": "96100000" - }, - { - "description": "DATE, SEALING OR NUMBERING STAMPS, AND THE LIKE (INCLUDING DEVICES FOR PRINTING OR\nEMBOSSING LABELS), DESIGNED FOR OPERATING IN THE HAND; HAND-OPERATED COMPOSING\nSTICKS AND HAND PRINTING SETS INCORPORATING SUCH COMPOSING STICKS", - "hsn_code": "96110000" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHERWISE PREPARED FOR GIVING IMPRESSIONS,\nWHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH\nOR WITHOUT BOXES - Ribbons: Computer printer ribbon", - "hsn_code": "96121010" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHERWISE PREPARED FOR GIVING IMPRESSIONS,\nWHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH\nOR WITHOUT BOXES - Ribbons: Ribbon for typewriters, other than electronic and similar\nmachines", - "hsn_code": "96121020" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHERWISE PREPARED FOR GIVING IMPRESSIONS,\nWHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH\nOR WITHOUT BOXES - Ribbons: Ribbon for electronic typewriter", - "hsn_code": "96121030" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHERWISE PREPARED FOR GIVING IMPRESSIONS,\nWHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH\nOR WITHOUT BOXES - Ribbons: Other", - "hsn_code": "96121090" - }, - { - "description": "TYPEWRITER OR SIMILAR RIBBONS, INKED OR OTHERWISE PREPARED FOR GIVING IMPRESSIONS,\nWHETHER OR NOT ON SPOOLS OR IN CARTRIDGES; INK-PADS, WHETHER OR NOT INKED, WITH\nOR WITHOUT BOXES - Ink-pads", - "hsn_code": "96122000" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL,\nAND PARTS THEREOF OTHER THAN FLINTS AND WICKS - Pocket lighters, gas fuelled, non\nrefillable", - "hsn_code": "96131000" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL,\nAND PARTS THEREOF OTHER THAN FLINTS AND WICKS - Pocket lighters, gas fuelled, refillable", - "hsn_code": "96132000" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL,\nAND PARTS THEREOF OTHER THAN FLINTS AND WICKS - Other lighters:Electronic", - "hsn_code": "96138010" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL,\nAND PARTS THEREOF OTHER THAN FLINTS AND WICKS - Other lighters:Other", - "hsn_code": "96138090" - }, - { - "description": "CIGARETTE LIGHTERS AND OTHER LIGHTERS, WHETHER OR NOT MECHANICAL OR ELECTRICAL,\nAND PARTS THEREOF OTHER THAN FLINTS AND WICKS - Parts", - "hsn_code": "96139000" - }, - { - "description": "SMOKING PIPES (INCLUDING PIPE BOWLS) AND CIGAR OR CIGARETTE HOLDERS, AND PARTS\nTHEREOF", - "hsn_code": "96140000" - }, - { - "description": "SMOKING PIPES (INCLUDING PIPE BOWLS) AND CIGAR OR CIGARETTE HOLDERS, AND PARTS\nTHEREOF PIPES AND PIPE BOWLS", - "hsn_code": "96142000" - }, - { - "description": "SMOKING PIPES (INCLUDING PIPE BOWLS) AND CIGAR OR CIGARETTE HOLDERS, AND PARTS\nTHEREOF - OTHER : HUBLE AND BUBLE OF BASE METAL", - "hsn_code": "96149010" - }, - { - "description": "SMOKING PIPES (INCLUDING PIPE BOWLS) AND CIGAR OR CIGARETTE HOLDERS, AND PARTS\nTHEREOF - Other : Hookah of coconut shell", - "hsn_code": "96149020" - }, - { - "description": "SMOKING PIPES (INCLUDING PIPE BOWLS) AND CIGAR OR CIGARETTE HOLDERS, AND PARTS\nTHEREOF - OTHER : OTHER", - "hsn_code": "96149090" - }, - { - "description": "COMBS, HAIR-SLIDES AND THE LIKE, HAIRPINS, CURLING PINS, CURLING GRIPS, HAIR-CURLERS\nAND THE LIKE, OTHER THAN THOSE OF HEADING 8516, AND PARTS THEREOF - Combs, hair-slides\nand the like: Of hard rubber or plastics", - "hsn_code": "96151100" - }, - { - "description": "COMBS, HAIR-SLIDES AND THE LIKE, HAIRPINS, CURLING PINS, CURLING GRIPS, HAIR-CURLERS\nAND THE LIKE, OTHER THAN THOSE OF HEADING 8516, AND PARTS THEREOF - Combs, hair-slides\nand the like: Other", - "hsn_code": "96151900" - }, - { - "description": "COMBS, HAIR-SLIDES AND THE LIKE, HAIRPINS, CURLING PINS, CURLING GRIPS, HAIR-CURLERS\nAND THE LIKE, OTHER THAN THOSE OF HEADING 8516, AND PARTS THEREOF Other", - "hsn_code": "96159000" - }, - { - "description": "SCENT SPRAYS AND SIMILAR TOILET SPRAYS, AND MOUNTS AND HEADS THEREFOR; POWDER\nPUFFS AND PADS FOR THE APPLICATION OF COSMETICS OR TOILET PREPARATIONS - Scent sprays\nand similar toilet sprays, and mounts and heads therefor : Scent sprays and similar toilet sprays", - "hsn_code": "96161010" - }, - { - "description": "SCENT SPRAYS AND SIMILAR TOILET SPRAYS, AND MOUNTS AND HEADS THEREFOR; POWDER\nPUFFS AND PADS FOR THE APPLICATION OF COSMETICS OR TOILET PREPARATIONS - Scent sprays\nand similar toilet sprays, and mounts and heads therefor : Mounts and heads", - "hsn_code": "96161020" - }, - { - "description": "SCENT SPRAYS AND SIMILAR TOILET SPRAYS, AND MOUNTS AND HEADS THEREFOR; POWDER\nPUFFS AND PADS FOR THE APPLICATION OF COSMETICS OR TOILET PREPARATIONS Powder-puffs\nand pads for the application of cosmetics or toilet preparations", - "hsn_code": "96162000" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF\nOTHER THAN GLASS INNERS - Vacuum flasks and other vacuum vessels, complete with cases;\nparts thereof other than glass inners: - Vacuum flasks and other vacuum vessels, complete with\ncase: Vacuum flasks having a capacity not exceeding 0.75 l", - "hsn_code": "96170011" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF\nOTHER THAN GLASS INNERS - Vacuum flasks and other vacuum vessels, complete with cases;\nparts thereof other than glass inners: - Vacuum flasks and other vacuum vessels, complete with\ncase: Vacuum flasks having a capacity exceeding 0.75 l", - "hsn_code": "96170012" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF\nOTHER THAN GLASS INNERS - Vacuum flasks and other vacuum vessels, complete with cases;\nparts thereof other than glass inners: - Vacuum flasks and other vacuum vessels, complete with\ncase: Casserol and other vacuum containers", - "hsn_code": "96170013" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF\nOTHER THAN GLASS INNERS - Vacuum flasks and other vacuum vessels, complete with cases;\nparts thereof other than glass inners: - Vacuum flasks and other vacuum vessels, complete with\ncase: Other", - "hsn_code": "96170019" - }, - { - "description": "VACUUM FLASKS AND OTHER VACUUM VESSELS, COMPLETE WITH CASES; PARTS THEREOF\nOTHER THAN GLASS INNERS - Vacuum flasks and other vacuum vessels, complete with cases;\nparts thereof other than glass inners: Parts (other than glass inners)", - "hsn_code": "96170090" - }, - { - "description": "TAILORS' DUMMIES AND OTHER LAY FIGURES; AUTOMATA AND OTHER ANIMATED DISPLAYS,\nUSED FOR SHOP WINDOW DRESSING", - "hsn_code": "96180000" - }, - { - "description": "sanitary towels 9pads) or sanitary napkins", - "hsn_code": "96190010" - }, - { - "description": "TAMPONS", - "hsn_code": "96190020" - }, - { - "description": "NAPKINS AND NAPKIN LINERS FOR BABIES", - "hsn_code": "96190030" - }, - { - "description": "CLINICAL DIAPERS", - "hsn_code": "96190040" - }, - { - "description": "OTHER", - "hsn_code": "96190090" - } -] \ No newline at end of file diff --git a/erpnext/regional/india/party.js b/erpnext/regional/india/party.js deleted file mode 100644 index 402a387c4a..0000000000 --- a/erpnext/regional/india/party.js +++ /dev/null @@ -1,25 +0,0 @@ -erpnext.setup_gst_reminder_button = (doctype) => { - frappe.ui.form.on(doctype, { - refresh: (frm) => { - if(!frm.is_new()) { - var missing = false; - frm.doc.__onload.addr_list && frm.doc.__onload.addr_list.forEach((d) => { - if(!d.gstin) missing = true; - }); - if (!missing) return; - - frm.add_custom_button('Send GST Update Reminder', () => { - return new Promise((resolve) => { - return frappe.call({ - method: 'erpnext.regional.doctype.gst_settings.gst_settings.send_gstin_reminder', - args: { - party_type: frm.doc.doctype, - party: frm.doc.name, - } - }).always(() => { resolve(); }); - }); - }); - } - } - }); -}; diff --git a/erpnext/regional/india/sac_code_data.json b/erpnext/regional/india/sac_code_data.json deleted file mode 100644 index 42457340be..0000000000 --- a/erpnext/regional/india/sac_code_data.json +++ /dev/null @@ -1,2398 +0,0 @@ -[ - { - "description": "Construction services", - "sac_code": "9954" - }, - { - "description": "Construction services of single dwelling or multi dewlling or multi-storied residential buildings", - "sac_code": "995411" - }, - { - "description": "Construction services of other residential buildings such as old age homes, homeless shelters, hostels etc", - "sac_code": "995412" - }, - { - "description": "Construction services of industrial buildings such as buildings used for production activities (used for assembly line activities), workshops, storage buildings and other similar industrial buildings", - "sac_code": "995413" - }, - { - "description": "Construction services of commercial buildings such as office buildings, exhibition & marriage halls, malls, hotels, restaurants, airports, rail or road terminals, parking garages, petrol and service stations, theatres and other similar buildings.", - "sac_code": "995414" - }, - { - "description": "Construction services of other non-residential buildings such as educational institutions, hospitals, clinics including vertinary clinics, religious establishments, courts, prisons, museums and other similar buildings", - "sac_code": "995415" - }, - { - "description": "Construction Services of other buildings n.e.c", - "sac_code": "995416" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, renovation, maintenance or remodelling of the buildings covered above.", - "sac_code": "995419" - }, - { - "description": "General construction services of highways, streets, roads, railways and airfield runways, bridges and tunnels", - "sac_code": "995421" - }, - { - "description": "General construction services of harbours, waterways, dams, water mains and lines, irrigation and other waterworks", - "sac_code": "995422" - }, - { - "description": "General construction services of long-distance underground/overland/submarine pipelines, communication and electric power lines (cables); pumping stations and related works; transformer stations and related works.", - "sac_code": "995423" - }, - { - "description": "General construction services of local water & sewage pipelines, electricity and communication cables & related works", - "sac_code": "995424" - }, - { - "description": "General construction services of mines and industrial plants", - "sac_code": "995425" - }, - { - "description": "General Construction services of Power Plants and its related infrastructure", - "sac_code": "995426" - }, - { - "description": "General construction services of outdoor sport and recreation facilities", - "sac_code": "995427" - }, - { - "description": "General construction services of other civil engineering works n.e.c.", - "sac_code": "995428" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, renovation, maintenance or remodelling of the constructions covered above.", - "sac_code": "995429" - }, - { - "description": "Demolition services", - "sac_code": "995431" - }, - { - "description": "Site formation and clearance services including preparation services to make sites ready for subsequent construction work, test drilling & boring & core extraction, digging of trenches.", - "sac_code": "995432" - }, - { - "description": "Excavating and earthmoving services", - "sac_code": "995433" - }, - { - "description": "Water well drilling services and septic system installation services", - "sac_code": "995434" - }, - { - "description": "Other site preparation services n.e.c", - "sac_code": "995435" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, maintenance of the constructions covered above.", - "sac_code": "995439" - }, - { - "description": "Installation, assembly and erection services of prefabricated buildings", - "sac_code": "995441" - }, - { - "description": "Installation, assembly and erection services of other prefabricated structures and constructions", - "sac_code": "995442" - }, - { - "description": "Installation services of all types of street furniture (e.g., bus shelters, benches, telephone booths, public toilets, etc.)", - "sac_code": "995443" - }, - { - "description": "Other assembly and erection services n.e.c.", - "sac_code": "995444" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, maintenance of the constructions covered above.", - "sac_code": "995449" - }, - { - "description": "Pile driving and foundation services", - "sac_code": "995451" - }, - { - "description": "Building framing & Roof Framing services", - "sac_code": "995452" - }, - { - "description": "Roofing and waterproofing services", - "sac_code": "995453" - }, - { - "description": "Concrete services", - "sac_code": "995454" - }, - { - "description": "Structural steel erection services", - "sac_code": "995455" - }, - { - "description": "Masonry services", - "sac_code": "995456" - }, - { - "description": "Scaffolding services", - "sac_code": "995457" - }, - { - "description": "Other special trade construction services n.e.c.", - "sac_code": "995458" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, maintenance of the constructions covered above.", - "sac_code": "995459" - }, - { - "description": "Electrical installation services including Electrical wiring & fitting services, fire alarm installation services, burglar alarm system installation services.", - "sac_code": "995461" - }, - { - "description": "Water plumbing and drain laying services", - "sac_code": "995462" - }, - { - "description": "Heating, ventilation and air conditioning equipment installation services", - "sac_code": "995463" - }, - { - "description": "Gas fitting installation services", - "sac_code": "995464" - }, - { - "description": "Insulation services", - "sac_code": "995465" - }, - { - "description": "Lift and escalator installation services", - "sac_code": "995466" - }, - { - "description": "Other installation services n.e.c.", - "sac_code": "995468" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, maintenance of the installations covered above.", - "sac_code": "995469" - }, - { - "description": "Glazing services", - "sac_code": "995471" - }, - { - "description": "Plastering services", - "sac_code": "995472" - }, - { - "description": "Painting services", - "sac_code": "995473" - }, - { - "description": "Floor and wall tiling services", - "sac_code": "995474" - }, - { - "description": "Other floor laying, wall covering and wall papering services", - "sac_code": "995475" - }, - { - "description": "Joinery and carpentry services", - "sac_code": "995476" - }, - { - "description": "Fencing and railing services", - "sac_code": "995477" - }, - { - "description": "Other building completion and finishing services n.e.c.", - "sac_code": "995478" - }, - { - "description": "Services involving Repair, alterations, additions, replacements, maintenance of the completion/finishing works covered above.", - "sac_code": "995479" - }, - { - "description": "Services in wholesale trade", - "sac_code": "9961" - }, - { - "description": "Services provided for a fee/commission or contract basis on wholesale trade", - "sac_code": "996111" - }, - { - "description": "Services in retail trade", - "sac_code": "9962" - }, - { - "description": "Services provided for a fee/commission or contract basis on retail trade", - "sac_code": "996211" - }, - { - "description": "Accommodation, Food and beverage services", - "sac_code": "9963" - }, - { - "description": "Room or unit accommodation services provided by Hotels, INN, Guest House, Club etc", - "sac_code": "996311" - }, - { - "description": "Camp site services", - "sac_code": "996312" - }, - { - "description": "Recreational and vacation camp services", - "sac_code": "996313" - }, - { - "description": "Room or unit accommodation services for students in student residences", - "sac_code": "996321" - }, - { - "description": "Room or unit accommodation services provided by Hostels, Camps, Paying Guest etc", - "sac_code": "996322" - }, - { - "description": "Other room or unit accommodation services n.e.c.", - "sac_code": "996329" - }, - { - "description": "Services provided by Restaurants, Cafes and similar eating facilities including takeaway services, Room services and door delivery of food.", - "sac_code": "996331" - }, - { - "description": "Services provided by Hotels, INN, Guest House, Club etc including Room services, takeaway services and door delivery of food.", - "sac_code": "996332" - }, - { - "description": "Services provided in Canteen and other similar establishments", - "sac_code": "996333" - }, - { - "description": "Catering Services in Exhibition halls, Events, Marriage Halls and other outdoor/indoor functions.", - "sac_code": "996334" - }, - { - "description": "Catering services in trains, flights etc.", - "sac_code": "996335" - }, - { - "description": "Preparation and/or supply services of food, edible preparations, alchoholic & non-alchocholic beverages to airlines and other transportation operators", - "sac_code": "996336" - }, - { - "description": "Other contract food services", - "sac_code": "996337" - }, - { - "description": "Other food, edible preparations, alchoholic & non-alchocholic beverages serving services n.e.c.", - "sac_code": "996339" - }, - { - "description": "Passenger transport services", - "sac_code": "9964" - }, - { - "description": "Local land transport services of passengers by railways, metro, monorail, bus, tramway, autos, three wheelers, scooters and other motor vehicles", - "sac_code": "996411" - }, - { - "description": "Taxi services including radio taxi & other similar services; ", - "sac_code": "996412" - }, - { - "description": "Non-scheduled local bus and coach charter services", - "sac_code": "996413" - }, - { - "description": "Other land transportation services of passengers.", - "sac_code": "996414" - }, - { - "description": "Local water transport services of passengers by ferries, cruises etc", - "sac_code": "996415" - }, - { - "description": "Sightseeing transportation services by rail, land, water & air", - "sac_code": "996416" - }, - { - "description": "Other local transportation services of passengers n.e.c.", - "sac_code": "996419" - }, - { - "description": "Long-distance transport services of passengers through Rail network by Railways, Metro etc", - "sac_code": "996421" - }, - { - "description": "Long-distance transport services of passengers through Road by Bus, Car, non-scheduled long distance bus and coach services, stage carriage etc", - "sac_code": "996422" - }, - { - "description": "Taxi services including radio taxi & other similar services", - "sac_code": "996423" - }, - { - "description": "Coastal and transoceanic (overseas) water transport services of passengers by Ferries, Cruise Ships etc", - "sac_code": "996424" - }, - { - "description": "Domestic/International Scheduled Air transport services of passengers", - "sac_code": "996425" - }, - { - "description": "Domestic/international non-scheduled air transport services of Passengers", - "sac_code": "996426" - }, - { - "description": "Space transport services of passengers", - "sac_code": "996427" - }, - { - "description": "Other long-distance transportation services of passengers n.e.c.", - "sac_code": "996429" - }, - { - "description": "Goods Transport Services", - "sac_code": "9965" - }, - { - "description": "Road transport services of Goods including letters, parcels, live animals, household & office furniture, containers etc by refrigerator vehicles, trucks, trailers, man or animal drawn vehicles or any other vehicles.", - "sac_code": "996511" - }, - { - "description": "Railway transport services of Goods including letters, parcels, live animals, household & office furniture, intermodal containers, bulk cargo etc", - "sac_code": "996512" - }, - { - "description": "Transport services of petroleum & natural gas, water, sewerage and other goods via pipeline", - "sac_code": "996513" - }, - { - "description": "Other land transport services of goods n.e.c.", - "sac_code": "996519" - }, - { - "description": "Coastal and transoceanic (overseas) water transport services of goods by refrigerator vessels, tankers, bulk cargo vessels, container ships etc", - "sac_code": "996521" - }, - { - "description": "Inland water transport services of goods by refrigerator vessels, tankers and other vessels.", - "sac_code": "996522" - }, - { - "description": "Air transport services of letters & parcels and other goods", - "sac_code": "996531" - }, - { - "description": "Space transport services of freight", - "sac_code": "996532" - }, - { - "description": "Rental services of transport vehicles with or without operators", - "sac_code": "9966" - }, - { - "description": "Rental services of road vehicles including buses, coaches, cars, trucks and other motor vehicles, with or without operator", - "sac_code": "996601" - }, - { - "description": "Rental services of water vessels including passenger vessels, freight vessels etc with or without operator", - "sac_code": "996602" - }, - { - "description": "Rental services of aircraft including passenger aircrafts, freight aircrafts etc with or without operator", - "sac_code": "996603" - }, - { - "description": "Rental services of other transport vehicles n.e.c. with or without operator", - "sac_code": "996609" - }, - { - "description": "Supporting services in transport", - "sac_code": "9967" - }, - { - "description": "Container handling services", - "sac_code": "996711" - }, - { - "description": "Customs House Agent services", - "sac_code": "996712" - }, - { - "description": "Clearing and forwarding services", - "sac_code": "996713" - }, - { - "description": "Other cargo and baggage handling services", - "sac_code": "996719" - }, - { - "description": "Refrigerated storage services", - "sac_code": "996721" - }, - { - "description": "Bulk liquid or gas storage services", - "sac_code": "996722" - }, - { - "description": "Other storage and warehousing services", - "sac_code": "996729" - }, - { - "description": "Railway pushing or towing services", - "sac_code": "996731" - }, - { - "description": "Other supporting services for railway transport n.e.c.", - "sac_code": "996739" - }, - { - "description": "Bus station services", - "sac_code": "996741" - }, - { - "description": "Operation services of National Highways, State Highways, Expressways, Roads & streets; bridges and tunnel operation services.", - "sac_code": "996742" - }, - { - "description": "Parking lot services", - "sac_code": "996743" - }, - { - "description": "Towing services for commercial and private vehicles", - "sac_code": "996744" - }, - { - "description": "Other supporting services for road transport n.e.c.", - "sac_code": "996749" - }, - { - "description": "Port and waterway operation services (excl. cargo handling) such as operation services of ports, docks, light houses, light ships etc", - "sac_code": "996751" - }, - { - "description": "Pilotage and berthing services", - "sac_code": "996752" - }, - { - "description": "Vessel salvage and refloating services", - "sac_code": "996753" - }, - { - "description": "Other supporting services for water transport n.e.c.", - "sac_code": "996759" - }, - { - "description": "Airport operation services (excl. cargo handling)", - "sac_code": "996761" - }, - { - "description": "Air traffic control services", - "sac_code": "996762" - }, - { - "description": "Other supporting services for air transport", - "sac_code": "996763" - }, - { - "description": "Supporting services for space transport", - "sac_code": "996764" - }, - { - "description": "Goods transport agency services for road transport", - "sac_code": "996791" - }, - { - "description": "Goods transport agency services for other modes of transport", - "sac_code": "996792" - }, - { - "description": "Other goods transport services ", - "sac_code": "996793" - }, - { - "description": "Other supporting transport services n.e.c", - "sac_code": "996799" - }, - { - "description": "Postal and courier services", - "sac_code": "9968" - }, - { - "description": "Postal services including post office counter services, mail box rental services.", - "sac_code": "996811" - }, - { - "description": "Courier services", - "sac_code": "996812" - }, - { - "description": "Local delivery services", - "sac_code": "996813" - }, - { - "description": "Other Delivery Services n.e.c", - "sac_code": "996819" - }, - { - "description": "Electricity, gas, water and other distribution services", - "sac_code": "9969" - }, - { - "description": "Electricity transmission services", - "sac_code": "996911" - }, - { - "description": "Electricity distribution services", - "sac_code": "996912" - }, - { - "description": "Gas distribution services", - "sac_code": "996913" - }, - { - "description": "Water distribution services", - "sac_code": "996921" - }, - { - "description": "Services involving distribution of steam, hot water and air conditioning supply etc.", - "sac_code": "996922" - }, - { - "description": "Other similar services.", - "sac_code": "996929" - }, - { - "description": "Financial and related services", - "sac_code": "9971" - }, - { - "description": "Central banking services", - "sac_code": "997111" - }, - { - "description": "Deposit services", - "sac_code": "997112" - }, - { - "description": "Credit-granting services including stand-by commitment, guarantees & securities", - "sac_code": "997113" - }, - { - "description": "Financial leasing services", - "sac_code": "997114" - }, - { - "description": "Other financial services (except investment banking, insurance services and pension services)", - "sac_code": "997119" - }, - { - "description": "Investment banking services ", - "sac_code": "997120" - }, - { - "description": "pension services", - "sac_code": "997131" - }, - { - "description": "Life insurance services (excluding reinsurance services)", - "sac_code": "997132" - }, - { - "description": "Accident and health insurance services", - "sac_code": "997133" - }, - { - "description": "Motor vehicle insurance services", - "sac_code": "997134" - }, - { - "description": "Marine, aviation, and other transport insurance services", - "sac_code": "997135" - }, - { - "description": "Freight insurance services & Travel insurance services", - "sac_code": "997136" - }, - { - "description": "Other property insurance services", - "sac_code": "997137" - }, - { - "description": "Other non-life insurance services (excluding reinsurance services)", - "sac_code": "997139" - }, - { - "description": "Life reinsurance services", - "sac_code": "997141" - }, - { - "description": "Accident and health reinsurance services", - "sac_code": "997142" - }, - { - "description": "Motor vehicle reinsurance services", - "sac_code": "997143" - }, - { - "description": "Marine, aviation and other transport reinsurance ser", - "sac_code": "997144" - }, - { - "description": "services", - "sac_code": "997145" - }, - { - "description": "Freight reinsurance services", - "sac_code": "997146" - }, - { - "description": "Other property reinsurance services", - "sac_code": "997147" - }, - { - "description": "Other non-life reinsurance services ", - "sac_code": "997149" - }, - { - "description": "Services related to investment banking such as mergers & acquisition services, corporate finance & venture capital services", - "sac_code": "997151" - }, - { - "description": "Brokerage and related securities and commodities services including commodity exchange services", - "sac_code": "997152" - }, - { - "description": "Portfolio management services except pension funds", - "sac_code": "997153" - }, - { - "description": "Trust and custody services", - "sac_code": "997154" - }, - { - "description": "Services related to the administration of financial markets", - "sac_code": "997155" - }, - { - "description": "Financial consultancy services", - "sac_code": "997156" - }, - { - "description": "Foreign exchange services", - "sac_code": "997157" - }, - { - "description": "Financial transactions processing and clearing house services", - "sac_code": "997158" - }, - { - "description": "Other services auxiliary to financial services", - "sac_code": "997159" - }, - { - "description": "Insurance brokerage and agency services", - "sac_code": "997161" - }, - { - "description": "Insurance claims adjustment services", - "sac_code": "997162" - }, - { - "description": "Actuarial services", - "sac_code": "997163" - }, - { - "description": "Pension fund management services", - "sac_code": "997164" - }, - { - "description": "Other services auxiliary to insurance and pensions ", - "sac_code": "997169" - }, - { - "description": "Services of holding equity of subsidiary companies", - "sac_code": "997171" - }, - { - "description": "Services of holding securities and other assets of trusts and funds and similar financial entities", - "sac_code": "997172" - }, - { - "description": "Real estate services", - "sac_code": "9972" - }, - { - "description": "Rental or leasing services involving own or leased residential property", - "sac_code": "997211" - }, - { - "description": "Rental or leasing services involving own or leased non-residential property", - "sac_code": "997212" - }, - { - "description": "Trade services of buildings", - "sac_code": "997213" - }, - { - "description": "Trade services of time-share properties", - "sac_code": "997214" - }, - { - "description": "Trade services of vacant and subdivided land", - "sac_code": "997215" - }, - { - "description": "Property management services on a fee/commission basis or contract basis", - "sac_code": "997221" - }, - { - "description": "Building sales on a fee/commission basis or contract basis", - "sac_code": "997222" - }, - { - "description": "Land sales on a fee/commission basis or contract basis", - "sac_code": "997223" - }, - { - "description": "Real estate appraisal services on a fee/commission basis or contract basis", - "sac_code": "997224" - }, - { - "description": "Leasing or rental services with or without operator", - "sac_code": "9973" - }, - { - "description": "Leasing or rental services concerning transport equipments including containers, with or without operator", - "sac_code": "997311" - }, - { - "description": "Leasing or rental services concerning agricultural machinery and equipment with or without operator", - "sac_code": "997312" - }, - { - "description": "Leasing or rental services concerning construction machinery and equipment with or without operator", - "sac_code": "997313" - }, - { - "description": "Leasing or rental services concerning office machinery and equipment (except computers) with or without operator", - "sac_code": "997314" - }, - { - "description": "Leasing or rental services concerning computers with or without operators", - "sac_code": "997315" - }, - { - "description": "Leasing or rental services concerning telecommunications equipment with or without operator", - "sac_code": "997316" - }, - { - "description": "Leasing or rental services concerning other machinery and equipments with or without operator", - "sac_code": "997319" - }, - { - "description": "Leasing or rental services concerning televisions, radios, video cassette recorders, projectors, audio systems and related equipment and accessories (Home entertainment equipment )", - "sac_code": "997321" - }, - { - "description": "Leasing or rental services concerning video tapes and disks (Home entertainment equipment )", - "sac_code": "997322" - }, - { - "description": "Leasing or rental services concerning furniture and other household appliances", - "sac_code": "997323" - }, - { - "description": "Leasing or rental services concerning pleasure and leisure equipment.", - "sac_code": "997324" - }, - { - "description": "Leasing or rental services concerning household linen.", - "sac_code": "997325" - }, - { - "description": "Leasing or rental services concerning textiles, clothing and footwear.", - "sac_code": "997326" - }, - { - "description": "Leasing or rental services concerning do-it-yourself machinery and equipment", - "sac_code": "997327" - }, - { - "description": "Leasing or rental services concerning other goods", - "sac_code": "997329" - }, - { - "description": "Licensing services for the right to use computer software and databases.", - "sac_code": "997331" - }, - { - "description": "Licensing services for the right to broadcast and show original films, sound recordings, radio and television programme etc.", - "sac_code": "997332" - }, - { - "description": "Licensing services for the right to reproduce original art works", - "sac_code": "997333" - }, - { - "description": "Licensing services for the right to reprint and copy manuscripts, books, journals and periodicals.", - "sac_code": "997334" - }, - { - "description": "Licensing services for the right to use R&D products", - "sac_code": "997335" - }, - { - "description": "Licensing services for the right to use trademarks and franchises", - "sac_code": "997336" - }, - { - "description": "Licensing services for the right to use minerals including its exploration and evaluation", - "sac_code": "997337" - }, - { - "description": "Licensing services for right to use other natural resources including telecommunication spectrum", - "sac_code": "997338" - }, - { - "description": "Licensing services for the right to use other intellectual property products and other rescources n.e.c", - "sac_code": "997339" - }, - { - "description": "Research and development services", - "sac_code": "9981" - }, - { - "description": "Research and experimental development services in natural sciences", - "sac_code": "998111" - }, - { - "description": "Research and experimental development services in engineering and technology", - "sac_code": "998112" - }, - { - "description": "Research and experimental development services in medical sciences and pharmacy.", - "sac_code": "998113" - }, - { - "description": "Research and experimental development services in agricultural sciences.", - "sac_code": "998114" - }, - { - "description": "Research and experimental development services in social sciences.", - "sac_code": "998121" - }, - { - "description": "Research and experimental development services in humanities", - "sac_code": "998122" - }, - { - "description": "Interdisciplinary research and experimental development services.", - "sac_code": "998130" - }, - { - "description": "Research and development originals in pharmaceuticals", - "sac_code": "998141" - }, - { - "description": "Research and development originals in agriculture", - "sac_code": "998142" - }, - { - "description": "Research and development originals in biotechnology", - "sac_code": "998143" - }, - { - "description": "Research and development originals in computer related sciences", - "sac_code": "998144" - }, - { - "description": "Research and development originals in other fields n.e.c.", - "sac_code": "998145" - }, - { - "description": "Legal and accounting services", - "sac_code": "9982" - }, - { - "description": "Legal advisory and representation services concerning criminal law.", - "sac_code": "998211" - }, - { - "description": "Legal advisory and representation services concerning other fields of law.", - "sac_code": "998212" - }, - { - "description": "Legal documentation and certification services concerning patents, copyrights and other intellectual property rights.", - "sac_code": "998213" - }, - { - "description": "Legal documentation and certification services concerning other documents.", - "sac_code": "998214" - }, - { - "description": "Arbitration and conciliation services", - "sac_code": "998215" - }, - { - "description": "Other legal services n.e.c.", - "sac_code": "998216" - }, - { - "description": "Financial auditing services", - "sac_code": "998221" - }, - { - "description": "Accounting and bookkeeping services", - "sac_code": "998222" - }, - { - "description": "Payroll services", - "sac_code": "998223" - }, - { - "description": "Other similar services n.e.c", - "sac_code": "998224" - }, - { - "description": "Corporate tax consulting and preparation services", - "sac_code": "998231" - }, - { - "description": "Individual tax preparation and planning services", - "sac_code": "998232" - }, - { - "description": "Insolvency and receivership services", - "sac_code": "998240" - }, - { - "description": "Other professional, technical and business services", - "sac_code": "9983" - }, - { - "description": "Management consulting and management services including financial, strategic, human resources, marketing, operations and supply chain management.", - "sac_code": "998311" - }, - { - "description": "Business consulting services including pubic relations services", - "sac_code": "998312" - }, - { - "description": "Information technology (IT) consulting and support services", - "sac_code": "998313" - }, - { - "description": "Information technology (IT) design and development services", - "sac_code": "998314" - }, - { - "description": "Hosting and information technology (IT) infrastructure provisioning services", - "sac_code": "998315" - }, - { - "description": "IT infrastructure and network management services", - "sac_code": "998316" - }, - { - "description": "Other information technology services n.e.c", - "sac_code": "998319" - }, - { - "description": "Architectural advisory services", - "sac_code": "998321" - }, - { - "description": "Architectural services for residential building projects", - "sac_code": "998322" - }, - { - "description": "Architectural services for non-residential building projects", - "sac_code": "998323" - }, - { - "description": "Historical restoration architectural services", - "sac_code": "998324" - }, - { - "description": "Urban planning services", - "sac_code": "998325" - }, - { - "description": "Rural land planning services", - "sac_code": "998326" - }, - { - "description": "Project site master planning services", - "sac_code": "998327" - }, - { - "description": "Landscape architectural services and advisory services", - "sac_code": "998328" - }, - { - "description": "Engineering advisory services", - "sac_code": "998331" - }, - { - "description": "Engineering services for building projects", - "sac_code": "998332" - }, - { - "description": "Engineering services for industrial and manufacturing projects", - "sac_code": "998333" - }, - { - "description": "Engineering services for transportation projects", - "sac_code": "998334" - }, - { - "description": "Engineering services for power projects", - "sac_code": "998335" - }, - { - "description": "Engineering services for telecommunications and broadcasting projects", - "sac_code": "998336" - }, - { - "description": "Engineering services for waste management projects (hazardous and non-hazardous), for water, sewerage and drainage projects.", - "sac_code": "998337" - }, - { - "description": "Engineering services for other projects n.e.c.", - "sac_code": "998338" - }, - { - "description": "Project management services for construction projects", - "sac_code": "998339" - }, - { - "description": "Geological and geophysical consulting services", - "sac_code": "998341" - }, - { - "description": "Subsurface surveying services", - "sac_code": "998342" - }, - { - "description": "Mineral exploration and evaluation", - "sac_code": "998343" - }, - { - "description": "Surface surveying and map-making services", - "sac_code": "998344" - }, - { - "description": "Weather forecasting and meteorological services", - "sac_code": "998345" - }, - { - "description": "Technical testing and analysis services", - "sac_code": "998346" - }, - { - "description": "Certification of ships, aircraft, dams, etc.", - "sac_code": "998347" - }, - { - "description": "Certification and authentication of works of art", - "sac_code": "998348" - }, - { - "description": "Other technical and scientific services n.e.c.", - "sac_code": "998349" - }, - { - "description": "Veterinary services for pet animals", - "sac_code": "998351" - }, - { - "description": "Veterinary services for livestock", - "sac_code": "998352" - }, - { - "description": "Other veterinary services n.e.c.", - "sac_code": "998359" - }, - { - "description": "Advertising Services", - "sac_code": "998361" - }, - { - "description": "Purchase or sale of advertising space or time, on commission", - "sac_code": "998362" - }, - { - "description": "Sale of advertising space in print media (except on commission)", - "sac_code": "998363" - }, - { - "description": "Sale of TV and radio advertising time", - "sac_code": "998364" - }, - { - "description": "Sale of Internet advertising space", - "sac_code": "998365" - }, - { - "description": "Sale of other advertising space or time (except on commission)", - "sac_code": "998366" - }, - { - "description": "Market research services", - "sac_code": "998371" - }, - { - "description": "Public opinion polling services", - "sac_code": "998372" - }, - { - "description": "Portrait photography services", - "sac_code": "998381" - }, - { - "description": "Advertising and related photography services", - "sac_code": "998382" - }, - { - "description": "Event photography and event videography services", - "sac_code": "998383" - }, - { - "description": "Specialty photography services", - "sac_code": "998384" - }, - { - "description": "Restoration and retouching services of photography", - "sac_code": "998385" - }, - { - "description": "Photographic & videographic processing services", - "sac_code": "998386" - }, - { - "description": "Other Photography & Videography and their processing services n.e.c.", - "sac_code": "998387" - }, - { - "description": "Specialty design services including interior design, fashion design, industrial design and other specialty design services", - "sac_code": "998391" - }, - { - "description": "Design originals", - "sac_code": "998392" - }, - { - "description": "Scientific and technical consulting services", - "sac_code": "998393" - }, - { - "description": "Original compilations of facts/information", - "sac_code": "998394" - }, - { - "description": "Translation and interpretation services", - "sac_code": "998395" - }, - { - "description": "Trademarks and franchises", - "sac_code": "998396" - }, - { - "description": "Sponsorship Services & Brand Promotion Services", - "sac_code": "998397" - }, - { - "description": "Other professional, technical and business services n.e.c.", - "sac_code": "998399" - }, - { - "description": "Telecommunications, broadcasting and information supply services", - "sac_code": "9984" - }, - { - "description": "Carrier services", - "sac_code": "998411" - }, - { - "description": "Fixed telephony services", - "sac_code": "998412" - }, - { - "description": "Mobile telecommunications services", - "sac_code": "998413" - }, - { - "description": "Private network services", - "sac_code": "998414" - }, - { - "description": "Data transmission services", - "sac_code": "998415" - }, - { - "description": "Other telecommunications services including Fax services, Telex services n.e.c.", - "sac_code": "998419" - }, - { - "description": "Internet backbone services", - "sac_code": "998421" - }, - { - "description": "Internet access services in wired and wireless mode.", - "sac_code": "998422" - }, - { - "description": "Fax, telephony over the Internet", - "sac_code": "998423" - }, - { - "description": "Audio conferencing and video conferencing over the Internet", - "sac_code": "998424" - }, - { - "description": "Other Internet telecommunications services n.e.c.", - "sac_code": "998429" - }, - { - "description": "On-line text based information such as online books, newpapers, periodicals, directories etc", - "sac_code": "998431" - }, - { - "description": "On-line audio content", - "sac_code": "998432" - }, - { - "description": "On-line video content", - "sac_code": "998433" - }, - { - "description": "Software downloads", - "sac_code": "998434" - }, - { - "description": "Other on-line contents n.e.c.", - "sac_code": "998439" - }, - { - "description": "News agency services to newspapers and periodicals", - "sac_code": "998441" - }, - { - "description": "Services of independent journalists and press photographers", - "sac_code": "998442" - }, - { - "description": "News agency services to audiovisual media", - "sac_code": "998443" - }, - { - "description": "Library services", - "sac_code": "998451" - }, - { - "description": "Operation services of public archives including digital archives", - "sac_code": "998452" - }, - { - "description": "Operation services of historical archives including digital archives", - "sac_code": "998453" - }, - { - "description": "Radio broadcast originals", - "sac_code": "998461" - }, - { - "description": "Television broadcast originals", - "sac_code": "998462" - }, - { - "description": "Radio channel programmes", - "sac_code": "998463" - }, - { - "description": "Television channel programmes", - "sac_code": "998464" - }, - { - "description": "Broadcasting services", - "sac_code": "998465" - }, - { - "description": "Home programme distribution services", - "sac_code": "998466" - }, - { - "description": "Support services", - "sac_code": "9985" - }, - { - "description": "Executive/retained personnel search services", - "sac_code": "998511" - }, - { - "description": "Permanent placement services, other than executive search services", - "sac_code": "998512" - }, - { - "description": "Contract staffing services", - "sac_code": "998513" - }, - { - "description": "Temporary staffing services", - "sac_code": "998514" - }, - { - "description": "Long-term staffing (pay rolling) services", - "sac_code": "998515" - }, - { - "description": "Temporary staffing-to-permanent placement services", - "sac_code": "998516" - }, - { - "description": "Co-employment staffing services", - "sac_code": "998517" - }, - { - "description": "Other employment & labour supply services n.e.c", - "sac_code": "998519" - }, - { - "description": "Investigation services", - "sac_code": "998521" - }, - { - "description": "Security consulting services", - "sac_code": "998522" - }, - { - "description": "Security systems services", - "sac_code": "998523" - }, - { - "description": "Armoured car services", - "sac_code": "998524" - }, - { - "description": "Guard services", - "sac_code": "998525" - }, - { - "description": "Training of guard dogs", - "sac_code": "998526" - }, - { - "description": "Polygraph services", - "sac_code": "998527" - }, - { - "description": "Fingerprinting services", - "sac_code": "998528" - }, - { - "description": "Other security services n.e.c.", - "sac_code": "998529" - }, - { - "description": "Disinfecting and exterminating services", - "sac_code": "998531" - }, - { - "description": "Window cleaning services", - "sac_code": "998532" - }, - { - "description": "General cleaning services", - "sac_code": "998533" - }, - { - "description": "Specialized cleaning services for reservoirs and tanks", - "sac_code": "998534" - }, - { - "description": "Sterilization of objects or premises (operating rooms)", - "sac_code": "998535" - }, - { - "description": "Furnace and chimney cleaning services", - "sac_code": "998536" - }, - { - "description": "Exterior cleaning of buildings of all types", - "sac_code": "998537" - }, - { - "description": "Cleaning of transportation equipment", - "sac_code": "998538" - }, - { - "description": "Other cleaning services n.e.c.", - "sac_code": "998539" - }, - { - "description": "Packaging services of goods for others", - "sac_code": "998540" - }, - { - "description": "Parcel packing and gift wrapping", - "sac_code": "998541" - }, - { - "description": "Coin and currency packing services", - "sac_code": "998542" - }, - { - "description": "Other packaging services n.e.c", - "sac_code": "998549" - }, - { - "description": "Reservation services for transportation", - "sac_code": "998551" - }, - { - "description": "Reservation services for accommodation, cruises and package tours", - "sac_code": "998552" - }, - { - "description": "Reservation services for convention centres, congress centres and exhibition halls", - "sac_code": "998553" - }, - { - "description": "Reservation services for event tickets, cinema halls, entertainment and recreational services and other reservation services", - "sac_code": "998554" - }, - { - "description": "Tour operator services", - "sac_code": "998555" - }, - { - "description": "Tourist guide services", - "sac_code": "998556" - }, - { - "description": "Tourism promotion and visitor information services", - "sac_code": "998557" - }, - { - "description": "Other travel arrangement and related services n.e.c", - "sac_code": "998559" - }, - { - "description": "Credit reporting & rating services", - "sac_code": "998591" - }, - { - "description": "Collection agency services", - "sac_code": "998592" - }, - { - "description": "Telephone-based support services", - "sac_code": "998593" - }, - { - "description": "Combined office administrative services", - "sac_code": "998594" - }, - { - "description": "Specialized office support services such as duplicating services, mailing services, document preparation etc", - "sac_code": "998595" - }, - { - "description": "Events, Exhibitions, Conventions and trade shows organisation and assistance services", - "sac_code": "998596" - }, - { - "description": "Landscape care and maintenance services", - "sac_code": "998597" - }, - { - "description": "Other information services n.e.c.", - "sac_code": "998598" - }, - { - "description": "Other support services n.e.c.", - "sac_code": "998599" - }, - { - "description": "Support services to agriculture, hunting, forestry, fishing, mining and utilities.", - "sac_code": "9986" - }, - { - "description": "Support services to crop production", - "sac_code": "998611" - }, - { - "description": "Animal husbandry services", - "sac_code": "998612" - }, - { - "description": "Support services to hunting", - "sac_code": "998613" - }, - { - "description": "Support services to forestry and logging", - "sac_code": "998614" - }, - { - "description": "Support services to fishing", - "sac_code": "998615" - }, - { - "description": "Other support services to agriculture, hunting, forestry and fishing", - "sac_code": "998619" - }, - { - "description": "Support services to oil and gas extraction", - "sac_code": "998621" - }, - { - "description": "Support services to other mining n.e.c.", - "sac_code": "998622" - }, - { - "description": "Support services to electricity transmission and distribution", - "sac_code": "998631" - }, - { - "description": "Support services to gas distribution", - "sac_code": "998632" - }, - { - "description": "Support services to water distribution", - "sac_code": "998633" - }, - { - "description": "Support services to Distribution services of steam, hot water and air-conditioning supply", - "sac_code": "998634" - }, - { - "description": "Maintenance, repair and installation (except construction) services", - "sac_code": "9987" - }, - { - "description": "Maintenance and repair services of fabricated metal products, except machinery and equipment.", - "sac_code": "998711" - }, - { - "description": "Maintenance and repair services of office and accounting machinery", - "sac_code": "998712" - }, - { - "description": "Maintenance and repair services of computers and peripheral equipment", - "sac_code": "998713" - }, - { - "description": "Maintenance and repair services of transport machinery and equipment", - "sac_code": "998714" - }, - { - "description": "Maintenance and repair services of electrical household appliances", - "sac_code": "998715" - }, - { - "description": "Maintenance and repair services of telecommunication equipments and apparatus", - "sac_code": "998716" - }, - { - "description": "Maintenance and repair services of commercial and industrial machinery.", - "sac_code": "998717" - }, - { - "description": "Maintenance and repair services of elevators and escalators", - "sac_code": "998718" - }, - { - "description": "Maintenance and repair services of other machinery and equipments", - "sac_code": "998719" - }, - { - "description": "Repair services of footwear and leather goods", - "sac_code": "998721" - }, - { - "description": "Repair services of watches, clocks and jewellery", - "sac_code": "998722" - }, - { - "description": "Repair services of garments and household textiles", - "sac_code": "998723" - }, - { - "description": "Repair services of furniture", - "sac_code": "998724" - }, - { - "description": "Repair services of bicycles", - "sac_code": "998725" - }, - { - "description": "Maintenance and repair services of musical instruments", - "sac_code": "998726" - }, - { - "description": "Repair services for photographic equipment and cameras", - "sac_code": "998727" - }, - { - "description": "Maintenance and repair services of other goods n.e.c.", - "sac_code": "998729" - }, - { - "description": "Installation services of fabricated metal products, except machinery and equipment.", - "sac_code": "998731" - }, - { - "description": "Installation services of industrial, manufacturing and service industry machinery and equipment.", - "sac_code": "998732" - }, - { - "description": "Installation services of office and accounting machinery and computers", - "sac_code": "998733" - }, - { - "description": "Installation services of radio, television and communications equipment and apparatus.", - "sac_code": "998734" - }, - { - "description": "Installation services of professional medical machinery and equipment, and precision and optical instruments.", - "sac_code": "998735" - }, - { - "description": "Installation services of electrical machinery and apparatus n.e.c.", - "sac_code": "998736" - }, - { - "description": "Installation services of other goods n.e.c.", - "sac_code": "998739" - }, - { - "description": "Manufacturing services on physical inputs (goods) owned by others", - "sac_code": "9988" - }, - { - "description": "Meat processing services", - "sac_code": "998811" - }, - { - "description": "Fish processing services", - "sac_code": "998812" - }, - { - "description": "Fruit and vegetables processing services", - "sac_code": "998813" - }, - { - "description": "Vegetable and animal oil and fat manufacturing services", - "sac_code": "998814" - }, - { - "description": "Dairy product manufacturing services", - "sac_code": "998815" - }, - { - "description": "Other food product manufacturing services", - "sac_code": "998816" - }, - { - "description": "Prepared animal feeds manufacturing services", - "sac_code": "998817" - }, - { - "description": "Beverage manufacturing services", - "sac_code": "998818" - }, - { - "description": "Tobacco manufacturing services n.e.c.", - "sac_code": "998819" - }, - { - "description": "Textile manufacturing services", - "sac_code": "998821" - }, - { - "description": "Wearing apparel manufacturing services", - "sac_code": "998822" - }, - { - "description": "Leather and leather product manufacturing services", - "sac_code": "998823" - }, - { - "description": "Wood and wood product manufacturing services", - "sac_code": "998831" - }, - { - "description": "Paper and paper product manufacturing services", - "sac_code": "998832" - }, - { - "description": "Coke and refined petroleum product manufacturing services", - "sac_code": "998841" - }, - { - "description": "Chemical product manufacturing services", - "sac_code": "998842" - }, - { - "description": "Pharmaceutical product manufacturing services", - "sac_code": "998843" - }, - { - "description": "Rubber and plastic product manufacturing services", - "sac_code": "998851" - }, - { - "description": "Plastic product manufacturing services", - "sac_code": "998852" - }, - { - "description": "Other non-metallic mineral product manufacturing services", - "sac_code": "998853" - }, - { - "description": "Basic metal manufacturing services", - "sac_code": "998860" - }, - { - "description": "Structural metal product, tank, reservoir and steam generator manufacturing services", - "sac_code": "998871" - }, - { - "description": "Weapon and ammunition manufacturing services", - "sac_code": "998872" - }, - { - "description": "Other fabricated metal product manufacturing and metal treatment services", - "sac_code": "998873" - }, - { - "description": "Computer, electronic and optical product manufacturing services", - "sac_code": "998874" - }, - { - "description": "Electrical equipment manufacturing services", - "sac_code": "998875" - }, - { - "description": "General-purpose machinery manufacturing services n.e.c.", - "sac_code": "998876" - }, - { - "description": "Special-purpose machinery manufacturing services", - "sac_code": "998877" - }, - { - "description": "Motor vehicle and trailer manufacturing services", - "sac_code": "998881" - }, - { - "description": "Other transport equipment manufacturing services", - "sac_code": "998882" - }, - { - "description": "Furniture manufacturing services", - "sac_code": "998891" - }, - { - "description": "Jewellery manufacturing services", - "sac_code": "998892" - }, - { - "description": "Imitation jewellery manufacturing services", - "sac_code": "998893" - }, - { - "description": "Musical instrument manufacturing services", - "sac_code": "998894" - }, - { - "description": "Sports goods manufacturing services", - "sac_code": "998895" - }, - { - "description": "Game and toy manufacturing services", - "sac_code": "998896" - }, - { - "description": "Medical and dental instrument and supply manufacturing services", - "sac_code": "998897" - }, - { - "description": "Other manufacturing services n.e.c.", - "sac_code": "998898" - }, - { - "description": "Other manufacturing services; publishing, printing and reproduction services; materials recovery services", - "sac_code": "9989" - }, - { - "description": "Publishing, on a fee or contract basis", - "sac_code": "998911" - }, - { - "description": "Printing and reproduction services of recorded media, on a fee or contract basis", - "sac_code": "998912" - }, - { - "description": "Moulding, pressing, stamping, extruding and similar plastic manufacturing services", - "sac_code": "998920" - }, - { - "description": "Iron and steel casting services", - "sac_code": "998931" - }, - { - "description": "Non-ferrous metal casting services", - "sac_code": "998932" - }, - { - "description": "Metal forging, pressing, stamping, roll forming and powder metallurgy services", - "sac_code": "998933" - }, - { - "description": "Metal waste and scrap recovery (recycling) services, on a fee or contract basis", - "sac_code": "998941" - }, - { - "description": "Non-metal waste and scrap recovery (recycling) services, on a fee or contract basis", - "sac_code": "998942" - }, - { - "description": "Public administration and other services provided to the community as a whole; compulsory social security services", - "sac_code": "9991" - }, - { - "description": "Overall Government public services", - "sac_code": "999111" - }, - { - "description": "Public administrative services related to the provision of educational, health care, cultural and other social services, excluding social security service.", - "sac_code": "999112" - }, - { - "description": "Public administrative services related to the more efficient operation of business.", - "sac_code": "999113" - }, - { - "description": "Other administrative services of the government n.e.c.", - "sac_code": "999119" - }, - { - "description": "Public administrative services related to external affairs, diplomatic and consular services abroad.", - "sac_code": "999121" - }, - { - "description": "Services related to foreign economic aid", - "sac_code": "999122" - }, - { - "description": "Services related to foreign military aid", - "sac_code": "999123" - }, - { - "description": "Military defence services", - "sac_code": "999124" - }, - { - "description": "Civil defence services", - "sac_code": "999125" - }, - { - "description": "Police and fire protection services", - "sac_code": "999126" - }, - { - "description": "Public administrative services related to law courts", - "sac_code": "999127" - }, - { - "description": "Administrative services related to the detention or rehabilitation of criminals.", - "sac_code": "999128" - }, - { - "description": "Public administrative services related to other public order and safety affairs n.e.c.", - "sac_code": "999129" - }, - { - "description": "Administrative services related to sickness, maternity or temporary disablement benefit schemes.", - "sac_code": "999131" - }, - { - "description": "Administrative services related to government employee pension schemes; old-age disability or survivors' benefit schemes, other than for government employees", - "sac_code": "999132" - }, - { - "description": "Administrative services related to unemployment compensation benefit schemes", - "sac_code": "999133" - }, - { - "description": "Administrative services related to family and child allowance programmes", - "sac_code": "999134" - }, - { - "description": "Education services", - "sac_code": "9992" - }, - { - "description": "Pre-primary education services", - "sac_code": "999210" - }, - { - "description": "Primary education services", - "sac_code": "999220" - }, - { - "description": "Secondary education services, general", - "sac_code": "999231" - }, - { - "description": "Secondary education services, technical and vocational.", - "sac_code": "999232" - }, - { - "description": "Higher education services, general", - "sac_code": "999241" - }, - { - "description": "Higher education services, technical", - "sac_code": "999242" - }, - { - "description": "Higher education services, vocational", - "sac_code": "999243" - }, - { - "description": "Other higher education services", - "sac_code": "999249" - }, - { - "description": "Specialised education services ", - "sac_code": "999259" - }, - { - "description": "Cultural education services", - "sac_code": "999291" - }, - { - "description": "Sports and recreation education services", - "sac_code": "999292" - }, - { - "description": "Commercial training and coaching services", - "sac_code": "999293" - }, - { - "description": "Other education and training services n.e.c.", - "sac_code": "999294" - }, - { - "description": "services involving conduct of examination for admission to educational institutions", - "sac_code": "999295" - }, - { - "description": "Other Educational support services", - "sac_code": "999299" - }, - { - "description": "Human health and social care services", - "sac_code": "9993" - }, - { - "description": "Inpatient services", - "sac_code": "999311" - }, - { - "description": "Medical and dental services", - "sac_code": "999312" - }, - { - "description": "Childbirth and related services", - "sac_code": "999313" - }, - { - "description": "Nursing and Physiotherapeutic services", - "sac_code": "999314" - }, - { - "description": "Ambulance services", - "sac_code": "999315" - }, - { - "description": "Medical Laboratory and Diagnostic-imaging services", - "sac_code": "999316" - }, - { - "description": "Blood, sperm and organ bank services", - "sac_code": "999317" - }, - { - "description": "Other human health services including homeopathy, unani, ayurveda, naturopathy, acupuncture etc.", - "sac_code": "999319" - }, - { - "description": "Residential health-care services other than by hospitals", - "sac_code": "999321" - }, - { - "description": "Residential care services for the elderly and persons with disabilities", - "sac_code": "999322" - }, - { - "description": "Residential care services for children suffering from mental retardation, mental health illnesses or substance abuse", - "sac_code": "999331" - }, - { - "description": "Other social services with accommodation for children", - "sac_code": "999332" - }, - { - "description": "Residential care services for adults suffering from mental retardation, mental health illnesses or substance abuse", - "sac_code": "999333" - }, - { - "description": "Other social services with accommodation for adults", - "sac_code": "999334" - }, - { - "description": "Vocational rehabilitation services", - "sac_code": "999341" - }, - { - "description": "Other social services without accommodation for the elderly and disabled n.e.c.", - "sac_code": "999349" - }, - { - "description": "Child day-care services", - "sac_code": "999351" - }, - { - "description": "Guidance and counseling services n.e.c. related to children", - "sac_code": "999352" - }, - { - "description": "Welfare services without accommodation", - "sac_code": "999353" - }, - { - "description": "Other social services without accommodation n.e.c.", - "sac_code": "999359" - }, - { - "description": "Sewage and waste collection, treatment and disposal and other environmental protection services", - "sac_code": "9994" - }, - { - "description": "Sewerage and sewage treatment services", - "sac_code": "999411" - }, - { - "description": "Septic tank emptying and cleaning services", - "sac_code": "999412" - }, - { - "description": "Collection services of hazardous waste", - "sac_code": "999421" - }, - { - "description": "Collection services of non-hazardous recyclable materials", - "sac_code": "999422" - }, - { - "description": "General waste collection services, residential", - "sac_code": "999423" - }, - { - "description": "General waste collection services, other n.e.c.", - "sac_code": "999424" - }, - { - "description": "Waste preparation, consolidation and storage services", - "sac_code": "999431" - }, - { - "description": "Hazardous waste treatment and disposal services", - "sac_code": "999432" - }, - { - "description": "Non-hazardous waste treatment and disposal services", - "sac_code": "999433" - }, - { - "description": "Site remediation and clean-up services", - "sac_code": "999441" - }, - { - "description": "Containment, control and monitoring services and other site remediation services", - "sac_code": "999442" - }, - { - "description": "Building remediation services", - "sac_code": "999443" - }, - { - "description": "Other remediation services n.e.c.", - "sac_code": "999449" - }, - { - "description": "Sweeping and snow removal services", - "sac_code": "999451" - }, - { - "description": "Other sanitation services n.e.c.", - "sac_code": "999459" - }, - { - "description": "Other environmental protection services n.e.c.", - "sac_code": "999490" - }, - { - "description": "Services of membership organizations", - "sac_code": "9995" - }, - { - "description": "Services furnished by business and employers organizations", - "sac_code": "999511" - }, - { - "description": "Services furnished by professional organizations", - "sac_code": "999512" - }, - { - "description": "Services furnished by trade unions", - "sac_code": "999520" - }, - { - "description": "Religious services", - "sac_code": "999591" - }, - { - "description": "Services furnished by political organizations", - "sac_code": "999592" - }, - { - "description": "Services furnished by human rights organizations", - "sac_code": "999593" - }, - { - "description": "Cultural and recreational associations", - "sac_code": "999594" - }, - { - "description": "Services furnished by environmental advocacy groups", - "sac_code": "999595" - }, - { - "description": "Services provided by youth associations", - "sac_code": "999596" - }, - { - "description": "Other civic and social organizations", - "sac_code": "999597" - }, - { - "description": "Home owners associations", - "sac_code": "999598" - }, - { - "description": "Services provided by other membership organizations n.e.c.", - "sac_code": "999599" - }, - { - "description": "Recreational, cultural and sporting services", - "sac_code": "9996" - }, - { - "description": "Sound recording services", - "sac_code": "999611" - }, - { - "description": "Motion picture, videotape, television and radio programme production services", - "sac_code": "999612" - }, - { - "description": "Audiovisual post-production services", - "sac_code": "999613" - }, - { - "description": "Motion picture, videotape and television programme distribution services", - "sac_code": "999614" - }, - { - "description": "Motion picture projection services", - "sac_code": "999615" - }, - { - "description": "Performing arts event promotion and organization services", - "sac_code": "999621" - }, - { - "description": "Performing arts event production and presentation services", - "sac_code": "999622" - }, - { - "description": "Performing arts facility operation services", - "sac_code": "999623" - }, - { - "description": "Other performing arts and live entertainment services n.e.c.", - "sac_code": "999629" - }, - { - "description": "Services of performing artists including actors, readers, musicians, singers, dancers, TV personalities, independent models etc", - "sac_code": "999631" - }, - { - "description": "Services of authors, composers, sculptors and other artists, except performing artists", - "sac_code": "999632" - }, - { - "description": "Original works of authors, composers and other artists except performing artists, painters and sculptors", - "sac_code": "999633" - }, - { - "description": "Museum and preservation services of historical sites and buildings", - "sac_code": "999641" - }, - { - "description": "Botanical, zoological and nature reserve services", - "sac_code": "999642" - }, - { - "description": "Sports and recreational sports event promotion and organization services", - "sac_code": "999651" - }, - { - "description": "Sports and recreational sports facility operation services", - "sac_code": "999652" - }, - { - "description": "Other sports and recreational sports services n.e.c.", - "sac_code": "999659" - }, - { - "description": "Services of athletes", - "sac_code": "999661" - }, - { - "description": "Support services related to sports and recreation", - "sac_code": "999662" - }, - { - "description": "Amusement park and similar attraction services", - "sac_code": "999691" - }, - { - "description": "Gambling and betting services including similar online services", - "sac_code": "999692" - }, - { - "description": "Coin-operated amusement machine services", - "sac_code": "999693" - }, - { - "description": "Lottery services", - "sac_code": "999694" - }, - { - "description": "Other recreation and amusement services n.e.c.", - "sac_code": "999699" - }, - { - "description": "Other services", - "sac_code": "9997" - }, - { - "description": "Coin-operated laundry services", - "sac_code": "999711" - }, - { - "description": "Dry-cleaning services (including fur product cleaning services)", - "sac_code": "999712" - }, - { - "description": "Other textile cleaning services", - "sac_code": "999713" - }, - { - "description": "Pressing services", - "sac_code": "999714" - }, - { - "description": "Dyeing and colouring services", - "sac_code": "999715" - }, - { - "description": "Other washing, cleaning and dyeing services n.e.c", - "sac_code": "999719" - }, - { - "description": "Hairdressing and barbers services", - "sac_code": "999721" - }, - { - "description": "Cosmetic treatment (including cosmetic/plastic surgery), manicuring and pedicuring services", - "sac_code": "999722" - }, - { - "description": "Physical well-being services including health club & fitness centre", - "sac_code": "999723" - }, - { - "description": "Other beauty treatment services n.e.c.", - "sac_code": "999729" - }, - { - "description": "Cemeteries and cremation services", - "sac_code": "999731" - }, - { - "description": "Undertaking services", - "sac_code": "999732" - }, - { - "description": "Services involving commercial use or exploitation of any event", - "sac_code": "999791" - }, - { - "description": "Agreeing to do an act", - "sac_code": "999792" - }, - { - "description": "Agreeing to refrain from doing an act", - "sac_code": "999793" - }, - { - "description": "Agreeing to tolerate an act", - "sac_code": "999794" - }, - { - "description": "Conduct of religious ceremonies/rituals by persons", - "sac_code": "999795" - }, - { - "description": "Other services n.e.c.", - "sac_code": "999799" - }, - { - "description": "Domestic services", - "sac_code": "9998" - }, - { - "description": "Domestic services both part time & full time", - "sac_code": "999800" - }, - { - "description": "Services provided by extraterritorial organizations and bodies.", - "sac_code": "9999" - }, - { - "description": "Services provided by extraterritorial organizations and bodies", - "sac_code": "999900" - } -] \ No newline at end of file diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py deleted file mode 100644 index e41cd34c72..0000000000 --- a/erpnext/regional/india/setup.py +++ /dev/null @@ -1,1856 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe, os, json -from frappe.custom.doctype.custom_field.custom_field import create_custom_fields -from frappe.custom.doctype.property_setter.property_setter import make_property_setter -from frappe.permissions import add_permission, update_permission_property -from erpnext.regional.india import states -from erpnext.accounts.utils import get_fiscal_year, FiscalYearError -from frappe.utils import today - - -def setup(company=None, patch=True): - # Company independent fixtures should be called only once at the first company setup - if patch or frappe.db.count("Company", {"country": "India"}) <= 1: - setup_company_independent_fixtures(patch=patch) - - if not patch: - make_fixtures(company) - - -# TODO: for all countries -def setup_company_independent_fixtures(patch=False): - make_custom_fields() - make_property_setters(patch=patch) - add_permissions() - add_custom_roles_for_reports() - frappe.enqueue("erpnext.regional.india.setup.add_hsn_sac_codes", now=frappe.flags.in_test) - create_gratuity_rule() - add_print_formats() - update_accounts_settings_for_taxes() - - -def add_hsn_sac_codes(): - if frappe.flags.in_test and frappe.flags.created_hsn_codes: - return - - # HSN codes - with open(os.path.join(os.path.dirname(__file__), "hsn_code_data.json"), "r") as f: - hsn_codes = json.loads(f.read()) - - create_hsn_codes(hsn_codes, code_field="hsn_code") - - # SAC Codes - with open(os.path.join(os.path.dirname(__file__), "sac_code_data.json"), "r") as f: - sac_codes = json.loads(f.read()) - create_hsn_codes(sac_codes, code_field="sac_code") - - if frappe.flags.in_test: - frappe.flags.created_hsn_codes = True - - -def create_hsn_codes(data, code_field): - for d in data: - hsn_code = frappe.new_doc("GST HSN Code") - hsn_code.description = d["description"] - hsn_code.hsn_code = d[code_field] - hsn_code.name = d[code_field] - hsn_code.db_insert(ignore_if_duplicate=True) - - -def add_custom_roles_for_reports(): - for report_name in ( - "GST Sales Register", - "GST Purchase Register", - "GST Itemised Sales Register", - "GST Itemised Purchase Register", - "Eway Bill", - "E-Invoice Summary", - ): - - if not frappe.db.get_value("Custom Role", dict(report=report_name)): - frappe.get_doc( - dict( - doctype="Custom Role", - report=report_name, - roles=[dict(role="Accounts User"), dict(role="Accounts Manager")], - ) - ).insert() - - for report_name in ("Professional Tax Deductions", "Provident Fund Deductions"): - - if not frappe.db.get_value("Custom Role", dict(report=report_name)): - frappe.get_doc( - dict( - doctype="Custom Role", - report=report_name, - roles=[dict(role="HR User"), dict(role="HR Manager"), dict(role="Employee")], - ) - ).insert() - - for report_name in ("HSN-wise-summary of outward supplies", "GSTR-1", "GSTR-2"): - - if not frappe.db.get_value("Custom Role", dict(report=report_name)): - frappe.get_doc( - dict( - doctype="Custom Role", - report=report_name, - roles=[dict(role="Accounts User"), dict(role="Accounts Manager"), dict(role="Auditor")], - ) - ).insert() - - -def add_permissions(): - for doctype in ( - "GST HSN Code", - "GST Settings", - "GSTR 3B Report", - "Lower Deduction Certificate", - "E Invoice Settings", - ): - add_permission(doctype, "All", 0) - for role in ("Accounts Manager", "Accounts User", "System Manager"): - add_permission(doctype, role, 0) - update_permission_property(doctype, role, 0, "write", 1) - update_permission_property(doctype, role, 0, "create", 1) - - if doctype == "GST HSN Code": - for role in ("Item Manager", "Stock Manager"): - add_permission(doctype, role, 0) - update_permission_property(doctype, role, 0, "write", 1) - update_permission_property(doctype, role, 0, "create", 1) - - -def add_print_formats(): - frappe.reload_doc("regional", "print_format", "gst_tax_invoice") - frappe.reload_doc("selling", "print_format", "gst_pos_invoice") - frappe.reload_doc("accounts", "print_format", "GST E-Invoice") - - frappe.db.set_value("Print Format", "GST POS Invoice", "disabled", 0) - frappe.db.set_value("Print Format", "GST Tax Invoice", "disabled", 0) - frappe.db.set_value("Print Format", "GST E-Invoice", "disabled", 0) - - -def make_property_setters(patch=False): - # GST rules do not allow for an invoice no. bigger than 16 characters - journal_entry_types = frappe.get_meta("Journal Entry").get_options("voucher_type").split("\n") + [ - "Reversal Of ITC" - ] - sales_invoice_series = ["SINV-.YY.-", "SRET-.YY.-", ""] + frappe.get_meta( - "Sales Invoice" - ).get_options("naming_series").split("\n") - purchase_invoice_series = ["PINV-.YY.-", "PRET-.YY.-", ""] + frappe.get_meta( - "Purchase Invoice" - ).get_options("naming_series").split("\n") - - if not patch: - make_property_setter( - "Sales Invoice", "naming_series", "options", "\n".join(sales_invoice_series), "" - ) - make_property_setter( - "Purchase Invoice", "naming_series", "options", "\n".join(purchase_invoice_series), "" - ) - make_property_setter( - "Journal Entry", "voucher_type", "options", "\n".join(journal_entry_types), "" - ) - - -def make_custom_fields(update=True): - custom_fields = get_custom_fields() - create_custom_fields(custom_fields, update=update) - - -def get_custom_fields(): - hsn_sac_field = dict( - fieldname="gst_hsn_code", - label="HSN/SAC", - fieldtype="Data", - fetch_from="item_code.gst_hsn_code", - insert_after="description", - allow_on_submit=1, - print_hide=1, - fetch_if_empty=1, - ) - nil_rated_exempt = dict( - fieldname="is_nil_exempt", - label="Is Nil Rated or Exempted", - fieldtype="Check", - fetch_from="item_code.is_nil_exempt", - insert_after="gst_hsn_code", - print_hide=1, - ) - is_non_gst = dict( - fieldname="is_non_gst", - label="Is Non GST", - fieldtype="Check", - fetch_from="item_code.is_non_gst", - insert_after="is_nil_exempt", - print_hide=1, - ) - taxable_value = dict( - fieldname="taxable_value", - label="Taxable Value", - fieldtype="Currency", - insert_after="base_net_amount", - hidden=1, - options="Company:company:default_currency", - print_hide=1, - ) - - purchase_invoice_gst_category = [ - dict( - fieldname="gst_section", - label="GST Details", - fieldtype="Section Break", - insert_after="language", - print_hide=1, - collapsible=1, - ), - dict( - fieldname="gst_category", - label="GST Category", - fieldtype="Select", - insert_after="gst_section", - print_hide=1, - options="\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nUIN Holders", - fetch_from="supplier.gst_category", - fetch_if_empty=1, - ), - dict( - fieldname="export_type", - label="Export Type", - fieldtype="Select", - insert_after="gst_category", - print_hide=1, - depends_on='eval:in_list(["SEZ", "Overseas"], doc.gst_category)', - options="\nWith Payment of Tax\nWithout Payment of Tax", - fetch_from="supplier.export_type", - fetch_if_empty=1, - ), - ] - - sales_invoice_gst_category = [ - dict( - fieldname="gst_section", - label="GST Details", - fieldtype="Section Break", - insert_after="language", - print_hide=1, - collapsible=1, - ), - dict( - fieldname="gst_category", - label="GST Category", - fieldtype="Select", - insert_after="gst_section", - print_hide=1, - options="\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders", - fetch_from="customer.gst_category", - fetch_if_empty=1, - length=25, - ), - dict( - fieldname="export_type", - label="Export Type", - fieldtype="Select", - insert_after="gst_category", - print_hide=1, - depends_on='eval:in_list(["SEZ", "Overseas", "Deemed Export"], doc.gst_category)', - options="\nWith Payment of Tax\nWithout Payment of Tax", - fetch_from="customer.export_type", - fetch_if_empty=1, - length=25, - ), - ] - - delivery_note_gst_category = [ - dict( - fieldname="gst_category", - label="GST Category", - fieldtype="Select", - insert_after="gst_vehicle_type", - print_hide=1, - options="\nRegistered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders", - fetch_from="customer.gst_category", - fetch_if_empty=1, - ), - ] - - invoice_gst_fields = [ - dict( - fieldname="invoice_copy", - label="Invoice Copy", - length=30, - fieldtype="Select", - insert_after="export_type", - print_hide=1, - allow_on_submit=1, - options="Original for Recipient\nDuplicate for Transporter\nDuplicate for Supplier\nTriplicate for Supplier", - ), - dict( - fieldname="reverse_charge", - label="Reverse Charge", - length=2, - fieldtype="Select", - insert_after="invoice_copy", - print_hide=1, - options="Y\nN", - default="N", - ), - dict( - fieldname="ecommerce_gstin", - label="E-commerce GSTIN", - length=15, - fieldtype="Data", - insert_after="export_type", - print_hide=1, - ), - dict(fieldname="gst_col_break", fieldtype="Column Break", insert_after="ecommerce_gstin"), - dict( - fieldname="reason_for_issuing_document", - label="Reason For Issuing document", - fieldtype="Select", - insert_after="gst_col_break", - print_hide=1, - depends_on="eval:doc.is_return==1", - length=45, - options="\n01-Sales Return\n02-Post Sale Discount\n03-Deficiency in services\n04-Correction in Invoice\n05-Change in POS\n06-Finalization of Provisional assessment\n07-Others", - ), - ] - - purchase_invoice_gst_fields = [ - dict( - fieldname="supplier_gstin", - label="Supplier GSTIN", - fieldtype="Data", - insert_after="supplier_address", - fetch_from="supplier_address.gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="shipping_address_display", - fetch_from="shipping_address.gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="shipping_address", - print_hide=1, - read_only=1, - ), - ] - - purchase_invoice_itc_fields = [ - dict( - fieldname="eligibility_for_itc", - label="Eligibility For ITC", - fieldtype="Select", - insert_after="reason_for_issuing_document", - print_hide=1, - options="Input Service Distributor\nImport Of Service\nImport Of Capital Goods\nITC on Reverse Charge\nIneligible As Per Section 17(5)\nIneligible Others\nAll Other ITC", - default="All Other ITC", - ), - dict( - fieldname="itc_integrated_tax", - label="Availed ITC Integrated Tax", - fieldtype="Currency", - insert_after="eligibility_for_itc", - options="Company:company:default_currency", - print_hide=1, - ), - dict( - fieldname="itc_central_tax", - label="Availed ITC Central Tax", - fieldtype="Currency", - insert_after="itc_integrated_tax", - options="Company:company:default_currency", - print_hide=1, - ), - dict( - fieldname="itc_state_tax", - label="Availed ITC State/UT Tax", - fieldtype="Currency", - insert_after="itc_central_tax", - options="Company:company:default_currency", - print_hide=1, - ), - dict( - fieldname="itc_cess_amount", - label="Availed ITC Cess", - fieldtype="Currency", - insert_after="itc_state_tax", - options="Company:company:default_currency", - print_hide=1, - ), - ] - - sales_invoice_gst_fields = [ - dict( - fieldname="billing_address_gstin", - label="Billing Address GSTIN", - fieldtype="Data", - insert_after="customer_address", - read_only=1, - fetch_from="customer_address.gstin", - print_hide=1, - length=15, - ), - dict( - fieldname="customer_gstin", - label="Customer GSTIN", - fieldtype="Data", - insert_after="shipping_address_name", - fetch_from="shipping_address_name.gstin", - print_hide=1, - length=15, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="customer_gstin", - print_hide=1, - read_only=1, - length=50, - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="company_address", - fetch_from="company_address.gstin", - print_hide=1, - read_only=1, - length=15, - ), - ] - - sales_invoice_shipping_fields = [ - dict( - fieldname="port_code", - label="Port Code", - fieldtype="Data", - insert_after="reason_for_issuing_document", - print_hide=1, - depends_on="eval:doc.gst_category=='Overseas' ", - length=15, - ), - dict( - fieldname="shipping_bill_number", - label=" Shipping Bill Number", - fieldtype="Data", - insert_after="port_code", - print_hide=1, - depends_on="eval:doc.gst_category=='Overseas' ", - length=50, - ), - dict( - fieldname="shipping_bill_date", - label="Shipping Bill Date", - fieldtype="Date", - insert_after="shipping_bill_number", - print_hide=1, - depends_on="eval:doc.gst_category=='Overseas' ", - ), - ] - - journal_entry_fields = [ - dict( - fieldname="reversal_type", - label="Reversal Type", - fieldtype="Select", - insert_after="voucher_type", - print_hide=1, - options="As per rules 42 & 43 of CGST Rules\nOthers", - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - dict( - fieldname="company_address", - label="Company Address", - fieldtype="Link", - options="Address", - insert_after="reversal_type", - print_hide=1, - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - read_only=1, - insert_after="company_address", - print_hide=1, - fetch_from="company_address.gstin", - depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - mandatory_depends_on="eval:doc.voucher_type=='Reversal Of ITC'", - ), - ] - - inter_state_gst_field = [ - dict( - fieldname="is_inter_state", - label="Is Inter State", - fieldtype="Check", - insert_after="disabled", - print_hide=1, - ), - dict( - fieldname="is_reverse_charge", - label="Is Reverse Charge", - fieldtype="Check", - insert_after="is_inter_state", - print_hide=1, - ), - dict( - fieldname="tax_category_column_break", - fieldtype="Column Break", - insert_after="is_reverse_charge", - ), - dict( - fieldname="gst_state", - label="Source State", - fieldtype="Select", - options="\n".join(states), - insert_after="company", - ), - ] - - ewaybill_fields = [ - { - "fieldname": "distance", - "label": "Distance (in km)", - "fieldtype": "Float", - "insert_after": "vehicle_no", - "print_hide": 1, - }, - { - "fieldname": "gst_transporter_id", - "label": "GST Transporter ID", - "fieldtype": "Data", - "insert_after": "transporter", - "fetch_from": "transporter.gst_transporter_id", - "print_hide": 1, - "translatable": 0, - }, - { - "fieldname": "mode_of_transport", - "label": "Mode of Transport", - "fieldtype": "Select", - "options": "\nRoad\nAir\nRail\nShip", - "default": "Road", - "insert_after": "transporter_name", - "print_hide": 1, - "translatable": 0, - }, - { - "fieldname": "gst_vehicle_type", - "label": "GST Vehicle Type", - "fieldtype": "Select", - "options": "Regular\nOver Dimensional Cargo (ODC)", - "depends_on": 'eval:(doc.mode_of_transport === "Road")', - "default": "Regular", - "insert_after": "lr_date", - "print_hide": 1, - "translatable": 0, - }, - { - "fieldname": "ewaybill", - "label": "E-Way Bill No.", - "fieldtype": "Data", - "depends_on": "eval:(doc.docstatus === 1)", - "allow_on_submit": 1, - "insert_after": "customer_name_in_arabic", - "translatable": 0, - }, - ] - - si_ewaybill_fields = [ - { - "fieldname": "transporter_info", - "label": "Transporter Info", - "fieldtype": "Section Break", - "insert_after": "terms", - "collapsible": 1, - "collapsible_depends_on": "transporter", - "print_hide": 1, - }, - { - "fieldname": "transporter", - "label": "Transporter", - "fieldtype": "Link", - "insert_after": "transporter_info", - "options": "Supplier", - "print_hide": 1, - }, - { - "fieldname": "gst_transporter_id", - "label": "GST Transporter ID", - "fieldtype": "Data", - "insert_after": "transporter", - "fetch_from": "transporter.gst_transporter_id", - "print_hide": 1, - "translatable": 0, - "length": 20, - }, - { - "fieldname": "driver", - "label": "Driver", - "fieldtype": "Link", - "insert_after": "gst_transporter_id", - "options": "Driver", - "print_hide": 1, - }, - { - "fieldname": "lr_no", - "label": "Transport Receipt No", - "fieldtype": "Data", - "insert_after": "driver", - "print_hide": 1, - "translatable": 0, - "length": 30, - }, - { - "fieldname": "vehicle_no", - "label": "Vehicle No", - "fieldtype": "Data", - "insert_after": "lr_no", - "print_hide": 1, - "translatable": 0, - "length": 10, - }, - { - "fieldname": "distance", - "label": "Distance (in km)", - "fieldtype": "Float", - "insert_after": "vehicle_no", - "print_hide": 1, - }, - {"fieldname": "transporter_col_break", "fieldtype": "Column Break", "insert_after": "distance"}, - { - "fieldname": "transporter_name", - "label": "Transporter Name", - "fieldtype": "Small Text", - "insert_after": "transporter_col_break", - "fetch_from": "transporter.name", - "read_only": 1, - "print_hide": 1, - "translatable": 0, - }, - { - "fieldname": "mode_of_transport", - "label": "Mode of Transport", - "fieldtype": "Select", - "options": "\nRoad\nAir\nRail\nShip", - "insert_after": "transporter_name", - "print_hide": 1, - "translatable": 0, - "length": 5, - }, - { - "fieldname": "driver_name", - "label": "Driver Name", - "fieldtype": "Small Text", - "insert_after": "mode_of_transport", - "fetch_from": "driver.full_name", - "print_hide": 1, - "translatable": 0, - }, - { - "fieldname": "lr_date", - "label": "Transport Receipt Date", - "fieldtype": "Date", - "insert_after": "driver_name", - "default": "Today", - "print_hide": 1, - }, - { - "fieldname": "gst_vehicle_type", - "label": "GST Vehicle Type", - "fieldtype": "Select", - "options": "Regular\nOver Dimensional Cargo (ODC)", - "depends_on": 'eval:(doc.mode_of_transport === "Road")', - "default": "Regular", - "insert_after": "lr_date", - "print_hide": 1, - "translatable": 0, - "length": 30, - }, - { - "fieldname": "ewaybill", - "label": "E-Way Bill No.", - "fieldtype": "Data", - "depends_on": "eval:((doc.docstatus === 1 || doc.ewaybill) && doc.eway_bill_cancelled === 0)", - "allow_on_submit": 1, - "insert_after": "tax_id", - "translatable": 0, - "length": 20, - }, - ] - - payment_entry_fields = [ - dict( - fieldname="gst_section", - label="GST Details", - fieldtype="Section Break", - insert_after="deductions", - print_hide=1, - collapsible=1, - ), - dict( - fieldname="company_address", - label="Company Address", - fieldtype="Link", - insert_after="gst_section", - print_hide=1, - options="Address", - ), - dict( - fieldname="company_gstin", - label="Company GSTIN", - fieldtype="Data", - insert_after="company_address", - fetch_from="company_address.gstin", - print_hide=1, - read_only=1, - ), - dict( - fieldname="place_of_supply", - label="Place of Supply", - fieldtype="Data", - insert_after="company_gstin", - print_hide=1, - read_only=1, - ), - dict(fieldname="gst_column_break", fieldtype="Column Break", insert_after="place_of_supply"), - dict( - fieldname="customer_address", - label="Customer Address", - fieldtype="Link", - insert_after="gst_column_break", - print_hide=1, - options="Address", - depends_on='eval:doc.party_type == "Customer"', - ), - dict( - fieldname="customer_gstin", - label="Customer GSTIN", - fieldtype="Data", - insert_after="customer_address", - fetch_from="customer_address.gstin", - print_hide=1, - read_only=1, - ), - ] - - si_einvoice_fields = [ - dict( - fieldname="irn", - label="IRN", - fieldtype="Data", - read_only=1, - insert_after="customer", - no_copy=1, - print_hide=1, - depends_on='eval:in_list(["Registered Regular", "Registered Composition", "SEZ", "Overseas", "Deemed Export"], doc.gst_category) && doc.irn_cancelled === 0', - ), - dict( - fieldname="irn_cancelled", - label="IRN Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval: doc.irn", - allow_on_submit=1, - insert_after="customer", - ), - dict( - fieldname="eway_bill_validity", - label="E-Way Bill Validity", - fieldtype="Data", - no_copy=1, - print_hide=1, - depends_on="ewaybill", - read_only=1, - allow_on_submit=1, - insert_after="ewaybill", - ), - dict( - fieldname="eway_bill_cancelled", - label="E-Way Bill Cancelled", - fieldtype="Check", - no_copy=1, - print_hide=1, - depends_on="eval:(doc.eway_bill_cancelled === 1)", - read_only=1, - allow_on_submit=1, - insert_after="customer", - ), - dict( - fieldname="einvoice_section", - label="E-Invoice Fields", - fieldtype="Section Break", - insert_after="gst_vehicle_type", - print_hide=1, - hidden=1, - ), - dict( - fieldname="ack_no", - label="Ack. No.", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="einvoice_section", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="ack_date", - label="Ack. Date", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="ack_no", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="irn_cancel_date", - label="Cancel Date", - fieldtype="Data", - read_only=1, - hidden=1, - insert_after="ack_date", - no_copy=1, - print_hide=1, - ), - dict( - fieldname="signed_einvoice", - label="Signed E-Invoice", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="irn_cancel_date", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="signed_qr_code", - label="Signed QRCode", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="signed_einvoice", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="qrcode_image", - label="QRCode", - fieldtype="Attach Image", - hidden=1, - insert_after="signed_qr_code", - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="einvoice_status", - label="E-Invoice Status", - fieldtype="Select", - insert_after="qrcode_image", - options="\nPending\nGenerated\nCancelled\nFailed", - default=None, - hidden=1, - no_copy=1, - print_hide=1, - read_only=1, - ), - dict( - fieldname="failure_description", - label="E-Invoice Failure Description", - fieldtype="Code", - options="JSON", - hidden=1, - insert_after="einvoice_status", - no_copy=1, - print_hide=1, - read_only=1, - ), - ] - - custom_fields = { - "Address": [ - dict(fieldname="gstin", label="Party GSTIN", fieldtype="Data", insert_after="fax"), - dict( - fieldname="gst_state", - label="GST State", - fieldtype="Select", - options="\n".join(states), - insert_after="gstin", - ), - dict( - fieldname="gst_state_number", - label="GST State Number", - fieldtype="Data", - insert_after="gst_state", - read_only=1, - ), - ], - "Purchase Invoice": purchase_invoice_gst_category - + invoice_gst_fields - + purchase_invoice_itc_fields - + purchase_invoice_gst_fields, - "Purchase Order": purchase_invoice_gst_fields, - "Purchase Receipt": purchase_invoice_gst_fields, - "Sales Invoice": sales_invoice_gst_category - + invoice_gst_fields - + sales_invoice_shipping_fields - + sales_invoice_gst_fields - + si_ewaybill_fields - + si_einvoice_fields, - "POS Invoice": sales_invoice_gst_fields, - "Delivery Note": sales_invoice_gst_fields - + ewaybill_fields - + sales_invoice_shipping_fields - + delivery_note_gst_category, - "Payment Entry": payment_entry_fields, - "Journal Entry": journal_entry_fields, - "Sales Order": sales_invoice_gst_fields, - "Tax Category": inter_state_gst_field, - "Quotation": sales_invoice_gst_fields, - "Item": [ - dict( - fieldname="gst_hsn_code", - label="HSN/SAC", - fieldtype="Link", - options="GST HSN Code", - insert_after="item_group", - ), - dict( - fieldname="is_nil_exempt", - label="Is Nil Rated or Exempted", - fieldtype="Check", - insert_after="gst_hsn_code", - ), - dict( - fieldname="is_non_gst", label="Is Non GST ", fieldtype="Check", insert_after="is_nil_exempt" - ), - ], - "Quotation Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Supplier Quotation Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Sales Order Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Delivery Note Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Sales Invoice Item": [hsn_sac_field, nil_rated_exempt, is_non_gst, taxable_value], - "POS Invoice Item": [hsn_sac_field, nil_rated_exempt, is_non_gst, taxable_value], - "Purchase Order Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Purchase Receipt Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Purchase Invoice Item": [hsn_sac_field, nil_rated_exempt, is_non_gst, taxable_value], - "Material Request Item": [hsn_sac_field, nil_rated_exempt, is_non_gst], - "Salary Component": [ - dict( - fieldname="component_type", - label="Component Type", - fieldtype="Select", - insert_after="description", - options="\nProvident Fund\nAdditional Provident Fund\nProvident Fund Loan\nProfessional Tax", - depends_on='eval:doc.type == "Deduction"', - ) - ], - "Employee": [ - dict( - fieldname="ifsc_code", - label="IFSC Code", - fieldtype="Data", - insert_after="bank_ac_no", - print_hide=1, - depends_on='eval:doc.salary_mode == "Bank"', - ), - dict( - fieldname="pan_number", - label="PAN Number", - fieldtype="Data", - insert_after="payroll_cost_center", - print_hide=1, - ), - dict( - fieldname="micr_code", - label="MICR Code", - fieldtype="Data", - insert_after="ifsc_code", - print_hide=1, - depends_on='eval:doc.salary_mode == "Bank"', - ), - dict( - fieldname="provident_fund_account", - label="Provident Fund Account", - fieldtype="Data", - insert_after="pan_number", - ), - ], - "Company": [ - dict( - fieldname="hra_section", - label="HRA Settings", - fieldtype="Section Break", - insert_after="asset_received_but_not_billed", - collapsible=1, - ), - dict( - fieldname="basic_component", - label="Basic Component", - fieldtype="Link", - options="Salary Component", - insert_after="hra_section", - ), - dict( - fieldname="hra_component", - label="HRA Component", - fieldtype="Link", - options="Salary Component", - insert_after="basic_component", - ), - dict(fieldname="hra_column_break", fieldtype="Column Break", insert_after="hra_component"), - dict( - fieldname="arrear_component", - label="Arrear Component", - fieldtype="Link", - options="Salary Component", - insert_after="hra_column_break", - ), - ], - "Employee Tax Exemption Declaration": [ - dict( - fieldname="hra_section", - label="HRA Exemption", - fieldtype="Section Break", - insert_after="declarations", - ), - dict( - fieldname="monthly_house_rent", - label="Monthly House Rent", - fieldtype="Currency", - insert_after="hra_section", - ), - dict( - fieldname="rented_in_metro_city", - label="Rented in Metro City", - fieldtype="Check", - insert_after="monthly_house_rent", - depends_on="monthly_house_rent", - ), - dict( - fieldname="salary_structure_hra", - label="HRA as per Salary Structure", - fieldtype="Currency", - insert_after="rented_in_metro_city", - read_only=1, - depends_on="monthly_house_rent", - ), - dict( - fieldname="hra_column_break", - fieldtype="Column Break", - insert_after="salary_structure_hra", - depends_on="monthly_house_rent", - ), - dict( - fieldname="annual_hra_exemption", - label="Annual HRA Exemption", - fieldtype="Currency", - insert_after="hra_column_break", - read_only=1, - depends_on="monthly_house_rent", - ), - dict( - fieldname="monthly_hra_exemption", - label="Monthly HRA Exemption", - fieldtype="Currency", - insert_after="annual_hra_exemption", - read_only=1, - depends_on="monthly_house_rent", - ), - ], - "Employee Tax Exemption Proof Submission": [ - dict( - fieldname="hra_section", - label="HRA Exemption", - fieldtype="Section Break", - insert_after="tax_exemption_proofs", - ), - dict( - fieldname="house_rent_payment_amount", - label="House Rent Payment Amount", - fieldtype="Currency", - insert_after="hra_section", - ), - dict( - fieldname="rented_in_metro_city", - label="Rented in Metro City", - fieldtype="Check", - insert_after="house_rent_payment_amount", - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="rented_from_date", - label="Rented From Date", - fieldtype="Date", - insert_after="rented_in_metro_city", - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="rented_to_date", - label="Rented To Date", - fieldtype="Date", - insert_after="rented_from_date", - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="hra_column_break", - fieldtype="Column Break", - insert_after="rented_to_date", - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="monthly_house_rent", - label="Monthly House Rent", - fieldtype="Currency", - insert_after="hra_column_break", - read_only=1, - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="monthly_hra_exemption", - label="Monthly Eligible Amount", - fieldtype="Currency", - insert_after="monthly_house_rent", - read_only=1, - depends_on="house_rent_payment_amount", - ), - dict( - fieldname="total_eligible_hra_exemption", - label="Total Eligible HRA Exemption", - fieldtype="Currency", - insert_after="monthly_hra_exemption", - read_only=1, - depends_on="house_rent_payment_amount", - ), - ], - "Supplier": [ - {"fieldname": "pan", "label": "PAN", "fieldtype": "Data", "insert_after": "supplier_type"}, - { - "fieldname": "gst_transporter_id", - "label": "GST Transporter ID", - "fieldtype": "Data", - "insert_after": "pan", - "depends_on": "eval:doc.is_transporter", - }, - { - "fieldname": "gst_category", - "label": "GST Category", - "fieldtype": "Select", - "insert_after": "gst_transporter_id", - "options": "Registered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nUIN Holders", - "default": "Unregistered", - }, - { - "fieldname": "export_type", - "label": "Export Type", - "fieldtype": "Select", - "insert_after": "gst_category", - "depends_on": 'eval:in_list(["SEZ", "Overseas"], doc.gst_category)', - "options": "\nWith Payment of Tax\nWithout Payment of Tax", - "mandatory_depends_on": 'eval:in_list(["SEZ", "Overseas"], doc.gst_category)', - }, - ], - "Customer": [ - {"fieldname": "pan", "label": "PAN", "fieldtype": "Data", "insert_after": "customer_type"}, - { - "fieldname": "gst_category", - "label": "GST Category", - "fieldtype": "Select", - "insert_after": "pan", - "options": "Registered Regular\nRegistered Composition\nUnregistered\nSEZ\nOverseas\nConsumer\nDeemed Export\nUIN Holders", - "default": "Unregistered", - }, - { - "fieldname": "export_type", - "label": "Export Type", - "fieldtype": "Select", - "insert_after": "gst_category", - "depends_on": 'eval:in_list(["SEZ", "Overseas", "Deemed Export"], doc.gst_category)', - "options": "\nWith Payment of Tax\nWithout Payment of Tax", - "mandatory_depends_on": 'eval:in_list(["SEZ", "Overseas", "Deemed Export"], doc.gst_category)', - }, - ], - "Finance Book": [ - { - "fieldname": "for_income_tax", - "label": "For Income Tax", - "fieldtype": "Check", - "insert_after": "finance_book_name", - "description": "If the asset is put to use for less than 180 days, the first Depreciation Rate will be reduced by 50%.", - } - ], - } - - return custom_fields - - -def make_fixtures(company=None): - docs = [] - company = company or frappe.db.get_value("Global Defaults", None, "default_company") - - set_salary_components(docs) - set_tds_account(docs, company) - - for d in docs: - try: - doc = frappe.get_doc(d) - doc.flags.ignore_permissions = True - doc.insert(ignore_if_duplicate=True) - except frappe.NameError: - frappe.clear_messages() - except frappe.DuplicateEntryError: - frappe.clear_messages() - - # create records for Tax Withholding Category - set_tax_withholding_category(company) - - -def update_regional_tax_settings(country, company): - # Will only add default GST accounts if present - input_account_names = ["Input Tax CGST", "Input Tax SGST", "Input Tax IGST"] - output_account_names = ["Output Tax CGST", "Output Tax SGST", "Output Tax IGST"] - rcm_accounts = ["Input Tax CGST RCM", "Input Tax SGST RCM", "Input Tax IGST RCM"] - gst_settings = frappe.get_single("GST Settings") - existing_account_list = [] - - for account in gst_settings.get("gst_accounts"): - for key in ["cgst_account", "sgst_account", "igst_account"]: - existing_account_list.append(account.get(key)) - - gst_accounts = frappe._dict( - frappe.get_all( - "Account", - { - "company": company, - "account_name": ("in", input_account_names + output_account_names + rcm_accounts), - }, - ["account_name", "name"], - as_list=1, - ) - ) - - add_accounts_in_gst_settings( - company, input_account_names, gst_accounts, existing_account_list, gst_settings - ) - add_accounts_in_gst_settings( - company, output_account_names, gst_accounts, existing_account_list, gst_settings - ) - add_accounts_in_gst_settings( - company, rcm_accounts, gst_accounts, existing_account_list, gst_settings, is_reverse_charge=1 - ) - - gst_settings.save() - - -def add_accounts_in_gst_settings( - company, account_names, gst_accounts, existing_account_list, gst_settings, is_reverse_charge=0 -): - accounts_not_added = 1 - - for account in account_names: - # Default Account Added does not exists - if not gst_accounts.get(account): - accounts_not_added = 0 - - # Check if already added in GST Settings - if gst_accounts.get(account) in existing_account_list: - accounts_not_added = 0 - - if accounts_not_added: - gst_settings.append( - "gst_accounts", - { - "company": company, - "cgst_account": gst_accounts.get(account_names[0]), - "sgst_account": gst_accounts.get(account_names[1]), - "igst_account": gst_accounts.get(account_names[2]), - "is_reverse_charge_account": is_reverse_charge, - }, - ) - - -def set_salary_components(docs): - docs.extend( - [ - { - "doctype": "Salary Component", - "salary_component": "Professional Tax", - "description": "Professional Tax", - "type": "Deduction", - "exempted_from_income_tax": 1, - }, - { - "doctype": "Salary Component", - "salary_component": "Provident Fund", - "description": "Provident fund", - "type": "Deduction", - "is_tax_applicable": 1, - }, - { - "doctype": "Salary Component", - "salary_component": "House Rent Allowance", - "description": "House Rent Allowance", - "type": "Earning", - "is_tax_applicable": 1, - }, - { - "doctype": "Salary Component", - "salary_component": "Basic", - "description": "Basic", - "type": "Earning", - "is_tax_applicable": 1, - }, - { - "doctype": "Salary Component", - "salary_component": "Arrear", - "description": "Arrear", - "type": "Earning", - "is_tax_applicable": 1, - }, - { - "doctype": "Salary Component", - "salary_component": "Leave Encashment", - "description": "Leave Encashment", - "type": "Earning", - "is_tax_applicable": 1, - }, - ] - ) - - -def set_tax_withholding_category(company): - accounts = [] - fiscal_year_details = None - abbr = frappe.get_value("Company", company, "abbr") - tds_account = frappe.get_value("Account", "TDS Payable - {0}".format(abbr), "name") - - if company and tds_account: - accounts = [dict(company=company, account=tds_account)] - - try: - fiscal_year_details = get_fiscal_year(today(), verbose=0) - except FiscalYearError: - pass - - docs = get_tds_details(accounts, fiscal_year_details) - - for d in docs: - if not frappe.db.exists("Tax Withholding Category", d.get("name")): - doc = frappe.get_doc(d) - doc.flags.ignore_validate = True - doc.flags.ignore_permissions = True - doc.flags.ignore_mandatory = True - doc.insert() - else: - doc = frappe.get_doc("Tax Withholding Category", d.get("name"), for_update=True) - - if accounts: - doc.append("accounts", accounts[0]) - - if fiscal_year_details: - # if fiscal year don't match with any of the already entered data, append rate row - fy_exist = [ - k - for k in doc.get("rates") - if k.get("from_date") <= fiscal_year_details[1] and k.get("to_date") >= fiscal_year_details[2] - ] - if not fy_exist: - doc.append("rates", d.get("rates")[0]) - - doc.flags.ignore_permissions = True - doc.flags.ignore_validate = True - doc.flags.ignore_mandatory = True - doc.flags.ignore_links = True - doc.save() - - -def set_tds_account(docs, company): - parent_account = frappe.db.get_value( - "Account", filters={"account_name": "Duties and Taxes", "company": company} - ) - if parent_account: - docs.extend( - [ - { - "doctype": "Account", - "account_name": "TDS Payable", - "account_type": "Tax", - "parent_account": parent_account, - "company": company, - } - ] - ) - - -def get_tds_details(accounts, fiscal_year_details): - # bootstrap default tax withholding sections - return [ - dict( - name="TDS - 194C - Company", - category_name="Payment to Contractors (Single / Aggregate)", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 2, - "single_threshold": 30000, - "cumulative_threshold": 100000, - } - ], - ), - dict( - name="TDS - 194C - Individual", - category_name="Payment to Contractors (Single / Aggregate)", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 1, - "single_threshold": 30000, - "cumulative_threshold": 100000, - } - ], - ), - dict( - name="TDS - 194C - No PAN / Invalid PAN", - category_name="Payment to Contractors (Single / Aggregate)", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 30000, - "cumulative_threshold": 100000, - } - ], - ), - dict( - name="TDS - 194D - Company", - category_name="Insurance Commission", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 5, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194D - Company Assessee", - category_name="Insurance Commission", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194D - Individual", - category_name="Insurance Commission", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 5, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194D - No PAN / Invalid PAN", - category_name="Insurance Commission", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194DA - Company", - category_name="Non-exempt payments made under a life insurance policy", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 1, - "single_threshold": 100000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194DA - Individual", - category_name="Non-exempt payments made under a life insurance policy", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 1, - "single_threshold": 100000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194DA - No PAN / Invalid PAN", - category_name="Non-exempt payments made under a life insurance policy", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 100000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194H - Company", - category_name="Commission / Brokerage", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 5, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194H - Individual", - category_name="Commission / Brokerage", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 5, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194H - No PAN / Invalid PAN", - category_name="Commission / Brokerage", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 15000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent - Company", - category_name="Rent", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent - Individual", - category_name="Rent", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent - No PAN / Invalid PAN", - category_name="Rent", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent/Machinery - Company", - category_name="Rent-Plant / Machinery", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 2, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent/Machinery - Individual", - category_name="Rent-Plant / Machinery", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 2, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194I - Rent/Machinery - No PAN / Invalid PAN", - category_name="Rent-Plant / Machinery", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 180000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Professional Fees - Company", - category_name="Professional Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 30000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Professional Fees - Individual", - category_name="Professional Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 30000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Professional Fees - No PAN / Invalid PAN", - category_name="Professional Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 30000, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Director Fees - Company", - category_name="Director Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 0, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Director Fees - Individual", - category_name="Director Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 0, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194J - Director Fees - No PAN / Invalid PAN", - category_name="Director Fees", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 0, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194 - Dividends - Company", - category_name="Dividends", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 2500, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194 - Dividends - Individual", - category_name="Dividends", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 10, - "single_threshold": 2500, - "cumulative_threshold": 0, - } - ], - ), - dict( - name="TDS - 194 - Dividends - No PAN / Invalid PAN", - category_name="Dividends", - doctype="Tax Withholding Category", - accounts=accounts, - rates=[ - { - "from_date": fiscal_year_details[1], - "to_date": fiscal_year_details[2], - "tax_withholding_rate": 20, - "single_threshold": 2500, - "cumulative_threshold": 0, - } - ], - ), - ] - - -def create_gratuity_rule(): - # Standard Indain Gratuity Rule - if not frappe.db.exists("Gratuity Rule", "Indian Standard Gratuity Rule"): - rule = frappe.new_doc("Gratuity Rule") - rule.name = "Indian Standard Gratuity Rule" - rule.calculate_gratuity_amount_based_on = "Current Slab" - rule.work_experience_calculation_method = "Round Off Work Experience" - rule.minimum_year_for_gratuity = 5 - - fraction = 15 / 26 - rule.append( - "gratuity_rule_slabs", - {"from_year": 0, "to_year": 0, "fraction_of_applicable_earnings": fraction}, - ) - - rule.flags.ignore_mandatory = True - rule.save() - - -def update_accounts_settings_for_taxes(): - if frappe.db.count("Company") == 1: - frappe.db.set_value("Accounts Settings", None, "add_taxes_from_item_tax_template", 0) diff --git a/erpnext/regional/india/taxes.js b/erpnext/regional/india/taxes.js deleted file mode 100644 index 5f6dcdeb92..0000000000 --- a/erpnext/regional/india/taxes.js +++ /dev/null @@ -1,51 +0,0 @@ -erpnext.setup_auto_gst_taxation = (doctype) => { - frappe.ui.form.on(doctype, { - company_address: function(frm) { - frm.trigger('get_tax_template'); - }, - shipping_address: function(frm) { - frm.trigger('get_tax_template'); - }, - supplier_address: function(frm) { - frm.trigger('get_tax_template'); - }, - tax_category: function(frm) { - frm.trigger('get_tax_template'); - }, - customer_address: function(frm) { - frm.trigger('get_tax_template'); - }, - get_tax_template: function(frm) { - if (!frm.doc.company) return; - - let party_details = { - 'shipping_address': frm.doc.shipping_address || '', - 'shipping_address_name': frm.doc.shipping_address_name || '', - 'customer_address': frm.doc.customer_address || '', - 'supplier_address': frm.doc.supplier_address, - 'customer': frm.doc.customer, - 'supplier': frm.doc.supplier, - 'supplier_gstin': frm.doc.supplier_gstin, - 'company_gstin': frm.doc.company_gstin, - 'tax_category': frm.doc.tax_category - }; - - frappe.call({ - method: 'erpnext.regional.india.utils.get_regional_address_details', - args: { - party_details: JSON.stringify(party_details), - doctype: frm.doc.doctype, - company: frm.doc.company - }, - debounce: 2000, - callback: function(r) { - if(r.message) { - frm.set_value('taxes_and_charges', r.message.taxes_and_charges); - frm.set_value('taxes', r.message.taxes); - frm.set_value('place_of_supply', r.message.place_of_supply); - } - } - }); - } - }); -} diff --git a/erpnext/regional/india/test_utils.py b/erpnext/regional/india/test_utils.py deleted file mode 100644 index 5c248307ec..0000000000 --- a/erpnext/regional/india/test_utils.py +++ /dev/null @@ -1,36 +0,0 @@ -import unittest -from unittest.mock import patch - -import frappe - -from erpnext.regional.india.utils import validate_document_name - - -class TestIndiaUtils(unittest.TestCase): - @patch("frappe.get_cached_value") - def test_validate_document_name(self, mock_get_cached): - mock_get_cached.return_value = "India" # mock country - posting_date = "2021-05-01" - - invalid_names = ["SI$1231", "012345678901234567", "SI 2020 05", "SI.2020.0001", "PI2021 - 001"] - for name in invalid_names: - doc = frappe._dict(name=name, posting_date=posting_date) - self.assertRaises(frappe.ValidationError, validate_document_name, doc) - - valid_names = ["012345678901236", "SI/2020/0001", "SI/2020-0001", "2020-PI-0001", "PI2020-0001"] - for name in valid_names: - doc = frappe._dict(name=name, posting_date=posting_date) - try: - validate_document_name(doc) - except frappe.ValidationError: - self.fail("Valid name {} throwing error".format(name)) - - @patch("frappe.get_cached_value") - def test_validate_document_name_not_india(self, mock_get_cached): - mock_get_cached.return_value = "Not India" - doc = frappe._dict(name="SI$123", posting_date="2021-05-01") - - try: - validate_document_name(doc) - except frappe.ValidationError: - self.fail("Regional validation related to India are being applied to other countries") diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py deleted file mode 100644 index 0b6fcc6f7a..0000000000 --- a/erpnext/regional/india/utils.py +++ /dev/null @@ -1,1061 +0,0 @@ -import json -import re - -import frappe -from frappe import _ -from frappe.model.utils import get_fetch_values -from frappe.utils import cint, cstr, date_diff, flt, getdate, nowdate - -from erpnext.controllers.accounts_controller import get_taxes_and_charges -from erpnext.controllers.taxes_and_totals import get_itemised_tax, get_itemised_taxable_amount -from erpnext.hr.utils import get_salary_assignment -from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip -from erpnext.regional.india import number_state_mapping, state_numbers, states - -GST_INVOICE_NUMBER_FORMAT = re.compile(r"^[a-zA-Z0-9\-/]+$") # alphanumeric and - / -GSTIN_FORMAT = re.compile( - "^[0-9]{2}[A-Z]{4}[0-9A-Z]{1}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}[1-9A-Z]{1}[0-9A-Z]{1}$" -) -GSTIN_UIN_FORMAT = re.compile("^[0-9]{4}[A-Z]{3}[0-9]{5}[0-9A-Z]{3}") -PAN_NUMBER_FORMAT = re.compile("[A-Z]{5}[0-9]{4}[A-Z]{1}") - - -def validate_gstin_for_india(doc, method): - if hasattr(doc, "gst_state"): - set_gst_state_and_state_number(doc) - - if not hasattr(doc, "gstin") or not doc.gstin: - return - - gst_category = [] - - if hasattr(doc, "gst_category"): - if len(doc.links): - link_doctype = doc.links[0].get("link_doctype") - link_name = doc.links[0].get("link_name") - - if link_doctype in ["Customer", "Supplier"]: - gst_category = frappe.db.get_value(link_doctype, {"name": link_name}, ["gst_category"]) - - doc.gstin = doc.gstin.upper().strip() - if not doc.gstin or doc.gstin == "NA": - return - - if len(doc.gstin) != 15: - frappe.throw(_("A GSTIN must have 15 characters."), title=_("Invalid GSTIN")) - - if gst_category and gst_category == "UIN Holders": - if not GSTIN_UIN_FORMAT.match(doc.gstin): - frappe.throw( - _( - "The input you've entered doesn't match the GSTIN format for UIN Holders or Non-Resident OIDAR Service Providers" - ), - title=_("Invalid GSTIN"), - ) - else: - if not GSTIN_FORMAT.match(doc.gstin): - frappe.throw( - _("The input you've entered doesn't match the format of GSTIN."), title=_("Invalid GSTIN") - ) - - validate_gstin_check_digit(doc.gstin) - - if not doc.gst_state: - frappe.throw(_("Please enter GST state"), title=_("Invalid State")) - - if doc.gst_state_number != doc.gstin[:2]: - frappe.throw( - _("First 2 digits of GSTIN should match with State number {0}.").format(doc.gst_state_number), - title=_("Invalid GSTIN"), - ) - - -def validate_pan_for_india(doc, method): - if doc.get("country") != "India" or not doc.get("pan"): - return - - if not PAN_NUMBER_FORMAT.match(doc.pan): - frappe.throw(_("Invalid PAN No. The input you've entered doesn't match the format of PAN.")) - - -def validate_tax_category(doc, method): - if doc.get("gst_state") and frappe.db.get_value( - "Tax Category", - { - "gst_state": doc.gst_state, - "is_inter_state": doc.is_inter_state, - "is_reverse_charge": doc.is_reverse_charge, - }, - ): - if doc.is_inter_state: - frappe.throw( - _("Inter State tax category for GST State {0} already exists").format(doc.gst_state) - ) - else: - frappe.throw( - _("Intra State tax category for GST State {0} already exists").format(doc.gst_state) - ) - - -def update_gst_category(doc, method): - for link in doc.links: - if link.link_doctype in ["Customer", "Supplier"]: - meta = frappe.get_meta(link.link_doctype) - if doc.get("gstin") and meta.has_field("gst_category"): - frappe.db.set_value( - link.link_doctype, - {"name": link.link_name, "gst_category": "Unregistered"}, - "gst_category", - "Registered Regular", - ) - - -def set_gst_state_and_state_number(doc): - if not doc.gst_state and doc.state: - state = doc.state.lower() - states_lowercase = {s.lower(): s for s in states} - if state in states_lowercase: - doc.gst_state = states_lowercase[state] - else: - return - doc.gst_state_number = state_numbers.get(doc.gst_state) - - -def validate_gstin_check_digit(gstin, label="GSTIN"): - """Function to validate the check digit of the GSTIN.""" - factor = 1 - total = 0 - code_point_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - mod = len(code_point_chars) - input_chars = gstin[:-1] - for char in input_chars: - digit = factor * code_point_chars.find(char) - digit = (digit // mod) + (digit % mod) - total += digit - factor = 2 if factor == 1 else 1 - if gstin[-1] != code_point_chars[((mod - (total % mod)) % mod)]: - frappe.throw( - _( - """Invalid {0}! The check digit validation has failed. Please ensure you've typed the {0} correctly.""" - ).format(label) - ) - - -def get_itemised_tax_breakup_header(item_doctype, tax_accounts): - hsn_wise_in_gst_settings = frappe.db.get_single_value("GST Settings", "hsn_wise_tax_breakup") - if frappe.get_meta(item_doctype).has_field("gst_hsn_code") and hsn_wise_in_gst_settings: - return [_("HSN/SAC"), _("Taxable Amount")] + tax_accounts - else: - return [_("Item"), _("Taxable Amount")] + tax_accounts - - -def get_itemised_tax_breakup_data(doc, account_wise=False, hsn_wise=False): - itemised_tax = get_itemised_tax(doc.taxes, with_tax_account=account_wise) - - itemised_taxable_amount = get_itemised_taxable_amount(doc.items) - - if not frappe.get_meta(doc.doctype + " Item").has_field("gst_hsn_code"): - return itemised_tax, itemised_taxable_amount - - hsn_wise_in_gst_settings = frappe.db.get_single_value("GST Settings", "hsn_wise_tax_breakup") - - tax_breakup_hsn_wise = hsn_wise or hsn_wise_in_gst_settings - if tax_breakup_hsn_wise: - item_hsn_map = frappe._dict() - for d in doc.items: - item_hsn_map.setdefault(d.item_code or d.item_name, d.get("gst_hsn_code")) - - hsn_tax = {} - for item, taxes in itemised_tax.items(): - item_or_hsn = item if not tax_breakup_hsn_wise else item_hsn_map.get(item) - hsn_tax.setdefault(item_or_hsn, frappe._dict()) - for tax_desc, tax_detail in taxes.items(): - key = tax_desc - if account_wise: - key = tax_detail.get("tax_account") - hsn_tax[item_or_hsn].setdefault(key, {"tax_rate": 0, "tax_amount": 0}) - hsn_tax[item_or_hsn][key]["tax_rate"] = tax_detail.get("tax_rate") - hsn_tax[item_or_hsn][key]["tax_amount"] += tax_detail.get("tax_amount") - - # set taxable amount - hsn_taxable_amount = frappe._dict() - for item in itemised_taxable_amount: - item_or_hsn = item if not tax_breakup_hsn_wise else item_hsn_map.get(item) - hsn_taxable_amount.setdefault(item_or_hsn, 0) - hsn_taxable_amount[item_or_hsn] += itemised_taxable_amount.get(item) - - return hsn_tax, hsn_taxable_amount - - -def set_place_of_supply(doc, method=None): - doc.place_of_supply = get_place_of_supply(doc, doc.doctype) - - -def validate_document_name(doc, method=None): - """Validate GST invoice number requirements.""" - - country = frappe.get_cached_value("Company", doc.company, "country") - - # Date was chosen as start of next FY to avoid irritating current users. - if country != "India" or getdate(doc.posting_date) < getdate("2021-04-01"): - return - - if len(doc.name) > 16: - frappe.throw( - _( - "Maximum length of document number should be 16 characters as per GST rules. Please change the naming series." - ) - ) - - if not GST_INVOICE_NUMBER_FORMAT.match(doc.name): - frappe.throw( - _( - "Document name should only contain alphanumeric values, dash(-) and slash(/) characters as per GST rules. Please change the naming series." - ) - ) - - -# don't remove this function it is used in tests -def test_method(): - """test function""" - return "overridden" - - -def get_place_of_supply(party_details, doctype): - if not frappe.get_meta("Address").has_field("gst_state"): - return - - if doctype in ("Sales Invoice", "Delivery Note", "Sales Order", "Quotation"): - address_name = party_details.customer_address or party_details.shipping_address_name - elif doctype in ("Purchase Invoice", "Purchase Order", "Purchase Receipt"): - address_name = party_details.shipping_address or party_details.supplier_address - - if address_name: - address = frappe.db.get_value( - "Address", address_name, ["gst_state", "gst_state_number", "gstin"], as_dict=1 - ) - if address and address.gst_state and address.gst_state_number: - party_details.gstin = address.gstin - return cstr(address.gst_state_number) + "-" + cstr(address.gst_state) - - -@frappe.whitelist() -def get_regional_address_details(party_details, doctype, company): - if isinstance(party_details, str): - party_details = json.loads(party_details) - party_details = frappe._dict(party_details) - - update_party_details(party_details, doctype) - - party_details.place_of_supply = get_place_of_supply(party_details, doctype) - - if is_internal_transfer(party_details, doctype): - party_details.taxes_and_charges = "" - party_details.taxes = [] - return party_details - - if doctype in ("Sales Invoice", "Delivery Note", "Sales Order", "Quotation"): - master_doctype = "Sales Taxes and Charges Template" - tax_template_by_category = get_tax_template_based_on_category( - master_doctype, company, party_details - ) - - elif doctype in ("Purchase Invoice", "Purchase Order", "Purchase Receipt"): - master_doctype = "Purchase Taxes and Charges Template" - tax_template_by_category = get_tax_template_based_on_category( - master_doctype, company, party_details - ) - - if tax_template_by_category: - party_details["taxes_and_charges"] = tax_template_by_category - party_details["taxes"] = get_taxes_and_charges(master_doctype, tax_template_by_category) - return party_details - - if not party_details.place_of_supply: - return party_details - if not party_details.company_gstin: - return party_details - - if ( - doctype in ("Sales Invoice", "Delivery Note", "Sales Order") - and party_details.company_gstin - and party_details.company_gstin[:2] != party_details.place_of_supply[:2] - ) or ( - doctype in ("Purchase Invoice", "Purchase Order", "Purchase Receipt") - and party_details.supplier_gstin - and party_details.supplier_gstin[:2] != party_details.place_of_supply[:2] - ): - default_tax = get_tax_template(master_doctype, company, 1, party_details.company_gstin[:2]) - else: - default_tax = get_tax_template(master_doctype, company, 0, party_details.company_gstin[:2]) - - if not default_tax: - return party_details - - party_details["taxes_and_charges"] = default_tax - party_details["taxes"] = get_taxes_and_charges(master_doctype, default_tax) - - return party_details - - -def update_party_details(party_details, doctype): - for address_field in [ - "shipping_address", - "company_address", - "supplier_address", - "shipping_address_name", - "customer_address", - ]: - if party_details.get(address_field): - party_details.update(get_fetch_values(doctype, address_field, party_details.get(address_field))) - - -def is_internal_transfer(party_details, doctype): - if doctype in ("Sales Invoice", "Delivery Note", "Sales Order", "Quotation"): - destination_gstin = party_details.company_gstin - elif doctype in ("Purchase Invoice", "Purchase Order", "Purchase Receipt"): - destination_gstin = party_details.supplier_gstin - - if not destination_gstin or party_details.gstin: - return False - - if party_details.gstin == destination_gstin: - return True - else: - False - - -def get_tax_template_based_on_category(master_doctype, company, party_details): - if not party_details.get("tax_category"): - return - - default_tax = frappe.db.get_value( - master_doctype, {"company": company, "tax_category": party_details.get("tax_category")}, "name" - ) - - return default_tax - - -def get_tax_template(master_doctype, company, is_inter_state, state_code): - tax_categories = frappe.get_all( - "Tax Category", - fields=["name", "is_inter_state", "gst_state"], - filters={"is_inter_state": is_inter_state, "is_reverse_charge": 0, "disabled": 0}, - ) - - default_tax = "" - - for tax_category in tax_categories: - if tax_category.gst_state == number_state_mapping[state_code] or ( - not default_tax and not tax_category.gst_state - ): - default_tax = frappe.db.get_value( - master_doctype, {"company": company, "disabled": 0, "tax_category": tax_category.name}, "name" - ) - return default_tax - - -def calculate_annual_eligible_hra_exemption(doc): - basic_component, hra_component = frappe.db.get_value( - "Company", doc.company, ["basic_component", "hra_component"] - ) - if not (basic_component and hra_component): - frappe.throw(_("Please mention Basic and HRA component in Company")) - annual_exemption, monthly_exemption, hra_amount = 0, 0, 0 - if hra_component and basic_component: - assignment = get_salary_assignment(doc.employee, nowdate()) - if assignment: - hra_component_exists = frappe.db.exists( - "Salary Detail", - { - "parent": assignment.salary_structure, - "salary_component": hra_component, - "parentfield": "earnings", - "parenttype": "Salary Structure", - }, - ) - - if hra_component_exists: - basic_amount, hra_amount = get_component_amt_from_salary_slip( - doc.employee, assignment.salary_structure, basic_component, hra_component - ) - if hra_amount: - if doc.monthly_house_rent: - annual_exemption = calculate_hra_exemption( - assignment.salary_structure, - basic_amount, - hra_amount, - doc.monthly_house_rent, - doc.rented_in_metro_city, - ) - if annual_exemption > 0: - monthly_exemption = annual_exemption / 12 - else: - annual_exemption = 0 - - elif doc.docstatus == 1: - frappe.throw( - _("Salary Structure must be submitted before submission of Tax Ememption Declaration") - ) - - return frappe._dict( - { - "hra_amount": hra_amount, - "annual_exemption": annual_exemption, - "monthly_exemption": monthly_exemption, - } - ) - - -def get_component_amt_from_salary_slip(employee, salary_structure, basic_component, hra_component): - salary_slip = make_salary_slip( - salary_structure, employee=employee, for_preview=1, ignore_permissions=True - ) - basic_amt, hra_amt = 0, 0 - for earning in salary_slip.earnings: - if earning.salary_component == basic_component: - basic_amt = earning.amount - elif earning.salary_component == hra_component: - hra_amt = earning.amount - if basic_amt and hra_amt: - return basic_amt, hra_amt - return basic_amt, hra_amt - - -def calculate_hra_exemption( - salary_structure, basic, monthly_hra, monthly_house_rent, rented_in_metro_city -): - # TODO make this configurable - exemptions = [] - frequency = frappe.get_value("Salary Structure", salary_structure, "payroll_frequency") - # case 1: The actual amount allotted by the employer as the HRA. - exemptions.append(get_annual_component_pay(frequency, monthly_hra)) - - actual_annual_rent = monthly_house_rent * 12 - annual_basic = get_annual_component_pay(frequency, basic) - - # case 2: Actual rent paid less 10% of the basic salary. - exemptions.append(flt(actual_annual_rent) - flt(annual_basic * 0.1)) - # case 3: 50% of the basic salary, if the employee is staying in a metro city (40% for a non-metro city). - exemptions.append(annual_basic * 0.5 if rented_in_metro_city else annual_basic * 0.4) - # return minimum of 3 cases - return min(exemptions) - - -def get_annual_component_pay(frequency, amount): - if frequency == "Daily": - return amount * 365 - elif frequency == "Weekly": - return amount * 52 - elif frequency == "Fortnightly": - return amount * 26 - elif frequency == "Monthly": - return amount * 12 - elif frequency == "Bimonthly": - return amount * 6 - - -def validate_house_rent_dates(doc): - if not doc.rented_to_date or not doc.rented_from_date: - frappe.throw(_("House rented dates required for exemption calculation")) - - if date_diff(doc.rented_to_date, doc.rented_from_date) < 14: - frappe.throw(_("House rented dates should be atleast 15 days apart")) - - proofs = frappe.db.sql( - """ - select name - from `tabEmployee Tax Exemption Proof Submission` - where - docstatus=1 and employee=%(employee)s and payroll_period=%(payroll_period)s - and (rented_from_date between %(from_date)s and %(to_date)s or rented_to_date between %(from_date)s and %(to_date)s) - """, - { - "employee": doc.employee, - "payroll_period": doc.payroll_period, - "from_date": doc.rented_from_date, - "to_date": doc.rented_to_date, - }, - ) - - if proofs: - frappe.throw(_("House rent paid days overlapping with {0}").format(proofs[0][0])) - - -def calculate_hra_exemption_for_period(doc): - monthly_rent, eligible_hra = 0, 0 - if doc.house_rent_payment_amount: - validate_house_rent_dates(doc) - # TODO receive rented months or validate dates are start and end of months? - # Calc monthly rent, round to nearest .5 - factor = flt(date_diff(doc.rented_to_date, doc.rented_from_date) + 1) / 30 - factor = round(factor * 2) / 2 - monthly_rent = doc.house_rent_payment_amount / factor - # update field used by calculate_annual_eligible_hra_exemption - doc.monthly_house_rent = monthly_rent - exemptions = calculate_annual_eligible_hra_exemption(doc) - - if exemptions["monthly_exemption"]: - # calc total exemption amount - eligible_hra = exemptions["monthly_exemption"] * factor - exemptions["monthly_house_rent"] = monthly_rent - exemptions["total_eligible_hra_exemption"] = eligible_hra - return exemptions - - -def get_ewb_data(dt, dn): - - ewaybills = [] - for doc_name in dn: - doc = frappe.get_doc(dt, doc_name) - - validate_doc(doc) - - data = frappe._dict( - { - "transporterId": "", - "TotNonAdvolVal": 0, - } - ) - - data.userGstin = data.fromGstin = doc.company_gstin - data.supplyType = "O" - - if dt == "Delivery Note": - data.subSupplyType = 1 - elif doc.gst_category in ["Registered Regular", "SEZ"]: - data.subSupplyType = 1 - elif doc.gst_category in ["Overseas", "Deemed Export"]: - data.subSupplyType = 3 - else: - frappe.throw(_("Unsupported GST Category for E-Way Bill JSON generation")) - - data.docType = "INV" - data.docDate = frappe.utils.formatdate(doc.posting_date, "dd/mm/yyyy") - - company_address = frappe.get_doc("Address", doc.company_address) - billing_address = frappe.get_doc("Address", doc.customer_address) - - # added dispatch address - dispatch_address = ( - frappe.get_doc("Address", doc.dispatch_address_name) - if doc.dispatch_address_name - else company_address - ) - shipping_address = frappe.get_doc("Address", doc.shipping_address_name) - - data = get_address_details(data, doc, company_address, billing_address, dispatch_address) - - data.itemList = [] - data.totalValue = doc.net_total - - data = get_item_list(data, doc, hsn_wise=True) - - disable_rounded = frappe.db.get_single_value("Global Defaults", "disable_rounded_total") - data.totInvValue = doc.grand_total if disable_rounded else doc.rounded_total - - data = get_transport_details(data, doc) - - fields = { - "/. -": { - "docNo": doc.name, - "fromTrdName": doc.company, - "toTrdName": doc.customer_name, - "transDocNo": doc.lr_no, - }, - "@#/,&. -": { - "fromAddr1": company_address.address_line1, - "fromAddr2": company_address.address_line2, - "fromPlace": company_address.city, - "toAddr1": shipping_address.address_line1, - "toAddr2": shipping_address.address_line2, - "toPlace": shipping_address.city, - "transporterName": doc.transporter_name, - }, - } - - for allowed_chars, field_map in fields.items(): - for key, value in field_map.items(): - if not value: - data[key] = "" - else: - data[key] = re.sub(r"[^\w" + allowed_chars + "]", "", value) - - ewaybills.append(data) - - data = {"version": "1.0.0421", "billLists": ewaybills} - - return data - - -@frappe.whitelist() -def generate_ewb_json(dt, dn): - dn = json.loads(dn) - return get_ewb_data(dt, dn) - - -@frappe.whitelist() -def download_ewb_json(): - data = json.loads(frappe.local.form_dict.data) - frappe.local.response.filecontent = json.dumps(data, indent=4, sort_keys=True) - frappe.local.response.type = "download" - - filename_prefix = "Bulk" - docname = frappe.local.form_dict.docname - if docname: - if docname.startswith("["): - docname = json.loads(docname) - if len(docname) == 1: - docname = docname[0] - - if not isinstance(docname, list): - # removes characters not allowed in a filename (https://stackoverflow.com/a/38766141/4767738) - filename_prefix = re.sub(r"[^\w_.)( -]", "", docname) - - frappe.local.response.filename = "{0}_e-WayBill_Data_{1}.json".format( - filename_prefix, frappe.utils.random_string(5) - ) - - -@frappe.whitelist() -def get_gstins_for_company(company): - company_gstins = [] - if company: - company_gstins = frappe.db.sql( - """select - distinct `tabAddress`.gstin - from - `tabAddress`, `tabDynamic Link` - where - `tabDynamic Link`.parent = `tabAddress`.name and - `tabDynamic Link`.parenttype = 'Address' and - `tabDynamic Link`.link_doctype = 'Company' and - `tabDynamic Link`.link_name = %(company)s""", - {"company": company}, - ) - return company_gstins - - -def get_address_details(data, doc, company_address, billing_address, dispatch_address): - data.fromPincode = validate_pincode(company_address.pincode, "Company Address") - data.fromStateCode = validate_state_code(company_address.gst_state_number, "Company Address") - data.actualFromStateCode = validate_state_code( - dispatch_address.gst_state_number, "Dispatch Address" - ) - - if not doc.billing_address_gstin or len(doc.billing_address_gstin) < 15: - data.toGstin = "URP" - set_gst_state_and_state_number(billing_address) - else: - data.toGstin = doc.billing_address_gstin - - data.toPincode = validate_pincode(billing_address.pincode, "Customer Address") - data.toStateCode = validate_state_code(billing_address.gst_state_number, "Customer Address") - - if doc.customer_address != doc.shipping_address_name: - data.transType = 2 - shipping_address = frappe.get_doc("Address", doc.shipping_address_name) - set_gst_state_and_state_number(shipping_address) - data.toPincode = validate_pincode(shipping_address.pincode, "Shipping Address") - data.actualToStateCode = validate_state_code( - shipping_address.gst_state_number, "Shipping Address" - ) - else: - data.transType = 1 - data.actualToStateCode = data.toStateCode - shipping_address = billing_address - - if doc.gst_category == "SEZ": - data.toStateCode = 99 - - return data - - -def get_item_list(data, doc, hsn_wise=False): - for attr in ["cgstValue", "sgstValue", "igstValue", "cessValue", "OthValue"]: - data[attr] = 0 - - gst_accounts = get_gst_accounts(doc.company, account_wise=True) - tax_map = { - "sgst_account": ["sgstRate", "sgstValue"], - "cgst_account": ["cgstRate", "cgstValue"], - "igst_account": ["igstRate", "igstValue"], - "cess_account": ["cessRate", "cessValue"], - } - item_data_attrs = ["sgstRate", "cgstRate", "igstRate", "cessRate", "cessNonAdvol"] - hsn_wise_charges, hsn_taxable_amount = get_itemised_tax_breakup_data( - doc, account_wise=True, hsn_wise=hsn_wise - ) - for item_or_hsn, taxable_amount in hsn_taxable_amount.items(): - item_data = frappe._dict() - if not item_or_hsn: - frappe.throw(_("GST HSN Code does not exist for one or more items")) - item_data.hsnCode = int(item_or_hsn) if hsn_wise else item_or_hsn - item_data.taxableAmount = taxable_amount - item_data.qtyUnit = "" - for attr in item_data_attrs: - item_data[attr] = 0 - - for account, tax_detail in hsn_wise_charges.get(item_or_hsn, {}).items(): - account_type = gst_accounts.get(account, "") - for tax_acc, attrs in tax_map.items(): - if account_type == tax_acc: - item_data[attrs[0]] = tax_detail.get("tax_rate") - data[attrs[1]] += tax_detail.get("tax_amount") - break - else: - data.OthValue += tax_detail.get("tax_amount") - - data.itemList.append(item_data) - - # Tax amounts rounded to 2 decimals to avoid exceeding max character limit - for attr in ["sgstValue", "cgstValue", "igstValue", "cessValue"]: - data[attr] = flt(data[attr], 2) - - return data - - -def validate_doc(doc): - if doc.docstatus != 1: - frappe.throw(_("E-Way Bill JSON can only be generated from submitted document")) - - if doc.is_return: - frappe.throw(_("E-Way Bill JSON cannot be generated for Sales Return as of now")) - - if doc.ewaybill: - frappe.throw(_("e-Way Bill already exists for this document")) - - reqd_fields = [ - "company_gstin", - "company_address", - "customer_address", - "shipping_address_name", - "mode_of_transport", - "distance", - ] - - for fieldname in reqd_fields: - if not doc.get(fieldname): - frappe.throw( - _("{} is required to generate E-Way Bill JSON").format(doc.meta.get_label(fieldname)) - ) - - if len(doc.company_gstin) < 15: - frappe.throw(_("You must be a registered supplier to generate e-Way Bill")) - - -def get_transport_details(data, doc): - if doc.distance > 4000: - frappe.throw(_("Distance cannot be greater than 4000 kms")) - - data.transDistance = int(round(doc.distance)) - - transport_modes = {"Road": 1, "Rail": 2, "Air": 3, "Ship": 4} - - vehicle_types = {"Regular": "R", "Over Dimensional Cargo (ODC)": "O"} - - data.transMode = transport_modes.get(doc.mode_of_transport) - - if doc.mode_of_transport == "Road": - if not doc.gst_transporter_id and not doc.vehicle_no: - frappe.throw( - _("Either GST Transporter ID or Vehicle No is required if Mode of Transport is Road") - ) - if doc.vehicle_no: - data.vehicleNo = doc.vehicle_no.replace(" ", "") - if not doc.gst_vehicle_type: - frappe.throw(_("Vehicle Type is required if Mode of Transport is Road")) - else: - data.vehicleType = vehicle_types.get(doc.gst_vehicle_type) - else: - if not doc.lr_no or not doc.lr_date: - frappe.throw(_("Transport Receipt No and Date are mandatory for your chosen Mode of Transport")) - - if doc.lr_no: - data.transDocNo = doc.lr_no - - if doc.lr_date: - data.transDocDate = frappe.utils.formatdate(doc.lr_date, "dd/mm/yyyy") - - if doc.gst_transporter_id: - if doc.gst_transporter_id[0:2] != "88": - validate_gstin_check_digit(doc.gst_transporter_id, label="GST Transporter ID") - data.transporterId = doc.gst_transporter_id - - return data - - -def validate_pincode(pincode, address): - pin_not_found = "Pin Code doesn't exist for {}" - incorrect_pin = "Pin Code for {} is incorrecty formatted. It must be 6 digits (without spaces)" - - if not pincode: - frappe.throw(_(pin_not_found.format(address))) - - pincode = pincode.replace(" ", "") - if not pincode.isdigit() or len(pincode) != 6: - frappe.throw(_(incorrect_pin.format(address))) - else: - return int(pincode) - - -def validate_state_code(state_code, address): - no_state_code = "GST State Code not found for {0}. Please set GST State in {0}" - if not state_code: - frappe.throw(_(no_state_code.format(address))) - else: - return int(state_code) - - -@frappe.whitelist() -def get_gst_accounts( - company=None, account_wise=False, only_reverse_charge=0, only_non_reverse_charge=0 -): - filters = {"parent": "GST Settings"} - - if company: - filters.update({"company": company}) - if only_reverse_charge: - filters.update({"is_reverse_charge_account": 1}) - elif only_non_reverse_charge: - filters.update({"is_reverse_charge_account": 0}) - - gst_accounts = frappe._dict() - gst_settings_accounts = frappe.get_all( - "GST Account", - filters=filters, - fields=["cgst_account", "sgst_account", "igst_account", "cess_account", "utgst_account"], - ) - - if not gst_settings_accounts and not frappe.flags.in_test and not frappe.flags.in_migrate: - frappe.throw(_("Please set GST Accounts in GST Settings")) - - for d in gst_settings_accounts: - for acc, val in d.items(): - if not account_wise: - gst_accounts.setdefault(acc, []).append(val) - elif val: - gst_accounts[val] = acc - - return gst_accounts - - -def validate_reverse_charge_transaction(doc, method): - country = frappe.get_cached_value("Company", doc.company, "country") - - if country != "India": - return - - base_gst_tax = 0 - base_reverse_charge_booked = 0 - - if doc.reverse_charge == "Y": - gst_accounts = get_gst_accounts(doc.company, only_reverse_charge=1) - reverse_charge_accounts = ( - gst_accounts.get("cgst_account") - + gst_accounts.get("sgst_account") - + gst_accounts.get("igst_account") - ) - - gst_accounts = get_gst_accounts(doc.company, only_non_reverse_charge=1) - non_reverse_charge_accounts = ( - gst_accounts.get("cgst_account") - + gst_accounts.get("sgst_account") - + gst_accounts.get("igst_account") - ) - - for tax in doc.get("taxes"): - if tax.account_head in non_reverse_charge_accounts: - if tax.add_deduct_tax == "Add": - base_gst_tax += tax.base_tax_amount_after_discount_amount - else: - base_gst_tax += tax.base_tax_amount_after_discount_amount - elif tax.account_head in reverse_charge_accounts: - if tax.add_deduct_tax == "Add": - base_reverse_charge_booked += tax.base_tax_amount_after_discount_amount - else: - base_reverse_charge_booked += tax.base_tax_amount_after_discount_amount - - if base_gst_tax != base_reverse_charge_booked: - msg = _("Booked reverse charge is not equal to applied tax amount") - msg += "
    " - msg += _( - "Please refer {gst_document_link} to learn more about how to setup and create reverse charge invoice" - ).format( - gst_document_link='GST Documentation' - ) - - frappe.throw(msg) - - -def update_itc_availed_fields(doc, method): - country = frappe.get_cached_value("Company", doc.company, "country") - - if country != "India": - return - - # Initialize values - doc.itc_integrated_tax = doc.itc_state_tax = doc.itc_central_tax = doc.itc_cess_amount = 0 - gst_accounts = get_gst_accounts(doc.company, only_non_reverse_charge=1) - - for tax in doc.get("taxes"): - if tax.account_head in gst_accounts.get("igst_account", []): - doc.itc_integrated_tax += flt(tax.base_tax_amount_after_discount_amount) - if tax.account_head in gst_accounts.get("sgst_account", []): - doc.itc_state_tax += flt(tax.base_tax_amount_after_discount_amount) - if tax.account_head in gst_accounts.get("cgst_account", []): - doc.itc_central_tax += flt(tax.base_tax_amount_after_discount_amount) - if tax.account_head in gst_accounts.get("cess_account", []): - doc.itc_cess_amount += flt(tax.base_tax_amount_after_discount_amount) - - -def update_place_of_supply(doc, method): - country = frappe.get_cached_value("Company", doc.company, "country") - if country != "India": - return - - address = frappe.db.get_value( - "Address", doc.get("customer_address"), ["gst_state", "gst_state_number"], as_dict=1 - ) - if address and address.gst_state and address.gst_state_number: - doc.place_of_supply = cstr(address.gst_state_number) + "-" + cstr(address.gst_state) - - -@frappe.whitelist() -def get_regional_round_off_accounts(company, account_list): - country = frappe.get_cached_value("Company", company, "country") - - if country != "India": - return - - if isinstance(account_list, str): - account_list = json.loads(account_list) - - if not frappe.db.get_single_value("GST Settings", "round_off_gst_values"): - return - - gst_accounts = get_gst_accounts(company) - - gst_account_list = [] - for account in ["cgst_account", "sgst_account", "igst_account"]: - if account in gst_accounts: - gst_account_list += gst_accounts.get(account) - - account_list.extend(gst_account_list) - - return account_list - - -def update_taxable_values(doc, method): - country = frappe.get_cached_value("Company", doc.company, "country") - - if country != "India": - return - - gst_accounts = get_gst_accounts(doc.company) - - # Only considering sgst account to avoid inflating taxable value - gst_account_list = ( - gst_accounts.get("sgst_account", []) - + gst_accounts.get("sgst_account", []) - + gst_accounts.get("igst_account", []) - ) - - additional_taxes = 0 - total_charges = 0 - item_count = 0 - considered_rows = [] - - for tax in doc.get("taxes"): - prev_row_id = cint(tax.row_id) - 1 - if tax.account_head in gst_account_list and prev_row_id not in considered_rows: - if tax.charge_type == "On Previous Row Amount": - additional_taxes += doc.get("taxes")[prev_row_id].tax_amount_after_discount_amount - considered_rows.append(prev_row_id) - if tax.charge_type == "On Previous Row Total": - additional_taxes += doc.get("taxes")[prev_row_id].base_total - doc.base_net_total - considered_rows.append(prev_row_id) - - for item in doc.get("items"): - proportionate_value = item.base_net_amount if doc.base_net_total else item.qty - total_value = doc.base_net_total if doc.base_net_total else doc.total_qty - - applicable_charges = flt( - flt( - proportionate_value * (flt(additional_taxes) / flt(total_value)), - item.precision("taxable_value"), - ) - ) - item.taxable_value = applicable_charges + proportionate_value - total_charges += applicable_charges - item_count += 1 - - if total_charges != additional_taxes: - diff = additional_taxes - total_charges - doc.get("items")[item_count - 1].taxable_value += diff - - -def get_depreciation_amount(asset, depreciable_value, row): - if row.depreciation_method in ("Straight Line", "Manual"): - # if the Depreciation Schedule is being prepared for the first time - if not asset.flags.increase_in_asset_life: - depreciation_amount = ( - flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life) - ) / flt(row.total_number_of_depreciations) - - # if the Depreciation Schedule is being modified after Asset Repair - else: - depreciation_amount = ( - flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) - ) / (date_diff(asset.to_date, asset.available_for_use_date) / 365) - - else: - rate_of_depreciation = row.rate_of_depreciation - # if its the first depreciation - if depreciable_value == asset.gross_purchase_amount: - if row.finance_book and frappe.db.get_value("Finance Book", row.finance_book, "for_income_tax"): - # as per IT act, if the asset is purchased in the 2nd half of fiscal year, then rate is divided by 2 - diff = date_diff(row.depreciation_start_date, asset.available_for_use_date) - if diff <= 180: - rate_of_depreciation = rate_of_depreciation / 2 - frappe.msgprint( - _( - "As per IT Act, the rate of depreciation for the first depreciation entry is reduced by 50%." - ) - ) - - depreciation_amount = flt(depreciable_value * (flt(rate_of_depreciation) / 100)) - - return depreciation_amount - - -def set_item_tax_from_hsn_code(item): - if not item.taxes and item.gst_hsn_code: - hsn_doc = frappe.get_doc("GST HSN Code", item.gst_hsn_code) - - for tax in hsn_doc.taxes: - item.append( - "taxes", - { - "item_tax_template": tax.item_tax_template, - "tax_category": tax.tax_category, - "valid_from": tax.valid_from, - }, - ) - - -def delete_gst_settings_for_company(doc, method): - if doc.country != "India": - return - - gst_settings = frappe.get_doc("GST Settings") - records_to_delete = [] - - for d in reversed(gst_settings.get("gst_accounts")): - if d.company == doc.name: - records_to_delete.append(d) - - for d in records_to_delete: - gst_settings.remove(d) - - gst_settings.save() diff --git a/erpnext/regional/print_format/gst_tax_invoice/__init__.py b/erpnext/regional/print_format/gst_tax_invoice/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json b/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json deleted file mode 100644 index b23206b0bd..0000000000 --- a/erpnext/regional/print_format/gst_tax_invoice/gst_tax_invoice.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "align_labels_right": 0, - "creation": "2017-07-04 16:26:21.120187", - "custom_format": 0, - "disabled": 1, - "doc_type": "Sales Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "format_data": "[{\"fieldname\": \"print_heading_template\", \"fieldtype\": \"Custom HTML\", \"options\": \"
    \\n\\t

    \\n\\t\\tTAX INVOICE
    \\n\\t\\t{{ doc.name }}\\n\\t

    \\n
    \\n

    \\n\\t{% if doc.invoice_copy -%}\\n\\t\\t{{ doc.invoice_copy }}\\n\\t{% endif -%}\\n

    \"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"company\", \"label\": \"Company\"}, {\"print_hide\": 0, \"fieldname\": \"company_address_display\", \"label\": \"Company Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"posting_date\", \"label\": \"Date\"}, {\"print_hide\": 0, \"fieldname\": \"due_date\", \"label\": \"Payment Due Date\"}, {\"print_hide\": 0, \"fieldname\": \"reverse_charge\", \"label\": \"Reverse Charge\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"label\": \"Custom HTML\", \"fieldname\": \"_custom_html\", \"options\": \"
    \", \"fieldtype\": \"HTML\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Address\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"customer_name\", \"label\": \"Customer Name\"}, {\"print_hide\": 0, \"fieldname\": \"address_display\", \"label\": \"Address\"}, {\"print_hide\": 0, \"fieldname\": \"contact_display\", \"label\": \"Contact\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"shipping_address\", \"label\": \"Shipping Address\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"item_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"200px\"}, {\"print_hide\": 0, \"fieldname\": \"gst_hsn_code\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"serial_no\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"qty\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"uom\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"rate\", \"print_width\": \"\"}, {\"print_hide\": 0, \"fieldname\": \"amount\", \"print_width\": \"\"}], \"print_hide\": 0, \"fieldname\": \"items\", \"label\": \"Items\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"total\", \"label\": \"Total\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"visible_columns\": [{\"print_hide\": 0, \"fieldname\": \"description\", \"print_width\": \"300px\"}], \"print_hide\": 0, \"fieldname\": \"taxes\", \"label\": \"Sales Taxes and Charges\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"grand_total\", \"label\": \"Grand Total\"}, {\"print_hide\": 0, \"fieldname\": \"rounded_total\", \"label\": \"Rounded Total\"}, {\"print_hide\": 0, \"fieldname\": \"in_words\", \"label\": \"In Words\"}, {\"fieldtype\": \"Section Break\", \"label\": \"\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"other_charges_calculation\", \"align\": \"left\", \"label\": \"Tax Breakup\"}, {\"fieldtype\": \"Section Break\", \"label\": \"Terms\"}, {\"fieldtype\": \"Column Break\"}, {\"print_hide\": 0, \"fieldname\": \"terms\", \"label\": \"Terms and Conditions Details\"}]", - "idx": 0, - "line_breaks": 0, - "modified": "2017-12-15 11:57:25.477278", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Tax Invoice", - "owner": "Administrator", - "print_format_builder": 1, - "print_format_type": "Jinja", - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/regional/report/e_invoice_summary/__init__.py b/erpnext/regional/report/e_invoice_summary/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.js b/erpnext/regional/report/e_invoice_summary/e_invoice_summary.js deleted file mode 100644 index 4713217d83..0000000000 --- a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["E-Invoice Summary"] = { - "filters": [ - { - "fieldtype": "Link", - "options": "Company", - "reqd": 1, - "fieldname": "company", - "label": __("Company"), - "default": frappe.defaults.get_user_default("Company"), - }, - { - "fieldtype": "Link", - "options": "Customer", - "fieldname": "customer", - "label": __("Customer") - }, - { - "fieldtype": "Date", - "reqd": 1, - "fieldname": "from_date", - "label": __("From Date"), - "default": frappe.datetime.add_months(frappe.datetime.get_today(), -1), - }, - { - "fieldtype": "Date", - "reqd": 1, - "fieldname": "to_date", - "label": __("To Date"), - "default": frappe.datetime.get_today(), - }, - { - "fieldtype": "Select", - "fieldname": "status", - "label": __("Status"), - "options": "\nPending\nGenerated\nCancelled\nFailed" - } - ], - - "formatter": function (value, row, column, data, default_formatter) { - value = default_formatter(value, row, column, data); - - if (column.fieldname == "einvoice_status" && value) { - if (value == 'Pending') value = `${value}`; - else if (value == 'Generated') value = `${value}`; - else if (value == 'Cancelled') value = `${value}`; - else if (value == 'Failed') value = `${value}`; - } - - return value; - } -}; diff --git a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.py b/erpnext/regional/report/e_invoice_summary/e_invoice_summary.py deleted file mode 100644 index 255bb92a1e..0000000000 --- a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -import frappe -from frappe import _ - - -def execute(filters=None): - validate_filters(filters) - - columns = get_columns() - data = get_data(filters) - - return columns, data - - -def validate_filters(filters=None): - if filters is None: - filters = {} - filters = frappe._dict(filters) - - if not filters.company: - frappe.throw( - _("{} is mandatory for generating E-Invoice Summary Report").format(_("Company")), - title=_("Invalid Filter"), - ) - if filters.company: - # validate if company has e-invoicing enabled - pass - if not filters.from_date or not filters.to_date: - frappe.throw( - _("From Date & To Date is mandatory for generating E-Invoice Summary Report"), - title=_("Invalid Filter"), - ) - if filters.from_date > filters.to_date: - frappe.throw(_("From Date must be before To Date"), title=_("Invalid Filter")) - - -def get_data(filters=None): - if filters is None: - filters = {} - query_filters = { - "posting_date": ["between", [filters.from_date, filters.to_date]], - "einvoice_status": ["is", "set"], - "company": filters.company, - } - if filters.customer: - query_filters["customer"] = filters.customer - if filters.status: - query_filters["einvoice_status"] = filters.status - - data = frappe.get_all( - "Sales Invoice", filters=query_filters, fields=[d.get("fieldname") for d in get_columns()] - ) - - return data - - -def get_columns(): - return [ - {"fieldtype": "Date", "fieldname": "posting_date", "label": _("Posting Date"), "width": 0}, - { - "fieldtype": "Link", - "fieldname": "name", - "label": _("Sales Invoice"), - "options": "Sales Invoice", - "width": 140, - }, - {"fieldtype": "Data", "fieldname": "einvoice_status", "label": _("Status"), "width": 100}, - {"fieldtype": "Link", "fieldname": "customer", "options": "Customer", "label": _("Customer")}, - {"fieldtype": "Check", "fieldname": "is_return", "label": _("Is Return"), "width": 85}, - {"fieldtype": "Data", "fieldname": "ack_no", "label": "Ack. No.", "width": 145}, - {"fieldtype": "Data", "fieldname": "ack_date", "label": "Ack. Date", "width": 165}, - {"fieldtype": "Data", "fieldname": "irn", "label": _("IRN No."), "width": 250}, - { - "fieldtype": "Currency", - "options": "Company:company:default_currency", - "fieldname": "base_grand_total", - "label": _("Grand Total"), - "width": 120, - }, - ] diff --git a/erpnext/regional/report/eway_bill/__init__.py b/erpnext/regional/report/eway_bill/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/eway_bill/eway_bill.js b/erpnext/regional/report/eway_bill/eway_bill.js deleted file mode 100644 index ab0094638a..0000000000 --- a/erpnext/regional/report/eway_bill/eway_bill.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2016, FinByz Tech Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["Eway Bill"] = { - "filters": [ - { - 'fieldname': 'delivery_note', - 'label': __("Delivery Note"), - 'fieldtype': 'Link', - 'options': 'Delivery Note' - }, - { - 'fieldname': 'posting_date', - 'label': __("Date"), - 'fieldtype': 'DateRange', - 'default': [frappe.datetime.nowdate(), frappe.datetime.nowdate()] - }, - { - 'fieldname': 'customer', - 'label': __("Customer"), - 'fieldtype': 'Link', - 'options': 'Customer' - }, - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "default": frappe.defaults.get_user_default("Company") - }, - ] -} diff --git a/erpnext/regional/report/eway_bill/eway_bill.json b/erpnext/regional/report/eway_bill/eway_bill.json deleted file mode 100644 index 41d6c9354c..0000000000 --- a/erpnext/regional/report/eway_bill/eway_bill.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2018-07-13 19:59:18.922829", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2018-07-19 12:08:07.400295", - "modified_by": "Administrator", - "module": "Regional", - "name": "Eway Bill", - "owner": "Administrator", - "ref_doctype": "Delivery Note", - "report_name": "Eway Bill", - "report_type": "Script Report", - "roles": [ - { - "role": "Stock User" - }, - { - "role": "Stock Manager" - }, - { - "role": "Sales User" - }, - { - "role": "Accounts User" - } - ] -} \ No newline at end of file diff --git a/erpnext/regional/report/eway_bill/eway_bill.py b/erpnext/regional/report/eway_bill/eway_bill.py deleted file mode 100644 index 8dcd6a365d..0000000000 --- a/erpnext/regional/report/eway_bill/eway_bill.py +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright (c) 2013, FinByz Tech Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json -import re - -import frappe -from frappe import _ -from frappe.utils import nowdate - - -def execute(filters=None): - if not filters: - filters.setdefault("posting_date", [nowdate(), nowdate()]) - columns, data = [], [] - columns = get_columns() - data = get_data(filters) - return columns, data - - -def get_data(filters): - - conditions = get_conditions(filters) - - data = frappe.db.sql( - """ - SELECT - dn.name as dn_id, dn.posting_date, dn.company, dn.company_gstin, dn.customer, dn.customer_gstin, dni.item_code, dni.item_name, dni.description, dni.gst_hsn_code, dni.uom, dni.qty, dni.amount, dn.mode_of_transport, dn.distance, dn.transporter_name, dn.gst_transporter_id, dn.lr_no, dn.lr_date, dn.vehicle_no, dn.gst_vehicle_type, dn.company_address, dn.shipping_address_name - FROM - `tabDelivery Note` AS dn join `tabDelivery Note Item` AS dni on (dni.parent = dn.name) - WHERE - dn.docstatus < 2 - %s """ - % conditions, - as_dict=1, - ) - - unit = { - "Bag": "BAGS", - "Bottle": "BOTTLES", - "Kg": "KILOGRAMS", - "Liter": "LITERS", - "Meter": "METERS", - "Nos": "NUMBERS", - "PKT": "PACKS", - "Roll": "ROLLS", - "Set": "SETS", - } - - # Regular expression set to remove all the special characters - special_characters = r"[$%^*()+\\[\]{};':\"\\|<>.?]" - - for row in data: - set_defaults(row) - set_taxes(row, filters) - set_address_details(row, special_characters) - - # Eway Bill accepts date as dd/mm/yyyy and not dd-mm-yyyy - row.posting_date = "/".join(str(row.posting_date).replace("-", "/").split("/")[::-1]) - row.lr_date = "/".join(str(row.lr_date).replace("-", "/").split("/")[::-1]) - - if row.gst_vehicle_type == "Over Dimensional Cargo (ODC)": - row.gst_vehicle_type = "ODC" - - row.item_name = re.sub(special_characters, " ", row.item_name) - row.description = row.item_name - - row.uom = unit.get(row.uom, row.uom) - - # For removing special charactes and numbers from customer. - row.customer = re.sub(special_characters[:-1] + "&0-9" + "]", "", row.customer) - - return data - - -def get_conditions(filters): - - conditions = "" - - conditions += filters.get("company") and " AND dn.company = '%s' " % filters.get("company") or "" - conditions += ( - filters.get("posting_date") - and " AND dn.posting_date >= '%s' AND dn.posting_date <= '%s' " - % (filters.get("posting_date")[0], filters.get("posting_date")[1]) - or "" - ) - conditions += ( - filters.get("delivery_note") and " AND dn.name = '%s' " % filters.get("delivery_note") or "" - ) - conditions += ( - filters.get("customer") - and " AND dn.customer = '%s' " % filters.get("customer").replace("'", "'") - or "" - ) - - return conditions - - -def set_defaults(row): - row.setdefault("supply_type", "Outward") - row.setdefault("sub_type", "Supply") - row.setdefault("doc_type", "Delivery Challan") - - -def set_address_details(row, special_characters): - - if row.get("company_address"): - address_line1, address_line2, city, pincode, state = frappe.db.get_value( - "Address", - row.get("company_address"), - ["address_line1", "address_line2", "city", "pincode", "state"], - ) - - row.update({"from_address_1": re.sub(special_characters, "", address_line1 or "")}) - row.update({"from_address_2": re.sub(special_characters, "", address_line2 or "")}) - row.update({"from_place": city and city.upper() or ""}) - row.update({"from_pin_code": pincode and pincode.replace(" ", "") or ""}) - row.update({"from_state": state and state.upper() or ""}) - row.update({"dispatch_state": row.from_state}) - - if row.get("shipping_address_name"): - address_line1, address_line2, city, pincode, state = frappe.db.get_value( - "Address", - row.get("shipping_address_name"), - ["address_line1", "address_line2", "city", "pincode", "state"], - ) - - row.update({"to_address_1": re.sub(special_characters, "", address_line1 or "")}) - row.update({"to_address_2": re.sub(special_characters, "", address_line2 or "")}) - row.update({"to_place": city and city.upper() or ""}) - row.update({"to_pin_code": pincode and pincode.replace(" ", "") or ""}) - row.update({"to_state": state and state.upper() or ""}) - row.update({"ship_to_state": row.to_state}) - - -def set_taxes(row, filters): - taxes = frappe.get_all( - "Sales Taxes and Charges", - filters={"parent": row.dn_id}, - fields=("item_wise_tax_detail", "account_head"), - ) - - account_list = ["cgst_account", "sgst_account", "igst_account", "cess_account"] - taxes_list = frappe.get_all( - "GST Account", - filters={"parent": "GST Settings", "company": filters.company}, - fields=account_list, - ) - - if not taxes_list: - frappe.throw(_("Please set GST Accounts in GST Settings")) - - item_tax_rate = {} - - for tax in taxes: - item_wise_tax = json.loads(tax.item_wise_tax_detail) - item_tax_rate[tax.account_head] = item_wise_tax.get(row.item_code) - - tax_rate = [] - - tax = taxes_list[0] - for key in account_list: - if tax[key] not in item_tax_rate.keys(): - item_tax_rate[tax[key]] = [0.0, 0.0] - - tax_rate.append(str(item_tax_rate[tax[key]][0])) - row.update({key[:5] + "amount": round(item_tax_rate.get(tax[key], 0.0)[1], 2)}) - item_tax_rate.pop(tax[key]) - - row.amount = float(row.amount) + sum(i[1] for i in item_tax_rate.values()) - row.update({"tax_rate": "+".join(tax_rate)}) - - -def get_columns(): - columns = [ - {"fieldname": "supply_type", "label": _("Supply Type"), "fieldtype": "Data", "width": 100}, - {"fieldname": "sub_type", "label": _("Sub Type"), "fieldtype": "Data", "width": 100}, - {"fieldname": "doc_type", "label": _("Doc Type"), "fieldtype": "Data", "width": 100}, - { - "fieldname": "dn_id", - "label": _("Doc Name"), - "fieldtype": "Link", - "options": "Delivery Note", - "width": 140, - }, - {"fieldname": "posting_date", "label": _("Doc Date"), "fieldtype": "Data", "width": 100}, - { - "fieldname": "company", - "label": _("From Party Name"), - "fieldtype": "Link", - "options": "Company", - "width": 120, - }, - {"fieldname": "company_gstin", "label": _("From GSTIN"), "fieldtype": "Data", "width": 100}, - {"fieldname": "from_address_1", "label": _("From Address 1"), "fieldtype": "Data", "width": 120}, - {"fieldname": "from_address_2", "label": _("From Address 2"), "fieldtype": "Data", "width": 120}, - {"fieldname": "from_place", "label": _("From Place"), "fieldtype": "Data", "width": 80}, - {"fieldname": "from_pin_code", "label": _("From Pin Code"), "fieldtype": "Data", "width": 80}, - {"fieldname": "from_state", "label": _("From State"), "fieldtype": "Data", "width": 80}, - {"fieldname": "dispatch_state", "label": _("Dispatch State"), "fieldtype": "Data", "width": 100}, - {"fieldname": "customer", "label": _("To Party Name"), "fieldtype": "Data", "width": 120}, - {"fieldname": "customer_gstin", "label": _("To GSTIN"), "fieldtype": "Data", "width": 120}, - {"fieldname": "to_address_1", "label": _("To Address 1"), "fieldtype": "Data", "width": 120}, - {"fieldname": "to_address_2", "label": _("To Address 2"), "fieldtype": "Data", "width": 120}, - {"fieldname": "to_place", "label": _("To Place"), "fieldtype": "Data", "width": 80}, - {"fieldname": "to_pin_code", "label": _("To Pin Code"), "fieldtype": "Data", "width": 80}, - {"fieldname": "to_state", "label": _("To State"), "fieldtype": "Data", "width": 80}, - {"fieldname": "ship_to_state", "label": _("Ship To State"), "fieldtype": "Data", "width": 100}, - { - "fieldname": "item_name", - "label": _("Product"), - "fieldtype": "Link", - "options": "Item", - "width": 120, - }, - {"fieldname": "description", "label": _("Description"), "fieldtype": "Data", "width": 100}, - {"fieldname": "gst_hsn_code", "label": _("HSN"), "fieldtype": "Data", "width": 120}, - {"fieldname": "uom", "label": _("Unit"), "fieldtype": "Data", "width": 100}, - {"fieldname": "qty", "label": _("Qty"), "fieldtype": "Float", "width": 100}, - {"fieldname": "amount", "label": _("Accessable Value"), "fieldtype": "Float", "width": 120}, - {"fieldname": "tax_rate", "label": _("Tax Rate"), "fieldtype": "Data", "width": 100}, - {"fieldname": "cgst_amount", "label": _("CGST Amount"), "fieldtype": "Data", "width": 100}, - {"fieldname": "sgst_amount", "label": _("SGST Amount"), "fieldtype": "Data", "width": 100}, - {"fieldname": "igst_amount", "label": _("IGST Amount"), "fieldtype": "Data", "width": 100}, - {"fieldname": "cess_amount", "label": _("CESS Amount"), "fieldtype": "Data", "width": 100}, - { - "fieldname": "mode_of_transport", - "label": _("Mode of Transport"), - "fieldtype": "Data", - "width": 100, - }, - {"fieldname": "distance", "label": _("Distance"), "fieldtype": "Data", "width": 100}, - { - "fieldname": "transporter_name", - "label": _("Transporter Name"), - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "gst_transporter_id", - "label": _("Transporter ID"), - "fieldtype": "Data", - "width": 100, - }, - {"fieldname": "lr_no", "label": _("Transport Receipt No"), "fieldtype": "Data", "width": 120}, - { - "fieldname": "lr_date", - "label": _("Transport Receipt Date"), - "fieldtype": "Data", - "width": 120, - }, - {"fieldname": "vehicle_no", "label": _("Vehicle No"), "fieldtype": "Data", "width": 100}, - {"fieldname": "gst_vehicle_type", "label": _("Vehicle Type"), "fieldtype": "Data", "width": 100}, - ] - - return columns diff --git a/erpnext/regional/report/gst_itemised_purchase_register/__init__.py b/erpnext/regional/report/gst_itemised_purchase_register/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.js b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.js deleted file mode 100644 index 85a0fcda9f..0000000000 --- a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -{% include "erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js" %} - -frappe.query_reports["GST Itemised Purchase Register"] = frappe.query_reports["Item-wise Purchase Register"] diff --git a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.json b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.json deleted file mode 100644 index 379fe10589..0000000000 --- a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2017-06-22 15:25:04.101930", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2017-08-04 15:39:41.671851", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Itemised Purchase Register", - "owner": "Administrator", - "ref_doctype": "Purchase Invoice", - "report_name": "GST Itemised Purchase Register", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py deleted file mode 100644 index fec63f2f18..0000000000 --- a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from erpnext.accounts.report.item_wise_purchase_register.item_wise_purchase_register import ( - _execute, -) - - -def execute(filters=None): - return _execute( - filters, - additional_table_columns=[ - dict(fieldtype="Data", label="Supplier GSTIN", fieldname="supplier_gstin", width=120), - dict(fieldtype="Data", label="Company GSTIN", fieldname="company_gstin", width=120), - dict(fieldtype="Data", label="Reverse Charge", fieldname="reverse_charge", width=120), - dict(fieldtype="Data", label="GST Category", fieldname="gst_category", width=120), - dict(fieldtype="Data", label="Export Type", fieldname="export_type", width=120), - dict(fieldtype="Data", label="E-Commerce GSTIN", fieldname="ecommerce_gstin", width=130), - dict(fieldtype="Data", label="HSN Code", fieldname="gst_hsn_code", width=120), - dict(fieldtype="Data", label="Supplier Invoice No", fieldname="bill_no", width=120), - dict(fieldtype="Date", label="Supplier Invoice Date", fieldname="bill_date", width=100), - ], - additional_query_columns=[ - "supplier_gstin", - "company_gstin", - "reverse_charge", - "gst_category", - "export_type", - "ecommerce_gstin", - "gst_hsn_code", - "bill_no", - "bill_date", - ], - ) diff --git a/erpnext/regional/report/gst_itemised_sales_register/__init__.py b/erpnext/regional/report/gst_itemised_sales_register/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.js b/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.js deleted file mode 100644 index 3a0f0c966d..0000000000 --- a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -{% include "erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js" %} -{% include "erpnext/regional/report/india_gst_common/india_gst_common.js" %} - -let filters = frappe.query_reports["Item-wise Sales Register"]["filters"]; - -// Add GSTIN filter -filters = filters.concat({ - "fieldname":"company_gstin", - "label": __("Company GSTIN"), - "fieldtype": "Select", - "placeholder":"Company GSTIN", - "options": [""], - "width": "80" -}, { - "fieldname":"invoice_type", - "label": __("Invoice Type"), - "fieldtype": "Select", - "placeholder":"Invoice Type", - "options": ["", "Regular", "SEZ", "Export", "Deemed Export"] -}); - -// Handle company on change -for (var i = 0; i < filters.length; ++i) { - if (filters[i].fieldname === 'company') { - filters[i].on_change = fetch_gstins; - } -} - -frappe.query_reports["GST Itemised Sales Register"] = { "filters": filters, "onload": fetch_gstins }; diff --git a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.json b/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.json deleted file mode 100644 index b73786bdc5..0000000000 --- a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2017-06-22 15:24:43.083217", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2017-08-04 15:39:46.998093", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Itemised Sales Register", - "owner": "Administrator", - "ref_doctype": "Sales Invoice", - "report_name": "GST Itemised Sales Register", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py b/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py deleted file mode 100644 index bb1843f1bd..0000000000 --- a/erpnext/regional/report/gst_itemised_sales_register/gst_itemised_sales_register.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from erpnext.accounts.report.item_wise_sales_register.item_wise_sales_register import _execute - - -def execute(filters=None): - return _execute( - filters, - additional_table_columns=[ - dict(fieldtype="Data", label="Customer GSTIN", fieldname="customer_gstin", width=120), - dict( - fieldtype="Data", label="Billing Address GSTIN", fieldname="billing_address_gstin", width=140 - ), - dict(fieldtype="Data", label="Company GSTIN", fieldname="company_gstin", width=120), - dict(fieldtype="Data", label="Place of Supply", fieldname="place_of_supply", width=120), - dict(fieldtype="Data", label="Reverse Charge", fieldname="reverse_charge", width=120), - dict(fieldtype="Data", label="GST Category", fieldname="gst_category", width=120), - dict(fieldtype="Data", label="Export Type", fieldname="export_type", width=120), - dict(fieldtype="Data", label="E-Commerce GSTIN", fieldname="ecommerce_gstin", width=130), - dict(fieldtype="Data", label="HSN Code", fieldname="gst_hsn_code", width=120), - ], - additional_query_columns=[ - "customer_gstin", - "billing_address_gstin", - "company_gstin", - "place_of_supply", - "reverse_charge", - "gst_category", - "export_type", - "ecommerce_gstin", - "gst_hsn_code", - ], - ) diff --git a/erpnext/regional/report/gst_purchase_register/__init__.py b/erpnext/regional/report/gst_purchase_register/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.js b/erpnext/regional/report/gst_purchase_register/gst_purchase_register.js deleted file mode 100644 index bbcd355d13..0000000000 --- a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -{% include "erpnext/accounts/report/purchase_register/purchase_register.js" %} - -frappe.query_reports["GST Purchase Register"] = frappe.query_reports["Purchase Register"] diff --git a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.json b/erpnext/regional/report/gst_purchase_register/gst_purchase_register.json deleted file mode 100644 index 115ee97303..0000000000 --- a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2017-06-22 11:06:40.836073", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2017-08-04 15:39:53.123814", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Purchase Register", - "owner": "Administrator", - "ref_doctype": "Purchase Invoice", - "report_name": "GST Purchase Register", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py b/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py deleted file mode 100644 index 609dbbaf73..0000000000 --- a/erpnext/regional/report/gst_purchase_register/gst_purchase_register.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from erpnext.accounts.report.purchase_register.purchase_register import _execute - - -def execute(filters=None): - return _execute( - filters, - additional_table_columns=[ - dict(fieldtype="Data", label="Supplier GSTIN", fieldname="supplier_gstin", width=120), - dict(fieldtype="Data", label="Company GSTIN", fieldname="company_gstin", width=120), - dict(fieldtype="Data", label="Reverse Charge", fieldname="reverse_charge", width=120), - dict(fieldtype="Data", label="GST Category", fieldname="gst_category", width=120), - dict(fieldtype="Data", label="Export Type", fieldname="export_type", width=120), - dict(fieldtype="Data", label="E-Commerce GSTIN", fieldname="ecommerce_gstin", width=130), - ], - additional_query_columns=[ - "supplier_gstin", - "company_gstin", - "reverse_charge", - "gst_category", - "export_type", - "ecommerce_gstin", - ], - ) diff --git a/erpnext/regional/report/gst_sales_register/__init__.py b/erpnext/regional/report/gst_sales_register/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gst_sales_register/gst_sales_register.js b/erpnext/regional/report/gst_sales_register/gst_sales_register.js deleted file mode 100644 index b9a0a37ee5..0000000000 --- a/erpnext/regional/report/gst_sales_register/gst_sales_register.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -{% include "erpnext/accounts/report/sales_register/sales_register.js" %} - -frappe.query_reports["GST Sales Register"] = frappe.query_reports["Sales Register"] diff --git a/erpnext/regional/report/gst_sales_register/gst_sales_register.json b/erpnext/regional/report/gst_sales_register/gst_sales_register.json deleted file mode 100644 index 3f5246d575..0000000000 --- a/erpnext/regional/report/gst_sales_register/gst_sales_register.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "add_total_row": 1, - "apply_user_permissions": 1, - "creation": "2017-06-21 16:44:41.621260", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2017-08-04 15:39:33.401936", - "modified_by": "Administrator", - "module": "Regional", - "name": "GST Sales Register", - "owner": "Administrator", - "ref_doctype": "Sales Invoice", - "report_name": "GST Sales Register", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gst_sales_register/gst_sales_register.py b/erpnext/regional/report/gst_sales_register/gst_sales_register.py deleted file mode 100644 index 94ceb197b1..0000000000 --- a/erpnext/regional/report/gst_sales_register/gst_sales_register.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from erpnext.accounts.report.sales_register.sales_register import _execute - - -def execute(filters=None): - return _execute( - filters, - additional_table_columns=[ - dict(fieldtype="Data", label="Customer GSTIN", fieldname="customer_gstin", width=120), - dict( - fieldtype="Data", label="Billing Address GSTIN", fieldname="billing_address_gstin", width=140 - ), - dict(fieldtype="Data", label="Company GSTIN", fieldname="company_gstin", width=120), - dict(fieldtype="Data", label="Place of Supply", fieldname="place_of_supply", width=120), - dict(fieldtype="Data", label="Reverse Charge", fieldname="reverse_charge", width=120), - dict(fieldtype="Data", label="GST Category", fieldname="gst_category", width=120), - dict(fieldtype="Data", label="Export Type", fieldname="export_type", width=120), - dict(fieldtype="Data", label="E-Commerce GSTIN", fieldname="ecommerce_gstin", width=130), - ], - additional_query_columns=[ - "customer_gstin", - "billing_address_gstin", - "company_gstin", - "place_of_supply", - "reverse_charge", - "gst_category", - "export_type", - "ecommerce_gstin", - ], - ) diff --git a/erpnext/regional/report/gstr_1/__init__.py b/erpnext/regional/report/gstr_1/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gstr_1/gstr_1.js b/erpnext/regional/report/gstr_1/gstr_1.js deleted file mode 100644 index 943bd2c3d2..0000000000 --- a/erpnext/regional/report/gstr_1/gstr_1.js +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.query_reports["GSTR-1"] = { - "filters": [ - { - "fieldname": "company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "reqd": 1, - "default": frappe.defaults.get_user_default("Company") - }, - { - "fieldname": "company_address", - "label": __("Address"), - "fieldtype": "Link", - "options": "Address", - "get_query": function () { - let company = frappe.query_report.get_filter_value('company'); - if (company) { - return { - "query": 'frappe.contacts.doctype.address.address.address_query', - "filters": { link_doctype: 'Company', link_name: company } - }; - } - } - }, - { - "fieldname": "company_gstin", - "label": __("Company GSTIN"), - "fieldtype": "Select" - }, - { - "fieldname": "from_date", - "label": __("From Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.add_months(frappe.datetime.get_today(), -3), - "width": "80" - }, - { - "fieldname": "to_date", - "label": __("To Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.get_today() - }, - { - "fieldname": "type_of_business", - "label": __("Type of Business"), - "fieldtype": "Select", - "reqd": 1, - "options": [ - { "value": "B2B", "label": __("B2B Invoices - 4A, 4B, 4C, 6B, 6C") }, - { "value": "B2C Large", "label": __("B2C(Large) Invoices - 5A, 5B") }, - { "value": "B2C Small", "label": __("B2C(Small) Invoices - 7") }, - { "value": "CDNR-REG", "label": __("Credit/Debit Notes (Registered) - 9B") }, - { "value": "CDNR-UNREG", "label": __("Credit/Debit Notes (Unregistered) - 9B") }, - { "value": "EXPORT", "label": __("Export Invoice - 6A") }, - { "value": "Advances", "label": __("Tax Liability (Advances Received) - 11A(1), 11A(2)") }, - { "value": "NIL Rated", "label": __("NIL RATED/EXEMPTED Invoices") } - ], - "default": "B2B" - } - ], - onload: function (report) { - let filters = report.get_values(); - - frappe.call({ - method: 'erpnext.regional.report.gstr_1.gstr_1.get_company_gstins', - args: { - company: filters.company - }, - callback: function(r) { - frappe.query_report.page.fields_dict.company_gstin.df.options = r.message; - frappe.query_report.page.fields_dict.company_gstin.refresh(); - } - }); - - report.page.add_inner_button(__("Download as JSON"), function () { - let filters = report.get_values(); - - frappe.call({ - method: 'erpnext.regional.report.gstr_1.gstr_1.get_json', - args: { - data: report.data, - report_name: report.report_name, - filters: filters - }, - callback: function(r) { - if (r.message) { - const args = { - cmd: 'erpnext.regional.report.gstr_1.gstr_1.download_json_file', - data: r.message.data, - report_name: r.message.report_name, - report_type: r.message.report_type - }; - open_url_post(frappe.request.url, args); - } - } - }); - }); - } -} diff --git a/erpnext/regional/report/gstr_1/gstr_1.json b/erpnext/regional/report/gstr_1/gstr_1.json deleted file mode 100644 index 75aed8cffc..0000000000 --- a/erpnext/regional/report/gstr_1/gstr_1.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "add_total_row": 1, - "creation": "2018-01-02 15:54:41.424225", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2019-09-03 19:33:59.769385", - "modified_by": "Administrator", - "module": "Regional", - "name": "GSTR-1", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "GL Entry", - "report_name": "GSTR-1", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py deleted file mode 100644 index 0fe0647eb7..0000000000 --- a/erpnext/regional/report/gstr_1/gstr_1.py +++ /dev/null @@ -1,1138 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import json -from datetime import date - -import frappe -from frappe import _ -from frappe.utils import flt, formatdate, getdate - -from erpnext.regional.india.utils import get_gst_accounts - - -def execute(filters=None): - return Gstr1Report(filters).run() - - -class Gstr1Report(object): - def __init__(self, filters=None): - self.filters = frappe._dict(filters or {}) - self.columns = [] - self.data = [] - self.doctype = "Sales Invoice" - self.tax_doctype = "Sales Taxes and Charges" - self.select_columns = """ - name as invoice_number, - customer_name, - posting_date, - base_grand_total, - base_rounded_total, - NULLIF(billing_address_gstin, '') as billing_address_gstin, - place_of_supply, - ecommerce_gstin, - reverse_charge, - return_against, - is_return, - is_debit_note, - gst_category, - export_type, - port_code, - shipping_bill_number, - shipping_bill_date, - reason_for_issuing_document, - company_gstin - """ - - def run(self): - self.get_columns() - self.gst_accounts = get_gst_accounts(self.filters.company, only_non_reverse_charge=1) - self.get_invoice_data() - - if self.invoices: - self.get_invoice_items() - self.get_items_based_on_tax_rate() - self.invoice_fields = [d["fieldname"] for d in self.invoice_columns] - - self.get_data() - - return self.columns, self.data - - def get_data(self): - if self.filters.get("type_of_business") in ("B2C Small", "B2C Large"): - self.get_b2c_data() - elif self.filters.get("type_of_business") == "Advances": - self.get_advance_data() - elif self.filters.get("type_of_business") == "NIL Rated": - self.get_nil_rated_invoices() - elif self.invoices: - for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): - invoice_details = self.invoices.get(inv) - for rate, items in items_based_on_rate.items(): - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - - if self.filters.get("type_of_business") in ("CDNR-REG", "CDNR-UNREG"): - row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") - row.append("C" if invoice_details.is_return else "D") - - if taxable_value: - self.data.append(row) - - def get_advance_data(self): - advances_data = {} - advances = self.get_advance_entries() - for entry in advances: - # only consider IGST and SGST so as to avoid duplication of taxable amount - if ( - entry.account_head in self.gst_accounts.igst_account - or entry.account_head in self.gst_accounts.sgst_account - ): - advances_data.setdefault((entry.place_of_supply, entry.rate), [0.0, 0.0]) - advances_data[(entry.place_of_supply, entry.rate)][0] += entry.amount * 100 / entry.rate - elif entry.account_head in self.gst_accounts.cess_account: - advances_data[(entry.place_of_supply, entry.rate)][1] += entry.amount - - for key, value in advances_data.items(): - row = [key[0], key[1], value[0], value[1]] - self.data.append(row) - - def get_nil_rated_invoices(self): - nil_exempt_output = [ - { - "description": "Inter-State supplies to registered persons", - "nil_rated": 0.0, - "exempted": 0.0, - "non_gst": 0.0, - }, - { - "description": "Intra-State supplies to registered persons", - "nil_rated": 0.0, - "exempted": 0.0, - "non_gst": 0.0, - }, - { - "description": "Inter-State supplies to unregistered persons", - "nil_rated": 0.0, - "exempted": 0.0, - "non_gst": 0.0, - }, - { - "description": "Intra-State supplies to unregistered persons", - "nil_rated": 0.0, - "exempted": 0.0, - "non_gst": 0.0, - }, - ] - - for invoice, details in self.nil_exempt_non_gst.items(): - invoice_detail = self.invoices.get(invoice) - if invoice_detail.get("gst_category") in ("Registered Regular", "Deemed Export", "SEZ"): - if is_inter_state(invoice_detail): - nil_exempt_output[0]["nil_rated"] += details[0] - nil_exempt_output[0]["exempted"] += details[1] - nil_exempt_output[0]["non_gst"] += details[2] - else: - nil_exempt_output[1]["nil_rated"] += details[0] - nil_exempt_output[1]["exempted"] += details[1] - nil_exempt_output[1]["non_gst"] += details[2] - else: - if is_inter_state(invoice_detail): - nil_exempt_output[2]["nil_rated"] += details[0] - nil_exempt_output[2]["exempted"] += details[1] - nil_exempt_output[2]["non_gst"] += details[2] - else: - nil_exempt_output[3]["nil_rated"] += details[0] - nil_exempt_output[3]["exempted"] += details[1] - nil_exempt_output[3]["non_gst"] += details[2] - - self.data = nil_exempt_output - - def get_b2c_data(self): - b2cs_output = {} - - if self.invoices: - for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): - invoice_details = self.invoices.get(inv) - for rate, items in items_based_on_rate.items(): - place_of_supply = invoice_details.get("place_of_supply") - ecommerce_gstin = invoice_details.get("ecommerce_gstin") - - b2cs_output.setdefault( - (rate, place_of_supply, ecommerce_gstin), - { - "place_of_supply": "", - "ecommerce_gstin": "", - "rate": "", - "taxable_value": 0, - "cess_amount": 0, - "type": "", - "invoice_number": invoice_details.get("invoice_number"), - "posting_date": invoice_details.get("posting_date"), - "invoice_value": invoice_details.get("base_grand_total"), - }, - ) - - row = b2cs_output.get((rate, place_of_supply, ecommerce_gstin)) - row["place_of_supply"] = place_of_supply - row["ecommerce_gstin"] = ecommerce_gstin - row["rate"] = rate - row["taxable_value"] += sum( - [ - abs(net_amount) - for item_code, net_amount in self.invoice_items.get(inv).items() - if item_code in items - ] - ) - row["cess_amount"] += flt(self.invoice_cess.get(inv), 2) - row["type"] = "E" if ecommerce_gstin else "OE" - - for key, value in b2cs_output.items(): - self.data.append(value) - - def get_row_data_for_invoice(self, invoice, invoice_details, tax_rate, items): - row = [] - for fieldname in self.invoice_fields: - if ( - self.filters.get("type_of_business") in ("CDNR-REG", "CDNR-UNREG") - and fieldname == "invoice_value" - ): - row.append(abs(invoice_details.base_rounded_total) or abs(invoice_details.base_grand_total)) - elif fieldname == "invoice_value": - row.append(invoice_details.base_rounded_total or invoice_details.base_grand_total) - elif fieldname in ("posting_date", "shipping_bill_date"): - row.append(formatdate(invoice_details.get(fieldname), "dd-MMM-YY")) - elif fieldname == "export_type": - export_type = "WPAY" if invoice_details.get(fieldname) == "With Payment of Tax" else "WOPAY" - row.append(export_type) - else: - row.append(invoice_details.get(fieldname)) - taxable_value = 0 - - if invoice in self.cgst_sgst_invoices: - division_factor = 2 - else: - division_factor = 1 - - for item_code, net_amount in self.invoice_items.get(invoice).items(): - if item_code in items: - if self.item_tax_rate.get(invoice) and tax_rate / division_factor in self.item_tax_rate.get( - invoice, {} - ).get(item_code, []): - taxable_value += abs(net_amount) - elif not self.item_tax_rate.get(invoice): - taxable_value += abs(net_amount) - elif tax_rate: - taxable_value += abs(net_amount) - elif ( - not tax_rate - and self.filters.get("type_of_business") == "EXPORT" - and invoice_details.get("export_type") == "Without Payment of Tax" - ): - taxable_value += abs(net_amount) - - row += [tax_rate or 0, taxable_value] - - for column in self.other_columns: - if column.get("fieldname") == "cess_amount": - row.append(flt(self.invoice_cess.get(invoice), 2)) - - return row, taxable_value - - def get_invoice_data(self): - self.invoices = frappe._dict() - conditions = self.get_conditions() - - invoice_data = frappe.db.sql( - """ - select - {select_columns} - from `tab{doctype}` - where docstatus = 1 {where_conditions} - and is_opening = 'No' - order by posting_date desc - """.format( - select_columns=self.select_columns, doctype=self.doctype, where_conditions=conditions - ), - self.filters, - as_dict=1, - ) - - for d in invoice_data: - self.invoices.setdefault(d.invoice_number, d) - - def get_advance_entries(self): - return frappe.db.sql( - """ - SELECT SUM(a.base_tax_amount) as amount, a.account_head, a.rate, p.place_of_supply - FROM `tabPayment Entry` p, `tabAdvance Taxes and Charges` a - WHERE p.docstatus = 1 - AND p.name = a.parent - AND posting_date between %s and %s - GROUP BY a.account_head, p.place_of_supply, a.rate - """, - (self.filters.get("from_date"), self.filters.get("to_date")), - as_dict=1, - ) - - def get_conditions(self): - conditions = "" - - for opts in ( - ("company", " and company=%(company)s"), - ("from_date", " and posting_date>=%(from_date)s"), - ("to_date", " and posting_date<=%(to_date)s"), - ("company_address", " and company_address=%(company_address)s"), - ("company_gstin", " and company_gstin=%(company_gstin)s"), - ): - if self.filters.get(opts[0]): - conditions += opts[1] - - if self.filters.get("type_of_business") == "B2B": - conditions += "AND IFNULL(gst_category, '') in ('Registered Regular', 'Registered Composition', 'Deemed Export', 'SEZ') AND is_return != 1 AND is_debit_note !=1" - - if self.filters.get("type_of_business") in ("B2C Large", "B2C Small"): - b2c_limit = frappe.db.get_single_value("GST Settings", "b2c_limit") - if not b2c_limit: - frappe.throw(_("Please set B2C Limit in GST Settings.")) - - if self.filters.get("type_of_business") == "B2C Large": - conditions += """ AND ifnull(SUBSTR(place_of_supply, 1, 2),'') != ifnull(SUBSTR(company_gstin, 1, 2),'') - AND grand_total > {0} AND is_return != 1 AND is_debit_note !=1 AND gst_category ='Unregistered' """.format( - flt(b2c_limit) - ) - - elif self.filters.get("type_of_business") == "B2C Small": - conditions += """ AND ( - SUBSTR(place_of_supply, 1, 2) = SUBSTR(company_gstin, 1, 2) - OR grand_total <= {0}) and is_return != 1 AND gst_category ='Unregistered' """.format( - flt(b2c_limit) - ) - - elif self.filters.get("type_of_business") == "CDNR-REG": - conditions += """ AND (is_return = 1 OR is_debit_note = 1) AND IFNULL(gst_category, '') in ('Registered Regular', 'Deemed Export', 'SEZ')""" - - elif self.filters.get("type_of_business") == "CDNR-UNREG": - b2c_limit = frappe.db.get_single_value("GST Settings", "b2c_limit") - conditions += """ AND ifnull(SUBSTR(place_of_supply, 1, 2),'') != ifnull(SUBSTR(company_gstin, 1, 2),'') - AND (is_return = 1 OR is_debit_note = 1) - AND IFNULL(gst_category, '') in ('Unregistered', 'Overseas')""" - - elif self.filters.get("type_of_business") == "EXPORT": - conditions += """ AND is_return !=1 and gst_category = 'Overseas' """ - - conditions += " AND IFNULL(billing_address_gstin, '') != company_gstin" - - return conditions - - def get_invoice_items(self): - self.invoice_items = frappe._dict() - self.item_tax_rate = frappe._dict() - self.nil_exempt_non_gst = {} - - items = frappe.db.sql( - """ - select item_code, parent, taxable_value, base_net_amount, item_tax_rate, is_nil_exempt, - is_non_gst from `tab%s Item` - where parent in (%s) - """ - % (self.doctype, ", ".join(["%s"] * len(self.invoices))), - tuple(self.invoices), - as_dict=1, - ) - - for d in items: - self.invoice_items.setdefault(d.parent, {}).setdefault(d.item_code, 0.0) - self.invoice_items[d.parent][d.item_code] += d.get("taxable_value", 0) or d.get( - "base_net_amount", 0 - ) - - item_tax_rate = {} - - if d.item_tax_rate: - item_tax_rate = json.loads(d.item_tax_rate) - - for account, rate in item_tax_rate.items(): - tax_rate_dict = self.item_tax_rate.setdefault(d.parent, {}).setdefault(d.item_code, []) - tax_rate_dict.append(rate) - - if d.is_nil_exempt: - self.nil_exempt_non_gst.setdefault(d.parent, [0.0, 0.0, 0.0]) - if item_tax_rate: - self.nil_exempt_non_gst[d.parent][0] += d.get("taxable_value", 0) - else: - self.nil_exempt_non_gst[d.parent][1] += d.get("taxable_value", 0) - elif d.is_non_gst: - self.nil_exempt_non_gst.setdefault(d.parent, [0.0, 0.0, 0.0]) - self.nil_exempt_non_gst[d.parent][2] += d.get("taxable_value", 0) - - def get_items_based_on_tax_rate(self): - self.tax_details = frappe.db.sql( - """ - select - parent, account_head, item_wise_tax_detail, base_tax_amount_after_discount_amount - from `tab%s` - where - parenttype = %s and docstatus = 1 - and parent in (%s) - order by account_head - """ - % (self.tax_doctype, "%s", ", ".join(["%s"] * len(self.invoices.keys()))), - tuple([self.doctype] + list(self.invoices.keys())), - ) - - self.items_based_on_tax_rate = {} - self.invoice_cess = frappe._dict() - self.cgst_sgst_invoices = [] - - unidentified_gst_accounts = [] - unidentified_gst_accounts_invoice = [] - for parent, account, item_wise_tax_detail, tax_amount in self.tax_details: - if account in self.gst_accounts.cess_account: - self.invoice_cess.setdefault(parent, tax_amount) - else: - if item_wise_tax_detail: - try: - item_wise_tax_detail = json.loads(item_wise_tax_detail) - cgst_or_sgst = False - if account in self.gst_accounts.cgst_account or account in self.gst_accounts.sgst_account: - cgst_or_sgst = True - - if not (cgst_or_sgst or account in self.gst_accounts.igst_account): - if "gst" in account.lower() and account not in unidentified_gst_accounts: - unidentified_gst_accounts.append(account) - unidentified_gst_accounts_invoice.append(parent) - continue - - for item_code, tax_amounts in item_wise_tax_detail.items(): - tax_rate = tax_amounts[0] - if tax_rate: - if cgst_or_sgst: - tax_rate *= 2 - if parent not in self.cgst_sgst_invoices: - self.cgst_sgst_invoices.append(parent) - - rate_based_dict = self.items_based_on_tax_rate.setdefault(parent, {}).setdefault( - tax_rate, [] - ) - if item_code not in rate_based_dict: - rate_based_dict.append(item_code) - except ValueError: - continue - if unidentified_gst_accounts: - frappe.msgprint( - _("Following accounts might be selected in GST Settings:") - + "
    " - + "
    ".join(unidentified_gst_accounts), - alert=True, - ) - - # Build itemised tax for export invoices where tax table is blank - for invoice, items in self.invoice_items.items(): - if ( - invoice not in self.items_based_on_tax_rate - and invoice not in unidentified_gst_accounts_invoice - and self.invoices.get(invoice, {}).get("export_type") == "Without Payment of Tax" - and self.invoices.get(invoice, {}).get("gst_category") in ("Overseas", "SEZ") - ): - self.items_based_on_tax_rate.setdefault(invoice, {}).setdefault(0, items.keys()) - - def get_columns(self): - self.other_columns = [] - self.tax_columns = [] - - if self.filters.get("type_of_business") != "NIL Rated": - self.tax_columns = [ - {"fieldname": "rate", "label": "Rate", "fieldtype": "Int", "width": 60}, - { - "fieldname": "taxable_value", - "label": "Taxable Value", - "fieldtype": "Currency", - "width": 100, - }, - ] - - if self.filters.get("type_of_business") == "B2B": - self.invoice_columns = [ - { - "fieldname": "billing_address_gstin", - "label": "GSTIN/UIN of Recipient", - "fieldtype": "Data", - "width": 150, - }, - {"fieldname": "customer_name", "label": "Receiver Name", "fieldtype": "Data", "width": 100}, - { - "fieldname": "invoice_number", - "label": "Invoice Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 100, - }, - {"fieldname": "posting_date", "label": "Invoice date", "fieldtype": "Data", "width": 80}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "place_of_supply", - "label": "Place Of Supply", - "fieldtype": "Data", - "width": 100, - }, - {"fieldname": "reverse_charge", "label": "Reverse Charge", "fieldtype": "Data"}, - {"fieldname": "gst_category", "label": "Invoice Type", "fieldtype": "Data"}, - { - "fieldname": "ecommerce_gstin", - "label": "E-Commerce GSTIN", - "fieldtype": "Data", - "width": 120, - }, - ] - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100} - ] - - elif self.filters.get("type_of_business") == "B2C Large": - self.invoice_columns = [ - { - "fieldname": "invoice_number", - "label": "Invoice Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - {"fieldname": "posting_date", "label": "Invoice date", "fieldtype": "Data", "width": 100}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "place_of_supply", - "label": "Place Of Supply", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "ecommerce_gstin", - "label": "E-Commerce GSTIN", - "fieldtype": "Data", - "width": 130, - }, - ] - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100} - ] - elif self.filters.get("type_of_business") == "CDNR-REG": - self.invoice_columns = [ - { - "fieldname": "billing_address_gstin", - "label": "GSTIN/UIN of Recipient", - "fieldtype": "Data", - "width": 150, - }, - {"fieldname": "customer_name", "label": "Receiver Name", "fieldtype": "Data", "width": 120}, - { - "fieldname": "return_against", - "label": "Invoice/Advance Receipt Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - { - "fieldname": "posting_date", - "label": "Invoice/Advance Receipt date", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "invoice_number", - "label": "Invoice/Advance Receipt Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - {"fieldname": "reverse_charge", "label": "Reverse Charge", "fieldtype": "Data"}, - {"fieldname": "export_type", "label": "Export Type", "fieldtype": "Data", "hidden": 1}, - { - "fieldname": "reason_for_issuing_document", - "label": "Reason For Issuing document", - "fieldtype": "Data", - "width": 140, - }, - { - "fieldname": "place_of_supply", - "label": "Place Of Supply", - "fieldtype": "Data", - "width": 120, - }, - {"fieldname": "gst_category", "label": "GST Category", "fieldtype": "Data"}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 120, - }, - ] - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100}, - {"fieldname": "pre_gst", "label": "PRE GST", "fieldtype": "Data", "width": 80}, - {"fieldname": "document_type", "label": "Document Type", "fieldtype": "Data", "width": 80}, - ] - elif self.filters.get("type_of_business") == "CDNR-UNREG": - self.invoice_columns = [ - {"fieldname": "customer_name", "label": "Receiver Name", "fieldtype": "Data", "width": 120}, - { - "fieldname": "return_against", - "label": "Issued Against", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - {"fieldname": "posting_date", "label": "Note Date", "fieldtype": "Date", "width": 120}, - { - "fieldname": "invoice_number", - "label": "Note Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - {"fieldname": "export_type", "label": "Export Type", "fieldtype": "Data", "hidden": 1}, - { - "fieldname": "reason_for_issuing_document", - "label": "Reason For Issuing document", - "fieldtype": "Data", - "width": 140, - }, - { - "fieldname": "place_of_supply", - "label": "Place Of Supply", - "fieldtype": "Data", - "width": 120, - }, - {"fieldname": "gst_category", "label": "GST Category", "fieldtype": "Data"}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 120, - }, - ] - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100}, - {"fieldname": "pre_gst", "label": "PRE GST", "fieldtype": "Data", "width": 80}, - {"fieldname": "document_type", "label": "Document Type", "fieldtype": "Data", "width": 80}, - ] - elif self.filters.get("type_of_business") == "B2C Small": - self.invoice_columns = [ - { - "fieldname": "place_of_supply", - "label": "Place Of Supply", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "ecommerce_gstin", - "label": "E-Commerce GSTIN", - "fieldtype": "Data", - "width": 130, - }, - ] - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100}, - {"fieldname": "type", "label": "Type", "fieldtype": "Data", "width": 50}, - ] - elif self.filters.get("type_of_business") == "EXPORT": - self.invoice_columns = [ - {"fieldname": "export_type", "label": "Export Type", "fieldtype": "Data", "width": 120}, - { - "fieldname": "invoice_number", - "label": "Invoice Number", - "fieldtype": "Link", - "options": "Sales Invoice", - "width": 120, - }, - {"fieldname": "posting_date", "label": "Invoice date", "fieldtype": "Data", "width": 120}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 120, - }, - {"fieldname": "port_code", "label": "Port Code", "fieldtype": "Data", "width": 120}, - { - "fieldname": "shipping_bill_number", - "label": "Shipping Bill Number", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "shipping_bill_date", - "label": "Shipping Bill Date", - "fieldtype": "Data", - "width": 120, - }, - ] - elif self.filters.get("type_of_business") == "Advances": - self.invoice_columns = [ - {"fieldname": "place_of_supply", "label": "Place Of Supply", "fieldtype": "Data", "width": 120} - ] - - self.other_columns = [ - {"fieldname": "cess_amount", "label": "Cess Amount", "fieldtype": "Currency", "width": 100} - ] - elif self.filters.get("type_of_business") == "NIL Rated": - self.invoice_columns = [ - {"fieldname": "description", "label": "Description", "fieldtype": "Data", "width": 420}, - {"fieldname": "nil_rated", "label": "Nil Rated", "fieldtype": "Currency", "width": 200}, - {"fieldname": "exempted", "label": "Exempted", "fieldtype": "Currency", "width": 200}, - {"fieldname": "non_gst", "label": "Non GST", "fieldtype": "Currency", "width": 200}, - ] - - self.columns = self.invoice_columns + self.tax_columns + self.other_columns - - -@frappe.whitelist() -def get_json(filters, report_name, data): - filters = json.loads(filters) - report_data = json.loads(data) - gstin = get_company_gstin_number(filters.get("company"), filters.get("company_address")) - - fp = "%02d%s" % (getdate(filters["to_date"]).month, getdate(filters["to_date"]).year) - - gst_json = {"version": "GST3.0.4", "hash": "hash", "gstin": gstin, "fp": fp} - - res = {} - if filters["type_of_business"] == "B2B": - for item in report_data[:-1]: - res.setdefault(item["billing_address_gstin"], {}).setdefault(item["invoice_number"], []).append( - item - ) - - out = get_b2b_json(res, gstin) - gst_json["b2b"] = out - - elif filters["type_of_business"] == "B2C Large": - for item in report_data[:-1]: - res.setdefault(item["place_of_supply"], []).append(item) - - out = get_b2cl_json(res, gstin) - gst_json["b2cl"] = out - - elif filters["type_of_business"] == "B2C Small": - out = get_b2cs_json(report_data[:-1], gstin) - gst_json["b2cs"] = out - - elif filters["type_of_business"] == "EXPORT": - for item in report_data[:-1]: - res.setdefault(item["export_type"], []).append(item) - - out = get_export_json(res) - gst_json["exp"] = out - elif filters["type_of_business"] == "CDNR-REG": - for item in report_data[:-1]: - res.setdefault(item["billing_address_gstin"], {}).setdefault(item["invoice_number"], []).append( - item - ) - - out = get_cdnr_reg_json(res, gstin) - gst_json["cdnr"] = out - elif filters["type_of_business"] == "CDNR-UNREG": - for item in report_data[:-1]: - res.setdefault(item["invoice_number"], []).append(item) - - out = get_cdnr_unreg_json(res, gstin) - gst_json["cdnur"] = out - - elif filters["type_of_business"] == "Advances": - for item in report_data[:-1]: - if not item.get("place_of_supply"): - frappe.throw( - _( - """{0} not entered in some entries. - Please update and try again""" - ).format(frappe.bold("Place Of Supply")) - ) - - res.setdefault(item["place_of_supply"], []).append(item) - - out = get_advances_json(res, gstin) - gst_json["at"] = out - - elif filters["type_of_business"] == "NIL Rated": - res = report_data[:-1] - out = get_exempted_json(res) - gst_json["nil"] = out - - return {"report_name": report_name, "report_type": filters["type_of_business"], "data": gst_json} - - -def get_b2b_json(res, gstin): - out = [] - for gst_in in res: - b2b_item, inv = {"ctin": gst_in, "inv": []}, [] - if not gst_in: - continue - - for number, invoice in res[gst_in].items(): - if not invoice[0]["place_of_supply"]: - frappe.throw( - _( - """{0} not entered in Invoice {1}. - Please update and try again""" - ).format( - frappe.bold("Place Of Supply"), frappe.bold(invoice[0]["invoice_number"]) - ) - ) - - inv_item = get_basic_invoice_detail(invoice[0]) - inv_item["pos"] = "%02d" % int(invoice[0]["place_of_supply"].split("-")[0]) - inv_item["rchrg"] = invoice[0]["reverse_charge"] - inv_item["inv_typ"] = get_invoice_type(invoice[0]) - - if inv_item["pos"] == "00": - continue - inv_item["itms"] = [] - - for item in invoice: - inv_item["itms"].append(get_rate_and_tax_details(item, gstin)) - - inv.append(inv_item) - - if not inv: - continue - b2b_item["inv"] = inv - out.append(b2b_item) - - return out - - -def get_b2cs_json(data, gstin): - company_state_number = gstin[0:2] - - out = [] - for d in data: - if not d.get("place_of_supply"): - frappe.throw( - _( - """{0} not entered in some invoices. - Please update and try again""" - ).format(frappe.bold("Place Of Supply")) - ) - - pos = d.get("place_of_supply").split("-")[0] - tax_details = {} - - rate = d.get("rate", 0) - tax = flt((d["taxable_value"] * rate) / 100.0, 2) - - if company_state_number == pos: - tax_details.update({"camt": flt(tax / 2.0, 2), "samt": flt(tax / 2.0, 2)}) - else: - tax_details.update({"iamt": tax}) - - inv = { - "sply_ty": "INTRA" if company_state_number == pos else "INTER", - "pos": pos, - "typ": d.get("type"), - "txval": flt(d.get("taxable_value"), 2), - "rt": rate, - "iamt": flt(tax_details.get("iamt"), 2), - "camt": flt(tax_details.get("camt"), 2), - "samt": flt(tax_details.get("samt"), 2), - "csamt": flt(d.get("cess_amount"), 2), - } - - if d.get("type") == "E" and d.get("ecommerce_gstin"): - inv.update({"etin": d.get("ecommerce_gstin")}) - - out.append(inv) - - return out - - -def get_advances_json(data, gstin): - company_state_number = gstin[0:2] - out = [] - for place_of_supply, items in data.items(): - supply_type = "INTRA" if company_state_number == place_of_supply.split("-")[0] else "INTER" - row = {"pos": place_of_supply.split("-")[0], "itms": [], "sply_ty": supply_type} - - for item in items: - itms = { - "rt": item["rate"], - "ad_amount": flt(item.get("taxable_value")), - "csamt": flt(item.get("cess_amount")), - } - - if supply_type == "INTRA": - itms.update( - { - "samt": flt((itms["ad_amount"] * itms["rt"]) / 100), - "camt": flt((itms["ad_amount"] * itms["rt"]) / 100), - "rt": itms["rt"] * 2, - } - ) - else: - itms.update({"iamt": flt((itms["ad_amount"] * itms["rt"]) / 100)}) - - row["itms"].append(itms) - out.append(row) - - return out - - -def get_b2cl_json(res, gstin): - out = [] - for pos in res: - if not pos: - frappe.throw( - _( - """{0} not entered in some invoices. - Please update and try again""" - ).format(frappe.bold("Place Of Supply")) - ) - - b2cl_item, inv = {"pos": "%02d" % int(pos.split("-")[0]), "inv": []}, [] - - for row in res[pos]: - inv_item = get_basic_invoice_detail(row) - if row.get("sale_from_bonded_wh"): - inv_item["inv_typ"] = "CBW" - - inv_item["itms"] = [get_rate_and_tax_details(row, gstin)] - - inv.append(inv_item) - - b2cl_item["inv"] = inv - out.append(b2cl_item) - - return out - - -def get_export_json(res): - out = [] - for exp_type in res: - exp_item, inv = {"exp_typ": exp_type, "inv": []}, [] - - for row in res[exp_type]: - inv_item = get_basic_invoice_detail(row) - inv_item["itms"] = [ - {"txval": flt(row["taxable_value"], 2), "rt": row["rate"] or 0, "iamt": 0, "csamt": 0} - ] - - inv.append(inv_item) - - exp_item["inv"] = inv - out.append(exp_item) - - return out - - -def get_cdnr_reg_json(res, gstin): - out = [] - - for gst_in in res: - cdnr_item, inv = {"ctin": gst_in, "nt": []}, [] - if not gst_in: - continue - - for number, invoice in res[gst_in].items(): - if not invoice[0]["place_of_supply"]: - frappe.throw( - _( - """{0} not entered in Invoice {1}. - Please update and try again""" - ).format( - frappe.bold("Place Of Supply"), frappe.bold(invoice[0]["invoice_number"]) - ) - ) - - inv_item = { - "nt_num": invoice[0]["invoice_number"], - "nt_dt": getdate(invoice[0]["posting_date"]).strftime("%d-%m-%Y"), - "val": abs(flt(invoice[0]["invoice_value"])), - "ntty": invoice[0]["document_type"], - "pos": "%02d" % int(invoice[0]["place_of_supply"].split("-")[0]), - "rchrg": invoice[0]["reverse_charge"], - "inv_typ": get_invoice_type(invoice[0]), - } - - inv_item["itms"] = [] - for item in invoice: - inv_item["itms"].append(get_rate_and_tax_details(item, gstin)) - - inv.append(inv_item) - - if not inv: - continue - cdnr_item["nt"] = inv - out.append(cdnr_item) - - return out - - -def get_cdnr_unreg_json(res, gstin): - out = [] - - for invoice, items in res.items(): - inv_item = { - "nt_num": items[0]["invoice_number"], - "nt_dt": getdate(items[0]["posting_date"]).strftime("%d-%m-%Y"), - "val": abs(flt(items[0]["invoice_value"])), - "ntty": items[0]["document_type"], - "pos": "%02d" % int(items[0]["place_of_supply"].split("-")[0]), - "typ": get_invoice_type(items[0]), - } - - inv_item["itms"] = [] - for item in items: - inv_item["itms"].append(get_rate_and_tax_details(item, gstin)) - - out.append(inv_item) - - return out - - -def get_exempted_json(data): - out = { - "inv": [ - {"sply_ty": "INTRB2B"}, - {"sply_ty": "INTRAB2B"}, - {"sply_ty": "INTRB2C"}, - {"sply_ty": "INTRAB2C"}, - ] - } - - for i, v in enumerate(data): - if data[i].get("nil_rated"): - out["inv"][i]["nil_amt"] = data[i]["nil_rated"] - - if data[i].get("exempted"): - out["inv"][i]["expt_amt"] = data[i]["exempted"] - - if data[i].get("non_gst"): - out["inv"][i]["ngsup_amt"] = data[i]["non_gst"] - - return out - - -def get_invoice_type(row): - gst_category = row.get("gst_category") - - if gst_category == "SEZ": - return "SEWP" if row.get("export_type") == "WPAY" else "SEWOP" - - if gst_category == "Overseas": - return "EXPWP" if row.get("export_type") == "WPAY" else "EXPWOP" - - return ( - { - "Deemed Export": "DE", - "Registered Regular": "R", - "Registered Composition": "R", - "Unregistered": "B2CL", - } - ).get(gst_category) - - -def get_basic_invoice_detail(row): - return { - "inum": row["invoice_number"], - "idt": getdate(row["posting_date"]).strftime("%d-%m-%Y"), - "val": flt(row["invoice_value"], 2), - } - - -def get_rate_and_tax_details(row, gstin): - itm_det = { - "txval": flt(row["taxable_value"], 2), - "rt": row["rate"], - "csamt": (flt(row.get("cess_amount"), 2) or 0), - } - - # calculate rate - num = 1 if not row["rate"] else "%d%02d" % (row["rate"], 1) - rate = row.get("rate") or 0 - - # calculate tax amount added - tax = flt((row["taxable_value"] * rate) / 100.0, 2) - frappe.errprint([tax, tax / 2]) - if row.get("billing_address_gstin") and gstin[0:2] == row["billing_address_gstin"][0:2]: - itm_det.update({"camt": flt(tax / 2.0, 2), "samt": flt(tax / 2.0, 2)}) - else: - itm_det.update({"iamt": tax}) - - return {"num": int(num), "itm_det": itm_det} - - -def get_company_gstin_number(company, address=None, all_gstins=False): - gstin = "" - if address: - gstin = frappe.db.get_value("Address", address, "gstin") - - if not gstin: - filters = [ - ["is_your_company_address", "=", 1], - ["Dynamic Link", "link_doctype", "=", "Company"], - ["Dynamic Link", "link_name", "=", company], - ["Dynamic Link", "parenttype", "=", "Address"], - ["gstin", "!=", ""], - ] - gstin = frappe.get_all( - "Address", filters=filters, pluck="gstin", order_by="is_primary_address desc" - ) - if gstin and not all_gstins: - gstin = gstin[0] - - if not gstin: - address = frappe.bold(address) if address else "" - frappe.throw( - _("Please set valid GSTIN No. in Company Address {} for company {}").format( - address, frappe.bold(company) - ) - ) - - return gstin - - -@frappe.whitelist() -def download_json_file(): - """download json content in a file""" - data = frappe._dict(frappe.local.form_dict) - frappe.response["filename"] = ( - frappe.scrub("{0} {1}".format(data["report_name"], data["report_type"])) + ".json" - ) - frappe.response["filecontent"] = data["data"] - frappe.response["content_type"] = "application/json" - frappe.response["type"] = "download" - - -def is_inter_state(invoice_detail): - if invoice_detail.place_of_supply.split("-")[0] != invoice_detail.company_gstin[:2]: - return True - else: - return False - - -@frappe.whitelist() -def get_company_gstins(company): - address = frappe.qb.DocType("Address") - links = frappe.qb.DocType("Dynamic Link") - - addresses = ( - frappe.qb.from_(address) - .inner_join(links) - .on(address.name == links.parent) - .select(address.gstin) - .where(links.link_doctype == "Company") - .where(links.link_name == company) - .run(as_dict=1) - ) - - address_list = [""] + [d.gstin for d in addresses] - - return address_list diff --git a/erpnext/regional/report/gstr_2/__init__.py b/erpnext/regional/report/gstr_2/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/gstr_2/gstr_2.js b/erpnext/regional/report/gstr_2/gstr_2.js deleted file mode 100644 index 5c1ea67e8e..0000000000 --- a/erpnext/regional/report/gstr_2/gstr_2.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.query_reports["GSTR-2"] = { - "filters": [ - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "reqd": 1, - "default": frappe.defaults.get_user_default("Company") - }, - { - "fieldname":"from_date", - "label": __("From Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.add_months(frappe.datetime.get_today(), -3), - "width": "80" - }, - { - "fieldname":"to_date", - "label": __("To Date"), - "fieldtype": "Date", - "reqd": 1, - "default": frappe.datetime.get_today() - }, - { - "fieldname":"type_of_business", - "label": __("Type of Business"), - "fieldtype": "Select", - "reqd": 1, - "options": ["B2B","CDNR"], - "default": "B2B" - } - ] -} diff --git a/erpnext/regional/report/gstr_2/gstr_2.json b/erpnext/regional/report/gstr_2/gstr_2.json deleted file mode 100644 index b70d0f9416..0000000000 --- a/erpnext/regional/report/gstr_2/gstr_2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "add_total_row": 0, - "apply_user_permissions": 1, - "creation": "2018-01-29 12:59:55.650445", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2018-09-03 12:59:55.650445", - "modified_by": "Administrator", - "module": "Regional", - "name": "GSTR-2", - "owner": "Administrator", - "ref_doctype": "GL Entry", - "report_name": "GSTR-2", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/gstr_2/gstr_2.py b/erpnext/regional/report/gstr_2/gstr_2.py deleted file mode 100644 index a189d2a500..0000000000 --- a/erpnext/regional/report/gstr_2/gstr_2.py +++ /dev/null @@ -1,240 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from datetime import date - -import frappe - -from erpnext.regional.report.gstr_1.gstr_1 import Gstr1Report - - -def execute(filters=None): - return Gstr2Report(filters).run() - - -class Gstr2Report(Gstr1Report): - def __init__(self, filters=None): - self.filters = frappe._dict(filters or {}) - self.columns = [] - self.data = [] - self.doctype = "Purchase Invoice" - self.tax_doctype = "Purchase Taxes and Charges" - self.select_columns = """ - name as invoice_number, - supplier_name, - posting_date, - base_grand_total, - base_rounded_total, - supplier_gstin, - place_of_supply, - ecommerce_gstin, - reverse_charge, - gst_category, - return_against, - is_return, - gst_category, - export_type, - reason_for_issuing_document, - eligibility_for_itc, - itc_integrated_tax, - itc_central_tax, - itc_state_tax, - itc_cess_amount - """ - - def get_data(self): - self.get_igst_invoices() - for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): - invoice_details = self.invoices.get(inv) - for rate, items in items_based_on_rate.items(): - if rate or invoice_details.get("gst_category") == "Registered Composition": - if inv not in self.igst_invoices: - rate = rate / 2 - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - tax_amount = taxable_value * rate / 100 - row += [0, tax_amount, tax_amount] - else: - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - tax_amount = taxable_value * rate / 100 - row += [tax_amount, 0, 0] - - row += [ - self.invoice_cess.get(inv), - invoice_details.get("eligibility_for_itc"), - invoice_details.get("itc_integrated_tax"), - invoice_details.get("itc_central_tax"), - invoice_details.get("itc_state_tax"), - invoice_details.get("itc_cess_amount"), - ] - if self.filters.get("type_of_business") == "CDNR": - row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") - row.append("C" if invoice_details.return_against else "R") - - self.data.append(row) - - def get_igst_invoices(self): - self.igst_invoices = [] - for d in self.tax_details: - is_igst = True if d[1] in self.gst_accounts.igst_account else False - if is_igst and d[0] not in self.igst_invoices: - self.igst_invoices.append(d[0]) - - def get_conditions(self): - conditions = "" - - for opts in ( - ("company", " and company=%(company)s"), - ("from_date", " and posting_date>=%(from_date)s"), - ("to_date", " and posting_date<=%(to_date)s"), - ): - if self.filters.get(opts[0]): - conditions += opts[1] - - if self.filters.get("type_of_business") == "B2B": - conditions += "and ifnull(gst_category, '') in ('Registered Regular', 'Deemed Export', 'SEZ', 'Registered Composition') and is_return != 1 " - - elif self.filters.get("type_of_business") == "CDNR": - conditions += """ and is_return = 1 """ - - return conditions - - def get_columns(self): - self.tax_columns = [ - {"fieldname": "rate", "label": "Rate", "fieldtype": "Int", "width": 60}, - {"fieldname": "taxable_value", "label": "Taxable Value", "fieldtype": "Currency", "width": 100}, - { - "fieldname": "integrated_tax_paid", - "label": "Integrated Tax Paid", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "central_tax_paid", - "label": "Central Tax Paid", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "state_tax_paid", - "label": "State/UT Tax Paid", - "fieldtype": "Currency", - "width": 100, - }, - {"fieldname": "cess_amount", "label": "Cess Paid", "fieldtype": "Currency", "width": 100}, - { - "fieldname": "eligibility_for_itc", - "label": "Eligibility For ITC", - "fieldtype": "Data", - "width": 100, - }, - { - "fieldname": "itc_integrated_tax", - "label": "Availed ITC Integrated Tax", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "itc_central_tax", - "label": "Availed ITC Central Tax", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "itc_state_tax", - "label": "Availed ITC State/UT Tax", - "fieldtype": "Currency", - "width": 100, - }, - { - "fieldname": "itc_cess_amount", - "label": "Availed ITC Cess ", - "fieldtype": "Currency", - "width": 100, - }, - ] - self.other_columns = [] - - if self.filters.get("type_of_business") == "B2B": - self.invoice_columns = [ - { - "fieldname": "supplier_gstin", - "label": "GSTIN of Supplier", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "invoice_number", - "label": "Invoice Number", - "fieldtype": "Link", - "options": "Purchase Invoice", - "width": 120, - }, - {"fieldname": "posting_date", "label": "Invoice date", "fieldtype": "Date", "width": 120}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 120, - }, - { - "fieldname": "place_of_supply", - "label": "Place of Supply", - "fieldtype": "Data", - "width": 120, - }, - {"fieldname": "reverse_charge", "label": "Reverse Charge", "fieldtype": "Data", "width": 80}, - {"fieldname": "gst_category", "label": "Invoice Type", "fieldtype": "Data", "width": 80}, - ] - elif self.filters.get("type_of_business") == "CDNR": - self.invoice_columns = [ - { - "fieldname": "supplier_gstin", - "label": "GSTIN of Supplier", - "fieldtype": "Data", - "width": 120, - }, - { - "fieldname": "invoice_number", - "label": "Note/Refund Voucher Number", - "fieldtype": "Link", - "options": "Purchase Invoice", - }, - { - "fieldname": "posting_date", - "label": "Note/Refund Voucher date", - "fieldtype": "Date", - "width": 120, - }, - { - "fieldname": "return_against", - "label": "Invoice/Advance Payment Voucher Number", - "fieldtype": "Link", - "options": "Purchase Invoice", - "width": 120, - }, - { - "fieldname": "posting_date", - "label": "Invoice/Advance Payment Voucher date", - "fieldtype": "Date", - "width": 120, - }, - { - "fieldname": "reason_for_issuing_document", - "label": "Reason For Issuing document", - "fieldtype": "Data", - "width": 120, - }, - {"fieldname": "supply_type", "label": "Supply Type", "fieldtype": "Data", "width": 120}, - { - "fieldname": "invoice_value", - "label": "Invoice Value", - "fieldtype": "Currency", - "width": 120, - }, - ] - self.other_columns = [ - {"fieldname": "pre_gst", "label": "PRE GST", "fieldtype": "Data", "width": 50}, - {"fieldname": "document_type", "label": "Document Type", "fieldtype": "Data", "width": 50}, - ] - self.columns = self.invoice_columns + self.tax_columns + self.other_columns diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/__init__.py b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.js b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.js deleted file mode 100644 index b757d53aa2..0000000000 --- a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.js +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -{% include "erpnext/regional/report/india_gst_common/india_gst_common.js" %} - -frappe.query_reports["HSN-wise-summary of outward supplies"] = { - "filters": [ - { - "fieldname":"company", - "label": __("Company"), - "fieldtype": "Link", - "options": "Company", - "reqd": 1, - "default": frappe.defaults.get_user_default("Company"), - "on_change": fetch_gstins - }, - { - "fieldname":"gst_hsn_code", - "label": __("HSN/SAC"), - "fieldtype": "Link", - "options": "GST HSN Code", - "width": "80" - }, - { - "fieldname":"company_gstin", - "label": __("Company GSTIN"), - "fieldtype": "Select", - "placeholder":"Company GSTIN", - "options": [""], - "width": "80" - }, - { - "fieldname":"from_date", - "label": __("From Date"), - "fieldtype": "Date", - "width": "80" - }, - { - "fieldname":"to_date", - "label": __("To Date"), - "fieldtype": "Date", - "width": "80" - }, - - ], - onload: (report) => { - fetch_gstins(report); - - report.page.add_inner_button(__("Download JSON"), function () { - var filters = report.get_values(); - - frappe.call({ - method: 'erpnext.regional.report.hsn_wise_summary_of_outward_supplies.hsn_wise_summary_of_outward_supplies.get_json', - args: { - data: report.data, - report_name: report.report_name, - filters: filters - }, - callback: function(r) { - if (r.message) { - const args = { - cmd: 'erpnext.regional.report.hsn_wise_summary_of_outward_supplies.hsn_wise_summary_of_outward_supplies.download_json_file', - data: r.message.data, - report_name: r.message.report_name - }; - open_url_post(frappe.request.url, args); - } - } - }); - }); - } -}; diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.json b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.json deleted file mode 100644 index cc6ad574af..0000000000 --- a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2018-04-26 10:49:29.159400", - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2019-09-03 12:59:38.603649", - "modified_by": "Administrator", - "module": "Regional", - "name": "HSN-wise-summary of outward supplies", - "owner": "Administrator", - "ref_doctype": "Sales Invoice", - "report_name": "HSN-wise-summary of outward supplies", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py deleted file mode 100644 index 09f2df1226..0000000000 --- a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/hsn_wise_summary_of_outward_supplies.py +++ /dev/null @@ -1,297 +0,0 @@ -# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import json - -import frappe -from frappe import _ -from frappe.model.meta import get_field_precision -from frappe.utils import cstr, flt, getdate - -import erpnext -from erpnext.regional.india.utils import get_gst_accounts -from erpnext.regional.report.gstr_1.gstr_1 import get_company_gstin_number - - -def execute(filters=None): - return _execute(filters) - - -def _execute(filters=None): - if not filters: - filters = {} - columns = get_columns() - - company_currency = erpnext.get_company_currency(filters.company) - item_list = get_items(filters) - if item_list: - itemised_tax, tax_columns = get_tax_accounts(item_list, columns, company_currency) - - data = [] - added_item = [] - for d in item_list: - if (d.parent, d.item_code) not in added_item: - row = [d.gst_hsn_code, d.description, d.stock_uom, d.stock_qty] - total_tax = 0 - for tax in tax_columns: - item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {}) - total_tax += flt(item_tax.get("tax_amount", 0)) - - row += [d.base_net_amount + total_tax] - row += [d.base_net_amount] - - for tax in tax_columns: - item_tax = itemised_tax.get((d.parent, d.item_code), {}).get(tax, {}) - row += [item_tax.get("tax_amount", 0)] - - data.append(row) - added_item.append((d.parent, d.item_code)) - if data: - data = get_merged_data(columns, data) # merge same hsn code data - return columns, data - - -def get_columns(): - columns = [ - { - "fieldname": "gst_hsn_code", - "label": _("HSN/SAC"), - "fieldtype": "Link", - "options": "GST HSN Code", - "width": 100, - }, - {"fieldname": "description", "label": _("Description"), "fieldtype": "Data", "width": 300}, - {"fieldname": "stock_uom", "label": _("Stock UOM"), "fieldtype": "Data", "width": 100}, - {"fieldname": "stock_qty", "label": _("Stock Qty"), "fieldtype": "Float", "width": 90}, - {"fieldname": "total_amount", "label": _("Total Amount"), "fieldtype": "Currency", "width": 120}, - { - "fieldname": "taxable_amount", - "label": _("Total Taxable Amount"), - "fieldtype": "Currency", - "width": 170, - }, - ] - - return columns - - -def get_conditions(filters): - conditions = "" - - for opts in ( - ("company", " and company=%(company)s"), - ("gst_hsn_code", " and gst_hsn_code=%(gst_hsn_code)s"), - ("company_gstin", " and company_gstin=%(company_gstin)s"), - ("from_date", " and posting_date >= %(from_date)s"), - ("to_date", "and posting_date <= %(to_date)s"), - ): - if filters.get(opts[0]): - conditions += opts[1] - - return conditions - - -def get_items(filters): - conditions = get_conditions(filters) - match_conditions = frappe.build_match_conditions("Sales Invoice") - if match_conditions: - match_conditions = " and {0} ".format(match_conditions) - - items = frappe.db.sql( - """ - select - `tabSales Invoice Item`.gst_hsn_code, - `tabSales Invoice Item`.stock_uom, - sum(`tabSales Invoice Item`.stock_qty) as stock_qty, - sum(`tabSales Invoice Item`.base_net_amount) as base_net_amount, - sum(`tabSales Invoice Item`.base_price_list_rate) as base_price_list_rate, - `tabSales Invoice Item`.parent, `tabSales Invoice Item`.item_code, - `tabGST HSN Code`.description - from `tabSales Invoice`, `tabSales Invoice Item`, `tabGST HSN Code` - where `tabSales Invoice`.name = `tabSales Invoice Item`.parent - and `tabSales Invoice`.docstatus = 1 - and `tabSales Invoice Item`.gst_hsn_code is not NULL - and `tabSales Invoice Item`.gst_hsn_code = `tabGST HSN Code`.name %s %s - group by - `tabSales Invoice Item`.parent, `tabSales Invoice Item`.item_code - - """ - % (conditions, match_conditions), - filters, - as_dict=1, - ) - - return items - - -def get_tax_accounts( - item_list, - columns, - company_currency, - doctype="Sales Invoice", - tax_doctype="Sales Taxes and Charges", -): - item_row_map = {} - tax_columns = [] - invoice_item_row = {} - itemised_tax = {} - conditions = "" - - tax_amount_precision = ( - get_field_precision( - frappe.get_meta(tax_doctype).get_field("tax_amount"), currency=company_currency - ) - or 2 - ) - - for d in item_list: - invoice_item_row.setdefault(d.parent, []).append(d) - item_row_map.setdefault(d.parent, {}).setdefault(d.item_code or d.item_name, []).append(d) - - tax_details = frappe.db.sql( - """ - select - parent, account_head, item_wise_tax_detail, - base_tax_amount_after_discount_amount - from `tab%s` - where - parenttype = %s and docstatus = 1 - and (description is not null and description != '') - and parent in (%s) - %s - order by description - """ - % (tax_doctype, "%s", ", ".join(["%s"] * len(invoice_item_row)), conditions), - tuple([doctype] + list(invoice_item_row)), - ) - - for parent, account_head, item_wise_tax_detail, tax_amount in tax_details: - - if account_head not in tax_columns and tax_amount: - # as description is text editor earlier and markup can break the column convention in reports - tax_columns.append(account_head) - - if item_wise_tax_detail: - try: - item_wise_tax_detail = json.loads(item_wise_tax_detail) - - for item_code, tax_data in item_wise_tax_detail.items(): - if not frappe.db.get_value("Item", item_code, "gst_hsn_code"): - continue - itemised_tax.setdefault(item_code, frappe._dict()) - if isinstance(tax_data, list): - tax_amount = tax_data[1] - else: - tax_amount = 0 - - for d in item_row_map.get(parent, {}).get(item_code, []): - item_tax_amount = tax_amount - if item_tax_amount: - itemised_tax.setdefault((parent, item_code), {})[account_head] = frappe._dict( - {"tax_amount": flt(item_tax_amount, tax_amount_precision)} - ) - except ValueError: - continue - - tax_columns.sort() - for account_head in tax_columns: - columns.append( - { - "label": account_head, - "fieldname": frappe.scrub(account_head), - "fieldtype": "Float", - "width": 110, - } - ) - - return itemised_tax, tax_columns - - -def get_merged_data(columns, data): - merged_hsn_dict = {} # to group same hsn under one key and perform row addition - result = [] - - for row in data: - merged_hsn_dict.setdefault(row[0], {}) - for i, d in enumerate(columns): - if d["fieldtype"] not in ("Int", "Float", "Currency"): - merged_hsn_dict[row[0]][d["fieldname"]] = row[i] - else: - if merged_hsn_dict.get(row[0], {}).get(d["fieldname"], ""): - merged_hsn_dict[row[0]][d["fieldname"]] += row[i] - else: - merged_hsn_dict[row[0]][d["fieldname"]] = row[i] - - for key, value in merged_hsn_dict.items(): - result.append(value) - - return result - - -@frappe.whitelist() -def get_json(filters, report_name, data): - filters = json.loads(filters) - report_data = json.loads(data) - gstin = filters.get("company_gstin") or get_company_gstin_number(filters["company"]) - - if not filters.get("from_date") or not filters.get("to_date"): - frappe.throw(_("Please enter From Date and To Date to generate JSON")) - - fp = "%02d%s" % (getdate(filters["to_date"]).month, getdate(filters["to_date"]).year) - - gst_json = {"version": "GST2.3.4", "hash": "hash", "gstin": gstin, "fp": fp} - - gst_json["hsn"] = {"data": get_hsn_wise_json_data(filters, report_data)} - - return {"report_name": report_name, "data": gst_json} - - -@frappe.whitelist() -def download_json_file(): - """download json content in a file""" - data = frappe._dict(frappe.local.form_dict) - frappe.response["filename"] = frappe.scrub("{0}".format(data["report_name"])) + ".json" - frappe.response["filecontent"] = data["data"] - frappe.response["content_type"] = "application/json" - frappe.response["type"] = "download" - - -def get_hsn_wise_json_data(filters, report_data): - - filters = frappe._dict(filters) - gst_accounts = get_gst_accounts(filters.company) - data = [] - count = 1 - - for hsn in report_data: - row = { - "num": count, - "hsn_sc": hsn.get("gst_hsn_code"), - "desc": hsn.get("description"), - "uqc": hsn.get("stock_uom").upper(), - "qty": hsn.get("stock_qty"), - "val": flt(hsn.get("total_amount"), 2), - "txval": flt(hsn.get("taxable_amount", 2)), - "iamt": 0.0, - "camt": 0.0, - "samt": 0.0, - "csamt": 0.0, - } - - for account in gst_accounts.get("igst_account"): - row["iamt"] += flt(hsn.get(frappe.scrub(cstr(account)), 0.0), 2) - - for account in gst_accounts.get("cgst_account"): - row["camt"] += flt(hsn.get(frappe.scrub(cstr(account)), 0.0), 2) - - for account in gst_accounts.get("sgst_account"): - row["samt"] += flt(hsn.get(frappe.scrub(cstr(account)), 0.0), 2) - - for account in gst_accounts.get("cess_account"): - row["csamt"] += flt(hsn.get(frappe.scrub(cstr(account)), 0.0), 2) - - data.append(row) - count += 1 - - return data diff --git a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/test_hsn_wise_summary_of_outward_supplies.py b/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/test_hsn_wise_summary_of_outward_supplies.py deleted file mode 100644 index 090473f4fd..0000000000 --- a/erpnext/regional/report/hsn_wise_summary_of_outward_supplies/test_hsn_wise_summary_of_outward_supplies.py +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -from unittest import TestCase - -import frappe - -from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice -from erpnext.regional.doctype.gstr_3b_report.test_gstr_3b_report import ( - make_company as setup_company, -) -from erpnext.regional.doctype.gstr_3b_report.test_gstr_3b_report import ( - make_customers as setup_customers, -) -from erpnext.regional.doctype.gstr_3b_report.test_gstr_3b_report import ( - set_account_heads as setup_gst_settings, -) -from erpnext.regional.report.hsn_wise_summary_of_outward_supplies.hsn_wise_summary_of_outward_supplies import ( - execute as run_report, -) -from erpnext.stock.doctype.item.test_item import make_item - - -class TestHSNWiseSummaryReport(TestCase): - @classmethod - def setUpClass(cls): - setup_company() - setup_customers() - setup_gst_settings() - make_item("Golf Car", properties={"gst_hsn_code": "999900"}) - - @classmethod - def tearDownClass(cls): - frappe.db.rollback() - - def test_hsn_summary_for_invoice_with_duplicate_items(self): - si = create_sales_invoice( - company="_Test Company GST", - customer="_Test GST Customer", - currency="INR", - warehouse="Finished Goods - _GST", - debit_to="Debtors - _GST", - income_account="Sales - _GST", - expense_account="Cost of Goods Sold - _GST", - cost_center="Main - _GST", - do_not_save=1, - ) - - si.items = [] - si.append( - "items", - { - "item_code": "Golf Car", - "gst_hsn_code": "999900", - "qty": "1", - "rate": "120", - "cost_center": "Main - _GST", - }, - ) - si.append( - "items", - { - "item_code": "Golf Car", - "gst_hsn_code": "999900", - "qty": "1", - "rate": "140", - "cost_center": "Main - _GST", - }, - ) - si.append( - "taxes", - { - "charge_type": "On Net Total", - "account_head": "Output Tax IGST - _GST", - "cost_center": "Main - _GST", - "description": "IGST @ 18.0", - "rate": 18, - }, - ) - si.posting_date = "2020-11-17" - si.submit() - si.reload() - - [columns, data] = run_report( - filters=frappe._dict( - { - "company": "_Test Company GST", - "gst_hsn_code": "999900", - "company_gstin": si.company_gstin, - "from_date": si.posting_date, - "to_date": si.posting_date, - } - ) - ) - - filtered_rows = list(filter(lambda row: row["gst_hsn_code"] == "999900", data)) - self.assertTrue(filtered_rows) - - hsn_row = filtered_rows[0] - self.assertEquals(hsn_row["stock_qty"], 2.0) - self.assertEquals(hsn_row["total_amount"], 306.8) diff --git a/erpnext/regional/report/india_gst_common/india_gst_common.js b/erpnext/regional/report/india_gst_common/india_gst_common.js deleted file mode 100644 index bddc32096f..0000000000 --- a/erpnext/regional/report/india_gst_common/india_gst_common.js +++ /dev/null @@ -1,21 +0,0 @@ -function fetch_gstins(report) { - var company_gstins = report.get_filter('company_gstin'); - var company = report.get_filter_value('company'); - if (company) { - frappe.call({ - method:'erpnext.regional.india.utils.get_gstins_for_company', - async: false, - args: { - company: company - }, - callback: function(r) { - r.message.unshift(""); - company_gstins.df.options = r.message; - company_gstins.refresh(); - } - }); - } else { - company_gstins.df.options = [""]; - company_gstins.refresh(); - } -} diff --git a/erpnext/regional/report/irs_1099/irs_1099.py b/erpnext/regional/report/irs_1099/irs_1099.py index 92aeb5ee6f..66ade1f89f 100644 --- a/erpnext/regional/report/irs_1099/irs_1099.py +++ b/erpnext/regional/report/irs_1099/irs_1099.py @@ -10,7 +10,7 @@ from frappe.utils.data import fmt_money from frappe.utils.jinja import render_template from frappe.utils.pdf import get_pdf from frappe.utils.print_format import read_multi_pdf -from PyPDF2 import PdfFileWriter +from PyPDF2 import PdfWriter from erpnext.accounts.utils import get_fiscal_year @@ -47,7 +47,7 @@ def execute(filters=None): s.name = gl.party AND s.irs_1099 = 1 AND gl.fiscal_year = %(fiscal_year)s - AND gl.party_type = "Supplier" + AND gl.party_type = 'Supplier' AND gl.company = %(company)s {conditions} @@ -106,7 +106,7 @@ def irs_1099_print(filters): columns, data = execute(filters) template = frappe.get_doc("Print Format", "IRS 1099 Form").html - output = PdfFileWriter() + output = PdfWriter() for row in data: row["fiscal_year"] = fiscal_year diff --git a/erpnext/regional/report/professional_tax_deductions/__init__.py b/erpnext/regional/report/professional_tax_deductions/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.js b/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.js deleted file mode 100644 index bb75238b8c..0000000000 --- a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() { - frappe.query_reports["Professional Tax Deductions"] = erpnext.salary_slip_deductions_report_filters; -}); diff --git a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.json b/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.json deleted file mode 100644 index 9938e9db52..0000000000 --- a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-06-02 00:37:44.537355", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-06-16 19:02:26.306348", - "modified_by": "Administrator", - "module": "Regional", - "name": "Professional Tax Deductions", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Professional Tax Deductions", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.py b/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.py deleted file mode 100644 index 17a62d5e5d..0000000000 --- a/erpnext/regional/report/professional_tax_deductions/professional_tax_deductions.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ - -from erpnext.regional.report.provident_fund_deductions.provident_fund_deductions import ( - get_conditions, -) - - -def execute(filters=None): - data = get_data(filters) - columns = get_columns(filters) if len(data) else [] - - return columns, data - - -def get_columns(filters): - columns = [ - { - "label": _("Employee"), - "options": "Employee", - "fieldname": "employee", - "fieldtype": "Link", - "width": 200, - }, - { - "label": _("Employee Name"), - "options": "Employee", - "fieldname": "employee_name", - "fieldtype": "Link", - "width": 160, - }, - {"label": _("Amount"), "fieldname": "amount", "fieldtype": "Currency", "width": 140}, - ] - - return columns - - -def get_data(filters): - - data = [] - - component_type_dict = frappe._dict( - frappe.db.sql( - """ select name, component_type from `tabSalary Component` - where component_type = 'Professional Tax' """ - ) - ) - - if not len(component_type_dict): - return [] - - conditions = get_conditions(filters) - - entry = frappe.db.sql( - """ select sal.employee, sal.employee_name, ded.salary_component, ded.amount - from `tabSalary Slip` sal, `tabSalary Detail` ded - where sal.name = ded.parent - and ded.parentfield = 'deductions' - and ded.parenttype = 'Salary Slip' - and sal.docstatus = 1 %s - and ded.salary_component in (%s) - """ - % (conditions, ", ".join(["%s"] * len(component_type_dict))), - tuple(component_type_dict.keys()), - as_dict=1, - ) - - for d in entry: - - employee = {"employee": d.employee, "employee_name": d.employee_name, "amount": d.amount} - - data.append(employee) - - return data diff --git a/erpnext/regional/report/provident_fund_deductions/__init__.py b/erpnext/regional/report/provident_fund_deductions/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.js b/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.js deleted file mode 100644 index a91a30796b..0000000000 --- a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt -/* eslint-disable */ - -frappe.require("assets/erpnext/js/salary_slip_deductions_report_filters.js", function() { - frappe.query_reports["Provident Fund Deductions"] = erpnext.salary_slip_deductions_report_filters; -}); diff --git a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.json b/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.json deleted file mode 100644 index e25d335f9b..0000000000 --- a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "add_total_row": 0, - "creation": "2020-06-01 23:44:07.919117", - "disable_prepared_report": 0, - "disabled": 0, - "docstatus": 0, - "doctype": "Report", - "idx": 0, - "is_standard": "Yes", - "modified": "2020-06-16 18:54:19.305763", - "modified_by": "Administrator", - "module": "Regional", - "name": "Provident Fund Deductions", - "owner": "Administrator", - "prepared_report": 0, - "ref_doctype": "Salary Slip", - "report_name": "Provident Fund Deductions", - "report_type": "Script Report", - "roles": [] -} \ No newline at end of file diff --git a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.py b/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.py deleted file mode 100644 index ab4b6e73b8..0000000000 --- a/erpnext/regional/report/provident_fund_deductions/provident_fund_deductions.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - - -import frappe -from frappe import _ -from frappe.utils import getdate - - -def execute(filters=None): - data = get_data(filters) - columns = get_columns(filters) if len(data) else [] - - return columns, data - - -def get_columns(filters): - columns = [ - { - "label": _("Employee"), - "options": "Employee", - "fieldname": "employee", - "fieldtype": "Link", - "width": 200, - }, - { - "label": _("Employee Name"), - "options": "Employee", - "fieldname": "employee_name", - "fieldtype": "Link", - "width": 160, - }, - {"label": _("PF Account"), "fieldname": "pf_account", "fieldtype": "Data", "width": 140}, - {"label": _("PF Amount"), "fieldname": "pf_amount", "fieldtype": "Currency", "width": 140}, - { - "label": _("Additional PF"), - "fieldname": "additional_pf", - "fieldtype": "Currency", - "width": 140, - }, - {"label": _("PF Loan"), "fieldname": "pf_loan", "fieldtype": "Currency", "width": 140}, - {"label": _("Total"), "fieldname": "total", "fieldtype": "Currency", "width": 140}, - ] - - return columns - - -def get_conditions(filters): - conditions = [""] - - if filters.get("department"): - conditions.append("sal.department = '%s' " % (filters["department"])) - - if filters.get("branch"): - conditions.append("sal.branch = '%s' " % (filters["branch"])) - - if filters.get("company"): - conditions.append("sal.company = '%s' " % (filters["company"])) - - if filters.get("month"): - conditions.append("month(sal.start_date) = '%s' " % (filters["month"])) - - if filters.get("year"): - conditions.append("year(start_date) = '%s' " % (filters["year"])) - - if filters.get("mode_of_payment"): - conditions.append("sal.mode_of_payment = '%s' " % (filters["mode_of_payment"])) - - return " and ".join(conditions) - - -def prepare_data(entry, component_type_dict): - data_list = {} - - employee_account_dict = frappe._dict( - frappe.db.sql(""" select name, provident_fund_account from `tabEmployee`""") - ) - - for d in entry: - - component_type = component_type_dict.get(d.salary_component) - - if data_list.get(d.name): - data_list[d.name][component_type] = d.amount - else: - data_list.setdefault( - d.name, - { - "employee": d.employee, - "employee_name": d.employee_name, - "pf_account": employee_account_dict.get(d.employee), - component_type: d.amount, - }, - ) - - return data_list - - -def get_data(filters): - data = [] - - conditions = get_conditions(filters) - - salary_slips = frappe.db.sql( - """ select sal.name from `tabSalary Slip` sal - where docstatus = 1 %s - """ - % (conditions), - as_dict=1, - ) - - component_type_dict = frappe._dict( - frappe.db.sql( - """ select name, component_type from `tabSalary Component` - where component_type in ('Provident Fund', 'Additional Provident Fund', 'Provident Fund Loan')""" - ) - ) - - if not len(component_type_dict): - return [] - - entry = frappe.db.sql( - """ select sal.name, sal.employee, sal.employee_name, ded.salary_component, ded.amount - from `tabSalary Slip` sal, `tabSalary Detail` ded - where sal.name = ded.parent - and ded.parentfield = 'deductions' - and ded.parenttype = 'Salary Slip' - and sal.docstatus = 1 %s - and ded.salary_component in (%s) - """ - % (conditions, ", ".join(["%s"] * len(component_type_dict))), - tuple(component_type_dict.keys()), - as_dict=1, - ) - - data_list = prepare_data(entry, component_type_dict) - - for d in salary_slips: - total = 0 - if data_list.get(d.name): - employee = { - "employee": data_list.get(d.name).get("employee"), - "employee_name": data_list.get(d.name).get("employee_name"), - "pf_account": data_list.get(d.name).get("pf_account"), - } - - if data_list.get(d.name).get("Provident Fund"): - employee["pf_amount"] = data_list.get(d.name).get("Provident Fund") - total += data_list.get(d.name).get("Provident Fund") - - if data_list.get(d.name).get("Additional Provident Fund"): - employee["additional_pf"] = data_list.get(d.name).get("Additional Provident Fund") - total += data_list.get(d.name).get("Additional Provident Fund") - - if data_list.get(d.name).get("Provident Fund Loan"): - employee["pf_loan"] = data_list.get(d.name).get("Provident Fund Loan") - total += data_list.get(d.name).get("Provident Fund Loan") - - employee["total"] = total - - data.append(employee) - - return data - - -@frappe.whitelist() -def get_years(): - year_list = frappe.db.sql_list( - """select distinct YEAR(end_date) from `tabSalary Slip` ORDER BY YEAR(end_date) DESC""" - ) - if not year_list: - year_list = [getdate().year] - - return "\n".join(str(year) for year in year_list) diff --git a/erpnext/regional/report/vat_audit_report/vat_audit_report.py b/erpnext/regional/report/vat_audit_report/vat_audit_report.py index 70f2c0a333..3d486ce650 100644 --- a/erpnext/regional/report/vat_audit_report/vat_audit_report.py +++ b/erpnext/regional/report/vat_audit_report/vat_audit_report.py @@ -65,7 +65,7 @@ class VATAuditReport(object): `tab{doctype}` WHERE docstatus = 1 {where_conditions} - and is_opening = "No" + and is_opening = 'No' ORDER BY posting_date DESC """.format( diff --git a/erpnext/regional/united_arab_emirates/setup.py b/erpnext/regional/united_arab_emirates/setup.py index c77fdcc142..be621bcdd1 100644 --- a/erpnext/regional/united_arab_emirates/setup.py +++ b/erpnext/regional/united_arab_emirates/setup.py @@ -5,7 +5,6 @@ import frappe from frappe.custom.doctype.custom_field.custom_field import create_custom_fields from frappe.permissions import add_permission, update_permission_property -from erpnext.payroll.doctype.gratuity_rule.gratuity_rule import get_gratuity_rule def setup(company=None, patch=True): @@ -13,7 +12,6 @@ def setup(company=None, patch=True): add_print_formats() add_custom_roles_for_reports() add_permissions() - create_gratuity_rule() def make_custom_fields(): @@ -278,66 +276,3 @@ def add_permissions(): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, "write", 1) update_permission_property(doctype, role, 0, "create", 1) - - -def create_gratuity_rule(): - rule_1 = rule_2 = rule_3 = None - - # Rule Under Limited Contract - slabs = get_slab_for_limited_contract() - if not frappe.db.exists("Gratuity Rule", "Rule Under Limited Contract (UAE)"): - rule_1 = get_gratuity_rule( - "Rule Under Limited Contract (UAE)", - slabs, - calculate_gratuity_amount_based_on="Sum of all previous slabs", - ) - - # Rule Under Unlimited Contract on termination - slabs = get_slab_for_unlimited_contract_on_termination() - if not frappe.db.exists("Gratuity Rule", "Rule Under Unlimited Contract on termination (UAE)"): - rule_2 = get_gratuity_rule("Rule Under Unlimited Contract on termination (UAE)", slabs) - - # Rule Under Unlimited Contract on resignation - slabs = get_slab_for_unlimited_contract_on_resignation() - if not frappe.db.exists("Gratuity Rule", "Rule Under Unlimited Contract on resignation (UAE)"): - rule_3 = get_gratuity_rule("Rule Under Unlimited Contract on resignation (UAE)", slabs) - - # for applicable salary component user need to set this by its own - if rule_1: - rule_1.flags.ignore_mandatory = True - rule_1.save() - if rule_2: - rule_2.flags.ignore_mandatory = True - rule_2.save() - if rule_3: - rule_3.flags.ignore_mandatory = True - rule_3.save() - - -def get_slab_for_limited_contract(): - return [ - {"from_year": 0, "to_year": 1, "fraction_of_applicable_earnings": 0}, - {"from_year": 1, "to_year": 5, "fraction_of_applicable_earnings": 21 / 30}, - {"from_year": 5, "to_year": 0, "fraction_of_applicable_earnings": 1}, - ] - - -def get_slab_for_unlimited_contract_on_termination(): - return [ - {"from_year": 0, "to_year": 1, "fraction_of_applicable_earnings": 0}, - {"from_year": 1, "to_year": 5, "fraction_of_applicable_earnings": 21 / 30}, - {"from_year": 5, "to_year": 0, "fraction_of_applicable_earnings": 1}, - ] - - -def get_slab_for_unlimited_contract_on_resignation(): - fraction_1 = 1 / 3 * 21 / 30 - fraction_2 = 2 / 3 * 21 / 30 - fraction_3 = 21 / 30 - - return [ - {"from_year": 0, "to_year": 1, "fraction_of_applicable_earnings": 0}, - {"from_year": 1, "to_year": 3, "fraction_of_applicable_earnings": fraction_1}, - {"from_year": 3, "to_year": 5, "fraction_of_applicable_earnings": fraction_2}, - {"from_year": 5, "to_year": 0, "fraction_of_applicable_earnings": fraction_3}, - ] diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index 8889a5f939..35e0b0de40 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -141,6 +141,9 @@ class Customer(TransactionBase): ) def validate_internal_customer(self): + if not self.is_internal_customer: + self.represents_company = "" + internal_customer = frappe.db.get_value( "Customer", { diff --git a/erpnext/selling/doctype/customer/regional/india.js b/erpnext/selling/doctype/customer/regional/india.js deleted file mode 100644 index cad9a27ace..0000000000 --- a/erpnext/selling/doctype/customer/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/party.js" %} - -erpnext.setup_gst_reminder_button('Customer') diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py index 36ca2b2fdc..7dc3fab623 100644 --- a/erpnext/selling/doctype/customer/test_customer.py +++ b/erpnext/selling/doctype/customer/test_customer.py @@ -367,7 +367,20 @@ def set_credit_limit(customer, company, credit_limit): customer.credit_limits[-1].db_insert() -def create_internal_customer(customer_name, represents_company, allowed_to_interact_with): +def create_internal_customer( + customer_name=None, represents_company=None, allowed_to_interact_with=None +): + if not customer_name: + customer_name = represents_company + if not allowed_to_interact_with: + allowed_to_interact_with = represents_company + + exisiting_representative = frappe.db.get_value( + "Customer", {"represents_company": represents_company} + ) + if exisiting_representative: + return exisiting_representative + if not frappe.db.exists("Customer", customer_name): customer = frappe.get_doc( { diff --git a/erpnext/selling/doctype/product_bundle/product_bundle.js b/erpnext/selling/doctype/product_bundle/product_bundle.js index 7a04c6ab06..3096b692a7 100644 --- a/erpnext/selling/doctype/product_bundle/product_bundle.js +++ b/erpnext/selling/doctype/product_bundle/product_bundle.js @@ -1,19 +1,13 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -cur_frm.cscript.refresh = function(doc, cdt, cdn) { - cur_frm.toggle_enable('new_item_code', doc.__islocal); -} - -cur_frm.fields_dict.new_item_code.get_query = function() { - return{ - query: "erpnext.selling.doctype.product_bundle.product_bundle.get_new_item_code" - } -} -cur_frm.fields_dict.new_item_code.query_description = __('Please select Item where "Is Stock Item" is "No" and "Is Sales Item" is "Yes" and there is no other Product Bundle'); - -cur_frm.cscript.onload = function() { - // set add fetch for item_code's item_name and description - cur_frm.add_fetch('item_code', 'stock_uom', 'uom'); - cur_frm.add_fetch('item_code', 'description', 'description'); -} +frappe.ui.form.on("Product Bundle", { + refresh: function (frm) { + frm.toggle_enable("new_item_code", frm.is_new()); + frm.set_query("new_item_code", () => { + return { + query: "erpnext.selling.doctype.product_bundle.product_bundle.get_new_item_code", + }; + }); + }, +}); diff --git a/erpnext/selling/doctype/product_bundle/product_bundle.py b/erpnext/selling/doctype/product_bundle/product_bundle.py index 575b956686..ac83c0f046 100644 --- a/erpnext/selling/doctype/product_bundle/product_bundle.py +++ b/erpnext/selling/doctype/product_bundle/product_bundle.py @@ -78,7 +78,7 @@ def get_new_item_code(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """select name, item_name, description from tabItem where is_stock_item=0 and name not in (select name from `tabProduct Bundle`) - and %s like %s %s limit %s, %s""" + and %s like %s %s limit %s offset %s""" % (searchfield, "%s", get_match_cond(doctype), "%s", "%s"), - ("%%%s%%" % txt, start, page_len), + ("%%%s%%" % txt, page_len, start), ) diff --git a/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json b/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json index dc071e4d65..fc8caeb31d 100644 --- a/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json +++ b/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json @@ -33,6 +33,8 @@ "reqd": 1 }, { + "fetch_from": "item_code.description", + "fetch_if_empty": 1, "fieldname": "description", "fieldtype": "Text Editor", "in_list_view": 1, @@ -51,6 +53,8 @@ "print_hide": 1 }, { + "fetch_from": "item_code.stock_uom", + "fetch_if_empty": 1, "fieldname": "uom", "fieldtype": "Link", "in_list_view": 1, @@ -64,7 +68,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2020-02-28 14:06:05.725655", + "modified": "2022-06-27 05:30:18.475150", "modified_by": "Administrator", "module": "Selling", "name": "Product Bundle Item", @@ -72,5 +76,6 @@ "permissions": [], "sort_field": "modified", "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index 34e9a52e11..70ae085051 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -20,6 +20,20 @@ frappe.ui.form.on('Quotation', { frm.set_df_property('packed_items', 'cannot_add_rows', true); frm.set_df_property('packed_items', 'cannot_delete_rows', true); + + frm.set_query('company_address', function(doc) { + if(!doc.company) { + frappe.throw(__('Please set Company')); + } + + return { + query: 'frappe.contacts.doctype.address.address.address_query', + filters: { + link_doctype: 'Company', + link_name: doc.company + } + }; + }); }, refresh: function(frm) { @@ -70,7 +84,7 @@ erpnext.selling.QuotationController = class QuotationController extends erpnext. } } - if(doc.docstatus == 1 && doc.status!=='Lost') { + if(doc.docstatus == 1 && !(['Lost', 'Ordered']).includes(doc.status)) { if(!doc.valid_till || frappe.datetime.get_diff(doc.valid_till, frappe.datetime.get_today()) >= 0) { cur_frm.add_custom_button(__('Sales Order'), cur_frm.cscript['Make Sales Order'], __('Create')); diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index 75443abe49..bb2f95dd17 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -296,7 +296,7 @@ "read_only": 1 }, { - "depends_on": "eval:doc.quotaion_to=='Customer' && doc.party_name", + "depends_on": "eval:doc.quotation_to=='Customer' && doc.party_name", "fieldname": "col_break98", "fieldtype": "Column Break", "width": "50%" @@ -316,7 +316,7 @@ "read_only": 1 }, { - "depends_on": "eval:doc.quotaion_to=='Customer' && doc.party_name", + "depends_on": "eval:doc.quotation_to=='Customer' && doc.party_name", "fieldname": "customer_group", "fieldtype": "Link", "hidden": 1, @@ -897,7 +897,7 @@ "no_copy": 1, "oldfieldname": "status", "oldfieldtype": "Select", - "options": "Draft\nOpen\nReplied\nOrdered\nLost\nCancelled\nExpired", + "options": "Draft\nOpen\nReplied\nPartially Ordered\nOrdered\nLost\nCancelled\nExpired", "print_hide": 1, "read_only": 1, "reqd": 1 @@ -986,7 +986,7 @@ "idx": 82, "is_submittable": 1, "links": [], - "modified": "2022-04-07 11:01:31.157084", + "modified": "2022-06-11 20:35:32.635804", "modified_by": "Administrator", "module": "Selling", "name": "Quotation", @@ -1084,4 +1084,4 @@ "states": [], "timeline_field": "party_name", "title_field": "title" -} \ No newline at end of file +} diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index 548813ddef..863fbc4059 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -8,7 +8,6 @@ from frappe.model.mapper import get_mapped_doc from frappe.utils import flt, getdate, nowdate from erpnext.controllers.selling_controller import SellingController -from erpnext.crm.utils import add_link_in_communication, copy_comments form_grid_templates = {"items": "templates/form_grid/item_grid.html"} @@ -36,16 +35,6 @@ class Quotation(SellingController): make_packing_list(self) - def after_insert(self): - if frappe.db.get_single_value("CRM Settings", "carry_forward_communication_and_comments"): - if self.opportunity: - copy_comments("Opportunity", self.opportunity, self) - add_link_in_communication("Opportunity", self.opportunity, self) - - elif self.quotation_to == "Lead" and self.party_name: - copy_comments("Lead", self.party_name, self) - add_link_in_communication("Lead", self.party_name, self) - def validate_valid_till(self): if self.valid_till and getdate(self.valid_till) < getdate(self.transaction_date): frappe.throw(_("Valid till date cannot be before transaction date")) @@ -70,8 +59,32 @@ class Quotation(SellingController): title=_("Unpublished Item"), ) - def has_sales_order(self): - return frappe.db.get_value("Sales Order Item", {"prevdoc_docname": self.name, "docstatus": 1}) + def get_ordered_status(self): + ordered_items = frappe._dict( + frappe.db.get_all( + "Sales Order Item", + {"prevdoc_docname": self.name, "docstatus": 1}, + ["item_code", "sum(qty)"], + group_by="item_code", + as_list=1, + ) + ) + + status = "Open" + if ordered_items: + status = "Ordered" + + for item in self.get("items"): + if item.qty > ordered_items.get(item.item_code, 0.0): + status = "Partially Ordered" + + return status + + def is_fully_ordered(self): + return self.get_ordered_status() == "Ordered" + + def is_partially_ordered(self): + return self.get_ordered_status() == "Partially Ordered" def update_lead(self): if self.quotation_to == "Lead" and self.party_name: @@ -103,7 +116,7 @@ class Quotation(SellingController): @frappe.whitelist() def declare_enquiry_lost(self, lost_reasons_list, competitors, detailed_reason=None): - if not self.has_sales_order(): + if not (self.is_fully_ordered() or self.is_partially_ordered()): get_lost_reasons = frappe.get_list("Quotation Lost Reason", fields=["name"]) lost_reasons_lst = [reason.get("name") for reason in get_lost_reasons] frappe.db.set(self, "status", "Lost") @@ -194,6 +207,15 @@ def make_sales_order(source_name, target_doc=None): def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): customer = _make_customer(source_name, ignore_permissions) + ordered_items = frappe._dict( + frappe.db.get_all( + "Sales Order Item", + {"prevdoc_docname": source_name, "docstatus": 1}, + ["item_code", "sum(qty)"], + group_by="item_code", + as_list=1, + ) + ) def set_missing_values(source, target): if customer: @@ -209,7 +231,9 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): target.run_method("calculate_taxes_and_totals") def update_item(obj, target, source_parent): - target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) + balance_qty = obj.qty - ordered_items.get(obj.item_code, 0.0) + target.qty = balance_qty if balance_qty > 0 else 0 + target.stock_qty = flt(target.qty) * flt(obj.conversion_factor) if obj.against_blanket_order: target.against_blanket_order = obj.against_blanket_order @@ -225,6 +249,7 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): "doctype": "Sales Order Item", "field_map": {"parent": "prevdoc_docname"}, "postprocess": update_item, + "condition": lambda doc: doc.qty > 0, }, "Sales Taxes and Charges": {"doctype": "Sales Taxes and Charges", "add_if_empty": True}, "Sales Team": {"doctype": "Sales Team", "add_if_empty": True}, @@ -243,7 +268,7 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): def set_expired_status(): # filter out submitted non expired quotations whose validity has been ended - cond = "qo.docstatus = 1 and qo.status != 'Expired' and qo.valid_till < %s" + cond = "`tabQuotation`.docstatus = 1 and `tabQuotation`.status != 'Expired' and `tabQuotation`.valid_till < %s" # check if those QUO have SO against it so_against_quo = """ SELECT @@ -251,13 +276,18 @@ def set_expired_status(): WHERE so_item.docstatus = 1 and so.docstatus = 1 and so_item.parent = so.name - and so_item.prevdoc_docname = qo.name""" + and so_item.prevdoc_docname = `tabQuotation`.name""" # if not exists any SO, set status as Expired - frappe.db.sql( - """UPDATE `tabQuotation` qo SET qo.status = 'Expired' WHERE {cond} and not exists({so_against_quo})""".format( - cond=cond, so_against_quo=so_against_quo - ), + frappe.db.multisql( + { + "mariadb": """UPDATE `tabQuotation` SET `tabQuotation`.status = 'Expired' WHERE {cond} and not exists({so_against_quo})""".format( + cond=cond, so_against_quo=so_against_quo + ), + "postgres": """UPDATE `tabQuotation` SET status = 'Expired' FROM `tabSales Order`, `tabSales Order Item` WHERE {cond} and not exists({so_against_quo})""".format( + cond=cond, so_against_quo=so_against_quo + ), + }, (nowdate()), ) diff --git a/erpnext/selling/doctype/quotation/quotation_list.js b/erpnext/selling/doctype/quotation/quotation_list.js index 4c8f9c4f84..32fce1f2ad 100644 --- a/erpnext/selling/doctype/quotation/quotation_list.js +++ b/erpnext/selling/doctype/quotation/quotation_list.js @@ -25,6 +25,8 @@ frappe.listview_settings['Quotation'] = { get_indicator: function(doc) { if(doc.status==="Open") { return [__("Open"), "orange", "status,=,Open"]; + } else if (doc.status==="Partially Ordered") { + return [__("Partially Ordered"), "yellow", "status,=,Partially Ordered"]; } else if(doc.status==="Ordered") { return [__("Ordered"), "green", "status,=,Ordered"]; } else if(doc.status==="Lost") { diff --git a/erpnext/selling/doctype/quotation/regional/india.js b/erpnext/selling/doctype/quotation/regional/india.js deleted file mode 100644 index 955083565b..0000000000 --- a/erpnext/selling/doctype/quotation/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Quotation'); diff --git a/erpnext/selling/doctype/sales_order/regional/india.js b/erpnext/selling/doctype/sales_order/regional/india.js deleted file mode 100644 index c11cfcc50b..0000000000 --- a/erpnext/selling/doctype/sales_order/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Sales Order'); diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index ff921c721d..74c5c07e47 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -1359,6 +1359,8 @@ "width": "50%" }, { + "fetch_from": "sales_partner.commission_rate", + "fetch_if_empty": 1, "fieldname": "commission_rate", "fieldtype": "Float", "hide_days": 1, @@ -1547,7 +1549,7 @@ "idx": 105, "is_submittable": 1, "links": [], - "modified": "2022-04-26 14:38:18.350207", + "modified": "2022-06-10 03:52:22.212953", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index b463213f50..8c03cb5b41 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -25,6 +25,7 @@ from erpnext.manufacturing.doctype.production_plan.production_plan import ( from erpnext.selling.doctype.customer.customer import check_credit_limit from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults from erpnext.stock.doctype.item.item import get_item_defaults +from erpnext.stock.get_item_details import get_default_bom from erpnext.stock.stock_balance import get_reserved_qty, update_bin_qty form_grid_templates = {"items": "templates/form_grid/item_grid.html"} @@ -232,7 +233,7 @@ class SalesOrder(SellingController): update_coupon_code_count(self.coupon_code, "used") def on_cancel(self): - self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") + self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Payment Ledger Entry") super(SalesOrder, self).on_cancel() # Cannot cancel closed SO @@ -423,8 +424,9 @@ class SalesOrder(SellingController): for table in [self.items, self.packed_items]: for i in table: - bom = get_default_bom_item(i.item_code) + bom = get_default_bom(i.item_code) stock_qty = i.qty if i.doctype == "Packed Item" else i.stock_qty + if not for_raw_material_request: total_work_order_qty = flt( frappe.db.sql( @@ -438,32 +440,19 @@ class SalesOrder(SellingController): pending_qty = stock_qty if pending_qty and i.item_code not in product_bundle_parents: - if bom: - items.append( - dict( - name=i.name, - item_code=i.item_code, - description=i.description, - bom=bom, - warehouse=i.warehouse, - pending_qty=pending_qty, - required_qty=pending_qty if for_raw_material_request else 0, - sales_order_item=i.name, - ) - ) - else: - items.append( - dict( - name=i.name, - item_code=i.item_code, - description=i.description, - bom="", - warehouse=i.warehouse, - pending_qty=pending_qty, - required_qty=pending_qty if for_raw_material_request else 0, - sales_order_item=i.name, - ) + items.append( + dict( + name=i.name, + item_code=i.item_code, + description=i.description, + bom=bom or "", + warehouse=i.warehouse, + pending_qty=pending_qty, + required_qty=pending_qty if for_raw_material_request else 0, + sales_order_item=i.name, ) + ) + return items def on_recurring(self, reference_doc, auto_repeat_doc): @@ -1167,13 +1156,6 @@ def update_status(status, name): so.update_status(status) -def get_default_bom_item(item_code): - bom = frappe.get_all("BOM", dict(item=item_code, is_active=True), order_by="is_default desc") - bom = bom[0].name if bom else None - - return bom - - @frappe.whitelist() def make_raw_material_request(items, company, sales_order, project=None): if not frappe.has_permission("Sales Order", "write"): diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index acae37f547..e5e317c506 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -329,7 +329,7 @@ class TestSalesOrder(FrappeTestCase): def test_sales_order_on_hold(self): so = make_sales_order(item_code="_Test Product Bundle Item") - so.db_set("Status", "On Hold") + so.db_set("status", "On Hold") si = make_sales_invoice(so.name) self.assertRaises(frappe.ValidationError, create_dn_against_so, so.name) self.assertRaises(frappe.ValidationError, si.submit) @@ -644,7 +644,7 @@ class TestSalesOrder(FrappeTestCase): else: # update valid from frappe.db.sql( - """UPDATE `tabItem Tax` set valid_from = CURDATE() + """UPDATE `tabItem Tax` set valid_from = CURRENT_DATE where parent = %(item)s and item_tax_template = %(tax)s""", {"item": item, "tax": tax_template}, ) @@ -783,6 +783,7 @@ class TestSalesOrder(FrappeTestCase): def test_auto_insert_price(self): make_item("_Test Item for Auto Price List", {"is_stock_item": 0}) + make_item("_Test Item for Auto Price List with Discount Percentage", {"is_stock_item": 0}) frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 1) item_price = frappe.db.get_value( @@ -804,6 +805,25 @@ class TestSalesOrder(FrappeTestCase): 100, ) + make_sales_order( + item_code="_Test Item for Auto Price List with Discount Percentage", + selling_price_list="_Test Price List", + price_list_rate=200, + discount_percentage=20, + ) + + self.assertEqual( + frappe.db.get_value( + "Item Price", + { + "price_list": "_Test Price List", + "item_code": "_Test Item for Auto Price List with Discount Percentage", + }, + "price_list_rate", + ), + 200, + ) + # do not update price list frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 0) @@ -1360,6 +1380,59 @@ class TestSalesOrder(FrappeTestCase): except Exception: self.fail("Can not cancel sales order with linked cancelled payment entry") + def test_work_order_pop_up_from_sales_order(self): + "Test `get_work_order_items` in Sales Order picks the right BOM for items to manufacture." + + from erpnext.controllers.item_variant import create_variant + from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom + + make_item( # template item + "Test-WO-Tshirt", + { + "has_variant": 1, + "variant_based_on": "Item Attribute", + "attributes": [{"attribute": "Test Colour"}], + }, + ) + make_item("Test-RM-Cotton") # RM for BOM + + for colour in ( + "Red", + "Green", + ): + variant = create_variant("Test-WO-Tshirt", {"Test Colour": colour}) + variant.save() + + template_bom = make_bom(item="Test-WO-Tshirt", rate=100, raw_materials=["Test-RM-Cotton"]) + red_var_bom = make_bom(item="Test-WO-Tshirt-R", rate=100, raw_materials=["Test-RM-Cotton"]) + + so = make_sales_order( + **{ + "item_list": [ + { + "item_code": "Test-WO-Tshirt-R", + "qty": 1, + "rate": 1000, + "warehouse": "_Test Warehouse - _TC", + }, + { + "item_code": "Test-WO-Tshirt-G", + "qty": 1, + "rate": 1000, + "warehouse": "_Test Warehouse - _TC", + }, + ] + } + ) + wo_items = so.get_work_order_items() + + self.assertEqual(wo_items[0].get("item_code"), "Test-WO-Tshirt-R") + self.assertEqual(wo_items[0].get("bom"), red_var_bom.name) + + # Must pick Template Item BOM for Test-WO-Tshirt-G as it has no BOM + self.assertEqual(wo_items[1].get("item_code"), "Test-WO-Tshirt-G") + self.assertEqual(wo_items[1].get("bom"), template_bom.name) + def test_request_for_raw_materials(self): item = make_item( "_Test Finished Item", @@ -1659,7 +1732,9 @@ def make_sales_order(**args): "warehouse": args.warehouse, "qty": args.qty or 10, "uom": args.uom or None, - "rate": args.rate or 100, + "price_list_rate": args.price_list_rate or None, + "discount_percentage": args.discount_percentage or None, + "rate": args.rate or (None if args.price_list_rate else 100), "against_blanket_order": args.against_blanket_order, }, ) diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index 3797856db2..318799907e 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -23,7 +23,6 @@ "quantity_and_rate", "qty", "stock_uom", - "picked_qty", "col_break2", "uom", "conversion_factor", @@ -87,6 +86,7 @@ "delivered_qty", "produced_qty", "returned_qty", + "picked_qty", "shopping_cart_section", "additional_notes", "section_break_63", @@ -198,6 +198,7 @@ "width": "100px" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -220,6 +221,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "UOM Conversion Factor", @@ -228,6 +230,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Qty as per Stock UOM", @@ -811,7 +814,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-04-27 03:15:34.366563", + "modified": "2022-06-17 05:27:41.603006", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order Item", diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json index 005e24cfbe..2abb169b8a 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.json +++ b/erpnext/selling/doctype/selling_settings/selling_settings.json @@ -179,7 +179,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2022-04-14 16:01:29.405642", + "modified": "2022-05-31 19:39:48.398738", "modified_by": "Administrator", "module": "Selling", "name": "Selling Settings", @@ -193,6 +193,15 @@ "role": "System Manager", "share": 1, "write": 1 + }, + { + "create": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "Sales Manager", + "share": 1, + "write": 1 } ], "sort_field": "modified", diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py index 6c09894251..d977807e7d 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.py +++ b/erpnext/selling/doctype/selling_settings/selling_settings.py @@ -27,7 +27,7 @@ class SellingSettings(Document): ]: frappe.db.set_default(key, self.get(key, "")) - from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series + from erpnext.utilities.naming import set_by_naming_series set_by_naming_series( "Customer", diff --git a/erpnext/selling/form_tour/selling_settings/selling_settings.json b/erpnext/selling/form_tour/selling_settings/selling_settings.json index 20c718f8c0..8d5cf88eba 100644 --- a/erpnext/selling/form_tour/selling_settings/selling_settings.json +++ b/erpnext/selling/form_tour/selling_settings/selling_settings.json @@ -4,7 +4,7 @@ "doctype": "Form Tour", "idx": 0, "is_standard": 1, - "modified": "2021-06-29 20:49:01.359489", + "modified": "2022-07-11 20:49:01.359489", "modified_by": "Administrator", "module": "Selling", "name": "Selling Settings", @@ -33,7 +33,7 @@ "is_table_field": 0, "label": "Is Sales Order Required for Sales Invoice & Delivery Note Creation?", "parent_field": "", - "position": "Left", + "position": "Right", "title": "Sales Order Required for Sales Invoice & Delivery Note Creation" }, { @@ -45,7 +45,7 @@ "is_table_field": 0, "label": "Is Delivery Note Required for Sales Invoice Creation?", "parent_field": "", - "position": "Left", + "position": "Right", "title": "Delivery Note Required for Sales Invoice Creation" }, { diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py index 99afe813cb..13d5069ea6 100644 --- a/erpnext/selling/page/point_of_sale/point_of_sale.py +++ b/erpnext/selling/page/point_of_sale/point_of_sale.py @@ -107,7 +107,7 @@ def get_items(start, page_length, price_list, item_group, pos_profile, search_te ORDER BY item.name asc LIMIT - {start}, {page_length}""".format( + {page_length} offset {start}""".format( start=start, page_length=page_length, lft=lft, @@ -204,7 +204,7 @@ def item_group_query(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """ select distinct name from `tabItem Group` - where {condition} and (name like %(txt)s) limit {start}, {page_len}""".format( + where {condition} and (name like %(txt)s) limit {page_len} offset {start}""".format( condition=cond, start=start, page_len=page_len ), {"txt": "%%%s%%" % txt}, diff --git a/erpnext/selling/page/point_of_sale/pos_controller.js b/erpnext/selling/page/point_of_sale/pos_controller.js index 7a6838680f..cb4bd51415 100644 --- a/erpnext/selling/page/point_of_sale/pos_controller.js +++ b/erpnext/selling/page/point_of_sale/pos_controller.js @@ -479,16 +479,20 @@ erpnext.PointOfSale.Controller = class { frappe.dom.freeze(); this.frm = this.get_new_frm(this.frm); this.frm.doc.items = []; - const res = await frappe.call({ + return frappe.call({ method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.make_sales_return", args: { 'source_name': doc.name, 'target_doc': this.frm.doc + }, + callback: (r) => { + frappe.model.sync(r.message); + frappe.get_doc(r.message.doctype, r.message.name).__run_link_triggers = false; + this.set_pos_profile_data().then(() => { + frappe.dom.unfreeze(); + }); } }); - frappe.model.sync(res.message); - await this.set_pos_profile_data(); - frappe.dom.unfreeze(); } set_pos_profile_data() { diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js index b4ece46e6e..0a356b9a6f 100644 --- a/erpnext/selling/page/point_of_sale/pos_payment.js +++ b/erpnext/selling/page/point_of_sale/pos_payment.js @@ -161,13 +161,13 @@ erpnext.PointOfSale.Payment = class { frappe.ui.form.on('POS Invoice', 'contact_mobile', (frm) => { const contact = frm.doc.contact_mobile; - const request_button = $(this.request_for_payment_field.$input[0]); + const request_button = $(this.request_for_payment_field?.$input[0]); if (contact) { request_button.removeClass('btn-default').addClass('btn-primary'); } else { request_button.removeClass('btn-primary').addClass('btn-default'); - } - }); + } + }); frappe.ui.form.on('POS Invoice', 'coupon_code', (frm) => { if (frm.doc.coupon_code && !frm.applying_pos_coupon_code) { diff --git a/erpnext/selling/print_format/gst_pos_invoice/__init__.py b/erpnext/selling/print_format/gst_pos_invoice/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/selling/print_format/gst_pos_invoice/gst_pos_invoice.json b/erpnext/selling/print_format/gst_pos_invoice/gst_pos_invoice.json deleted file mode 100644 index 9d1b196cf0..0000000000 --- a/erpnext/selling/print_format/gst_pos_invoice/gst_pos_invoice.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "absolute_value": 0, - "align_labels_right": 0, - "creation": "2017-08-08 12:33:04.773099", - "custom_format": 1, - "disabled": 0, - "doc_type": "POS Invoice", - "docstatus": 0, - "doctype": "Print Format", - "font": "Default", - "html": "\n\n{% if letter_head %}\n {{ letter_head }}\n{% endif %}\n

    \n\t{{ doc.company }}
    \n\t{% if doc.company_address_display %}\n\t\t{% set company_address = doc.company_address_display.replace(\"\\n\", \" \").replace(\"
    \", \" \") %}\n\t\t{% if \"GSTIN\" not in company_address %}\n\t\t\t{{ company_address }}\n\t\t\t{{ _(\"GSTIN\") }}:{{ doc.company_gstin }}\n\t\t{% else %}\n\t\t\t{{ company_address.replace(\"GSTIN\", \"
    GSTIN\") }}\n\t\t{% endif %}\n\t{% endif %}\n\t
    \n\t{% if doc.docstatus == 0 %}\n\t\t{{ doc.status + \" \"+ (doc.select_print_heading or _(\"Invoice\")) }}
    \n\t{% else %}\n\t\t{{ doc.select_print_heading or _(\"Invoice\") }}
    \n\t{% endif %}\n

    \n\n

    \n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
    \n\t{{ _(\"Cashier\") }}: {{ doc.owner }}
    \n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
    \n\t{{ _(\"Time\") }}: {{ doc.get_formatted(\"posting_time\") }}
    \n\t{% if doc.grand_total > 50000 %}\n\t\t{% set customer_address = doc.address_display.replace(\"\\n\", \" \").replace(\"
    \", \" \") %}\n\t\t{{ _(\"Customer\") }}:
    \n\t\t{{ doc.customer_name }}
    \n\t\t{{ customer_address }}\n\t{% endif %}\n

    \n\n
    \n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
    {{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
    \n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
    {{ item.item_name }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.gst_hsn_code -%}\n\t\t\t\t\t
    {{ _(\"HSN/SAC\") }}: {{ item.gst_hsn_code }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.serial_no -%}\n\t\t\t\t\t
    {{ _(\"SR.No\") }}:
    \n\t\t\t\t\t{{ item.serial_no | replace(\"\\n\", \", \") }}\n\t\t\t\t{%- endif -%}\n\t\t\t
    {{ item.qty }}
    @ {{ item.rate }}
    {{ item.get_formatted(\"amount\") }}
    \n\n\t\n\t\t\n\t\t\t{% if doc.flags.show_inclusive_tax_in_print %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% else %}\n\t\t\t\t\n\t\t\t\t\n\t\t\t{% endif %}\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t {%- if (not row.included_in_print_rate or doc.flags.show_inclusive_tax_in_print) and row.tax_amount != 0 -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t {%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- if doc.rounded_total -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t{%- for row in doc.payments -%}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t{%- endfor -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t{%- if doc.change_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t{%- endif -%}\n\t\n
    \n\t\t\t\t\t{{ _(\"Total Excl. Tax\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"net_total\", doc) }}\n\t\t\t\t\n\t\t\t\t\t{{ _(\"Total\") }}\n\t\t\t\t\n\t\t\t\t\t{{ doc.get_formatted(\"total\", doc) }}\n\t\t\t\t
    \n\t\t\t\t\t{% if '%' in row.description %}\n\t\t\t\t\t {{ row.description }}\n\t\t\t\t\t{% else %}\n\t\t\t\t\t {{ row.description }}@{{ row.rate }}%\n\t\t\t\t\t{% endif %}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t\t
    \n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
    \n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
    \n\t\t\t\t{{ _(\"Rounded Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"rounded_total\") }}\n\t\t\t
    \n\t\t\t\t {{ row.mode_of_payment }}\n\t\t\t\t\n\t\t\t\t\t{{ row.get_formatted(\"amount\", doc) }}\n\t\t\t\t
    \n\t\t\t\t{{ _(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"paid_amount\") }}\n\t\t\t
    \n\t\t\t\t{{ _(\"Change Amount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"change_amount\") }}\n\t\t\t
    \n

    {{ doc.terms or \"\" }}

    \n

    {{ _(\"Thank you, please visit again.\") }}

    ", - "idx": 0, - "line_breaks": 0, - "modified": "2021-04-15 15:26:04.396169", - "modified_by": "Administrator", - "module": "Selling", - "name": "GST POS Invoice", - "owner": "Administrator", - "print_format_builder": 0, - "print_format_type": "Jinja", - "raw_printing": 0, - "show_section_headings": 0, - "standard": "Yes" -} \ No newline at end of file diff --git a/erpnext/selling/report/inactive_customers/inactive_customers.py b/erpnext/selling/report/inactive_customers/inactive_customers.py index 1b337fc495..a166085327 100644 --- a/erpnext/selling/report/inactive_customers/inactive_customers.py +++ b/erpnext/selling/report/inactive_customers/inactive_customers.py @@ -31,13 +31,13 @@ def execute(filters=None): def get_sales_details(doctype): cond = """sum(so.base_net_total) as 'total_order_considered', max(so.posting_date) as 'last_order_date', - DATEDIFF(CURDATE(), max(so.posting_date)) as 'days_since_last_order' """ + DATEDIFF(CURRENT_DATE, max(so.posting_date)) as 'days_since_last_order' """ if doctype == "Sales Order": cond = """sum(if(so.status = "Stopped", so.base_net_total * so.per_delivered/100, so.base_net_total)) as 'total_order_considered', max(so.transaction_date) as 'last_order_date', - DATEDIFF(CURDATE(), max(so.transaction_date)) as 'days_since_last_order'""" + DATEDIFF(CURRENT_DATE, max(so.transaction_date)) as 'days_since_last_order'""" return frappe.db.sql( """select diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py index 091c20c917..e10df2acbb 100644 --- a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py +++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py @@ -238,4 +238,5 @@ def get_chart_data(data): "datasets": [{"name": _("Total Sales Amount"), "values": datapoints[:30]}], }, "type": "bar", + "fieldtype": "Currency", } diff --git a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py index cb22fb6a80..91f4a5e50a 100644 --- a/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py +++ b/erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py @@ -187,8 +187,9 @@ def get_so_with_invoices(filters): .on(soi.parent == so.name) .join(ps) .on(ps.parent == so.name) + .select(so.name) + .distinct() .select( - so.name, so.customer, so.transaction_date.as_("submitted"), ifelse(datediff(ps.due_date, functions.CurDate()) < 0, "Overdue", "Unpaid").as_("status"), diff --git a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py index cc1055c787..928ed80d5c 100644 --- a/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py +++ b/erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py @@ -65,7 +65,7 @@ def get_data(): WHERE so.docstatus = 1 and so.name = so_item.parent - and so.status not in ("Closed","Completed","Cancelled") + and so.status not in ('Closed','Completed','Cancelled') GROUP BY so.name,so_item.item_code """, diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.py b/erpnext/selling/report/quotation_trends/quotation_trends.py index 4e0758d7cd..4d71ce77c4 100644 --- a/erpnext/selling/report/quotation_trends/quotation_trends.py +++ b/erpnext/selling/report/quotation_trends/quotation_trends.py @@ -54,4 +54,5 @@ def get_chart_data(data, conditions, filters): }, "type": "line", "lineOptions": {"regionFill": 1}, + "fieldtype": "Currency", } diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.js b/erpnext/selling/report/sales_analytics/sales_analytics.js index d527e42ea4..87dd02f991 100644 --- a/erpnext/selling/report/sales_analytics/sales_analytics.js +++ b/erpnext/selling/report/sales_analytics/sales_analytics.js @@ -67,9 +67,6 @@ frappe.query_reports["Sales Analytics"] = { reqd: 1 } ], - after_datatable_render: function(datatable_obj) { - $(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click(); - }, get_datatable_options(options) { return Object.assign(options, { checkboxColumn: true, @@ -109,11 +106,8 @@ frappe.query_reports["Sales Analytics"] = { labels: raw_data.labels, datasets: new_datasets, }; - - frappe.query_report.render_chart({ - data: new_data, - type: "line", - }); + const new_options = Object.assign({}, frappe.query_report.chart_options, {data: new_data}); + frappe.query_report.render_chart(new_options); frappe.query_report.raw_chart_data = new_data; }, diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.py b/erpnext/selling/report/sales_analytics/sales_analytics.py index 1a2476a9da..9d7d806c71 100644 --- a/erpnext/selling/report/sales_analytics/sales_analytics.py +++ b/erpnext/selling/report/sales_analytics/sales_analytics.py @@ -415,3 +415,8 @@ class Analytics(object): else: labels = [d.get("label") for d in self.columns[1 : length - 1]] self.chart = {"data": {"labels": labels, "datasets": []}, "type": "line"} + + if self.filters["value_quantity"] == "Value": + self.chart["fieldtype"] = "Currency" + else: + self.chart["fieldtype"] = "Float" diff --git a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js index 76a5bb51ca..91748bc7be 100644 --- a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js +++ b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.js @@ -55,6 +55,7 @@ frappe.query_reports["Sales Order Analysis"] = { for (let option of status){ options.push({ "value": option, + "label": __(option), "description": "" }) } diff --git a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.py b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.py index dcfb10a9d5..720aa41982 100644 --- a/erpnext/selling/report/sales_order_analysis/sales_order_analysis.py +++ b/erpnext/selling/report/sales_order_analysis/sales_order_analysis.py @@ -1,11 +1,13 @@ # Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - import copy +from collections import OrderedDict import frappe -from frappe import _ +from frappe import _, qb +from frappe.query_builder import CustomFunction +from frappe.query_builder.functions import Max from frappe.utils import date_diff, flt, getdate @@ -18,11 +20,12 @@ def execute(filters=None): columns = get_columns(filters) conditions = get_conditions(filters) data = get_data(conditions, filters) + so_elapsed_time = get_so_elapsed_time(data) if not data: return [], [], None, [] - data, chart_data = prepare_data(data, filters) + data, chart_data = prepare_data(data, so_elapsed_time, filters) return columns, data, None, chart_data @@ -61,11 +64,10 @@ def get_data(conditions, filters): soi.delivery_date as delivery_date, so.name as sales_order, so.status, so.customer, soi.item_code, - DATEDIFF(CURDATE(), soi.delivery_date) as delay_days, + DATEDIFF(CURRENT_DATE, soi.delivery_date) as delay_days, IF(so.status in ('Completed','To Bill'), 0, (SELECT delay_days)) as delay, soi.qty, soi.delivered_qty, (soi.qty - soi.delivered_qty) AS pending_qty, - IF((SELECT pending_qty) = 0, (TO_SECONDS(Max(dn.posting_date))-TO_SECONDS(so.transaction_date)), 0) as time_taken_to_deliver, IFNULL(SUM(sii.qty), 0) as billed_qty, soi.base_amount as amount, (soi.delivered_qty * soi.base_rate) as delivered_qty_amount, @@ -76,13 +78,9 @@ def get_data(conditions, filters): soi.description as description FROM `tabSales Order` so, - (`tabSales Order Item` soi + `tabSales Order Item` soi LEFT JOIN `tabSales Invoice Item` sii - ON sii.so_detail = soi.name and sii.docstatus = 1) - LEFT JOIN `tabDelivery Note Item` dni - on dni.so_detail = soi.name - LEFT JOIN `tabDelivery Note` dn - on dni.parent = dn.name and dn.docstatus = 1 + ON sii.so_detail = soi.name and sii.docstatus = 1 WHERE soi.parent = so.name and so.status not in ('Stopped', 'Closed', 'On Hold') @@ -100,7 +98,48 @@ def get_data(conditions, filters): return data -def prepare_data(data, filters): +def get_so_elapsed_time(data): + """ + query SO's elapsed time till latest delivery note + """ + so_elapsed_time = OrderedDict() + if data: + sales_orders = [x.sales_order for x in data] + + so = qb.DocType("Sales Order") + soi = qb.DocType("Sales Order Item") + dn = qb.DocType("Delivery Note") + dni = qb.DocType("Delivery Note Item") + + to_seconds = CustomFunction("TO_SECONDS", ["date"]) + + query = ( + qb.from_(so) + .inner_join(soi) + .on(soi.parent == so.name) + .left_join(dni) + .on(dni.so_detail == soi.name) + .left_join(dn) + .on(dni.parent == dn.name) + .select( + so.name.as_("sales_order"), + soi.item_code.as_("so_item_code"), + (to_seconds(Max(dn.posting_date)) - to_seconds(so.transaction_date)).as_("elapsed_seconds"), + ) + .where((so.name.isin(sales_orders)) & (dn.docstatus == 1)) + .orderby(so.name, soi.name) + .groupby(soi.name) + ) + dn_elapsed_time = query.run(as_dict=True) + + for e in dn_elapsed_time: + key = (e.sales_order, e.so_item_code) + so_elapsed_time[key] = e.elapsed_seconds + + return so_elapsed_time + + +def prepare_data(data, so_elapsed_time, filters): completed, pending = 0, 0 if filters.get("group_by_so"): @@ -115,6 +154,13 @@ def prepare_data(data, filters): row["qty_to_bill"] = flt(row["qty"]) - flt(row["billed_qty"]) row["delay"] = 0 if row["delay"] and row["delay"] < 0 else row["delay"] + + row["time_taken_to_deliver"] = ( + so_elapsed_time.get((row.sales_order, row.item_code)) + if row["status"] in ("To Bill", "Completed") + else 0 + ) + if filters.get("group_by_so"): so_name = row["sales_order"] diff --git a/erpnext/selling/report/sales_order_analysis/test_sales_order_analysis.py b/erpnext/selling/report/sales_order_analysis/test_sales_order_analysis.py index 25cbb73449..241f4358fb 100644 --- a/erpnext/selling/report/sales_order_analysis/test_sales_order_analysis.py +++ b/erpnext/selling/report/sales_order_analysis/test_sales_order_analysis.py @@ -11,7 +11,7 @@ test_dependencies = ["Sales Order", "Item", "Sales Invoice", "Delivery Note"] class TestSalesOrderAnalysis(FrappeTestCase): - def create_sales_order(self, transaction_date): + def create_sales_order(self, transaction_date, do_not_save=False, do_not_submit=False): item = create_item(item_code="_Test Excavator", is_stock_item=0) so = make_sales_order( transaction_date=transaction_date, @@ -24,25 +24,31 @@ class TestSalesOrderAnalysis(FrappeTestCase): so.taxes_and_charges = "" so.taxes = "" so.items[0].delivery_date = add_days(transaction_date, 15) - so.save() - so.submit() + if not do_not_save: + so.save() + if not do_not_submit: + so.submit() return item, so - def create_sales_invoice(self, so): + def create_sales_invoice(self, so, do_not_save=False, do_not_submit=False): sinv = make_sales_invoice(so.name) sinv.posting_date = so.transaction_date sinv.taxes_and_charges = "" sinv.taxes = "" - sinv.insert() - sinv.submit() + if not do_not_save: + sinv.save() + if not do_not_submit: + sinv.submit() return sinv - def create_delivery_note(self, so): + def create_delivery_note(self, so, do_not_save=False, do_not_submit=False): dn = make_delivery_note(so.name) dn.set_posting_time = True dn.posting_date = add_days(so.transaction_date, 1) - dn.save() - dn.submit() + if not do_not_save: + dn.save() + if not do_not_submit: + dn.submit() return dn def test_01_so_to_deliver_and_bill(self): @@ -164,3 +170,85 @@ class TestSalesOrderAnalysis(FrappeTestCase): ) # SO's from first 4 test cases should be in output self.assertEqual(len(data), 4) + + def test_06_so_pending_delivery_with_multiple_delivery_notes(self): + transaction_date = "2021-06-01" + item, so = self.create_sales_order(transaction_date) + + # bill 2 items + sinv1 = self.create_sales_invoice(so, do_not_save=True) + sinv1.items[0].qty = 2 + sinv1 = sinv1.save().submit() + # deliver 2 items + dn1 = self.create_delivery_note(so, do_not_save=True) + dn1.items[0].qty = 2 + dn1 = dn1.save().submit() + + # bill 2 items + sinv2 = self.create_sales_invoice(so, do_not_save=True) + sinv2.items[0].qty = 2 + sinv2 = sinv2.save().submit() + # deliver 1 item + dn2 = self.create_delivery_note(so, do_not_save=True) + dn2.items[0].qty = 1 + dn2 = dn2.save().submit() + + columns, data, message, chart = execute( + { + "company": "_Test Company", + "from_date": "2021-06-01", + "to_date": "2021-06-30", + "sales_order": [so.name], + } + ) + expected_value = { + "status": "To Deliver and Bill", + "sales_order": so.name, + "delay_days": frappe.utils.date_diff(frappe.utils.datetime.date.today(), so.delivery_date), + "qty": 10, + "delivered_qty": 3, + "pending_qty": 7, + "qty_to_bill": 6, + "billed_qty": 4, + "time_taken_to_deliver": 0, + } + self.assertEqual(len(data), 1) + for key, val in expected_value.items(): + with self.subTest(key=key, val=val): + self.assertEqual(data[0][key], val) + + def test_07_so_delivered_with_multiple_delivery_notes(self): + transaction_date = "2021-06-01" + item, so = self.create_sales_order(transaction_date) + + dn1 = self.create_delivery_note(so, do_not_save=True) + dn1.items[0].qty = 5 + dn1 = dn1.save().submit() + + dn2 = self.create_delivery_note(so, do_not_save=True) + dn2.items[0].qty = 5 + dn2 = dn2.save().submit() + + columns, data, message, chart = execute( + { + "company": "_Test Company", + "from_date": "2021-06-01", + "to_date": "2021-06-30", + "sales_order": [so.name], + } + ) + expected_value = { + "status": "To Bill", + "sales_order": so.name, + "delay_days": frappe.utils.date_diff(frappe.utils.datetime.date.today(), so.delivery_date), + "qty": 10, + "delivered_qty": 10, + "pending_qty": 0, + "qty_to_bill": 10, + "billed_qty": 0, + "time_taken_to_deliver": 86400, + } + self.assertEqual(len(data), 1) + for key, val in expected_value.items(): + with self.subTest(key=key, val=val): + self.assertEqual(data[0][key], val) diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.py b/erpnext/selling/report/sales_order_trends/sales_order_trends.py index 719f1c5274..18f448c7cd 100644 --- a/erpnext/selling/report/sales_order_trends/sales_order_trends.py +++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.py @@ -51,4 +51,5 @@ def get_chart_data(data, conditions, filters): }, "type": "line", "lineOptions": {"regionFill": 1}, + "fieldtype": "Currency", } diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index 98131f96ed..8ff01f5cb4 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -12,8 +12,6 @@ frappe.provide("erpnext.selling"); erpnext.selling.SellingController = class SellingController extends erpnext.TransactionController { setup() { super.setup(); - this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate"); - this.frm.add_fetch("sales_person", "commission_rate", "commission_rate"); } onload() { @@ -43,6 +41,7 @@ erpnext.selling.SellingController = class SellingController extends erpnext.Tran me.frm.set_query('shipping_address_name', erpnext.queries.address_query); me.frm.set_query('dispatch_address_name', erpnext.queries.dispatch_address_query); + erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype); if(this.frm.fields_dict.selling_price_list) { this.frm.set_query("selling_price_list", function() { @@ -64,7 +63,7 @@ erpnext.selling.SellingController = class SellingController extends erpnext.Tran this.frm.set_query("item_code", "items", function() { return { query: "erpnext.controllers.queries.item_query", - filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer} + filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer, 'has_variants': 0} } }); } @@ -513,4 +512,4 @@ frappe.ui.form.on(cur_frm.doctype, { dialog.show(); } -}) \ No newline at end of file +}) diff --git a/erpnext/setup/doctype/authorization_control/authorization_control.py b/erpnext/setup/doctype/authorization_control/authorization_control.py index 309658d260..5e77c6fa81 100644 --- a/erpnext/setup/doctype/authorization_control/authorization_control.py +++ b/erpnext/setup/doctype/authorization_control/authorization_control.py @@ -135,8 +135,8 @@ class AuthorizationControl(TransactionBase): price_list_rate, base_rate = 0, 0 for d in doc_obj.get("items"): if d.base_rate: - price_list_rate += flt(d.base_price_list_rate) or flt(d.base_rate) - base_rate += flt(d.base_rate) + price_list_rate += (flt(d.base_price_list_rate) or flt(d.base_rate)) * flt(d.qty) + base_rate += flt(d.base_rate) * flt(d.qty) if doc_obj.get("discount_amount"): base_rate -= flt(doc_obj.discount_amount) @@ -248,61 +248,3 @@ class AuthorizationControl(TransactionBase): ) return rule - - # related to payroll module only - def get_approver_name(self, doctype_name, total, doc_obj=""): - app_user = [] - app_specific_user = [] - rule = {} - - if doc_obj: - if doctype_name == "Expense Claim": - rule = self.get_value_based_rule( - doctype_name, doc_obj.employee, doc_obj.total_claimed_amount, doc_obj.company - ) - elif doctype_name == "Appraisal": - rule = frappe.db.sql( - """select name, to_emp, to_designation, approving_role, approving_user - from `tabAuthorization Rule` where transaction=%s - and (to_emp=%s or to_designation IN (select designation from `tabEmployee` where name=%s)) - and company = %s and docstatus!=2""", - (doctype_name, doc_obj.employee, doc_obj.employee, doc_obj.company), - as_dict=1, - ) - - if not rule: - rule = frappe.db.sql( - """select name, to_emp, to_designation, approving_role, approving_user - from `tabAuthorization Rule` - where transaction=%s and (to_emp=%s or - to_designation IN (select designation from `tabEmployee` where name=%s)) - and ifnull(company,'') = '' and docstatus!=2""", - (doctype_name, doc_obj.employee, doc_obj.employee), - as_dict=1, - ) - - if rule: - for m in rule: - if m["to_emp"] or m["to_designation"]: - if m["approving_user"]: - app_specific_user.append(m["approving_user"]) - elif m["approving_role"]: - user_lst = [ - z[0] - for z in frappe.db.sql( - """select distinct t1.name - from `tabUser` t1, `tabHas Role` t2 where t2.role=%s - and t2.parent=t1.name and t1.name !='Administrator' - and t1.name != 'Guest' and t1.docstatus !=2""", - m["approving_role"], - ) - ] - - for x in user_lst: - if not x in app_user: - app_user.append(x) - - if len(app_specific_user) > 0: - return app_specific_user - else: - return app_user diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.js b/erpnext/setup/doctype/authorization_rule/authorization_rule.js index 6b606e11e7..3f6afcae7f 100644 --- a/erpnext/setup/doctype/authorization_rule/authorization_rule.js +++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.js @@ -28,19 +28,8 @@ frappe.ui.form.on("Authorization Rule", { } }, transaction: function(frm) { - if (frm.doc.transaction == 'Appraisal') { - frm.set_value("based_on", "Not Applicable"); - frm.set_value("master_name", ""); - frm.set_value("system_role", ""); - frm.set_value("system_user", ""); - frm.set_value("value", 0); - hide_field(['based_on', 'system_role', 'system_user', 'value']); - unhide_field(['to_emp','to_designation']); - } - else { - unhide_field(['system_role', 'system_user','value', 'based_on']); - hide_field(['to_emp','to_designation']); - } + unhide_field(['system_role', 'system_user', 'value', 'based_on']); + hide_field(['to_emp', 'to_designation']); } }) @@ -52,19 +41,8 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) { else unhide_field('value'); - if (doc.transaction == 'Appraisal') { - hide_field(['system_role', 'system_user']); - unhide_field(['to_emp','to_designation']); - - if (doc.transaction == 'Appraisal') - hide_field('value'); - else - unhide_field('value'); - } - else { - unhide_field(['system_role', 'system_user','value']); - hide_field(['to_emp','to_designation']); - } + unhide_field(['system_role', 'system_user', 'value']); + hide_field(['to_emp', 'to_designation']); } cur_frm.fields_dict.system_user.get_query = function(doc, cdt, cdn) { diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.json b/erpnext/setup/doctype/authorization_rule/authorization_rule.json index caca56c897..d3b8887c37 100644 --- a/erpnext/setup/doctype/authorization_rule/authorization_rule.json +++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.json @@ -1,657 +1,189 @@ { - "allow_copy": 0, - "allow_events_in_timeline": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 0, - "autoname": "HR-ARU-.#####", - "beta": 0, - "creation": "2013-01-10 16:34:22", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, + "actions": [], + "allow_import": 1, + "autoname": "HR-ARU-.#####", + "creation": "2013-01-10 16:34:22", + "doctype": "DocType", + "document_type": "Setup", + "engine": "InnoDB", + "field_order": [ + "transaction", + "based_on", + "customer_or_item", + "master_name", + "column_break_3", + "company", + "section_break_17", + "value", + "section_break_7", + "system_role", + "to_emp", + "column_break_10", + "system_user", + "to_designation", + "section_break_13", + "approving_role", + "column_break_15", + "approving_user" + ], "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "transaction", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Transaction", - "length": 0, - "no_copy": 0, - "oldfieldname": "transaction", - "oldfieldtype": "Select", - "options": "\nSales Order\nPurchase Order\nQuotation\nDelivery Note\nSales Invoice\nPurchase Invoice\nPurchase Receipt\nAppraisal", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "transaction", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Transaction", + "oldfieldname": "transaction", + "oldfieldtype": "Select", + "options": "\nSales Order\nPurchase Order\nQuotation\nDelivery Note\nSales Invoice\nPurchase Invoice\nPurchase Receipt", + "reqd": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "based_on", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Based On", - "length": 0, - "no_copy": 0, - "oldfieldname": "based_on", - "oldfieldtype": "Select", - "options": "\nGrand Total\nAverage Discount\nCustomerwise Discount\nItemwise Discount\nNot Applicable", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "based_on", + "fieldtype": "Select", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Based On", + "oldfieldname": "based_on", + "oldfieldtype": "Select", + "options": "\nGrand Total\nAverage Discount\nCustomerwise Discount\nItemwise Discount\nNot Applicable", + "reqd": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "customer_or_item", - "fieldtype": "Select", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Customer or Item", - "length": 0, - "no_copy": 0, - "options": "Customer\nItem", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "customer_or_item", + "fieldtype": "Select", + "hidden": 1, + "label": "Customer or Item", + "options": "Customer\nItem", + "read_only": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "master_name", - "fieldtype": "Dynamic Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Customer / Item Name", - "length": 0, - "no_copy": 0, - "oldfieldname": "master_name", - "oldfieldtype": "Link", - "options": "customer_or_item", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "master_name", + "fieldtype": "Dynamic Link", + "in_list_view": 1, + "label": "Customer / Item Name", + "oldfieldname": "master_name", + "oldfieldtype": "Link", + "options": "customer_or_item" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "oldfieldname": "company", - "oldfieldtype": "Link", - "options": "Company", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 1, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "company", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Company", + "oldfieldname": "company", + "oldfieldtype": "Link", + "options": "Company", + "remember_last_selected_value": 1 + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_17", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "section_break_17", + "fieldtype": "Section Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "value", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Authorized Value", - "length": 0, - "no_copy": 0, - "oldfieldname": "value", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "value", + "fieldtype": "Float", + "label": "Authorized Value", + "oldfieldname": "value", + "oldfieldtype": "Currency" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_7", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "section_break_7", + "fieldtype": "Section Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "system_role", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 1, - "label": "Applicable To (Role)", - "length": 0, - "no_copy": 0, - "oldfieldname": "system_role", - "oldfieldtype": "Link", - "options": "Role", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "system_role", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Applicable To (Role)", + "oldfieldname": "system_role", + "oldfieldtype": "Link", + "options": "Role" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "to_emp", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Applicable To (Employee)", - "length": 0, - "no_copy": 0, - "oldfieldname": "to_emp", - "oldfieldtype": "Link", - "options": "Employee", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "to_emp", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Applicable To (Employee)", + "oldfieldname": "to_emp", + "oldfieldtype": "Link", + "options": "Employee" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_10", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "column_break_10", + "fieldtype": "Column Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "system_user", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Applicable To (User)", - "length": 0, - "no_copy": 0, - "oldfieldname": "system_user", - "oldfieldtype": "Link", - "options": "User", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "system_user", + "fieldtype": "Link", + "label": "Applicable To (User)", + "oldfieldname": "system_user", + "oldfieldtype": "Link", + "options": "User" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "to_designation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Applicable To (Designation)", - "length": 0, - "no_copy": 0, - "oldfieldname": "to_designation", - "oldfieldtype": "Link", - "options": "Designation", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "to_designation", + "fieldtype": "Link", + "label": "Applicable To (Designation)", + "oldfieldname": "to_designation", + "oldfieldtype": "Link", + "options": "Designation" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_13", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "section_break_13", + "fieldtype": "Section Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "approving_role", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Approving Role (above authorized value)", - "length": 0, - "no_copy": 0, - "oldfieldname": "approving_role", - "oldfieldtype": "Link", - "options": "Role", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "approving_role", + "fieldtype": "Link", + "label": "Approving Role (above authorized value)", + "oldfieldname": "approving_role", + "oldfieldtype": "Link", + "options": "Role" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_15", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, + "fieldname": "column_break_15", + "fieldtype": "Column Break" + }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "approving_user", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Approving User (above authorized value)", - "length": 0, - "no_copy": 0, - "oldfieldname": "approving_user", - "oldfieldtype": "Link", - "options": "User", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 + "fieldname": "approving_user", + "fieldtype": "Link", + "label": "Approving User (above authorized value)", + "oldfieldname": "approving_user", + "oldfieldtype": "Link", + "options": "User" } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-shield", - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 0, - "modified": "2019-01-21 17:10:39.822125", - "modified_by": "Administrator", - "module": "Setup", - "name": "Authorization Rule", - "owner": "Administrator", + ], + "icon": "fa fa-shield", + "idx": 1, + "links": [], + "modified": "2022-07-01 11:19:45.643991", + "modified_by": "Administrator", + "module": "Setup", + "name": "Authorization Rule", + "naming_rule": "Expression (old style)", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, "write": 1 } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "search_fields": "transaction,based_on,system_user,system_role,approving_user,approving_role", - "show_name_in_global_search": 1, - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0, - "track_views": 0 + ], + "search_fields": "transaction,based_on,system_user,system_role,approving_user,approving_role", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] } \ No newline at end of file diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.py b/erpnext/setup/doctype/authorization_rule/authorization_rule.py index faecd5ae06..44bd826fc6 100644 --- a/erpnext/setup/doctype/authorization_rule/authorization_rule.py +++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.py @@ -32,33 +32,31 @@ class AuthorizationRule(Document): frappe.throw(_("Duplicate Entry. Please check Authorization Rule {0}").format(auth_exists)) def validate_rule(self): - if self.transaction != "Appraisal": - if not self.approving_role and not self.approving_user: - frappe.throw(_("Please enter Approving Role or Approving User")) - elif self.system_user and self.system_user == self.approving_user: - frappe.throw(_("Approving User cannot be same as user the rule is Applicable To")) - elif self.system_role and self.system_role == self.approving_role: - frappe.throw(_("Approving Role cannot be same as role the rule is Applicable To")) - elif self.transaction in [ - "Purchase Order", - "Purchase Receipt", - "Purchase Invoice", - "Stock Entry", - ] and self.based_on in [ - "Average Discount", - "Customerwise Discount", - "Itemwise Discount", - ]: - frappe.throw( - _("Cannot set authorization on basis of Discount for {0}").format(self.transaction) - ) - elif self.based_on == "Average Discount" and flt(self.value) > 100.00: - frappe.throw(_("Discount must be less than 100")) - elif self.based_on == "Customerwise Discount" and not self.master_name: - frappe.throw(_("Customer required for 'Customerwise Discount'")) + if not self.approving_role and not self.approving_user: + frappe.throw(_("Please enter Approving Role or Approving User")) + elif self.system_user and self.system_user == self.approving_user: + frappe.throw(_("Approving User cannot be same as user the rule is Applicable To")) + elif self.system_role and self.system_role == self.approving_role: + frappe.throw(_("Approving Role cannot be same as role the rule is Applicable To")) + elif self.transaction in [ + "Purchase Order", + "Purchase Receipt", + "Purchase Invoice", + "Stock Entry", + ] and self.based_on in [ + "Average Discount", + "Customerwise Discount", + "Itemwise Discount", + ]: + frappe.throw( + _("Cannot set authorization on basis of Discount for {0}").format(self.transaction) + ) + elif self.based_on == "Average Discount" and flt(self.value) > 100.00: + frappe.throw(_("Discount must be less than 100")) + elif self.based_on == "Customerwise Discount" and not self.master_name: + frappe.throw(_("Customer required for 'Customerwise Discount'")) else: - if self.transaction == "Appraisal": - self.based_on = "Not Applicable" + self.based_on = "Not Applicable" def validate(self): self.check_duplicate_entry() diff --git a/erpnext/hr/doctype/branch/README.md b/erpnext/setup/doctype/branch/README.md similarity index 100% rename from erpnext/hr/doctype/branch/README.md rename to erpnext/setup/doctype/branch/README.md diff --git a/erpnext/accounts/report/unpaid_expense_claim/__init__.py b/erpnext/setup/doctype/branch/__init__.py similarity index 100% rename from erpnext/accounts/report/unpaid_expense_claim/__init__.py rename to erpnext/setup/doctype/branch/__init__.py diff --git a/erpnext/hr/doctype/branch/branch.js b/erpnext/setup/doctype/branch/branch.js similarity index 100% rename from erpnext/hr/doctype/branch/branch.js rename to erpnext/setup/doctype/branch/branch.js diff --git a/erpnext/hr/doctype/employment_type/employment_type.json b/erpnext/setup/doctype/branch/branch.json similarity index 68% rename from erpnext/hr/doctype/employment_type/employment_type.json rename to erpnext/setup/doctype/branch/branch.json index 6b0b505c83..2aba5ddaa8 100644 --- a/erpnext/hr/doctype/employment_type/employment_type.json +++ b/erpnext/setup/doctype/branch/branch.json @@ -1,11 +1,10 @@ { "allow_copy": 0, - "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, - "autoname": "field:employee_type_name", + "autoname": "field:branch", "beta": 0, - "creation": "2013-01-10 16:34:14", + "creation": "2013-01-10 16:34:13", "custom": 0, "docstatus": 0, "doctype": "DocType", @@ -13,58 +12,52 @@ "editable_grid": 0, "fields": [ { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, - "fieldname": "employee_type_name", + "fieldname": "branch", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, "in_list_view": 1, - "in_standard_filter": 0, - "label": "Employment Type", + "label": "Branch", "length": 0, "no_copy": 0, - "oldfieldname": "employee_type_name", + "oldfieldname": "branch", "oldfieldtype": "Data", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, "report_hide": 0, "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, - "unique": 1 + "unique": 0 } ], - "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, - "icon": "fa fa-flag", + "icon": "fa fa-code-fork", "idx": 1, "image_view": 0, "in_create": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-08-29 06:37:02.041245", + "modified": "2016-07-25 05:24:26.534086", "modified_by": "Administrator", - "module": "HR", - "name": "Employment Type", + "module": "Setup", + "name": "Branch", "owner": "Administrator", "permissions": [ { "amend": 0, + "apply_user_permissions": 0, "cancel": 0, "create": 1, "delete": 1, @@ -84,13 +77,14 @@ }, { "amend": 0, + "apply_user_permissions": 0, "cancel": 0, "create": 1, "delete": 1, "email": 1, - "export": 1, + "export": 0, "if_owner": 0, - "import": 1, + "import": 0, "permlevel": 0, "print": 1, "read": 1, @@ -105,9 +99,5 @@ "quick_entry": 1, "read_only": 0, "read_only_onload": 0, - "show_name_in_global_search": 1, - "sort_order": "DESC", - "track_changes": 0, - "track_seen": 0, - "track_views": 0 + "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/hr/doctype/branch/branch.py b/erpnext/setup/doctype/branch/branch.py similarity index 100% rename from erpnext/hr/doctype/branch/branch.py rename to erpnext/setup/doctype/branch/branch.py diff --git a/erpnext/hr/doctype/branch/test_branch.py b/erpnext/setup/doctype/branch/test_branch.py similarity index 100% rename from erpnext/hr/doctype/branch/test_branch.py rename to erpnext/setup/doctype/branch/test_branch.py diff --git a/erpnext/hr/doctype/branch/test_records.json b/erpnext/setup/doctype/branch/test_records.json similarity index 100% rename from erpnext/hr/doctype/branch/test_records.json rename to erpnext/setup/doctype/branch/test_records.json diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js index 0de5b2d5a3..e50ce449e4 100644 --- a/erpnext/setup/doctype/company/company.js +++ b/erpnext/setup/doctype/company/company.js @@ -19,11 +19,6 @@ frappe.ui.form.on("Company", { }, setup: function(frm) { erpnext.company.setup_queries(frm); - frm.set_query("hra_component", function(){ - return { - filters: {"type": "Earning"} - } - }); frm.set_query("parent_company", function() { return { @@ -210,17 +205,15 @@ erpnext.company.setup_queries = function(frm) { ["default_payable_account", {"account_type": "Payable"}], ["default_expense_account", {"root_type": "Expense"}], ["default_income_account", {"root_type": "Income"}], - ["default_payroll_payable_account", {"root_type": "Liability"}], ["round_off_account", {"root_type": "Expense"}], ["write_off_account", {"root_type": "Expense"}], ["default_deferred_expense_account", {}], ["default_deferred_revenue_account", {}], - ["default_expense_claim_payable_account", {}], ["default_discount_account", {}], ["discount_allowed_account", {"root_type": "Expense"}], ["discount_received_account", {"root_type": "Income"}], - ["exchange_gain_loss_account", {"root_type": "Expense"}], - ["unrealized_exchange_gain_loss_account", {"root_type": "Expense"}], + ["exchange_gain_loss_account", {"root_type": ["in", ["Expense", "Income"]]}], + ["unrealized_exchange_gain_loss_account", {"root_type": ["in", ["Expense", "Income"]]}], ["accumulated_depreciation_account", {"root_type": "Asset", "account_type": "Accumulated Depreciation"}], ["depreciation_expense_account", {"root_type": "Expense", "account_type": "Depreciation"}], @@ -229,7 +222,6 @@ erpnext.company.setup_queries = function(frm) { ["cost_center", {}], ["round_off_cost_center", {}], ["depreciation_cost_center", {}], - ["default_employee_advance_account", {"root_type": "Asset"}], ["expenses_included_in_asset_valuation", {"account_type": "Expenses Included In Asset Valuation"}], ["capital_work_in_progress_account", {"account_type": "Capital Work in Progress"}], ["asset_received_but_not_billed", {"account_type": "Asset Received But Not Billed"}], diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index cc62a2ac73..f34ec56dc0 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -15,6 +15,7 @@ "default_currency", "country", "is_group", + "default_holiday_list", "cb0", "default_letter_head", "tax_id", @@ -48,12 +49,6 @@ "default_warehouse_for_sales_return", "credit_limit", "transactions_annual_history", - "hr_settings_section", - "default_holiday_list", - "default_expense_claim_payable_account", - "column_break_10", - "default_employee_advance_account", - "default_payroll_payable_account", "default_settings", "default_bank_account", "default_cash_account", @@ -239,10 +234,7 @@ "label": "Default Warehouse for Sales Return", "options": "Warehouse" }, - { - "fieldname": "column_break_10", - "fieldtype": "Column Break" - }, + { "fieldname": "country", "fieldtype": "Link", @@ -374,13 +366,6 @@ "oldfieldtype": "Link", "options": "Account" }, - { - "fieldname": "default_employee_advance_account", - "fieldtype": "Link", - "label": "Default Employee Advance Account", - "no_copy": 1, - "options": "Account" - }, { "depends_on": "eval:!doc.__islocal", "fieldname": "default_expense_account", @@ -417,24 +402,6 @@ "no_copy": 1, "options": "Account" }, - { - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_payroll_payable_account", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Default Payroll Payable Account", - "no_copy": 1, - "options": "Account" - }, - { - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_expense_claim_payable_account", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Default Expense Claim Payable Account", - "no_copy": 1, - "options": "Account" - }, { "depends_on": "eval:!doc.__islocal", "fieldname": "cost_center", @@ -701,11 +668,6 @@ "label": "Default Payment Discount Account", "options": "Account" }, - { - "fieldname": "hr_settings_section", - "fieldtype": "Section Break", - "label": "HR & Payroll Settings" - }, { "fieldname": "column_break_26", "fieldtype": "Column Break" @@ -747,7 +709,7 @@ "image_field": "company_logo", "is_tree": 1, "links": [], - "modified": "2022-04-27 10:33:16.826067", + "modified": "2022-06-30 18:03:18.701314", "modified_by": "Administrator", "module": "Setup", "name": "Company", diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 9bde6e2c47..dc698886a0 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -10,8 +10,9 @@ from frappe import _ from frappe.cache_manager import clear_defaults_cache from frappe.contacts.address_and_contact import load_address_and_contact from frappe.custom.doctype.property_setter.property_setter import make_property_setter +from frappe.desk.page.setup_wizard.setup_wizard import make_records from frappe.utils import cint, formatdate, get_timestamp, today -from frappe.utils.nestedset import NestedSet +from frappe.utils.nestedset import NestedSet, rebuild_tree from erpnext.accounts.doctype.account.account import get_account_currency from erpnext.setup.setup_wizard.operations.taxes_setup import setup_taxes_and_charges @@ -95,7 +96,6 @@ class Company(NestedSet): ["Stock Received But Not Billed Account", "stock_received_but_not_billed"], ["Stock Adjustment Account", "stock_adjustment_account"], ["Expense Included In Valuation Account", "expenses_included_in_valuation"], - ["Default Payroll Payable Account", "default_payroll_payable_account"], ] for account in accounts: @@ -150,9 +150,7 @@ class Company(NestedSet): self.create_default_tax_template() if not frappe.db.get_value("Department", {"company": self.name}): - from erpnext.setup.setup_wizard.operations.install_fixtures import install_post_company_fixtures - - install_post_company_fixtures(frappe._dict({"company_name": self.name})) + self.create_default_departments() if not frappe.local.flags.ignore_chart_of_accounts: self.set_default_accounts() @@ -224,6 +222,104 @@ class Company(NestedSet): ), ) + def create_default_departments(self): + records = [ + # Department + { + "doctype": "Department", + "department_name": _("All Departments"), + "is_group": 1, + "parent_department": "", + "__condition": lambda: not frappe.db.exists("Department", _("All Departments")), + }, + { + "doctype": "Department", + "department_name": _("Accounts"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Marketing"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Sales"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Purchase"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Operations"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Production"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Dispatch"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Customer Service"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Human Resources"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Management"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Quality Management"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Research & Development"), + "parent_department": _("All Departments"), + "company": self.name, + }, + { + "doctype": "Department", + "department_name": _("Legal"), + "parent_department": _("All Departments"), + "company": self.name, + }, + ] + + # Make root department with NSM updation + make_records(records[:1]) + + frappe.local.flags.ignore_update_nsm = True + make_records(records) + frappe.local.flags.ignore_update_nsm = False + rebuild_tree("Department", "parent_department") + def validate_coa_input(self): if self.create_chart_of_accounts_based_on == "Existing Company": self.chart_of_accounts = None @@ -325,20 +421,6 @@ class Company(NestedSet): if not self.default_payable_account: self.db_set("default_payable_account", self.default_payable_account) - if not self.default_payroll_payable_account: - payroll_payable_account = frappe.db.get_value( - "Account", {"account_name": _("Payroll Payable"), "company": self.name, "is_group": 0} - ) - - self.db_set("default_payroll_payable_account", payroll_payable_account) - - if not self.default_employee_advance_account: - employe_advance_account = frappe.db.get_value( - "Account", {"account_name": _("Employee Advances"), "company": self.name, "is_group": 0} - ) - - self.db_set("default_employee_advance_account", employe_advance_account) - if not self.write_off_account: write_off_acct = frappe.db.get_value( "Account", {"account_name": _("Write Off"), "company": self.name, "is_group": 0} @@ -464,7 +546,7 @@ class Company(NestedSet): # reset default company frappe.db.sql( - """update `tabSingles` set value="" + """update `tabSingles` set value='' where doctype='Global Defaults' and field='default_company' and value=%s""", self.name, @@ -472,7 +554,7 @@ class Company(NestedSet): # reset default company frappe.db.sql( - """update `tabSingles` set value="" + """update `tabSingles` set value='' where doctype='Chart of Accounts Importer' and field='company' and value=%s""", self.name, diff --git a/erpnext/hr/doctype/department/README.md b/erpnext/setup/doctype/department/README.md similarity index 100% rename from erpnext/hr/doctype/department/README.md rename to erpnext/setup/doctype/department/README.md diff --git a/erpnext/erpnext_integrations/data_migration_mapping/__init__.py b/erpnext/setup/doctype/department/__init__.py similarity index 100% rename from erpnext/erpnext_integrations/data_migration_mapping/__init__.py rename to erpnext/setup/doctype/department/__init__.py diff --git a/erpnext/hr/doctype/department/department.js b/erpnext/setup/doctype/department/department.js similarity index 70% rename from erpnext/hr/doctype/department/department.js rename to erpnext/setup/doctype/department/department.js index 46cfbdad56..322eea59bb 100644 --- a/erpnext/hr/doctype/department/department.js +++ b/erpnext/setup/doctype/department/department.js @@ -1,20 +1,11 @@ // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.ui.form.on('Department', { +frappe.ui.form.on("Department", { onload: function(frm) { - frm.set_query("parent_department", function(){ + frm.set_query("parent_department", function() { return {"filters": [["Department", "is_group", "=", 1]]}; }); - - frm.set_query("payroll_cost_center", function() { - return { - filters: { - "company": frm.doc.company, - "is_group": 0 - } - }; - }); }, refresh: function(frm) { // read-only for root department diff --git a/erpnext/hr/doctype/department/department.json b/erpnext/setup/doctype/department/department.json similarity index 62% rename from erpnext/hr/doctype/department/department.json rename to erpnext/setup/doctype/department/department.json index dcb6a742b7..5a16bae0f2 100644 --- a/erpnext/hr/doctype/department/department.json +++ b/erpnext/setup/doctype/department/department.json @@ -13,14 +13,6 @@ "company", "is_group", "disabled", - "section_break_4", - "payroll_cost_center", - "column_break_9", - "leave_block_list", - "approvers", - "leave_approvers", - "expense_approvers", - "shift_request_approver", "lft", "rgt", "old_parent" @@ -74,38 +66,6 @@ "show_days": 1, "show_seconds": 1 }, - { - "fieldname": "section_break_4", - "fieldtype": "Section Break", - "show_days": 1, - "show_seconds": 1 - }, - { - "description": "Days for which Holidays are blocked for this department.", - "fieldname": "leave_block_list", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Leave Block List", - "options": "Leave Block List", - "show_days": 1, - "show_seconds": 1 - }, - { - "fieldname": "leave_approvers", - "fieldtype": "Table", - "label": "Leave Approver", - "options": "Department Approver", - "show_days": 1, - "show_seconds": 1 - }, - { - "fieldname": "expense_approvers", - "fieldtype": "Table", - "label": "Expense Approver", - "options": "Department Approver", - "show_days": 1, - "show_seconds": 1 - }, { "fieldname": "lft", "fieldtype": "Int", @@ -141,45 +101,15 @@ "fieldtype": "Column Break", "show_days": 1, "show_seconds": 1 - }, - { - "fieldname": "payroll_cost_center", - "fieldtype": "Link", - "label": "Payroll Cost Center", - "options": "Cost Center", - "show_days": 1, - "show_seconds": 1 - }, - { - "fieldname": "column_break_9", - "fieldtype": "Column Break", - "show_days": 1, - "show_seconds": 1 - }, - { - "description": "The first Approver in the list will be set as the default Approver.", - "fieldname": "approvers", - "fieldtype": "Section Break", - "label": "Approvers", - "show_days": 1, - "show_seconds": 1 - }, - { - "fieldname": "shift_request_approver", - "fieldtype": "Table", - "label": "Shift Request Approver", - "options": "Department Approver", - "show_days": 1, - "show_seconds": 1 } ], "icon": "fa fa-sitemap", "idx": 1, "is_tree": 1, "links": [], - "modified": "2020-06-23 15:42:00.563272", + "modified": "2020-06-10 12:28:00.563272", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Department", "nsm_parent_field": "parent_department", "owner": "Administrator", diff --git a/erpnext/hr/doctype/department/department.py b/erpnext/setup/doctype/department/department.py similarity index 78% rename from erpnext/hr/doctype/department/department.py rename to erpnext/setup/doctype/department/department.py index 159fa02612..c4766ee6f8 100644 --- a/erpnext/hr/doctype/department/department.py +++ b/erpnext/setup/doctype/department/department.py @@ -52,33 +52,18 @@ def get_abbreviated_name(name, company): @frappe.whitelist() def get_children(doctype, parent=None, company=None, is_root=False): - condition = "" - var_dict = { - "name": get_root_of("Department"), - "parent": parent, - "company": company, - } - if company == parent: - condition = "name=%(name)s" - elif company: - condition = "parent_department=%(parent)s and company=%(company)s" - else: - condition = "parent_department = %(parent)s" + fields = ["name as value", "is_group as expandable"] + filters = {} - return frappe.db.sql( - """ - select - name as value, - is_group as expandable - from `tab{doctype}` - where - {condition} - order by name""".format( - doctype=doctype, condition=condition - ), - var_dict, - as_dict=1, - ) + if company == parent: + filters["name"] = get_root_of("Department") + elif company: + filters["parent_department"] = parent + filters["company"] = company + else: + filters["parent_department"] = parent + + return frappe.get_all(doctype, fields=fields, filters=filters, order_by="name") @frappe.whitelist() diff --git a/erpnext/hr/doctype/department/department_tree.js b/erpnext/setup/doctype/department/department_tree.js similarity index 78% rename from erpnext/hr/doctype/department/department_tree.js rename to erpnext/setup/doctype/department/department_tree.js index 5c7726de6a..9c1341b870 100644 --- a/erpnext/hr/doctype/department/department_tree.js +++ b/erpnext/setup/doctype/department/department_tree.js @@ -1,7 +1,7 @@ frappe.treeview_settings["Department"] = { ignore_fields:["parent_department"], - get_tree_nodes: 'erpnext.hr.doctype.department.department.get_children', - add_tree_node: 'erpnext.hr.doctype.department.department.add_node', + get_tree_nodes: 'erpnext.setup.doctype.department.department.get_children', + add_tree_node: 'erpnext.setup.doctype.department.department.add_node', filters: [ { fieldname: "company", diff --git a/erpnext/hr/doctype/department/test_department.py b/erpnext/setup/doctype/department/test_department.py similarity index 100% rename from erpnext/hr/doctype/department/test_department.py rename to erpnext/setup/doctype/department/test_department.py diff --git a/erpnext/hr/doctype/department/test_records.json b/erpnext/setup/doctype/department/test_records.json similarity index 100% rename from erpnext/hr/doctype/department/test_records.json rename to erpnext/setup/doctype/department/test_records.json diff --git a/erpnext/hr/doctype/designation/README.md b/erpnext/setup/doctype/designation/README.md similarity index 100% rename from erpnext/hr/doctype/designation/README.md rename to erpnext/setup/doctype/designation/README.md diff --git a/erpnext/hr/__init__.py b/erpnext/setup/doctype/designation/__init__.py similarity index 100% rename from erpnext/hr/__init__.py rename to erpnext/setup/doctype/designation/__init__.py diff --git a/erpnext/hr/doctype/designation/designation.js b/erpnext/setup/doctype/designation/designation.js similarity index 100% rename from erpnext/hr/doctype/designation/designation.js rename to erpnext/setup/doctype/designation/designation.js diff --git a/erpnext/setup/doctype/designation/designation.json b/erpnext/setup/doctype/designation/designation.json new file mode 100644 index 0000000000..2cbbb04ed9 --- /dev/null +++ b/erpnext/setup/doctype/designation/designation.json @@ -0,0 +1,62 @@ +{ + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:designation_name", + "creation": "2013-01-10 16:34:13", + "doctype": "DocType", + "document_type": "Setup", + "engine": "InnoDB", + "field_order": [ + "designation_name", + "description" + ], + "fields": [ + { + "fieldname": "designation_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Designation", + "oldfieldname": "designation_name", + "oldfieldtype": "Data", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "description", + "fieldtype": "Text", + "label": "Description" + } + ], + "icon": "fa fa-bookmark", + "idx": 1, + "links": [], + "modified": "2022-06-28 17:10:26.853753", + "modified_by": "Administrator", + "module": "Setup", + "name": "Designation", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "HR User", + "share": 1, + "write": 1 + }, + { + "read": 1, + "role": "Sales User" + } + ], + "quick_entry": 1, + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "ASC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/designation/designation.py b/erpnext/setup/doctype/designation/designation.py similarity index 100% rename from erpnext/hr/doctype/designation/designation.py rename to erpnext/setup/doctype/designation/designation.py diff --git a/erpnext/hr/doctype/designation/test_designation.py b/erpnext/setup/doctype/designation/test_designation.py similarity index 100% rename from erpnext/hr/doctype/designation/test_designation.py rename to erpnext/setup/doctype/designation/test_designation.py diff --git a/erpnext/hr/doctype/designation/test_records.json b/erpnext/setup/doctype/designation/test_records.json similarity index 100% rename from erpnext/hr/doctype/designation/test_records.json rename to erpnext/setup/doctype/designation/test_records.json diff --git a/erpnext/hr/doctype/__init__.py b/erpnext/setup/doctype/driver/__init__.py similarity index 100% rename from erpnext/hr/doctype/__init__.py rename to erpnext/setup/doctype/driver/__init__.py diff --git a/erpnext/hr/doctype/driver/driver.js b/erpnext/setup/doctype/driver/driver.js similarity index 100% rename from erpnext/hr/doctype/driver/driver.js rename to erpnext/setup/doctype/driver/driver.js diff --git a/erpnext/hr/doctype/driver/driver.json b/erpnext/setup/doctype/driver/driver.json similarity index 98% rename from erpnext/hr/doctype/driver/driver.json rename to erpnext/setup/doctype/driver/driver.json index 0a670c0601..8d426cc29a 100644 --- a/erpnext/hr/doctype/driver/driver.json +++ b/erpnext/setup/doctype/driver/driver.json @@ -118,9 +118,9 @@ } ], "icon": "fa fa-user", - "modified": "2019-07-18 16:29:14.151380", + "modified": "2022-06-28 10:29:14.151380", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Driver", "name_case": "Title Case", "owner": "Administrator", diff --git a/erpnext/hr/doctype/driver/driver.py b/erpnext/setup/doctype/driver/driver.py similarity index 100% rename from erpnext/hr/doctype/driver/driver.py rename to erpnext/setup/doctype/driver/driver.py diff --git a/erpnext/hr/doctype/driver/test_driver.py b/erpnext/setup/doctype/driver/test_driver.py similarity index 100% rename from erpnext/hr/doctype/driver/test_driver.py rename to erpnext/setup/doctype/driver/test_driver.py diff --git a/erpnext/hr/doctype/appointment_letter/__init__.py b/erpnext/setup/doctype/driving_license_category/__init__.py similarity index 100% rename from erpnext/hr/doctype/appointment_letter/__init__.py rename to erpnext/setup/doctype/driving_license_category/__init__.py diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.json b/erpnext/setup/doctype/driving_license_category/driving_license_category.json similarity index 93% rename from erpnext/hr/doctype/driving_license_category/driving_license_category.json rename to erpnext/setup/doctype/driving_license_category/driving_license_category.json index 8bc61a808a..1f0447c931 100644 --- a/erpnext/hr/doctype/driving_license_category/driving_license_category.json +++ b/erpnext/setup/doctype/driving_license_category/driving_license_category.json @@ -38,9 +38,9 @@ ], "istable": 1, "links": [], - "modified": "2019-12-12 14:40:55.209022", + "modified": "2022-06-27 10:40:55.209022", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Driving License Category", "owner": "Administrator", "permissions": [], diff --git a/erpnext/hr/doctype/driving_license_category/driving_license_category.py b/erpnext/setup/doctype/driving_license_category/driving_license_category.py similarity index 100% rename from erpnext/hr/doctype/driving_license_category/driving_license_category.py rename to erpnext/setup/doctype/driving_license_category/driving_license_category.py diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py index cdfea7764f..4fc20e6103 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.py +++ b/erpnext/setup/doctype/email_digest/email_digest.py @@ -198,7 +198,7 @@ class EmailDigest(Document): todo_list = frappe.db.sql( """select * - from `tabToDo` where (owner=%s or assigned_by=%s) and status="Open" + from `tabToDo` where (owner=%s or assigned_by=%s) and status='Open' order by field(priority, 'High', 'Medium', 'Low') asc, date asc limit 20""", (user_id, user_id), as_dict=True, @@ -854,7 +854,7 @@ class EmailDigest(Document): sql_po = """select {fields} from `tabPurchase Order Item` left join `tabPurchase Order` on `tabPurchase Order`.name = `tabPurchase Order Item`.parent - where status<>'Closed' and `tabPurchase Order Item`.docstatus=1 and curdate() > `tabPurchase Order Item`.schedule_date + where status<>'Closed' and `tabPurchase Order Item`.docstatus=1 and CURRENT_DATE > `tabPurchase Order Item`.schedule_date and received_qty < qty order by `tabPurchase Order Item`.parent DESC, `tabPurchase Order Item`.schedule_date DESC""".format( fields=fields_po @@ -862,7 +862,7 @@ class EmailDigest(Document): sql_poi = """select {fields} from `tabPurchase Order Item` left join `tabPurchase Order` on `tabPurchase Order`.name = `tabPurchase Order Item`.parent - where status<>'Closed' and `tabPurchase Order Item`.docstatus=1 and curdate() > `tabPurchase Order Item`.schedule_date + where status<>'Closed' and `tabPurchase Order Item`.docstatus=1 and CURRENT_DATE > `tabPurchase Order Item`.schedule_date and received_qty < qty order by `tabPurchase Order Item`.idx""".format( fields=fields_poi ) diff --git a/erpnext/hr/doctype/employee/README.md b/erpnext/setup/doctype/employee/README.md similarity index 100% rename from erpnext/hr/doctype/employee/README.md rename to erpnext/setup/doctype/employee/README.md diff --git a/erpnext/hr/doctype/appointment_letter_content/__init__.py b/erpnext/setup/doctype/employee/__init__.py similarity index 100% rename from erpnext/hr/doctype/appointment_letter_content/__init__.py rename to erpnext/setup/doctype/employee/__init__.py diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/setup/doctype/employee/employee.js similarity index 67% rename from erpnext/hr/doctype/employee/employee.js rename to erpnext/setup/doctype/employee/employee.js index 8c73e9c9c5..39a215f383 100755 --- a/erpnext/hr/doctype/employee/employee.js +++ b/erpnext/setup/doctype/employee/employee.js @@ -1,8 +1,8 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -frappe.provide("erpnext.hr"); -erpnext.hr.EmployeeController = class EmployeeController extends frappe.ui.form.Controller { +frappe.provide("erpnext.setup"); +erpnext.setup.EmployeeController = class EmployeeController extends frappe.ui.form.Controller { setup() { this.frm.fields_dict.user_id.get_query = function(doc, cdt, cdn) { return { @@ -18,15 +18,6 @@ erpnext.hr.EmployeeController = class EmployeeController extends frappe.ui.form. erpnext.toggle_naming_series(); } - date_of_birth() { - return cur_frm.call({ - method: "get_retirement_date", - args: { - date_of_birth: this.frm.doc.date_of_birth - } - }); - } - salutation() { if (this.frm.doc.salutation) { this.frm.set_value("gender", { @@ -38,25 +29,7 @@ erpnext.hr.EmployeeController = class EmployeeController extends frappe.ui.form. }; -frappe.ui.form.on('Employee', { - setup: function (frm) { - frm.set_query("leave_policy", function() { - return { - "filters": { - "docstatus": 1 - } - }; - }); - - frm.set_query("payroll_cost_center", function() { - return { - filters: { - "company": frm.doc.company, - "is_group": 0 - } - }; - }); - }, +frappe.ui.form.on("Employee", { onload: function (frm) { frm.set_query("department", function() { return { @@ -103,7 +76,7 @@ frappe.ui.form.on('Employee', { frappe.throw(__("Please enter Preferred Contact Email")); } frappe.call({ - method: "erpnext.hr.doctype.employee.employee.create_user", + method: "erpnext.setup.doctype.employee.employee.create_user", args: { employee: frm.doc.name, email: frm.doc.prefered_email @@ -115,7 +88,7 @@ frappe.ui.form.on('Employee', { } }); -cur_frm.cscript = new erpnext.hr.EmployeeController({ +cur_frm.cscript = new erpnext.setup.EmployeeController({ frm: cur_frm }); @@ -129,7 +102,7 @@ frappe.tour['Employee'] = [ { fieldname: "company", title: "Company", - description: __("Select a Company this Employee belongs to. Other HR features like Payroll. Expense Claims and Leaves for this Employee will be created for a given company only.") + description: __("Select a Company this Employee belongs to.") }, { fieldname: "date_of_birth", @@ -141,19 +114,9 @@ frappe.tour['Employee'] = [ title: "Date of Joining", description: __("Select Date of joining. It will have impact on the first salary calculation, Leave allocation on pro-rata bases.") }, - { - fieldname: "holiday_list", - title: "Holiday List", - description: __("Select a default Holiday List for this Employee. The days listed in Holiday List will not be counted in Leave Application.") - }, { fieldname: "reports_to", title: "Reports To", description: __("Here, you can select a senior of this Employee. Based on this, Organization Chart will be populated.") }, - { - fieldname: "leave_approver", - title: "Leave Approver", - description: __("Select Leave Approver for an employee. The user one who will look after his/her Leave application") - }, ]; diff --git a/erpnext/hr/doctype/employee/employee.json b/erpnext/setup/doctype/employee/employee.json similarity index 88% rename from erpnext/hr/doctype/employee/employee.json rename to erpnext/setup/doctype/employee/employee.json index a3638e1a65..7a806d5906 100644 --- a/erpnext/hr/doctype/employee/employee.json +++ b/erpnext/setup/doctype/employee/employee.json @@ -18,7 +18,6 @@ "last_name", "salutation", "employee_name", - "employment_type", "image", "column_break1", "company", @@ -37,7 +36,6 @@ "create_user", "create_user_permission", "employment_details", - "job_applicant", "scheduled_confirmation_date", "final_confirmation_date", "col_break_22", @@ -49,29 +47,18 @@ "designation", "reports_to", "column_break_31", - "grade", "branch", - "approvers_section", - "expense_approver", - "leave_approver", - "column_break_45", - "shift_request_approver", "attendance_and_leave_details", "attendance_device_id", "column_break_44", "holiday_list", - "default_shift", "salary_information", "salary_currency", "ctc", - "salary_mode", "payroll_cost_center", "column_break_52", "bank_name", "bank_ac_no", - "health_insurance_section", - "health_insurance_provider", - "health_insurance_no", "contact_details", "cell_number", "prefered_email", @@ -221,15 +208,6 @@ "oldfieldname": "employee_number", "oldfieldtype": "Data" }, - { - "fieldname": "employment_type", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "label": "Employment Type", - "oldfieldname": "employment_type", - "oldfieldtype": "Link", - "options": "Employment Type" - }, { "fieldname": "gender", "fieldtype": "Link", @@ -314,12 +292,6 @@ "fieldtype": "Section Break", "label": "Joining Details" }, - { - "fieldname": "job_applicant", - "fieldtype": "Link", - "label": "Job Applicant", - "options": "Job Applicant" - }, { "fieldname": "scheduled_confirmation_date", "fieldtype": "Date", @@ -363,7 +335,7 @@ "collapsible": 1, "fieldname": "job_profile", "fieldtype": "Section Break", - "label": "Department and Grade" + "label": "Department" }, { "fieldname": "department", @@ -398,12 +370,6 @@ "fieldname": "column_break_31", "fieldtype": "Column Break" }, - { - "fieldname": "grade", - "fieldtype": "Link", - "label": "Grade", - "options": "Employee Grade" - }, { "fieldname": "branch", "fieldtype": "Link", @@ -454,24 +420,6 @@ "oldfieldname": "bank_ac_no", "oldfieldtype": "Data" }, - { - "collapsible": 1, - "fieldname": "health_insurance_section", - "fieldtype": "Section Break", - "label": "Health Insurance" - }, - { - "fieldname": "health_insurance_provider", - "fieldtype": "Link", - "label": "Health Insurance Provider", - "options": "Employee Health Insurance" - }, - { - "depends_on": "eval:doc.health_insurance_provider", - "fieldname": "health_insurance_no", - "fieldtype": "Data", - "label": "Health Insurance No" - }, { "collapsible": 1, "fieldname": "contact_details", @@ -761,55 +709,14 @@ "fieldname": "column_break_44", "fieldtype": "Column Break" }, - { - "fieldname": "default_shift", - "fieldtype": "Link", - "label": "Default Shift", - "options": "Shift Type" - }, - { - "fieldname": "leave_approver", - "fieldtype": "Link", - "label": "Leave Approver", - "options": "User" - }, { "fieldname": "column_break_19", "fieldtype": "Column Break" }, - { - "fetch_from": "department.payroll_cost_center", - "fetch_if_empty": 1, - "fieldname": "payroll_cost_center", - "fieldtype": "Link", - "label": "Payroll Cost Center", - "options": "Cost Center" - }, { "fieldname": "column_break_52", "fieldtype": "Column Break" }, - { - "fieldname": "expense_approver", - "fieldtype": "Link", - "label": "Expense Approver", - "options": "User" - }, - { - "fieldname": "approvers_section", - "fieldtype": "Section Break", - "label": "Approvers" - }, - { - "fieldname": "column_break_45", - "fieldtype": "Column Break" - }, - { - "fieldname": "shift_request_approver", - "fieldtype": "Link", - "label": "Shift Request Approver", - "options": "User" - }, { "fieldname": "salary_currency", "fieldtype": "Link", @@ -827,9 +734,9 @@ "idx": 24, "image_field": "image", "links": [], - "modified": "2022-04-22 16:21:55.811983", + "modified": "2022-06-27 01:29:32.952091", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Employee", "name_case": "Title Case", "naming_rule": "By \"Naming Series\" field", @@ -872,7 +779,6 @@ ], "search_fields": "employee_name", "show_name_in_global_search": 1, - "show_title_field_in_link": 1, "sort_field": "modified", "sort_order": "DESC", "states": [], diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/setup/doctype/employee/employee.py similarity index 83% rename from erpnext/hr/doctype/employee/employee.py rename to erpnext/setup/doctype/employee/employee.py index d6a911dde4..13a6f20db2 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/setup/doctype/employee/employee.py @@ -10,7 +10,7 @@ from frappe.permissions import ( remove_user_permission, set_user_permission_if_allowed, ) -from frappe.utils import add_years, cstr, getdate, today, validate_email_address +from frappe.utils import cstr, getdate, today, validate_email_address from frappe.utils.nestedset import NestedSet from erpnext.utilities.transaction_base import delete_events @@ -28,18 +28,7 @@ class Employee(NestedSet): nsm_parent_field = "reports_to" def autoname(self): - naming_method = frappe.db.get_value("HR Settings", None, "emp_created_by") - if not naming_method: - throw(_("Please setup Employee Naming System in Human Resource > HR Settings")) - else: - if naming_method == "Naming Series": - set_name_by_naming_series(self) - elif naming_method == "Employee Number": - self.name = self.employee_number - elif naming_method == "Full Name": - self.set_employee_name() - self.name = self.employee_name - + set_name_by_naming_series(self) self.employee = self.name def validate(self): @@ -54,8 +43,6 @@ class Employee(NestedSet): self.validate_status() self.validate_reports_to() self.validate_preferred_email() - if self.job_applicant: - self.validate_onboarding_process() if self.user_id: self.validate_user_details() @@ -94,7 +81,6 @@ class Employee(NestedSet): self.update_user() self.update_user_permissions() self.reset_employee_emails_cache() - self.update_approver_role() def update_user_permissions(self): if not self.create_user_permission: @@ -155,17 +141,6 @@ class Employee(NestedSet): user.save() - def update_approver_role(self): - if self.leave_approver: - user = frappe.get_doc("User", self.leave_approver) - user.flags.ignore_permissions = True - user.add_roles("Leave Approver") - - if self.expense_approver: - user = frappe.get_doc("User", self.expense_approver) - user.flags.ignore_permissions = True - user.add_roles("Expense Approver") - def validate_date(self): if self.date_of_birth and getdate(self.date_of_birth) > getdate(today()): throw(_("Date of Birth cannot be greater than today.")) @@ -242,14 +217,19 @@ class Employee(NestedSet): frappe.throw(_("User {0} is disabled").format(self.user_id), EmployeeUserDisabledError) def validate_duplicate_user_id(self): - employee = frappe.db.sql_list( - """select name from `tabEmployee` where - user_id=%s and status='Active' and name!=%s""", - (self.user_id, self.name), - ) + Employee = frappe.qb.DocType("Employee") + employee = ( + frappe.qb.from_(Employee) + .select(Employee.name) + .where( + (Employee.user_id == self.user_id) + & (Employee.status == "Active") + & (Employee.name != self.name) + ) + ).run() if employee: throw( - _("User {0} is already assigned to Employee {1}").format(self.user_id, employee[0]), + _("User {0} is already assigned to Employee {1}").format(self.user_id, employee[0][0]), frappe.DuplicateEntryError, ) @@ -260,30 +240,11 @@ class Employee(NestedSet): def on_trash(self): self.update_nsm_model() delete_events(self.doctype, self.name) - if frappe.db.exists("Employee Transfer", {"new_employee_id": self.name, "docstatus": 1}): - emp_transfer = frappe.get_doc( - "Employee Transfer", {"new_employee_id": self.name, "docstatus": 1} - ) - emp_transfer.db_set("new_employee_id", "") def validate_preferred_email(self): if self.prefered_contact_email and not self.get(scrub(self.prefered_contact_email)): frappe.msgprint(_("Please enter {0}").format(self.prefered_contact_email)) - def validate_onboarding_process(self): - employee_onboarding = frappe.get_all( - "Employee Onboarding", - filters={ - "job_applicant": self.job_applicant, - "docstatus": 1, - "boarding_status": ("!=", "Completed"), - }, - ) - if employee_onboarding: - doc = frappe.get_doc("Employee Onboarding", employee_onboarding[0].name) - doc.validate_employee_creation() - doc.db_set("employee", self.name) - def reset_employee_emails_cache(self): prev_doc = self.get_doc_before_save() or {} cell_number = cstr(self.get("cell_number")) @@ -293,35 +254,6 @@ class Employee(NestedSet): frappe.cache().hdel("employees_with_number", prev_number) -def get_timeline_data(doctype, name): - """Return timeline for attendance""" - return dict( - frappe.db.sql( - """select unix_timestamp(attendance_date), count(*) - from `tabAttendance` where employee=%s - and attendance_date > date_sub(curdate(), interval 1 year) - and status in ('Present', 'Half Day') - group by attendance_date""", - name, - ) - ) - - -@frappe.whitelist() -def get_retirement_date(date_of_birth=None): - ret = {} - if date_of_birth: - try: - retirement_age = int(frappe.db.get_single_value("HR Settings", "retirement_age") or 60) - dt = add_years(getdate(date_of_birth), retirement_age) - ret = {"date_of_retirement": dt.strftime("%Y-%m-%d")} - except ValueError: - # invalid date - ret = {} - - return ret - - def validate_employee_role(doc, method): # called via User hook if "Employee" in [d.role for d in doc.get("roles")]: @@ -352,7 +284,7 @@ def get_holiday_list_for_employee(employee, raise_exception=True): holiday_list, company = frappe.db.get_value("Employee", employee, ["holiday_list", "company"]) else: holiday_list = "" - company = frappe.db.get_value("Global Defaults", None, "default_company") + company = frappe.db.get_single_value("Global Defaults", "default_company") if not holiday_list: holiday_list = frappe.get_cached_value("Company", company, "default_holiday_list") diff --git a/erpnext/hr/doctype/employee/employee_list.js b/erpnext/setup/doctype/employee/employee_list.js similarity index 100% rename from erpnext/hr/doctype/employee/employee_list.js rename to erpnext/setup/doctype/employee/employee_list.js diff --git a/erpnext/hr/doctype/employee/employee_tree.js b/erpnext/setup/doctype/employee/employee_tree.js similarity index 91% rename from erpnext/hr/doctype/employee/employee_tree.js rename to erpnext/setup/doctype/employee/employee_tree.js index 7d6a70013d..8f52cff8c2 100644 --- a/erpnext/hr/doctype/employee/employee_tree.js +++ b/erpnext/setup/doctype/employee/employee_tree.js @@ -1,5 +1,5 @@ frappe.treeview_settings['Employee'] = { - get_tree_nodes: "erpnext.hr.doctype.employee.employee.get_children", + get_tree_nodes: "erpnext.setup.doctype.employee.employee.get_children", filters: [ { fieldname: "company", diff --git a/erpnext/hr/doctype/employee/test_employee.py b/erpnext/setup/doctype/employee/test_employee.py similarity index 62% rename from erpnext/hr/doctype/employee/test_employee.py rename to erpnext/setup/doctype/employee/test_employee.py index 50894b6171..071c336326 100644 --- a/erpnext/hr/doctype/employee/test_employee.py +++ b/erpnext/setup/doctype/employee/test_employee.py @@ -7,7 +7,7 @@ import frappe import frappe.utils import erpnext -from erpnext.hr.doctype.employee.employee import InactiveEmployeeStatusError +from erpnext.setup.doctype.employee.employee import InactiveEmployeeStatusError test_records = frappe.get_test_records("Employee") @@ -25,35 +25,6 @@ class TestEmployee(unittest.TestCase): employee1_doc.status = "Left" self.assertRaises(InactiveEmployeeStatusError, employee1_doc.save) - def test_employee_status_inactive(self): - from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list - from erpnext.payroll.doctype.salary_structure.salary_structure import make_salary_slip - from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure - - employee = make_employee("test_employee_status@company.com") - employee_doc = frappe.get_doc("Employee", employee) - employee_doc.status = "Inactive" - employee_doc.save() - employee_doc.reload() - - make_holiday_list() - frappe.db.set_value( - "Company", employee_doc.company, "default_holiday_list", "Salary Slip Test Holiday List" - ) - - frappe.db.sql( - """delete from `tabSalary Structure` where name='Test Inactive Employee Salary Slip'""" - ) - salary_structure = make_salary_structure( - "Test Inactive Employee Salary Slip", - "Monthly", - employee=employee_doc.name, - company=employee_doc.company, - ) - salary_slip = make_salary_slip(salary_structure.name, employee=employee_doc.name) - - self.assertRaises(InactiveEmployeeStatusError, salary_slip.save) - def tearDown(self): frappe.db.rollback() diff --git a/erpnext/hr/doctype/employee/test_records.json b/erpnext/setup/doctype/employee/test_records.json similarity index 100% rename from erpnext/hr/doctype/employee/test_records.json rename to erpnext/setup/doctype/employee/test_records.json diff --git a/erpnext/hr/doctype/employee_education/README.md b/erpnext/setup/doctype/employee_education/README.md similarity index 100% rename from erpnext/hr/doctype/employee_education/README.md rename to erpnext/setup/doctype/employee_education/README.md diff --git a/erpnext/hr/doctype/appointment_letter_template/__init__.py b/erpnext/setup/doctype/employee_education/__init__.py similarity index 100% rename from erpnext/hr/doctype/appointment_letter_template/__init__.py rename to erpnext/setup/doctype/employee_education/__init__.py diff --git a/erpnext/setup/doctype/employee_education/employee_education.json b/erpnext/setup/doctype/employee_education/employee_education.json new file mode 100644 index 0000000000..0df09a82da --- /dev/null +++ b/erpnext/setup/doctype/employee_education/employee_education.json @@ -0,0 +1,192 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2013-02-22 01:27:45", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "school_univ", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "School/University", + "length": 0, + "no_copy": 0, + "oldfieldname": "school_univ", + "oldfieldtype": "Small Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "qualification", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Qualification", + "length": 0, + "no_copy": 0, + "oldfieldname": "qualification", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "100px", + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "100px" + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "level", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Level", + "length": 0, + "no_copy": 0, + "oldfieldname": "level", + "oldfieldtype": "Select", + "options": "Graduate\nPost Graduate\nUnder Graduate", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "year_of_passing", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Year of Passing", + "length": 0, + "no_copy": 0, + "oldfieldname": "year_of_passing", + "oldfieldtype": "Int", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "class_per", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Class / Percentage", + "length": 0, + "no_copy": 0, + "oldfieldname": "class_per", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "maj_opt_subj", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Major/Optional Subjects", + "length": 0, + "no_copy": 0, + "oldfieldname": "maj_opt_subj", + "oldfieldtype": "Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 1, + "image_view": 0, + "in_create": 0, + + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-07-11 03:27:59.995464", + "modified_by": "Administrator", + "module": "Setup", + "name": "Employee Education", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_education/employee_education.py b/erpnext/setup/doctype/employee_education/employee_education.py similarity index 100% rename from erpnext/hr/doctype/employee_education/employee_education.py rename to erpnext/setup/doctype/employee_education/employee_education.py diff --git a/erpnext/hr/doctype/employee_external_work_history/README.md b/erpnext/setup/doctype/employee_external_work_history/README.md similarity index 100% rename from erpnext/hr/doctype/employee_external_work_history/README.md rename to erpnext/setup/doctype/employee_external_work_history/README.md diff --git a/erpnext/hr/doctype/appraisal/__init__.py b/erpnext/setup/doctype/employee_external_work_history/__init__.py similarity index 100% rename from erpnext/hr/doctype/appraisal/__init__.py rename to erpnext/setup/doctype/employee_external_work_history/__init__.py diff --git a/erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.json b/erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.json new file mode 100644 index 0000000000..df79e004ef --- /dev/null +++ b/erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.json @@ -0,0 +1,190 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2013-02-22 01:27:45", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Company", + "length": 0, + "no_copy": 0, + "oldfieldname": "company_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "designation", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Designation", + "length": 0, + "no_copy": 0, + "oldfieldname": "designation", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "salary", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Salary", + "length": 0, + "no_copy": 0, + "oldfieldname": "salary", + "oldfieldtype": "Currency", + "options": "Company:company:default_currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "address", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Address", + "length": 0, + "no_copy": 0, + "oldfieldname": "address", + "oldfieldtype": "Small Text", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "contact", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Contact", + "length": 0, + "no_copy": 0, + "oldfieldname": "contact", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "total_experience", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Total Experience", + "length": 0, + "no_copy": 0, + "oldfieldname": "total_experience", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 1, + "image_view": 0, + "in_create": 0, + + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-07-11 03:28:00.088980", + "modified_by": "Administrator", + "module": "Setup", + "name": "Employee External Work History", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.py b/erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.py similarity index 100% rename from erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.py rename to erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.py diff --git a/erpnext/hr/doctype/appraisal_goal/__init__.py b/erpnext/setup/doctype/employee_group/__init__.py similarity index 100% rename from erpnext/hr/doctype/appraisal_goal/__init__.py rename to erpnext/setup/doctype/employee_group/__init__.py diff --git a/erpnext/hr/doctype/employee_group/employee_group.js b/erpnext/setup/doctype/employee_group/employee_group.js similarity index 100% rename from erpnext/hr/doctype/employee_group/employee_group.js rename to erpnext/setup/doctype/employee_group/employee_group.js diff --git a/erpnext/hr/doctype/employee_group/employee_group.json b/erpnext/setup/doctype/employee_group/employee_group.json similarity index 99% rename from erpnext/hr/doctype/employee_group/employee_group.json rename to erpnext/setup/doctype/employee_group/employee_group.json index 1a66fab3fc..9c091a2cfe 100644 --- a/erpnext/hr/doctype/employee_group/employee_group.json +++ b/erpnext/setup/doctype/employee_group/employee_group.json @@ -125,7 +125,7 @@ "max_attachments": 0, "modified": "2018-12-27 19:52:34.791538", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Employee Group", "name_case": "", "owner": "Administrator", diff --git a/erpnext/hr/doctype/employee_group/employee_group.py b/erpnext/setup/doctype/employee_group/employee_group.py similarity index 100% rename from erpnext/hr/doctype/employee_group/employee_group.py rename to erpnext/setup/doctype/employee_group/employee_group.py diff --git a/erpnext/hr/doctype/employee_group/test_employee_group.py b/erpnext/setup/doctype/employee_group/test_employee_group.py similarity index 91% rename from erpnext/hr/doctype/employee_group/test_employee_group.py rename to erpnext/setup/doctype/employee_group/test_employee_group.py index 3922f54f33..4a1979232f 100644 --- a/erpnext/hr/doctype/employee_group/test_employee_group.py +++ b/erpnext/setup/doctype/employee_group/test_employee_group.py @@ -5,7 +5,7 @@ import unittest import frappe -from erpnext.hr.doctype.employee.test_employee import make_employee +from erpnext.setup.doctype.employee.test_employee import make_employee class TestEmployeeGroup(unittest.TestCase): diff --git a/erpnext/hr/doctype/appraisal_template/__init__.py b/erpnext/setup/doctype/employee_group_table/__init__.py similarity index 100% rename from erpnext/hr/doctype/appraisal_template/__init__.py rename to erpnext/setup/doctype/employee_group_table/__init__.py diff --git a/erpnext/hr/doctype/employee_group_table/employee_group_table.json b/erpnext/setup/doctype/employee_group_table/employee_group_table.json similarity index 97% rename from erpnext/hr/doctype/employee_group_table/employee_group_table.json rename to erpnext/setup/doctype/employee_group_table/employee_group_table.json index 54eb8c6da9..c448d8d6fe 100644 --- a/erpnext/hr/doctype/employee_group_table/employee_group_table.json +++ b/erpnext/setup/doctype/employee_group_table/employee_group_table.json @@ -35,7 +35,7 @@ "istable": 1, "modified": "2022-02-13 19:44:21.302938", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Employee Group Table", "owner": "Administrator", "permissions": [], diff --git a/erpnext/hr/doctype/employee_group_table/employee_group_table.py b/erpnext/setup/doctype/employee_group_table/employee_group_table.py similarity index 100% rename from erpnext/hr/doctype/employee_group_table/employee_group_table.py rename to erpnext/setup/doctype/employee_group_table/employee_group_table.py diff --git a/erpnext/hr/doctype/employee_internal_work_history/README.md b/erpnext/setup/doctype/employee_internal_work_history/README.md similarity index 100% rename from erpnext/hr/doctype/employee_internal_work_history/README.md rename to erpnext/setup/doctype/employee_internal_work_history/README.md diff --git a/erpnext/hr/doctype/appraisal_template_goal/__init__.py b/erpnext/setup/doctype/employee_internal_work_history/__init__.py similarity index 100% rename from erpnext/hr/doctype/appraisal_template_goal/__init__.py rename to erpnext/setup/doctype/employee_internal_work_history/__init__.py diff --git a/erpnext/setup/doctype/employee_internal_work_history/employee_internal_work_history.json b/erpnext/setup/doctype/employee_internal_work_history/employee_internal_work_history.json new file mode 100644 index 0000000000..da6329ac14 --- /dev/null +++ b/erpnext/setup/doctype/employee_internal_work_history/employee_internal_work_history.json @@ -0,0 +1,168 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2013-02-22 01:27:45", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "editable_grid": 1, + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "branch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Branch", + "length": 0, + "no_copy": 0, + "oldfieldname": "branch", + "oldfieldtype": "Select", + "options": "Branch", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Department", + "length": 0, + "no_copy": 0, + "oldfieldname": "department", + "oldfieldtype": "Select", + "options": "Department", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "designation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Designation", + "length": 0, + "no_copy": 0, + "oldfieldname": "designation", + "oldfieldtype": "Select", + "options": "Designation", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "from_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "From Date", + "length": 0, + "no_copy": 0, + "oldfieldname": "from_date", + "oldfieldtype": "Date", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "fieldname": "to_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "To Date", + "length": 0, + "no_copy": 0, + "oldfieldname": "to_date", + "oldfieldtype": "Date", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 1, + "image_view": 0, + "in_create": 0, + + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2016-07-11 03:28:00.195130", + "modified_by": "Administrator", + "module": "Setup", + "name": "Employee Internal Work History", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.py b/erpnext/setup/doctype/employee_internal_work_history/employee_internal_work_history.py similarity index 100% rename from erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.py rename to erpnext/setup/doctype/employee_internal_work_history/employee_internal_work_history.py diff --git a/erpnext/hr/doctype/holiday/README.md b/erpnext/setup/doctype/holiday/README.md similarity index 100% rename from erpnext/hr/doctype/holiday/README.md rename to erpnext/setup/doctype/holiday/README.md diff --git a/erpnext/hr/doctype/attendance/__init__.py b/erpnext/setup/doctype/holiday/__init__.py similarity index 100% rename from erpnext/hr/doctype/attendance/__init__.py rename to erpnext/setup/doctype/holiday/__init__.py diff --git a/erpnext/hr/doctype/holiday/holiday.json b/erpnext/setup/doctype/holiday/holiday.json similarity index 98% rename from erpnext/hr/doctype/holiday/holiday.json rename to erpnext/setup/doctype/holiday/holiday.json index 6bd0ab0dcb..3117190f18 100644 --- a/erpnext/hr/doctype/holiday/holiday.json +++ b/erpnext/setup/doctype/holiday/holiday.json @@ -51,7 +51,7 @@ "links": [], "modified": "2020-04-18 19:03:23.507845", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Holiday", "owner": "Administrator", "permissions": [], diff --git a/erpnext/hr/doctype/holiday/holiday.py b/erpnext/setup/doctype/holiday/holiday.py similarity index 100% rename from erpnext/hr/doctype/holiday/holiday.py rename to erpnext/setup/doctype/holiday/holiday.py diff --git a/erpnext/hr/doctype/holiday_list/README.md b/erpnext/setup/doctype/holiday_list/README.md similarity index 100% rename from erpnext/hr/doctype/holiday_list/README.md rename to erpnext/setup/doctype/holiday_list/README.md diff --git a/erpnext/hr/doctype/attendance_request/__init__.py b/erpnext/setup/doctype/holiday_list/__init__.py similarity index 100% rename from erpnext/hr/doctype/attendance_request/__init__.py rename to erpnext/setup/doctype/holiday_list/__init__.py diff --git a/erpnext/hr/doctype/holiday_list/holiday_list.js b/erpnext/setup/doctype/holiday_list/holiday_list.js similarity index 100% rename from erpnext/hr/doctype/holiday_list/holiday_list.js rename to erpnext/setup/doctype/holiday_list/holiday_list.js diff --git a/erpnext/hr/doctype/holiday_list/holiday_list.json b/erpnext/setup/doctype/holiday_list/holiday_list.json similarity index 99% rename from erpnext/hr/doctype/holiday_list/holiday_list.json rename to erpnext/setup/doctype/holiday_list/holiday_list.json index df3da5d8b2..4bbe6a6cb2 100644 --- a/erpnext/hr/doctype/holiday_list/holiday_list.json +++ b/erpnext/setup/doctype/holiday_list/holiday_list.json @@ -444,7 +444,7 @@ "max_attachments": 0, "modified": "2018-07-03 07:22:46.474096", "modified_by": "Administrator", - "module": "HR", + "module": "Setup", "name": "Holiday List", "owner": "Administrator", "permissions": [ diff --git a/erpnext/hr/doctype/holiday_list/holiday_list.py b/erpnext/setup/doctype/holiday_list/holiday_list.py similarity index 100% rename from erpnext/hr/doctype/holiday_list/holiday_list.py rename to erpnext/setup/doctype/holiday_list/holiday_list.py diff --git a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js b/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js similarity index 85% rename from erpnext/hr/doctype/holiday_list/holiday_list_calendar.js rename to erpnext/setup/doctype/holiday_list/holiday_list_calendar.js index 4e188add3e..bb6d831546 100644 --- a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js +++ b/erpnext/setup/doctype/holiday_list/holiday_list_calendar.js @@ -10,7 +10,7 @@ frappe.views.calendar["Holiday List"] = { "allDay": "allDay" }, order_by: `from_date`, - get_events_method: "erpnext.hr.doctype.holiday_list.holiday_list.get_events", + get_events_method: "erpnext.setup.doctype.holiday_list.holiday_list.get_events", filters: [ { 'fieldtype': 'Link', diff --git a/erpnext/hr/doctype/holiday_list/holiday_list_dashboard.py b/erpnext/setup/doctype/holiday_list/holiday_list_dashboard.py similarity index 59% rename from erpnext/hr/doctype/holiday_list/holiday_list_dashboard.py rename to erpnext/setup/doctype/holiday_list/holiday_list_dashboard.py index 0cbf09461b..f483edcae8 100644 --- a/erpnext/hr/doctype/holiday_list/holiday_list_dashboard.py +++ b/erpnext/setup/doctype/holiday_list/holiday_list_dashboard.py @@ -3,13 +3,11 @@ def get_data(): "fieldname": "holiday_list", "non_standard_fieldnames": { "Company": "default_holiday_list", - "Leave Period": "optional_holiday_list", }, "transactions": [ { "items": ["Company", "Employee", "Workstation"], }, - {"items": ["Leave Period", "Shift Type"]}, - {"items": ["Service Level", "Service Level Agreement"]}, + {"items": ["Service Level Agreement"]}, ], } diff --git a/erpnext/hr/doctype/holiday_list/test_holiday_list.py b/erpnext/setup/doctype/holiday_list/test_holiday_list.py similarity index 100% rename from erpnext/hr/doctype/holiday_list/test_holiday_list.py rename to erpnext/setup/doctype/holiday_list/test_holiday_list.py diff --git a/erpnext/hr/doctype/holiday_list/test_records.json b/erpnext/setup/doctype/holiday_list/test_records.json similarity index 100% rename from erpnext/hr/doctype/holiday_list/test_records.json rename to erpnext/setup/doctype/holiday_list/test_records.json diff --git a/erpnext/setup/doctype/naming_series/README.md b/erpnext/setup/doctype/naming_series/README.md deleted file mode 100644 index 5a9b8ca861..0000000000 --- a/erpnext/setup/doctype/naming_series/README.md +++ /dev/null @@ -1 +0,0 @@ -Tool to set numbering (naming) series for various DocTypes. \ No newline at end of file diff --git a/erpnext/setup/doctype/naming_series/__init__.py b/erpnext/setup/doctype/naming_series/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/setup/doctype/naming_series/naming_series.js b/erpnext/setup/doctype/naming_series/naming_series.js deleted file mode 100644 index 861b2b3983..0000000000 --- a/erpnext/setup/doctype/naming_series/naming_series.js +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - - -frappe.ui.form.on("Naming Series", { - onload: function(frm) { - frm.events.get_doc_and_prefix(frm); - }, - - refresh: function(frm) { - frm.disable_save(); - }, - - get_doc_and_prefix: function(frm) { - frappe.call({ - method: "get_transactions", - doc: frm.doc, - callback: function(r) { - frm.set_df_property("select_doc_for_series", "options", r.message.transactions); - frm.set_df_property("prefix", "options", r.message.prefixes); - } - }); - }, - - select_doc_for_series: function(frm) { - frm.set_value("user_must_always_select", 0); - frappe.call({ - method: "get_options", - doc: frm.doc, - callback: function(r) { - frm.set_value("set_options", r.message); - if(r.message && r.message.split('\n')[0]=='') - frm.set_value('user_must_always_select', 1); - frm.refresh(); - } - }); - }, - - prefix: function(frm) { - frappe.call({ - method: "get_current", - doc: frm.doc, - callback: function(r) { - frm.refresh_field("current_value"); - } - }); - }, - - update: function(frm) { - frappe.call({ - method: "update_series", - doc: frm.doc, - callback: function(r) { - frm.events.get_doc_and_prefix(frm); - } - }); - } -}); diff --git a/erpnext/setup/doctype/naming_series/naming_series.json b/erpnext/setup/doctype/naming_series/naming_series.json deleted file mode 100644 index f936dcf3c9..0000000000 --- a/erpnext/setup/doctype/naming_series/naming_series.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2013-01-25 11:35:08", - "custom": 0, - "description": "Set prefix for numbering series on your transactions", - "docstatus": 0, - "doctype": "DocType", - "editable_grid": 0, - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Set prefix for numbering series on your transactions", - "fieldname": "setup_series", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Setup Series", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "select_doc_for_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Select Transaction", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "select_doc_for_series", - "fieldname": "help_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Help HTML", - "length": 0, - "no_copy": 0, - "options": "
    \nEdit list of Series in the box below. Rules:\n
      \n
    • Each Series Prefix on a new line.
    • \n
    • Allowed special characters are \"/\" and \"-\"
    • \n
    • Optionally, set the number of digits in the series using dot (.) followed by hashes (#). For example, \".####\" means that the series will have four digits. Default is five digits.
    • \n
    \nExamples:
    \nINV-
    \nINV-10-
    \nINVK-
    \nINV-.####
    \n
    ", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "select_doc_for_series", - "fieldname": "set_options", - "fieldtype": "Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Series List for this Transaction", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "select_doc_for_series", - "description": "Check this if you want to force the user to select a series before saving. There will be no default if you check this.", - "fieldname": "user_must_always_select", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "User must always select", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "select_doc_for_series", - "fieldname": "update", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Update", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Change the starting / current sequence number of an existing series.", - "fieldname": "update_series", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Update Series", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "prefix", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Prefix", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "This is the number of the last created transaction with this prefix", - "fieldname": "current_value", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Current Value", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "update_series_start", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Update Series Number", - "length": 0, - "no_copy": 0, - "options": "update_series_start", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 1, - "icon": "fa fa-sort-by-order", - "idx": 1, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2017-08-17 03:41:37.685910", - "modified_by": "Administrator", - "module": "Setup", - "name": "Naming Series", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 1, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py deleted file mode 100644 index 4fba776cb5..0000000000 --- a/erpnext/setup/doctype/naming_series/naming_series.py +++ /dev/null @@ -1,274 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: GNU General Public License v3. See license.txt - - -import frappe -from frappe import _, msgprint, throw -from frappe.core.doctype.doctype.doctype import validate_series -from frappe.model.document import Document -from frappe.model.naming import parse_naming_series -from frappe.permissions import get_doctypes_with_read -from frappe.utils import cint, cstr - - -class NamingSeriesNotSetError(frappe.ValidationError): - pass - - -class NamingSeries(Document): - @frappe.whitelist() - def get_transactions(self, arg=None): - doctypes = list( - set( - frappe.db.sql_list( - """select parent - from `tabDocField` df where fieldname='naming_series'""" - ) - + frappe.db.sql_list( - """select dt from `tabCustom Field` - where fieldname='naming_series'""" - ) - ) - ) - - doctypes = list(set(get_doctypes_with_read()).intersection(set(doctypes))) - prefixes = "" - for d in doctypes: - options = "" - try: - options = self.get_options(d) - except frappe.DoesNotExistError: - frappe.msgprint(_("Unable to find DocType {0}").format(d)) - # frappe.pass_does_not_exist_error() - continue - - if options: - prefixes = prefixes + "\n" + options - prefixes.replace("\n\n", "\n") - prefixes = prefixes.split("\n") - - custom_prefixes = frappe.get_all( - "DocType", - fields=["autoname"], - filters={ - "name": ("not in", doctypes), - "autoname": ("like", "%.#%"), - "module": ("not in", ["Core"]), - }, - ) - if custom_prefixes: - prefixes = prefixes + [d.autoname.rsplit(".", 1)[0] for d in custom_prefixes] - - prefixes = "\n".join(sorted(prefixes)) - - return {"transactions": "\n".join([""] + sorted(doctypes)), "prefixes": prefixes} - - def scrub_options_list(self, ol): - options = list(filter(lambda x: x, [cstr(n).strip() for n in ol])) - return options - - @frappe.whitelist() - def update_series(self, arg=None): - """update series list""" - self.validate_series_set() - self.check_duplicate() - series_list = self.set_options.split("\n") - - # set in doctype - self.set_series_for(self.select_doc_for_series, series_list) - - # create series - map(self.insert_series, [d.split(".")[0] for d in series_list if d.strip()]) - - msgprint(_("Series Updated")) - - return self.get_transactions() - - def validate_series_set(self): - if self.select_doc_for_series and not self.set_options: - frappe.throw(_("Please set the series to be used.")) - - def set_series_for(self, doctype, ol): - options = self.scrub_options_list(ol) - - # validate names - for i in options: - self.validate_series_name(i) - - if options and self.user_must_always_select: - options = [""] + options - - default = options[0] if options else "" - - # update in property setter - prop_dict = {"options": "\n".join(options), "default": default} - - for prop in prop_dict: - ps_exists = frappe.db.get_value( - "Property Setter", {"field_name": "naming_series", "doc_type": doctype, "property": prop} - ) - - if ps_exists: - ps = frappe.get_doc("Property Setter", ps_exists) - ps.value = prop_dict[prop] - ps.save() - else: - ps = frappe.get_doc( - { - "doctype": "Property Setter", - "doctype_or_field": "DocField", - "doc_type": doctype, - "field_name": "naming_series", - "property": prop, - "value": prop_dict[prop], - "property_type": "Text", - "__islocal": 1, - } - ) - ps.save() - - self.set_options = "\n".join(options) - - frappe.clear_cache(doctype=doctype) - - def check_duplicate(self): - parent = list( - set( - frappe.db.sql_list( - """select dt.name - from `tabDocField` df, `tabDocType` dt - where dt.name = df.parent and df.fieldname='naming_series' and dt.name != %s""", - self.select_doc_for_series, - ) - + frappe.db.sql_list( - """select dt.name - from `tabCustom Field` df, `tabDocType` dt - where dt.name = df.dt and df.fieldname='naming_series' and dt.name != %s""", - self.select_doc_for_series, - ) - ) - ) - sr = [[frappe.get_meta(p).get_field("naming_series").options, p] for p in parent] - dt = frappe.get_doc("DocType", self.select_doc_for_series) - options = self.scrub_options_list(self.set_options.split("\n")) - for series in options: - validate_series(dt, series) - for i in sr: - if i[0]: - existing_series = [d.split(".")[0] for d in i[0].split("\n")] - if series.split(".")[0] in existing_series: - frappe.throw(_("Series {0} already used in {1}").format(series, i[1])) - - def validate_series_name(self, n): - import re - - if not re.match(r"^[\w\- \/.#{}]+$", n, re.UNICODE): - throw( - _('Special Characters except "-", "#", ".", "/", "{" and "}" not allowed in naming series') - ) - - @frappe.whitelist() - def get_options(self, arg=None): - if frappe.get_meta(arg or self.select_doc_for_series).get_field("naming_series"): - return frappe.get_meta(arg or self.select_doc_for_series).get_field("naming_series").options - - @frappe.whitelist() - def get_current(self, arg=None): - """get series current""" - if self.prefix: - prefix = self.parse_naming_series() - self.current_value = frappe.db.get_value("Series", prefix, "current", order_by="name") - - def insert_series(self, series): - """insert series if missing""" - if frappe.db.get_value("Series", series, "name", order_by="name") == None: - frappe.db.sql("insert into tabSeries (name, current) values (%s, 0)", (series)) - - @frappe.whitelist() - def update_series_start(self): - if self.prefix: - prefix = self.parse_naming_series() - self.insert_series(prefix) - frappe.db.sql( - "update `tabSeries` set current = %s where name = %s", (cint(self.current_value), prefix) - ) - msgprint(_("Series Updated Successfully")) - else: - msgprint(_("Please select prefix first")) - - def parse_naming_series(self): - parts = self.prefix.split(".") - - # Remove ### from the end of series - if parts[-1] == "#" * len(parts[-1]): - del parts[-1] - - prefix = parse_naming_series(parts) - return prefix - - -def set_by_naming_series( - doctype, fieldname, naming_series, hide_name_field=True, make_mandatory=1 -): - from frappe.custom.doctype.property_setter.property_setter import make_property_setter - - if naming_series: - make_property_setter( - doctype, "naming_series", "hidden", 0, "Check", validate_fields_for_doctype=False - ) - make_property_setter( - doctype, "naming_series", "reqd", make_mandatory, "Check", validate_fields_for_doctype=False - ) - - # set values for mandatory - try: - frappe.db.sql( - """update `tab{doctype}` set naming_series={s} where - ifnull(naming_series, '')=''""".format( - doctype=doctype, s="%s" - ), - get_default_naming_series(doctype), - ) - except NamingSeriesNotSetError: - pass - - if hide_name_field: - make_property_setter(doctype, fieldname, "reqd", 0, "Check", validate_fields_for_doctype=False) - make_property_setter( - doctype, fieldname, "hidden", 1, "Check", validate_fields_for_doctype=False - ) - else: - make_property_setter( - doctype, "naming_series", "reqd", 0, "Check", validate_fields_for_doctype=False - ) - make_property_setter( - doctype, "naming_series", "hidden", 1, "Check", validate_fields_for_doctype=False - ) - - if hide_name_field: - make_property_setter( - doctype, fieldname, "hidden", 0, "Check", validate_fields_for_doctype=False - ) - make_property_setter(doctype, fieldname, "reqd", 1, "Check", validate_fields_for_doctype=False) - - # set values for mandatory - frappe.db.sql( - """update `tab{doctype}` set `{fieldname}`=`name` where - ifnull({fieldname}, '')=''""".format( - doctype=doctype, fieldname=fieldname - ) - ) - - -def get_default_naming_series(doctype): - naming_series = frappe.get_meta(doctype).get_field("naming_series").options or "" - naming_series = naming_series.split("\n") - out = naming_series[0] or (naming_series[1] if len(naming_series) > 1 else None) - - if not out: - frappe.throw( - _("Please set Naming Series for {0} via Setup > Settings > Naming Series").format(doctype), - NamingSeriesNotSetError, - ) - else: - return out diff --git a/erpnext/setup/doctype/party_type/party_type.py b/erpnext/setup/doctype/party_type/party_type.py index d07ab08450..cf7cba8452 100644 --- a/erpnext/setup/doctype/party_type/party_type.py +++ b/erpnext/setup/doctype/party_type/party_type.py @@ -21,7 +21,7 @@ def get_party_type(doctype, txt, searchfield, start, page_len, filters): return frappe.db.sql( """select name from `tabParty Type` where `{key}` LIKE %(txt)s {cond} - order by name limit %(start)s, %(page_len)s""".format( + order by name limit %(page_len)s offset %(start)s""".format( key=searchfield, cond=cond ), {"txt": "%" + txt + "%", "start": start, "page_len": page_len}, diff --git a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json index 28d1d16a05..f14b243512 100644 --- a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json +++ b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json @@ -14,7 +14,6 @@ "applicable_modules_section", "selling", "buying", - "hr", "section_break_7", "terms", "terms_and_conditions_help" @@ -69,12 +68,6 @@ "fieldtype": "Check", "label": "Buying" }, - { - "default": "1", - "fieldname": "hr", - "fieldtype": "Check", - "label": "HR" - }, { "fieldname": "section_break_7", "fieldtype": "Section Break" @@ -83,7 +76,7 @@ "icon": "icon-legal", "idx": 1, "links": [], - "modified": "2020-06-16 22:54:38.094844", + "modified": "2022-06-16 15:07:38.094844", "modified_by": "Administrator", "module": "Setup", "name": "Terms and Conditions", diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py index 78b3939012..c18a4b2214 100644 --- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py +++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py @@ -42,7 +42,7 @@ class TransactionDeletionRecord(Document): def delete_bins(self): frappe.db.sql( - """delete from tabBin where warehouse in + """delete from `tabBin` where warehouse in (select name from tabWarehouse where company=%s)""", self.company, ) @@ -64,7 +64,7 @@ class TransactionDeletionRecord(Document): addresses = ["%s" % frappe.db.escape(addr) for addr in addresses] frappe.db.sql( - """delete from tabAddress where name in ({addresses}) and + """delete from `tabAddress` where name in ({addresses}) and name not in (select distinct dl1.parent from `tabDynamic Link` dl1 inner join `tabDynamic Link` dl2 on dl1.parent=dl2.parent and dl1.link_doctype<>dl2.link_doctype)""".format( @@ -80,7 +80,7 @@ class TransactionDeletionRecord(Document): ) frappe.db.sql( - """update tabCustomer set lead_name=NULL where lead_name in ({leads})""".format( + """update `tabCustomer` set lead_name=NULL where lead_name in ({leads})""".format( leads=",".join(leads) ) ) @@ -178,7 +178,7 @@ class TransactionDeletionRecord(Document): else: last = 0 - frappe.db.sql("""update tabSeries set current = %s where name=%s""", (last, prefix)) + frappe.db.sql("""update `tabSeries` set current = %s where name=%s""", (last, prefix)) def delete_version_log(self, doctype, company_fieldname): frappe.db.sql( @@ -222,6 +222,5 @@ def get_doctypes_to_be_ignored(): "Item Default", "Customer", "Supplier", - "GST Account", ] return doctypes_to_be_ignored_list diff --git a/erpnext/hr/doctype/branch/__init__.py b/erpnext/setup/doctype/vehicle/__init__.py similarity index 100% rename from erpnext/hr/doctype/branch/__init__.py rename to erpnext/setup/doctype/vehicle/__init__.py diff --git a/erpnext/hr/doctype/vehicle/test_vehicle.py b/erpnext/setup/doctype/vehicle/test_vehicle.py similarity index 100% rename from erpnext/hr/doctype/vehicle/test_vehicle.py rename to erpnext/setup/doctype/vehicle/test_vehicle.py diff --git a/erpnext/hr/doctype/vehicle/vehicle.js b/erpnext/setup/doctype/vehicle/vehicle.js similarity index 100% rename from erpnext/hr/doctype/vehicle/vehicle.js rename to erpnext/setup/doctype/vehicle/vehicle.js diff --git a/erpnext/setup/doctype/vehicle/vehicle.json b/erpnext/setup/doctype/vehicle/vehicle.json new file mode 100644 index 0000000000..ed803a763a --- /dev/null +++ b/erpnext/setup/doctype/vehicle/vehicle.json @@ -0,0 +1,875 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:license_plate", + "beta": 0, + "creation": "2016-09-03 03:33:27.680331", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "license_plate", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "License Plate", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 1 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "make", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Make", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "model", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Model", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "vehicle_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "last_odometer", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Odometer Value (Last)", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "acquisition_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Acquisition Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "location", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Location", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "chassis_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Chassis No", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "vehicle_value", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Vehicle Value", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 1, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 1, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "insurance_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Insurance Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "insurance_company", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Insurance Company", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "policy_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Policy No", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_15", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "start_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Start Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "end_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "End Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "additional_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Additional Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fuel_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Fuel Type", + "length": 0, + "no_copy": 0, + "options": "Petrol\nDiesel\nNatural Gas\nElectric", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Fuel UOM", + "length": 0, + "no_copy": 0, + "options": "UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "carbon_check_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Last Carbon Check", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_21", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "color", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Color", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "wheels", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Wheels", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "doors", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Doors", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Vehicle", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2022-06-27 14:48:30.813359", + "modified_by": "Administrator", + "module": "Setup", + "name": "Vehicle", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Fleet Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "search_fields": "license_plate,location,model", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/vehicle/vehicle.py b/erpnext/setup/doctype/vehicle/vehicle.py similarity index 65% rename from erpnext/hr/doctype/vehicle/vehicle.py rename to erpnext/setup/doctype/vehicle/vehicle.py index 22c14c3727..6a1b75ca0b 100644 --- a/erpnext/hr/doctype/vehicle/vehicle.py +++ b/erpnext/setup/doctype/vehicle/vehicle.py @@ -14,16 +14,3 @@ class Vehicle(Document): frappe.throw(_("Insurance Start date should be less than Insurance End date")) if getdate(self.carbon_check_date) > getdate(): frappe.throw(_("Last carbon check date cannot be a future date")) - - -def get_timeline_data(doctype, name): - """Return timeline for vehicle log""" - return dict( - frappe.db.sql( - """select unix_timestamp(date), count(*) - from `tabVehicle Log` where license_plate=%s - and date > date_sub(curdate(), interval 1 year) - group by date""", - name, - ) - ) diff --git a/erpnext/hr/doctype/vehicle/vehicle_dashboard.py b/erpnext/setup/doctype/vehicle/vehicle_dashboard.py similarity index 57% rename from erpnext/hr/doctype/vehicle/vehicle_dashboard.py rename to erpnext/setup/doctype/vehicle/vehicle_dashboard.py index 758dfbd60a..9b11a2bb05 100644 --- a/erpnext/hr/doctype/vehicle/vehicle_dashboard.py +++ b/erpnext/setup/doctype/vehicle/vehicle_dashboard.py @@ -1,12 +1,9 @@ -from frappe import _ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt def get_data(): return { - "heatmap": True, - "heatmap_message": _( - "This is based on logs against this Vehicle. See timeline below for details" - ), "fieldname": "license_plate", "non_standard_fieldnames": {"Delivery Trip": "vehicle"}, "transactions": [{"items": ["Vehicle Log"]}, {"items": ["Delivery Trip"]}], diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 8dae23db77..7d7e6b5e07 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -6,7 +6,6 @@ import frappe from frappe import _ from frappe.custom.doctype.custom_field.custom_field import create_custom_field from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to -from frappe.installer import update_site_config from frappe.utils import cint from erpnext.accounts.doctype.cash_flow_mapper.default_cash_flow_mapper import DEFAULT_MAPPERS @@ -29,7 +28,6 @@ def after_install(): add_company_to_session_defaults() add_standard_navbar_items() add_app_name() - add_non_standard_user_types() frappe.db.commit() @@ -44,7 +42,6 @@ def set_single_defaults(): for dt in ( "Accounts Settings", "Print Settings", - "HR Settings", "Buying Settings", "Selling Settings", "Stock Settings", @@ -201,104 +198,3 @@ def add_standard_navbar_items(): def add_app_name(): frappe.db.set_value("System Settings", None, "app_name", "ERPNext") - - -def add_non_standard_user_types(): - user_types = get_user_types_data() - - user_type_limit = {} - for user_type, data in user_types.items(): - user_type_limit.setdefault(frappe.scrub(user_type), 20) - - update_site_config("user_type_doctype_limit", user_type_limit) - - for user_type, data in user_types.items(): - create_custom_role(data) - create_user_type(user_type, data) - - -def get_user_types_data(): - return { - "Employee Self Service": { - "role": "Employee Self Service", - "apply_user_permission_on": "Employee", - "user_id_field": "user_id", - "doctypes": { - # masters - "Holiday List": ["read"], - "Employee": ["read", "write"], - # payroll - "Salary Slip": ["read"], - "Employee Benefit Application": ["read", "write", "create", "delete"], - # expenses - "Expense Claim": ["read", "write", "create", "delete"], - "Employee Advance": ["read", "write", "create", "delete"], - # leave and attendance - "Leave Application": ["read", "write", "create", "delete"], - "Attendance Request": ["read", "write", "create", "delete"], - "Compensatory Leave Request": ["read", "write", "create", "delete"], - # tax - "Employee Tax Exemption Declaration": ["read", "write", "create", "delete"], - "Employee Tax Exemption Proof Submission": ["read", "write", "create", "delete"], - # projects - "Timesheet": ["read", "write", "create", "delete", "submit", "cancel", "amend"], - # trainings - "Training Program": ["read"], - "Training Feedback": ["read", "write", "create", "delete", "submit", "cancel", "amend"], - # shifts - "Shift Request": ["read", "write", "create", "delete", "submit", "cancel", "amend"], - # misc - "Employee Grievance": ["read", "write", "create", "delete"], - "Employee Referral": ["read", "write", "create", "delete"], - "Travel Request": ["read", "write", "create", "delete"], - }, - } - } - - -def create_custom_role(data): - if data.get("role") and not frappe.db.exists("Role", data.get("role")): - frappe.get_doc( - {"doctype": "Role", "role_name": data.get("role"), "desk_access": 1, "is_custom": 1} - ).insert(ignore_permissions=True) - - -def create_user_type(user_type, data): - if frappe.db.exists("User Type", user_type): - doc = frappe.get_cached_doc("User Type", user_type) - doc.user_doctypes = [] - else: - doc = frappe.new_doc("User Type") - doc.update( - { - "name": user_type, - "role": data.get("role"), - "user_id_field": data.get("user_id_field"), - "apply_user_permission_on": data.get("apply_user_permission_on"), - } - ) - - create_role_permissions_for_doctype(doc, data) - doc.save(ignore_permissions=True) - - -def create_role_permissions_for_doctype(doc, data): - for doctype, perms in data.get("doctypes").items(): - args = {"document_type": doctype} - for perm in perms: - args[perm] = 1 - - doc.append("user_doctypes", args) - - -def update_select_perm_after_install(): - if not frappe.flags.update_select_perm_after_migrate: - return - - frappe.flags.ignore_select_perm = False - for row in frappe.get_all("User Type", filters={"is_standard": 0}): - print("Updating user type :- ", row.name) - doc = frappe.get_doc("User Type", row.name) - doc.save() - - frappe.flags.update_select_perm_after_migrate = False diff --git a/erpnext/setup/module_onboarding/home/home.json b/erpnext/setup/module_onboarding/home/home.json index 1b2dbc6fea..f02fc454c0 100644 --- a/erpnext/setup/module_onboarding/home/home.json +++ b/erpnext/setup/module_onboarding/home/home.json @@ -25,7 +25,7 @@ "documentation_url": "https://docs.erpnext.com/docs/v13/user/manual/en/setting-up/company-setup", "idx": 0, "is_complete": 0, - "modified": "2021-12-15 14:23:52.460913", + "modified": "2022-06-07 14:31:00.575193", "modified_by": "Administrator", "module": "Setup", "name": "Home", diff --git a/erpnext/setup/onboarding_step/data_import/data_import.json b/erpnext/setup/onboarding_step/data_import/data_import.json index 48741dca01..4999a368d3 100644 --- a/erpnext/setup/onboarding_step/data_import/data_import.json +++ b/erpnext/setup/onboarding_step/data_import/data_import.json @@ -2,14 +2,14 @@ "action": "Watch Video", "action_label": "Learn more about data migration", "creation": "2021-05-19 05:29:16.809610", - "description": "# Import Data from Spreadsheet\n\nIn ERPNext, you can easily migrate your historical data using spreadsheets. You can use it for migrating not just masters (like Customer, Supplier, Items), but also for transactions like (outstanding invoices, opening stock and accounting entries, etc). If you are migrating from [Tally](https://tallysolutions.com/) or [Quickbooks](https://quickbooks.intuit.com/in/), we got special migration tools for you.", + "description": "# Import Data from Spreadsheet\n\nIn ERPNext, you can easily migrate your historical data using spreadsheets. You can use it for migrating not just masters (like Customer, Supplier, Items), but also for transactions like (outstanding invoices, opening stock and accounting entries, etc).", "docstatus": 0, "doctype": "Onboarding Step", "idx": 0, "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2021-12-15 13:10:57.346422", + "modified": "2022-06-07 14:28:51.390813", "modified_by": "Administrator", "name": "Data import", "owner": "Administrator", diff --git a/erpnext/setup/onboarding_step/navigation_help/navigation_help.json b/erpnext/setup/onboarding_step/navigation_help/navigation_help.json index 388853df79..cf07968bc7 100644 --- a/erpnext/setup/onboarding_step/navigation_help/navigation_help.json +++ b/erpnext/setup/onboarding_step/navigation_help/navigation_help.json @@ -9,7 +9,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2021-12-15 14:20:55.441678", + "modified": "2022-06-07 14:28:00.901082", "modified_by": "Administrator", "name": "Navigation Help", "owner": "Administrator", diff --git a/erpnext/setup/setup_wizard/data/country_wise_tax.json b/erpnext/setup/setup_wizard/data/country_wise_tax.json index 91e8eff89f..98817253a4 100644 --- a/erpnext/setup/setup_wizard/data/country_wise_tax.json +++ b/erpnext/setup/setup_wizard/data/country_wise_tax.json @@ -1163,481 +1163,6 @@ } }, - "India": { - "tax_categories": [ - { - "title": "In-State", - "is_inter_state": 0, - "gst_state": "" - }, - { - "title": "Out-State", - "is_inter_state": 1, - "gst_state": "" - }, - { - "title": "Reverse Charge In-State", - "is_inter_state": 0, - "is_reverse_charge": 1, - "gst_state": "" - }, - { - "title": "Reverse Charge Out-State", - "is_inter_state": 1, - "is_reverse_charge": 1, - "gst_state": "" - }, - { - "title": "Registered Composition", - "is_inter_state": 0, - "gst_state": "" - } - ], - "chart_of_accounts": { - "*": { - "item_tax_templates": [ - { - "title": "GST 18%", - "taxes": [ - { - "tax_type": { - "account_name": "Output Tax SGST", - "tax_rate": 9.00 - } - }, - { - "tax_type": { - "account_name": "Output Tax CGST", - "tax_rate": 9.00 - } - }, - { - "tax_type": { - "account_name": "Output Tax IGST", - "tax_rate": 18.00 - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST", - "tax_rate": 9.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST", - "tax_rate": 9.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST", - "tax_rate": 18.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST RCM", - "tax_rate": 9.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST RCM", - "tax_rate": 9.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST RCM", - "tax_rate": 18.00, - "root_type": "Asset" - } - } - ] - }, - { - "title": "GST 5%", - "taxes": [ - { - "tax_type": { - "account_name": "Output Tax SGST", - "tax_rate": 2.5 - } - }, - { - "tax_type": { - "account_name": "Output Tax CGST", - "tax_rate": 2.5 - } - }, - { - "tax_type": { - "account_name": "Output Tax IGST", - "tax_rate": 5.0 - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST", - "tax_rate": 2.5, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST", - "tax_rate": 2.5, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST", - "tax_rate": 5.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST RCM", - "tax_rate": 2.50, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST RCM", - "tax_rate": 2.50, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST RCM", - "tax_rate": 5.00, - "root_type": "Asset" - } - } - ] - }, - { - "title": "GST 12%", - "taxes": [ - { - "tax_type": { - "account_name": "Output Tax SGST", - "tax_rate": 6.0 - } - }, - { - "tax_type": { - "account_name": "Output Tax CGST", - "tax_rate": 6.0 - } - }, - { - "tax_type": { - "account_name": "Output Tax IGST", - "tax_rate": 12.0 - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST", - "tax_rate": 6.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST", - "tax_rate": 6.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST", - "tax_rate": 12.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST RCM", - "tax_rate": 6.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST RCM", - "tax_rate": 6.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST RCM", - "tax_rate": 12.00, - "root_type": "Asset" - } - } - ] - }, - { - "title": "GST 28%", - "taxes": [ - { - "tax_type": { - "account_name": "Output Tax SGST", - "tax_rate": 14.0 - } - }, - { - "tax_type": { - "account_name": "Output Tax CGST", - "tax_rate": 14.0 - } - }, - { - "tax_type": { - "account_name": "Output Tax IGST", - "tax_rate": 28.0 - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST", - "tax_rate": 14.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST", - "tax_rate": 14.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST", - "tax_rate": 28.0, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax SGST RCM", - "tax_rate": 14.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax CGST RCM", - "tax_rate": 14.00, - "root_type": "Asset" - } - }, - { - "tax_type": { - "account_name": "Input Tax IGST RCM", - "tax_rate": 28.00, - "root_type": "Asset" - } - } - ] - }, - { - "title": "VAT 5%", - "taxes": [ - { - "tax_type": { - "account_name": "VAT 5%", - "tax_rate": 5.00 - } - } - ] - }, - { - "title": "VAT 4%", - "taxes": [ - { - "tax_type": { - "account_name": "VAT 4%", - "tax_rate": 4.00 - } - } - ] - }, - { - "title": "VAT 14%", - "taxes": [ - { - "tax_type": { - "account_name": "VAT 14%", - "tax_rate": 14.00 - } - } - ] - } - ], - "sales_tax_templates": [ - { - "title": "Output GST In-state", - "taxes": [ - { - "account_head": { - "account_name": "Output Tax SGST", - "tax_rate": 9.00, - "account_type": "Tax" - } - }, - { - "account_head": { - "account_name": "Output Tax CGST", - "tax_rate": 9.00, - "account_type": "Tax" - } - } - ], - "tax_category": "In-State" - }, - { - "title": "Output GST Out-state", - "taxes": [ - { - "account_head": { - "account_name": "Output Tax IGST", - "tax_rate": 18.00, - "account_type": "Tax" - } - } - ], - "tax_category": "Out-State" - } - ], - "purchase_tax_templates": [ - { - "title": "Input GST In-state", - "taxes": [ - { - "account_head": { - "account_name": "Input Tax SGST", - "tax_rate": 9.00, - "root_type": "Asset", - "account_type": "Tax" - } - }, - { - "account_head": { - "account_name": "Input Tax CGST", - "tax_rate": 9.00, - "root_type": "Asset", - "account_type": "Tax" - } - } - ], - "tax_category": "In-State" - }, - { - "title": "Input GST Out-state", - "taxes": [ - { - "account_head": { - "account_name": "Input Tax IGST", - "tax_rate": 18.00, - "root_type": "Asset", - "account_type": "Tax" - } - } - ], - "tax_category": "Out-State" - }, - { - "title": "Input GST RCM In-state", - "taxes": [ - { - "account_head": { - "account_name": "Input Tax SGST RCM", - "tax_rate": 9.00, - "root_type": "Asset", - "account_type": "Tax" - } - }, - { - "account_head": { - "account_name": "Input Tax CGST RCM", - "tax_rate": 9.00, - "root_type": "Asset", - "account_type": "Tax" - } - } - ], - "tax_category": "Reverse Charge In-State" - }, - { - "title": "Input GST RCM Out-state", - "taxes": [ - { - "account_head": { - "account_name": "Input Tax IGST RCM", - "tax_rate": 18.00, - "root_type": "Asset", - "account_type": "Tax" - } - } - ], - "tax_category": "Reverse Charge Out-State" - } - ], - "*": [ - { - "title": "VAT 5%", - "taxes": [ - { - "account_head": { - "account_name": "VAT 5%", - "tax_rate": 5.00 - } - } - ] - }, - { - "title": "VAT 4%", - "taxes": [ - { - "account_head": { - "account_name": "VAT 4%", - "tax_rate": 4.00 - } - } - ] - }, - { - "title": "VAT 14%", - "taxes": [ - { - "account_head": { - "account_name": "VAT 14%", - "tax_rate": 14.00 - } - } - ] - } - ] - } - } - }, - "Indonesia": { "Indonesia Tax": { "account_name": "VAT", diff --git a/erpnext/setup/setup_wizard/operations/defaults_setup.py b/erpnext/setup/setup_wizard/operations/defaults_setup.py index ea0779864d..eed8f73cb4 100644 --- a/erpnext/setup/setup_wizard/operations/defaults_setup.py +++ b/erpnext/setup/setup_wizard/operations/defaults_setup.py @@ -6,6 +6,7 @@ from frappe import _ from frappe.utils import cstr, getdate +# nosemgrep def set_default_settings(args): # enable default currency frappe.db.set_value("Currency", args.get("currency"), "enabled", 1) @@ -59,21 +60,6 @@ def set_default_settings(args): delivery_settings.dispatch_template = _("Dispatch Notification") delivery_settings.save() - hr_settings = frappe.get_doc("HR Settings") - hr_settings.emp_created_by = "Naming Series" - hr_settings.leave_approval_notification_template = _("Leave Approval Notification") - hr_settings.leave_status_notification_template = _("Leave Status Notification") - - hr_settings.send_interview_reminder = 1 - hr_settings.interview_reminder_template = _("Interview Reminder") - hr_settings.remind_before = "00:15:00" - - hr_settings.send_interview_feedback_reminder = 1 - hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder") - - hr_settings.exit_questionnaire_notification_template = _("Exit Questionnaire Notification") - hr_settings.save() - def set_no_copy_fields_in_variant_settings(): # set no copy fields of an item doctype to item variant settings diff --git a/erpnext/setup/setup_wizard/operations/install_fixtures.py b/erpnext/setup/setup_wizard/operations/install_fixtures.py index 4235e1f7db..4d9b871e5e 100644 --- a/erpnext/setup/setup_wizard/operations/install_fixtures.py +++ b/erpnext/setup/setup_wizard/operations/install_fixtures.py @@ -12,7 +12,6 @@ from frappe.desk.doctype.global_search_settings.global_search_settings import ( ) from frappe.desk.page.setup_wizard.setup_wizard import make_records from frappe.utils import cstr, getdate -from frappe.utils.nestedset import rebuild_tree from erpnext.accounts.doctype.account.account import RootNotEditable from erpnext.regional.address_template.setup import set_up_address_templates @@ -83,91 +82,6 @@ def install(country=None): "is_group": 0, "parent_item_group": _("All Item Groups"), }, - # salary component - { - "doctype": "Salary Component", - "salary_component": _("Income Tax"), - "description": _("Income Tax"), - "type": "Deduction", - "is_income_tax_component": 1, - }, - { - "doctype": "Salary Component", - "salary_component": _("Basic"), - "description": _("Basic"), - "type": "Earning", - }, - { - "doctype": "Salary Component", - "salary_component": _("Arrear"), - "description": _("Arrear"), - "type": "Earning", - }, - { - "doctype": "Salary Component", - "salary_component": _("Leave Encashment"), - "description": _("Leave Encashment"), - "type": "Earning", - }, - # expense claim type - {"doctype": "Expense Claim Type", "name": _("Calls"), "expense_type": _("Calls")}, - {"doctype": "Expense Claim Type", "name": _("Food"), "expense_type": _("Food")}, - {"doctype": "Expense Claim Type", "name": _("Medical"), "expense_type": _("Medical")}, - {"doctype": "Expense Claim Type", "name": _("Others"), "expense_type": _("Others")}, - {"doctype": "Expense Claim Type", "name": _("Travel"), "expense_type": _("Travel")}, - # leave type - { - "doctype": "Leave Type", - "leave_type_name": _("Casual Leave"), - "name": _("Casual Leave"), - "allow_encashment": 1, - "is_carry_forward": 1, - "max_continuous_days_allowed": "3", - "include_holiday": 1, - }, - { - "doctype": "Leave Type", - "leave_type_name": _("Compensatory Off"), - "name": _("Compensatory Off"), - "allow_encashment": 0, - "is_carry_forward": 0, - "include_holiday": 1, - "is_compensatory": 1, - }, - { - "doctype": "Leave Type", - "leave_type_name": _("Sick Leave"), - "name": _("Sick Leave"), - "allow_encashment": 0, - "is_carry_forward": 0, - "include_holiday": 1, - }, - { - "doctype": "Leave Type", - "leave_type_name": _("Privilege Leave"), - "name": _("Privilege Leave"), - "allow_encashment": 0, - "is_carry_forward": 0, - "include_holiday": 1, - }, - { - "doctype": "Leave Type", - "leave_type_name": _("Leave Without Pay"), - "name": _("Leave Without Pay"), - "allow_encashment": 0, - "is_carry_forward": 0, - "is_lwp": 1, - "include_holiday": 1, - }, - # Employment Type - {"doctype": "Employment Type", "employee_type_name": _("Full-time")}, - {"doctype": "Employment Type", "employee_type_name": _("Part-time")}, - {"doctype": "Employment Type", "employee_type_name": _("Probation")}, - {"doctype": "Employment Type", "employee_type_name": _("Contract")}, - {"doctype": "Employment Type", "employee_type_name": _("Commission")}, - {"doctype": "Employment Type", "employee_type_name": _("Piecework")}, - {"doctype": "Employment Type", "employee_type_name": _("Intern")}, - {"doctype": "Employment Type", "employee_type_name": _("Apprentice")}, # Stock Entry Type {"doctype": "Stock Entry Type", "name": "Material Issue", "purpose": "Material Issue"}, {"doctype": "Stock Entry Type", "name": "Material Receipt", "purpose": "Material Receipt"}, @@ -356,14 +270,8 @@ def install(country=None): {"doctype": "Issue Priority", "name": _("Low")}, {"doctype": "Issue Priority", "name": _("Medium")}, {"doctype": "Issue Priority", "name": _("High")}, - # Job Applicant Source - {"doctype": "Job Applicant Source", "source_name": _("Website Listing")}, - {"doctype": "Job Applicant Source", "source_name": _("Walk In")}, - {"doctype": "Job Applicant Source", "source_name": _("Employee Referral")}, - {"doctype": "Job Applicant Source", "source_name": _("Campaign")}, {"doctype": "Email Account", "email_id": "sales@example.com", "append_to": "Opportunity"}, {"doctype": "Email Account", "email_id": "support@example.com", "append_to": "Issue"}, - {"doctype": "Email Account", "email_id": "jobs@example.com", "append_to": "Job Applicant"}, {"doctype": "Party Type", "party_type": "Customer", "account_type": "Receivable"}, {"doctype": "Party Type", "party_type": "Supplier", "account_type": "Payable"}, {"doctype": "Party Type", "party_type": "Employee", "account_type": "Payable"}, @@ -374,18 +282,6 @@ def install(country=None): {"doctype": "Project Type", "project_type": "Internal"}, {"doctype": "Project Type", "project_type": "External"}, {"doctype": "Project Type", "project_type": "Other"}, - {"doctype": "Offer Term", "offer_term": _("Date of Joining")}, - {"doctype": "Offer Term", "offer_term": _("Annual Salary")}, - {"doctype": "Offer Term", "offer_term": _("Probationary Period")}, - {"doctype": "Offer Term", "offer_term": _("Employee Benefits")}, - {"doctype": "Offer Term", "offer_term": _("Working Hours")}, - {"doctype": "Offer Term", "offer_term": _("Stock Options")}, - {"doctype": "Offer Term", "offer_term": _("Department")}, - {"doctype": "Offer Term", "offer_term": _("Job Description")}, - {"doctype": "Offer Term", "offer_term": _("Responsibilities")}, - {"doctype": "Offer Term", "offer_term": _("Leaves per Year")}, - {"doctype": "Offer Term", "offer_term": _("Notice Period")}, - {"doctype": "Offer Term", "offer_term": _("Incentives")}, {"doctype": "Print Heading", "print_heading": _("Credit Note")}, {"doctype": "Print Heading", "print_heading": _("Debit Note")}, # Share Management @@ -418,73 +314,6 @@ def install(country=None): {"doctype": "Sales Partner Type", "sales_partner_type": _(d)} for d in default_sales_partner_type ] - base_path = frappe.get_app_path("erpnext", "hr", "doctype") - response = frappe.read_file( - os.path.join(base_path, "leave_application/leave_application_email_template.html") - ) - - records += [ - { - "doctype": "Email Template", - "name": _("Leave Approval Notification"), - "response": response, - "subject": _("Leave Approval Notification"), - "owner": frappe.session.user, - } - ] - - records += [ - { - "doctype": "Email Template", - "name": _("Leave Status Notification"), - "response": response, - "subject": _("Leave Status Notification"), - "owner": frappe.session.user, - } - ] - - response = frappe.read_file( - os.path.join(base_path, "interview/interview_reminder_notification_template.html") - ) - - records += [ - { - "doctype": "Email Template", - "name": _("Interview Reminder"), - "response": response, - "subject": _("Interview Reminder"), - "owner": frappe.session.user, - } - ] - - response = frappe.read_file( - os.path.join(base_path, "interview/interview_feedback_reminder_template.html") - ) - - records += [ - { - "doctype": "Email Template", - "name": _("Interview Feedback Reminder"), - "response": response, - "subject": _("Interview Feedback Reminder"), - "owner": frappe.session.user, - } - ] - - response = frappe.read_file( - os.path.join(base_path, "exit_interview/exit_questionnaire_notification_template.html") - ) - - records += [ - { - "doctype": "Email Template", - "name": _("Exit Questionnaire Notification"), - "response": response, - "subject": _("Exit Questionnaire Notification"), - "owner": frappe.session.user, - } - ] - base_path = frappe.get_app_path("erpnext", "stock", "doctype") response = frappe.read_file( os.path.join(base_path, "delivery_trip/dispatch_notification_template.html") @@ -514,7 +343,6 @@ def set_more_defaults(): # Do more setup stuff that can be done here with no dependencies update_selling_defaults() update_buying_defaults() - update_hr_defaults() add_uom_data() update_item_variant_settings() @@ -539,22 +367,6 @@ def update_buying_defaults(): buying_settings.save() -def update_hr_defaults(): - hr_settings = frappe.get_doc("HR Settings") - hr_settings.emp_created_by = "Naming Series" - hr_settings.leave_approval_notification_template = _("Leave Approval Notification") - hr_settings.leave_status_notification_template = _("Leave Status Notification") - - hr_settings.send_interview_reminder = 1 - hr_settings.interview_reminder_template = _("Interview Reminder") - hr_settings.remind_before = "00:15:00" - - hr_settings.send_interview_feedback_reminder = 1 - hr_settings.feedback_reminder_notification_template = _("Interview Feedback Reminder") - - hr_settings.save() - - def update_item_variant_settings(): # set no copy fields of an item doctype to item variant settings doc = frappe.get_doc("Item Variant Settings") @@ -656,104 +468,6 @@ def install_company(args): make_records(records) -def install_post_company_fixtures(args=None): - records = [ - # Department - { - "doctype": "Department", - "department_name": _("All Departments"), - "is_group": 1, - "parent_department": "", - }, - { - "doctype": "Department", - "department_name": _("Accounts"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Marketing"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Sales"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Purchase"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Operations"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Production"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Dispatch"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Customer Service"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Human Resources"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Management"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Quality Management"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Research & Development"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - { - "doctype": "Department", - "department_name": _("Legal"), - "parent_department": _("All Departments"), - "company": args.company_name, - }, - ] - - # Make root department with NSM updation - make_records(records[:1]) - - frappe.local.flags.ignore_update_nsm = True - make_records(records[1:]) - frappe.local.flags.ignore_update_nsm = False - rebuild_tree("Department", "parent_department") - - def install_defaults(args=None): records = [ # Price Lists diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py index b3ff439d74..54bd8c355d 100644 --- a/erpnext/setup/utils.py +++ b/erpnext/setup/utils.py @@ -36,9 +36,6 @@ def before_tests(): } ) - frappe.db.sql("delete from `tabLeave Allocation`") - frappe.db.sql("delete from `tabLeave Application`") - frappe.db.sql("delete from `tabSalary Slip`") frappe.db.sql("delete from `tabItem Price`") _enable_all_roles_for_admin() diff --git a/erpnext/setup/workspace/erpnext_settings/erpnext_settings.json b/erpnext/setup/workspace/erpnext_settings/erpnext_settings.json index eeb71c7709..4c0f2b5cbf 100644 --- a/erpnext/setup/workspace/erpnext_settings/erpnext_settings.json +++ b/erpnext/setup/workspace/erpnext_settings/erpnext_settings.json @@ -10,13 +10,14 @@ "idx": 0, "label": "ERPNext Settings", "links": [], - "modified": "2022-04-28 11:42:01.043569", + "modified": "2022-06-27 16:53:07.056620", "modified_by": "Administrator", "module": "Setup", "name": "ERPNext Settings", "owner": "Administrator", "parent_page": "", "public": 1, + "quick_lists": [], "restrict_to_domain": "", "roles": [], "sequence_id": 12.0, @@ -27,14 +28,6 @@ "link_to": "Projects Settings", "type": "DocType" }, - { - "color": "Grey", - "doc_view": "", - "icon": "dot-horizontal", - "label": "Naming Series", - "link_to": "Naming Series", - "type": "DocType" - }, { "icon": "accounting", "label": "Accounts Settings", @@ -47,12 +40,6 @@ "link_to": "Stock Settings", "type": "DocType" }, - { - "icon": "hr", - "label": "HR Settings", - "link_to": "HR Settings", - "type": "DocType" - }, { "icon": "sell", "label": "Selling Settings", @@ -73,8 +60,8 @@ }, { "icon": "retail", - "label": "Shopping Cart Settings", - "link_to": "Shopping Cart Settings", + "label": "E Commerce Settings", + "link_to": "E Commerce Settings", "type": "DocType" }, { @@ -96,13 +83,6 @@ "link_to": "Domain Settings", "type": "DocType" }, - { - "doc_view": "", - "icon": "retail", - "label": "Products Settings", - "link_to": "Products Settings", - "type": "DocType" - }, { "doc_view": "", "icon": "crm", diff --git a/erpnext/setup/workspace/home/home.json b/erpnext/setup/workspace/home/home.json index 19ff2a0830..d26e57684f 100644 --- a/erpnext/setup/workspace/home/home.json +++ b/erpnext/setup/workspace/home/home.json @@ -125,47 +125,6 @@ "onboard": 1, "type": "Link" }, - { - "hidden": 0, - "is_query_report": 0, - "label": "Human Resources", - "link_count": 0, - "onboard": 0, - "type": "Card Break" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Employee", - "link_count": 0, - "link_to": "Employee", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "Employee", - "hidden": 0, - "is_query_report": 0, - "label": "Employee Attendance Tool", - "link_count": 0, - "link_to": "Employee Attendance Tool", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, - { - "dependencies": "", - "hidden": 0, - "is_query_report": 0, - "label": "Salary Structure", - "link_count": 0, - "link_to": "Salary Structure", - "link_type": "DocType", - "onboard": 1, - "type": "Link" - }, { "hidden": 0, "is_query_report": 0, @@ -271,13 +230,14 @@ "type": "Link" } ], - "modified": "2022-01-13 17:24:17.002665", + "modified": "2022-06-27 16:54:35.462176", "modified_by": "Administrator", "module": "Setup", "name": "Home", "owner": "Administrator", "parent_page": "", "public": 1, + "quick_lists": [], "restrict_to_domain": "", "roles": [], "sequence_id": 1.0, @@ -309,4 +269,4 @@ } ], "title": "Home" -} +} \ No newline at end of file diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index c3445ab644..bb120eaa6b 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -14,7 +14,6 @@ def boot_session(bootinfo): if frappe.session["user"] != "Guest": update_page_info(bootinfo) - load_country_and_currency(bootinfo) bootinfo.sysdefaults.territory = frappe.db.get_single_value("Selling Settings", "territory") bootinfo.sysdefaults.customer_group = frappe.db.get_single_value( "Selling Settings", "customer_group" @@ -53,20 +52,6 @@ def boot_session(bootinfo): bootinfo.party_account_types = frappe._dict(party_account_types) -def load_country_and_currency(bootinfo): - country = frappe.db.get_default("country") - if country and frappe.db.exists("Country", country): - bootinfo.docs += [frappe.get_doc("Country", country)] - - bootinfo.docs += frappe.db.sql( - """select name, fraction, fraction_units, - number_format, smallest_currency_fraction_value, symbol from tabCurrency - where enabled=1""", - as_dict=1, - update={"doctype": ":Currency"}, - ) - - def update_page_info(bootinfo): bootinfo.page_info.update( { diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js index c9d5f61f22..6e7622c067 100644 --- a/erpnext/stock/dashboard/item_dashboard.js +++ b/erpnext/stock/dashboard/item_dashboard.js @@ -260,6 +260,16 @@ erpnext.stock.move_item = function (item, source, target, actual_qty, rate, call } dialog.set_primary_action(__('Create Stock Entry'), function () { + if (source && (dialog.get_value("qty") == 0 || dialog.get_value("qty") > actual_qty)) { + frappe.msgprint(__("Quantity must be greater than zero, and less or equal to {0}", [actual_qty])); + return; + } + + if (dialog.get_value("source") === dialog.get_value("target")) { + frappe.msgprint(__("Source and target warehouse must be different")); + return; + } + frappe.model.with_doctype('Stock Entry', function () { let doc = frappe.model.get_new_doc('Stock Entry'); doc.from_warehouse = dialog.get_value('source'); diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index aac6cd386c..52854a0f01 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -86,20 +86,29 @@ def get_batch_naming_series(): class Batch(Document): def autoname(self): """Generate random ID for batch if not specified""" - if not self.batch_id: - create_new_batch, batch_number_series = frappe.db.get_value( - "Item", self.item, ["create_new_batch", "batch_number_series"] - ) - if create_new_batch: - if batch_number_series: - self.batch_id = make_autoname(batch_number_series, doc=self) - elif batch_uses_naming_series(): - self.batch_id = self.get_name_from_naming_series() - else: - self.batch_id = get_name_from_hash() + if self.batch_id: + self.name = self.batch_id + return + + create_new_batch, batch_number_series = frappe.db.get_value( + "Item", self.item, ["create_new_batch", "batch_number_series"] + ) + + if not create_new_batch: + frappe.throw(_("Batch ID is mandatory"), frappe.MandatoryError) + + while not self.batch_id: + if batch_number_series: + self.batch_id = make_autoname(batch_number_series, doc=self) + elif batch_uses_naming_series(): + self.batch_id = self.get_name_from_naming_series() else: - frappe.throw(_("Batch ID is mandatory"), frappe.MandatoryError) + self.batch_id = get_name_from_hash() + + # User might have manually created a batch with next number + if frappe.db.exists("Batch", self.batch_id): + self.batch_id = None self.name = self.batch_id @@ -326,7 +335,7 @@ def get_batches(item_code, warehouse, qty=1, throw=False, serial_no=None): on (`tabBatch`.batch_id = `tabStock Ledger Entry`.batch_no ) where `tabStock Ledger Entry`.item_code = %s and `tabStock Ledger Entry`.warehouse = %s and `tabStock Ledger Entry`.is_cancelled = 0 - and (`tabBatch`.expiry_date >= CURDATE() or `tabBatch`.expiry_date IS NULL) {0} + and (`tabBatch`.expiry_date >= CURRENT_DATE or `tabBatch`.expiry_date IS NULL) {0} group by batch_id order by `tabBatch`.expiry_date ASC, `tabBatch`.creation ASC """.format( diff --git a/erpnext/stock/doctype/batch/test_batch.py b/erpnext/stock/doctype/batch/test_batch.py index c76da626b5..3e470d4ce4 100644 --- a/erpnext/stock/doctype/batch/test_batch.py +++ b/erpnext/stock/doctype/batch/test_batch.py @@ -11,6 +11,8 @@ from frappe.utils.data import add_to_date, getdate from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.stock.doctype.batch.batch import UnableToSelectBatchError, get_batch_no, get_batch_qty +from erpnext.stock.doctype.item.test_item import make_item +from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import ( create_stock_reconciliation, @@ -27,7 +29,7 @@ class TestBatch(FrappeTestCase): ) @classmethod - def make_batch_item(cls, item_name): + def make_batch_item(cls, item_name=None): from erpnext.stock.doctype.item.test_item import make_item if not frappe.db.exists(item_name): @@ -245,7 +247,7 @@ class TestBatch(FrappeTestCase): if not use_naming_series: frappe.set_value("Stock Settings", "Stock Settings", "use_naming_series", 0) - def make_new_batch(self, item_name, batch_id=None, do_not_insert=0): + def make_new_batch(self, item_name=None, batch_id=None, do_not_insert=0): batch = frappe.new_doc("Batch") item = self.make_batch_item(item_name) batch.item = item.name @@ -407,6 +409,26 @@ class TestBatch(FrappeTestCase): self.assertEqual(getdate(batch.expiry_date), getdate(expiry_date)) + def test_autocreation_of_batches(self): + """ + Test if auto created Serial No excludes existing serial numbers + """ + item_code = make_item( + properties={ + "has_batch_no": 1, + "batch_number_series": "BATCHEXISTING.###", + "create_new_batch": 1, + } + ).name + + manually_created_batch = self.make_new_batch(item_code, batch_id="BATCHEXISTING001").name + + pr_1 = make_purchase_receipt(item_code=item_code, qty=1, batch_no=manually_created_batch) + pr_2 = make_purchase_receipt(item_code=item_code, qty=1) + + self.assertNotEqual(pr_1.items[0].batch_no, pr_2.items[0].batch_no) + self.assertEqual("BATCHEXISTING002", pr_2.items[0].batch_no) + def create_batch(item_code, rate, create_item_price_for_batch): pi = make_purchase_invoice( diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index 1bfce6685b..548df318fa 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -40,49 +40,77 @@ class Bin(Document): self.db_set("reserved_qty_for_production", flt(self.reserved_qty_for_production)) self.db_set("projected_qty", self.projected_qty) - def update_reserved_qty_for_sub_contracting(self): + def update_reserved_qty_for_sub_contracting(self, subcontract_doctype="Subcontracting Order"): # reserved qty - po = frappe.qb.DocType("Purchase Order") - supplied_item = frappe.qb.DocType("Purchase Order Item Supplied") + subcontract_order = frappe.qb.DocType(subcontract_doctype) + supplied_item = frappe.qb.DocType( + "Purchase Order Item Supplied" + if subcontract_doctype == "Purchase Order" + else "Subcontracting Order Supplied Item" + ) + + conditions = ( + (supplied_item.rm_item_code == self.item_code) + & (subcontract_order.name == supplied_item.parent) + & (subcontract_order.per_received < 100) + & (supplied_item.reserve_warehouse == self.warehouse) + & ( + ( + (subcontract_order.is_old_subcontracting_flow == 1) + & (subcontract_order.status != "Closed") + & (subcontract_order.docstatus == 1) + ) + if subcontract_doctype == "Purchase Order" + else (subcontract_order.docstatus == 1) + ) + ) reserved_qty_for_sub_contract = ( - frappe.qb.from_(po) + frappe.qb.from_(subcontract_order) .from_(supplied_item) .select(Sum(Coalesce(supplied_item.required_qty, 0))) - .where( - (supplied_item.rm_item_code == self.item_code) - & (po.name == supplied_item.parent) - & (po.docstatus == 1) - & (po.is_subcontracted) - & (po.status != "Closed") - & (po.per_received < 100) - & (supplied_item.reserve_warehouse == self.warehouse) - ) + .where(conditions) ).run()[0][0] or 0.0 se = frappe.qb.DocType("Stock Entry") se_item = frappe.qb.DocType("Stock Entry Detail") + if frappe.db.field_exists("Stock Entry", "is_return"): + qty_field = ( + Case().when(se.is_return == 1, se_item.transfer_qty * -1).else_(se_item.transfer_qty) + ) + else: + qty_field = se_item.transfer_qty + + conditions = ( + (se.docstatus == 1) + & (se.purpose == "Send to Subcontractor") + & ((se_item.item_code == self.item_code) | (se_item.original_item == self.item_code)) + & (se.name == se_item.parent) + & (subcontract_order.docstatus == 1) + & (subcontract_order.per_received < 100) + & ( + ( + (Coalesce(se.purchase_order, "") != "") + & (subcontract_order.name == se.purchase_order) + & (subcontract_order.is_old_subcontracting_flow == 1) + & (subcontract_order.status != "Closed") + ) + if subcontract_doctype == "Purchase Order" + else ( + (Coalesce(se.subcontracting_order, "") != "") + & (subcontract_order.name == se.subcontracting_order) + ) + ) + ) + materials_transferred = ( frappe.qb.from_(se) .from_(se_item) - .from_(po) - .select( - Sum(Case().when(se.is_return == 1, se_item.transfer_qty * -1).else_(se_item.transfer_qty)) - ) - .where( - (se.docstatus == 1) - & (se.purpose == "Send to Subcontractor") - & (Coalesce(se.purchase_order, "") != "") - & ((se_item.item_code == self.item_code) | (se_item.original_item == self.item_code)) - & (se.name == se_item.parent) - & (po.name == se.purchase_order) - & (po.docstatus == 1) - & (po.is_subcontracted == 1) - & (po.status != "Closed") - & (po.per_received < 100) - ) + .from_(subcontract_order) + .select(Sum(qty_field)) + .where(conditions) ).run()[0][0] or 0.0 if reserved_qty_for_sub_contract > materials_transferred: diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 706ca36598..ea3cf1948b 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -77,8 +77,6 @@ frappe.ui.form.on("Delivery Note", { } }); - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); - frm.set_df_property('packed_items', 'cannot_add_rows', true); frm.set_df_property('packed_items', 'cannot_delete_rows', true); }, diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index e3222bc885..f9e934921d 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -1192,6 +1192,8 @@ "width": "50%" }, { + "fetch_from": "sales_partner.commission_rate", + "fetch_if_empty": 1, "fieldname": "commission_rate", "fieldtype": "Float", "label": "Commission Rate (%)", @@ -1334,7 +1336,7 @@ "idx": 146, "is_submittable": 1, "links": [], - "modified": "2022-04-26 14:48:08.781837", + "modified": "2022-06-10 03:52:04.197415", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", diff --git a/erpnext/stock/doctype/delivery_note/regional/india.js b/erpnext/stock/doctype/delivery_note/regional/india.js deleted file mode 100644 index e853858b60..0000000000 --- a/erpnext/stock/doctype/delivery_note/regional/india.js +++ /dev/null @@ -1,29 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Delivery Note'); - -frappe.ui.form.on('Delivery Note', { - refresh: function(frm) { - if(frm.doc.docstatus == 1 && !frm.is_dirty() && !frm.doc.ewaybill) { - frm.add_custom_button('E-Way Bill JSON', () => { - frappe.call({ - method: 'erpnext.regional.india.utils.generate_ewb_json', - args: { - 'dt': frm.doc.doctype, - 'dn': [frm.doc.name] - }, - callback: function(r) { - if (r.message) { - const args = { - cmd: 'erpnext.regional.india.utils.download_ewb_json', - data: r.message, - docname: frm.doc.name - }; - open_url_post(frappe.request.url, args); - } - } - }); - }, __("Create")); - } - } -}) diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py index f97e7ca9c6..6bcab737b3 100644 --- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py @@ -570,15 +570,12 @@ class TestDeliveryNote(FrappeTestCase): customer=customer_name, cost_center="Main - TCP1", expense_account="Cost of Goods Sold - TCP1", - do_not_submit=True, qty=5, rate=500, warehouse="Stores - TCP1", target_warehouse=target_warehouse, ) - dn.submit() - # qty after delivery actual_qty_at_source = get_qty_after_transaction(warehouse="Stores - TCP1") self.assertEqual(actual_qty_at_source, 475) @@ -962,6 +959,138 @@ class TestDeliveryNote(FrappeTestCase): automatically_fetch_payment_terms(enable=0) + def test_returned_qty_in_return_dn(self): + # SO ---> SI ---> DN + # | + # |---> DN(Partial Sales Return) ---> SI(Credit Note) + # | + # |---> DN(Partial Sales Return) ---> SI(Credit Note) + + from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_delivery_note + from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice + + so = make_sales_order(qty=10) + si = make_sales_invoice(so.name) + si.insert() + si.submit() + dn = make_delivery_note(si.name) + dn.insert() + dn.submit() + self.assertEqual(dn.items[0].returned_qty, 0) + self.assertEqual(dn.per_billed, 100) + + from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice + + dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-3) + si1 = make_sales_invoice(dn1.name) + si1.insert() + si1.submit() + dn1.reload() + self.assertEqual(dn1.items[0].returned_qty, 0) + self.assertEqual(dn1.per_billed, 100) + + dn2 = create_delivery_note(is_return=1, return_against=dn.name, qty=-4) + si2 = make_sales_invoice(dn2.name) + si2.insert() + si2.submit() + dn2.reload() + self.assertEqual(dn2.items[0].returned_qty, 0) + self.assertEqual(dn2.per_billed, 100) + + def test_internal_transfer_with_valuation_only(self): + from erpnext.selling.doctype.customer.test_customer import create_internal_customer + + item = make_item().name + warehouse = "_Test Warehouse - _TC" + target = "Stores - _TC" + company = "_Test Company" + customer = create_internal_customer(represents_company=company) + rate = 42 + + # Create item price and pricing rule + frappe.get_doc( + { + "item_code": item, + "price_list": "Standard Selling", + "price_list_rate": 1000, + "doctype": "Item Price", + } + ).insert() + + frappe.get_doc( + { + "doctype": "Pricing Rule", + "title": frappe.generate_hash(), + "apply_on": "Item Code", + "price_or_product_discount": "Price", + "selling": 1, + "company": company, + "margin_type": "Percentage", + "margin_rate_or_amount": 10, + "apply_discount_on": "Grand Total", + "items": [ + { + "item_code": item, + } + ], + } + ).insert() + + make_stock_entry(target=warehouse, qty=5, basic_rate=rate, item_code=item) + dn = create_delivery_note( + item_code=item, + company=company, + customer=customer, + qty=5, + rate=500, + warehouse=warehouse, + target_warehouse=target, + ignore_pricing_rule=0, + do_not_save=True, + do_not_submit=True, + ) + + self.assertEqual(dn.items[0].rate, 500) # haven't saved yet + dn.save() + self.assertEqual(dn.ignore_pricing_rule, 1) + + # rate should reset to incoming rate + self.assertEqual(dn.items[0].rate, rate) + + # rate should reset again if discounts are fiddled with + dn.items[0].margin_type = "Amount" + dn.items[0].margin_rate_or_amount = 50 + dn.save() + + self.assertEqual(dn.items[0].rate, rate) + + def test_internal_transfer_precision_gle(self): + from erpnext.selling.doctype.customer.test_customer import create_internal_customer + + item = make_item(properties={"valuation_method": "Moving Average"}).name + company = "_Test Company with perpetual inventory" + warehouse = "Stores - TCP1" + target = "Finished Goods - TCP1" + customer = create_internal_customer(represents_company=company) + + # average rate = 128.015 + rates = [101.45, 150.46, 138.25, 121.9] + + for rate in rates: + make_stock_entry(item_code=item, target=warehouse, qty=1, rate=rate) + + dn = create_delivery_note( + item_code=item, + company=company, + customer=customer, + qty=4, + warehouse=warehouse, + target_warehouse=target, + ) + self.assertFalse( + frappe.db.exists("GL Entry", {"voucher_no": dn.name, "voucher_type": dn.doctype}) + ) + def create_delivery_note(**args): dn = frappe.new_doc("Delivery Note") diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index e2eb2a4bbb..2de4842ebe 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -184,6 +184,7 @@ "width": "100px" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -209,6 +210,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "UOM Conversion Factor", @@ -217,6 +219,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Qty in Stock UOM", @@ -737,7 +740,9 @@ "depends_on": "returned_qty", "fieldname": "returned_qty", "fieldtype": "Float", - "label": "Returned Qty in Stock UOM" + "label": "Returned Qty in Stock UOM", + "no_copy": 1, + "read_only": 1 }, { "fieldname": "incoming_rate", @@ -778,7 +783,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-03-31 18:36:24.671913", + "modified": "2022-06-17 05:25:47.711177", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.js b/erpnext/stock/doctype/delivery_trip/delivery_trip.js index 68cba2993c..a6fbb66aa2 100755 --- a/erpnext/stock/doctype/delivery_trip/delivery_trip.js +++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.js @@ -41,15 +41,6 @@ frappe.ui.form.on('Delivery Trip', { }, refresh: function (frm) { - if (frm.doc.docstatus == 1 && frm.doc.employee) { - frm.add_custom_button(__('Expense Claim'), function() { - frappe.model.open_mapped_doc({ - method: 'erpnext.stock.doctype.delivery_trip.delivery_trip.make_expense_claim', - frm: cur_frm, - }); - }, __("Create")); - } - if (frm.doc.docstatus == 1 && frm.doc.delivery_stops.length > 0) { frm.add_custom_button(__("Notify Customers via Email"), function () { frm.trigger('notify_customers'); diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py index 73b250db54..1febbded52 100644 --- a/erpnext/stock/doctype/delivery_trip/delivery_trip.py +++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py @@ -8,7 +8,6 @@ import frappe from frappe import _ from frappe.contacts.doctype.address.address import get_address_display from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc from frappe.utils import cint, get_datetime, get_link_to_form @@ -263,9 +262,9 @@ def get_default_contact(out, name): FROM `tabDynamic Link` dl WHERE - dl.link_doctype="Customer" + dl.link_doctype='Customer' AND dl.link_name=%s - AND dl.parenttype = "Contact" + AND dl.parenttype = 'Contact' """, (name), as_dict=1, @@ -289,9 +288,9 @@ def get_default_address(out, name): FROM `tabDynamic Link` dl WHERE - dl.link_doctype="Customer" + dl.link_doctype='Customer' AND dl.link_name=%s - AND dl.parenttype = "Address" + AND dl.parenttype = 'Address' """, (name), as_dict=1, @@ -388,7 +387,7 @@ def notify_customers(delivery_trip): if email_recipients: frappe.msgprint(_("Email sent to {0}").format(", ".join(email_recipients))) - delivery_trip.db_set("email_notification_sent", True) + delivery_trip.db_set("email_notification_sent", 1) else: frappe.msgprint(_("No contacts with email IDs found.")) @@ -416,15 +415,3 @@ def get_driver_email(driver): employee = frappe.db.get_value("Driver", driver, "employee") email = frappe.db.get_value("Employee", employee, "prefered_email") return {"email": email} - - -@frappe.whitelist() -def make_expense_claim(source_name, target_doc=None): - doc = get_mapped_doc( - "Delivery Trip", - source_name, - {"Delivery Trip": {"doctype": "Expense Claim", "field_map": {"name": "delivery_trip"}}}, - target_doc, - ) - - return doc diff --git a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py index 555361afbc..ed699e37b8 100644 --- a/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py +++ b/erpnext/stock/doctype/delivery_trip/test_delivery_trip.py @@ -10,7 +10,6 @@ from frappe.utils import add_days, flt, now_datetime, nowdate import erpnext from erpnext.stock.doctype.delivery_trip.delivery_trip import ( get_contact_and_address, - make_expense_claim, notify_customers, ) from erpnext.tests.utils import create_test_contact_and_address @@ -34,10 +33,6 @@ class TestDeliveryTrip(FrappeTestCase): frappe.db.sql("delete from `tabDelivery Trip`") return super().tearDown() - def test_expense_claim_fields_are_fetched_properly(self): - expense_claim = make_expense_claim(self.delivery_trip.name) - self.assertEqual(self.delivery_trip.name, expense_claim.delivery_trip) - def test_delivery_trip_notify_customers(self): notify_customers(delivery_trip=self.delivery_trip.name) self.delivery_trip.load_from_db() diff --git a/erpnext/hr/doctype/compensatory_leave_request/__init__.py b/erpnext/stock/doctype/inventory_dimension/__init__.py similarity index 100% rename from erpnext/hr/doctype/compensatory_leave_request/__init__.py rename to erpnext/stock/doctype/inventory_dimension/__init__.py diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js new file mode 100644 index 0000000000..91a21f4e72 --- /dev/null +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js @@ -0,0 +1,48 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Inventory Dimension', { + setup(frm) { + frm.trigger('set_query_on_fields'); + }, + + set_query_on_fields(frm) { + frm.set_query('reference_document', () => { + let invalid_doctypes = frappe.model.core_doctypes_list; + invalid_doctypes.push('Batch', 'Serial No', 'Warehouse', 'Item', 'Inventory Dimension', + 'Accounting Dimension', 'Accounting Dimension Filter'); + + return { + filters: { + 'istable': 0, + 'issingle': 0, + 'name': ['not in', invalid_doctypes] + } + }; + }); + + frm.set_query('document_type', () => { + return { + query: 'erpnext.stock.doctype.inventory_dimension.inventory_dimension.get_inventory_documents', + }; + }); + }, + + onload(frm) { + frm.trigger('render_traget_field'); + }, + + refresh(frm) { + if (frm.doc.__onload && frm.doc.__onload.has_stock_ledger + && frm.doc.__onload.has_stock_ledger.length) { + let msg = __('Stock transactions exists against this dimension, user can not update document.'); + frm.dashboard.add_comment(msg, 'blue', true); + + frm.fields.forEach((field) => { + if (field.df.fieldname !== 'disabled') { + frm.set_df_property(field.df.fieldname, "read_only", "1"); + } + }); + } + } +}); diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json new file mode 100644 index 0000000000..8b334d13d7 --- /dev/null +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json @@ -0,0 +1,194 @@ +{ + "actions": [], + "allow_rename": 1, + "autoname": "field:dimension_name", + "creation": "2022-06-17 13:04:16.554051", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "dimension_details_tab", + "dimension_name", + "reference_document", + "column_break_4", + "disabled", + "section_break_7", + "field_mapping_section", + "source_fieldname", + "column_break_9", + "target_fieldname", + "applicable_for_documents_tab", + "apply_to_all_doctypes", + "document_type", + "istable", + "type_of_transaction", + "column_break_16", + "condition", + "applicable_condition_example_section", + "html_19" + ], + "fields": [ + { + "fieldname": "dimension_details_tab", + "fieldtype": "Tab Break", + "label": "Dimension Details" + }, + { + "fieldname": "reference_document", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Reference Document", + "options": "DocType", + "reqd": 1 + }, + { + "fieldname": "dimension_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Dimension Name", + "reqd": 1, + "unique": 1 + }, + { + "fieldname": "applicable_for_documents_tab", + "fieldtype": "Tab Break", + "label": "Applicable For Documents" + }, + { + "depends_on": "eval:!doc.apply_to_all_doctypes", + "fieldname": "document_type", + "fieldtype": "Link", + "label": "Applicable to Document", + "mandatory_depends_on": "eval:!doc.apply_to_all_doctypes", + "options": "DocType" + }, + { + "fieldname": "column_break_9", + "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "eval:!doc.apply_to_all_doctypes && doc.document_type", + "fetch_from": "document_type.istable", + "fieldname": "istable", + "fieldtype": "Check", + "label": " Is Child Table", + "read_only": 1 + }, + { + "depends_on": "eval:!doc.apply_to_all_doctypes", + "fieldname": "condition", + "fieldtype": "Code", + "label": "Applicable Condition" + }, + { + "default": "0", + "fieldname": "apply_to_all_doctypes", + "fieldtype": "Check", + "label": "Apply to All Inventory Document Types" + }, + { + "default": "0", + "fieldname": "disabled", + "fieldtype": "Check", + "label": "Disabled" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break" + }, + { + "fieldname": "target_fieldname", + "fieldtype": "Data", + "label": "Target Fieldname (Stock Ledger Entry)", + "read_only": 1 + }, + { + "fieldname": "source_fieldname", + "fieldtype": "Data", + "label": "Source Fieldname", + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "field_mapping_section", + "fieldtype": "Section Break", + "label": "Field Mapping" + }, + { + "fieldname": "column_break_16", + "fieldtype": "Column Break" + }, + { + "fieldname": "type_of_transaction", + "fieldtype": "Select", + "label": "Type of Transaction", + "options": "\nInward\nOutward" + }, + { + "fieldname": "html_19", + "fieldtype": "HTML", + "options": "\n\n \n \n \n \n\n\n\n \n \n\n\n \n \n\n\n\n
    Child DocumentNon Child Document
    \n

    To access parent document field use parent.fieldname and to access child table document field use doc.fieldname

    \n\n
    \n

    To access document field use doc.fieldname

    \n
    \n

    Example: parent.doctype == \"Stock Entry\" and doc.item_code == \"Test\"

    \n\n
    \n

    Example: doc.doctype == \"Stock Entry\" and doc.purpose == \"Manufacture\"

    \n
    \n\n\n\n\n\n\n" + }, + { + "collapsible": 1, + "depends_on": "eval:!doc.apply_to_all_doctypes", + "fieldname": "applicable_condition_example_section", + "fieldtype": "Section Break", + "label": "Applicable Condition Examples" + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + } + ], + "index_web_pages_for_search": 1, + "links": [], + "modified": "2022-07-19 21:06:11.824976", + "modified_by": "Administrator", + "module": "Stock", + "name": "Inventory Dimension", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "share": 1, + "write": 1 + } + ], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py new file mode 100644 index 0000000000..5a9541f060 --- /dev/null +++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py @@ -0,0 +1,196 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _, bold, scrub +from frappe.custom.doctype.custom_field.custom_field import create_custom_fields +from frappe.model.document import Document + + +class DoNotChangeError(frappe.ValidationError): + pass + + +class CanNotBeChildDoc(frappe.ValidationError): + pass + + +class CanNotBeDefaultDimension(frappe.ValidationError): + pass + + +class InventoryDimension(Document): + def onload(self): + if not self.is_new() and frappe.db.has_column("Stock Ledger Entry", self.target_fieldname): + self.set_onload("has_stock_ledger", self.has_stock_ledger()) + + def has_stock_ledger(self) -> str: + if not self.target_fieldname: + return + + return frappe.get_all( + "Stock Ledger Entry", filters={self.target_fieldname: ("is", "set"), "is_cancelled": 0}, limit=1 + ) + + def validate(self): + self.do_not_update_document() + self.reset_value() + self.validate_reference_document() + self.set_source_and_target_fieldname() + + def do_not_update_document(self): + if self.is_new() or not self.has_stock_ledger(): + return + + old_doc = self._doc_before_save + for field in frappe.get_meta("Inventory Dimension").fields: + if field.fieldname != "disabled" and old_doc.get(field.fieldname) != self.get(field.fieldname): + msg = f"""The user can not change value of the field {bold(field.label)} because + stock transactions exists against the dimension {bold(self.name)}.""" + + frappe.throw(_(msg), DoNotChangeError) + + def reset_value(self): + if self.apply_to_all_doctypes: + self.istable = 0 + for field in ["document_type", "condition"]: + self.set(field, None) + + def validate_reference_document(self): + if frappe.get_cached_value("DocType", self.reference_document, "istable") == 1: + msg = f"The reference document {self.reference_document} can not be child table." + frappe.throw(_(msg), CanNotBeChildDoc) + + if self.reference_document in ["Batch", "Serial No", "Warehouse", "Item"]: + msg = f"The reference document {self.reference_document} can not be an Inventory Dimension." + frappe.throw(_(msg), CanNotBeDefaultDimension) + + def set_source_and_target_fieldname(self) -> None: + if not self.source_fieldname: + self.source_fieldname = scrub(self.dimension_name) + + if not self.target_fieldname: + self.target_fieldname = scrub(self.reference_document) + + def on_update(self): + self.add_custom_fields() + + def add_custom_fields(self): + dimension_field = dict( + fieldname=self.source_fieldname, + fieldtype="Link", + insert_after="warehouse", + options=self.reference_document, + label=self.dimension_name, + ) + + custom_fields = {} + + if self.apply_to_all_doctypes: + for doctype in get_inventory_documents(): + if not frappe.db.get_value( + "Custom Field", {"dt": doctype[0], "fieldname": self.source_fieldname} + ): + custom_fields.setdefault(doctype[0], dimension_field) + elif not frappe.db.get_value( + "Custom Field", {"dt": self.document_type, "fieldname": self.source_fieldname} + ): + custom_fields.setdefault(self.document_type, dimension_field) + + if not frappe.db.get_value( + "Custom Field", {"dt": "Stock Ledger Entry", "fieldname": self.target_fieldname} + ): + dimension_field["fieldname"] = self.target_fieldname + custom_fields["Stock Ledger Entry"] = dimension_field + + create_custom_fields(custom_fields) + + +@frappe.whitelist() +def get_inventory_documents( + doctype=None, txt=None, searchfield=None, start=None, page_len=None, filters=None +): + and_filters = [["DocField", "parent", "not in", ["Batch", "Serial No"]]] + or_filters = [ + ["DocField", "options", "in", ["Batch", "Serial No"]], + ["DocField", "parent", "in", ["Putaway Rule"]], + ] + + if txt: + and_filters.append(["DocField", "parent", "like", f"%{txt}%"]) + + return frappe.get_all( + "DocField", + fields=["distinct parent"], + filters=and_filters, + or_filters=or_filters, + start=start, + page_length=page_len, + as_list=1, + ) + + +def get_evaluated_inventory_dimension(doc, sl_dict, parent_doc=None): + dimensions = get_document_wise_inventory_dimensions(doc.doctype) + filter_dimensions = [] + for row in dimensions: + if ( + row.type_of_transaction == "Inward" + if doc.docstatus == 1 + else row.type_of_transaction != "Inward" + ) and sl_dict.actual_qty < 0: + continue + elif ( + row.type_of_transaction == "Outward" + if doc.docstatus == 1 + else row.type_of_transaction != "Inward" + ) and sl_dict.actual_qty > 0: + continue + + evals = {"doc": doc} + if parent_doc: + evals["parent"] = parent_doc + + if row.condition and frappe.safe_eval(row.condition, evals): + filter_dimensions.append(row) + else: + filter_dimensions.append(row) + + return filter_dimensions + + +def get_document_wise_inventory_dimensions(doctype) -> dict: + if not hasattr(frappe.local, "document_wise_inventory_dimensions"): + frappe.local.document_wise_inventory_dimensions = {} + + if not frappe.local.document_wise_inventory_dimensions.get(doctype): + dimensions = frappe.get_all( + "Inventory Dimension", + fields=["name", "source_fieldname", "condition", "target_fieldname", "type_of_transaction"], + filters={"disabled": 0}, + or_filters={"document_type": doctype, "apply_to_all_doctypes": 1}, + ) + + frappe.local.document_wise_inventory_dimensions[doctype] = dimensions + + return frappe.local.document_wise_inventory_dimensions[doctype] + + +@frappe.whitelist() +def get_inventory_dimensions(): + if not hasattr(frappe.local, "inventory_dimensions"): + frappe.local.inventory_dimensions = {} + + if not frappe.local.inventory_dimensions: + dimensions = frappe.get_all( + "Inventory Dimension", + fields=[ + "distinct target_fieldname as fieldname", + "reference_document as doctype", + ], + filters={"disabled": 0}, + ) + + frappe.local.inventory_dimensions = dimensions + + return frappe.local.inventory_dimensions diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py new file mode 100644 index 0000000000..998a0e9d6a --- /dev/null +++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py @@ -0,0 +1,149 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +import frappe +from frappe.tests.utils import FrappeTestCase + +from erpnext.stock.doctype.inventory_dimension.inventory_dimension import ( + CanNotBeChildDoc, + CanNotBeDefaultDimension, + DoNotChangeError, +) +from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry +from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + +class TestInventoryDimension(FrappeTestCase): + def setUp(self): + prepare_test_data() + + def test_validate_inventory_dimension(self): + # Can not be child doc + inv_dim1 = create_inventory_dimension( + reference_document="Stock Entry Detail", + type_of_transaction="Outward", + dimension_name="Stock Entry", + apply_to_all_doctypes=0, + istable=0, + document_type="Stock Entry", + do_not_save=True, + ) + + self.assertRaises(CanNotBeChildDoc, inv_dim1.insert) + + inv_dim1 = create_inventory_dimension( + reference_document="Batch", + type_of_transaction="Outward", + dimension_name="Batch", + apply_to_all_doctypes=0, + document_type="Stock Entry Detail", + do_not_save=True, + ) + + self.assertRaises(CanNotBeDefaultDimension, inv_dim1.insert) + + def test_inventory_dimension(self): + warehouse = "Shelf Warehouse - _TC" + item_code = "_Test Item" + + inv_dim1 = create_inventory_dimension( + reference_document="Shelf", + type_of_transaction="Outward", + dimension_name="Shelf", + apply_to_all_doctypes=0, + document_type="Stock Entry Detail", + condition="parent.purpose == 'Material Issue'", + ) + + create_inventory_dimension( + reference_document="Shelf", + type_of_transaction="Inward", + dimension_name="To Shelf", + apply_to_all_doctypes=0, + document_type="Stock Entry Detail", + condition="parent.purpose == 'Material Receipt'", + ) + + inward = make_stock_entry( + item_code=item_code, + target=warehouse, + qty=5, + basic_rate=10, + do_not_save=True, + purpose="Material Receipt", + ) + + inward.items[0].to_shelf = "Shelf 1" + inward.save() + inward.submit() + inward.load_from_db() + + sle_data = frappe.db.get_value( + "Stock Ledger Entry", {"voucher_no": inward.name}, ["shelf", "warehouse"], as_dict=1 + ) + + self.assertEqual(inward.items[0].to_shelf, "Shelf 1") + self.assertEqual(sle_data.warehouse, warehouse) + self.assertEqual(sle_data.shelf, "Shelf 1") + + outward = make_stock_entry( + item_code=item_code, + source=warehouse, + qty=3, + basic_rate=10, + do_not_save=True, + purpose="Material Issue", + ) + + outward.items[0].shelf = "Shelf 1" + outward.save() + outward.submit() + outward.load_from_db() + + sle_shelf = frappe.db.get_value("Stock Ledger Entry", {"voucher_no": outward.name}, "shelf") + self.assertEqual(sle_shelf, "Shelf 1") + + inv_dim1.load_from_db() + inv_dim1.apply_to_all_doctypes = 1 + + self.assertTrue(inv_dim1.has_stock_ledger()) + self.assertRaises(DoNotChangeError, inv_dim1.save) + + +def prepare_test_data(): + if not frappe.db.exists("DocType", "Shelf"): + frappe.get_doc( + { + "doctype": "DocType", + "name": "Shelf", + "module": "Stock", + "custom": 1, + "naming_rule": "By fieldname", + "autoname": "field:shelf_name", + "fields": [{"label": "Shelf Name", "fieldname": "shelf_name", "fieldtype": "Data"}], + "permissions": [ + {"role": "System Manager", "permlevel": 0, "read": 1, "write": 1, "create": 1, "delete": 1} + ], + } + ).insert(ignore_permissions=True) + + for shelf in ["Shelf 1", "Shelf 2"]: + if not frappe.db.exists("Shelf", shelf): + frappe.get_doc({"doctype": "Shelf", "shelf_name": shelf}).insert(ignore_permissions=True) + + create_warehouse("Shelf Warehouse") + + +def create_inventory_dimension(**args): + args = frappe._dict(args) + + if frappe.db.exists("Inventory Dimension", args.dimension_name): + return frappe.get_doc("Inventory Dimension", args.dimension_name) + + doc = frappe.new_doc("Inventory Dimension") + doc.update(args) + + if not args.do_not_save: + doc.insert(ignore_permissions=True) + + return doc diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index ae8b488479..29b001fdcb 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -586,8 +586,7 @@ $.extend(erpnext.item, { ["parent","=", d.attribute] ], fields: ["attribute_value"], - limit_start: 0, - limit_page_length: 500, + limit_page_length: 0, parent: "Item Attribute", order_by: "idx" } diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 4f3e842995..76cb31dc42 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -11,10 +11,9 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "name_and_description_section", + "details", "naming_series", "item_code", - "variant_of", "item_name", "item_group", "stock_uom", @@ -22,6 +21,7 @@ "disabled", "allow_alternative_item", "is_stock_item", + "has_variants", "include_item_in_manufacturing", "opening_stock", "valuation_rate", @@ -35,11 +35,11 @@ "over_billing_allowance", "image", "section_break_11", - "brand", "description", - "sb_barcodes", - "barcodes", + "brand", + "dashboard_tab", "inventory_section", + "inventory_settings_section", "shelf_life_in_days", "end_of_life", "default_material_request_type", @@ -49,6 +49,8 @@ "weight_per_unit", "weight_uom", "allow_negative_stock", + "sb_barcodes", + "barcodes", "reorder_section", "reorder_levels", "unit_of_measure_conversion", @@ -64,16 +66,16 @@ "has_serial_no", "serial_no_series", "variants_section", - "has_variants", + "variant_of", "variant_based_on", "attributes", - "defaults", + "accounting", "item_defaults", - "purchase_details", - "is_purchase_item", + "purchasing_tab", "purchase_uom", "min_order_qty", "safety_stock", + "is_purchase_item", "purchase_details_cb", "lead_time_days", "last_purchase_rate", @@ -83,52 +85,43 @@ "delivered_by_supplier", "column_break2", "supplier_items", + "deferred_expense_section", + "enable_deferred_expense", + "deferred_expense_account", + "no_of_months_exp", "foreign_trade_details", "country_of_origin", "column_break_59", "customs_tariff_number", "sales_details", "sales_uom", - "is_sales_item", "grant_commission", + "is_sales_item", "column_break3", "max_discount", "deferred_revenue", - "deferred_revenue_account", "enable_deferred_revenue", - "column_break_85", + "deferred_revenue_account", "no_of_months", - "deferred_expense_section", - "deferred_expense_account", - "enable_deferred_expense", - "column_break_88", - "no_of_months_exp", "customer_details", "customer_items", "item_tax_section_break", "taxes", - "inspection_criteria", - "quality_inspection_template", + "quality_tab", "inspection_required_before_purchase", + "quality_inspection_template", "inspection_required_before_delivery", "manufacturing", - "default_bom", "is_sub_contracted_item", + "default_bom", "column_break_74", "customer_code", "default_item_manufacturer", "default_manufacturer_part_no", - "more_information_section", "published_in_website", "total_projected_qty" ], "fields": [ - { - "fieldname": "name_and_description_section", - "fieldtype": "Section Break", - "oldfieldtype": "Section Break", - "options": "fa fa-flag" - }, { "fieldname": "naming_series", "fieldtype": "Select", @@ -315,7 +308,7 @@ "collapsible_depends_on": "is_stock_item", "depends_on": "is_stock_item", "fieldname": "inventory_section", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Inventory", "oldfieldtype": "Section Break", "options": "fa fa-truck" @@ -486,7 +479,7 @@ "collapsible_depends_on": "attributes", "depends_on": "eval:!doc.is_fixed_asset", "fieldname": "variants_section", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Variants" }, { @@ -511,34 +504,21 @@ "fieldname": "attributes", "fieldtype": "Table", "hidden": 1, - "label": "Attributes", + "label": "Variant Attributes", + "mandatory_depends_on": "has_variants", "options": "Item Variant Attribute" }, - { - "depends_on": "eval:!doc.is_fixed_asset", - "fieldname": "defaults", - "fieldtype": "Section Break", - "label": "Sales, Purchase, Accounting Defaults" - }, { "fieldname": "item_defaults", "fieldtype": "Table", "label": "Item Defaults", "options": "Item Default" }, - { - "collapsible": 1, - "fieldname": "purchase_details", - "fieldtype": "Section Break", - "label": "Purchase, Replenishment Details", - "oldfieldtype": "Section Break", - "options": "fa fa-shopping-cart" - }, { "default": "1", "fieldname": "is_purchase_item", "fieldtype": "Check", - "label": "Is Purchase Item" + "label": "Allow Purchase" }, { "fieldname": "purchase_uom", @@ -646,8 +626,8 @@ { "collapsible": 1, "fieldname": "sales_details", - "fieldtype": "Section Break", - "label": "Sales Details", + "fieldtype": "Tab Break", + "label": "Sales", "oldfieldtype": "Section Break", "options": "fa fa-tag" }, @@ -661,7 +641,7 @@ "default": "1", "fieldname": "is_sales_item", "fieldtype": "Check", - "label": "Is Sales Item" + "label": "Allow Sales" }, { "fieldname": "column_break3", @@ -696,10 +676,6 @@ "fieldtype": "Check", "label": "Enable Deferred Revenue" }, - { - "fieldname": "column_break_85", - "fieldtype": "Column Break" - }, { "depends_on": "enable_deferred_revenue", "fieldname": "no_of_months", @@ -726,10 +702,6 @@ "fieldtype": "Check", "label": "Enable Deferred Expense" }, - { - "fieldname": "column_break_88", - "fieldtype": "Column Break" - }, { "depends_on": "enable_deferred_expense", "fieldname": "no_of_months_exp", @@ -753,8 +725,8 @@ "collapsible": 1, "collapsible_depends_on": "taxes", "fieldname": "item_tax_section_break", - "fieldtype": "Section Break", - "label": "Item Tax", + "fieldtype": "Tab Break", + "label": "Tax", "oldfieldtype": "Section Break", "options": "fa fa-money" }, @@ -767,15 +739,6 @@ "oldfieldtype": "Table", "options": "Item Tax" }, - { - "collapsible": 1, - "depends_on": "eval:!doc.is_fixed_asset", - "fieldname": "inspection_criteria", - "fieldtype": "Section Break", - "label": "Inspection Criteria", - "oldfieldtype": "Section Break", - "options": "fa fa-search" - }, { "default": "0", "fieldname": "inspection_required_before_purchase", @@ -801,7 +764,7 @@ "collapsible": 1, "depends_on": "is_stock_item", "fieldname": "manufacturing", - "fieldtype": "Section Break", + "fieldtype": "Tab Break", "label": "Manufacturing", "oldfieldtype": "Section Break", "options": "fa fa-cogs" @@ -880,12 +843,6 @@ "label": "Default Manufacturer Part No", "read_only": 1 }, - { - "collapsible": 1, - "fieldname": "more_information_section", - "fieldtype": "Section Break", - "label": "More Information" - }, { "default": "0", "depends_on": "published_in_website", @@ -912,6 +869,40 @@ "fieldname": "allow_negative_stock", "fieldtype": "Check", "label": "Allow Negative Stock" + }, + { + "fieldname": "inventory_settings_section", + "fieldtype": "Section Break", + "label": "Inventory Settings" + }, + { + "fieldname": "purchasing_tab", + "fieldtype": "Tab Break", + "label": "Purchasing" + }, + { + "fieldname": "quality_tab", + "fieldtype": "Tab Break", + "label": "Quality" + }, + { + "fieldname": "details", + "fieldtype": "Tab Break", + "label": "Details", + "oldfieldtype": "Section Break", + "options": "fa fa-flag" + }, + { + "fieldname": "dashboard_tab", + "fieldtype": "Tab Break", + "label": "Dashboard", + "show_dashboard": 1 + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "accounting", + "fieldtype": "Tab Break", + "label": "Accounting" } ], "icon": "fa fa-tag", @@ -919,7 +910,7 @@ "image_field": "image", "index_web_pages_for_search": 1, "links": [], - "modified": "2022-04-28 04:52:10.272256", + "modified": "2022-06-15 09:02:06.177691", "modified_by": "Administrator", "module": "Stock", "name": "Item", diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index b2f5fb7d20..87fa72d74f 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -1155,7 +1155,7 @@ def check_stock_uom_with_bin(item, stock_uom): bin_list = frappe.db.sql( """ - select * from tabBin where item_code = %s + select * from `tabBin` where item_code = %s and (reserved_qty > 0 or ordered_qty > 0 or indented_qty > 0 or planned_qty > 0) and stock_uom != %s """, @@ -1171,7 +1171,7 @@ def check_stock_uom_with_bin(item, stock_uom): ) # No SLE or documents against item. Bin UOM can be changed safely. - frappe.db.sql("""update tabBin set stock_uom=%s where item_code=%s""", (stock_uom, item)) + frappe.db.sql("""update `tabBin` set stock_uom=%s where item_code=%s""", (stock_uom, item)) def get_item_defaults(item_code, company): diff --git a/erpnext/stock/doctype/item/regional/india.js b/erpnext/stock/doctype/item/regional/india.js deleted file mode 100644 index cceb1ec895..0000000000 --- a/erpnext/stock/doctype/item/regional/india.js +++ /dev/null @@ -1,15 +0,0 @@ -frappe.ui.form.on('Item', { - gst_hsn_code: function(frm) { - if ((!frm.doc.taxes || !frm.doc.taxes.length) && frm.doc.gst_hsn_code) { - frappe.db.get_doc("GST HSN Code", frm.doc.gst_hsn_code).then(hsn_doc => { - $.each(hsn_doc.taxes || [], function(i, tax) { - let a = frappe.model.add_child(cur_frm.doc, 'Item Tax', 'taxes'); - a.item_tax_template = tax.item_tax_template; - a.tax_category = tax.tax_category; - a.valid_from = tax.valid_from; - frm.refresh_field('taxes'); - }); - }); - } - }, -}); diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index aa0a5490b6..3366c737cb 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -381,8 +381,8 @@ class TestItem(FrappeTestCase): frappe.delete_doc_if_exists("Item Attribute", "Test Item Length") frappe.db.sql( - '''delete from `tabItem Variant Attribute` - where attribute="Test Item Length"''' + """delete from `tabItem Variant Attribute` + where attribute='Test Item Length' """ ) frappe.flags.attribute_values = None @@ -800,6 +800,7 @@ def create_item( item_code, is_stock_item=1, valuation_rate=0, + stock_uom="Nos", warehouse="_Test Warehouse - _TC", is_customer_provided_item=None, customer=None, @@ -815,6 +816,7 @@ def create_item( item.item_name = item_code item.description = item_code item.item_group = "All Item Groups" + item.stock_uom = stock_uom item.is_stock_item = is_stock_item item.is_fixed_asset = is_fixed_asset item.asset_category = asset_category diff --git a/erpnext/stock/doctype/item/test_records.json b/erpnext/stock/doctype/item/test_records.json index 91c77d5152..30eaed272e 100644 --- a/erpnext/stock/doctype/item/test_records.json +++ b/erpnext/stock/doctype/item/test_records.json @@ -11,7 +11,6 @@ "item_group": "_Test Item Group", "item_name": "_Test Item", "apply_warehouse_wise_reorder_level": 1, - "gst_hsn_code": "999800", "opening_stock": 10, "valuation_rate": 100, "item_defaults": [{ @@ -54,7 +53,6 @@ "item_group": "_Test Item Group", "item_name": "_Test Item 2", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "opening_stock": 10, "valuation_rate": 100, "item_defaults": [{ @@ -78,7 +76,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Item Home Desktop 100", "valuation_rate": 100, - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -107,7 +104,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Item Home Desktop 200", "stock_uom": "_Test UOM 1", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -129,7 +125,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Product Bundle Item", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -151,7 +146,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test FG Item", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -173,7 +167,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Non Stock Item", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -195,7 +188,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Serialized Item", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -218,7 +210,6 @@ "item_name": "_Test Serialized Item With Series", "serial_no_series": "ABCD.#####", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -240,7 +231,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Item Home Desktop Manufactured", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -262,7 +252,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test FG Item 2", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -284,7 +273,6 @@ "item_group": "_Test Item Group Desktops", "item_name": "_Test Variant Item", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "has_variants": 1, "item_defaults": [{ "company": "_Test Company", @@ -321,7 +309,6 @@ "item_group": "_Test Item Group", "item_name": "_Test Item Warehouse Group Wise Reorder", "apply_warehouse_wise_reorder_level": 1, - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse Group-C1 - _TC", @@ -353,7 +340,6 @@ "item_group": "_Test Item Group", "item_name": "_Test Item With Item Tax Template", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -388,7 +374,6 @@ "item_group": "_Test Item Group Tax Parent", "item_name": "_Test Item Inherit Group Item Tax Template 1", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -410,7 +395,6 @@ "item_group": "_Test Item Group Tax Child Override", "item_name": "_Test Item Inherit Group Item Tax Template 2", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -432,7 +416,6 @@ "item_group": "_Test Item Group Tax Child Override", "item_name": "_Test Item Override Group Item Tax Template", "stock_uom": "_Test UOM", - "gst_hsn_code": "999800", "item_defaults": [{ "company": "_Test Company", "default_warehouse": "_Test Warehouse - _TC", @@ -462,7 +445,6 @@ "item_code": "138-CMS Shoe", "item_group": "_Test Item Group", "item_name": "138-CMS Shoe", - "stock_uom": "_Test UOM", - "gst_hsn_code": "999800" + "stock_uom": "_Test UOM" } ] diff --git a/erpnext/stock/doctype/item_alternative/item_alternative.py b/erpnext/stock/doctype/item_alternative/item_alternative.py index 0f93bb9e95..fb1a28d846 100644 --- a/erpnext/stock/doctype/item_alternative/item_alternative.py +++ b/erpnext/stock/doctype/item_alternative/item_alternative.py @@ -77,7 +77,7 @@ def get_alternative_items(doctype, txt, searchfield, start, page_len, filters): union (select item_code from `tabItem Alternative` where alternative_item_code = %(item_code)s and item_code like %(txt)s - and two_way = 1) limit {0}, {1} + and two_way = 1) limit {1} offset {0} """.format( start, page_len ), diff --git a/erpnext/stock/doctype/item_alternative/test_item_alternative.py b/erpnext/stock/doctype/item_alternative/test_item_alternative.py index 32c58c5ae1..199641803e 100644 --- a/erpnext/stock/doctype/item_alternative/test_item_alternative.py +++ b/erpnext/stock/doctype/item_alternative/test_item_alternative.py @@ -1,24 +1,29 @@ # Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors # See license.txt -import json - import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import flt -from erpnext.buying.doctype.purchase_order.purchase_order import ( - make_purchase_receipt, - make_rm_stock_entry, +from erpnext.controllers.subcontracting_controller import make_rm_stock_entry +from erpnext.controllers.tests.test_subcontracting_controller import ( + get_subcontracting_order, + make_service_item, + set_backflush_based_on, ) -from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record from erpnext.manufacturing.doctype.work_order.work_order import make_stock_entry from erpnext.stock.doctype.item.test_item import create_item +from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import ( + EmptyStockReconciliationItemsError, +) from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import ( create_stock_reconciliation, ) +from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, +) class TestItemAlternative(FrappeTestCase): @@ -27,9 +32,7 @@ class TestItemAlternative(FrappeTestCase): make_items() def test_alternative_item_for_subcontract_rm(self): - frappe.db.set_value( - "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", "BOM" - ) + set_backflush_based_on("BOM") create_stock_reconciliation( item_code="Alternate Item For A RW 1", warehouse="_Test Warehouse - _TC", qty=5, rate=2000 @@ -39,15 +42,22 @@ class TestItemAlternative(FrappeTestCase): ) supplier_warehouse = "Test Supplier Warehouse - _TC" - po = create_purchase_order( - item="Test Finished Goods - A", - is_subcontracted=1, - qty=5, - rate=3000, - supplier_warehouse=supplier_warehouse, - ) - rm_item = [ + make_service_item("Subcontracted Service Item 1") + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 5, + "rate": 3000, + "fg_item": "Test Finished Goods - A", + "fg_item_qty": 5, + }, + ] + sco = get_subcontracting_order( + service_items=service_items, supplier_warehouse=supplier_warehouse + ) + rm_items = [ { "item_code": "Test Finished Goods - A", "rm_item_code": "Test FG A RW 1", @@ -70,14 +80,13 @@ class TestItemAlternative(FrappeTestCase): }, ] - rm_item_string = json.dumps(rm_item) reserved_qty_for_sub_contract = frappe.db.get_value( "Bin", {"item_code": "Test FG A RW 1", "warehouse": "_Test Warehouse - _TC"}, "reserved_qty_for_sub_contract", ) - se = frappe.get_doc(make_rm_stock_entry(po.name, rm_item_string)) + se = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) se.to_warehouse = supplier_warehouse se.insert() @@ -101,22 +110,17 @@ class TestItemAlternative(FrappeTestCase): after_transfer_reserved_qty_for_sub_contract, flt(reserved_qty_for_sub_contract - 5) ) - pr = make_purchase_receipt(po.name) - pr.save() + scr = make_subcontracting_receipt(sco.name) + scr.save() - pr = frappe.get_doc("Purchase Receipt", pr.name) + scr = frappe.get_doc("Subcontracting Receipt", scr.name) status = False - for d in pr.supplied_items: - if d.rm_item_code == "Alternate Item For A RW 1": + for item in scr.supplied_items: + if item.rm_item_code == "Alternate Item For A RW 1": status = True self.assertEqual(status, True) - frappe.db.set_value( - "Buying Settings", - None, - "backflush_raw_materials_of_subcontract_based_on", - "Material Transferred for Subcontract", - ) + set_backflush_based_on("Material Transferred for Subcontract") def test_alternative_item_for_production_rm(self): create_stock_reconciliation( @@ -180,9 +184,12 @@ def make_items(): if not frappe.db.exists("Item", item_code): create_item(item_code) - create_stock_reconciliation( - item_code="Test FG A RW 1", warehouse="_Test Warehouse - _TC", qty=10, rate=2000 - ) + try: + create_stock_reconciliation( + item_code="Test FG A RW 1", warehouse="_Test Warehouse - _TC", qty=10, rate=2000 + ) + except EmptyStockReconciliationItemsError: + pass if frappe.db.exists("Item", "Test FG A RW 1"): doc = frappe.get_doc("Item", "Test FG A RW 1") diff --git a/erpnext/stock/doctype/item_barcode/item_barcode.json b/erpnext/stock/doctype/item_barcode/item_barcode.json index eef70c95d0..56832f32d3 100644 --- a/erpnext/stock/doctype/item_barcode/item_barcode.json +++ b/erpnext/stock/doctype/item_barcode/item_barcode.json @@ -6,7 +6,8 @@ "engine": "InnoDB", "field_order": [ "barcode", - "barcode_type" + "barcode_type", + "uom" ], "fields": [ { @@ -24,11 +25,18 @@ "in_list_view": 1, "label": "Barcode Type", "options": "\nEAN\nUPC-A" + }, + { + "fieldname": "uom", + "fieldtype": "Link", + "in_list_view": 1, + "label": "UOM", + "options": "UOM" } ], "istable": 1, "links": [], - "modified": "2022-04-01 05:54:27.314030", + "modified": "2022-06-01 06:24:33.969534", "modified_by": "Administrator", "module": "Stock", "name": "Item Barcode", diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py index 1af9953451..979b5c4f83 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py @@ -4,7 +4,7 @@ import frappe from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_to_date, flt, now +from frappe.utils import add_days, add_to_date, flt, now from erpnext.accounts.doctype.account.test_account import create_account, get_inventory_account from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice @@ -24,7 +24,7 @@ class TestLandedCostVoucher(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", get_multiple_items=True, get_taxes_and_charges=True, ) @@ -120,6 +120,61 @@ class TestLandedCostVoucher(FrappeTestCase): expected_values[gle.account][1], gle.credit, msg=f"incorrect credit for {gle.account}" ) + def test_landed_cost_voucher_stock_impact(self): + "Test impact of LCV on future stock balances." + from erpnext.stock.doctype.item.test_item import make_item + + item = make_item("LCV Stock Item", {"is_stock_item": 1}) + warehouse = "Stores - _TC" + + pr1 = make_purchase_receipt( + item_code=item.name, + warehouse=warehouse, + qty=500, + rate=80, + posting_date=add_days(frappe.utils.nowdate(), -2), + ) + pr2 = make_purchase_receipt( + item_code=item.name, + warehouse=warehouse, + qty=100, + rate=80, + posting_date=frappe.utils.nowdate(), + ) + + last_sle = frappe.db.get_value( # SLE of second PR + "Stock Ledger Entry", + { + "voucher_type": pr2.doctype, + "voucher_no": pr2.name, + "item_code": item.name, + "warehouse": warehouse, + "is_cancelled": 0, + }, + fieldname=["qty_after_transaction", "stock_value"], + as_dict=1, + ) + + create_landed_cost_voucher("Purchase Receipt", pr1.name, pr1.company) + + last_sle_after_landed_cost = frappe.db.get_value( # SLE of second PR after LCV's effect + "Stock Ledger Entry", + { + "voucher_type": pr2.doctype, + "voucher_no": pr2.name, + "item_code": item.name, + "warehouse": warehouse, + "is_cancelled": 0, + }, + fieldname=["qty_after_transaction", "stock_value"], + as_dict=1, + ) + + self.assertEqual( + last_sle.qty_after_transaction, last_sle_after_landed_cost.qty_after_transaction + ) + self.assertEqual(last_sle_after_landed_cost.stock_value - last_sle.stock_value, 50.0) + def test_landed_cost_voucher_against_purchase_invoice(self): pi = make_purchase_invoice( @@ -195,7 +250,7 @@ class TestLandedCostVoucher(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", get_multiple_items=True, get_taxes_and_charges=True, do_not_submit=True, @@ -219,11 +274,11 @@ class TestLandedCostVoucher(FrappeTestCase): landed costs, this should be allowed for serial nos too. Case: - - receipt a serial no @ X rate - - delivery the serial no @ X rate - - add LCV to receipt X + Y - - LCV should be successful - - delivery should reflect X+Y valuation. + - receipt a serial no @ X rate + - delivery the serial no @ X rate + - add LCV to receipt X + Y + - LCV should be successful + - delivery should reflect X+Y valuation. """ serial_no = "LCV_TEST_SR_NO" item_code = "_Test Serialized Item" @@ -280,7 +335,7 @@ class TestLandedCostVoucher(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", do_not_save=True, ) pr.items[0].cost_center = "Main - TCP1" diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index a70ff171a9..2614a7f1f4 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -23,7 +23,7 @@ form_grid_templates = {"items": "templates/form_grid/material_request_grid.html" class MaterialRequest(BuyingController): def get_feed(self): - return _("{0}: {1}").format(self.status, self.material_request_type) + return def check_if_already_pulled(self): pass @@ -597,7 +597,7 @@ def make_stock_entry(source_name, target_doc=None): if source.material_request_type == "Customer Provided": target.purpose = "Material Receipt" - target.run_method("calculate_rate_and_amount") + target.set_missing_values() target.set_stock_entry_type() target.set_job_card_data() diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py index e9ccf5fc77..e5b9de8789 100644 --- a/erpnext/stock/doctype/packing_slip/packing_slip.py +++ b/erpnext/stock/doctype/packing_slip/packing_slip.py @@ -203,7 +203,7 @@ def item_details(doctype, txt, searchfield, start, page_len, filters): where name in ( select item_code FROM `tabDelivery Note Item` where parent= %s) and %s like "%s" %s - limit %s, %s """ + limit %s offset %s """ % ("%s", searchfield, "%s", get_match_cond(doctype), "%s", "%s"), - ((filters or {}).get("delivery_note"), "%%%s%%" % txt, start, page_len), + ((filters or {}).get("delivery_note"), "%%%s%%" % txt, page_len, start), ) diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js index 13b74b5eb1..799406cd79 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.js +++ b/erpnext/stock/doctype/pick_list/pick_list.js @@ -158,6 +158,19 @@ frappe.ui.form.on('Pick List', { get_query_filters: get_query_filters }); }); + }, + scan_barcode: (frm) => { + const opts = { + frm, + items_table_name: 'locations', + qty_field: 'picked_qty', + max_qty_field: 'qty', + dont_allow_new_row: true, + prompt_qty: frm.doc.prompt_qty, + serial_no_field: "not_supported", // doesn't make sense for picklist without a separate field. + }; + const barcode_scanner = new erpnext.utils.BarcodeScanner(opts); + barcode_scanner.process_scan(); } }); diff --git a/erpnext/stock/doctype/pick_list/pick_list.json b/erpnext/stock/doctype/pick_list/pick_list.json index e984c082d4..e1c3f0f506 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.json +++ b/erpnext/stock/doctype/pick_list/pick_list.json @@ -10,6 +10,7 @@ "company", "purpose", "customer", + "customer_name", "work_order", "material_request", "for_qty", @@ -17,6 +18,11 @@ "parent_warehouse", "get_item_locations", "section_break_6", + "scan_barcode", + "column_break_13", + "scan_mode", + "prompt_qty", + "section_break_15", "locations", "amended_from", "print_settings_section", @@ -36,6 +42,7 @@ "fieldtype": "Column Break" }, { + "depends_on": "eval:!doc.docstatus", "fieldname": "section_break_6", "fieldtype": "Section Break" }, @@ -126,11 +133,46 @@ "fieldtype": "Check", "label": "Group Same Items", "print_hide": 1 + }, + { + "fieldname": "section_break_15", + "fieldtype": "Section Break" + }, + { + "fieldname": "scan_barcode", + "fieldtype": "Data", + "label": "Scan Barcode", + "options": "Barcode" + }, + { + "fieldname": "column_break_13", + "fieldtype": "Column Break" + }, + { + "default": "0", + "description": "If checked, picked qty won't automatically be fulfilled on submit of pick list.", + "fieldname": "scan_mode", + "fieldtype": "Check", + "label": "Scan Mode" + }, + { + "default": "0", + "fieldname": "prompt_qty", + "fieldtype": "Check", + "label": "Prompt Qty" + }, + { + "depends_on": "eval:doc.purpose==='Delivery' && doc.customer", + "fetch_from": "customer.customer_name", + "fieldname": "customer_name", + "fieldtype": "Data", + "label": "Customer Name", + "read_only": 1 } ], "is_submittable": 1, "links": [], - "modified": "2022-04-21 07:56:40.646473", + "modified": "2022-07-19 11:03:04.442174", "modified_by": "Administrator", "module": "Stock", "name": "Pick List", @@ -202,4 +244,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index 70d2f23070..d31d695c80 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -41,8 +41,15 @@ class PickList(Document): def before_submit(self): update_sales_orders = set() for item in self.locations: - # if the user has not entered any picked qty, set it to stock_qty, before submit - if item.picked_qty == 0: + if self.scan_mode and item.picked_qty < item.stock_qty: + frappe.throw( + _( + "Row {0} picked quantity is less than the required quantity, additional {1} {2} required." + ).format(item.idx, item.stock_qty - item.picked_qty, item.stock_uom), + title=_("Pick List Incomplete"), + ) + elif not self.scan_mode and item.picked_qty == 0: + # if the user has not entered any picked qty, set it to stock_qty, before submit item.picked_qty = item.stock_qty if item.sales_order_item: @@ -672,8 +679,7 @@ def create_stock_entry(pick_list): else: stock_entry = update_stock_entry_items_with_no_reference(pick_list, stock_entry) - stock_entry.set_actual_qty() - stock_entry.calculate_rate_and_amount() + stock_entry.set_missing_values() return stock_entry.as_dict() @@ -693,7 +699,7 @@ def get_pending_work_orders(doctype, txt, searchfield, start, page_length, filte AND `company` = %(company)s AND `name` like %(txt)s ORDER BY - if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999), name + (case when locate(%(_txt)s, name) > 0 then locate(%(_txt)s, name) else 99999 end) name LIMIT %(start)s, %(page_length)s""", { diff --git a/erpnext/stock/doctype/pick_list_item/pick_list_item.json b/erpnext/stock/doctype/pick_list_item/pick_list_item.json index a96ebfcdee..a6f8c0db45 100644 --- a/erpnext/stock/doctype/pick_list_item/pick_list_item.json +++ b/erpnext/stock/doctype/pick_list_item/pick_list_item.json @@ -202,4 +202,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index 51ec598f72..312c166f8b 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -46,8 +46,6 @@ frappe.ui.form.on("Purchase Receipt", { erpnext.queries.setup_queries(frm, "Warehouse", function() { return erpnext.queries.warehouse(frm.doc); }); - - erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); }, refresh: function(frm) { @@ -200,7 +198,7 @@ erpnext.stock.PurchaseReceiptController = class PurchaseReceiptController extend cur_frm.add_custom_button(__('Reopen'), this.reopen_purchase_receipt, __("Status")) } - this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted); + this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_old_subcontracting_flow); } make_purchase_invoice() { @@ -298,10 +296,11 @@ cur_frm.fields_dict['items'].grid.get_field('bom').get_query = function(doc, cdt frappe.provide("erpnext.buying"); frappe.ui.form.on("Purchase Receipt", "is_subcontracted", function(frm) { - if (frm.doc.is_subcontracted) { + if (frm.doc.is_old_subcontracting_flow) { erpnext.buying.get_default_bom(frm); } - frm.toggle_reqd("supplier_warehouse", frm.doc.is_subcontracted); + + frm.toggle_reqd("supplier_warehouse", frm.doc.is_old_subcontracting_flow); }); frappe.ui.form.on('Purchase Receipt Item', { diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 983b62a09a..a70415dfc3 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -108,8 +108,6 @@ "terms_section_break", "tc_name", "terms", - "bill_no", - "bill_date", "more_info", "status", "amended_from", @@ -135,7 +133,8 @@ "transporter_name", "column_break5", "lr_no", - "lr_date" + "lr_date", + "is_old_subcontracting_flow" ], "fields": [ { @@ -444,7 +443,8 @@ "label": "Is Subcontracted", "oldfieldname": "is_subcontracted", "oldfieldtype": "Select", - "print_hide": 1 + "print_hide": 1, + "read_only": 1 }, { "depends_on": "eval:doc.is_subcontracted", @@ -867,24 +867,6 @@ "oldfieldname": "terms", "oldfieldtype": "Text Editor" }, - { - "fieldname": "bill_no", - "fieldtype": "Data", - "hidden": 1, - "label": "Bill No", - "oldfieldname": "bill_no", - "oldfieldtype": "Data", - "print_hide": 1 - }, - { - "fieldname": "bill_date", - "fieldtype": "Date", - "hidden": 1, - "label": "Bill Date", - "oldfieldname": "bill_date", - "oldfieldtype": "Date", - "print_hide": 1 - }, { "collapsible": 1, "fieldname": "more_info", @@ -1162,13 +1144,21 @@ { "fieldname": "dimension_col_break", "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "is_old_subcontracting_flow", + "fieldtype": "Check", + "hidden": 1, + "label": "Is Old Subcontracting Flow", + "read_only": 1 } ], "icon": "fa fa-truck", "idx": 261, "is_submittable": 1, "links": [], - "modified": "2022-04-26 13:41:32.625197", + "modified": "2022-06-15 15:43:40.664382", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index ec0e809aa6..84da3cc41d 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -123,6 +123,7 @@ class PurchaseReceipt(BuyingController): if getdate(self.posting_date) > getdate(nowdate()): throw(_("Posting Date cannot be future date")) + self.get_current_stock() self.reset_default_field_value("set_warehouse", "items", "warehouse") self.reset_default_field_value("rejected_warehouse", "items", "rejected_warehouse") self.reset_default_field_value("set_from_warehouse", "items", "from_warehouse") @@ -234,7 +235,7 @@ class PurchaseReceipt(BuyingController): self.make_gl_entries() self.repost_future_sle_and_gle() - self.set_consumed_qty_in_po() + self.set_consumed_qty_in_subcontract_order() def check_next_docstatus(self): submit_rv = frappe.db.sql( @@ -270,18 +271,7 @@ class PurchaseReceipt(BuyingController): self.repost_future_sle_and_gle() self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Repost Item Valuation") self.delete_auto_created_batches() - self.set_consumed_qty_in_po() - - @frappe.whitelist() - def get_current_stock(self): - for d in self.get("supplied_items"): - if self.supplier_warehouse: - bin = frappe.db.sql( - "select actual_qty from `tabBin` where item_code = %s and warehouse = %s", - (d.rm_item_code, self.supplier_warehouse), - as_dict=1, - ) - d.current_stock = bin and flt(bin[0]["actual_qty"]) or 0 + self.set_consumed_qty_in_subcontract_order() def get_gl_entries(self, warehouse_account=None): from erpnext.accounts.general_ledger import process_gl_map @@ -511,6 +501,7 @@ class PurchaseReceipt(BuyingController): and not d.is_fixed_asset and flt(d.qty) and provisional_accounting_for_non_stock_items + and d.get("provisional_expense_account") ): self.add_provisional_gl_entry( d, gl_entries, self.posting_date, d.get("provisional_expense_account") @@ -1036,6 +1027,7 @@ def make_stock_entry(source_name, target_doc=None): def set_missing_values(source, target): target.stock_entry_type = "Material Transfer" target.purpose = "Material Transfer" + target.set_missing_values() doclist = get_mapped_doc( "Purchase Receipt", diff --git a/erpnext/stock/doctype/purchase_receipt/regional/india.js b/erpnext/stock/doctype/purchase_receipt/regional/india.js deleted file mode 100644 index 2d982cc1bb..0000000000 --- a/erpnext/stock/doctype/purchase_receipt/regional/india.js +++ /dev/null @@ -1,3 +0,0 @@ -{% include "erpnext/regional/india/taxes.js" %} - -erpnext.setup_auto_gst_taxation('Purchase Receipt'); diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index ce3bd56d55..d0d115d96a 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -2,10 +2,6 @@ # License: GNU General Public License v3. See license.txt -import json -import unittest -from collections import defaultdict - import frappe from frappe.tests.utils import FrappeTestCase, change_settings from frappe.utils import add_days, cint, cstr, flt, today @@ -276,7 +272,7 @@ class TestPurchaseReceipt(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", get_multiple_items=True, get_taxes_and_charges=True, ) @@ -311,142 +307,6 @@ class TestPurchaseReceipt(FrappeTestCase): pr.cancel() self.assertTrue(get_gl_entries("Purchase Receipt", pr.name)) - def test_subcontracting(self): - from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - frappe.db.set_value( - "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", "BOM" - ) - - make_stock_entry( - item_code="_Test Item", qty=100, target="_Test Warehouse 1 - _TC", basic_rate=100 - ) - make_stock_entry( - item_code="_Test Item Home Desktop 100", - qty=100, - target="_Test Warehouse 1 - _TC", - basic_rate=100, - ) - pr = make_purchase_receipt(item_code="_Test FG Item", qty=10, rate=500, is_subcontracted=1) - self.assertEqual(len(pr.get("supplied_items")), 2) - - rm_supp_cost = sum(d.amount for d in pr.get("supplied_items")) - self.assertEqual(pr.get("items")[0].rm_supp_cost, flt(rm_supp_cost, 2)) - - pr.cancel() - - def test_subcontracting_gle_fg_item_rate_zero(self): - from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - frappe.db.set_value( - "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", "BOM" - ) - - se1 = make_stock_entry( - item_code="_Test Item", - target="Work In Progress - TCP1", - qty=100, - basic_rate=100, - company="_Test Company with perpetual inventory", - ) - - se2 = make_stock_entry( - item_code="_Test Item Home Desktop 100", - target="Work In Progress - TCP1", - qty=100, - basic_rate=100, - company="_Test Company with perpetual inventory", - ) - - pr = make_purchase_receipt( - item_code="_Test FG Item", - qty=10, - rate=0, - is_subcontracted=1, - company="_Test Company with perpetual inventory", - warehouse="Stores - TCP1", - supplier_warehouse="Work In Progress - TCP1", - ) - - gl_entries = get_gl_entries("Purchase Receipt", pr.name) - - self.assertFalse(gl_entries) - - pr.cancel() - se1.cancel() - se2.cancel() - - def test_subcontracting_over_receipt(self): - """ - Behaviour: Raise multiple PRs against one PO that in total - receive more than the required qty in the PO. - Expected Result: Error Raised for Over Receipt against PO. - """ - from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt - from erpnext.buying.doctype.purchase_order.purchase_order import ( - make_rm_stock_entry as make_subcontract_transfer_entry, - ) - from erpnext.buying.doctype.purchase_order.test_purchase_order import ( - create_purchase_order, - make_subcontracted_item, - update_backflush_based_on, - ) - from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - update_backflush_based_on("Material Transferred for Subcontract") - item_code = "_Test Subcontracted FG Item 1" - make_subcontracted_item(item_code=item_code) - - po = create_purchase_order( - item_code=item_code, - qty=1, - include_exploded_items=0, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - ) - - # stock raw materials in a warehouse before transfer - make_stock_entry( - target="_Test Warehouse - _TC", item_code="Test Extra Item 1", qty=10, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse - _TC", item_code="_Test FG Item", qty=1, basic_rate=100 - ) - make_stock_entry( - target="_Test Warehouse - _TC", item_code="Test Extra Item 2", qty=1, basic_rate=100 - ) - - rm_items = [ - { - "item_code": item_code, - "rm_item_code": po.supplied_items[0].rm_item_code, - "item_name": "_Test FG Item", - "qty": po.supplied_items[0].required_qty, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - { - "item_code": item_code, - "rm_item_code": po.supplied_items[1].rm_item_code, - "item_name": "Test Extra Item 1", - "qty": po.supplied_items[1].required_qty, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - }, - ] - rm_item_string = json.dumps(rm_items) - se = frappe.get_doc(make_subcontract_transfer_entry(po.name, rm_item_string)) - se.to_warehouse = "_Test Warehouse 1 - _TC" - se.save() - se.submit() - - pr1 = make_purchase_receipt(po.name) - pr2 = make_purchase_receipt(po.name) - - pr1.submit() - self.assertRaises(frappe.ValidationError, pr2.submit) - frappe.db.rollback() - def test_serial_no_supplier(self): pr = make_purchase_receipt(item_code="_Test Serialized Item With Series", qty=1) pr_row_1_serial_no = pr.get("items")[0].serial_no @@ -486,13 +346,13 @@ class TestPurchaseReceipt(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", ) return_pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", is_return=1, return_against=pr.name, qty=-2, @@ -573,13 +433,13 @@ class TestPurchaseReceipt(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", ) return_pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", is_return=1, return_against=pr.name, qty=-5, @@ -615,7 +475,7 @@ class TestPurchaseReceipt(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", qty=2, rejected_qty=2, rejected_warehouse=rejected_warehouse, @@ -624,7 +484,7 @@ class TestPurchaseReceipt(FrappeTestCase): return_pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", is_return=1, return_against=pr.name, qty=-2, @@ -951,7 +811,7 @@ class TestPurchaseReceipt(FrappeTestCase): cost_center=cost_center, company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", ) stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse) @@ -975,7 +835,7 @@ class TestPurchaseReceipt(FrappeTestCase): pr = make_purchase_receipt( company="_Test Company with perpetual inventory", warehouse="Stores - TCP1", - supplier_warehouse="Work in Progress - TCP1", + supplier_warehouse="Work In Progress - TCP1", ) stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse) @@ -1133,103 +993,6 @@ class TestPurchaseReceipt(FrappeTestCase): pr.cancel() pr1.cancel() - def test_subcontracted_pr_for_multi_transfer_batches(self): - from erpnext.buying.doctype.purchase_order.purchase_order import ( - make_purchase_receipt, - make_rm_stock_entry, - ) - from erpnext.buying.doctype.purchase_order.test_purchase_order import ( - create_purchase_order, - update_backflush_based_on, - ) - from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - update_backflush_based_on("Material Transferred for Subcontract") - item_code = "_Test Subcontracted FG Item 3" - - make_item( - "Sub Contracted Raw Material 3", - {"is_stock_item": 1, "is_sub_contracted_item": 1, "has_batch_no": 1, "create_new_batch": 1}, - ) - - create_subcontracted_item( - item_code=item_code, has_batch_no=1, raw_materials=["Sub Contracted Raw Material 3"] - ) - - order_qty = 500 - po = create_purchase_order( - item_code=item_code, - qty=order_qty, - is_subcontracted=1, - supplier_warehouse="_Test Warehouse 1 - _TC", - ) - - ste1 = make_stock_entry( - target="_Test Warehouse - _TC", - item_code="Sub Contracted Raw Material 3", - qty=300, - basic_rate=100, - ) - ste2 = make_stock_entry( - target="_Test Warehouse - _TC", - item_code="Sub Contracted Raw Material 3", - qty=200, - basic_rate=100, - ) - - transferred_batch = {ste1.items[0].batch_no: 300, ste2.items[0].batch_no: 200} - - rm_items = [ - { - "item_code": item_code, - "rm_item_code": "Sub Contracted Raw Material 3", - "item_name": "_Test Item", - "qty": 300, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - "name": po.supplied_items[0].name, - }, - { - "item_code": item_code, - "rm_item_code": "Sub Contracted Raw Material 3", - "item_name": "_Test Item", - "qty": 200, - "warehouse": "_Test Warehouse - _TC", - "stock_uom": "Nos", - "name": po.supplied_items[0].name, - }, - ] - - rm_item_string = json.dumps(rm_items) - se = frappe.get_doc(make_rm_stock_entry(po.name, rm_item_string)) - self.assertEqual(len(se.items), 2) - se.items[0].batch_no = ste1.items[0].batch_no - se.items[1].batch_no = ste2.items[0].batch_no - se.submit() - - supplied_qty = frappe.db.get_value( - "Purchase Order Item Supplied", - {"parent": po.name, "rm_item_code": "Sub Contracted Raw Material 3"}, - "supplied_qty", - ) - - self.assertEqual(supplied_qty, 500.00) - - pr = make_purchase_receipt(po.name) - pr.save() - self.assertEqual(len(pr.supplied_items), 2) - - for row in pr.supplied_items: - self.assertEqual(transferred_batch.get(row.batch_no), row.consumed_qty) - - update_backflush_based_on("BOM") - - pr.delete() - se.cancel() - ste2.cancel() - ste1.cancel() - po.cancel() - def test_po_to_pi_and_po_to_pr_worflow_full(self): """Test following behaviour: - Create PO @@ -1285,6 +1048,14 @@ class TestPurchaseReceipt(FrappeTestCase): from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import ( make_purchase_invoice as create_purchase_invoice, ) + from erpnext.accounts.party import add_party_account + + add_party_account( + "Supplier", + "_Test Supplier USD", + "_Test Company with perpetual inventory", + "_Test Payable USD - TCP1", + ) pi = create_purchase_invoice( company="_Test Company with perpetual inventory", @@ -1293,6 +1064,7 @@ class TestPurchaseReceipt(FrappeTestCase): expense_account="_Test Account Cost for Goods Sold - TCP1", currency="USD", conversion_rate=70, + supplier="_Test Supplier USD", ) pr = create_purchase_receipt(pi.name) @@ -1559,43 +1331,5 @@ def make_purchase_receipt(**args): return pr -def create_subcontracted_item(**args): - from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom - - args = frappe._dict(args) - - if not frappe.db.exists("Item", args.item_code): - make_item( - args.item_code, - { - "is_stock_item": 1, - "is_sub_contracted_item": 1, - "has_batch_no": args.get("has_batch_no") or 0, - }, - ) - - if not args.raw_materials: - if not frappe.db.exists("Item", "Test Extra Item 1"): - make_item( - "Test Extra Item 1", - { - "is_stock_item": 1, - }, - ) - - if not frappe.db.exists("Item", "Test Extra Item 2"): - make_item( - "Test Extra Item 2", - { - "is_stock_item": 1, - }, - ) - - args.raw_materials = ["_Test FG Item", "Test Extra Item 1"] - - if not frappe.db.get_value("BOM", {"item": args.item_code}, "name"): - make_bom(item=args.item_code, raw_materials=args.get("raw_materials")) - - test_dependencies = ["BOM", "Item Price", "Location"] test_records = frappe.get_test_records("Purchase Receipt") diff --git a/erpnext/stock/doctype/purchase_receipt/test_records.json b/erpnext/stock/doctype/purchase_receipt/test_records.json index 990ad12b30..e7ea9af6b9 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_records.json +++ b/erpnext/stock/doctype/purchase_receipt/test_records.json @@ -83,37 +83,5 @@ } ], "supplier": "_Test Supplier" - }, - - { - "buying_price_list": "_Test Price List", - "company": "_Test Company", - "conversion_rate": 1.0, - "currency": "INR", - "doctype": "Purchase Receipt", - "base_grand_total": 5000.0, - "is_subcontracted": 1, - "base_net_total": 5000.0, - "items": [ - { - "base_amount": 5000.0, - "conversion_factor": 1.0, - "description": "_Test FG Item", - "doctype": "Purchase Receipt Item", - "item_code": "_Test FG Item", - "item_name": "_Test FG Item", - "parentfield": "items", - "qty": 10.0, - "rate": 500.0, - "received_qty": 10.0, - "rejected_qty": 0.0, - "stock_uom": "_Test UOM", - "uom": "_Test UOM", - "warehouse": "_Test Warehouse - _TC", - "cost_center": "Main - _TC" - } - ], - "supplier": "_Test Supplier", - "supplier_warehouse": "_Test Warehouse - _TC" } ] \ No newline at end of file diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index 1c65ac86c9..c97dbee911 100644 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -252,6 +252,7 @@ "width": "100px" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -265,6 +266,7 @@ "width": "100px" }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "Conversion Factor", @@ -547,6 +549,7 @@ "read_only": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_qty", "fieldtype": "Float", "label": "Accepted Qty in Stock UOM", @@ -642,12 +645,15 @@ "print_hide": 1 }, { + "depends_on": "eval:parent.is_old_subcontracting_flow", "fieldname": "bom", "fieldtype": "Link", "label": "BOM", "no_copy": 1, "options": "BOM", - "print_hide": 1 + "print_hide": 1, + "read_only": 1, + "read_only_depends_on": "eval:!parent.is_old_subcontracting_flow" }, { "default": "0", @@ -878,7 +884,7 @@ "fieldtype": "Column Break" }, { - "depends_on": "returned_qty", + "depends_on": "doc.returned_qty", "fieldname": "returned_qty", "fieldtype": "Float", "label": "Returned Qty in Stock UOM", @@ -887,6 +893,7 @@ "read_only": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "received_stock_qty", "fieldtype": "Float", "label": "Received Qty in Stock UOM", @@ -994,7 +1001,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2022-04-11 13:07:32.061402", + "modified": "2022-06-17 05:32:16.483178", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt Item", diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py index 331d3e812b..13abfad455 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py @@ -232,7 +232,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters): FROM `tab{doc}` WHERE parent=%(parent)s and docstatus < 2 and item_code like %(txt)s {qi_condition} {cond} {mcond} - ORDER BY item_code limit {start}, {page_len} + ORDER BY item_code limit {page_len} offset {start} """.format( doc=filters.get("from"), cond=cond, @@ -252,7 +252,7 @@ def item_query(doctype, txt, searchfield, start, page_len, filters): WHERE name = %(reference_name)s and docstatus < 2 and production_item like %(txt)s {qi_condition} {cond} {mcond} ORDER BY production_item - LIMIT {start}, {page_len} + limit {page_len} offset {start} """.format( doc=filters.get("from"), cond=cond, diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json index 156f77f5ac..e093933829 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json @@ -25,7 +25,8 @@ "items_to_be_repost", "affected_transactions", "distinct_item_and_warehouse", - "current_index" + "current_index", + "gl_reposting_index" ], "fields": [ { @@ -181,12 +182,20 @@ "label": "Affected Transactions", "no_copy": 1, "read_only": 1 + }, + { + "default": "0", + "fieldname": "gl_reposting_index", + "fieldtype": "Int", + "hidden": 1, + "label": "GL reposting index", + "read_only": 1 } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-04-18 14:08:08.821602", + "modified": "2022-06-13 12:20:22.182322", "modified_by": "Administrator", "module": "Stock", "name": "Repost Item Valuation", diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index 236b944c3a..7c57ecd73e 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -3,9 +3,11 @@ import frappe from frappe import _ +from frappe.exceptions import QueryDeadlockError, QueryTimeoutError from frappe.model.document import Document from frappe.utils import cint, get_link_to_form, get_weekday, now, nowtime from frappe.utils.user import get_users_with_role +from rq.timeouts import JobTimeoutException import erpnext from erpnext.accounts.utils import get_future_stock_vouchers, repost_gle_for_stock_vouchers @@ -15,6 +17,8 @@ from erpnext.stock.stock_ledger import ( repost_future_sle, ) +RecoverableErrors = (JobTimeoutException, QueryDeadlockError, QueryTimeoutError) + class RepostItemValuation(Document): def validate(self): @@ -83,6 +87,7 @@ class RepostItemValuation(Document): self.current_index = 0 self.distinct_item_and_warehouse = None self.items_to_be_repost = None + self.gl_reposting_index = 0 self.db_update() def deduplicate_similar_repost(self): @@ -132,7 +137,12 @@ def repost(doc): doc.set_status("Completed") - except Exception: + except Exception as e: + if frappe.flags.in_test: + # Don't silently fail in tests, + # there is no reason for reposts to fail in CI + raise + frappe.db.rollback() traceback = frappe.get_traceback() doc.log_error("Unable to repost item valuation") @@ -142,9 +152,9 @@ def repost(doc): message += "
    " + "Traceback:
    " + traceback frappe.db.set_value(doc.doctype, doc.name, "error_log", message) - notify_error_to_stock_managers(doc, message) - doc.set_status("Failed") - raise + if not isinstance(e, RecoverableErrors): + notify_error_to_stock_managers(doc, message) + doc.set_status("Failed") finally: if not frappe.flags.in_test: frappe.db.commit() @@ -188,6 +198,7 @@ def repost_gl_entries(doc): directly_dependent_transactions + list(repost_affected_transaction), doc.posting_date, doc.company, + repost_doc=doc, ) diff --git a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py index 3184f69aa4..edd2553d5d 100644 --- a/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/test_repost_item_valuation.py @@ -2,10 +2,14 @@ # See license.txt +from unittest.mock import MagicMock, call + import frappe from frappe.tests.utils import FrappeTestCase from frappe.utils import nowdate +from frappe.utils.data import add_to_date, today +from erpnext.accounts.utils import repost_gle_for_stock_vouchers from erpnext.controllers.stock_controller import create_item_wise_repost_entries from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt @@ -13,10 +17,11 @@ from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import ( in_configured_timeslot, ) from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry +from erpnext.stock.tests.test_utils import StockTestMixin from erpnext.stock.utils import PendingRepostingError -class TestRepostItemValuation(FrappeTestCase): +class TestRepostItemValuation(FrappeTestCase, StockTestMixin): def tearDown(self): frappe.flags.dont_execute_stock_reposts = False @@ -193,3 +198,77 @@ class TestRepostItemValuation(FrappeTestCase): [["a", "b"], ["c", "d"]], sorted(frappe.parse_json(frappe.as_json(set([("a", "b"), ("c", "d")])))), ) + + def test_gl_repost_progress(self): + from erpnext.accounts import utils + + # lower numbers to simplify test + orig_chunk_size = utils.GL_REPOSTING_CHUNK + utils.GL_REPOSTING_CHUNK = 1 + self.addCleanup(setattr, utils, "GL_REPOSTING_CHUNK", orig_chunk_size) + + doc = frappe.new_doc("Repost Item Valuation") + doc.db_set = MagicMock() + + vouchers = [] + company = "_Test Company with perpetual inventory" + posting_date = today() + + for _ in range(3): + se = make_stock_entry(company=company, qty=1, rate=2, target="Stores - TCP1") + vouchers.append((se.doctype, se.name)) + + repost_gle_for_stock_vouchers(stock_vouchers=vouchers, posting_date=posting_date, repost_doc=doc) + self.assertIn(call("gl_reposting_index", 1), doc.db_set.mock_calls) + doc.db_set.reset_mock() + + doc.gl_reposting_index = 1 + repost_gle_for_stock_vouchers(stock_vouchers=vouchers, posting_date=posting_date, repost_doc=doc) + + self.assertNotIn(call("gl_reposting_index", 1), doc.db_set.mock_calls) + + def test_gl_complete_gl_reposting(self): + from erpnext.accounts import utils + + # lower numbers to simplify test + orig_chunk_size = utils.GL_REPOSTING_CHUNK + utils.GL_REPOSTING_CHUNK = 2 + self.addCleanup(setattr, utils, "GL_REPOSTING_CHUNK", orig_chunk_size) + + item = self.make_item().name + + company = "_Test Company with perpetual inventory" + + for _ in range(10): + make_stock_entry(item=item, company=company, qty=1, rate=10, target="Stores - TCP1") + + # consume + consumption = make_stock_entry(item=item, company=company, qty=1, source="Stores - TCP1") + + self.assertGLEs( + consumption, + [{"credit": 10, "debit": 0}], + gle_filters={"account": "Stock In Hand - TCP1"}, + ) + + # backdated receipt + backdated_receipt = make_stock_entry( + item=item, + company=company, + qty=1, + rate=50, + target="Stores - TCP1", + posting_date=add_to_date(today(), days=-1), + ) + self.assertGLEs( + backdated_receipt, + [{"credit": 0, "debit": 50}], + gle_filters={"account": "Stock In Hand - TCP1"}, + ) + + # check that original consumption GLe is updated + self.assertGLEs( + consumption, + [{"credit": 50, "debit": 0}], + gle_filters={"account": "Stock In Hand - TCP1"}, + ) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 7101190b6b..6042ed4ac5 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -687,7 +687,10 @@ def update_serial_nos_after_submit(controller, parentfield): update_rejected_serial_nos = ( True - if (controller.doctype in ("Purchase Receipt", "Purchase Invoice") and d.rejected_qty) + if ( + controller.doctype in ("Purchase Receipt", "Purchase Invoice", "Subcontracting Receipt") + and d.rejected_qty + ) else False ) accepted_serial_nos_updated = False @@ -700,7 +703,11 @@ def update_serial_nos_after_submit(controller, parentfield): qty = d.stock_qty else: warehouse = d.warehouse - qty = d.qty if controller.doctype == "Stock Reconciliation" else d.stock_qty + qty = ( + d.qty + if controller.doctype in ["Stock Reconciliation", "Subcontracting Receipt"] + else d.stock_qty + ) for sle in stock_ledger_entries: if sle.voucher_detail_no == d.name: if ( diff --git a/erpnext/stock/doctype/shipment/test_shipment.py b/erpnext/stock/doctype/shipment/test_shipment.py index ae97e7af36..726dff4f31 100644 --- a/erpnext/stock/doctype/shipment/test_shipment.py +++ b/erpnext/stock/doctype/shipment/test_shipment.py @@ -174,7 +174,6 @@ def create_shipment_customer(customer_name): customer.customer_type = "Company" customer.customer_group = "All Customer Groups" customer.territory = "All Territories" - customer.gst_category = "Unregistered" customer.insert() return customer diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 1df56ef7b4..1c514a90ee 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -470,7 +470,9 @@ frappe.ui.form.on('Stock Entry', { }, callback: function(r) { if (!r.exc) { - $.extend(child, r.message); + ["actual_qty", "basic_rate"].forEach((field) => { + frappe.model.set_value(cdt, cdn, field, (r.message[field] || 0.0)); + }); frm.events.calculate_basic_amount(frm, child); } } @@ -611,7 +613,25 @@ frappe.ui.form.on('Stock Entry', { apply_putaway_rule: function (frm) { if (frm.doc.apply_putaway_rule) erpnext.apply_putaway_rule(frm, frm.doc.purpose); - } + }, + + purchase_order: (frm) => { + if (frm.doc.purchase_order) { + frm.set_value("subcontracting_order", ""); + } + }, + + subcontracting_order: (frm) => { + if (frm.doc.subcontracting_order) { + frm.set_value("purchase_order", ""); + erpnext.utils.map_current_doc({ + method: 'erpnext.stock.doctype.stock_entry.stock_entry.get_items_from_subcontracting_order', + source_name: frm.doc.subcontracting_order, + target_doc: frm, + freeze: true, + }); + } + }, }); frappe.ui.form.on('Stock Entry Detail', { @@ -778,7 +798,16 @@ erpnext.stock.StockEntry = class StockEntry extends erpnext.stock.StockControlle return { "filters": { "docstatus": 1, - "is_subcontracted": 1, + "is_old_subcontracting_flow": 1, + "company": me.frm.doc.company + } + }; + }); + + this.frm.set_query("subcontracting_order", function() { + return { + "filters": { + "docstatus": 1, "company": me.frm.doc.company } }; @@ -799,7 +828,12 @@ erpnext.stock.StockEntry = class StockEntry extends erpnext.stock.StockControlle } } - this.frm.add_fetch("purchase_order", "supplier", "supplier"); + if (me.frm.doc.purchase_order) { + this.frm.add_fetch("purchase_order", "supplier", "supplier"); + } + else { + this.frm.add_fetch("subcontracting_order", "supplier", "supplier"); + } frappe.dynamic_link = { doc: this.frm.doc, fieldname: 'supplier', doctype: 'Supplier' } this.frm.set_query("supplier_address", erpnext.queries.address_query) @@ -1057,8 +1091,8 @@ function attach_bom_items(bom_no) { function check_should_not_attach_bom_items(bom_no) { return ( - bom_no === undefined || - (erpnext.stock.bom && erpnext.stock.bom.name === bom_no) + bom_no === undefined || + (erpnext.stock.bom && erpnext.stock.bom.name === bom_no) ); } diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json index f56e059f81..abe98e2933 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.json +++ b/erpnext/stock/doctype/stock_entry/stock_entry.json @@ -15,6 +15,7 @@ "add_to_transit", "work_order", "purchase_order", + "subcontracting_order", "delivery_note_no", "sales_invoice_no", "pick_list", @@ -147,12 +148,19 @@ "search_index": 1 }, { - "depends_on": "eval:doc.purpose==\"Send to Subcontractor\"", - "fieldname": "purchase_order", - "fieldtype": "Link", - "label": "Purchase Order", - "options": "Purchase Order" + "depends_on": "eval:doc.purpose==\"Send to Subcontractor\"", + "fieldname": "purchase_order", + "fieldtype": "Link", + "label": "Purchase Order", + "options": "Purchase Order" }, + { + "depends_on": "eval:doc.purpose==\"Send to Subcontractor\"", + "fieldname": "subcontracting_order", + "fieldtype": "Link", + "label": "Subcontracting Order", + "options": "Subcontracting Order" + }, { "depends_on": "eval:doc.purpose==\"Sales Return\"", "fieldname": "delivery_note_no", diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 27a6eaf08b..f719c1efda 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -62,6 +62,27 @@ form_grid_templates = {"items": "templates/form_grid/stock_entry_grid.html"} class StockEntry(StockController): + def __init__(self, *args, **kwargs): + super(StockEntry, self).__init__(*args, **kwargs) + if self.purchase_order: + self.subcontract_data = frappe._dict( + { + "order_doctype": "Purchase Order", + "order_field": "purchase_order", + "rm_detail_field": "po_detail", + "order_supplied_items_field": "Purchase Order Item Supplied", + } + ) + else: + self.subcontract_data = frappe._dict( + { + "order_doctype": "Subcontracting Order", + "order_field": "subcontracting_order", + "rm_detail_field": "sco_rm_detail", + "order_supplied_items_field": "Subcontracting Order Supplied Item", + } + ) + def get_feed(self): return self.stock_entry_type @@ -134,8 +155,9 @@ class StockEntry(StockController): update_serial_nos_after_submit(self, "items") self.update_work_order() - self.validate_purchase_order() - self.update_purchase_order_supplied_items() + self.validate_subcontract_order() + self.update_subcontract_order_supplied_items() + self.update_subcontracting_order_status() self.make_gl_entries() @@ -154,7 +176,8 @@ class StockEntry(StockController): self.set_material_request_transfer_status("Completed") def on_cancel(self): - self.update_purchase_order_supplied_items() + self.update_subcontract_order_supplied_items() + self.update_subcontracting_order_status() if self.work_order and self.purpose == "Material Consumption for Manufacture": self.validate_work_order_status() @@ -298,19 +321,17 @@ class StockEntry(StockController): for_update=True, ) - for f in ( - "uom", - "stock_uom", - "description", - "item_name", - "expense_account", - "cost_center", - "conversion_factor", - ): - if f == "stock_uom" or not item.get(f): - item.set(f, item_details.get(f)) - if f == "conversion_factor" and item.uom == item_details.get("stock_uom"): - item.set(f, item_details.get(f)) + reset_fields = ("stock_uom", "item_name") + for field in reset_fields: + item.set(field, item_details.get(field)) + + update_fields = ("uom", "description", "expense_account", "cost_center", "conversion_factor") + + for field in update_fields: + if not item.get(field): + item.set(field, item_details.get(field)) + if field == "conversion_factor" and item.uom == item_details.get("stock_uom"): + item.set(field, item_details.get(field)) if not item.transfer_qty and item.qty: item.transfer_qty = flt( @@ -457,10 +478,10 @@ class StockEntry(StockController): if not d.s_warehouse: frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx)) - if ( - cstr(d.s_warehouse) == cstr(d.t_warehouse) - and not self.purpose == "Material Transfer for Manufacture" - ): + if cstr(d.s_warehouse) == cstr(d.t_warehouse) and self.purpose not in [ + "Material Transfer for Manufacture", + "Material Transfer", + ]: frappe.throw(_("Source and target warehouse cannot be same for row {0}").format(d.idx)) if not (d.s_warehouse or d.t_warehouse): @@ -592,27 +613,12 @@ class StockEntry(StockController): ) + "

    " + _("Available quantity is {0}, you need {1}").format( - frappe.bold(d.actual_qty), frappe.bold(d.transfer_qty) + frappe.bold(flt(d.actual_qty, d.precision("actual_qty"))), frappe.bold(d.transfer_qty) ), NegativeStockError, title=_("Insufficient Stock"), ) - def set_serial_nos(self, work_order): - previous_se = frappe.db.get_value( - "Stock Entry", - {"work_order": work_order, "purpose": "Material Transfer for Manufacture"}, - "name", - ) - - for d in self.get("items"): - transferred_serial_no = frappe.db.get_value( - "Stock Entry Detail", {"parent": previous_se, "item_code": d.item_code}, "serial_no" - ) - - if transferred_serial_no: - d.serial_no = transferred_serial_no - @frappe.whitelist() def get_stock_and_rate(self): """ @@ -672,7 +678,8 @@ class StockEntry(StockController): batch_no=d.batch_no, ) - d.basic_rate = flt(d.basic_rate, d.precision("basic_rate")) + # do not round off basic rate to avoid precision loss + d.basic_rate = flt(d.basic_rate) if d.is_process_loss: d.basic_rate = flt(0.0) d.basic_amount = flt(flt(d.transfer_qty) * flt(d.basic_rate), d.precision("basic_amount")) @@ -720,7 +727,7 @@ class StockEntry(StockController): total_fg_qty = sum([flt(d.transfer_qty) for d in self.items if d.is_finished_item]) return flt(outgoing_items_cost / total_fg_qty) - def get_basic_rate_for_manufactured_item(self, finished_item_qty, outgoing_items_cost=0): + def get_basic_rate_for_manufactured_item(self, finished_item_qty, outgoing_items_cost=0) -> float: scrap_items_cost = sum([flt(d.basic_amount) for d in self.get("items") if d.is_scrap_item]) # Get raw materials cost from BOM if multiple material consumption entries @@ -760,10 +767,8 @@ class StockEntry(StockController): for d in self.get("items"): if d.transfer_qty: d.amount = flt(flt(d.basic_amount) + flt(d.additional_cost), d.precision("amount")) - d.valuation_rate = flt( - flt(d.basic_rate) + (flt(d.additional_cost) / flt(d.transfer_qty)), - d.precision("valuation_rate"), - ) + # Do not round off valuation rate to avoid precision loss + d.valuation_rate = flt(d.basic_rate) + (flt(d.additional_cost) / flt(d.transfer_qty)) def set_total_incoming_outgoing_value(self): self.total_incoming_value = self.total_outgoing_value = 0.0 @@ -810,8 +815,8 @@ class StockEntry(StockController): serial_nos.append(sn) - def validate_purchase_order(self): - """Throw exception if more raw material is transferred against Purchase Order than in + def validate_subcontract_order(self): + """Throw exception if more raw material is transferred against Subcontract Order than in the raw materials supplied table""" backflush_raw_materials_based_on = frappe.db.get_single_value( "Buying Settings", "backflush_raw_materials_of_subcontract_based_on" @@ -819,24 +824,29 @@ class StockEntry(StockController): qty_allowance = flt(frappe.db.get_single_value("Buying Settings", "over_transfer_allowance")) - if not (self.purpose == "Send to Subcontractor" and self.purchase_order): + if not (self.purpose == "Send to Subcontractor" and self.get(self.subcontract_data.order_field)): return if backflush_raw_materials_based_on == "BOM": - purchase_order = frappe.get_doc("Purchase Order", self.purchase_order) + subcontract_order = frappe.get_doc( + self.subcontract_data.order_doctype, self.get(self.subcontract_data.order_field) + ) for se_item in self.items: item_code = se_item.original_item or se_item.item_code precision = cint(frappe.db.get_default("float_precision")) or 3 required_qty = sum( - [flt(d.required_qty) for d in purchase_order.supplied_items if d.rm_item_code == item_code] + [flt(d.required_qty) for d in subcontract_order.supplied_items if d.rm_item_code == item_code] ) total_allowed = required_qty + (required_qty * (qty_allowance / 100)) if not required_qty: bom_no = frappe.db.get_value( - "Purchase Order Item", - {"parent": self.purchase_order, "item_code": se_item.subcontracted_item}, + f"{self.subcontract_data.order_doctype} Item", + { + "parent": self.get(self.subcontract_data.order_field), + "item_code": se_item.subcontracted_item, + }, "bom", ) @@ -848,7 +858,7 @@ class StockEntry(StockController): required_qty = sum( [ flt(d.required_qty) - for d in purchase_order.supplied_items + for d in subcontract_order.supplied_items if d.rm_item_code == original_item_code ] ) @@ -857,26 +867,57 @@ class StockEntry(StockController): if not required_qty: frappe.throw( - _("Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1}").format( - se_item.item_code, self.purchase_order + _("Item {0} not found in 'Raw Materials Supplied' table in {1} {2}").format( + se_item.item_code, + self.subcontract_data.order_doctype, + self.get(self.subcontract_data.order_field), ) ) - total_supplied = frappe.db.sql( - """select sum(transfer_qty) - from `tabStock Entry Detail`, `tabStock Entry` - where `tabStock Entry`.purchase_order = %s - and `tabStock Entry`.docstatus = 1 - and `tabStock Entry Detail`.item_code = %s - and `tabStock Entry Detail`.parent = `tabStock Entry`.name""", - (self.purchase_order, se_item.item_code), - )[0][0] + + parent = frappe.qb.DocType("Stock Entry") + child = frappe.qb.DocType("Stock Entry Detail") + + conditions = ( + (parent.docstatus == 1) + & (child.item_code == se_item.item_code) + & ( + (parent.purchase_order == self.purchase_order) + if self.subcontract_data.order_doctype == "Purchase Order" + else (parent.subcontracting_order == self.subcontracting_order) + ) + ) + + total_supplied = ( + frappe.qb.from_(parent) + .inner_join(child) + .on(parent.name == child.parent) + .select(Sum(child.transfer_qty)) + .where(conditions) + ).run()[0][0] if flt(total_supplied, precision) > flt(total_allowed, precision): frappe.throw( - _("Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3}").format( - se_item.idx, se_item.item_code, total_allowed, self.purchase_order + _("Row {0}# Item {1} cannot be transferred more than {2} against {3} {4}").format( + se_item.idx, + se_item.item_code, + total_allowed, + self.subcontract_data.order_doctype, + self.get(self.subcontract_data.order_field), ) ) + elif not se_item.get(self.subcontract_data.rm_detail_field): + filters = { + "parent": self.get(self.subcontract_data.order_field), + "docstatus": 1, + "rm_item_code": se_item.item_code, + "main_item_code": se_item.subcontracted_item, + } + + order_rm_detail = frappe.db.get_value( + self.subcontract_data.order_supplied_items_field, filters, "name" + ) + if order_rm_detail: + se_item.db_set(self.subcontract_data.rm_detail_field, order_rm_detail) elif backflush_raw_materials_based_on == "Material Transferred for Subcontract": for row in self.items: if not row.subcontracted_item: @@ -885,17 +926,19 @@ class StockEntry(StockController): row.idx, frappe.bold(row.item_code) ) ) - elif not row.po_detail: + elif not row.get(self.subcontract_data.rm_detail_field): filters = { - "parent": self.purchase_order, + "parent": self.get(self.subcontract_data.order_field), "docstatus": 1, "rm_item_code": row.item_code, "main_item_code": row.subcontracted_item, } - po_detail = frappe.db.get_value("Purchase Order Item Supplied", filters, "name") - if po_detail: - row.db_set("po_detail", po_detail) + order_rm_detail = frappe.db.get_value( + self.subcontract_data.order_supplied_items_field, filters, "name" + ) + if order_rm_detail: + row.db_set(self.subcontract_data.rm_detail_field, order_rm_detail) def validate_bom(self): for d in self.get("items"): @@ -1142,7 +1185,7 @@ class StockEntry(StockController): if self.job_card: job_doc = frappe.get_doc("Job Card", self.job_card) job_doc.set_transferred_qty(update_status=True) - job_doc.set_transferred_qty_in_job_card(self) + job_doc.set_transferred_qty_in_job_card_item(self) if self.work_order: pro_doc = frappe.get_doc("Work Order", self.work_order) @@ -1242,11 +1285,13 @@ class StockEntry(StockController): args.batch_no = get_batch_no(args["item_code"], args["s_warehouse"], args["qty"]) if ( - self.purpose == "Send to Subcontractor" and self.get("purchase_order") and args.get("item_code") + self.purpose == "Send to Subcontractor" + and self.get(self.subcontract_data.order_field) + and args.get("item_code") ): subcontract_items = frappe.get_all( - "Purchase Order Item Supplied", - {"parent": self.purchase_order, "rm_item_code": args.get("item_code")}, + self.subcontract_data.order_supplied_items_field, + {"parent": self.get(self.subcontract_data.order_field), "rm_item_code": args.get("item_code")}, "main_item_code", ) @@ -1324,7 +1369,7 @@ class StockEntry(StockController): and not self.pro_doc.skip_transfer and self.flags.backflush_based_on == "Material Transferred for Manufacture" ): - self.get_transfered_raw_materials() + self.add_transfered_raw_materials_in_items() elif ( self.work_order @@ -1340,27 +1385,27 @@ class StockEntry(StockController): item_dict = self.get_bom_raw_materials(self.fg_completed_qty) - # Get PO Supplied Items Details - if self.purchase_order and self.purpose == "Send to Subcontractor": - # Get PO Supplied Items Details - item_wh = frappe._dict( - frappe.db.sql( - """ - SELECT - rm_item_code, reserve_warehouse - FROM - `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup - WHERE - po.name = poitemsup.parent and po.name = %s """, - self.purchase_order, - ) - ) + # Get Subcontract Order Supplied Items Details + if self.get(self.subcontract_data.order_field) and self.purpose == "Send to Subcontractor": + # Get Subcontract Order Supplied Items Details + parent = frappe.qb.DocType(self.subcontract_data.order_doctype) + child = frappe.qb.DocType(self.subcontract_data.order_supplied_items_field) + + item_wh = ( + frappe.qb.from_(parent) + .inner_join(child) + .on(parent.name == child.parent) + .select(child.rm_item_code, child.reserve_warehouse) + .where(parent.name == self.get(self.subcontract_data.order_field)) + ).run(as_list=True) + + item_wh = frappe._dict(item_wh) for item in item_dict.values(): if self.pro_doc and cint(self.pro_doc.from_wip_warehouse): item["from_warehouse"] = self.pro_doc.wip_warehouse - # Get Reserve Warehouse from PO - if self.purchase_order and self.purpose == "Send to Subcontractor": + # Get Reserve Warehouse from Subcontract Order + if self.get(self.subcontract_data.order_field) and self.purpose == "Send to Subcontractor": item["from_warehouse"] = item_wh.get(item.item_code) item["to_warehouse"] = self.to_warehouse if self.purpose == "Send to Subcontractor" else "" @@ -1368,7 +1413,6 @@ class StockEntry(StockController): # fetch the serial_no of the first stock entry for the second stock entry if self.work_order and self.purpose == "Manufacture": - self.set_serial_nos(self.work_order) work_order = frappe.get_doc("Work Order", self.work_order) add_additional_cost(self, work_order) @@ -1497,7 +1541,9 @@ class StockEntry(StockController): fetch_qty_in_stock_uom=False, ) - used_alternative_items = get_used_alternative_items(work_order=self.work_order) + used_alternative_items = get_used_alternative_items( + subcontract_order_field=self.subcontract_data.order_field, work_order=self.work_order + ) for item in item_dict.values(): # if source warehouse presents in BOM set from_warehouse as bom source_warehouse if item["allow_alternative_item"]: @@ -1658,119 +1704,79 @@ class StockEntry(StockController): } ) - def get_transfered_raw_materials(self): - transferred_materials = frappe.db.sql( - """ - select - item_name, original_item, item_code, sum(qty) as qty, sed.t_warehouse as warehouse, - description, stock_uom, expense_account, cost_center - from `tabStock Entry` se,`tabStock Entry Detail` sed - where - se.name = sed.parent and se.docstatus=1 and se.purpose='Material Transfer for Manufacture' - and se.work_order= %s and ifnull(sed.t_warehouse, '') != '' - group by sed.item_code, sed.t_warehouse - """, + def add_transfered_raw_materials_in_items(self) -> None: + available_materials = get_available_materials(self.work_order) + + wo_data = frappe.db.get_value( + "Work Order", self.work_order, + ["qty", "produced_qty", "material_transferred_for_manufacturing as trans_qty"], as_dict=1, ) - materials_already_backflushed = frappe.db.sql( - """ - select - item_code, sed.s_warehouse as warehouse, sum(qty) as qty - from - `tabStock Entry` se, `tabStock Entry Detail` sed - where - se.name = sed.parent and se.docstatus=1 - and (se.purpose='Manufacture' or se.purpose='Material Consumption for Manufacture') - and se.work_order= %s and ifnull(sed.s_warehouse, '') != '' - group by sed.item_code, sed.s_warehouse - """, - self.work_order, - as_dict=1, - ) + for key, row in available_materials.items(): + remaining_qty_to_produce = flt(wo_data.trans_qty) - flt(wo_data.produced_qty) + if remaining_qty_to_produce <= 0: + continue - backflushed_materials = {} - for d in materials_already_backflushed: - backflushed_materials.setdefault(d.item_code, []).append({d.warehouse: d.qty}) - - po_qty = frappe.db.sql( - """select qty, produced_qty, material_transferred_for_manufacturing from - `tabWork Order` where name=%s""", - self.work_order, - as_dict=1, - )[0] - - manufacturing_qty = flt(po_qty.qty) or 1 - produced_qty = flt(po_qty.produced_qty) - trans_qty = flt(po_qty.material_transferred_for_manufacturing) or 1 - - for item in transferred_materials: - qty = item.qty - item_code = item.original_item or item.item_code - req_items = frappe.get_all( - "Work Order Item", - filters={"parent": self.work_order, "item_code": item_code}, - fields=["required_qty", "consumed_qty"], - ) - - req_qty = flt(req_items[0].required_qty) if req_items else flt(4) - req_qty_each = flt(req_qty / manufacturing_qty) - consumed_qty = flt(req_items[0].consumed_qty) if req_items else 0 - - if trans_qty and manufacturing_qty > (produced_qty + flt(self.fg_completed_qty)): - if qty >= req_qty: - qty = (req_qty / trans_qty) * flt(self.fg_completed_qty) - else: - qty = qty - consumed_qty - - if self.purpose == "Manufacture": - # If Material Consumption is booked, must pull only remaining components to finish product - if consumed_qty != 0: - remaining_qty = consumed_qty - (produced_qty * req_qty_each) - exhaust_qty = req_qty_each * produced_qty - if remaining_qty > exhaust_qty: - if (remaining_qty / (req_qty_each * flt(self.fg_completed_qty))) >= 1: - qty = 0 - else: - qty = (req_qty_each * flt(self.fg_completed_qty)) - remaining_qty - else: - if self.flags.backflush_based_on == "Material Transferred for Manufacture": - qty = (item.qty / trans_qty) * flt(self.fg_completed_qty) - else: - qty = req_qty_each * flt(self.fg_completed_qty) - - elif backflushed_materials.get(item.item_code): - precision = frappe.get_precision("Stock Entry Detail", "qty") - for d in backflushed_materials.get(item.item_code): - if d.get(item.warehouse) > 0: - if qty > req_qty: - qty = ( - (flt(qty, precision) - flt(d.get(item.warehouse), precision)) - / (flt(trans_qty, precision) - flt(produced_qty, precision)) - ) * flt(self.fg_completed_qty) - - d[item.warehouse] -= qty + qty = (flt(row.qty) * flt(self.fg_completed_qty)) / remaining_qty_to_produce + item = row.item_details if cint(frappe.get_cached_value("UOM", item.stock_uom, "must_be_whole_number")): qty = frappe.utils.ceil(qty) - if qty > 0: - self.add_to_stock_entry_detail( - { - item.item_code: { - "from_warehouse": item.warehouse, - "to_warehouse": "", - "qty": qty, - "item_name": item.item_name, - "description": item.description, - "stock_uom": item.stock_uom, - "expense_account": item.expense_account, - "cost_center": item.buying_cost_center, - "original_item": item.original_item, - } - } - ) + if row.batch_details: + batches = sorted(row.batch_details.items(), key=lambda x: x[0]) + for batch_no, batch_qty in batches: + if qty <= 0 or batch_qty <= 0: + continue + + if batch_qty > qty: + batch_qty = qty + + item.batch_no = batch_no + self.update_item_in_stock_entry_detail(row, item, batch_qty) + + row.batch_details[batch_no] -= batch_qty + qty -= batch_qty + else: + self.update_item_in_stock_entry_detail(row, item, qty) + + def update_item_in_stock_entry_detail(self, row, item, qty) -> None: + ste_item_details = { + "from_warehouse": item.warehouse, + "to_warehouse": "", + "qty": qty, + "item_name": item.item_name, + "batch_no": item.batch_no, + "description": item.description, + "stock_uom": item.stock_uom, + "expense_account": item.expense_account, + "cost_center": item.buying_cost_center, + "original_item": item.original_item, + } + + if row.serial_nos: + serial_nos = row.serial_nos + if item.batch_no: + serial_nos = self.get_serial_nos_based_on_transferred_batch(item.batch_no, row.serial_nos) + + serial_nos = serial_nos[0 : cint(qty)] + ste_item_details["serial_no"] = "\n".join(serial_nos) + + # remove consumed serial nos from list + for sn in serial_nos: + row.serial_nos.remove(sn) + + self.add_to_stock_entry_detail({item.item_code: ste_item_details}) + + @staticmethod + def get_serial_nos_based_on_transferred_batch(batch_no, serial_nos) -> list: + serial_nos = frappe.get_all( + "Serial No", filters={"batch_no": batch_no, "name": ("in", serial_nos)}, order_by="creation" + ) + + return [d.name for d in serial_nos] def get_pending_raw_materials(self, backflush_based_on=None): """ @@ -1903,7 +1909,7 @@ class StockEntry(StockController): se_child.is_process_loss = item_row.get("is_process_loss", 0) for field in [ - "po_detail", + self.subcontract_data.rm_detail_field, "original_item", "expense_account", "description", @@ -1977,29 +1983,40 @@ class StockEntry(StockController): else: frappe.throw(_("Batch {0} of Item {1} is disabled.").format(item.batch_no, item.item_code)) - def update_purchase_order_supplied_items(self): - if self.purchase_order and ( + def update_subcontract_order_supplied_items(self): + if self.get(self.subcontract_data.order_field) and ( self.purpose in ["Send to Subcontractor", "Material Transfer"] or self.is_return ): - # Get PO Supplied Items Details - item_wh = frappe._dict( - frappe.db.sql( - """ - select rm_item_code, reserve_warehouse - from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup - where po.name = poitemsup.parent - and po.name = %s""", - self.purchase_order, - ) + # Get Subcontract Order Supplied Items Details + order_supplied_items = frappe.db.get_all( + self.subcontract_data.order_supplied_items_field, + filters={"parent": self.get(self.subcontract_data.order_field)}, + fields=["name", "rm_item_code", "reserve_warehouse"], ) - supplied_items = get_supplied_items(self.purchase_order) - for name, item in supplied_items.items(): - frappe.db.set_value("Purchase Order Item Supplied", name, item) + # Get Items Supplied in Stock Entries against Subcontract Order + supplied_items = get_supplied_items( + self.get(self.subcontract_data.order_field), + self.subcontract_data.rm_detail_field, + self.subcontract_data.order_field, + ) + + for row in order_supplied_items: + key, item = row.name, {} + if not supplied_items.get(key): + # no stock transferred against Subcontract Order Supplied Items row + item = {"supplied_qty": 0, "returned_qty": 0, "total_supplied_qty": 0} + else: + item = supplied_items.get(key) + + frappe.db.set_value(self.subcontract_data.order_supplied_items_field, row.name, item) + + # RM Item-Reserve Warehouse Dict + item_wh = {x.get("rm_item_code"): x.get("reserve_warehouse") for x in order_supplied_items} - # Update reserved sub contracted quantity in bin based on Supplied Item Details and for d in self.get("items"): + # Update reserved sub contracted quantity in bin based on Supplied Item Details and item_code = d.get("original_item") or d.get("item_code") reserve_warehouse = item_wh.get(item_code) if not (reserve_warehouse and item_code): @@ -2197,6 +2214,20 @@ class StockEntry(StockController): return sorted(list(set(get_serial_nos(self.pro_doc.serial_no)) - set(used_serial_nos))) + def update_subcontracting_order_status(self): + if self.subcontracting_order and self.purpose == "Send to Subcontractor": + from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + update_subcontracting_order_status, + ) + + update_subcontracting_order_status(self.subcontracting_order) + + def set_missing_values(self): + "Updates rate and availability of all the items of mapped doc." + self.set_transfer_qty() + self.set_actual_qty() + self.calculate_rate_and_amount() + @frappe.whitelist() def move_sample_to_retention_warehouse(company, items): @@ -2246,6 +2277,7 @@ def move_sample_to_retention_warehouse(company, items): def make_stock_in_entry(source_name, target_doc=None): def set_missing_values(source, target): target.set_stock_entry_type() + target.set_missing_values() def update_item(source_doc, target_doc, source_parent): target_doc.t_warehouse = "" @@ -2338,13 +2370,13 @@ def get_operating_cost_per_unit(work_order=None, bom_no=None): return operating_cost_per_unit -def get_used_alternative_items(purchase_order=None, work_order=None): +def get_used_alternative_items( + subcontract_order=None, subcontract_order_field="subcontracting_order", work_order=None +): cond = "" - if purchase_order: - cond = "and ste.purpose = 'Send to Subcontractor' and ste.purchase_order = '{0}'".format( - purchase_order - ) + if subcontract_order: + cond = f"and ste.purpose = 'Send to Subcontractor' and ste.{subcontract_order_field} = '{subcontract_order}'" elif work_order: cond = "and ste.purpose = 'Material Transfer for Manufacture' and ste.work_order = '{0}'".format( work_order @@ -2397,7 +2429,6 @@ def get_valuation_rate_for_finished_good_entry(work_order): @frappe.whitelist() def get_uom_details(item_code, uom, qty): """Returns dict `{"conversion_factor": [value], "transfer_qty": qty * [value]}` - :param args: dict with `item_code`, `uom` and `qty`""" conversion_factor = get_conversion_factor(item_code, uom).get("conversion_factor") @@ -2481,25 +2512,27 @@ def validate_sample_quantity(item_code, sample_quantity, qty, batch_no=None): return sample_quantity -def get_supplied_items(purchase_order): +def get_supplied_items( + subcontract_order, rm_detail_field="sco_rm_detail", subcontract_order_field="subcontracting_order" +): fields = [ "`tabStock Entry Detail`.`transfer_qty`", "`tabStock Entry`.`is_return`", - "`tabStock Entry Detail`.`po_detail`", + f"`tabStock Entry Detail`.`{rm_detail_field}`", "`tabStock Entry Detail`.`item_code`", ] filters = [ ["Stock Entry", "docstatus", "=", 1], - ["Stock Entry", "purchase_order", "=", purchase_order], + ["Stock Entry", subcontract_order_field, "=", subcontract_order], ] supplied_item_details = {} for row in frappe.get_all("Stock Entry", fields=fields, filters=filters): - if not row.po_detail: + if not row.get(rm_detail_field): continue - key = row.po_detail + key = row.get(rm_detail_field) if key not in supplied_item_details: supplied_item_details.setdefault( key, frappe._dict({"supplied_qty": 0, "returned_qty": 0, "total_supplied_qty": 0}) @@ -2517,3 +2550,114 @@ def get_supplied_items(purchase_order): ) return supplied_item_details + + +@frappe.whitelist() +def get_items_from_subcontracting_order(source_name, target_doc=None): + sco = frappe.get_doc("Subcontracting Order", source_name) + + if sco.docstatus == 1: + if target_doc and isinstance(target_doc, str): + target_doc = frappe.get_doc(json.loads(target_doc)) + + if target_doc.items: + target_doc.items = [] + + warehouses = {} + for item in sco.items: + warehouses[item.name] = item.warehouse + + for item in sco.supplied_items: + target_doc.append( + "items", + { + "s_warehouse": warehouses.get(item.reference_name), + "t_warehouse": sco.supplier_warehouse, + "item_code": item.rm_item_code, + "qty": item.required_qty, + "transfer_qty": item.required_qty, + "uom": item.stock_uom, + "stock_uom": item.stock_uom, + "conversion_factor": 1, + }, + ) + + return target_doc + + +def get_available_materials(work_order) -> dict: + data = get_stock_entry_data(work_order) + + available_materials = {} + for row in data: + key = (row.item_code, row.warehouse) + if row.purpose != "Material Transfer for Manufacture": + key = (row.item_code, row.s_warehouse) + + if key not in available_materials: + available_materials.setdefault( + key, + frappe._dict( + {"item_details": row, "batch_details": defaultdict(float), "qty": 0, "serial_nos": []} + ), + ) + + item_data = available_materials[key] + + if row.purpose == "Material Transfer for Manufacture": + item_data.qty += row.qty + if row.batch_no: + item_data.batch_details[row.batch_no] += row.qty + + if row.serial_no: + item_data.serial_nos.extend(get_serial_nos(row.serial_no)) + item_data.serial_nos.sort() + else: + # Consume raw material qty in case of 'Manufacture' or 'Material Consumption for Manufacture' + + item_data.qty -= row.qty + if row.batch_no: + item_data.batch_details[row.batch_no] -= row.qty + + if row.serial_no: + for serial_no in get_serial_nos(row.serial_no): + item_data.serial_nos.remove(serial_no) + + return available_materials + + +def get_stock_entry_data(work_order): + stock_entry = frappe.qb.DocType("Stock Entry") + stock_entry_detail = frappe.qb.DocType("Stock Entry Detail") + + return ( + frappe.qb.from_(stock_entry) + .from_(stock_entry_detail) + .select( + stock_entry_detail.item_name, + stock_entry_detail.original_item, + stock_entry_detail.item_code, + stock_entry_detail.qty, + (stock_entry_detail.t_warehouse).as_("warehouse"), + (stock_entry_detail.s_warehouse).as_("s_warehouse"), + stock_entry_detail.description, + stock_entry_detail.stock_uom, + stock_entry_detail.expense_account, + stock_entry_detail.cost_center, + stock_entry_detail.batch_no, + stock_entry_detail.serial_no, + stock_entry.purpose, + ) + .where( + (stock_entry.name == stock_entry_detail.parent) + & (stock_entry.work_order == work_order) + & (stock_entry.docstatus == 1) + & (stock_entry_detail.s_warehouse.isnotnull()) + & ( + stock_entry.purpose.isin( + ["Manufacture", "Material Consumption for Manufacture", "Material Transfer for Manufacture"] + ) + ) + ) + .orderby(stock_entry.creation, stock_entry_detail.item_code, stock_entry_detail.idx) + ).run(as_dict=1) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py index b3df7286ea..41a3b8916d 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py @@ -2,11 +2,37 @@ # See license.txt +from typing import TYPE_CHECKING, Optional, overload + import frappe from frappe.utils import cint, flt import erpnext +if TYPE_CHECKING: + from erpnext.stock.doctype.stock_entry.stock_entry import StockEntry + + +@overload +def make_stock_entry( + *, + item_code: str, + qty: float, + company: Optional[str] = None, + from_warehouse: Optional[str] = None, + to_warehouse: Optional[str] = None, + rate: Optional[float] = None, + serial_no: Optional[str] = None, + batch_no: Optional[str] = None, + posting_date: Optional[str] = None, + posting_time: Optional[str] = None, + purpose: Optional[str] = None, + do_not_save: bool = False, + do_not_submit: bool = False, + inspection_required: bool = False, +) -> "StockEntry": + ... + @frappe.whitelist() def make_stock_entry(**args): @@ -132,6 +158,7 @@ def make_stock_entry(**args): ) s.set_stock_entry_type() + if not args.do_not_save: s.insert() if not args.do_not_submit: diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index 3ccd3420e3..a2f9978670 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -2,16 +2,15 @@ # License: GNU General Public License v3. See license.txt -import unittest - import frappe from frappe.permissions import add_user_permission, remove_user_permission from frappe.tests.utils import FrappeTestCase, change_settings -from frappe.utils import flt, nowdate, nowtime +from frappe.utils import add_days, flt, nowdate, nowtime from erpnext.accounts.doctype.account.test_account import get_inventory_account from erpnext.stock.doctype.item.test_item import ( create_item, + make_item, make_item_variant, set_item_variant_settings, ) @@ -652,6 +651,104 @@ class TestStockEntry(FrappeTestCase): serial_no = get_serial_nos(se.get("items")[0].serial_no)[0] self.assertFalse(frappe.db.get_value("Serial No", serial_no, "warehouse")) + def test_serial_batch_item_stock_entry(self): + """ + Behaviour: 1) Submit Stock Entry (Receipt) with Serial & Batched Item + 2) Cancel same Stock Entry + Expected Result: 1) Batch is created with Reference in Serial No + 2) Batch is deleted and Serial No is Inactive + """ + from erpnext.stock.doctype.batch.batch import get_batch_qty + + item = frappe.db.exists("Item", {"item_name": "Batched and Serialised Item"}) + if not item: + item = create_item("Batched and Serialised Item") + item.has_batch_no = 1 + item.create_new_batch = 1 + item.has_serial_no = 1 + item.batch_number_series = "B-BATCH-.##" + item.serial_no_series = "S-.####" + item.save() + else: + item = frappe.get_doc("Item", {"item_name": "Batched and Serialised Item"}) + + se = make_stock_entry( + item_code=item.item_code, target="_Test Warehouse - _TC", qty=1, basic_rate=100 + ) + batch_no = se.items[0].batch_no + serial_no = get_serial_nos(se.items[0].serial_no)[0] + batch_qty = get_batch_qty(batch_no, "_Test Warehouse - _TC", item.item_code) + + batch_in_serial_no = frappe.db.get_value("Serial No", serial_no, "batch_no") + self.assertEqual(batch_in_serial_no, batch_no) + + self.assertEqual(batch_qty, 1) + + se.cancel() + + batch_in_serial_no = frappe.db.get_value("Serial No", serial_no, "batch_no") + self.assertEqual(batch_in_serial_no, None) + + self.assertEqual(frappe.db.get_value("Serial No", serial_no, "status"), "Inactive") + self.assertEqual(frappe.db.exists("Batch", batch_no), None) + + def test_serial_batch_item_qty_deduction(self): + """ + Behaviour: Create 2 Stock Entries, both adding Serial Nos to same batch + Expected: 1) Cancelling first Stock Entry (origin transaction of created batch) + should throw a LinkExistsError + 2) Cancelling second Stock Entry should make Serial Nos that are, linked to mentioned batch + and in that transaction only, Inactive. + """ + from erpnext.stock.doctype.batch.batch import get_batch_qty + + item = frappe.db.exists("Item", {"item_name": "Batched and Serialised Item"}) + if not item: + item = create_item("Batched and Serialised Item") + item.has_batch_no = 1 + item.create_new_batch = 1 + item.has_serial_no = 1 + item.batch_number_series = "B-BATCH-.##" + item.serial_no_series = "S-.####" + item.save() + else: + item = frappe.get_doc("Item", {"item_name": "Batched and Serialised Item"}) + + se1 = make_stock_entry( + item_code=item.item_code, target="_Test Warehouse - _TC", qty=1, basic_rate=100 + ) + batch_no = se1.items[0].batch_no + serial_no1 = get_serial_nos(se1.items[0].serial_no)[0] + + # Check Source (Origin) Document of Batch + self.assertEqual(frappe.db.get_value("Batch", batch_no, "reference_name"), se1.name) + + se2 = make_stock_entry( + item_code=item.item_code, + target="_Test Warehouse - _TC", + qty=1, + basic_rate=100, + batch_no=batch_no, + ) + serial_no2 = get_serial_nos(se2.items[0].serial_no)[0] + + batch_qty = get_batch_qty(batch_no, "_Test Warehouse - _TC", item.item_code) + self.assertEqual(batch_qty, 2) + + se2.cancel() + + # Check decrease in Batch Qty + batch_qty = get_batch_qty(batch_no, "_Test Warehouse - _TC", item.item_code) + self.assertEqual(batch_qty, 1) + + # Check if Serial No from Stock Entry 1 is intact + self.assertEqual(frappe.db.get_value("Serial No", serial_no1, "batch_no"), batch_no) + self.assertEqual(frappe.db.get_value("Serial No", serial_no1, "status"), "Active") + + # Check if Serial No from Stock Entry 2 is Unlinked and Inactive + self.assertEqual(frappe.db.get_value("Serial No", serial_no2, "batch_no"), None) + self.assertEqual(frappe.db.get_value("Serial No", serial_no2, "status"), "Inactive") + def test_warehouse_company_validation(self): company = frappe.db.get_value("Warehouse", "_Test Warehouse 2 - _TC1", "company") frappe.get_doc("User", "test2@example.com").add_roles( @@ -1326,6 +1423,172 @@ class TestStockEntry(FrappeTestCase): self.assertRaises(frappe.ValidationError, se.save) + def test_mapped_stock_entry(self): + "Check if rate and stock details are populated in mapped SE given warehouse." + from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_stock_entry + from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt + + item_code = "_TestMappedItem" + create_item(item_code, is_stock_item=True) + + pr = make_purchase_receipt( + item_code=item_code, qty=2, rate=100, company="_Test Company", warehouse="Stores - _TC" + ) + + mapped_se = make_stock_entry(pr.name) + + self.assertEqual(mapped_se.items[0].s_warehouse, "Stores - _TC") + self.assertEqual(mapped_se.items[0].actual_qty, 2) + self.assertEqual(mapped_se.items[0].basic_rate, 100) + self.assertEqual(mapped_se.items[0].basic_amount, 200) + + def test_stock_entry_item_details(self): + item = make_item() + + se = make_stock_entry( + item_code=item.name, qty=1, to_warehouse="_Test Warehouse - _TC", do_not_submit=True + ) + + self.assertEqual(se.items[0].item_name, item.item_name) + se.items[0].item_name = "wat" + se.items[0].stock_uom = "Kg" + se.save() + + self.assertEqual(se.items[0].item_name, item.item_name) + self.assertEqual(se.items[0].stock_uom, item.stock_uom) + + def test_reposting_for_depedent_warehouse(self): + from erpnext.stock.doctype.repost_item_valuation.repost_item_valuation import repost_sl_entries + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + # Inward at WH1 warehouse (Component) + # 1st Repack (Component (WH1) - Subcomponent (WH2)) + # 2nd Repack (Subcomponent (WH2) - FG Item (WH3)) + # Material Transfer of FG Item -> WH 3 -> WH2 -> Wh1 (Two transfer entries) + # Backdated transction which should update valuation rate in repack as well trasfer entries + + for item_code in ["FG Item 1", "Sub Component 1", "Component 1"]: + create_item(item_code) + + for warehouse in ["WH 1", "WH 2", "WH 3"]: + create_warehouse(warehouse) + + make_stock_entry( + item_code="Component 1", + rate=100, + purpose="Material Receipt", + qty=10, + to_warehouse="WH 1 - _TC", + posting_date=add_days(nowdate(), -10), + ) + + repack1 = make_stock_entry( + item_code="Component 1", + purpose="Repack", + do_not_save=True, + qty=10, + from_warehouse="WH 1 - _TC", + posting_date=add_days(nowdate(), -9), + ) + + repack1.append( + "items", + { + "item_code": "Sub Component 1", + "qty": 10, + "t_warehouse": "WH 2 - _TC", + "transfer_qty": 10, + "uom": "Nos", + "stock_uom": "Nos", + "conversion_factor": 1.0, + }, + ) + + repack1.save() + repack1.submit() + + self.assertEqual(repack1.items[1].basic_rate, 100) + self.assertEqual(repack1.items[1].amount, 1000) + + repack2 = make_stock_entry( + item_code="Sub Component 1", + purpose="Repack", + do_not_save=True, + qty=10, + from_warehouse="WH 2 - _TC", + posting_date=add_days(nowdate(), -8), + ) + + repack2.append( + "items", + { + "item_code": "FG Item 1", + "qty": 10, + "t_warehouse": "WH 3 - _TC", + "transfer_qty": 10, + "uom": "Nos", + "stock_uom": "Nos", + "conversion_factor": 1.0, + }, + ) + + repack2.save() + repack2.submit() + + self.assertEqual(repack2.items[1].basic_rate, 100) + self.assertEqual(repack2.items[1].amount, 1000) + + transfer1 = make_stock_entry( + item_code="FG Item 1", + purpose="Material Transfer", + qty=10, + from_warehouse="WH 3 - _TC", + to_warehouse="WH 2 - _TC", + posting_date=add_days(nowdate(), -7), + ) + + self.assertEqual(transfer1.items[0].basic_rate, 100) + self.assertEqual(transfer1.items[0].amount, 1000) + + transfer2 = make_stock_entry( + item_code="FG Item 1", + purpose="Material Transfer", + qty=10, + from_warehouse="WH 2 - _TC", + to_warehouse="WH 1 - _TC", + posting_date=add_days(nowdate(), -6), + ) + + self.assertEqual(transfer2.items[0].basic_rate, 100) + self.assertEqual(transfer2.items[0].amount, 1000) + + # Backdated transaction + receipt2 = make_stock_entry( + item_code="Component 1", + rate=200, + purpose="Material Receipt", + qty=10, + to_warehouse="WH 1 - _TC", + posting_date=add_days(nowdate(), -15), + ) + + self.assertEqual(receipt2.items[0].basic_rate, 200) + self.assertEqual(receipt2.items[0].amount, 2000) + + repost_name = frappe.db.get_value( + "Repost Item Valuation", {"voucher_no": receipt2.name, "docstatus": 1}, "name" + ) + + doc = frappe.get_doc("Repost Item Valuation", repost_name) + repost_sl_entries(doc) + + for obj in [repack1, repack2, transfer1, transfer2]: + obj.load_from_db() + + index = 1 if obj.purpose == "Repack" else 0 + self.assertEqual(obj.items[index].basic_rate, 200) + self.assertEqual(obj.items[index].basic_amount, 2000) + def make_serialized_item(**args): args = frappe._dict(args) diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index 83aed904dd..5fe11a2aa7 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -68,6 +68,7 @@ "against_stock_entry", "ste_detail", "po_detail", + "sco_rm_detail", "putaway_rule", "column_break_51", "reference_purchase_receipt", @@ -233,6 +234,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "conversion_factor", "fieldtype": "Float", "label": "Conversion Factor", @@ -242,6 +244,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "stock_uom", "fieldtype": "Link", "label": "Stock UOM", @@ -253,6 +256,7 @@ "reqd": 1 }, { + "depends_on": "eval:doc.uom != doc.stock_uom", "fieldname": "transfer_qty", "fieldtype": "Float", "label": "Qty as per Stock UOM", @@ -493,6 +497,15 @@ "print_hide": 1, "read_only": 1 }, + { + "fieldname": "sco_rm_detail", + "fieldtype": "Data", + "hidden": 1, + "label": "SCO Supplied Item", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, { "default": "0", "depends_on": "eval:parent.purpose===\"Repack\" && doc.t_warehouse", @@ -556,7 +569,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-02-26 00:51:24.963653", + "modified": "2022-06-17 05:06:33.621264", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry Detail", diff --git a/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py index 5850ec7be6..1410da56a3 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py @@ -8,9 +8,8 @@ import frappe from frappe.core.page.permission_manager.permission_manager import reset from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.query_builder.functions import CombineDatetime -from frappe.tests.utils import FrappeTestCase -from frappe.utils import add_days, today -from frappe.utils.data import add_to_date +from frappe.tests.utils import FrappeTestCase, change_settings +from frappe.utils import add_days, add_to_date, flt, today from erpnext.accounts.doctype.gl_entry.gl_entry import rename_gle_sle_docs from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note @@ -25,9 +24,10 @@ from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import create_stock_reconciliation, ) from erpnext.stock.stock_ledger import get_previous_sle +from erpnext.stock.tests.test_utils import StockTestMixin -class TestStockLedgerEntry(FrappeTestCase): +class TestStockLedgerEntry(FrappeTestCase, StockTestMixin): def setUp(self): items = create_items() reset("Stock Entry") @@ -42,6 +42,9 @@ class TestStockLedgerEntry(FrappeTestCase): "delete from `tabBin` where item_code in (%s)" % (", ".join(["%s"] * len(items))), items ) + def tearDown(self): + frappe.db.rollback() + def test_item_cost_reposting(self): company = "_Test Company" @@ -406,61 +409,6 @@ class TestStockLedgerEntry(FrappeTestCase): lcv.cancel() pr.cancel() - def test_sub_contracted_item_costing(self): - from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom - - company = "_Test Company" - rm_item_code = "_Test Item for Reposting" - subcontracted_item = "_Test Subcontracted Item for Reposting" - - frappe.db.set_value( - "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", "BOM" - ) - make_bom(item=subcontracted_item, raw_materials=[rm_item_code], currency="INR") - - # Purchase raw materials on supplier warehouse: Qty = 50, Rate = 100 - pr = make_purchase_receipt( - company=company, - posting_date="2020-04-10", - warehouse="Stores - _TC", - item_code=rm_item_code, - qty=10, - rate=100, - ) - - # Purchase Receipt for subcontracted item - pr1 = make_purchase_receipt( - company=company, - posting_date="2020-04-20", - warehouse="Finished Goods - _TC", - supplier_warehouse="Stores - _TC", - item_code=subcontracted_item, - qty=10, - rate=20, - is_subcontracted=1, - ) - - self.assertEqual(pr1.items[0].valuation_rate, 120) - - # Update raw material's valuation via LCV, Additional cost = 50 - lcv = create_landed_cost_voucher("Purchase Receipt", pr.name, pr.company) - - pr1.reload() - self.assertEqual(pr1.items[0].valuation_rate, 125) - - # check outgoing_rate for DN after reposting - incoming_rate = frappe.db.get_value( - "Stock Ledger Entry", - {"voucher_type": "Purchase Receipt", "voucher_no": pr1.name, "item_code": subcontracted_item}, - "incoming_rate", - ) - self.assertEqual(incoming_rate, 125) - - # cleanup data - pr1.cancel() - lcv.cancel() - pr.cancel() - def test_back_dated_entry_not_allowed(self): # Back dated stock transactions are only allowed to stock managers frappe.db.set_value( @@ -542,30 +490,6 @@ class TestStockLedgerEntry(FrappeTestCase): "Incorrect 'Incoming Rate' values fetched for DN items", ) - def assertSLEs(self, doc, expected_sles, sle_filters=None): - """Compare sorted SLEs, useful for vouchers that create multiple SLEs for same line""" - - filters = {"voucher_no": doc.name, "voucher_type": doc.doctype, "is_cancelled": 0} - if sle_filters: - filters.update(sle_filters) - sles = frappe.get_all( - "Stock Ledger Entry", - fields=["*"], - filters=filters, - order_by="timestamp(posting_date, posting_time), creation", - ) - - for exp_sle, act_sle in zip(expected_sles, sles): - for k, v in exp_sle.items(): - act_value = act_sle[k] - if k == "stock_queue": - act_value = json.loads(act_value) - if act_value and act_value[0][0] == 0: - # ignore empty fifo bins - continue - - self.assertEqual(v, act_value, msg=f"{k} doesn't match \n{exp_sle}\n{act_sle}") - def test_batchwise_item_valuation_stock_reco(self): item, warehouses, batches = setup_item_valuation_test() state = {"stock_value": 0.0, "qty": 0.0} @@ -1183,6 +1107,164 @@ class TestStockLedgerEntry(FrappeTestCase): backdated.cancel() self.assertEqual([1], ordered_qty_after_transaction()) + def test_timestamp_clash(self): + + item = make_item().name + warehouse = "_Test Warehouse - _TC" + + reciept = make_stock_entry( + item_code=item, + to_warehouse=warehouse, + qty=100, + rate=10, + posting_date="2021-01-01", + posting_time="01:00:00", + ) + + consumption = make_stock_entry( + item_code=item, + from_warehouse=warehouse, + qty=50, + posting_date="2021-01-01", + posting_time="02:00:00.1234", # ms are possible when submitted without editing posting time + ) + + backdated_receipt = make_stock_entry( + item_code=item, + to_warehouse=warehouse, + qty=100, + posting_date="2021-01-01", + rate=10, + posting_time="02:00:00", # same posting time as consumption but ms part stripped + ) + + try: + backdated_receipt.cancel() + except Exception as e: + self.fail("Double processing of qty for clashing timestamp.") + + @change_settings("System Settings", {"float_precision": 3, "currency_precision": 2}) + def test_transfer_invariants(self): + """Extact stock value should be transferred.""" + + item = make_item( + properties={ + "valuation_method": "Moving Average", + "stock_uom": "Kg", + } + ).name + source_warehouse = "Stores - TCP1" + target_warehouse = "Finished Goods - TCP1" + + make_purchase_receipt( + item=item, + warehouse=source_warehouse, + qty=20, + conversion_factor=1000, + uom="Tonne", + rate=156_526.0, + company="_Test Company with perpetual inventory", + ) + transfer = make_stock_entry( + item=item, from_warehouse=source_warehouse, to_warehouse=target_warehouse, qty=1_728.0 + ) + + filters = {"voucher_no": transfer.name, "voucher_type": transfer.doctype, "is_cancelled": 0} + sles = frappe.get_all( + "Stock Ledger Entry", + fields=["*"], + filters=filters, + order_by="timestamp(posting_date, posting_time), creation", + ) + self.assertEqual(abs(sles[0].stock_value_difference), sles[1].stock_value_difference) + + @change_settings("System Settings", {"float_precision": 4}) + def test_negative_qty_with_precision(self): + "Test if system precision is respected while validating negative qty." + from erpnext.stock.doctype.item.test_item import create_item + from erpnext.stock.utils import get_stock_balance + + item_code = "ItemPrecisionTest" + warehouse = "_Test Warehouse - _TC" + create_item(item_code, is_stock_item=1, stock_uom="Kg") + + create_stock_reconciliation(item_code=item_code, warehouse=warehouse, qty=559.8327, rate=100) + + make_stock_entry(item_code=item_code, source=warehouse, qty=470.84, rate=100) + self.assertEqual(get_stock_balance(item_code, warehouse), 88.9927) + + settings = frappe.get_doc("System Settings") + settings.float_precision = 3 + settings.save() + + # To deliver 100 qty we fall short of 11.0073 qty (11.007 with precision 3) + # Stock up with 11.007 (balance in db becomes 99.9997, on UI it will show as 100) + make_stock_entry(item_code=item_code, target=warehouse, qty=11.007, rate=100) + self.assertEqual(get_stock_balance(item_code, warehouse), 99.9997) + + # See if delivery note goes through + # Negative qty error should not be raised as 99.9997 is 100 with precision 3 (system precision) + dn = create_delivery_note( + item_code=item_code, + qty=100, + rate=150, + warehouse=warehouse, + company="_Test Company", + expense_account="Cost of Goods Sold - _TC", + cost_center="Main - _TC", + do_not_submit=True, + ) + dn.submit() + + self.assertEqual(flt(get_stock_balance(item_code, warehouse), 3), 0.000) + + @change_settings("System Settings", {"float_precision": 4}) + def test_future_negative_qty_with_precision(self): + """ + Ledger: + | Voucher | Qty | Balance + ------------------- + | Reco | 559.8327| 559.8327 + | SE | -470.84 | [Backdated] (new bal: 88.9927) + | SE | 11.007 | 570.8397 (new bal: 99.9997) + | DN | -100 | 470.8397 (new bal: -0.0003) + + Check if future negative qty is asserted as per precision 3. + -0.0003 should be considered as 0.000 + """ + from erpnext.stock.doctype.item.test_item import create_item + + item_code = "ItemPrecisionTest" + warehouse = "_Test Warehouse - _TC" + create_item(item_code, is_stock_item=1, stock_uom="Kg") + + create_stock_reconciliation( + item_code=item_code, + warehouse=warehouse, + qty=559.8327, + rate=100, + posting_date=add_days(today(), -2), + ) + make_stock_entry(item_code=item_code, target=warehouse, qty=11.007, rate=100) + create_delivery_note( + item_code=item_code, + qty=100, + rate=150, + warehouse=warehouse, + company="_Test Company", + expense_account="Cost of Goods Sold - _TC", + cost_center="Main - _TC", + ) + + settings = frappe.get_doc("System Settings") + settings.float_precision = 3 + settings.save() + + # Make backdated SE and make sure SE goes through as per precision (no negative qty error) + make_stock_entry( + item_code=item_code, source=warehouse, qty=470.84, rate=100, posting_date=add_days(today(), -1) + ) + def create_repack_entry(**args): args = frappe._dict(args) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json index e545b8ea5c..9a85431110 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -170,6 +170,7 @@ "options": "Warehouse" }, { + "depends_on": "eval:!doc.docstatus", "fieldname": "section_break_22", "fieldtype": "Section Break" }, @@ -182,7 +183,7 @@ "idx": 1, "is_submittable": 1, "links": [], - "modified": "2022-03-27 08:57:47.161959", + "modified": "2022-05-11 09:10:26.327652", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation", diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 5d5a27f1ea..23e0f1efaf 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -62,6 +62,7 @@ class StockReconciliation(StockController): self.make_sle_on_cancel() self.make_gl_entries_on_cancel() self.repost_future_sle_and_gle() + self.delete_auto_created_batches() def remove_items_with_no_change(self): """Remove items if qty or rate is not changed""" @@ -456,7 +457,7 @@ class StockReconciliation(StockController): key = (d.item_code, d.warehouse) if key not in merge_similar_entries: - d.total_amount = d.actual_qty * d.valuation_rate + d.total_amount = flt(d.actual_qty) * d.valuation_rate merge_similar_entries[key] = d elif d.serial_no: data = merge_similar_entries[key] @@ -610,7 +611,7 @@ def get_items_for_stock_reco(warehouse, company): select i.name as item_code, i.item_name, bin.warehouse as warehouse, i.has_serial_no, i.has_batch_no from - tabBin bin, tabItem i + `tabBin` bin, `tabItem` i where i.name = bin.item_code and IFNULL(i.disabled, 0) = 0 @@ -628,7 +629,7 @@ def get_items_for_stock_reco(warehouse, company): select i.name as item_code, i.item_name, id.default_warehouse as warehouse, i.has_serial_no, i.has_batch_no from - tabItem i, `tabItem Default` id + `tabItem` i, `tabItem Default` id where i.name = id.parent and exists( diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 1e59aae9a8..191c03f5f1 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -10,7 +10,7 @@ from frappe.tests.utils import FrappeTestCase, change_settings from frappe.utils import add_days, cstr, flt, nowdate, nowtime, random_string from erpnext.accounts.utils import get_stock_and_account_balance -from erpnext.stock.doctype.item.test_item import create_item, make_item +from erpnext.stock.doctype.item.test_item import create_item from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import ( @@ -19,10 +19,11 @@ from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import ( ) from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse from erpnext.stock.stock_ledger import get_previous_sle, update_entries_after +from erpnext.stock.tests.test_utils import StockTestMixin from erpnext.stock.utils import get_incoming_rate, get_stock_value_on, get_valuation_method -class TestStockReconciliation(FrappeTestCase): +class TestStockReconciliation(FrappeTestCase, StockTestMixin): @classmethod def setUpClass(cls): create_batch_or_serial_no_items() @@ -31,6 +32,7 @@ class TestStockReconciliation(FrappeTestCase): def tearDown(self): frappe.local.future_sle = {} + frappe.flags.pop("dont_execute_stock_reposts", None) def test_reco_for_fifo(self): self._test_reco_sle_gle("FIFO") @@ -39,7 +41,7 @@ class TestStockReconciliation(FrappeTestCase): self._test_reco_sle_gle("Moving Average") def _test_reco_sle_gle(self, valuation_method): - item_code = make_item(properties={"valuation_method": valuation_method}).name + item_code = self.make_item(properties={"valuation_method": valuation_method}).name se1, se2, se3 = insert_existing_sle(warehouse="Stores - TCP1", item_code=item_code) company = frappe.db.get_value("Warehouse", "Stores - TCP1", "company") @@ -250,7 +252,7 @@ class TestStockReconciliation(FrappeTestCase): warehouse = "_Test Warehouse for Stock Reco2 - _TC" sr = create_stock_reconciliation( - item_code=item_code, warehouse=warehouse, qty=5, rate=200, do_not_submit=1 + item_code=item_code, warehouse=warehouse, qty=5, rate=200, do_not_save=1 ) sr.save() sr.submit() @@ -288,6 +290,84 @@ class TestStockReconciliation(FrappeTestCase): stock_doc = frappe.get_doc("Stock Reconciliation", d) stock_doc.cancel() + def test_stock_reco_for_serial_and_batch_item(self): + item = create_item("_TestBatchSerialItemReco") + item.has_batch_no = 1 + item.create_new_batch = 1 + item.has_serial_no = 1 + item.batch_number_series = "TBS-BATCH-.##" + item.serial_no_series = "TBS-.####" + item.save() + + warehouse = "_Test Warehouse for Stock Reco2 - _TC" + + sr = create_stock_reconciliation(item_code=item.item_code, warehouse=warehouse, qty=1, rate=100) + + batch_no = sr.items[0].batch_no + + serial_nos = get_serial_nos(sr.items[0].serial_no) + self.assertEqual(len(serial_nos), 1) + self.assertEqual(frappe.db.get_value("Serial No", serial_nos[0], "batch_no"), batch_no) + + sr.cancel() + + self.assertEqual(frappe.db.get_value("Serial No", serial_nos[0], "status"), "Inactive") + self.assertEqual(frappe.db.exists("Batch", batch_no), None) + + def test_stock_reco_for_serial_and_batch_item_with_future_dependent_entry(self): + """ + Behaviour: 1) Create Stock Reconciliation, which will be the origin document + of a new batch having a serial no + 2) Create a Stock Entry that adds a serial no to the same batch following this + Stock Reconciliation + 3) Cancel Stock Entry + Expected Result: 3) Serial No only in the Stock Entry is Inactive and Batch qty decreases + """ + from erpnext.stock.doctype.batch.batch import get_batch_qty + from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry + + item = create_item("_TestBatchSerialItemDependentReco") + item.has_batch_no = 1 + item.create_new_batch = 1 + item.has_serial_no = 1 + item.batch_number_series = "TBSD-BATCH-.##" + item.serial_no_series = "TBSD-.####" + item.save() + + warehouse = "_Test Warehouse for Stock Reco2 - _TC" + + stock_reco = create_stock_reconciliation( + item_code=item.item_code, warehouse=warehouse, qty=1, rate=100 + ) + batch_no = stock_reco.items[0].batch_no + reco_serial_no = get_serial_nos(stock_reco.items[0].serial_no)[0] + + stock_entry = make_stock_entry( + item_code=item.item_code, target=warehouse, qty=1, basic_rate=100, batch_no=batch_no + ) + serial_no_2 = get_serial_nos(stock_entry.items[0].serial_no)[0] + + # Check Batch qty after 2 transactions + batch_qty = get_batch_qty(batch_no, warehouse, item.item_code) + self.assertEqual(batch_qty, 2) + + # Cancel latest stock document + stock_entry.cancel() + + # Check Batch qty after cancellation + batch_qty = get_batch_qty(batch_no, warehouse, item.item_code) + self.assertEqual(batch_qty, 1) + + # Check if Serial No from Stock Reconcilation is intact + self.assertEqual(frappe.db.get_value("Serial No", reco_serial_no, "batch_no"), batch_no) + self.assertEqual(frappe.db.get_value("Serial No", reco_serial_no, "status"), "Active") + + # Check if Serial No from Stock Entry is Unlinked and Inactive + self.assertEqual(frappe.db.get_value("Serial No", serial_no_2, "batch_no"), None) + self.assertEqual(frappe.db.get_value("Serial No", serial_no_2, "status"), "Inactive") + + stock_reco.cancel() + def test_customer_provided_items(self): item_code = "Stock-Reco-customer-Item-100" create_item( @@ -306,15 +386,24 @@ class TestStockReconciliation(FrappeTestCase): ------------------------------------------- Var | Doc | Qty | Balance ------------------------------------------- + PR5 | PR | 10 | 10 (posting date: today-4) [backdated] SR5 | Reco | 0 | 8 (posting date: today-4) [backdated] PR1 | PR | 10 | 18 (posting date: today-3) PR2 | PR | 1 | 19 (posting date: today-2) SR4 | Reco | 0 | 6 (posting date: today-1) [backdated] PR3 | PR | 1 | 7 (posting date: today) # can't post future PR """ - item_code = make_item().name + item_code = self.make_item().name warehouse = "_Test Warehouse - _TC" + frappe.flags.dont_execute_stock_reposts = True + + def assertBalance(doc, qty_after_transaction): + sle_balance = frappe.db.get_value( + "Stock Ledger Entry", {"voucher_no": doc.name, "is_cancelled": 0}, "qty_after_transaction" + ) + self.assertEqual(sle_balance, qty_after_transaction) + pr1 = make_purchase_receipt( item_code=item_code, warehouse=warehouse, qty=10, rate=100, posting_date=add_days(nowdate(), -3) ) @@ -324,62 +413,37 @@ class TestStockReconciliation(FrappeTestCase): pr3 = make_purchase_receipt( item_code=item_code, warehouse=warehouse, qty=1, rate=100, posting_date=nowdate() ) - - pr1_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr1.name, "is_cancelled": 0}, "qty_after_transaction" - ) - pr3_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr3.name, "is_cancelled": 0}, "qty_after_transaction" - ) - self.assertEqual(pr1_balance, 10) - self.assertEqual(pr3_balance, 12) + assertBalance(pr1, 10) + assertBalance(pr3, 12) # post backdated stock reco in between sr4 = create_stock_reconciliation( item_code=item_code, warehouse=warehouse, qty=6, rate=100, posting_date=add_days(nowdate(), -1) ) - pr3_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr3.name, "is_cancelled": 0}, "qty_after_transaction" - ) - self.assertEqual(pr3_balance, 7) + assertBalance(pr3, 7) # post backdated stock reco at the start sr5 = create_stock_reconciliation( item_code=item_code, warehouse=warehouse, qty=8, rate=100, posting_date=add_days(nowdate(), -4) ) - pr1_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr1.name, "is_cancelled": 0}, "qty_after_transaction" + assertBalance(pr1, 18) + assertBalance(pr2, 19) + assertBalance(sr4, 6) # check if future stock reco is unaffected + + # Make a backdated receipt and check only entries till first SR are affected + pr5 = make_purchase_receipt( + item_code=item_code, warehouse=warehouse, qty=10, rate=100, posting_date=add_days(nowdate(), -5) ) - pr2_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr2.name, "is_cancelled": 0}, "qty_after_transaction" - ) - sr4_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": sr4.name, "is_cancelled": 0}, "qty_after_transaction" - ) - self.assertEqual(pr1_balance, 18) - self.assertEqual(pr2_balance, 19) - self.assertEqual(sr4_balance, 6) # check if future stock reco is unaffected + assertBalance(pr5, 10) + # check if future stock reco is unaffected + assertBalance(sr4, 6) + assertBalance(sr5, 8) # cancel backdated stock reco and check future impact sr5.cancel() - pr1_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr1.name, "is_cancelled": 0}, "qty_after_transaction" - ) - pr2_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": pr2.name, "is_cancelled": 0}, "qty_after_transaction" - ) - sr4_balance = frappe.db.get_value( - "Stock Ledger Entry", {"voucher_no": sr4.name, "is_cancelled": 0}, "qty_after_transaction" - ) - self.assertEqual(pr1_balance, 10) - self.assertEqual(pr2_balance, 11) - self.assertEqual(sr4_balance, 6) # check if future stock reco is unaffected - - # teardown - sr4.cancel() - pr3.cancel() - pr2.cancel() - pr1.cancel() + assertBalance(pr1, 10) + assertBalance(pr2, 11) + assertBalance(sr4, 6) # check if future stock reco is unaffected @change_settings("Stock Settings", {"allow_negative_stock": 0}) def test_backdated_stock_reco_future_negative_stock(self): @@ -395,7 +459,7 @@ class TestStockReconciliation(FrappeTestCase): from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note from erpnext.stock.stock_ledger import NegativeStockError - item_code = make_item().name + item_code = self.make_item().name warehouse = "_Test Warehouse - _TC" pr1 = make_purchase_receipt( @@ -443,7 +507,7 @@ class TestStockReconciliation(FrappeTestCase): from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note from erpnext.stock.stock_ledger import NegativeStockError - item_code = make_item().name + item_code = self.make_item().name warehouse = "_Test Warehouse - _TC" sr = create_stock_reconciliation( @@ -485,9 +549,8 @@ class TestStockReconciliation(FrappeTestCase): # repost will make this test useless, qty should update in realtime without reposts frappe.flags.dont_execute_stock_reposts = True - self.addCleanup(frappe.flags.pop, "dont_execute_stock_reposts") - item_code = make_item().name + item_code = self.make_item().name warehouse = "_Test Warehouse - _TC" sr = create_stock_reconciliation( @@ -684,11 +747,13 @@ def create_stock_reconciliation(**args): }, ) - try: - if not args.do_not_submit: - sr.submit() - except EmptyStockReconciliationItemsError: - pass + if not args.do_not_save: + sr.insert() + try: + if not args.do_not_submit: + sr.submit() + except EmptyStockReconciliationItemsError: + pass return sr diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index e592a4be3c..50807a96ab 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -26,7 +26,7 @@ class StockSettings(Document): ]: frappe.db.set_default(key, self.get(key, "")) - from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series + from erpnext.utilities.naming import set_by_naming_series set_by_naming_series( "Item", diff --git a/erpnext/stock/doctype/warehouse/warehouse.js b/erpnext/stock/doctype/warehouse/warehouse.js index 9243e1ed84..d69c624fba 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.js +++ b/erpnext/stock/doctype/warehouse/warehouse.js @@ -1,88 +1,97 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt - frappe.ui.form.on("Warehouse", { - onload: function(frm) { - frm.set_query("default_in_transit_warehouse", function() { + setup: function (frm) { + frm.set_query("default_in_transit_warehouse", function (doc) { return { - filters:{ - 'warehouse_type' : 'Transit', - 'is_group': 0, - 'company': frm.doc.company - } + filters: { + warehouse_type: "Transit", + is_group: 0, + company: doc.company, + }, + }; + }); + + frm.set_query("parent_warehouse", function () { + return { + filters: { + is_group: 1, + }, + }; + }); + + frm.set_query("account", function (doc) { + return { + filters: { + is_group: 0, + account_type: "Stock", + company: doc.company, + }, }; }); }, - refresh: function(frm) { - frm.toggle_display('warehouse_name', frm.doc.__islocal); - frm.toggle_display(['address_html','contact_html'], !frm.doc.__islocal); + refresh: function (frm) { + frm.toggle_display("warehouse_name", frm.doc.__islocal); + frm.toggle_display( + ["address_html", "contact_html"], + !frm.doc.__islocal + ); - - if(!frm.doc.__islocal) { + if (!frm.doc.__islocal) { frappe.contacts.render_address_and_contact(frm); - } else { frappe.contacts.clear_address_and_contact(frm); } - frm.add_custom_button(__("Stock Balance"), function() { - frappe.set_route("query-report", "Stock Balance", {"warehouse": frm.doc.name}); + frm.add_custom_button(__("Stock Balance"), function () { + frappe.set_route("query-report", "Stock Balance", { + warehouse: frm.doc.name, + }); }); - if (cint(frm.doc.is_group) == 1) { - frm.add_custom_button(__('Group to Non-Group'), - function() { convert_to_group_or_ledger(frm); }, 'fa fa-retweet', 'btn-default') - } else if (cint(frm.doc.is_group) == 0) { - if(frm.doc.__onload && frm.doc.__onload.account) { - frm.add_custom_button(__("General Ledger"), function() { + frm.add_custom_button( + frm.doc.is_group + ? __("Convert to Ledger", null, "Warehouse") + : __("Convert to Group", null, "Warehouse"), + function () { + convert_to_group_or_ledger(frm); + }, + ); + + if (!frm.doc.is_group && frm.doc.__onload && frm.doc.__onload.account) { + frm.add_custom_button( + __("General Ledger", null, "Warehouse"), + function () { frappe.route_options = { - "account": frm.doc.__onload.account, - "company": frm.doc.company - } + account: frm.doc.__onload.account, + company: frm.doc.company, + }; frappe.set_route("query-report", "General Ledger"); - }); - } - - frm.add_custom_button(__('Non-Group to Group'), - function() { convert_to_group_or_ledger(frm); }, 'fa fa-retweet', 'btn-default') - } - - frm.toggle_enable(['is_group', 'company'], false); - - frappe.dynamic_link = {doc: frm.doc, fieldname: 'name', doctype: 'Warehouse'}; - - frm.fields_dict['parent_warehouse'].get_query = function(doc) { - return { - filters: { - "is_group": 1, } - } + ); } - frm.fields_dict['account'].get_query = function(doc) { - return { - filters: { - "is_group": 0, - "account_type": "Stock", - "company": frm.doc.company - } - } - } - } + frm.toggle_enable(["is_group", "company"], false); + + frappe.dynamic_link = { + doc: frm.doc, + fieldname: "name", + doctype: "Warehouse", + }; + }, }); -function convert_to_group_or_ledger(frm){ +function convert_to_group_or_ledger(frm) { frappe.call({ - method:"erpnext.stock.doctype.warehouse.warehouse.convert_to_group_or_ledger", + method: "erpnext.stock.doctype.warehouse.warehouse.convert_to_group_or_ledger", args: { docname: frm.doc.name, - is_group: frm.doc.is_group + is_group: frm.doc.is_group, }, - callback: function(){ + callback: function () { frm.refresh(); - } - - }) + }, + }); } diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py index df16643d46..ab784ca107 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.py +++ b/erpnext/stock/doctype/warehouse/warehouse.py @@ -161,8 +161,7 @@ def get_children(doctype, parent=None, company=None, is_root=False): fields = ["name as value", "is_group as expandable"] filters = [ - ["docstatus", "<", "2"], - ['ifnull(`parent_warehouse`, "")', "=", parent], + ["ifnull(`parent_warehouse`, '')", "=", parent], ["company", "in", (company, None, "")], ] diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 324ff4f409..e83182f411 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -63,18 +63,16 @@ def get_item_details(args, doc=None, for_validate=False, overwrite_warehouse=Tru item = frappe.get_cached_doc("Item", args.item_code) validate_item_details(args, item) - out = get_basic_details(args, item, overwrite_warehouse) - if isinstance(doc, str): doc = json.loads(doc) - if doc and doc.get("doctype") == "Purchase Invoice": - args["bill_date"] = doc.get("bill_date") - if doc: - args["posting_date"] = doc.get("posting_date") - args["transaction_date"] = doc.get("transaction_date") + args["transaction_date"] = doc.get("transaction_date") or doc.get("posting_date") + if doc.get("doctype") == "Purchase Invoice": + args["bill_date"] = doc.get("bill_date") + + out = get_basic_details(args, item, overwrite_warehouse) get_item_tax_template(args, item, out) out["item_tax_rate"] = get_item_tax_map( args.company, @@ -199,7 +197,7 @@ def process_args(args): if not args.get("price_list"): args.price_list = args.get("selling_price_list") or args.get("buying_price_list") - if args.barcode: + if not args.item_code and args.barcode: args.item_code = get_item_code(barcode=args.barcode) elif not args.item_code and args.serial_no: args.item_code = get_item_code(serial_no=args.serial_no) @@ -240,8 +238,13 @@ def validate_item_details(args, item): throw(_("Item {0} is a template, please select one of its variants").format(item.name)) elif args.transaction_type == "buying" and args.doctype != "Material Request": - if args.get("is_subcontracted") and item.is_sub_contracted_item != 1: - throw(_("Item {0} must be a Sub-contracted Item").format(item.name)) + if args.get("is_subcontracted"): + if args.get("is_old_subcontracting_flow"): + if item.is_sub_contracted_item != 1: + throw(_("Item {0} must be a Sub-contracted Item").format(item.name)) + else: + if item.is_stock_item: + throw(_("Item {0} must be a Non-Stock Item").format(item.name)) def get_basic_details(args, item, overwrite_warehouse=True): @@ -353,6 +356,7 @@ def get_basic_details(args, item, overwrite_warehouse=True): "has_batch_no": item.has_batch_no, "batch_no": args.get("batch_no"), "uom": args.uom, + "stock_uom": item.stock_uom, "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "qty": flt(args.qty) or 1.0, "stock_qty": flt(args.qty) or 1.0, @@ -365,7 +369,7 @@ def get_basic_details(args, item, overwrite_warehouse=True): "net_rate": 0.0, "net_amount": 0.0, "discount_percentage": 0.0, - "discount_amount": 0.0, + "discount_amount": flt(args.discount_amount) or 0.0, "supplier": get_default_supplier(args, item_defaults, item_group_defaults, brand_defaults), "update_stock": args.get("update_stock") if args.get("doctype") in ["Sales Invoice", "Purchase Invoice"] @@ -595,9 +599,7 @@ def _get_item_tax_template(args, taxes, out=None, for_validate=False): if tax.valid_from or tax.maximum_net_rate: # In purchase Invoice first preference will be given to supplier invoice date # if supplier date is not present then posting date - validation_date = ( - args.get("transaction_date") or args.get("bill_date") or args.get("posting_date") - ) + validation_date = args.get("bill_date") or args.get("transaction_date") if getdate(tax.valid_from) <= getdate(validation_date) and is_within_valid_range(args, tax): taxes_with_validity.append(tax) @@ -823,7 +825,9 @@ def insert_item_price(args): ): if frappe.has_permission("Item Price", "write"): price_list_rate = ( - args.rate / args.get("conversion_factor") if args.get("conversion_factor") else args.rate + (args.rate + args.discount_amount) / args.get("conversion_factor") + if args.get("conversion_factor") + else (args.rate + args.discount_amount) ) item_price = frappe.db.get_value( @@ -849,6 +853,7 @@ def insert_item_price(args): "item_code": args.item_code, "currency": args.currency, "price_list_rate": price_list_rate, + "uom": args.stock_uom, } ) item_price.insert() @@ -887,14 +892,10 @@ def get_item_price(args, item_code, ignore_party=False): conditions += """ and %(transaction_date)s between ifnull(valid_from, '2000-01-01') and ifnull(valid_upto, '2500-12-31')""" - if args.get("posting_date"): - conditions += """ and %(posting_date)s between - ifnull(valid_from, '2000-01-01') and ifnull(valid_upto, '2500-12-31')""" - return frappe.db.sql( """ select name, price_list_rate, uom from `tabItem Price` {conditions} - order by valid_from desc, batch_no desc, uom desc """.format( + order by valid_from desc, ifnull(batch_no, '') desc, uom desc """.format( conditions=conditions ), args, @@ -917,7 +918,6 @@ def get_price_list_rate_for(args, item_code): "supplier": args.get("supplier"), "uom": args.get("uom"), "transaction_date": args.get("transaction_date"), - "posting_date": args.get("posting_date"), "batch_no": args.get("batch_no"), } @@ -1348,12 +1348,22 @@ def get_price_list_currency_and_exchange_rate(args): @frappe.whitelist() def get_default_bom(item_code=None): - if item_code: - bom = frappe.db.get_value( - "BOM", {"docstatus": 1, "is_default": 1, "is_active": 1, "item": item_code} + def _get_bom(item): + bom = frappe.get_all( + "BOM", dict(item=item, is_active=True, is_default=True, docstatus=1), limit=1 ) - if bom: - return bom + return bom[0].name if bom else None + + if not item_code: + return + + bom_name = _get_bom(item_code) + + template_item = frappe.db.get_value("Item", item_code, "variant_of") + if not bom_name and template_item: + bom_name = _get_bom(template_item) + + return bom_name @frappe.whitelist() diff --git a/erpnext/stock/reorder_item.py b/erpnext/stock/reorder_item.py index 4763b472c2..136c78ff58 100644 --- a/erpnext/stock/reorder_item.py +++ b/erpnext/stock/reorder_item.py @@ -105,7 +105,7 @@ def get_item_warehouse_projected_qty(items_to_consider): for item_code, warehouse, projected_qty in frappe.db.sql( """select item_code, warehouse, projected_qty from tabBin where item_code in ({0}) - and (warehouse != "" and warehouse is not null)""".format( + and (warehouse != '' and warehouse is not null)""".format( ", ".join(["%s"] * len(items_to_consider)) ), items_to_consider, @@ -252,11 +252,14 @@ def notify_errors(exceptions_list): ) for exception in exceptions_list: - exception = json.loads(exception) - error_message = """
    {0}

    """.format( - _(exception.get("message")) - ) - content += error_message + try: + exception = json.loads(exception) + error_message = """
    {0}

    """.format( + _(exception.get("message")) + ) + content += error_message + except Exception: + pass content += _("Regards,") + "
    " + _("Administrator") diff --git a/erpnext/hr/doctype/daily_work_summary/__init__.py b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/__init__.py similarity index 100% rename from erpnext/hr/doctype/daily_work_summary/__init__.py rename to erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/__init__.py diff --git a/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js new file mode 100644 index 0000000000..0b8f49653d --- /dev/null +++ b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.js @@ -0,0 +1,53 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +const DIFFERNCE_FIELD_NAMES = [ + "fifo_qty_diff", + "fifo_value_diff", +]; + +frappe.query_reports["FIFO Queue vs Qty After Transaction Comparison"] = { + "filters": [ + { + "fieldname": "item_code", + "fieldtype": "Link", + "label": "Item", + "options": "Item", + get_query: function() { + return { + filters: {is_stock_item: 1, has_serial_no: 0} + } + } + }, + { + "fieldname": "item_group", + "fieldtype": "Link", + "label": "Item Group", + "options": "Item Group", + }, + { + "fieldname": "warehouse", + "fieldtype": "Link", + "label": "Warehouse", + "options": "Warehouse", + }, + { + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From Posting Date", + }, + { + "fieldname": "to_date", + "fieldtype": "Date", + "label": "From Posting Date", + } + ], + formatter (value, row, column, data, default_formatter) { + value = default_formatter(value, row, column, data); + if (DIFFERNCE_FIELD_NAMES.includes(column.fieldname) && Math.abs(data[column.fieldname]) > 0.001) { + value = "" + value + ""; + } + return value; + }, +}; diff --git a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.json b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.json similarity index 53% rename from erpnext/regional/report/e_invoice_summary/e_invoice_summary.json rename to erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.json index d0000ad50d..5e958aa1b0 100644 --- a/erpnext/regional/report/e_invoice_summary/e_invoice_summary.json +++ b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.json @@ -1,7 +1,7 @@ { "add_total_row": 0, "columns": [], - "creation": "2021-03-12 11:23:37.312294", + "creation": "2022-05-11 04:09:13.460652", "disable_prepared_report": 0, "disabled": 0, "docstatus": 0, @@ -9,16 +9,15 @@ "filters": [], "idx": 0, "is_standard": "Yes", - "json": "{}", - "letter_head": "Logo", - "modified": "2021-03-13 12:36:48.689413", + "letter_head": "abc", + "modified": "2022-05-11 04:09:20.232177", "modified_by": "Administrator", - "module": "Regional", - "name": "E-Invoice Summary", + "module": "Stock", + "name": "FIFO Queue vs Qty After Transaction Comparison", "owner": "Administrator", "prepared_report": 0, - "ref_doctype": "Sales Invoice", - "report_name": "E-Invoice Summary", + "ref_doctype": "Stock Ledger Entry", + "report_name": "FIFO Queue vs Qty After Transaction Comparison", "report_type": "Script Report", "roles": [ { diff --git a/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py new file mode 100644 index 0000000000..9e140336c9 --- /dev/null +++ b/erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py @@ -0,0 +1,212 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import json + +import frappe +from frappe import _ +from frappe.utils import flt +from frappe.utils.nestedset import get_descendants_of + +SLE_FIELDS = ( + "name", + "item_code", + "warehouse", + "posting_date", + "posting_time", + "creation", + "voucher_type", + "voucher_no", + "actual_qty", + "qty_after_transaction", + "stock_queue", + "batch_no", + "stock_value", + "valuation_rate", +) + + +def execute(filters=None): + columns = get_columns() + data = get_data(filters) + return columns, data + + +def get_data(filters): + if not any([filters.warehouse, filters.item_code, filters.item_group]): + frappe.throw(_("Any one of following filters required: warehouse, Item Code, Item Group")) + sles = get_stock_ledger_entries(filters) + return find_first_bad_queue(sles) + + +def get_stock_ledger_entries(filters): + + sle_filters = {"is_cancelled": 0} + + if filters.warehouse: + children = get_descendants_of("Warehouse", filters.warehouse) + sle_filters["warehouse"] = ("in", children + [filters.warehouse]) + + if filters.item_code: + sle_filters["item_code"] = filters.item_code + elif filters.get("item_group"): + item_group = filters.get("item_group") + children = get_descendants_of("Item Group", item_group) + item_group_filter = {"item_group": ("in", children + [item_group])} + sle_filters["item_code"] = ( + "in", + frappe.get_all("Item", filters=item_group_filter, pluck="name", order_by=None), + ) + + if filters.from_date: + sle_filters["posting_date"] = (">=", filters.from_date) + if filters.to_date: + sle_filters["posting_date"] = ("<=", filters.to_date) + + return frappe.get_all( + "Stock Ledger Entry", + fields=SLE_FIELDS, + filters=sle_filters, + order_by="timestamp(posting_date, posting_time), creation", + ) + + +def find_first_bad_queue(sles): + item_warehouse_sles = {} + for sle in sles: + item_warehouse_sles.setdefault((sle.item_code, sle.warehouse), []).append(sle) + + data = [] + + for _item_wh, sles in item_warehouse_sles.items(): + for idx, sle in enumerate(sles): + queue = json.loads(sle.stock_queue or "[]") + + sle.fifo_queue_qty = 0.0 + sle.fifo_stock_value = 0.0 + for qty, rate in queue: + sle.fifo_queue_qty += flt(qty) + sle.fifo_stock_value += flt(qty) * flt(rate) + + sle.fifo_qty_diff = sle.qty_after_transaction - sle.fifo_queue_qty + sle.fifo_value_diff = sle.stock_value - sle.fifo_stock_value + + if sle.batch_no: + sle.use_batchwise_valuation = frappe.db.get_value( + "Batch", sle.batch_no, "use_batchwise_valuation", cache=True + ) + + if abs(sle.fifo_qty_diff) > 0.001 or abs(sle.fifo_value_diff) > 0.1: + if idx: + data.append(sles[idx - 1]) + data.append(sle) + data.append({}) + break + + return data + + +def get_columns(): + return [ + { + "fieldname": "name", + "fieldtype": "Link", + "label": _("Stock Ledger Entry"), + "options": "Stock Ledger Entry", + }, + { + "fieldname": "item_code", + "fieldtype": "Link", + "label": _("Item Code"), + "options": "Item", + }, + { + "fieldname": "warehouse", + "fieldtype": "Link", + "label": _("Warehouse"), + "options": "Warehouse", + }, + { + "fieldname": "posting_date", + "fieldtype": "Data", + "label": _("Posting Date"), + }, + { + "fieldname": "posting_time", + "fieldtype": "Data", + "label": _("Posting Time"), + }, + { + "fieldname": "creation", + "fieldtype": "Data", + "label": _("Creation"), + }, + { + "fieldname": "voucher_type", + "fieldtype": "Link", + "label": _("Voucher Type"), + "options": "DocType", + }, + { + "fieldname": "voucher_no", + "fieldtype": "Dynamic Link", + "label": _("Voucher No"), + "options": "voucher_type", + }, + { + "fieldname": "batch_no", + "fieldtype": "Link", + "label": _("Batch"), + "options": "Batch", + }, + { + "fieldname": "use_batchwise_valuation", + "fieldtype": "Check", + "label": _("Batchwise Valuation"), + }, + { + "fieldname": "actual_qty", + "fieldtype": "Float", + "label": _("Qty Change"), + }, + { + "fieldname": "qty_after_transaction", + "fieldtype": "Float", + "label": _("(A) Qty After Transaction"), + }, + { + "fieldname": "stock_queue", + "fieldtype": "Data", + "label": _("FIFO/LIFO Queue"), + }, + { + "fieldname": "fifo_queue_qty", + "fieldtype": "Float", + "label": _("(C) Total qty in queue"), + }, + { + "fieldname": "fifo_qty_diff", + "fieldtype": "Float", + "label": _("A - C"), + }, + { + "fieldname": "stock_value", + "fieldtype": "Float", + "label": _("(D) Balance Stock Value"), + }, + { + "fieldname": "fifo_stock_value", + "fieldtype": "Float", + "label": _("(E) Balance Stock Value in Queue"), + }, + { + "fieldname": "fifo_value_diff", + "fieldtype": "Float", + "label": _("D - E"), + }, + { + "fieldname": "valuation_rate", + "fieldtype": "Float", + "label": _("(H) Valuation Rate"), + }, + ] diff --git a/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.py b/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.py index bcc213905d..b68db356ea 100644 --- a/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.py +++ b/erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.py @@ -73,7 +73,7 @@ def get_stock_ledger_entries(report_filters): "Stock Ledger Entry", fields=fields, filters=filters, - order_by="timestamp(posting_date, posting_time) asc, creation asc", + order_by="posting_date asc, posting_time asc, creation asc", ) diff --git a/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.py b/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.py index 78c6961623..39d84a7d5b 100644 --- a/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.py +++ b/erpnext/stock/report/incorrect_serial_no_valuation/incorrect_serial_no_valuation.py @@ -106,7 +106,7 @@ def get_stock_ledger_entries(report_filters): "Stock Ledger Entry", fields=fields, filters=filters, - order_by="timestamp(posting_date, posting_time) asc, creation asc", + order_by="posting_date asc, posting_time asc, creation asc", ) diff --git a/erpnext/stock/report/stock_analytics/stock_analytics.py b/erpnext/stock/report/stock_analytics/stock_analytics.py index da0776b9a8..89ca9d9126 100644 --- a/erpnext/stock/report/stock_analytics/stock_analytics.py +++ b/erpnext/stock/report/stock_analytics/stock_analytics.py @@ -1,6 +1,7 @@ # Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt import datetime +from typing import List import frappe from frappe import _, scrub @@ -148,18 +149,26 @@ def get_periodic_data(entry, filters): - Warehouse A : bal_qty/value - Warehouse B : bal_qty/value """ + + expected_ranges = get_period_date_ranges(filters) + expected_periods = [] + for _start_date, end_date in expected_ranges: + expected_periods.append(get_period(end_date, filters)) + periodic_data = {} for d in entry: period = get_period(d.posting_date, filters) bal_qty = 0 + fill_intermediate_periods(periodic_data, d.item_code, period, expected_periods) + # if period against item does not exist yet, instantiate it # insert existing balance dict against period, and add/subtract to it if periodic_data.get(d.item_code) and not periodic_data.get(d.item_code).get(period): previous_balance = periodic_data[d.item_code]["balance"].copy() periodic_data[d.item_code][period] = previous_balance - if d.voucher_type == "Stock Reconciliation": + if d.voucher_type == "Stock Reconciliation" and not d.batch_no: if periodic_data.get(d.item_code) and periodic_data.get(d.item_code).get("balance").get( d.warehouse ): @@ -186,6 +195,36 @@ def get_periodic_data(entry, filters): return periodic_data +def fill_intermediate_periods( + periodic_data, item_code: str, current_period: str, all_periods: List[str] +) -> None: + """There might be intermediate periods where no stock ledger entry exists, copy previous previous data. + + Previous data is ONLY copied if period falls in report range and before period being processed currently. + + args: + current_period: process till this period (exclusive) + all_periods: all periods expected in report via filters + periodic_data: report's periodic data + item_code: item_code being processed + """ + + previous_period_data = None + for period in all_periods: + if period == current_period: + return + + if ( + periodic_data.get(item_code) + and not periodic_data.get(item_code).get(period) + and previous_period_data + ): + # This period should exist since it's in report range, assign previous period data + periodic_data[item_code][period] = previous_period_data.copy() + + previous_period_data = periodic_data.get(item_code, {}).get(period) + + def get_data(filters): data = [] items = get_items(filters) @@ -194,6 +233,8 @@ def get_data(filters): periodic_data = get_periodic_data(sle, filters) ranges = get_period_date_ranges(filters) + today = getdate() + for dummy, item_data in item_details.items(): row = { "name": item_data.name, @@ -202,14 +243,15 @@ def get_data(filters): "uom": item_data.stock_uom, "brand": item_data.brand, } - total = 0 - for dummy, end_date in ranges: + previous_period_value = 0.0 + for start_date, end_date in ranges: period = get_period(end_date, filters) period_data = periodic_data.get(item_data.name, {}).get(period) - amount = sum(period_data.values()) if period_data else 0 - row[scrub(period)] = amount - total += amount - row["total"] = total + if period_data: + row[scrub(period)] = previous_period_value = sum(period_data.values()) + else: + row[scrub(period)] = previous_period_value if today >= start_date else None + data.append(row) return data diff --git a/erpnext/stock/report/stock_analytics/test_stock_analytics.py b/erpnext/stock/report/stock_analytics/test_stock_analytics.py index f6c98f914d..dd8f8d8038 100644 --- a/erpnext/stock/report/stock_analytics/test_stock_analytics.py +++ b/erpnext/stock/report/stock_analytics/test_stock_analytics.py @@ -1,13 +1,59 @@ import datetime +import frappe from frappe import _dict from frappe.tests.utils import FrappeTestCase +from frappe.utils.data import add_to_date, get_datetime, getdate, nowdate from erpnext.accounts.utils import get_fiscal_year -from erpnext.stock.report.stock_analytics.stock_analytics import get_period_date_ranges +from erpnext.stock.doctype.item.test_item import make_item +from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry +from erpnext.stock.report.stock_analytics.stock_analytics import execute, get_period_date_ranges + + +def stock_analytics(filters): + col, data, *_ = execute(filters) + return col, data class TestStockAnalyticsReport(FrappeTestCase): + def setUp(self) -> None: + self.item = make_item().name + self.warehouse = "_Test Warehouse - _TC" + + def assert_single_item_report(self, movement, expected_buckets): + self.generate_stock(movement) + filters = _dict( + range="Monthly", + from_date=movement[0][1].replace(day=1), + to_date=movement[-1][1].replace(day=28), + value_quantity="Quantity", + company="_Test Company", + item_code=self.item, + ) + + cols, data = stock_analytics(filters) + + self.assertEqual(len(data), 1) + row = frappe._dict(data[0]) + self.assertEqual(row.name, self.item) + self.compare_analytics_row(row, cols, expected_buckets) + + def generate_stock(self, movement): + for qty, posting_date in movement: + args = {"item": self.item, "qty": abs(qty), "posting_date": posting_date} + args["to_warehouse" if qty > 0 else "from_warehouse"] = self.warehouse + make_stock_entry(**args) + + def compare_analytics_row(self, report_row, columns, expected_buckets): + # last (N) cols will be monthly data + no_of_buckets = len(expected_buckets) + month_cols = [col["fieldname"] for col in columns[-no_of_buckets:]] + + actual_buckets = [report_row.get(col) for col in month_cols] + + self.assertEqual(actual_buckets, expected_buckets) + def test_get_period_date_ranges(self): filters = _dict(range="Monthly", from_date="2020-12-28", to_date="2021-02-06") @@ -33,3 +79,38 @@ class TestStockAnalyticsReport(FrappeTestCase): ] self.assertEqual(ranges, expected_ranges) + + def test_basic_report_functionality(self): + """Stock analytics report generates balance "as of" periods based on + user defined ranges. Check that this behaviour is correct.""" + + # create stock movement in 3 months at 15th of month + today = getdate() + movement = [ + (10, add_to_date(today, months=0).replace(day=15)), + (-5, add_to_date(today, months=1).replace(day=15)), + (10, add_to_date(today, months=2).replace(day=15)), + ] + self.assert_single_item_report(movement, [10, 5, 15]) + + def test_empty_month_in_between(self): + today = getdate() + movement = [ + (100, add_to_date(today, months=0).replace(day=15)), + (-50, add_to_date(today, months=1).replace(day=15)), + # Skip a month + (20, add_to_date(today, months=3).replace(day=15)), + ] + self.assert_single_item_report(movement, [100, 50, 50, 70]) + + def test_multi_month_missings(self): + today = getdate() + movement = [ + (100, add_to_date(today, months=0).replace(day=15)), + (-50, add_to_date(today, months=1).replace(day=15)), + # Skip a month + (20, add_to_date(today, months=3).replace(day=15)), + # Skip another month + (-10, add_to_date(today, months=5).replace(day=15)), + ] + self.assert_single_item_report(movement, [100, 50, 50, 70, 70, 60]) diff --git a/erpnext/stock/report/stock_balance/stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js index ce6ffa0b91..9b3965d0d6 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.js +++ b/erpnext/stock/report/stock_balance/stock_balance.js @@ -102,3 +102,5 @@ frappe.query_reports["Stock Balance"] = { return value; } }; + +erpnext.utils.add_inventory_dimensions('Stock Balance', 8); \ No newline at end of file diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index 6369f910a4..679d234c9f 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -13,6 +13,7 @@ from frappe.utils.nestedset import get_descendants_of from pypika.terms import ExistsCriterion import erpnext +from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions from erpnext.stock.report.stock_ageing.stock_ageing import FIFOSlots, get_average_age from erpnext.stock.utils import add_additional_uom_columns, is_reposting_item_valuation_in_progress @@ -66,9 +67,14 @@ def execute(filters: Optional[StockBalanceFilter] = None): _func = itemgetter(1) to_date = filters.get("to_date") - for (company, item, warehouse) in sorted(iwb_map): + + for group_by_key in iwb_map: + item = group_by_key[1] + warehouse = group_by_key[2] + company = group_by_key[0] + if item_map.get(item): - qty_dict = iwb_map[(company, item, warehouse)] + qty_dict = iwb_map[group_by_key] item_reorder_level = 0 item_reorder_qty = 0 if item + warehouse in item_reorder_detail_map: @@ -135,88 +141,104 @@ def get_columns(filters: StockBalanceFilter): "options": "Warehouse", "width": 100, }, - { - "label": _("Stock UOM"), - "fieldname": "stock_uom", - "fieldtype": "Link", - "options": "UOM", - "width": 90, - }, - { - "label": _("Balance Qty"), - "fieldname": "bal_qty", - "fieldtype": "Float", - "width": 100, - "convertible": "qty", - }, - { - "label": _("Balance Value"), - "fieldname": "bal_val", - "fieldtype": "Currency", - "width": 100, - "options": "currency", - }, - { - "label": _("Opening Qty"), - "fieldname": "opening_qty", - "fieldtype": "Float", - "width": 100, - "convertible": "qty", - }, - { - "label": _("Opening Value"), - "fieldname": "opening_val", - "fieldtype": "Currency", - "width": 110, - "options": "currency", - }, - { - "label": _("In Qty"), - "fieldname": "in_qty", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - {"label": _("In Value"), "fieldname": "in_val", "fieldtype": "Float", "width": 80}, - { - "label": _("Out Qty"), - "fieldname": "out_qty", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - {"label": _("Out Value"), "fieldname": "out_val", "fieldtype": "Float", "width": 80}, - { - "label": _("Valuation Rate"), - "fieldname": "val_rate", - "fieldtype": "Currency", - "width": 90, - "convertible": "rate", - "options": "currency", - }, - { - "label": _("Reorder Level"), - "fieldname": "reorder_level", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - { - "label": _("Reorder Qty"), - "fieldname": "reorder_qty", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - { - "label": _("Company"), - "fieldname": "company", - "fieldtype": "Link", - "options": "Company", - "width": 100, - }, ] + for dimension in get_inventory_dimensions(): + columns.append( + { + "label": _(dimension.doctype), + "fieldname": dimension.fieldname, + "fieldtype": "Link", + "options": dimension.doctype, + "width": 110, + } + ) + + columns.extend( + [ + { + "label": _("Stock UOM"), + "fieldname": "stock_uom", + "fieldtype": "Link", + "options": "UOM", + "width": 90, + }, + { + "label": _("Balance Qty"), + "fieldname": "bal_qty", + "fieldtype": "Float", + "width": 100, + "convertible": "qty", + }, + { + "label": _("Balance Value"), + "fieldname": "bal_val", + "fieldtype": "Currency", + "width": 100, + "options": "currency", + }, + { + "label": _("Opening Qty"), + "fieldname": "opening_qty", + "fieldtype": "Float", + "width": 100, + "convertible": "qty", + }, + { + "label": _("Opening Value"), + "fieldname": "opening_val", + "fieldtype": "Currency", + "width": 110, + "options": "currency", + }, + { + "label": _("In Qty"), + "fieldname": "in_qty", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + {"label": _("In Value"), "fieldname": "in_val", "fieldtype": "Float", "width": 80}, + { + "label": _("Out Qty"), + "fieldname": "out_qty", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + {"label": _("Out Value"), "fieldname": "out_val", "fieldtype": "Float", "width": 80}, + { + "label": _("Valuation Rate"), + "fieldname": "val_rate", + "fieldtype": "Currency", + "width": 90, + "convertible": "rate", + "options": "currency", + }, + { + "label": _("Reorder Level"), + "fieldname": "reorder_level", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + { + "label": _("Reorder Qty"), + "fieldname": "reorder_qty", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + { + "label": _("Company"), + "fieldname": "company", + "fieldtype": "Link", + "options": "Company", + "width": 100, + }, + ] + ) + if filters.get("show_stock_ageing_data"): columns += [ {"label": _("Average Age"), "fieldname": "average_age", "width": 100}, @@ -296,6 +318,13 @@ def get_stock_ledger_entries(filters: StockBalanceFilter, items: List[str]) -> L .orderby(sle.actual_qty) ) + inventory_dimension_fields = get_inventory_dimension_fields() + if inventory_dimension_fields: + for fieldname in inventory_dimension_fields: + query = query.select(fieldname) + if fieldname in filters and filters.get(fieldname): + query = query.where(sle[fieldname].isin(filters.get(fieldname))) + if items: query = query.where(sle.item_code.isin(items)) @@ -303,6 +332,10 @@ def get_stock_ledger_entries(filters: StockBalanceFilter, items: List[str]) -> L return query.run(as_dict=True) +def get_inventory_dimension_fields(): + return [dimension.fieldname for dimension in get_inventory_dimensions()] + + def get_item_warehouse_map(filters: StockBalanceFilter, sle: List[SLEntry]): iwb_map = {} from_date = getdate(filters.get("from_date")) @@ -310,10 +343,12 @@ def get_item_warehouse_map(filters: StockBalanceFilter, sle: List[SLEntry]): float_precision = cint(frappe.db.get_default("float_precision")) or 3 + inventory_dimensions = get_inventory_dimension_fields() + for d in sle: - key = (d.company, d.item_code, d.warehouse) - if key not in iwb_map: - iwb_map[key] = frappe._dict( + group_by_key = get_group_by_key(d, filters, inventory_dimensions) + if group_by_key not in iwb_map: + iwb_map[group_by_key] = frappe._dict( { "opening_qty": 0.0, "opening_val": 0.0, @@ -327,7 +362,9 @@ def get_item_warehouse_map(filters: StockBalanceFilter, sle: List[SLEntry]): } ) - qty_dict = iwb_map[(d.company, d.item_code, d.warehouse)] + qty_dict = iwb_map[group_by_key] + for field in inventory_dimensions: + qty_dict[field] = d.get(field) if d.voucher_type == "Stock Reconciliation" and not d.batch_no: qty_diff = flt(d.qty_after_transaction) - flt(qty_dict.bal_qty) @@ -356,24 +393,41 @@ def get_item_warehouse_map(filters: StockBalanceFilter, sle: List[SLEntry]): qty_dict.bal_qty += qty_diff qty_dict.bal_val += value_diff - iwb_map = filter_items_with_no_transactions(iwb_map, float_precision) + iwb_map = filter_items_with_no_transactions(iwb_map, float_precision, inventory_dimensions) return iwb_map -def filter_items_with_no_transactions(iwb_map, float_precision: float): - for (company, item, warehouse) in sorted(iwb_map): - qty_dict = iwb_map[(company, item, warehouse)] +def get_group_by_key(row, filters, inventory_dimension_fields) -> tuple: + group_by_key = [row.company, row.item_code, row.warehouse] + + for fieldname in inventory_dimension_fields: + if filters.get(fieldname): + group_by_key.append(row.get(fieldname)) + + return tuple(group_by_key) + + +def filter_items_with_no_transactions(iwb_map, float_precision: float, inventory_dimensions: list): + pop_keys = [] + for group_by_key in iwb_map: + qty_dict = iwb_map[group_by_key] no_transactions = True for key, val in qty_dict.items(): + if key in inventory_dimensions: + continue + val = flt(val, float_precision) qty_dict[key] = val if key != "val_rate" and val: no_transactions = False if no_transactions: - iwb_map.pop((company, item, warehouse)) + pop_keys.append(group_by_key) + + for key in pop_keys: + iwb_map.pop(key) return iwb_map diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.js b/erpnext/stock/report/stock_ledger/stock_ledger.js index ef7c2cc7d9..0def161d28 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.js +++ b/erpnext/stock/report/stock_ledger/stock_ledger.js @@ -95,4 +95,6 @@ frappe.query_reports["Stock Ledger"] = { return value; }, -} +}; + +erpnext.utils.add_inventory_dimensions('Stock Ledger', 10); \ No newline at end of file diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 409e238657..e18d4c7522 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -4,8 +4,11 @@ import frappe from frappe import _ +from frappe.query_builder.functions import CombineDatetime from frappe.utils import cint, flt +from pypika.terms import ExistsCriterion +from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import get_stock_balance_for from erpnext.stock.utils import ( @@ -17,7 +20,7 @@ from erpnext.stock.utils import ( def execute(filters=None): is_reposting_item_valuation_in_progress() include_uom = filters.get("include_uom") - columns = get_columns() + columns = get_columns(filters) items = get_items(filters) sl_entries = get_stock_ledger_entries(filters, items) item_details = get_item_details(items, sl_entries, include_uom) @@ -33,12 +36,14 @@ def execute(filters=None): actual_qty = stock_value = 0 available_serial_nos = {} + inventory_dimension_filters_applied = check_inventory_dimension_filters_applied(filters) + for sle in sl_entries: item_detail = item_details[sle.item_code] sle.update(item_detail) - if filters.get("batch_no"): + if filters.get("batch_no") or inventory_dimension_filters_applied: actual_qty += flt(sle.actual_qty, precision) stock_value += sle.stock_value_difference @@ -67,7 +72,7 @@ def update_available_serial_nos(available_serial_nos, sle): key = (sle.item_code, sle.warehouse) if key not in available_serial_nos: stock_balance = get_stock_balance_for( - sle.item_code, sle.warehouse, sle.date.split(" ")[0], sle.date.split(" ")[1] + sle.item_code, sle.warehouse, sle.posting_date, sle.posting_time ) serials = get_serial_nos(stock_balance["serial_nos"]) if stock_balance["serial_nos"] else [] available_serial_nos.setdefault(key, serials) @@ -88,7 +93,7 @@ def update_available_serial_nos(available_serial_nos, sle): sle.balance_serial_no = "\n".join(existing_serial_no) -def get_columns(): +def get_columns(filters): columns = [ {"label": _("Date"), "fieldname": "date", "fieldtype": "Datetime", "width": 150}, { @@ -106,170 +111,210 @@ def get_columns(): "options": "UOM", "width": 90, }, - { - "label": _("In Qty"), - "fieldname": "in_qty", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - { - "label": _("Out Qty"), - "fieldname": "out_qty", - "fieldtype": "Float", - "width": 80, - "convertible": "qty", - }, - { - "label": _("Balance Qty"), - "fieldname": "qty_after_transaction", - "fieldtype": "Float", - "width": 100, - "convertible": "qty", - }, - { - "label": _("Voucher #"), - "fieldname": "voucher_no", - "fieldtype": "Dynamic Link", - "options": "voucher_type", - "width": 150, - }, - { - "label": _("Warehouse"), - "fieldname": "warehouse", - "fieldtype": "Link", - "options": "Warehouse", - "width": 150, - }, - { - "label": _("Item Group"), - "fieldname": "item_group", - "fieldtype": "Link", - "options": "Item Group", - "width": 100, - }, - { - "label": _("Brand"), - "fieldname": "brand", - "fieldtype": "Link", - "options": "Brand", - "width": 100, - }, - {"label": _("Description"), "fieldname": "description", "width": 200}, - { - "label": _("Incoming Rate"), - "fieldname": "incoming_rate", - "fieldtype": "Currency", - "width": 110, - "options": "Company:company:default_currency", - "convertible": "rate", - }, - { - "label": _("Valuation Rate"), - "fieldname": "valuation_rate", - "fieldtype": "Currency", - "width": 110, - "options": "Company:company:default_currency", - "convertible": "rate", - }, - { - "label": _("Balance Value"), - "fieldname": "stock_value", - "fieldtype": "Currency", - "width": 110, - "options": "Company:company:default_currency", - }, - { - "label": _("Value Change"), - "fieldname": "stock_value_difference", - "fieldtype": "Currency", - "width": 110, - "options": "Company:company:default_currency", - }, - {"label": _("Voucher Type"), "fieldname": "voucher_type", "width": 110}, - { - "label": _("Voucher #"), - "fieldname": "voucher_no", - "fieldtype": "Dynamic Link", - "options": "voucher_type", - "width": 100, - }, - { - "label": _("Batch"), - "fieldname": "batch_no", - "fieldtype": "Link", - "options": "Batch", - "width": 100, - }, - { - "label": _("Serial No"), - "fieldname": "serial_no", - "fieldtype": "Link", - "options": "Serial No", - "width": 100, - }, - {"label": _("Balance Serial No"), "fieldname": "balance_serial_no", "width": 100}, - { - "label": _("Project"), - "fieldname": "project", - "fieldtype": "Link", - "options": "Project", - "width": 100, - }, - { - "label": _("Company"), - "fieldname": "company", - "fieldtype": "Link", - "options": "Company", - "width": 110, - }, ] + for dimension in get_inventory_dimensions(): + columns.append( + { + "label": _(dimension.doctype), + "fieldname": dimension.fieldname, + "fieldtype": "Link", + "options": dimension.doctype, + "width": 110, + } + ) + + columns.extend( + [ + { + "label": _("In Qty"), + "fieldname": "in_qty", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + { + "label": _("Out Qty"), + "fieldname": "out_qty", + "fieldtype": "Float", + "width": 80, + "convertible": "qty", + }, + { + "label": _("Balance Qty"), + "fieldname": "qty_after_transaction", + "fieldtype": "Float", + "width": 100, + "convertible": "qty", + }, + { + "label": _("Voucher #"), + "fieldname": "voucher_no", + "fieldtype": "Dynamic Link", + "options": "voucher_type", + "width": 150, + }, + { + "label": _("Warehouse"), + "fieldname": "warehouse", + "fieldtype": "Link", + "options": "Warehouse", + "width": 150, + }, + { + "label": _("Item Group"), + "fieldname": "item_group", + "fieldtype": "Link", + "options": "Item Group", + "width": 100, + }, + { + "label": _("Brand"), + "fieldname": "brand", + "fieldtype": "Link", + "options": "Brand", + "width": 100, + }, + {"label": _("Description"), "fieldname": "description", "width": 200}, + { + "label": _("Incoming Rate"), + "fieldname": "incoming_rate", + "fieldtype": "Currency", + "width": 110, + "options": "Company:company:default_currency", + "convertible": "rate", + }, + { + "label": _("Valuation Rate"), + "fieldname": "valuation_rate", + "fieldtype": "Currency", + "width": 110, + "options": "Company:company:default_currency", + "convertible": "rate", + }, + { + "label": _("Balance Value"), + "fieldname": "stock_value", + "fieldtype": "Currency", + "width": 110, + "options": "Company:company:default_currency", + }, + { + "label": _("Value Change"), + "fieldname": "stock_value_difference", + "fieldtype": "Currency", + "width": 110, + "options": "Company:company:default_currency", + }, + {"label": _("Voucher Type"), "fieldname": "voucher_type", "width": 110}, + { + "label": _("Voucher #"), + "fieldname": "voucher_no", + "fieldtype": "Dynamic Link", + "options": "voucher_type", + "width": 100, + }, + { + "label": _("Batch"), + "fieldname": "batch_no", + "fieldtype": "Link", + "options": "Batch", + "width": 100, + }, + { + "label": _("Serial No"), + "fieldname": "serial_no", + "fieldtype": "Link", + "options": "Serial No", + "width": 100, + }, + {"label": _("Balance Serial No"), "fieldname": "balance_serial_no", "width": 100}, + { + "label": _("Project"), + "fieldname": "project", + "fieldtype": "Link", + "options": "Project", + "width": 100, + }, + { + "label": _("Company"), + "fieldname": "company", + "fieldtype": "Link", + "options": "Company", + "width": 110, + }, + ] + ) + return columns def get_stock_ledger_entries(filters, items): - item_conditions_sql = "" - if items: - item_conditions_sql = "and sle.item_code in ({})".format( - ", ".join(frappe.db.escape(i) for i in items) + sle = frappe.qb.DocType("Stock Ledger Entry") + query = ( + frappe.qb.from_(sle) + .select( + sle.item_code, + CombineDatetime(sle.posting_date, sle.posting_time).as_("date"), + sle.warehouse, + sle.posting_date, + sle.posting_time, + sle.actual_qty, + sle.incoming_rate, + sle.valuation_rate, + sle.company, + sle.voucher_type, + sle.qty_after_transaction, + sle.stock_value_difference, + sle.voucher_no, + sle.stock_value, + sle.batch_no, + sle.serial_no, + sle.project, ) - - sl_entries = frappe.db.sql( - """ - SELECT - concat_ws(" ", posting_date, posting_time) AS date, - item_code, - warehouse, - actual_qty, - qty_after_transaction, - incoming_rate, - valuation_rate, - stock_value, - voucher_type, - voucher_no, - batch_no, - serial_no, - company, - project, - stock_value_difference - FROM - `tabStock Ledger Entry` sle - WHERE - company = %(company)s - AND is_cancelled = 0 AND posting_date BETWEEN %(from_date)s AND %(to_date)s - {sle_conditions} - {item_conditions_sql} - ORDER BY - posting_date asc, posting_time asc, creation asc - """.format( - sle_conditions=get_sle_conditions(filters), item_conditions_sql=item_conditions_sql - ), - filters, - as_dict=1, + .where( + (sle.docstatus < 2) + & (sle.is_cancelled == 0) + & (sle.posting_date[filters.from_date : filters.to_date]) + ) + .orderby(CombineDatetime(sle.posting_date, sle.posting_time)) + .orderby(sle.creation) ) - return sl_entries + inventory_dimension_fields = get_inventory_dimension_fields() + if inventory_dimension_fields: + for fieldname in inventory_dimension_fields: + query = query.select(fieldname) + if fieldname in filters and filters.get(fieldname): + query = query.where(sle[fieldname].isin(filters.get(fieldname))) + + if items: + query = query.where(sle.item_code.isin(items)) + + for field in ["voucher_no", "batch_no", "project", "company"]: + if filters.get(field): + query = query.where(sle[field] == filters.get(field)) + + if warehouse := filters.get("warehouse"): + lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"]) + + warehouse_table = frappe.qb.DocType("Warehouse") + chilren_subquery = ( + frappe.qb.from_(warehouse_table) + .select(warehouse_table.name) + .where( + (warehouse_table.lft >= lft) + & (warehouse_table.rgt <= rgt) + & (warehouse_table.name == sle.warehouse) + ) + ) + query = query.where(ExistsCriterion(chilren_subquery)) + + return query.run(as_dict=True) + + +def get_inventory_dimension_fields(): + return [dimension.fieldname for dimension in get_inventory_dimensions()] def get_items(filters): @@ -341,6 +386,10 @@ def get_sle_conditions(filters): if filters.get("project"): conditions.append("project=%(project)s") + for dimension in get_inventory_dimensions(): + if filters.get(dimension.fieldname): + conditions.append(f"{dimension.fieldname} in %({dimension.fieldname})s") + return "and {}".format(" and ".join(conditions)) if conditions else "" @@ -363,7 +412,7 @@ def get_opening_balance(filters, columns, sl_entries): for sle in sl_entries: if ( sle.get("voucher_type") == "Stock Reconciliation" - and sle.get("date").split()[0] == filters.from_date + and sle.posting_date == filters.from_date and frappe.db.get_value("Stock Reconciliation", sle.voucher_no, "purpose") == "Opening Stock" ): last_entry = sle @@ -401,3 +450,11 @@ def get_item_group_condition(item_group): ) return "" + + +def check_inventory_dimension_filters_applied(filters) -> bool: + for dimension in get_inventory_dimensions(): + if dimension.fieldname in filters and filters.get(dimension.fieldname): + return True + + return False diff --git a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py index 837c4a6d15..ed0e2fc31b 100644 --- a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py +++ b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py @@ -111,17 +111,17 @@ def get_columns(): }, { "fieldname": "posting_date", - "fieldtype": "Date", + "fieldtype": "Data", "label": _("Posting Date"), }, { "fieldname": "posting_time", - "fieldtype": "Time", + "fieldtype": "Data", "label": _("Posting Time"), }, { "fieldname": "creation", - "fieldtype": "Datetime", + "fieldtype": "Data", "label": _("Creation"), }, { diff --git a/erpnext/stock/report/test_reports.py b/erpnext/stock/report/test_reports.py index 55b910432a..d118d8e569 100644 --- a/erpnext/stock/report/test_reports.py +++ b/erpnext/stock/report/test_reports.py @@ -65,6 +65,8 @@ REPORT_FILTER_TEST_CASES: List[Tuple[ReportName, ReportFilters]] = [ ("Delayed Item Report", {"based_on": "Delivery Note"}), ("Stock Ageing", {"range1": 30, "range2": 60, "range3": 90, "_optional": True}), ("Stock Ledger Invariant Check", {"warehouse": "_Test Warehouse - _TC", "item": "_Test Item"}), + ("FIFO Queue vs Qty After Transaction Comparison", {"warehouse": "_Test Warehouse - _TC"}), + ("FIFO Queue vs Qty After Transaction Comparison", {"item_group": "All Item Groups"}), ] OPTIONAL_FILTERS = { diff --git a/erpnext/stock/spec/README.md b/erpnext/stock/spec/README.md index f5a3501fe4..5aa1297334 100644 --- a/erpnext/stock/spec/README.md +++ b/erpnext/stock/spec/README.md @@ -7,7 +7,7 @@ - `controllers/stock_controller.py` - `stock/valuation.py` -## What is in an Stock Ledger Entry (SLE)? +## What is in a Stock Ledger Entry (SLE)? Stock Ledger Entry is a single row in the Stock Ledger. It signifies some modification of stock for a particular Item in the specified warehouse. diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py index e05d1c3a29..14cedd2e8a 100644 --- a/erpnext/stock/stock_balance.py +++ b/erpnext/stock/stock_balance.py @@ -118,7 +118,7 @@ def get_reserved_qty(item_code, warehouse): select qty, parent_detail_docname, parent, name from `tabPacked Item` dnpi_in where item_code = %s and warehouse = %s - and parenttype="Sales Order" + and parenttype='Sales Order' and item_code != parent_item and exists (select * from `tabSales Order` so where name = dnpi_in.parent and docstatus = 1 and status != 'Closed') @@ -194,7 +194,7 @@ def get_planned_qty(item_code, warehouse): planned_qty = frappe.db.sql( """ select sum(qty - produced_qty) from `tabWork Order` - where production_item = %s and fg_warehouse = %s and status not in ("Stopped", "Completed", "Closed") + where production_item = %s and fg_warehouse = %s and status not in ('Stopped', 'Completed', 'Closed') and docstatus=1 and qty > produced_qty""", (item_code, warehouse), ) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 7e5c231d9c..fd1aece7b1 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt import copy @@ -95,27 +95,26 @@ def repost_current_voucher(args, allow_negative_stock=False, via_landed_cost_vou if not args.get("posting_date"): args["posting_date"] = nowdate() - if args.get("is_cancelled") and via_landed_cost_voucher: - return - - # Reposts only current voucher SL Entries - # Updates valuation rate, stock value, stock queue for current transaction - update_entries_after( - { - "item_code": args.get("item_code"), - "warehouse": args.get("warehouse"), - "posting_date": args.get("posting_date"), - "posting_time": args.get("posting_time"), - "voucher_type": args.get("voucher_type"), - "voucher_no": args.get("voucher_no"), - "sle_id": args.get("name"), - "creation": args.get("creation"), - }, - allow_negative_stock=allow_negative_stock, - via_landed_cost_voucher=via_landed_cost_voucher, - ) + if not (args.get("is_cancelled") and via_landed_cost_voucher): + # Reposts only current voucher SL Entries + # Updates valuation rate, stock value, stock queue for current transaction + update_entries_after( + { + "item_code": args.get("item_code"), + "warehouse": args.get("warehouse"), + "posting_date": args.get("posting_date"), + "posting_time": args.get("posting_time"), + "voucher_type": args.get("voucher_type"), + "voucher_no": args.get("voucher_no"), + "sle_id": args.get("name"), + "creation": args.get("creation"), + }, + allow_negative_stock=allow_negative_stock, + via_landed_cost_voucher=via_landed_cost_voucher, + ) # update qty in future sle and Validate negative qty + # For LCV: update future balances with -ve LCV SLE, which will be balanced by +ve LCV SLE update_qty_in_future_sle(args, allow_negative_stock) @@ -209,8 +208,14 @@ def repost_future_sle( via_landed_cost_voucher=False, doc=None, ): - if not args and voucher_type and voucher_no: - args = get_items_to_be_repost(voucher_type, voucher_no, doc) + if not args: + args = [] # set args to empty list if None to avoid enumerate error + + items_to_be_repost = get_items_to_be_repost( + voucher_type=voucher_type, voucher_no=voucher_no, doc=doc + ) + if items_to_be_repost: + args = items_to_be_repost distinct_item_warehouses = get_distinct_item_warehouse(args, doc) affected_transactions = get_affected_transactions(doc) @@ -250,16 +255,11 @@ def repost_future_sle( data.sle_changed = False i += 1 - if doc and i % 2 == 0: + if doc: update_args_in_repost_item_valuation( doc, i, args, distinct_item_warehouses, affected_transactions ) - if doc and args: - update_args_in_repost_item_valuation( - doc, i, args, distinct_item_warehouses, affected_transactions - ) - def validate_item_warehouse(args): for field in ["item_code", "warehouse", "posting_date", "posting_time"]: @@ -291,17 +291,21 @@ def update_args_in_repost_item_valuation( ) -def get_items_to_be_repost(voucher_type, voucher_no, doc=None): +def get_items_to_be_repost(voucher_type=None, voucher_no=None, doc=None): + items_to_be_repost = [] if doc and doc.items_to_be_repost: - return json.loads(doc.items_to_be_repost) or [] + items_to_be_repost = json.loads(doc.items_to_be_repost) or [] - return frappe.db.get_all( - "Stock Ledger Entry", - filters={"voucher_type": voucher_type, "voucher_no": voucher_no}, - fields=["item_code", "warehouse", "posting_date", "posting_time", "creation"], - order_by="creation asc", - group_by="item_code, warehouse", - ) + if not items_to_be_repost and voucher_type and voucher_no: + items_to_be_repost = frappe.db.get_all( + "Stock Ledger Entry", + filters={"voucher_type": voucher_type, "voucher_no": voucher_no}, + fields=["item_code", "warehouse", "posting_date", "posting_time", "creation"], + order_by="creation asc", + group_by="item_code, warehouse", + ) + + return items_to_be_repost or [] def get_distinct_item_warehouse(args=None, doc=None): @@ -370,7 +374,7 @@ class update_entries_after(object): self.args["name"] = self.args.sle_id self.company = frappe.get_cached_value("Warehouse", self.args.warehouse, "company") - self.get_precision() + self.set_precision() self.valuation_method = get_valuation_method(self.item_code) self.new_items_found = False @@ -381,10 +385,10 @@ class update_entries_after(object): self.initialize_previous_data(self.args) self.build() - def get_precision(self): - company_base_currency = frappe.get_cached_value("Company", self.company, "default_currency") - self.precision = get_field_precision( - frappe.get_meta("Stock Ledger Entry").get_field("stock_value"), currency=company_base_currency + def set_precision(self): + self.flt_precision = cint(frappe.db.get_default("float_precision")) or 2 + self.currency_precision = get_field_precision( + frappe.get_meta("Stock Ledger Entry").get_field("stock_value") ) def initialize_previous_data(self, args): @@ -501,7 +505,9 @@ class update_entries_after(object): elif dependant_sle.item_code == self.item_code and dependant_sle.warehouse in self.data: return entries_to_fix else: - return self.append_future_sle_for_dependant(dependant_sle, entries_to_fix) + self.initialize_previous_data(dependant_sle) + self.update_distinct_item_warehouses(dependant_sle) + return entries_to_fix def update_distinct_item_warehouses(self, dependant_sle): key = (dependant_sle.item_code, dependant_sle.warehouse) @@ -518,17 +524,6 @@ class update_entries_after(object): self.distinct_item_warehouses[key] = val self.new_items_found = True - def append_future_sle_for_dependant(self, dependant_sle, entries_to_fix): - self.initialize_previous_data(dependant_sle) - - args = self.data[dependant_sle.warehouse].previous_sle or frappe._dict( - {"item_code": self.item_code, "warehouse": dependant_sle.warehouse} - ) - future_sle_for_dependant = list(self.get_sle_after_datetime(args)) - - entries_to_fix.extend(future_sle_for_dependant) - return sorted(entries_to_fix, key=lambda k: k["timestamp"]) - def process_sle(self, sle): from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos @@ -581,7 +576,7 @@ class update_entries_after(object): self.update_queue_values(sle) # rounding as per precision - self.wh_data.stock_value = flt(self.wh_data.stock_value, self.precision) + self.wh_data.stock_value = flt(self.wh_data.stock_value, self.currency_precision) if not self.wh_data.qty_after_transaction: self.wh_data.stock_value = 0.0 stock_value_difference = self.wh_data.stock_value - self.wh_data.prev_stock_value @@ -605,6 +600,7 @@ class update_entries_after(object): will not consider cancelled entries """ diff = self.wh_data.qty_after_transaction + flt(sle.actual_qty) + diff = flt(diff, self.flt_precision) # respect system precision if diff < 0 and abs(diff) > 0.0001: # negative stock! @@ -636,6 +632,7 @@ class update_entries_after(object): "Purchase Invoice", "Delivery Note", "Sales Invoice", + "Subcontracting Receipt", ): if frappe.get_cached_value(sle.voucher_type, sle.voucher_no, "is_return"): from erpnext.controllers.sales_and_purchase_return import ( @@ -652,6 +649,8 @@ class update_entries_after(object): else: if sle.voucher_type in ("Purchase Receipt", "Purchase Invoice"): rate_field = "valuation_rate" + elif sle.voucher_type == "Subcontracting Receipt": + rate_field = "rate" else: rate_field = "incoming_rate" @@ -665,6 +664,8 @@ class update_entries_after(object): else: if sle.voucher_type in ("Delivery Note", "Sales Invoice"): ref_doctype = "Packed Item" + elif sle == "Subcontracting Receipt": + ref_doctype = "Subcontracting Receipt Supplied Item" else: ref_doctype = "Purchase Receipt Item Supplied" @@ -690,6 +691,8 @@ class update_entries_after(object): self.update_rate_on_delivery_and_sales_return(sle, outgoing_rate) elif flt(sle.actual_qty) < 0 and sle.voucher_type in ("Purchase Receipt", "Purchase Invoice"): self.update_rate_on_purchase_receipt(sle, outgoing_rate) + elif flt(sle.actual_qty) < 0 and sle.voucher_type == "Subcontracting Receipt": + self.update_rate_on_subcontracting_receipt(sle, outgoing_rate) def update_rate_on_stock_entry(self, sle, outgoing_rate): frappe.db.set_value("Stock Entry Detail", sle.voucher_detail_no, "basic_rate", outgoing_rate) @@ -738,6 +741,14 @@ class update_entries_after(object): for d in doc.items + doc.supplied_items: d.db_update() + def update_rate_on_subcontracting_receipt(self, sle, outgoing_rate): + if frappe.db.exists(sle.voucher_type + " Item", sle.voucher_detail_no): + frappe.db.set_value(sle.voucher_type + " Item", sle.voucher_detail_no, "rate", outgoing_rate) + else: + frappe.db.set_value( + "Subcontracting Receipt Supplied Item", sle.voucher_detail_no, "rate", outgoing_rate + ) + def get_serialized_values(self, sle): incoming_rate = flt(sle.incoming_rate) actual_qty = flt(sle.actual_qty) @@ -1303,6 +1314,8 @@ def update_qty_in_future_sle(args, allow_negative_stock=False): datetime_limit_condition = "" qty_shift = args.actual_qty + args["time_format"] = "%H:%i:%s" + # find difference/shift in qty caused by stock reconciliation if args.voucher_type == "Stock Reconciliation": qty_shift = get_stock_reco_qty_shift(args) @@ -1315,7 +1328,7 @@ def update_qty_in_future_sle(args, allow_negative_stock=False): datetime_limit_condition = get_datetime_limit_condition(detail) frappe.db.sql( - """ + f""" update `tabStock Ledger Entry` set qty_after_transaction = qty_after_transaction + {qty_shift} where @@ -1323,16 +1336,10 @@ def update_qty_in_future_sle(args, allow_negative_stock=False): and warehouse = %(warehouse)s and voucher_no != %(voucher_no)s and is_cancelled = 0 - and (timestamp(posting_date, posting_time) > timestamp(%(posting_date)s, %(posting_time)s) - or ( - timestamp(posting_date, posting_time) = timestamp(%(posting_date)s, %(posting_time)s) - and creation > %(creation)s - ) - ) + and timestamp(posting_date, time_format(posting_time, %(time_format)s)) + > timestamp(%(posting_date)s, time_format(%(posting_time)s, %(time_format)s)) {datetime_limit_condition} - """.format( - qty_shift=qty_shift, datetime_limit_condition=datetime_limit_condition - ), + """, args, ) @@ -1383,6 +1390,7 @@ def get_next_stock_reco(args): and creation > %(creation)s ) ) + order by timestamp(posting_date, posting_time) asc, creation asc limit 1 """, args, @@ -1408,7 +1416,8 @@ def validate_negative_qty_in_future_sle(args, allow_negative_stock=False): return neg_sle = get_future_sle_with_negative_qty(args) - if neg_sle: + + if is_negative_with_precision(neg_sle): message = _( "{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction." ).format( @@ -1426,7 +1435,7 @@ def validate_negative_qty_in_future_sle(args, allow_negative_stock=False): return neg_batch_sle = get_future_sle_with_negative_batch_qty(args) - if neg_batch_sle: + if is_negative_with_precision(neg_batch_sle, is_batch=True): message = _( "{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction." ).format( @@ -1440,6 +1449,22 @@ def validate_negative_qty_in_future_sle(args, allow_negative_stock=False): frappe.throw(message, NegativeStockError, title=_("Insufficient Stock for Batch")) +def is_negative_with_precision(neg_sle, is_batch=False): + """ + Returns whether system precision rounded qty is insufficient. + E.g: -0.0003 in precision 3 (0.000) is sufficient for the user. + """ + + if not neg_sle: + return False + + field = "cumulative_total" if is_batch else "qty_after_transaction" + precision = cint(frappe.db.get_default("float_precision")) or 2 + qty_deficit = flt(neg_sle[0][field], precision) + + return qty_deficit < 0 and abs(qty_deficit) > 0.0001 + + def get_future_sle_with_negative_qty(args): return frappe.db.sql( """ diff --git a/erpnext/stock/tests/test_utils.py b/erpnext/stock/tests/test_utils.py index 9ee0c9f3b5..4e93ac93cb 100644 --- a/erpnext/stock/tests/test_utils.py +++ b/erpnext/stock/tests/test_utils.py @@ -1,16 +1,68 @@ +import json + import frappe from frappe.tests.utils import FrappeTestCase -from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.utils import scan_barcode -class TestStockUtilities(FrappeTestCase): +class StockTestMixin: + """Mixin to simplfy stock ledger tests, useful for all stock transactions.""" + + def make_item(self, item_code=None, properties=None, *args, **kwargs): + from erpnext.stock.doctype.item.test_item import make_item + + return make_item(item_code, properties, *args, **kwargs) + + def assertSLEs(self, doc, expected_sles, sle_filters=None): + """Compare sorted SLEs, useful for vouchers that create multiple SLEs for same line""" + + filters = {"voucher_no": doc.name, "voucher_type": doc.doctype, "is_cancelled": 0} + if sle_filters: + filters.update(sle_filters) + sles = frappe.get_all( + "Stock Ledger Entry", + fields=["*"], + filters=filters, + order_by="timestamp(posting_date, posting_time), creation", + ) + self.assertGreaterEqual(len(sles), len(expected_sles)) + + for exp_sle, act_sle in zip(expected_sles, sles): + for k, v in exp_sle.items(): + act_value = act_sle[k] + if k == "stock_queue": + act_value = json.loads(act_value) + if act_value and act_value[0][0] == 0: + # ignore empty fifo bins + continue + + self.assertEqual(v, act_value, msg=f"{k} doesn't match \n{exp_sle}\n{act_sle}") + + def assertGLEs(self, doc, expected_gles, gle_filters=None, order_by=None): + filters = {"voucher_no": doc.name, "voucher_type": doc.doctype, "is_cancelled": 0} + + if gle_filters: + filters.update(gle_filters) + actual_gles = frappe.get_all( + "GL Entry", + fields=["*"], + filters=filters, + order_by=order_by or "posting_date, creation", + ) + self.assertGreaterEqual(len(actual_gles), len(expected_gles)) + for exp_gle, act_gle in zip(expected_gles, actual_gles): + for k, exp_value in exp_gle.items(): + act_value = act_gle[k] + self.assertEqual(exp_value, act_value, msg=f"{k} doesn't match \n{exp_gle}\n{act_gle}") + + +class TestStockUtilities(FrappeTestCase, StockTestMixin): def test_barcode_scanning(self): - simple_item = make_item(properties={"barcodes": [{"barcode": "12399"}]}) + simple_item = self.make_item(properties={"barcodes": [{"barcode": "12399"}]}) self.assertEqual(scan_barcode("12399")["item_code"], simple_item.name) - batch_item = make_item(properties={"has_batch_no": 1, "create_new_batch": 1}) + batch_item = self.make_item(properties={"has_batch_no": 1, "create_new_batch": 1}) batch = frappe.get_doc(doctype="Batch", item=batch_item.name).insert() batch_scan = scan_barcode(batch.name) @@ -19,7 +71,7 @@ class TestStockUtilities(FrappeTestCase): self.assertEqual(batch_scan["has_batch_no"], 1) self.assertEqual(batch_scan["has_serial_no"], 0) - serial_item = make_item(properties={"has_serial_no": 1}) + serial_item = self.make_item(properties={"has_serial_no": 1}) serial = frappe.get_doc( doctype="Serial No", item_code=serial_item.name, serial_no=frappe.generate_hash() ).insert() diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 2120304097..9fb3be5188 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -499,7 +499,7 @@ def add_additional_uom_columns(columns, result, include_uom, conversion_factors) def get_incoming_outgoing_rate_for_cancel(item_code, voucher_type, voucher_no, voucher_detail_no): outgoing_rate = frappe.db.sql( - """SELECT abs(stock_value_difference / actual_qty) + """SELECT CASE WHEN actual_qty = 0 THEN 0 ELSE abs(stock_value_difference / actual_qty) END FROM `tabStock Ledger Entry` WHERE voucher_type = %s and voucher_no = %s and item_code = %s and voucher_detail_no = %s @@ -558,7 +558,7 @@ def scan_barcode(search_value: str) -> Dict[str, Optional[str]]: barcode_data = frappe.db.get_value( "Item Barcode", {"barcode": search_value}, - ["barcode", "parent as item_code"], + ["barcode", "parent as item_code", "uom"], as_dict=True, ) if barcode_data: diff --git a/erpnext/hr/doctype/daily_work_summary_group/__init__.py b/erpnext/subcontracting/__init__.py similarity index 100% rename from erpnext/hr/doctype/daily_work_summary_group/__init__.py rename to erpnext/subcontracting/__init__.py diff --git a/erpnext/hr/doctype/daily_work_summary_group_user/__init__.py b/erpnext/subcontracting/doctype/__init__.py similarity index 100% rename from erpnext/hr/doctype/daily_work_summary_group_user/__init__.py rename to erpnext/subcontracting/doctype/__init__.py diff --git a/erpnext/hr/doctype/department/__init__.py b/erpnext/subcontracting/doctype/subcontracting_order/__init__.py similarity index 100% rename from erpnext/hr/doctype/department/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_order/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js new file mode 100644 index 0000000000..dbd337afd4 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js @@ -0,0 +1,328 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.provide('erpnext.buying'); + +frappe.ui.form.on('Subcontracting Order', { + setup: (frm) => { + frm.get_field("items").grid.cannot_add_rows = true; + frm.get_field("items").grid.only_sortable(); + + frm.set_indicator_formatter('item_code', + (doc) => (doc.qty <= doc.received_qty) ? 'green' : 'orange'); + + frm.set_query('supplier_warehouse', () => { + return { + filters: { + company: frm.doc.company, + is_group: 0 + } + }; + }); + + frm.set_query('purchase_order', () => { + return { + filters: { + docstatus: 1, + is_subcontracted: 1, + is_old_subcontracting_flow: 0 + } + }; + }); + + frm.set_query('set_warehouse', () => { + return { + filters: { + company: frm.doc.company, + is_group: 0 + } + }; + }); + + frm.set_query('warehouse', 'items', () => ({ + filters: { + company: frm.doc.company, + is_group: 0 + } + })); + + frm.set_query('expense_account', 'items', () => ({ + query: 'erpnext.controllers.queries.get_expense_account', + filters: { + company: frm.doc.company + } + })); + + frm.set_query('bom', 'items', (doc, cdt, cdn) => { + let d = locals[cdt][cdn]; + return { + filters: { + item: d.item_code, + is_active: 1, + docstatus: 1, + company: frm.doc.company + } + }; + }); + + frm.set_query('set_reserve_warehouse', () => { + return { + filters: { + company: frm.doc.company, + name: ['!=', frm.doc.supplier_warehouse], + is_group: 0 + } + }; + }); + }, + + onload: (frm) => { + if (!frm.doc.transaction_date) { + frm.set_value('transaction_date', frappe.datetime.get_today()); + } + }, + + purchase_order: (frm) => { + frm.set_value('service_items', null); + frm.set_value('items', null); + frm.set_value('supplied_items', null); + + if (frm.doc.purchase_order) { + erpnext.utils.map_current_doc({ + method: 'erpnext.buying.doctype.purchase_order.purchase_order.make_subcontracting_order', + source_name: frm.doc.purchase_order, + target_doc: frm, + freeze: true, + freeze_message: __('Mapping Subcontracting Order ...'), + }); + } + }, + + refresh: function (frm) { + frm.trigger('get_materials_from_supplier'); + }, + + get_materials_from_supplier: function (frm) { + let sco_rm_details = []; + + if (frm.doc.supplied_items && (frm.doc.per_received == 100)) { + frm.doc.supplied_items.forEach(d => { + if (d.total_supplied_qty && d.total_supplied_qty != d.consumed_qty) { + sco_rm_details.push(d.name); + } + }); + } + + if (sco_rm_details && sco_rm_details.length) { + frm.add_custom_button(__('Return of Components'), () => { + frm.call({ + method: 'erpnext.controllers.subcontracting_controller.get_materials_from_supplier', + freeze: true, + freeze_message: __('Creating Stock Entry'), + args: { + subcontract_order: frm.doc.name, + rm_details: sco_rm_details, + order_doctype: cur_frm.doc.doctype + }, + callback: function (r) { + if (r && r.message) { + const doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } + } + }); + }, __('Create')); + } + } +}); + +erpnext.buying.SubcontractingOrderController = class SubcontractingOrderController { + setup() { + this.frm.custom_make_buttons = { + 'Subcontracting Receipt': 'Subcontracting Receipt', + 'Stock Entry': 'Material to Supplier', + }; + } + + refresh(doc) { + var me = this; + + if (doc.docstatus == 1) { + if (doc.status != 'Completed') { + if (flt(doc.per_received) < 100) { + cur_frm.add_custom_button(__('Subcontracting Receipt'), this.make_subcontracting_receipt, __('Create')); + if (me.has_unsupplied_items()) { + cur_frm.add_custom_button(__('Material to Supplier'), + () => { + me.make_stock_entry(); + }, __('Transfer')); + } + } + cur_frm.page.set_inner_btn_group_as_primary(__('Create')); + } + } + } + + items_add(doc, cdt, cdn) { + if (doc.set_warehouse) { + var row = frappe.get_doc(cdt, cdn); + row.warehouse = doc.set_warehouse; + } + } + + set_warehouse(doc) { + this.set_warehouse_in_children(doc.items, "warehouse", doc.set_warehouse); + } + + set_reserve_warehouse(doc) { + this.set_warehouse_in_children(doc.supplied_items, "reserve_warehouse", doc.set_reserve_warehouse); + } + + set_warehouse_in_children(child_table, warehouse_field, warehouse) { + let transaction_controller = new erpnext.TransactionController(); + transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse); + } + + make_stock_entry() { + var items = $.map(cur_frm.doc.items, (d) => d.bom ? d.item_code : false); + var me = this; + + if (items.length >= 1) { + me.raw_material_data = []; + me.show_dialog = 1; + let title = __('Transfer Material to Supplier'); + let fields = [ + { fieldtype: 'Section Break', label: __('Raw Materials') }, + { + fieldname: 'sub_con_rm_items', fieldtype: 'Table', label: __('Items'), + fields: [ + { + fieldtype: 'Data', + fieldname: 'item_code', + label: __('Item'), + read_only: 1, + in_list_view: 1 + }, + { + fieldtype: 'Data', + fieldname: 'rm_item_code', + label: __('Raw Material'), + read_only: 1, + in_list_view: 1 + }, + { + fieldtype: 'Float', + read_only: 1, + fieldname: 'qty', + label: __('Quantity'), + in_list_view: 1 + }, + { + fieldtype: 'Data', + read_only: 1, + fieldname: 'warehouse', + label: __('Reserve Warehouse'), + in_list_view: 1 + }, + { + fieldtype: 'Float', + read_only: 1, + fieldname: 'rate', + label: __('Rate'), + hidden: 1 + }, + { + fieldtype: 'Float', + read_only: 1, + fieldname: 'amount', + label: __('Amount'), + hidden: 1 + }, + { + fieldtype: 'Link', + read_only: 1, + fieldname: 'uom', + label: __('UOM'), + hidden: 1 + } + ], + data: me.raw_material_data, + get_data: () => me.raw_material_data + } + ]; + + me.dialog = new frappe.ui.Dialog({ + title: title, fields: fields + }); + + if (me.frm.doc['supplied_items']) { + me.frm.doc['supplied_items'].forEach((item) => { + if (item.rm_item_code && item.main_item_code && item.required_qty - item.supplied_qty != 0) { + me.raw_material_data.push({ + 'name': item.name, + 'item_code': item.main_item_code, + 'rm_item_code': item.rm_item_code, + 'item_name': item.rm_item_code, + 'qty': item.required_qty - item.supplied_qty, + 'warehouse': item.reserve_warehouse, + 'rate': item.rate, + 'amount': item.amount, + 'stock_uom': item.stock_uom + }); + me.dialog.fields_dict.sub_con_rm_items.grid.refresh(); + } + }); + } + + me.dialog.get_field('sub_con_rm_items').check_all_rows(); + + me.dialog.show(); + this.dialog.set_primary_action(__('Transfer'), () => { + me.values = me.dialog.get_values(); + if (me.values) { + me.values.sub_con_rm_items.map((row, i) => { + if (!row.item_code || !row.rm_item_code || !row.warehouse || !row.qty || row.qty === 0) { + let row_id = i + 1; + frappe.throw(__('Item Code, warehouse and quantity are required on row {0}', [row_id])); + } + }); + me.make_rm_stock_entry(me.dialog.fields_dict.sub_con_rm_items.grid.get_selected_children()); + me.dialog.hide(); + } + }); + } + + me.dialog.get_close_btn().on('click', () => { + me.dialog.hide(); + }); + } + + has_unsupplied_items() { + return this.frm.doc['supplied_items'].some(item => item.required_qty > item.supplied_qty); + } + + make_subcontracting_receipt() { + frappe.model.open_mapped_doc({ + method: 'erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt', + frm: cur_frm, + freeze_message: __('Creating Subcontracting Receipt ...') + }); + } + + make_rm_stock_entry(rm_items) { + frappe.call({ + method: 'erpnext.controllers.subcontracting_controller.make_rm_stock_entry', + args: { + subcontract_order: cur_frm.doc.name, + rm_items: rm_items, + order_doctype: cur_frm.doc.doctype + }, + callback: (r) => { + var doclist = frappe.model.sync(r.message); + frappe.set_route('Form', doclist[0].doctype, doclist[0].name); + } + }); + } +}; + +extend_cscript(cur_frm.cscript, new erpnext.buying.SubcontractingOrderController({ frm: cur_frm })); \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json new file mode 100644 index 0000000000..c6e76c76d7 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json @@ -0,0 +1,485 @@ +{ + "actions": [], + "allow_auto_repeat": 1, + "allow_import": 1, + "autoname": "naming_series:", + "creation": "2022-04-01 22:39:17.662819", + "doctype": "DocType", + "document_type": "Document", + "engine": "InnoDB", + "field_order": [ + "title", + "naming_series", + "purchase_order", + "supplier", + "supplier_name", + "supplier_warehouse", + "column_break_7", + "company", + "transaction_date", + "schedule_date", + "amended_from", + "address_and_contact_section", + "supplier_address", + "address_display", + "contact_person", + "contact_display", + "contact_mobile", + "contact_email", + "column_break_19", + "shipping_address", + "shipping_address_display", + "billing_address", + "billing_address_display", + "section_break_24", + "column_break_25", + "set_warehouse", + "items", + "section_break_32", + "total_qty", + "column_break_29", + "total", + "service_items_section", + "service_items", + "raw_materials_supplied_section", + "set_reserve_warehouse", + "supplied_items", + "additional_costs_section", + "distribute_additional_costs_based_on", + "additional_costs", + "total_additional_costs", + "order_status_section", + "status", + "column_break_39", + "per_received", + "printing_settings_section", + "select_print_heading", + "column_break_43", + "letter_head" + ], + "fields": [ + { + "allow_on_submit": 1, + "default": "{supplier_name}", + "fieldname": "title", + "fieldtype": "Data", + "hidden": 1, + "label": "Title", + "no_copy": 1, + "print_hide": 1 + }, + { + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Series", + "no_copy": 1, + "options": "SC-ORD-.YYYY.-", + "print_hide": 1, + "reqd": 1, + "set_only_once": 1 + }, + { + "fieldname": "purchase_order", + "fieldtype": "Link", + "label": "Subcontracting Purchase Order", + "options": "Purchase Order", + "reqd": 1 + }, + { + "bold": 1, + "fieldname": "supplier", + "fieldtype": "Link", + "in_global_search": 1, + "in_standard_filter": 1, + "label": "Supplier", + "options": "Supplier", + "print_hide": 1, + "reqd": 1, + "search_index": 1 + }, + { + "bold": 1, + "fetch_from": "supplier.supplier_name", + "fieldname": "supplier_name", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Supplier Name", + "read_only": 1, + "reqd": 1 + }, + { + "depends_on": "supplier", + "fieldname": "supplier_warehouse", + "fieldtype": "Link", + "label": "Supplier Warehouse", + "options": "Warehouse", + "reqd": 1 + }, + { + "fieldname": "column_break_7", + "fieldtype": "Column Break", + "print_width": "50%", + "width": "50%" + }, + { + "fieldname": "company", + "fieldtype": "Link", + "in_standard_filter": 1, + "label": "Company", + "options": "Company", + "print_hide": 1, + "remember_last_selected_value": 1, + "reqd": 1 + }, + { + "default": "Today", + "fetch_from": "purchase_order.transaction_date", + "fetch_if_empty": 1, + "fieldname": "transaction_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Date", + "reqd": 1, + "search_index": 1 + }, + { + "allow_on_submit": 1, + "fetch_from": "purchase_order.schedule_date", + "fetch_if_empty": 1, + "fieldname": "schedule_date", + "fieldtype": "Date", + "label": "Required By", + "read_only": 1 + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Amended From", + "no_copy": 1, + "options": "Subcontracting Order", + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "address_and_contact_section", + "fieldtype": "Section Break", + "label": "Address and Contact" + }, + { + "fetch_from": "supplier.supplier_primary_address", + "fetch_if_empty": 1, + "fieldname": "supplier_address", + "fieldtype": "Link", + "label": "Supplier Address", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "address_display", + "fieldtype": "Small Text", + "label": "Supplier Address Details", + "read_only": 1 + }, + { + "fetch_from": "supplier.supplier_primary_contact", + "fetch_if_empty": 1, + "fieldname": "contact_person", + "fieldtype": "Link", + "label": "Supplier Contact", + "options": "Contact", + "print_hide": 1 + }, + { + "fieldname": "contact_display", + "fieldtype": "Small Text", + "in_global_search": 1, + "label": "Contact Name", + "read_only": 1 + }, + { + "fieldname": "contact_mobile", + "fieldtype": "Small Text", + "label": "Contact Mobile No", + "read_only": 1 + }, + { + "fieldname": "contact_email", + "fieldtype": "Small Text", + "label": "Contact Email", + "options": "Email", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "column_break_19", + "fieldtype": "Column Break" + }, + { + "fieldname": "shipping_address", + "fieldtype": "Link", + "label": "Company Shipping Address", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "shipping_address_display", + "fieldtype": "Small Text", + "label": "Shipping Address Details", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "billing_address", + "fieldtype": "Link", + "label": "Company Billing Address", + "options": "Address" + }, + { + "fieldname": "billing_address_display", + "fieldtype": "Small Text", + "label": "Billing Address Details", + "read_only": 1 + }, + { + "fieldname": "section_break_24", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_25", + "fieldtype": "Column Break" + }, + { + "depends_on": "purchase_order", + "description": "Sets 'Warehouse' in each row of the Items table.", + "fieldname": "set_warehouse", + "fieldtype": "Link", + "label": "Set Target Warehouse", + "options": "Warehouse", + "print_hide": 1 + }, + { + "allow_bulk_edit": 1, + "depends_on": "purchase_order", + "fieldname": "items", + "fieldtype": "Table", + "label": "Items", + "options": "Subcontracting Order Item", + "reqd": 1 + }, + { + "fieldname": "section_break_32", + "fieldtype": "Section Break" + }, + { + "depends_on": "purchase_order", + "fieldname": "total_qty", + "fieldtype": "Float", + "label": "Total Quantity", + "read_only": 1 + }, + { + "fieldname": "column_break_29", + "fieldtype": "Column Break" + }, + { + "depends_on": "purchase_order", + "fieldname": "total", + "fieldtype": "Currency", + "label": "Total", + "options": "currency", + "read_only": 1 + }, + { + "collapsible": 1, + "depends_on": "purchase_order", + "fieldname": "service_items_section", + "fieldtype": "Section Break", + "label": "Service Items" + }, + { + "fieldname": "service_items", + "fieldtype": "Table", + "label": "Service Items", + "options": "Subcontracting Order Service Item", + "read_only": 1, + "reqd": 1 + }, + { + "collapsible": 1, + "collapsible_depends_on": "supplied_items", + "depends_on": "supplied_items", + "fieldname": "raw_materials_supplied_section", + "fieldtype": "Section Break", + "label": "Raw Materials Supplied" + }, + { + "depends_on": "supplied_items", + "description": "Sets 'Reserve Warehouse' in each row of the Supplied Items table.", + "fieldname": "set_reserve_warehouse", + "fieldtype": "Link", + "label": "Set Reserve Warehouse", + "options": "Warehouse" + }, + { + "fieldname": "supplied_items", + "fieldtype": "Table", + "label": "Supplied Items", + "no_copy": 1, + "options": "Subcontracting Order Supplied Item", + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "collapsible_depends_on": "total_additional_costs", + "depends_on": "eval:(doc.docstatus == 0 || doc.total_additional_costs)", + "fieldname": "additional_costs_section", + "fieldtype": "Section Break", + "label": "Additional Costs" + }, + { + "fieldname": "additional_costs", + "fieldtype": "Table", + "label": "Additional Costs", + "options": "Landed Cost Taxes and Charges" + }, + { + "fieldname": "total_additional_costs", + "fieldtype": "Currency", + "label": "Total Additional Costs", + "print_hide_if_no_value": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "order_status_section", + "fieldtype": "Section Break", + "label": "Order Status" + }, + { + "default": "Draft", + "fieldname": "status", + "fieldtype": "Select", + "in_standard_filter": 1, + "label": "Status", + "no_copy": 1, + "options": "Draft\nOpen\nPartially Received\nCompleted\nMaterial Transferred\nPartial Material Transferred\nCancelled", + "print_hide": 1, + "read_only": 1, + "reqd": 1, + "search_index": 1 + }, + { + "fieldname": "column_break_39", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "per_received", + "fieldtype": "Percent", + "in_list_view": 1, + "label": "% Received", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "printing_settings_section", + "fieldtype": "Section Break", + "label": "Printing Settings", + "print_hide": 1, + "print_width": "50%", + "width": "50%" + }, + { + "allow_on_submit": 1, + "fieldname": "select_print_heading", + "fieldtype": "Link", + "label": "Print Heading", + "no_copy": 1, + "options": "Print Heading", + "print_hide": 1, + "report_hide": 1 + }, + { + "fieldname": "column_break_43", + "fieldtype": "Column Break" + }, + { + "allow_on_submit": 1, + "fieldname": "letter_head", + "fieldtype": "Link", + "label": "Letter Head", + "options": "Letter Head", + "print_hide": 1 + }, + { + "default": "Qty", + "fieldname": "distribute_additional_costs_based_on", + "fieldtype": "Select", + "label": "Distribute Additional Costs Based On ", + "options": "Qty\nAmount" + } + ], + "icon": "fa fa-file-text", + "is_submittable": 1, + "links": [], + "modified": "2022-04-11 21:02:44.097841", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Order", + "naming_rule": "By \"Naming Series\" field", + "owner": "Administrator", + "permissions": [ + { + "read": 1, + "report": 1, + "role": "Stock User" + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase Manager", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "permlevel": 1, + "read": 1, + "role": "Purchase Manager", + "write": 1 + } + ], + "search_fields": "status, transaction_date, supplier", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "timeline_field": "supplier", + "title_field": "supplier_name", + "track_changes": 1 +} \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py new file mode 100644 index 0000000000..71cdc94a3a --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.py @@ -0,0 +1,246 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.model.mapper import get_mapped_doc +from frappe.utils import flt + +from erpnext.buying.doctype.purchase_order.purchase_order import is_subcontracting_order_created +from erpnext.controllers.subcontracting_controller import SubcontractingController +from erpnext.stock.stock_balance import get_ordered_qty, update_bin_qty +from erpnext.stock.utils import get_bin + + +class SubcontractingOrder(SubcontractingController): + def before_validate(self): + super(SubcontractingOrder, self).before_validate() + + def validate(self): + super(SubcontractingOrder, self).validate() + self.validate_purchase_order_for_subcontracting() + self.validate_items() + self.validate_service_items() + self.validate_supplied_items() + self.set_missing_values() + self.reset_default_field_value("set_warehouse", "items", "warehouse") + + def on_submit(self): + self.update_ordered_qty_for_subcontracting() + self.update_reserved_qty_for_subcontracting() + self.update_status() + + def on_cancel(self): + self.update_ordered_qty_for_subcontracting() + self.update_reserved_qty_for_subcontracting() + self.update_status() + + def validate_purchase_order_for_subcontracting(self): + if self.purchase_order: + if is_subcontracting_order_created(self.purchase_order): + frappe.throw( + _( + "Only one Subcontracting Order can be created against a Purchase Order, cancel the existing Subcontracting Order to create a new one." + ) + ) + + po = frappe.get_doc("Purchase Order", self.purchase_order) + + if not po.is_subcontracted: + frappe.throw(_("Please select a valid Purchase Order that is configured for Subcontracting.")) + + if po.is_old_subcontracting_flow: + frappe.throw(_("Please select a valid Purchase Order that has Service Items.")) + + if po.docstatus != 1: + msg = f"Please submit Purchase Order {po.name} before proceeding." + frappe.throw(_(msg)) + + if po.per_received == 100: + msg = f"Cannot create more Subcontracting Orders against the Purchase Order {po.name}." + frappe.throw(_(msg)) + else: + self.service_items = self.items = self.supplied_items = None + frappe.throw(_("Please select a Subcontracting Purchase Order.")) + + def validate_service_items(self): + for item in self.service_items: + if frappe.get_value("Item", item.item_code, "is_stock_item"): + msg = f"Service Item {item.item_name} must be a non-stock item." + frappe.throw(_(msg)) + + def validate_supplied_items(self): + if self.supplier_warehouse: + for item in self.supplied_items: + if self.supplier_warehouse == item.reserve_warehouse: + msg = f"Reserve Warehouse must be different from Supplier Warehouse for Supplied Item {item.main_item_code}." + frappe.throw(_(msg)) + + def set_missing_values(self): + self.set_missing_values_in_additional_costs() + self.set_missing_values_in_service_items() + self.set_missing_values_in_supplied_items() + self.set_missing_values_in_items() + + def set_missing_values_in_additional_costs(self): + if self.get("additional_costs"): + self.total_additional_costs = sum(flt(item.amount) for item in self.get("additional_costs")) + + if self.total_additional_costs: + if self.distribute_additional_costs_based_on == "Amount": + total_amt = sum(flt(item.amount) for item in self.get("items")) + for item in self.items: + item.additional_cost_per_qty = ( + (item.amount * self.total_additional_costs) / total_amt + ) / item.qty + else: + total_qty = sum(flt(item.qty) for item in self.get("items")) + additional_cost_per_qty = self.total_additional_costs / total_qty + for item in self.items: + item.additional_cost_per_qty = additional_cost_per_qty + else: + self.total_additional_costs = 0 + + def set_missing_values_in_service_items(self): + for idx, item in enumerate(self.get("service_items")): + self.items[idx].service_cost_per_qty = item.amount / self.items[idx].qty + + def set_missing_values_in_supplied_items(self): + for item in self.get("items"): + bom = frappe.get_doc("BOM", item.bom) + rm_cost = sum(flt(rm_item.amount) for rm_item in bom.items) + item.rm_cost_per_qty = rm_cost / flt(bom.quantity) + + def set_missing_values_in_items(self): + total_qty = total = 0 + for item in self.items: + item.rate = ( + item.rm_cost_per_qty + item.service_cost_per_qty + (item.additional_cost_per_qty or 0) + ) + item.amount = item.qty * item.rate + total_qty += flt(item.qty) + total += flt(item.amount) + else: + self.total_qty = total_qty + self.total = total + + def update_ordered_qty_for_subcontracting(self, sco_item_rows=None): + item_wh_list = [] + for item in self.get("items"): + if ( + (not sco_item_rows or item.name in sco_item_rows) + and [item.item_code, item.warehouse] not in item_wh_list + and frappe.get_cached_value("Item", item.item_code, "is_stock_item") + and item.warehouse + ): + item_wh_list.append([item.item_code, item.warehouse]) + for item_code, warehouse in item_wh_list: + update_bin_qty(item_code, warehouse, {"ordered_qty": get_ordered_qty(item_code, warehouse)}) + + def update_reserved_qty_for_subcontracting(self): + for item in self.supplied_items: + if item.rm_item_code: + stock_bin = get_bin(item.rm_item_code, item.reserve_warehouse) + stock_bin.update_reserved_qty_for_sub_contracting() + + def populate_items_table(self): + items = [] + + for si in self.service_items: + if si.fg_item: + item = frappe.get_doc("Item", si.fg_item) + bom = frappe.db.get_value("BOM", {"item": item.item_code, "is_active": 1, "is_default": 1}) + + items.append( + { + "item_code": item.item_code, + "item_name": item.item_name, + "schedule_date": self.schedule_date, + "description": item.description, + "qty": si.fg_item_qty, + "stock_uom": item.stock_uom, + "bom": bom, + }, + ) + else: + frappe.throw( + _("Please select Finished Good Item for Service Item {0}").format( + si.item_name or si.item_code + ) + ) + else: + for item in items: + self.append("items", item) + else: + self.set_missing_values() + + def update_status(self, status=None, update_modified=False): + if self.docstatus >= 1 and not status: + if self.docstatus == 1: + if self.status == "Draft": + status = "Open" + elif self.per_received >= 100: + status = "Completed" + elif self.per_received > 0 and self.per_received < 100: + status = "Partially Received" + else: + total_required_qty = total_supplied_qty = 0 + for item in self.supplied_items: + total_required_qty += item.required_qty + total_supplied_qty += item.supplied_qty or 0 + if total_supplied_qty: + status = "Partial Material Transferred" + if total_supplied_qty >= total_required_qty: + status = "Material Transferred" + else: + status = "Open" + elif self.docstatus == 2: + status = "Cancelled" + + frappe.db.set_value("Subcontracting Order", self.name, "status", status, update_modified) + + +@frappe.whitelist() +def make_subcontracting_receipt(source_name, target_doc=None): + return get_mapped_subcontracting_receipt(source_name, target_doc) + + +def get_mapped_subcontracting_receipt(source_name, target_doc=None): + def update_item(obj, target, source_parent): + target.qty = flt(obj.qty) - flt(obj.received_qty) + target.amount = (flt(obj.qty) - flt(obj.received_qty)) * flt(obj.rate) + + target_doc = get_mapped_doc( + "Subcontracting Order", + source_name, + { + "Subcontracting Order": { + "doctype": "Subcontracting Receipt", + "field_map": {"supplier_warehouse": "supplier_warehouse"}, + "validation": { + "docstatus": ["=", 1], + }, + }, + "Subcontracting Order Item": { + "doctype": "Subcontracting Receipt Item", + "field_map": { + "name": "subcontracting_order_item", + "parent": "subcontracting_order", + "bom": "bom", + }, + "postprocess": update_item, + "condition": lambda doc: abs(doc.received_qty) < abs(doc.qty), + }, + }, + target_doc, + ) + + return target_doc + + +@frappe.whitelist() +def update_subcontracting_order_status(sco): + if isinstance(sco, str): + sco = frappe.get_doc("Subcontracting Order", sco) + + sco.update_status() diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_dashboard.py b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_dashboard.py new file mode 100644 index 0000000000..f17d8cd961 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_dashboard.py @@ -0,0 +1,8 @@ +from frappe import _ + + +def get_data(): + return { + "fieldname": "subcontracting_order", + "transactions": [{"label": _("Reference"), "items": ["Subcontracting Receipt", "Stock Entry"]}], + } diff --git a/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js new file mode 100644 index 0000000000..650419cf74 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order_list.js @@ -0,0 +1,16 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.listview_settings['Subcontracting Order'] = { + get_indicator: function (doc) { + const status_colors = { + "Draft": "grey", + "Open": "orange", + "Partially Received": "yellow", + "Completed": "green", + "Partial Material Transferred": "purple", + "Material Transferred": "blue", + }; + return [__(doc.status), status_colors[doc.status], "status,=," + doc.status]; + }, +}; \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py b/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py new file mode 100644 index 0000000000..94bb38e980 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order/test_subcontracting_order.py @@ -0,0 +1,536 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + +import copy + +import frappe +from frappe.tests.utils import FrappeTestCase + +from erpnext.buying.doctype.purchase_order.purchase_order import get_mapped_subcontracting_order +from erpnext.controllers.subcontracting_controller import make_rm_stock_entry +from erpnext.controllers.tests.test_subcontracting_controller import ( + get_rm_items, + get_subcontracting_order, + make_bom_for_subcontracted_items, + make_raw_materials, + make_service_items, + make_stock_in_entry, + make_stock_transfer_entry, + make_subcontracted_item, + make_subcontracted_items, + set_backflush_based_on, +) +from erpnext.stock.doctype.item.test_item import make_item +from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry +from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, +) + + +class TestSubcontractingOrder(FrappeTestCase): + def setUp(self): + make_subcontracted_items() + make_raw_materials() + make_service_items() + make_bom_for_subcontracted_items() + + def test_populate_items_table(self): + sco = get_subcontracting_order() + sco.items = None + sco.populate_items_table() + self.assertEqual(len(sco.service_items), len(sco.items)) + + def test_set_missing_values(self): + sco = get_subcontracting_order() + before = {sco.total_qty, sco.total, sco.total_additional_costs} + sco.total_qty = sco.total = sco.total_additional_costs = 0 + sco.set_missing_values() + after = {sco.total_qty, sco.total, sco.total_additional_costs} + self.assertSetEqual(before, after) + + def test_update_status(self): + # Draft + sco = get_subcontracting_order(do_not_submit=1) + self.assertEqual(sco.status, "Draft") + + # Open + sco.submit() + sco.load_from_db() + self.assertEqual(sco.status, "Open") + + # Partial Material Transferred + rm_items = get_rm_items(sco.supplied_items) + rm_items[0]["qty"] -= 1 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + sco.load_from_db() + self.assertEqual(sco.status, "Partial Material Transferred") + + # Material Transferred + rm_items[0]["qty"] = 1 + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + sco.load_from_db() + self.assertEqual(sco.status, "Material Transferred") + + # Partially Received + scr = make_subcontracting_receipt(sco.name) + scr.items[0].qty -= 1 + scr.save() + scr.submit() + sco.load_from_db() + self.assertEqual(sco.status, "Partially Received") + + # Completed + scr = make_subcontracting_receipt(sco.name) + scr.save() + scr.submit() + sco.load_from_db() + self.assertEqual(sco.status, "Completed") + + # Partially Received (scr cancelled) + scr.load_from_db() + scr.cancel() + sco.load_from_db() + self.assertEqual(sco.status, "Partially Received") + + def test_make_rm_stock_entry(self): + sco = get_subcontracting_order() + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + ste = make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + self.assertEqual(len(ste.items), len(rm_items)) + + def test_make_rm_stock_entry_for_serial_items(self): + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 2", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA2", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 5", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA5", + "fg_item_qty": 6, + }, + ] + + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + ste = make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + self.assertEqual(len(ste.items), len(rm_items)) + + def test_make_rm_stock_entry_for_batch_items(self): + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 4", + "qty": 5, + "rate": 100, + "fg_item": "Subcontracted Item SA4", + "fg_item_qty": 5, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 6", + "qty": 6, + "rate": 100, + "fg_item": "Subcontracted Item SA6", + "fg_item_qty": 6, + }, + ] + + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + ste = make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + self.assertEqual(len(ste.items), len(rm_items)) + + def test_update_reserved_qty_for_subcontracting(self): + # Make stock available for raw materials + make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100) + make_stock_entry( + target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", qty=20, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse 1 - _TC", item_code="_Test Item", qty=30, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse 1 - _TC", + item_code="_Test Item Home Desktop 100", + qty=30, + basic_rate=100, + ) + + bin1 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname=["reserved_qty_for_sub_contract", "projected_qty", "modified"], + as_dict=1, + ) + + # Create SCO + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 10, + "rate": 100, + "fg_item": "_Test FG Item", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + + bin2 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname=["reserved_qty_for_sub_contract", "projected_qty", "modified"], + as_dict=1, + ) + + self.assertEqual(bin2.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract + 10) + self.assertEqual(bin2.projected_qty, bin1.projected_qty - 10) + self.assertNotEqual(bin1.modified, bin2.modified) + + # Create stock transfer + rm_items = [ + { + "item_code": "_Test FG Item", + "rm_item_code": "_Test Item", + "item_name": "_Test Item", + "qty": 6, + "warehouse": "_Test Warehouse - _TC", + "rate": 100, + "amount": 600, + "stock_uom": "Nos", + } + ] + ste = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) + ste.to_warehouse = "_Test Warehouse 1 - _TC" + ste.save() + ste.submit() + + bin3 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname="reserved_qty_for_sub_contract", + as_dict=1, + ) + + self.assertEqual(bin3.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) + + make_stock_entry( + target="_Test Warehouse 1 - _TC", item_code="_Test Item", qty=40, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse 1 - _TC", + item_code="_Test Item Home Desktop 100", + qty=40, + basic_rate=100, + ) + + # Make SCR against the SCO + scr = make_subcontracting_receipt(sco.name) + scr.save() + scr.submit() + + bin4 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname="reserved_qty_for_sub_contract", + as_dict=1, + ) + + self.assertEqual(bin4.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) + + # Cancel SCR + scr.reload() + scr.cancel() + bin5 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname="reserved_qty_for_sub_contract", + as_dict=1, + ) + + self.assertEqual(bin5.reserved_qty_for_sub_contract, bin2.reserved_qty_for_sub_contract - 6) + + # Cancel Stock Entry + ste.cancel() + bin6 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname="reserved_qty_for_sub_contract", + as_dict=1, + ) + + self.assertEqual(bin6.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract + 10) + + # Cancel PO + sco.reload() + sco.cancel() + bin7 = frappe.db.get_value( + "Bin", + filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, + fieldname="reserved_qty_for_sub_contract", + as_dict=1, + ) + + self.assertEqual(bin7.reserved_qty_for_sub_contract, bin1.reserved_qty_for_sub_contract) + + def test_exploded_items(self): + item_code = "_Test Subcontracted FG Item 11" + make_subcontracted_item(item_code=item_code) + + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 1, + "rate": 100, + "fg_item": item_code, + "fg_item_qty": 1, + }, + ] + + sco1 = get_subcontracting_order(service_items=service_items, include_exploded_items=1) + item_name = frappe.db.get_value("BOM", {"item": item_code}, "name") + bom = frappe.get_doc("BOM", item_name) + exploded_items = sorted([item.item_code for item in bom.exploded_items]) + supplied_items = sorted([item.rm_item_code for item in sco1.supplied_items]) + self.assertEqual(exploded_items, supplied_items) + + sco2 = get_subcontracting_order(service_items=service_items, include_exploded_items=0) + supplied_items1 = sorted([item.rm_item_code for item in sco2.supplied_items]) + bom_items = sorted([item.item_code for item in bom.items]) + self.assertEqual(supplied_items1, bom_items) + + def test_backflush_based_on_stock_entry(self): + item_code = "_Test Subcontracted FG Item 1" + make_subcontracted_item(item_code=item_code) + make_item("Sub Contracted Raw Material 1", {"is_stock_item": 1, "is_sub_contracted_item": 1}) + + set_backflush_based_on("Material Transferred for Subcontract") + + order_qty = 5 + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": order_qty, + "rate": 100, + "fg_item": item_code, + "fg_item_qty": order_qty, + }, + ] + + sco = get_subcontracting_order(service_items=service_items) + + make_stock_entry( + target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", qty=20, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse - _TC", item_code="Test Extra Item 1", qty=100, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse - _TC", item_code="Test Extra Item 2", qty=10, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse - _TC", + item_code="Sub Contracted Raw Material 1", + qty=10, + basic_rate=100, + ) + + rm_items = [ + { + "item_code": item_code, + "rm_item_code": "Sub Contracted Raw Material 1", + "item_name": "_Test Item", + "qty": 10, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + { + "item_code": item_code, + "rm_item_code": "_Test Item Home Desktop 100", + "item_name": "_Test Item Home Desktop 100", + "qty": 20, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + { + "item_code": item_code, + "rm_item_code": "Test Extra Item 1", + "item_name": "Test Extra Item 1", + "qty": 10, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + { + "item_code": item_code, + "rm_item_code": "Test Extra Item 2", + "stock_uom": "Nos", + "qty": 10, + "warehouse": "_Test Warehouse - _TC", + "item_name": "Test Extra Item 2", + }, + ] + + ste = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) + ste.submit() + + scr = make_subcontracting_receipt(sco.name) + received_qty = 2 + + # partial receipt + scr.get("items")[0].qty = received_qty + scr.save() + scr.submit() + + transferred_items = sorted( + [item.item_code for item in ste.get("items") if ste.subcontracting_order == sco.name] + ) + issued_items = sorted([item.rm_item_code for item in scr.get("supplied_items")]) + + self.assertEqual(transferred_items, issued_items) + self.assertEqual(scr.get_supplied_items_cost(scr.get("items")[0].name), 2000) + + transferred_rm_map = frappe._dict() + for item in rm_items: + transferred_rm_map[item.get("rm_item_code")] = item + + set_backflush_based_on("BOM") + + def test_supplied_qty(self): + item_code = "_Test Subcontracted FG Item 5" + make_item("Sub Contracted Raw Material 4", {"is_stock_item": 1, "is_sub_contracted_item": 1}) + + make_subcontracted_item(item_code=item_code, raw_materials=["Sub Contracted Raw Material 4"]) + + set_backflush_based_on("Material Transferred for Subcontract") + + order_qty = 250 + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": order_qty, + "rate": 100, + "fg_item": item_code, + "fg_item_qty": order_qty, + }, + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": order_qty, + "rate": 100, + "fg_item": item_code, + "fg_item_qty": order_qty, + }, + ] + + sco = get_subcontracting_order(service_items=service_items) + + # Material receipt entry for the raw materials which will be send to supplier + make_stock_entry( + target="_Test Warehouse - _TC", + item_code="Sub Contracted Raw Material 4", + qty=500, + basic_rate=100, + ) + + rm_items = [ + { + "item_code": item_code, + "rm_item_code": "Sub Contracted Raw Material 4", + "item_name": "_Test Item", + "qty": 250, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + "name": sco.supplied_items[0].name, + }, + { + "item_code": item_code, + "rm_item_code": "Sub Contracted Raw Material 4", + "item_name": "_Test Item", + "qty": 250, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + ] + + # Raw Materials transfer entry from stores to supplier's warehouse + ste = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) + ste.submit() + + # Test sco_rm_detail field has value or not + for item_row in ste.items: + self.assertEqual(item_row.sco_rm_detail, sco.supplied_items[item_row.idx - 1].name) + + sco.load_from_db() + for row in sco.supplied_items: + # Valid that whether transferred quantity is matching with supplied qty or not in the subcontracting order + self.assertEqual(row.supplied_qty, 250.0) + + set_backflush_based_on("BOM") + + +def create_subcontracting_order(**args): + args = frappe._dict(args) + sco = get_mapped_subcontracting_order(source_name=args.po_name) + + for item in sco.items: + item.include_exploded_items = args.get("include_exploded_items", 1) + + if args.get("warehouse"): + for item in sco.items: + item.warehouse = args.warehouse + else: + warehouse = frappe.get_value("Purchase Order", args.po_name, "set_warehouse") + if warehouse: + for item in sco.items: + item.warehouse = warehouse + else: + po = frappe.get_doc("Purchase Order", args.po_name) + warehouses = [] + for item in po.items: + warehouses.append(item.warehouse) + else: + for idx, val in enumerate(sco.items): + val.warehouse = warehouses[idx] + + if not args.do_not_save: + sco.insert() + if not args.do_not_submit: + sco.submit() + + return sco diff --git a/erpnext/hr/doctype/department_approver/__init__.py b/erpnext/subcontracting/doctype/subcontracting_order_item/__init__.py similarity index 100% rename from erpnext/hr/doctype/department_approver/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_order_item/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json b/erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json new file mode 100644 index 0000000000..291f47a634 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json @@ -0,0 +1,326 @@ +{ + "actions": [], + "autoname": "hash", + "creation": "2022-04-01 19:26:31.475015", + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_code", + "item_name", + "bom", + "include_exploded_items", + "column_break_3", + "schedule_date", + "expected_delivery_date", + "description_section", + "description", + "column_break_8", + "image", + "image_view", + "quantity_and_rate_section", + "qty", + "received_qty", + "returned_qty", + "column_break_13", + "stock_uom", + "conversion_factor", + "section_break_16", + "rate", + "amount", + "column_break_19", + "rm_cost_per_qty", + "service_cost_per_qty", + "additional_cost_per_qty", + "warehouse_section", + "warehouse", + "accounting_details_section", + "expense_account", + "manufacture_section", + "manufacturer", + "manufacturer_part_no", + "section_break_34", + "page_break" + ], + "fields": [ + { + "bold": 1, + "columns": 2, + "fieldname": "item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "read_only": 1, + "reqd": 1, + "search_index": 1 + }, + { + "fetch_from": "item_code.item_name", + "fetch_if_empty": 1, + "fieldname": "item_name", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Item Name", + "print_hide": 1, + "reqd": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "bold": 1, + "columns": 2, + "fieldname": "schedule_date", + "fieldtype": "Date", + "label": "Required By", + "print_hide": 1, + "read_only": 1 + }, + { + "allow_on_submit": 1, + "bold": 1, + "fieldname": "expected_delivery_date", + "fieldtype": "Date", + "label": "Expected Delivery Date", + "search_index": 1 + }, + { + "collapsible": 1, + "fieldname": "description_section", + "fieldtype": "Section Break", + "label": "Description" + }, + { + "fetch_from": "item_code.description", + "fetch_if_empty": 1, + "fieldname": "description", + "fieldtype": "Text Editor", + "label": "Description", + "print_width": "300px", + "reqd": 1, + "width": "300px" + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "fieldname": "image", + "fieldtype": "Attach", + "hidden": 1, + "label": "Image" + }, + { + "fieldname": "image_view", + "fieldtype": "Image", + "label": "Image View", + "options": "image", + "print_hide": 1 + }, + { + "fieldname": "quantity_and_rate_section", + "fieldtype": "Section Break", + "label": "Quantity and Rate" + }, + { + "bold": 1, + "columns": 1, + "default": "1", + "fieldname": "qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Quantity", + "print_width": "60px", + "read_only": 1, + "reqd": 1, + "width": "60px" + }, + { + "fieldname": "column_break_13", + "fieldtype": "Column Break", + "print_hide": 1 + }, + { + "fieldname": "stock_uom", + "fieldtype": "Link", + "label": "Stock UOM", + "options": "UOM", + "print_width": "100px", + "read_only": 1, + "reqd": 1, + "width": "100px" + }, + { + "default": "1", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "hidden": 1, + "label": "Conversion Factor", + "read_only": 1 + }, + { + "fieldname": "section_break_16", + "fieldtype": "Section Break" + }, + { + "bold": 1, + "columns": 2, + "fetch_from": "item_code.standard_rate", + "fetch_if_empty": 1, + "fieldname": "rate", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Rate", + "options": "currency", + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "column_break_19", + "fieldtype": "Column Break" + }, + { + "columns": 2, + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "options": "currency", + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "warehouse_section", + "fieldtype": "Section Break", + "label": "Warehouse Details" + }, + { + "fieldname": "warehouse", + "fieldtype": "Link", + "label": "Warehouse", + "options": "Warehouse", + "print_hide": 1, + "reqd": 1 + }, + { + "collapsible": 1, + "fieldname": "accounting_details_section", + "fieldtype": "Section Break", + "label": "Accounting Details" + }, + { + "fieldname": "expense_account", + "fieldtype": "Link", + "label": "Expense Account", + "options": "Account", + "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "manufacture_section", + "fieldtype": "Section Break", + "label": "Manufacture" + }, + { + "fieldname": "manufacturer", + "fieldtype": "Link", + "label": "Manufacturer", + "options": "Manufacturer" + }, + { + "fieldname": "manufacturer_part_no", + "fieldtype": "Data", + "label": "Manufacturer Part Number" + }, + { + "depends_on": "item_code", + "fetch_from": "item_code.default_bom", + "fieldname": "bom", + "fieldtype": "Link", + "in_list_view": 1, + "label": "BOM", + "options": "BOM", + "print_hide": 1, + "reqd": 1 + }, + { + "default": "0", + "fieldname": "include_exploded_items", + "fieldtype": "Check", + "label": "Include Exploded Items", + "print_hide": 1 + }, + { + "fieldname": "service_cost_per_qty", + "fieldtype": "Currency", + "label": "Service Cost Per Qty", + "read_only": 1, + "reqd": 1 + }, + { + "default": "0", + "fieldname": "additional_cost_per_qty", + "fieldtype": "Currency", + "label": "Additional Cost Per Qty", + "read_only": 1 + }, + { + "fieldname": "rm_cost_per_qty", + "fieldtype": "Currency", + "label": "Raw Material Cost Per Qty", + "no_copy": 1, + "read_only": 1 + }, + { + "allow_on_submit": 1, + "default": "0", + "fieldname": "page_break", + "fieldtype": "Check", + "label": "Page Break", + "no_copy": 1, + "print_hide": 1 + }, + { + "fieldname": "section_break_34", + "fieldtype": "Section Break" + }, + { + "depends_on": "received_qty", + "fieldname": "received_qty", + "fieldtype": "Float", + "label": "Received Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "returned_qty", + "fieldname": "returned_qty", + "fieldtype": "Float", + "label": "Returned Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + } + ], + "idx": 1, + "index_web_pages_for_search": 1, + "istable": 1, + "links": [], + "modified": "2022-04-11 21:28:06.585338", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Order Item", + "naming_rule": "Random", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "search_fields": "item_name", + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "track_changes": 1 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.py b/erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.py similarity index 53% rename from erpnext/hr/doctype/employee_skill_map/employee_skill_map.py rename to erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.py index ea7da9edf9..174f5b212c 100644 --- a/erpnext/hr/doctype/employee_skill_map/employee_skill_map.py +++ b/erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class EmployeeSkillMap(Document): +class SubcontractingOrderItem(Document): pass diff --git a/erpnext/hr/doctype/designation/__init__.py b/erpnext/subcontracting/doctype/subcontracting_order_service_item/__init__.py similarity index 100% rename from erpnext/hr/doctype/designation/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_order_service_item/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.json b/erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.json new file mode 100644 index 0000000000..f213313ef6 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.json @@ -0,0 +1,131 @@ +{ + "actions": [], + "autoname": "hash", + "creation": "2022-04-01 19:23:05.728354", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_code", + "column_break_2", + "item_name", + "section_break_4", + "qty", + "column_break_6", + "rate", + "column_break_8", + "amount", + "section_break_10", + "fg_item", + "column_break_12", + "fg_item_qty" + ], + "fields": [ + { + "bold": 1, + "columns": 2, + "fieldname": "item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "reqd": 1, + "search_index": 1 + }, + { + "fetch_from": "item_code.item_name", + "fieldname": "item_name", + "fieldtype": "Data", + "in_global_search": 1, + "in_list_view": 1, + "label": "Item Name", + "print_hide": 1, + "reqd": 1 + }, + { + "bold": 1, + "columns": 1, + "fieldname": "qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Quantity", + "print_width": "60px", + "reqd": 1, + "width": "60px" + }, + { + "bold": 1, + "columns": 2, + "fetch_from": "item_code.standard_rate", + "fetch_if_empty": 1, + "fieldname": "rate", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Rate", + "options": "currency", + "reqd": 1 + }, + { + "columns": 2, + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "options": "currency", + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "fg_item", + "fieldtype": "Link", + "label": "Finished Good Item", + "options": "Item", + "reqd": 1 + }, + { + "default": "1", + "fieldname": "fg_item_qty", + "fieldtype": "Float", + "label": "Finished Good Item Quantity", + "reqd": 1 + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_4", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_8", + "fieldtype": "Column Break" + }, + { + "fieldname": "section_break_10", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_12", + "fieldtype": "Column Break" + } + ], + "istable": 1, + "links": [], + "modified": "2022-04-07 11:43:43.094867", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Order Service Item", + "naming_rule": "Random", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "search_fields": "item_name", + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py b/erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.py similarity index 52% rename from erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py rename to erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.py index 9ac726e06d..ad6289d923 100644 --- a/erpnext/hr/doctype/appointment_letter_template/appointment_letter_template.py +++ b/erpnext/subcontracting/doctype/subcontracting_order_service_item/subcontracting_order_service_item.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class AppointmentLetterTemplate(Document): +class SubcontractingOrderServiceItem(Document): pass diff --git a/erpnext/hr/doctype/designation_skill/__init__.py b/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/__init__.py similarity index 100% rename from erpnext/hr/doctype/designation_skill/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_order_supplied_item/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.json b/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.json new file mode 100644 index 0000000000..a206a21ca6 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.json @@ -0,0 +1,178 @@ +{ + "actions": [], + "creation": "2022-04-01 19:29:30.923800", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "main_item_code", + "rm_item_code", + "column_break_3", + "stock_uom", + "conversion_factor", + "reserve_warehouse", + "column_break_6", + "bom_detail_no", + "reference_name", + "section_break_9", + "rate", + "column_break_11", + "amount", + "section_break_13", + "required_qty", + "supplied_qty", + "column_break_16", + "consumed_qty", + "returned_qty", + "total_supplied_qty" + ], + "fields": [ + { + "columns": 2, + "fieldname": "main_item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "read_only": 1 + }, + { + "columns": 2, + "fieldname": "rm_item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Raw Material Item Code", + "options": "Item", + "read_only": 1 + }, + { + "fieldname": "column_break_3", + "fieldtype": "Column Break" + }, + { + "fieldname": "stock_uom", + "fieldtype": "Link", + "label": "Stock Uom", + "options": "UOM", + "read_only": 1 + }, + { + "default": "1", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "hidden": 1, + "label": "Conversion Factor", + "read_only": 1 + }, + { + "columns": 2, + "fieldname": "reserve_warehouse", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Reserve Warehouse", + "options": "Warehouse" + }, + { + "fieldname": "column_break_6", + "fieldtype": "Column Break" + }, + { + "fieldname": "bom_detail_no", + "fieldtype": "Data", + "label": "BOM Detail No", + "read_only": 1 + }, + { + "fieldname": "reference_name", + "fieldtype": "Data", + "label": "Reference Name", + "read_only": 1 + }, + { + "fieldname": "section_break_9", + "fieldtype": "Section Break" + }, + { + "columns": 2, + "fieldname": "rate", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Rate", + "options": "Company:company:default_currency" + }, + { + "fieldname": "column_break_11", + "fieldtype": "Column Break" + }, + { + "fieldname": "amount", + "fieldtype": "Currency", + "label": "Amount", + "options": "Company:company:default_currency", + "read_only": 1 + }, + { + "fieldname": "section_break_13", + "fieldtype": "Section Break" + }, + { + "columns": 2, + "fieldname": "required_qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Required Qty", + "read_only": 1 + }, + { + "fieldname": "supplied_qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Supplied Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "column_break_16", + "fieldtype": "Column Break" + }, + { + "fieldname": "consumed_qty", + "fieldtype": "Float", + "label": "Consumed Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "returned_qty", + "fieldtype": "Float", + "label": "Returned Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1, + "hidden": 1 + }, + { + "fieldname": "total_supplied_qty", + "fieldtype": "Float", + "hidden": 1, + "label": "Total Supplied Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + } + ], + "hide_toolbar": 1, + "istable": 1, + "links": [], + "modified": "2022-04-07 12:58:28.208847", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Order Supplied Item", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/designation_skill/designation_skill.py b/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.py similarity index 52% rename from erpnext/hr/doctype/designation_skill/designation_skill.py rename to erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.py index c35223b3c1..5619e3b79a 100644 --- a/erpnext/hr/doctype/designation_skill/designation_skill.py +++ b/erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class DesignationSkill(Document): +class SubcontractingOrderSuppliedItem(Document): pass diff --git a/erpnext/hr/doctype/driver/__init__.py b/erpnext/subcontracting/doctype/subcontracting_receipt/__init__.py similarity index 100% rename from erpnext/hr/doctype/driver/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_receipt/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js new file mode 100644 index 0000000000..b2506cd143 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js @@ -0,0 +1,157 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.provide('erpnext.buying'); + +frappe.ui.form.on('Subcontracting Receipt', { + setup: (frm) => { + frm.get_field('supplied_items').grid.cannot_add_rows = true; + frm.get_field('supplied_items').grid.only_sortable(); + + frm.set_query('set_warehouse', () => { + return { + filters: { + company: frm.doc.company, + is_group: 0 + } + }; + }); + + frm.set_query('rejected_warehouse', () => { + return { + filters: { + company: frm.doc.company, + is_group: 0 + } + }; + }); + + frm.set_query('supplier_warehouse', () => { + return { + filters: { + company: frm.doc.company, + is_group: 0 + } + }; + }); + + frm.set_query('warehouse', 'items', () => ({ + filters: { + company: frm.doc.company, + is_group: 0 + } + })); + + frm.set_query('rejected_warehouse', 'items', () => ({ + filters: { + company: frm.doc.company, + is_group: 0 + } + })); + }, + + refresh: (frm) => { + if (frm.doc.docstatus > 0) { + frm.add_custom_button(__("Stock Ledger"), function () { + frappe.route_options = { + voucher_no: frm.doc.name, + from_date: frm.doc.posting_date, + to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), + company: frm.doc.company, + show_cancelled_entries: frm.doc.docstatus === 2 + }; + frappe.set_route("query-report", "Stock Ledger"); + }, __("View")); + + frm.add_custom_button(__('Accounting Ledger'), function () { + frappe.route_options = { + voucher_no: frm.doc.name, + from_date: frm.doc.posting_date, + to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), + company: frm.doc.company, + group_by: "Group by Voucher (Consolidated)", + show_cancelled_entries: frm.doc.docstatus === 2 + }; + frappe.set_route("query-report", "General Ledger"); + }, __("View")); + } + + if (!frm.doc.is_return && frm.doc.docstatus == 1 && frm.doc.per_returned < 100) { + frm.add_custom_button(__('Subcontract Return'), function () { + frappe.model.open_mapped_doc({ + method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_subcontract_return', + frm: frm + }); + }, __('Create')); + frm.page.set_inner_btn_group_as_primary(__('Create')); + } + + if (frm.doc.docstatus == 0) { + frm.add_custom_button(__('Subcontracting Order'), function () { + if (!frm.doc.supplier) { + frappe.throw({ + title: __("Mandatory"), + message: __("Please Select a Supplier") + }); + } + + erpnext.utils.map_current_doc({ + method: 'erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order.make_subcontracting_receipt', + source_doctype: "Subcontracting Order", + target: frm, + setters: { + supplier: frm.doc.supplier, + }, + get_query_filters: { + docstatus: 1, + per_received: ["<", 100], + company: frm.doc.company + } + }); + }, __("Get Items From")); + } + }, + + set_warehouse: (frm) => { + set_warehouse_in_children(frm.doc.items, 'warehouse', frm.doc.set_warehouse); + }, + + rejected_warehouse: (frm) => { + set_warehouse_in_children(frm.doc.items, 'rejected_warehouse', frm.doc.rejected_warehouse); + }, +}); + +frappe.ui.form.on('Subcontracting Receipt Item', { + item_code(frm) { + set_missing_values(frm); + }, + + qty(frm) { + set_missing_values(frm); + }, + + rate(frm) { + set_missing_values(frm); + }, +}); + +frappe.ui.form.on('Subcontracting Receipt Supplied Item', { + consumed_qty(frm) { + set_missing_values(frm); + }, +}); + +let set_warehouse_in_children = (child_table, warehouse_field, warehouse) => { + let transaction_controller = new erpnext.TransactionController(); + transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse); +}; + +let set_missing_values = (frm) => { + frappe.call({ + doc: frm.doc, + method: 'set_missing_values', + callback: (r) => { + if (!r.exc) frm.refresh(); + }, + }); +}; \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json new file mode 100644 index 0000000000..e9638144a7 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json @@ -0,0 +1,645 @@ +{ + "actions": [], + "autoname": "naming_series:", + "creation": "2022-04-18 11:20:44.226738", + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "title", + "naming_series", + "supplier", + "supplier_name", + "column_break1", + "company", + "posting_date", + "posting_time", + "is_return", + "return_against", + "section_addresses", + "supplier_address", + "contact_person", + "address_display", + "contact_display", + "contact_mobile", + "contact_email", + "col_break_address", + "shipping_address", + "shipping_address_display", + "billing_address", + "billing_address_display", + "sec_warehouse", + "set_warehouse", + "rejected_warehouse", + "col_break_warehouse", + "supplier_warehouse", + "items_section", + "items", + "section_break0", + "total_qty", + "column_break_27", + "total", + "raw_material_details", + "get_current_stock", + "supplied_items", + "section_break_46", + "in_words", + "bill_no", + "bill_date", + "accounting_details_section", + "provisional_expense_account", + "more_info", + "status", + "column_break_39", + "per_returned", + "section_break_47", + "amended_from", + "range", + "column_break4", + "represents_company", + "subscription_detail", + "auto_repeat", + "printing_settings", + "letter_head", + "language", + "instructions", + "column_break_97", + "select_print_heading", + "other_details", + "remarks", + "transporter_info", + "transporter_name", + "column_break5", + "lr_no", + "lr_date" + ], + "fields": [ + { + "allow_on_submit": 1, + "default": "{supplier_name}", + "fieldname": "title", + "fieldtype": "Data", + "hidden": 1, + "label": "Title", + "no_copy": 1, + "print_hide": 1 + }, + { + "fieldname": "naming_series", + "fieldtype": "Select", + "label": "Series", + "no_copy": 1, + "options": "MAT-SCR-.YYYY.-\nMAT-SCR-RET-.YYYY.-", + "print_hide": 1, + "reqd": 1, + "set_only_once": 1 + }, + { + "bold": 1, + "fieldname": "supplier", + "fieldtype": "Link", + "in_global_search": 1, + "label": "Supplier", + "options": "Supplier", + "print_hide": 1, + "print_width": "150px", + "reqd": 1, + "search_index": 1, + "width": "150px" + }, + { + "bold": 1, + "depends_on": "supplier", + "fetch_from": "supplier.supplier_name", + "fieldname": "supplier_name", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Supplier Name", + "read_only": 1 + }, + { + "fieldname": "column_break1", + "fieldtype": "Column Break", + "print_width": "50%", + "width": "50%" + }, + { + "default": "Today", + "fieldname": "posting_date", + "fieldtype": "Date", + "in_list_view": 1, + "label": "Date", + "no_copy": 1, + "print_width": "100px", + "reqd": 1, + "search_index": 1, + "width": "100px" + }, + { + "description": "Time at which materials were received", + "fieldname": "posting_time", + "fieldtype": "Time", + "label": "Posting Time", + "no_copy": 1, + "print_hide": 1, + "print_width": "100px", + "reqd": 1, + "width": "100px" + }, + { + "fieldname": "company", + "fieldtype": "Link", + "in_standard_filter": 1, + "label": "Company", + "options": "Company", + "print_hide": 1, + "print_width": "150px", + "remember_last_selected_value": 1, + "reqd": 1, + "width": "150px" + }, + { + "collapsible": 1, + "fieldname": "section_addresses", + "fieldtype": "Section Break", + "label": "Address and Contact" + }, + { + "fieldname": "supplier_address", + "fieldtype": "Link", + "label": "Select Supplier Address", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "contact_person", + "fieldtype": "Link", + "label": "Contact Person", + "options": "Contact", + "print_hide": 1 + }, + { + "fieldname": "address_display", + "fieldtype": "Small Text", + "label": "Address", + "read_only": 1 + }, + { + "fieldname": "contact_display", + "fieldtype": "Small Text", + "in_global_search": 1, + "label": "Contact", + "read_only": 1 + }, + { + "fieldname": "contact_mobile", + "fieldtype": "Small Text", + "label": "Mobile No", + "read_only": 1 + }, + { + "fieldname": "contact_email", + "fieldtype": "Small Text", + "label": "Contact Email", + "options": "Email", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "col_break_address", + "fieldtype": "Column Break" + }, + { + "fieldname": "shipping_address", + "fieldtype": "Link", + "label": "Select Shipping Address", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "shipping_address_display", + "fieldtype": "Small Text", + "label": "Shipping Address", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "sec_warehouse", + "fieldtype": "Section Break" + }, + { + "description": "Sets 'Accepted Warehouse' in each row of the Items table.", + "fieldname": "set_warehouse", + "fieldtype": "Link", + "label": "Accepted Warehouse", + "options": "Warehouse", + "print_hide": 1 + }, + { + "description": "Sets 'Rejected Warehouse' in each row of the Items table.", + "fieldname": "rejected_warehouse", + "fieldtype": "Link", + "label": "Rejected Warehouse", + "no_copy": 1, + "options": "Warehouse", + "print_hide": 1 + }, + { + "fieldname": "col_break_warehouse", + "fieldtype": "Column Break" + }, + { + "fieldname": "supplier_warehouse", + "fieldtype": "Link", + "label": "Supplier Warehouse", + "no_copy": 1, + "options": "Warehouse", + "print_hide": 1, + "print_width": "50px", + "width": "50px" + }, + { + "fieldname": "items_section", + "fieldtype": "Section Break", + "options": "fa fa-shopping-cart" + }, + { + "allow_bulk_edit": 1, + "fieldname": "items", + "fieldtype": "Table", + "label": "Items", + "options": "Subcontracting Receipt Item", + "reqd": 1 + }, + { + "depends_on": "supplied_items", + "fieldname": "get_current_stock", + "fieldtype": "Button", + "label": "Get Current Stock", + "options": "get_current_stock", + "print_hide": 1 + }, + { + "collapsible": 1, + "collapsible_depends_on": "supplied_items", + "depends_on": "supplied_items", + "fieldname": "raw_material_details", + "fieldtype": "Section Break", + "label": "Raw Materials Consumed", + "options": "fa fa-table", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "supplied_items", + "fieldtype": "Table", + "label": "Consumed Items", + "no_copy": 1, + "options": "Subcontracting Receipt Supplied Item", + "print_hide": 1 + }, + { + "fieldname": "section_break0", + "fieldtype": "Section Break" + }, + { + "fieldname": "total_qty", + "fieldtype": "Float", + "label": "Total Quantity", + "read_only": 1 + }, + { + "fieldname": "column_break_27", + "fieldtype": "Column Break" + }, + { + "fieldname": "total", + "fieldtype": "Currency", + "label": "Total", + "options": "currency", + "read_only": 1 + }, + { + "fieldname": "section_break_46", + "fieldtype": "Section Break" + }, + { + "fieldname": "in_words", + "fieldtype": "Data", + "label": "In Words", + "length": 240, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "bill_no", + "fieldtype": "Data", + "hidden": 1, + "label": "Bill No", + "print_hide": 1 + }, + { + "fieldname": "bill_date", + "fieldtype": "Date", + "hidden": 1, + "label": "Bill Date", + "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "more_info", + "fieldtype": "Section Break", + "label": "More Information", + "options": "fa fa-file-text" + }, + { + "default": "Draft", + "fieldname": "status", + "fieldtype": "Select", + "in_standard_filter": 1, + "label": "Status", + "no_copy": 1, + "options": "\nDraft\nCompleted\nReturn\nReturn Issued\nCancelled", + "print_hide": 1, + "print_width": "150px", + "read_only": 1, + "reqd": 1, + "search_index": 1, + "width": "150px" + }, + { + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 1, + "label": "Amended From", + "no_copy": 1, + "options": "Subcontracting Receipt", + "print_hide": 1, + "print_width": "150px", + "read_only": 1, + "width": "150px" + }, + { + "fieldname": "range", + "fieldtype": "Data", + "hidden": 1, + "label": "Range", + "print_hide": 1 + }, + { + "fieldname": "column_break4", + "fieldtype": "Column Break", + "print_hide": 1, + "print_width": "50%", + "width": "50%" + }, + { + "fieldname": "subscription_detail", + "fieldtype": "Section Break", + "label": "Auto Repeat Detail" + }, + { + "fieldname": "auto_repeat", + "fieldtype": "Link", + "label": "Auto Repeat", + "no_copy": 1, + "options": "Auto Repeat", + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "printing_settings", + "fieldtype": "Section Break", + "label": "Printing Settings" + }, + { + "allow_on_submit": 1, + "fieldname": "letter_head", + "fieldtype": "Link", + "label": "Letter Head", + "options": "Letter Head", + "print_hide": 1 + }, + { + "allow_on_submit": 1, + "fieldname": "select_print_heading", + "fieldtype": "Link", + "label": "Print Heading", + "no_copy": 1, + "options": "Print Heading", + "print_hide": 1, + "report_hide": 1 + }, + { + "fieldname": "language", + "fieldtype": "Data", + "label": "Print Language", + "read_only": 1 + }, + { + "fieldname": "column_break_97", + "fieldtype": "Column Break" + }, + { + "fieldname": "other_details", + "fieldtype": "HTML", + "hidden": 1, + "label": "Other Details", + "options": "
    Other Details
    ", + "print_hide": 1, + "print_width": "30%", + "width": "30%" + }, + { + "fieldname": "instructions", + "fieldtype": "Small Text", + "label": "Instructions" + }, + { + "fieldname": "remarks", + "fieldtype": "Small Text", + "label": "Remarks", + "print_hide": 1 + }, + { + "collapsible": 1, + "collapsible_depends_on": "transporter_name", + "fieldname": "transporter_info", + "fieldtype": "Section Break", + "label": "Transporter Details", + "options": "fa fa-truck" + }, + { + "fieldname": "transporter_name", + "fieldtype": "Data", + "label": "Transporter Name" + }, + { + "fieldname": "column_break5", + "fieldtype": "Column Break", + "print_width": "50%", + "width": "50%" + }, + { + "fieldname": "lr_no", + "fieldtype": "Data", + "label": "Vehicle Number", + "no_copy": 1, + "print_width": "100px", + "width": "100px" + }, + { + "fieldname": "lr_date", + "fieldtype": "Date", + "label": "Vehicle Date", + "no_copy": 1, + "print_width": "100px", + "width": "100px" + }, + { + "fieldname": "billing_address", + "fieldtype": "Link", + "label": "Select Billing Address", + "options": "Address" + }, + { + "fieldname": "billing_address_display", + "fieldtype": "Small Text", + "label": "Billing Address", + "read_only": 1 + }, + { + "fetch_from": "supplier.represents_company", + "fieldname": "represents_company", + "fieldtype": "Link", + "ignore_user_permissions": 1, + "label": "Represents Company", + "options": "Company", + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "accounting_details_section", + "fieldtype": "Section Break", + "label": "Accounting Details" + }, + { + "fieldname": "provisional_expense_account", + "fieldtype": "Link", + "hidden": 1, + "label": "Provisional Expense Account", + "options": "Account" + }, + { + "default": "0", + "fieldname": "is_return", + "fieldtype": "Check", + "label": "Is Return", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "depends_on": "is_return", + "fieldname": "return_against", + "fieldtype": "Link", + "label": "Return Against Subcontracting Receipt", + "no_copy": 1, + "options": "Subcontracting Receipt", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "column_break_39", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval:(!doc.__islocal && doc.is_return==0)", + "fieldname": "per_returned", + "fieldtype": "Percent", + "in_list_view": 1, + "label": "% Returned", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "section_break_47", + "fieldtype": "Section Break" + } + ], + "is_submittable": 1, + "links": [], + "modified": "2022-04-18 13:15:12.011682", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Receipt", + "naming_rule": "By \"Naming Series\" field", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Purchase User", + "share": 1, + "submit": 1, + "write": 1 + }, + { + "read": 1, + "report": 1, + "role": "Accounts User" + }, + { + "permlevel": 1, + "read": 1, + "role": "Stock Manager", + "write": 1 + } + ], + "search_fields": "status, posting_date, supplier", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [], + "timeline_field": "supplier", + "title_field": "title", + "track_changes": 1 +} \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py new file mode 100644 index 0000000000..0c4ec6fb76 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -0,0 +1,188 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +import frappe +from frappe import _ +from frappe.utils import cint, getdate, nowdate + +from erpnext.controllers.subcontracting_controller import SubcontractingController + + +class SubcontractingReceipt(SubcontractingController): + def __init__(self, *args, **kwargs): + super(SubcontractingReceipt, self).__init__(*args, **kwargs) + self.status_updater = [ + { + "target_dt": "Subcontracting Order Item", + "join_field": "subcontracting_order_item", + "target_field": "received_qty", + "target_parent_dt": "Subcontracting Order", + "target_parent_field": "per_received", + "target_ref_field": "qty", + "source_dt": "Subcontracting Receipt Item", + "source_field": "received_qty", + "percent_join_field": "subcontracting_order", + "overflow_type": "receipt", + }, + ] + + def update_status_updater_args(self): + if cint(self.is_return): + self.status_updater.extend( + [ + { + "source_dt": "Subcontracting Receipt Item", + "target_dt": "Subcontracting Order Item", + "join_field": "subcontracting_order_item", + "target_field": "returned_qty", + "source_field": "-1 * qty", + "extra_cond": """ and exists (select name from `tabSubcontracting Receipt` + where name=`tabSubcontracting Receipt Item`.parent and is_return=1)""", + }, + { + "source_dt": "Subcontracting Receipt Item", + "target_dt": "Subcontracting Receipt Item", + "join_field": "subcontracting_receipt_item", + "target_field": "returned_qty", + "target_parent_dt": "Subcontracting Receipt", + "target_parent_field": "per_returned", + "target_ref_field": "received_qty", + "source_field": "-1 * received_qty", + "percent_join_field_parent": "return_against", + }, + ] + ) + + def before_validate(self): + super(SubcontractingReceipt, self).before_validate() + self.set_items_cost_center() + self.set_items_expense_account() + + def validate(self): + super(SubcontractingReceipt, self).validate() + self.set_missing_values() + self.validate_posting_time() + self.validate_rejected_warehouse() + + if self._action == "submit": + self.make_batches("warehouse") + + if getdate(self.posting_date) > getdate(nowdate()): + frappe.throw(_("Posting Date cannot be future date")) + + self.reset_default_field_value("set_warehouse", "items", "warehouse") + self.reset_default_field_value("rejected_warehouse", "items", "rejected_warehouse") + self.get_current_stock() + + def on_submit(self): + self.update_status_updater_args() + self.update_prevdoc_status() + self.set_subcontracting_order_status() + self.set_consumed_qty_in_subcontract_order() + self.update_stock_ledger() + + from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit + + update_serial_nos_after_submit(self, "items") + + self.make_gl_entries() + self.repost_future_sle_and_gle() + self.update_status() + + def on_cancel(self): + self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry", "Repost Item Valuation") + self.update_status_updater_args() + self.update_prevdoc_status() + self.update_stock_ledger() + self.make_gl_entries_on_cancel() + self.repost_future_sle_and_gle() + self.delete_auto_created_batches() + self.set_consumed_qty_in_subcontract_order() + self.set_subcontracting_order_status() + self.update_status() + + @frappe.whitelist() + def set_missing_values(self): + self.set_missing_values_in_supplied_items() + self.set_missing_values_in_items() + + def set_missing_values_in_supplied_items(self): + for item in self.get("supplied_items") or []: + item.amount = item.rate * item.consumed_qty + + def set_missing_values_in_items(self): + rm_supp_cost = {} + for item in self.get("supplied_items") or []: + if item.reference_name in rm_supp_cost: + rm_supp_cost[item.reference_name] += item.amount + else: + rm_supp_cost[item.reference_name] = item.amount + + total_qty = total_amount = 0 + for item in self.items: + if item.name in rm_supp_cost: + item.rm_supp_cost = rm_supp_cost[item.name] + item.rm_cost_per_qty = item.rm_supp_cost / item.qty + rm_supp_cost.pop(item.name) + + if self.is_new() and item.rm_supp_cost > 0: + item.rate = ( + item.rm_cost_per_qty + (item.service_cost_per_qty or 0) + item.additional_cost_per_qty + ) + + item.received_qty = item.qty + (item.rejected_qty or 0) + item.amount = item.qty * item.rate + total_qty += item.qty + total_amount += item.amount + else: + self.total_qty = total_qty + self.total = total_amount + + def validate_rejected_warehouse(self): + if not self.rejected_warehouse: + for item in self.items: + if item.rejected_qty: + frappe.throw( + _("Rejected Warehouse is mandatory against rejected Item {0}").format(item.item_code) + ) + + def set_items_cost_center(self): + if self.company: + cost_center = frappe.get_cached_value("Company", self.company, "cost_center") + + for item in self.items: + if not item.cost_center: + item.cost_center = cost_center + + def set_items_expense_account(self): + if self.company: + expense_account = self.get_company_default("default_expense_account", ignore_validation=True) + + for item in self.items: + if not item.expense_account: + item.expense_account = expense_account + + def update_status(self, status=None, update_modified=False): + if self.docstatus >= 1 and not status: + if self.docstatus == 1: + if self.is_return: + status = "Return" + return_against = frappe.get_doc("Subcontracting Receipt", self.return_against) + return_against.run_method("update_status") + else: + if self.per_returned == 100: + status = "Return Issued" + elif self.status == "Draft": + status = "Completed" + elif self.docstatus == 2: + status = "Cancelled" + + if status: + frappe.db.set_value("Subcontracting Receipt", self.name, "status", status, update_modified) + + +@frappe.whitelist() +def make_subcontract_return(source_name, target_doc=None): + from erpnext.controllers.sales_and_purchase_return import make_return_doc + + return make_return_doc("Subcontracting Receipt", source_name, target_doc) diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py new file mode 100644 index 0000000000..a9e51937d7 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py @@ -0,0 +1,15 @@ +from frappe import _ + + +def get_data(): + return { + "fieldname": "subcontracting_receipt_no", + "internal_links": { + "Subcontracting Order": ["items", "subcontracting_order"], + "Project": ["items", "project"], + "Quality Inspection": ["items", "quality_inspection"], + }, + "transactions": [ + {"label": _("Reference"), "items": ["Subcontracting Order", "Quality Inspection", "Project"]}, + ], + } diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js new file mode 100644 index 0000000000..14a4e4ad6c --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_list.js @@ -0,0 +1,14 @@ +// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.listview_settings['Subcontracting Receipt'] = { + get_indicator: function (doc) { + const status_colors = { + "Draft": "grey", + "Return": "gray", + "Return Issued": "grey", + "Completed": "green", + }; + return [__(doc.status), status_colors[doc.status], "status,=," + doc.status]; + }, +}; \ No newline at end of file diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py new file mode 100644 index 0000000000..763e76882e --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py @@ -0,0 +1,374 @@ +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt + + +import copy + +import frappe +from frappe.tests.utils import FrappeTestCase +from frappe.utils import flt + +from erpnext.controllers.sales_and_purchase_return import make_return_doc +from erpnext.controllers.tests.test_subcontracting_controller import ( + get_rm_items, + get_subcontracting_order, + make_bom_for_subcontracted_items, + make_raw_materials, + make_service_items, + make_stock_in_entry, + make_stock_transfer_entry, + make_subcontracted_item, + make_subcontracted_items, + set_backflush_based_on, +) +from erpnext.stock.doctype.item.test_item import make_item +from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry +from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, +) + + +class TestSubcontractingReceipt(FrappeTestCase): + def setUp(self): + make_subcontracted_items() + make_raw_materials() + make_service_items() + make_bom_for_subcontracted_items() + + def test_subcontracting(self): + set_backflush_based_on("BOM") + make_stock_entry( + item_code="_Test Item", qty=100, target="_Test Warehouse 1 - _TC", basic_rate=100 + ) + make_stock_entry( + item_code="_Test Item Home Desktop 100", + qty=100, + target="_Test Warehouse 1 - _TC", + basic_rate=100, + ) + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 10, + "rate": 100, + "fg_item": "_Test FG Item", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + scr = make_subcontracting_receipt(sco.name) + scr.save() + scr.submit() + rm_supp_cost = sum(item.amount for item in scr.get("supplied_items")) + self.assertEqual(scr.get("items")[0].rm_supp_cost, flt(rm_supp_cost)) + + def test_subcontracting_gle_fg_item_rate_zero(self): + from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries + + set_backflush_based_on("BOM") + make_stock_entry( + item_code="_Test Item", + target="Work In Progress - TCP1", + qty=100, + basic_rate=100, + company="_Test Company with perpetual inventory", + ) + make_stock_entry( + item_code="_Test Item Home Desktop 100", + target="Work In Progress - TCP1", + qty=100, + basic_rate=100, + company="_Test Company with perpetual inventory", + ) + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 10, + "rate": 0, + "fg_item": "_Test FG Item", + "fg_item_qty": 10, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + scr = make_subcontracting_receipt(sco.name) + scr.save() + scr.submit() + + gl_entries = get_gl_entries("Subcontracting Receipt", scr.name) + self.assertFalse(gl_entries) + + def test_subcontracting_over_receipt(self): + """ + Behaviour: Raise multiple SCRs against one SCO that in total + receive more than the required qty in the SCO. + Expected Result: Error Raised for Over Receipt against SCO. + """ + from erpnext.controllers.subcontracting_controller import ( + make_rm_stock_entry as make_subcontract_transfer_entry, + ) + from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, + ) + from erpnext.subcontracting.doctype.subcontracting_order.test_subcontracting_order import ( + make_subcontracted_item, + ) + + set_backflush_based_on("Material Transferred for Subcontract") + item_code = "_Test Subcontracted FG Item 1" + make_subcontracted_item(item_code=item_code) + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 1", + "qty": 1, + "rate": 100, + "fg_item": "_Test Subcontracted FG Item 1", + "fg_item_qty": 1, + }, + ] + sco = get_subcontracting_order( + service_items=service_items, + include_exploded_items=0, + ) + + # stock raw materials in a warehouse before transfer + make_stock_entry( + target="_Test Warehouse - _TC", item_code="Test Extra Item 1", qty=10, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse - _TC", item_code="_Test FG Item", qty=1, basic_rate=100 + ) + make_stock_entry( + target="_Test Warehouse - _TC", item_code="Test Extra Item 2", qty=1, basic_rate=100 + ) + + rm_items = [ + { + "item_code": item_code, + "rm_item_code": sco.supplied_items[0].rm_item_code, + "item_name": "_Test FG Item", + "qty": sco.supplied_items[0].required_qty, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + { + "item_code": item_code, + "rm_item_code": sco.supplied_items[1].rm_item_code, + "item_name": "Test Extra Item 1", + "qty": sco.supplied_items[1].required_qty, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + }, + ] + ste = frappe.get_doc(make_subcontract_transfer_entry(sco.name, rm_items)) + ste.to_warehouse = "_Test Warehouse 1 - _TC" + ste.save() + ste.submit() + + scr1 = make_subcontracting_receipt(sco.name) + scr2 = make_subcontracting_receipt(sco.name) + + scr1.submit() + self.assertRaises(frappe.ValidationError, scr2.submit) + + def test_subcontracted_scr_for_multi_transfer_batches(self): + from erpnext.controllers.subcontracting_controller import make_rm_stock_entry + from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import ( + make_subcontracting_receipt, + ) + + set_backflush_based_on("Material Transferred for Subcontract") + item_code = "_Test Subcontracted FG Item 3" + + make_item( + "Sub Contracted Raw Material 3", + {"is_stock_item": 1, "is_sub_contracted_item": 1, "has_batch_no": 1, "create_new_batch": 1}, + ) + + make_subcontracted_item( + item_code=item_code, has_batch_no=1, raw_materials=["Sub Contracted Raw Material 3"] + ) + + order_qty = 500 + service_items = [ + { + "warehouse": "_Test Warehouse - _TC", + "item_code": "Subcontracted Service Item 3", + "qty": order_qty, + "rate": 100, + "fg_item": "_Test Subcontracted FG Item 3", + "fg_item_qty": order_qty, + }, + ] + sco = get_subcontracting_order(service_items=service_items) + + ste1 = make_stock_entry( + target="_Test Warehouse - _TC", + item_code="Sub Contracted Raw Material 3", + qty=300, + basic_rate=100, + ) + ste2 = make_stock_entry( + target="_Test Warehouse - _TC", + item_code="Sub Contracted Raw Material 3", + qty=200, + basic_rate=100, + ) + + transferred_batch = {ste1.items[0].batch_no: 300, ste2.items[0].batch_no: 200} + + rm_items = [ + { + "item_code": item_code, + "rm_item_code": "Sub Contracted Raw Material 3", + "item_name": "_Test Item", + "qty": 300, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + "name": sco.supplied_items[0].name, + }, + { + "item_code": item_code, + "rm_item_code": "Sub Contracted Raw Material 3", + "item_name": "_Test Item", + "qty": 200, + "warehouse": "_Test Warehouse - _TC", + "stock_uom": "Nos", + "name": sco.supplied_items[0].name, + }, + ] + + se = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items)) + self.assertEqual(len(se.items), 2) + se.items[0].batch_no = ste1.items[0].batch_no + se.items[1].batch_no = ste2.items[0].batch_no + se.submit() + + supplied_qty = frappe.db.get_value( + "Subcontracting Order Supplied Item", + {"parent": sco.name, "rm_item_code": "Sub Contracted Raw Material 3"}, + "supplied_qty", + ) + + self.assertEqual(supplied_qty, 500.00) + + scr = make_subcontracting_receipt(sco.name) + scr.save() + self.assertEqual(len(scr.supplied_items), 2) + + for row in scr.supplied_items: + self.assertEqual(transferred_batch.get(row.batch_no), row.consumed_qty) + + def test_subcontracting_order_partial_return(self): + sco = get_subcontracting_order() + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + scr1 = make_subcontracting_receipt(sco.name) + scr1.save() + scr1.submit() + + scr1_return = make_return_subcontracting_receipt(scr_name=scr1.name, qty=-3) + scr1.load_from_db() + self.assertEqual(scr1_return.status, "Return") + self.assertEqual(scr1.items[0].returned_qty, 3) + + scr2_return = make_return_subcontracting_receipt(scr_name=scr1.name, qty=-7) + scr1.load_from_db() + self.assertEqual(scr2_return.status, "Return") + self.assertEqual(scr1.status, "Return Issued") + self.assertEqual(scr1.items[0].returned_qty, 10) + + def test_subcontracting_order_over_return(self): + sco = get_subcontracting_order() + rm_items = get_rm_items(sco.supplied_items) + itemwise_details = make_stock_in_entry(rm_items=rm_items) + make_stock_transfer_entry( + sco_no=sco.name, + rm_items=rm_items, + itemwise_details=copy.deepcopy(itemwise_details), + ) + scr1 = make_subcontracting_receipt(sco.name) + scr1.save() + scr1.submit() + + from erpnext.controllers.status_updater import OverAllowanceError + + args = frappe._dict(scr_name=scr1.name, qty=-15) + self.assertRaises(OverAllowanceError, make_return_subcontracting_receipt, **args) + + +def make_return_subcontracting_receipt(**args): + args = frappe._dict(args) + return_doc = make_return_doc("Subcontracting Receipt", args.scr_name) + return_doc.supplier_warehouse = ( + args.supplier_warehouse or args.warehouse or "_Test Warehouse 1 - _TC" + ) + + if args.qty: + for item in return_doc.items: + item.qty = args.qty + + if not args.do_not_save: + return_doc.save() + if not args.do_not_submit: + return_doc.submit() + + return_doc.load_from_db() + return return_doc + + +def get_items(**args): + args = frappe._dict(args) + return [ + { + "conversion_factor": 1.0, + "description": "_Test Item", + "doctype": "Subcontracting Receipt Item", + "item_code": "_Test Item", + "item_name": "_Test Item", + "parentfield": "items", + "qty": 5.0, + "rate": 50.0, + "received_qty": 5.0, + "rejected_qty": 0.0, + "stock_uom": "_Test UOM", + "warehouse": args.warehouse or "_Test Warehouse - _TC", + "cost_center": args.cost_center or "Main - _TC", + }, + { + "conversion_factor": 1.0, + "description": "_Test Item Home Desktop 100", + "doctype": "Subcontracting Receipt Item", + "item_code": "_Test Item Home Desktop 100", + "item_name": "_Test Item Home Desktop 100", + "parentfield": "items", + "qty": 5.0, + "rate": 50.0, + "received_qty": 5.0, + "rejected_qty": 0.0, + "stock_uom": "_Test UOM", + "warehouse": args.warehouse or "_Test Warehouse 1 - _TC", + "cost_center": args.cost_center or "Main - _TC", + }, + ] diff --git a/erpnext/hr/doctype/driving_license_category/__init__.py b/erpnext/subcontracting/doctype/subcontracting_receipt_item/__init__.py similarity index 100% rename from erpnext/hr/doctype/driving_license_category/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_receipt_item/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json b/erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json new file mode 100644 index 0000000000..e2785ce0cd --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json @@ -0,0 +1,475 @@ +{ + "actions": [], + "autoname": "hash", + "creation": "2022-04-13 16:05:55.395695", + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "item_code", + "column_break_2", + "item_name", + "section_break_4", + "description", + "brand", + "image_column", + "image", + "image_view", + "received_and_accepted", + "received_qty", + "qty", + "rejected_qty", + "returned_qty", + "col_break2", + "stock_uom", + "conversion_factor", + "tracking_section", + "col_break_tracking_section", + "rate_and_amount", + "rate", + "amount", + "column_break_19", + "rm_cost_per_qty", + "service_cost_per_qty", + "additional_cost_per_qty", + "rm_supp_cost", + "warehouse_and_reference", + "warehouse", + "rejected_warehouse", + "subcontracting_order", + "column_break_40", + "schedule_date", + "quality_inspection", + "subcontracting_order_item", + "subcontracting_receipt_item", + "section_break_45", + "bom", + "serial_no", + "col_break5", + "batch_no", + "rejected_serial_no", + "expense_account", + "manufacture_details", + "manufacturer", + "column_break_16", + "manufacturer_part_no", + "accounting_dimensions_section", + "project", + "dimension_col_break", + "cost_center", + "section_break_80", + "page_break" + ], + "fields": [ + { + "bold": 1, + "columns": 3, + "fieldname": "item_code", + "fieldtype": "Link", + "in_global_search": 1, + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "print_width": "100px", + "reqd": 1, + "search_index": 1, + "width": "100px" + }, + { + "fieldname": "column_break_2", + "fieldtype": "Column Break" + }, + { + "fieldname": "item_name", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Item Name", + "print_hide": 1, + "reqd": 1 + }, + { + "collapsible": 1, + "fieldname": "section_break_4", + "fieldtype": "Section Break", + "label": "Description" + }, + { + "fieldname": "description", + "fieldtype": "Text Editor", + "label": "Description", + "print_width": "300px", + "reqd": 1, + "width": "300px" + }, + { + "fieldname": "image", + "fieldtype": "Attach", + "hidden": 1, + "label": "Image" + }, + { + "fieldname": "image_view", + "fieldtype": "Image", + "label": "Image View", + "options": "image", + "print_hide": 1 + }, + { + "fieldname": "received_and_accepted", + "fieldtype": "Section Break", + "label": "Received and Accepted" + }, + { + "bold": 1, + "default": "0", + "fieldname": "received_qty", + "fieldtype": "Float", + "label": "Received Quantity", + "no_copy": 1, + "print_hide": 1, + "print_width": "100px", + "read_only": 1, + "reqd": 1, + "width": "100px" + }, + { + "columns": 2, + "fieldname": "qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Accepted Quantity", + "no_copy": 1, + "print_width": "100px", + "width": "100px" + }, + { + "columns": 1, + "fieldname": "rejected_qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Rejected Quantity", + "no_copy": 1, + "print_hide": 1, + "print_width": "100px", + "width": "100px" + }, + { + "fieldname": "col_break2", + "fieldtype": "Column Break", + "print_hide": 1 + }, + { + "fieldname": "stock_uom", + "fieldtype": "Link", + "label": "Stock UOM", + "options": "UOM", + "print_hide": 1, + "print_width": "100px", + "read_only": 1, + "reqd": 1, + "width": "100px" + }, + { + "default": "1", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "hidden": 1, + "label": "Conversion Factor", + "read_only": 1 + }, + { + "fieldname": "rate_and_amount", + "fieldtype": "Section Break", + "label": "Rate and Amount" + }, + { + "bold": 1, + "columns": 2, + "fieldname": "rate", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Rate", + "options": "currency", + "print_width": "100px", + "width": "100px" + }, + { + "fieldname": "amount", + "fieldtype": "Currency", + "in_list_view": 1, + "label": "Amount", + "options": "currency", + "read_only": 1 + }, + { + "fieldname": "column_break_19", + "fieldtype": "Column Break" + }, + { + "fieldname": "rm_cost_per_qty", + "fieldtype": "Currency", + "label": "Raw Material Cost Per Qty", + "no_copy": 1, + "read_only": 1 + }, + { + "fieldname": "service_cost_per_qty", + "fieldtype": "Currency", + "label": "Service Cost Per Qty", + "read_only": 1, + "reqd": 1 + }, + { + "default": "0", + "fieldname": "additional_cost_per_qty", + "fieldtype": "Currency", + "label": "Additional Cost Per Qty", + "read_only": 1 + }, + { + "fieldname": "warehouse_and_reference", + "fieldtype": "Section Break", + "label": "Warehouse and Reference" + }, + { + "bold": 1, + "fieldname": "warehouse", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Accepted Warehouse", + "options": "Warehouse", + "print_hide": 1, + "print_width": "100px", + "width": "100px" + }, + { + "fieldname": "rejected_warehouse", + "fieldtype": "Link", + "label": "Rejected Warehouse", + "no_copy": 1, + "options": "Warehouse", + "print_hide": 1, + "print_width": "100px", + "width": "100px" + }, + { + "depends_on": "eval:!doc.__islocal", + "fieldname": "quality_inspection", + "fieldtype": "Link", + "label": "Quality Inspection", + "no_copy": 1, + "options": "Quality Inspection", + "print_hide": 1 + }, + { + "fieldname": "column_break_40", + "fieldtype": "Column Break" + }, + { + "fieldname": "subcontracting_order", + "fieldtype": "Link", + "label": "Subcontracting Order", + "no_copy": 1, + "options": "Subcontracting Order", + "print_width": "150px", + "read_only": 1, + "search_index": 1, + "width": "150px" + }, + { + "fieldname": "schedule_date", + "fieldtype": "Date", + "label": "Required By", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "section_break_45", + "fieldtype": "Section Break" + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "serial_no", + "fieldtype": "Small Text", + "in_list_view": 1, + "label": "Serial No", + "no_copy": 1 + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "batch_no", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Batch No", + "no_copy": 1, + "options": "Batch", + "print_hide": 1 + }, + { + "depends_on": "eval:!doc.is_fixed_asset", + "fieldname": "rejected_serial_no", + "fieldtype": "Small Text", + "label": "Rejected Serial No", + "no_copy": 1, + "print_hide": 1 + }, + { + "fieldname": "subcontracting_order_item", + "fieldtype": "Data", + "hidden": 1, + "label": "Subcontracting Order Item", + "no_copy": 1, + "print_hide": 1, + "print_width": "150px", + "read_only": 1, + "search_index": 1, + "width": "150px" + }, + { + "fieldname": "col_break5", + "fieldtype": "Column Break" + }, + { + "fieldname": "bom", + "fieldtype": "Link", + "label": "BOM", + "no_copy": 1, + "options": "BOM", + "print_hide": 1 + }, + { + "fetch_from": "item_code.brand", + "fieldname": "brand", + "fieldtype": "Link", + "hidden": 1, + "label": "Brand", + "options": "Brand", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "rm_supp_cost", + "fieldtype": "Currency", + "hidden": 1, + "label": "Raw Materials Supplied Cost", + "no_copy": 1, + "options": "Company:company:default_currency", + "print_hide": 1, + "print_width": "150px", + "read_only": 1, + "width": "150px" + }, + { + "fieldname": "expense_account", + "fieldtype": "Link", + "hidden": 1, + "label": "Expense Account", + "options": "Account", + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "manufacture_details", + "fieldtype": "Section Break", + "label": "Manufacture" + }, + { + "fieldname": "manufacturer", + "fieldtype": "Link", + "label": "Manufacturer", + "options": "Manufacturer" + }, + { + "fieldname": "column_break_16", + "fieldtype": "Column Break" + }, + { + "fieldname": "manufacturer_part_no", + "fieldtype": "Data", + "label": "Manufacturer Part Number" + }, + { + "fieldname": "subcontracting_receipt_item", + "fieldtype": "Data", + "hidden": 1, + "label": "Subcontracting Receipt Item", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, + { + "collapsible": 1, + "fieldname": "image_column", + "fieldtype": "Column Break" + }, + { + "fieldname": "tracking_section", + "fieldtype": "Section Break" + }, + { + "fieldname": "col_break_tracking_section", + "fieldtype": "Column Break" + }, + { + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "fieldname": "project", + "fieldtype": "Link", + "label": "Project", + "options": "Project", + "print_hide": 1 + }, + { + "fieldname": "dimension_col_break", + "fieldtype": "Column Break" + }, + { + "default": ":Company", + "depends_on": "eval:cint(erpnext.is_perpetual_inventory_enabled(parent.company))", + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center", + "print_hide": 1 + }, + { + "fieldname": "section_break_80", + "fieldtype": "Section Break" + }, + { + "allow_on_submit": 1, + "default": "0", + "fieldname": "page_break", + "fieldtype": "Check", + "label": "Page Break", + "print_hide": 1 + }, + { + "depends_on": "returned_qty", + "fieldname": "returned_qty", + "fieldtype": "Float", + "label": "Returned Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + } + ], + "idx": 1, + "istable": 1, + "links": [], + "modified": "2022-04-21 12:07:55.899701", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Receipt Item", + "naming_rule": "Random", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py b/erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.py similarity index 53% rename from erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py rename to erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.py index d158013d74..374f95baf3 100644 --- a/erpnext/hr/doctype/appointment_letter_content/appointment_letter_content.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class AppointmentLettercontent(Document): +class SubcontractingReceiptItem(Document): pass diff --git a/erpnext/hr/doctype/employee/__init__.py b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/__init__.py similarity index 100% rename from erpnext/hr/doctype/employee/__init__.py rename to erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/__init__.py diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json new file mode 100644 index 0000000000..100a8060e8 --- /dev/null +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json @@ -0,0 +1,198 @@ +{ + "actions": [], + "creation": "2022-04-18 10:45:16.538479", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "main_item_code", + "rm_item_code", + "item_name", + "bom_detail_no", + "col_break1", + "description", + "stock_uom", + "conversion_factor", + "reference_name", + "secbreak_1", + "rate", + "col_break2", + "amount", + "secbreak_2", + "required_qty", + "col_break3", + "consumed_qty", + "current_stock", + "secbreak_3", + "batch_no", + "col_break4", + "serial_no", + "subcontracting_order" + ], + "fields": [ + { + "fieldname": "main_item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Item Code", + "options": "Item", + "read_only": 1 + }, + { + "fieldname": "rm_item_code", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Raw Material Item Code", + "options": "Item", + "read_only": 1 + }, + { + "fieldname": "description", + "fieldtype": "Text Editor", + "in_global_search": 1, + "label": "Description", + "print_width": "300px", + "read_only": 1, + "width": "300px" + }, + { + "fieldname": "batch_no", + "fieldtype": "Link", + "label": "Batch No", + "no_copy": 1, + "options": "Batch" + }, + { + "fieldname": "serial_no", + "fieldtype": "Text", + "label": "Serial No", + "no_copy": 1 + }, + { + "fieldname": "col_break1", + "fieldtype": "Column Break" + }, + { + "fieldname": "required_qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Available Qty For Consumption", + "print_hide": 1, + "read_only": 1 + }, + { + "columns": 2, + "fieldname": "consumed_qty", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Qty to be Consumed", + "reqd": 1 + }, + { + "fieldname": "stock_uom", + "fieldtype": "Link", + "label": "Stock Uom", + "options": "UOM", + "read_only": 1 + }, + { + "fieldname": "rate", + "fieldtype": "Currency", + "label": "Rate", + "options": "Company:company:default_currency", + "read_only": 1 + }, + { + "fieldname": "amount", + "fieldtype": "Currency", + "label": "Amount", + "options": "Company:company:default_currency", + "read_only": 1 + }, + { + "default": "1", + "fieldname": "conversion_factor", + "fieldtype": "Float", + "hidden": 1, + "label": "Conversion Factor", + "read_only": 1 + }, + { + "fieldname": "current_stock", + "fieldtype": "Float", + "in_list_view": 1, + "label": "Current Stock", + "read_only": 1 + }, + { + "fieldname": "reference_name", + "fieldtype": "Data", + "hidden": 1, + "in_list_view": 1, + "label": "Reference Name", + "read_only": 1 + }, + { + "fieldname": "bom_detail_no", + "fieldtype": "Data", + "hidden": 1, + "in_list_view": 1, + "label": "BOM Detail No", + "read_only": 1 + }, + { + "fieldname": "secbreak_1", + "fieldtype": "Section Break" + }, + { + "fieldname": "col_break2", + "fieldtype": "Column Break" + }, + { + "fieldname": "secbreak_2", + "fieldtype": "Section Break" + }, + { + "fieldname": "col_break3", + "fieldtype": "Column Break" + }, + { + "fieldname": "secbreak_3", + "fieldtype": "Section Break" + }, + { + "fieldname": "col_break4", + "fieldtype": "Column Break" + }, + { + "fieldname": "item_name", + "fieldtype": "Data", + "label": "Item Name", + "read_only": 1 + }, + { + "fieldname": "subcontracting_order", + "fieldtype": "Link", + "hidden": 1, + "label": "Subcontracting Order", + "no_copy": 1, + "options": "Subcontracting Order", + "print_hide": 1, + "read_only": 1 + } + ], + "idx": 1, + "istable": 1, + "links": [], + "modified": "2022-04-18 10:45:16.538479", + "modified_by": "Administrator", + "module": "Subcontracting", + "name": "Subcontracting Receipt Supplied Item", + "naming_rule": "Autoincrement", + "owner": "Administrator", + "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "states": [] +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_skill/employee_skill.py b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py similarity index 51% rename from erpnext/hr/doctype/employee_skill/employee_skill.py rename to erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py index 13bee34253..f4d2805d4b 100644 --- a/erpnext/hr/doctype/employee_skill/employee_skill.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.py @@ -1,10 +1,9 @@ -# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors +# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt - # import frappe from frappe.model.document import Document -class EmployeeSkill(Document): +class SubcontractingReceiptSuppliedItem(Document): pass diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index 08a06b19b4..7f3e0cf4c2 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -11,6 +11,8 @@ from frappe.core.utils import get_parent_doc from frappe.email.inbox import link_communication_to_document from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc +from frappe.query_builder import Interval +from frappe.query_builder.functions import Now from frappe.utils import date_diff, get_datetime, now_datetime, time_diff_in_seconds from frappe.utils.user import is_website_user @@ -190,15 +192,17 @@ def auto_close_tickets(): frappe.db.get_value("Support Settings", "Support Settings", "close_issue_after_days") or 7 ) - issues = frappe.db.sql( - """ select name from tabIssue where status='Replied' and - modified -
    - {% for person in anniversary_persons %} - {% if person.image %} - - - {% else %} - - {{ frappe.utils.get_abbr(person.name) }} - - {% endif %} - {% endfor %} -
    -
    - {{ reminder_text }} -

    {{ message }}

    -
    - diff --git a/erpnext/templates/emails/birthday_reminder.html b/erpnext/templates/emails/birthday_reminder.html deleted file mode 100644 index 1f57b4969c..0000000000 --- a/erpnext/templates/emails/birthday_reminder.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    - {% for person in birthday_persons %} - {% if person.image %} - - - {% else %} - - {{ frappe.utils.get_abbr(person.name) }} - - {% endif %} - {% endfor %} -
    -
    - {{ reminder_text }} -

    {{ message }}

    -
    -
    diff --git a/erpnext/templates/emails/daily_work_summary.html b/erpnext/templates/emails/daily_work_summary.html deleted file mode 100644 index 1764e8f703..0000000000 --- a/erpnext/templates/emails/daily_work_summary.html +++ /dev/null @@ -1,55 +0,0 @@ - - -

    {{ title }}

    - -
    -{% for reply in replies %} - - - - - - - - - - -
    - {% if reply.image %} - - {% else %} -
    - {{ reply.sender_name[0] }} -
    - {% endif %} -
    -
    - {{ reply.sender_name }} -
    -
    - - - - - - - - -
    -
    - {{ reply.content }} -
    -
    - - -
    -{% endfor %} -{% if did_not_reply %} - - -
    -

    {{ did_not_reply_title }}: {{ did_not_reply }}

    -
    - -
    -{% endif %} diff --git a/erpnext/templates/emails/daily_work_summary.txt b/erpnext/templates/emails/daily_work_summary.txt deleted file mode 100644 index 2fb4380d8f..0000000000 --- a/erpnext/templates/emails/daily_work_summary.txt +++ /dev/null @@ -1,11 +0,0 @@ -{{ title }} - -{% for reply in replies %} -{{ reply.sender_name }}: -{{ reply.content }} - - -{% endfor %} -{% if did_not_reply %} -{{ did_not_reply_title }}: {{ did_not_reply }} -{% endif %} \ No newline at end of file diff --git a/erpnext/templates/emails/holiday_reminder.html b/erpnext/templates/emails/holiday_reminder.html deleted file mode 100644 index bbef6be672..0000000000 --- a/erpnext/templates/emails/holiday_reminder.html +++ /dev/null @@ -1,16 +0,0 @@ -
    - {{ reminder_text }} -

    {{ message }}

    -
    - -{% if advance_holiday_reminder %} - {% if holidays | len > 0 %} -
      - {% for holiday in holidays %} -
    1. {{ frappe.format(holiday.holiday_date, 'Date') }} - {{ holiday.description }}
    2. - {% endfor %} -
    - {% else %} -

    You have no upcoming holidays this {{ frequency }}.

    - {% endif %} -{% endif %} diff --git a/erpnext/templates/emails/request_for_quotation.html b/erpnext/templates/emails/request_for_quotation.html index 3283987fab..5b073e604f 100644 --- a/erpnext/templates/emails/request_for_quotation.html +++ b/erpnext/templates/emails/request_for_quotation.html @@ -1,24 +1,29 @@

    {{_("Request for Quotation")}}

    {{ supplier_salutation if supplier_salutation else ''}} {{ supplier_name }},

    {{ message }}

    -

    {{_("The Request for Quotation can be accessed by clicking on the following button")}}:

    -

    - -


    - -

    {{_("Regards")}},
    -{{ user_fullname }}


    - +
    + + {{ _("Submit your Quotation") }} + +
    +
    {% if update_password_link %} - +

    {{_("Please click on the following button to set your new password")}}:

    -

    - -

    - + + {{_("Set Password") }} + +
    +
    {% endif %} +

    + {{_("Regards")}},
    + {{ user_fullname }} +

    diff --git a/erpnext/templates/emails/training_event.html b/erpnext/templates/emails/training_event.html deleted file mode 100644 index 8a2414a3c9..0000000000 --- a/erpnext/templates/emails/training_event.html +++ /dev/null @@ -1,21 +0,0 @@ -

    {{_("Training Event")}}

    -

    {{ message }}

    - -

    {{_("Details")}}

    -{{_("Event Name")}}: {{ name }} -
    {{_("Event Location")}}: {{ location }} -
    {{_("Start Time")}}: {{ start_time }} -
    {{_("End Time")}}: {{ end_time }} -
    {{_("Attendance")}}: {{ attendance }} - -

    {{_("Update Response")}}

    -{% if not self_study %} -

    {{_("Please update your status for this training event")}}:

    -
    -
    -{% else %} -

    {{_("Please confirm once you have completed your training")}}:

    -
    -{% endif %} -

    {{_("Thank you")}},
    -{{ user_fullname }}

    diff --git a/erpnext/templates/generators/job_opening.html b/erpnext/templates/generators/job_opening.html deleted file mode 100644 index 135fb3643d..0000000000 --- a/erpnext/templates/generators/job_opening.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends "templates/web.html" %} - -{% block breadcrumbs %} - {% include "templates/includes/breadcrumbs.html" %} -{% endblock %} - -{% block header %} -

    {{ job_title }}

    -{% endblock %} - -{% block page_content %} - -{%- if description -%} -
    {{ description }}
    -{% endif %} - -{%- if publish_salary_range -%} -
    {{_("Salary range per month")}}: {{ frappe.format_value(frappe.utils.flt(lower_range), currency=currency) }} - {{ frappe.format_value(frappe.utils.flt(upper_range), currency=currency) }}
    -{% endif %} - -

    - {%- if job_application_route -%} - - {{ _("Apply Now") }} - {% else %} - - {{ _("Apply Now") }} - {% endif %} -

    - -{% endblock %} diff --git a/erpnext/templates/includes/salary_slip_log.html b/erpnext/templates/includes/salary_slip_log.html deleted file mode 100644 index 22c62ceecc..0000000000 --- a/erpnext/templates/includes/salary_slip_log.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - {% for key in keys %} - - {% endfor %} - - - - {% for ss_dict in ss_list %} - - {% for key, value in ss_dict.items()|sort %} - - {% endfor %} - - {% endfor %} - -
    {{title}}
    {{ key }}
    {{value}}
    diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py index 3ed056f55e..0768cc3fa6 100644 --- a/erpnext/templates/pages/product_search.py +++ b/erpnext/templates/pages/product_search.py @@ -56,7 +56,10 @@ def get_product_data(search=None, start=0, limit=12): search = "%" + cstr(search) + "%" # order by - query += """ ORDER BY ranking desc, modified desc limit %s, %s""" % (cint(start), cint(limit)) + query += """ ORDER BY ranking desc, modified desc limit %s offset %s""" % ( + cint(limit), + cint(start), + ) return frappe.db.sql(query, {"search": search}, as_dict=1) # nosemgrep diff --git a/erpnext/templates/pages/projects.html b/erpnext/templates/pages/projects.html index 76eaf75cf3..6d366c5ffe 100644 --- a/erpnext/templates/pages/projects.html +++ b/erpnext/templates/pages/projects.html @@ -5,7 +5,7 @@ {% endblock %} {% block head_include %} - + {% endblock %} {% block header %} diff --git a/erpnext/templates/pages/regional/india/update-gstin.html b/erpnext/templates/pages/regional/india/update-gstin.html deleted file mode 100644 index d738fb4993..0000000000 --- a/erpnext/templates/pages/regional/india/update-gstin.html +++ /dev/null @@ -1,45 +0,0 @@ -{% extends "templates/web.html" %} - -{% block title %}Update GSTIN{% endblock %} - -{% block header %}

    Update GSTIN

    {% endblock %} - -{% block page_content %} -

    {{ party_name }}

    -{% if not_found %} -

    - Company Not Found -

    -

    - If this problem persists, please contact the company. -

    - -{% elif invalid_gstin %} -

    - Invalid GSTIN -

    -

    - Edit Again -

    -{% elif updated %} -

    - GSTIN Updated -

    -

    - Edit Again -

    -{% else %} -

    Please update your GSTIN for us to issue correct tax invoice

    -
    - - {% for address in party.get_onload('addr_list') %} -
    - {{ address.display }} -

    -
    - {% endfor %} -

    -
    -{% endif %} -{% endblock %} diff --git a/erpnext/templates/pages/regional/india/update_gstin.py b/erpnext/templates/pages/regional/india/update_gstin.py deleted file mode 100644 index 6939fe41a8..0000000000 --- a/erpnext/templates/pages/regional/india/update_gstin.py +++ /dev/null @@ -1,42 +0,0 @@ -import frappe - - -def get_context(context): - context.no_cache = 1 - party = frappe.form_dict.party - context.party_name = party - - try: - update_gstin(context) - except frappe.ValidationError: - context.invalid_gstin = 1 - - party_type = "Customer" - party_name = frappe.db.get_value("Customer", party) - - if not party_name: - party_type = "Supplier" - party_name = frappe.db.get_value("Supplier", party) - - if not party_name: - context.not_found = 1 - return - - context.party = frappe.get_doc(party_type, party_name) - context.party.onload() - - -def update_gstin(context): - dirty = False - for key, value in frappe.form_dict.items(): - if key != "party": - address_name = frappe.get_value("Address", key) - if address_name: - address = frappe.get_doc("Address", address_name) - address.gstin = value.upper() - address.save(ignore_permissions=True) - dirty = True - - if dirty: - frappe.db.commit() - context.updated = True diff --git a/erpnext/templates/pages/search_help.py b/erpnext/templates/pages/search_help.py index a6877ce9ab..d158167042 100644 --- a/erpnext/templates/pages/search_help.py +++ b/erpnext/templates/pages/search_help.py @@ -1,9 +1,9 @@ import frappe import requests from frappe import _ +from frappe.core.utils import html2text from frappe.utils import sanitize_html from frappe.utils.global_search import search -from html2text import html2text from jinja2 import utils diff --git a/erpnext/templates/utils.py b/erpnext/templates/utils.py index 4295188dc0..48b44802a8 100644 --- a/erpnext/templates/utils.py +++ b/erpnext/templates/utils.py @@ -34,7 +34,6 @@ def send_message(subject="Website Query", message="", sender="", status="Open"): status="Open", title=subject, contact_email=sender, - to_discuss=message, ) ) diff --git a/erpnext/tests/test_init.py b/erpnext/tests/test_init.py index 6fbfbf4689..18ce93ab83 100644 --- a/erpnext/tests/test_init.py +++ b/erpnext/tests/test_init.py @@ -40,3 +40,13 @@ class TestInit(unittest.TestCase): enc_name == expected_names[i], "{enc} is not same as {exp}".format(enc=enc_name, exp=expected_names[i]), ) + + def test_translation_files(self): + from frappe.tests.test_translate import verify_translation_files + + verify_translation_files("erpnext") + + def test_patches(self): + from frappe.tests.test_patches import check_patch_files + + check_patch_files("erpnext") diff --git a/erpnext/tests/test_regional.py b/erpnext/tests/test_regional.py index abeecee4e7..2c16defc20 100644 --- a/erpnext/tests/test_regional.py +++ b/erpnext/tests/test_regional.py @@ -12,9 +12,6 @@ def test_method(): class TestInit(unittest.TestCase): def test_regional_overrides(self): - frappe.flags.country = "India" - self.assertEqual(test_method(), "overridden") - frappe.flags.country = "Maldives" self.assertEqual(test_method(), "original") diff --git a/erpnext/tests/test_search.py b/erpnext/tests/test_search.py deleted file mode 100644 index ffe9a5ae54..0000000000 --- a/erpnext/tests/test_search.py +++ /dev/null @@ -1,18 +0,0 @@ -import unittest - -import frappe -from frappe.contacts.address_and_contact import filter_dynamic_link_doctypes - - -class TestSearch(unittest.TestCase): - # Search for the word "cond", part of the word "conduire" (Lead) in french. - def test_contact_search_in_foreign_language(self): - try: - frappe.local.lang = "fr" - output = filter_dynamic_link_doctypes( - "DocType", "cond", "name", 0, 20, {"fieldtype": "HTML", "fieldname": "contact_html"} - ) - result = [["found" for x in y if x == "Lead"] for y in output] - self.assertTrue(["found"] in result) - finally: - frappe.local.lang = "en" diff --git a/erpnext/tests/test_subcontracting.py b/erpnext/tests/test_subcontracting.py deleted file mode 100644 index bf12181c52..0000000000 --- a/erpnext/tests/test_subcontracting.py +++ /dev/null @@ -1,1065 +0,0 @@ -import copy -import unittest -from collections import defaultdict - -import frappe -from frappe.utils import cint - -from erpnext.buying.doctype.purchase_order.purchase_order import ( - get_materials_from_supplier, - make_purchase_invoice, - make_purchase_receipt, - make_rm_stock_entry, -) -from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order -from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom -from erpnext.stock.doctype.item.test_item import make_item -from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos -from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - -class TestSubcontracting(unittest.TestCase): - def setUp(self): - make_subcontract_items() - make_raw_materials() - make_bom_for_subcontracted_items() - - def test_po_with_bom(self): - """ - - Set backflush based on BOM - - Create subcontracted PO for the item Subcontracted Item SA1 and add same item two times. - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Create purchase receipt against the PO and check serial nos and batch no. - """ - - set_backflush_based_on("BOM") - item_code = "Subcontracted Item SA1" - items = [ - {"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 5, "rate": 100}, - {"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 6, "rate": 100}, - ] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 5}, - {"item_code": "Subcontracted SRM Item 2", "qty": 5}, - {"item_code": "Subcontracted SRM Item 3", "qty": 5}, - {"item_code": "Subcontracted SRM Item 1", "qty": 6}, - {"item_code": "Subcontracted SRM Item 2", "qty": 6}, - {"item_code": "Subcontracted SRM Item 3", "qty": 6}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name if d.get("qty") == 5 else po.items[1].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - transferred_detais = itemwise_details.get(key) - - for field in ["qty", "serial_no", "batch_no"]: - if value.get(field): - transfer, consumed = (transferred_detais.get(field), value.get(field)) - if field == "serial_no": - transfer, consumed = (sorted(transfer), sorted(consumed)) - - self.assertEqual(transfer, consumed) - - def test_po_with_material_transfer(self): - """ - - Set backflush based on Material Transfer - - Create subcontracted PO for the item Subcontracted Item SA1 and Subcontracted Item SA5. - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Transfer extra item Subcontracted SRM Item 4 for the subcontract item Subcontracted Item SA5. - - Create partial purchase receipt against the PO and check serial nos and batch no. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - items = [ - { - "warehouse": "_Test Warehouse - _TC", - "item_code": "Subcontracted Item SA1", - "qty": 5, - "rate": 100, - }, - { - "warehouse": "_Test Warehouse - _TC", - "item_code": "Subcontracted Item SA5", - "qty": 6, - "rate": 100, - }, - ] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, - {"item_code": "Subcontracted SRM Item 2", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, - {"item_code": "Subcontracted SRM Item 3", "qty": 5, "main_item_code": "Subcontracted Item SA1"}, - {"item_code": "Subcontracted SRM Item 5", "qty": 6, "main_item_code": "Subcontracted Item SA5"}, - {"item_code": "Subcontracted SRM Item 4", "qty": 6, "main_item_code": "Subcontracted Item SA5"}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name if d.get("qty") == 5 else po.items[1].name - - make_stock_transfer_entry( - po_no=po.name, rm_items=rm_items, itemwise_details=copy.deepcopy(itemwise_details) - ) - - pr1 = make_purchase_receipt(po.name) - pr1.remove(pr1.items[1]) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - transferred_detais = itemwise_details.get(key) - - for field in ["qty", "serial_no", "batch_no"]: - if value.get(field): - self.assertEqual(value.get(field), transferred_detais.get(field)) - - pr2 = make_purchase_receipt(po.name) - pr2.submit() - - for key, value in get_supplied_items(pr2).items(): - transferred_detais = itemwise_details.get(key) - - for field in ["qty", "serial_no", "batch_no"]: - if value.get(field): - self.assertEqual(value.get(field), transferred_detais.get(field)) - - def test_subcontract_with_same_components_different_fg(self): - """ - - Set backflush based on Material Transfer - - Create subcontracted PO for the item Subcontracted Item SA2 and Subcontracted Item SA3. - - Transfer the components from Stores to Supplier warehouse with serial nos. - - Transfer extra qty of components for the item Subcontracted Item SA2. - - Create partial purchase receipt against the PO and check serial nos and batch no. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - items = [ - { - "warehouse": "_Test Warehouse - _TC", - "item_code": "Subcontracted Item SA2", - "qty": 5, - "rate": 100, - }, - { - "warehouse": "_Test Warehouse - _TC", - "item_code": "Subcontracted Item SA3", - "qty": 6, - "rate": 100, - }, - ] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 2", "qty": 6, "main_item_code": "Subcontracted Item SA2"}, - {"item_code": "Subcontracted SRM Item 2", "qty": 6, "main_item_code": "Subcontracted Item SA3"}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name if d.get("qty") == 5 else po.items[1].name - - make_stock_transfer_entry( - po_no=po.name, rm_items=rm_items, itemwise_details=copy.deepcopy(itemwise_details) - ) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 3 - pr1.remove(pr1.items[1]) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - transferred_detais = itemwise_details.get(key) - self.assertEqual(value.qty, 4) - self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[0:4])) - - pr2 = make_purchase_receipt(po.name) - pr2.items[0].qty = 2 - pr2.remove(pr2.items[1]) - pr2.submit() - - for key, value in get_supplied_items(pr2).items(): - transferred_detais = itemwise_details.get(key) - - self.assertEqual(value.qty, 2) - self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[4:6])) - - pr3 = make_purchase_receipt(po.name) - pr3.submit() - for key, value in get_supplied_items(pr3).items(): - transferred_detais = itemwise_details.get(key) - - self.assertEqual(value.qty, 6) - self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[6:12])) - - def test_return_non_consumed_materials(self): - """ - - Set backflush based on Material Transfer - - Create subcontracted PO for the item Subcontracted Item SA2. - - Transfer the components from Stores to Supplier warehouse with serial nos. - - Transfer extra qty of component for the subcontracted item Subcontracted Item SA2. - - Create purchase receipt for full qty against the PO and change the qty of raw material. - - After that return the non consumed material back to the store from supplier's warehouse. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - items = [ - { - "warehouse": "_Test Warehouse - _TC", - "item_code": "Subcontracted Item SA2", - "qty": 5, - "rate": 100, - } - ] - rm_items = [ - {"item_code": "Subcontracted SRM Item 2", "qty": 6, "main_item_code": "Subcontracted Item SA2"} - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, rm_items=rm_items, itemwise_details=copy.deepcopy(itemwise_details) - ) - - pr1 = make_purchase_receipt(po.name) - pr1.save() - pr1.supplied_items[0].consumed_qty = 5 - pr1.supplied_items[0].serial_no = "\n".join( - sorted(itemwise_details.get("Subcontracted SRM Item 2").get("serial_no")[0:5]) - ) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - transferred_detais = itemwise_details.get(key) - self.assertEqual(value.qty, 5) - self.assertEqual(sorted(value.serial_no), sorted(transferred_detais.get("serial_no")[0:5])) - - po.load_from_db() - self.assertEqual(po.supplied_items[0].consumed_qty, 5) - doc = get_materials_from_supplier(po.name, [d.name for d in po.supplied_items]) - self.assertEqual(doc.items[0].qty, 1) - self.assertEqual(doc.items[0].s_warehouse, "_Test Warehouse 1 - _TC") - self.assertEqual(doc.items[0].t_warehouse, "_Test Warehouse - _TC") - self.assertEqual( - get_serial_nos(doc.items[0].serial_no), - itemwise_details.get(doc.items[0].item_code)["serial_no"][5:6], - ) - - def test_item_with_batch_based_on_bom(self): - """ - - Set backflush based on BOM - - Create subcontracted PO for the item Subcontracted Item SA4 (has batch no). - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Transfer the components in multiple batches. - - Create the 3 purchase receipt against the PO and split Subcontracted Items into two batches. - - Keep the qty as 2 for Subcontracted Item in the purchase receipt. - """ - - set_backflush_based_on("BOM") - item_code = "Subcontracted Item SA4" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 10}, - {"item_code": "Subcontracted SRM Item 2", "qty": 10}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 1}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 2) - - def test_item_with_batch_based_on_material_transfer(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA4 (has batch no). - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Transfer the components in multiple batches with extra 2 qty for the batched item. - - Create the 3 purchase receipt against the PO and split Subcontracted Items into two batches. - - Keep the qty as 2 for Subcontracted Item in the purchase receipt. - - In the first purchase receipt the batched raw materials will be consumed 2 extra qty. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA4" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 10}, - {"item_code": "Subcontracted SRM Item 2", "qty": 10}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - qty = 4 if key != "Subcontracted SRM Item 3" else 6 - self.assertEqual(value.qty, qty) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 2 - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 2) - - def test_partial_transfer_serial_no_components_based_on_material_transfer(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA2. - - Transfer the partial components from Stores to Supplier warehouse with serial nos. - - Create partial purchase receipt against the PO and change the qty manually. - - Transfer the remaining components from Stores to Supplier warehouse with serial nos. - - Create purchase receipt for remaining qty against the PO and change the qty manually. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA2" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [{"item_code": "Subcontracted SRM Item 2", "qty": 5}] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 5 - pr1.save() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, 3) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no[0:3])) - - pr1.load_from_db() - pr1.supplied_items[0].consumed_qty = 5 - pr1.supplied_items[0].serial_no = "\n".join( - itemwise_details[pr1.supplied_items[0].rm_item_code]["serial_no"] - ) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) - - def test_incorrect_serial_no_components_based_on_material_transfer(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA2. - - Transfer the serialized componenets to the supplier. - - Create purchase receipt and change the serial no which is not transferred. - - System should throw the error and not allowed to save the purchase receipt. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA2" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [{"item_code": "Subcontracted SRM Item 2", "qty": 10}] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.save() - pr1.supplied_items[0].serial_no = "ABCD" - self.assertRaises(frappe.ValidationError, pr1.save) - pr1.delete() - - def test_partial_transfer_batch_based_on_material_transfer(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA6. - - Transfer the partial components from Stores to Supplier warehouse with batch. - - Create partial purchase receipt against the PO and change the qty manually. - - Transfer the remaining components from Stores to Supplier warehouse with batch. - - Create purchase receipt for remaining qty against the PO and change the qty manually. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA6" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [{"item_code": "Subcontracted SRM Item 3", "qty": 5}] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.items[0].qty = 5 - pr1.save() - - transferred_batch_no = "" - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, 3) - transferred_batch_no = details.batch_no - self.assertEqual(value.batch_no, details.batch_no) - - pr1.load_from_db() - pr1.supplied_items[0].consumed_qty = 5 - pr1.supplied_items[0].batch_no = list(transferred_batch_no.keys())[0] - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(value.batch_no, details.batch_no) - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_receipt(po.name) - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(value.batch_no, details.batch_no) - - def test_item_with_batch_based_on_material_transfer_for_purchase_invoice(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA4 (has batch no). - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Transfer the components in multiple batches with extra 2 qty for the batched item. - - Create the 3 purchase receipt against the PO and split Subcontracted Items into two batches. - - Keep the qty as 2 for Subcontracted Item in the purchase receipt. - - In the first purchase receipt the batched raw materials will be consumed 2 extra qty. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA4" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 10}, - {"item_code": "Subcontracted SRM Item 2", "qty": 10}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 2 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - qty = 4 if key != "Subcontracted SRM Item 3" else 6 - self.assertEqual(value.qty, qty) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.items[0].qty = 2 - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 2 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 2) - - def test_partial_transfer_serial_no_components_based_on_material_transfer_for_purchase_invoice( - self, - ): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA2. - - Transfer the partial components from Stores to Supplier warehouse with serial nos. - - Create partial purchase receipt against the PO and change the qty manually. - - Transfer the remaining components from Stores to Supplier warehouse with serial nos. - - Create purchase receipt for remaining qty against the PO and change the qty manually. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA2" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [{"item_code": "Subcontracted SRM Item 2", "qty": 5}] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 5 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.save() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, 3) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no[0:3])) - - pr1.load_from_db() - pr1.supplied_items[0].consumed_qty = 5 - pr1.supplied_items[0].serial_no = "\n".join( - itemwise_details[pr1.supplied_items[0].rm_item_code]["serial_no"] - ) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(sorted(value.serial_no), sorted(details.serial_no)) - - def test_partial_transfer_batch_based_on_material_transfer_for_purchase_invoice(self): - """ - - Set backflush based on Material Transferred for Subcontract - - Create subcontracted PO for the item Subcontracted Item SA6. - - Transfer the partial components from Stores to Supplier warehouse with batch. - - Create partial purchase receipt against the PO and change the qty manually. - - Transfer the remaining components from Stores to Supplier warehouse with batch. - - Create purchase receipt for remaining qty against the PO and change the qty manually. - """ - - set_backflush_based_on("Material Transferred for Subcontract") - item_code = "Subcontracted Item SA6" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [{"item_code": "Subcontracted SRM Item 3", "qty": 5}] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 5 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.save() - - transferred_batch_no = "" - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, 3) - transferred_batch_no = details.batch_no - self.assertEqual(value.batch_no, details.batch_no) - - pr1.load_from_db() - pr1.supplied_items[0].consumed_qty = 5 - pr1.supplied_items[0].batch_no = list(transferred_batch_no.keys())[0] - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(value.batch_no, details.batch_no) - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - details = itemwise_details.get(key) - self.assertEqual(value.qty, details.qty) - self.assertEqual(value.batch_no, details.batch_no) - - def test_item_with_batch_based_on_bom_for_purchase_invoice(self): - """ - - Set backflush based on BOM - - Create subcontracted PO for the item Subcontracted Item SA4 (has batch no). - - Transfer the components from Stores to Supplier warehouse with batch no and serial nos. - - Transfer the components in multiple batches. - - Create the 3 purchase receipt against the PO and split Subcontracted Items into two batches. - - Keep the qty as 2 for Subcontracted Item in the purchase receipt. - """ - - set_backflush_based_on("BOM") - item_code = "Subcontracted Item SA4" - items = [{"warehouse": "_Test Warehouse - _TC", "item_code": item_code, "qty": 10, "rate": 100}] - - rm_items = [ - {"item_code": "Subcontracted SRM Item 1", "qty": 10}, - {"item_code": "Subcontracted SRM Item 2", "qty": 10}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 3}, - {"item_code": "Subcontracted SRM Item 3", "qty": 1}, - ] - - itemwise_details = make_stock_in_entry(rm_items=rm_items) - po = create_purchase_order( - rm_items=items, is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC" - ) - - for d in rm_items: - d["po_detail"] = po.items[0].name - - make_stock_transfer_entry( - po_no=po.name, - main_item_code=item_code, - rm_items=rm_items, - itemwise_details=copy.deepcopy(itemwise_details), - ) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 2 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 2 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - add_second_row_in_pr(pr1) - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 4) - - pr1 = make_purchase_invoice(po.name) - pr1.update_stock = 1 - pr1.items[0].qty = 2 - pr1.items[0].expense_account = "Stock Adjustment - _TC" - pr1.save() - pr1.submit() - - for key, value in get_supplied_items(pr1).items(): - self.assertEqual(value.qty, 2) - - -def add_second_row_in_pr(pr): - item_dict = {} - for column in [ - "item_code", - "item_name", - "qty", - "uom", - "warehouse", - "stock_uom", - "purchase_order", - "purchase_order_item", - "conversion_factor", - "rate", - "expense_account", - "po_detail", - ]: - item_dict[column] = pr.items[0].get(column) - - pr.append("items", item_dict) - pr.set_missing_values() - - -def get_supplied_items(pr_doc): - supplied_items = {} - for row in pr_doc.get("supplied_items"): - if row.rm_item_code not in supplied_items: - supplied_items.setdefault( - row.rm_item_code, frappe._dict({"qty": 0, "serial_no": [], "batch_no": defaultdict(float)}) - ) - - details = supplied_items[row.rm_item_code] - update_item_details(row, details) - - return supplied_items - - -def make_stock_in_entry(**args): - args = frappe._dict(args) - - items = {} - for row in args.rm_items: - row = frappe._dict(row) - - doc = make_stock_entry( - target=row.warehouse or "_Test Warehouse - _TC", - item_code=row.item_code, - qty=row.qty or 1, - basic_rate=row.rate or 100, - ) - - if row.item_code not in items: - items.setdefault( - row.item_code, frappe._dict({"qty": 0, "serial_no": [], "batch_no": defaultdict(float)}) - ) - - child_row = doc.items[0] - details = items[child_row.item_code] - update_item_details(child_row, details) - - return items - - -def update_item_details(child_row, details): - details.qty += ( - child_row.get("qty") - if child_row.doctype == "Stock Entry Detail" - else child_row.get("consumed_qty") - ) - - if child_row.serial_no: - details.serial_no.extend(get_serial_nos(child_row.serial_no)) - - if child_row.batch_no: - details.batch_no[child_row.batch_no] += child_row.get("qty") or child_row.get("consumed_qty") - - -def make_stock_transfer_entry(**args): - args = frappe._dict(args) - - items = [] - for row in args.rm_items: - row = frappe._dict(row) - - item = { - "item_code": row.main_item_code or args.main_item_code, - "rm_item_code": row.item_code, - "qty": row.qty or 1, - "item_name": row.item_code, - "rate": row.rate or 100, - "stock_uom": row.stock_uom or "Nos", - "warehouse": row.warehuose or "_Test Warehouse - _TC", - } - - item_details = args.itemwise_details.get(row.item_code) - - if item_details and item_details.serial_no: - serial_nos = item_details.serial_no[0 : cint(row.qty)] - item["serial_no"] = "\n".join(serial_nos) - item_details.serial_no = list(set(item_details.serial_no) - set(serial_nos)) - - if item_details and item_details.batch_no: - for batch_no, batch_qty in item_details.batch_no.items(): - if batch_qty >= row.qty: - item["batch_no"] = batch_no - item_details.batch_no[batch_no] -= row.qty - break - - items.append(item) - - ste_dict = make_rm_stock_entry(args.po_no, items) - doc = frappe.get_doc(ste_dict) - doc.insert() - doc.submit() - - return doc - - -def make_subcontract_items(): - sub_contracted_items = { - "Subcontracted Item SA1": {}, - "Subcontracted Item SA2": {}, - "Subcontracted Item SA3": {}, - "Subcontracted Item SA4": { - "has_batch_no": 1, - "create_new_batch": 1, - "batch_number_series": "SBAT.####", - }, - "Subcontracted Item SA5": {}, - "Subcontracted Item SA6": {}, - } - - for item, properties in sub_contracted_items.items(): - if not frappe.db.exists("Item", item): - properties.update({"is_stock_item": 1, "is_sub_contracted_item": 1}) - make_item(item, properties) - - -def make_raw_materials(): - raw_materials = { - "Subcontracted SRM Item 1": {}, - "Subcontracted SRM Item 2": {"has_serial_no": 1, "serial_no_series": "SRI.####"}, - "Subcontracted SRM Item 3": { - "has_batch_no": 1, - "create_new_batch": 1, - "batch_number_series": "BAT.####", - }, - "Subcontracted SRM Item 4": {"has_serial_no": 1, "serial_no_series": "SRII.####"}, - "Subcontracted SRM Item 5": {"has_serial_no": 1, "serial_no_series": "SRII.####"}, - } - - for item, properties in raw_materials.items(): - if not frappe.db.exists("Item", item): - properties.update({"is_stock_item": 1}) - make_item(item, properties) - - -def make_bom_for_subcontracted_items(): - boms = { - "Subcontracted Item SA1": [ - "Subcontracted SRM Item 1", - "Subcontracted SRM Item 2", - "Subcontracted SRM Item 3", - ], - "Subcontracted Item SA2": ["Subcontracted SRM Item 2"], - "Subcontracted Item SA3": ["Subcontracted SRM Item 2"], - "Subcontracted Item SA4": [ - "Subcontracted SRM Item 1", - "Subcontracted SRM Item 2", - "Subcontracted SRM Item 3", - ], - "Subcontracted Item SA5": ["Subcontracted SRM Item 5"], - "Subcontracted Item SA6": ["Subcontracted SRM Item 3"], - } - - for item_code, raw_materials in boms.items(): - if not frappe.db.exists("BOM", {"item": item_code}): - make_bom(item=item_code, raw_materials=raw_materials, rate=100) - - -def set_backflush_based_on(based_on): - frappe.db.set_value( - "Buying Settings", None, "backflush_raw_materials_of_subcontract_based_on", based_on - ) diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv index 91a9da9f16..e62f61a4f5 100644 --- a/erpnext/translations/ar.csv +++ b/erpnext/translations/ar.csv @@ -4297,7 +4297,7 @@ Fetch Serial Numbers based on FIFO,إحضار الأرقام المسلسلة ب "To allow different rates, disable the {0} checkbox in {1}.",للسماح بمعدلات مختلفة ، قم بتعطيل مربع الاختيار {0} في {1}., Current Odometer Value should be greater than Last Odometer Value {0},يجب أن تكون قيمة عداد المسافات الحالية أكبر من قيمة آخر عداد المسافات {0}, No additional expenses has been added,لم يتم إضافة مصاريف إضافية, -Asset{} {assets_link} created for {},الأصل {} {asset_link} الذي تم إنشاؤه لـ {}, +Asset{} {assets_link} created for {},الأصل {} {assets_link} الذي تم إنشاؤه لـ {}, Row {}: Asset Naming Series is mandatory for the auto creation for item {},الصف {}: سلسلة تسمية الأصول إلزامية للإنشاء التلقائي للعنصر {}, Assets not created for {0}. You will have to create asset manually.,لم يتم إنشاء الأصول لـ {0}. سيكون عليك إنشاء الأصل يدويًا., {0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}.,{0} يحتوي {1} على إدخالات محاسبية بالعملة {2} للشركة {3}. الرجاء تحديد حساب مستحق أو دائن بالعملة {2}., diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv index d1c21469f8..01795af23e 100644 --- a/erpnext/translations/de.csv +++ b/erpnext/translations/de.csv @@ -783,7 +783,7 @@ Default Activity Cost exists for Activity Type - {0},Es gibt Standard-Aktivität Default BOM ({0}) must be active for this item or its template,Standardstückliste ({0}) muss für diesen Artikel oder dessen Vorlage aktiv sein, Default BOM for {0} not found,Standardstückliste für {0} nicht gefunden, Default BOM not found for Item {0} and Project {1},Standard-Stückliste nicht gefunden für Position {0} und Projekt {1}, -Default In-Transit Warehouse, Standardlager für Waren im Transit, +Default In-Transit Warehouse,Standard-Durchgangslager, Default Letter Head,Standardbriefkopf, Default Tax Template,Standardsteuervorlage, Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,"Die Standard-Maßeinheit für Artikel {0} kann nicht direkt geändert werden, weil Sie bereits einige Transaktionen mit einer anderen Maßeinheit durchgeführt haben. Sie müssen einen neuen Artikel erstellen, um eine andere Standard-Maßeinheit verwenden zukönnen.", @@ -898,6 +898,7 @@ ERPNext Settings,ERPNext-Einstellungen, Earliest,Frühestens, Earnest Money,Anzahlung, Earning,Einkommen, +Earnings & Deductions,Verdienste & Abzüge, Edit,Bearbeiten, Edit Publishing Details,Bearbeitungsdetails bearbeiten, "Edit in full page for more options like assets, serial nos, batches etc.","Bearbeiten Sie in Vollansicht für weitere Optionen wie Vermögenswerte, Seriennummern, Chargen usw.", @@ -1178,7 +1179,7 @@ Group by Party,Gruppieren nach Partei, Group by Voucher,Gruppieren nach Beleg, Group by Voucher (Consolidated),Gruppieren nach Beleg (konsolidiert), Group node warehouse is not allowed to select for transactions,Gruppenknoten Lager ist nicht für Transaktionen zu wählen erlaubt, -Group to Non-Group,Gruppe an konzernfremde, +Convert to Ledger,In Lagerbuch umwandeln,Warehouse Group your students in batches,Gruppieren Sie Ihre Schüler in den Reihen, Groups,Gruppen, Guardian1 Email ID,Guardian1 E-Mail-ID, @@ -1701,7 +1702,7 @@ No Permission,Keine Berechtigung, No Remarks,Keine Anmerkungen, No Result to submit,Kein Ergebnis zur Einreichung, No Salary Structure assigned for Employee {0} on given date {1},Keine Gehaltsstruktur für Mitarbeiter {0} am angegebenen Datum {1} zugewiesen, -No Staffing Plans found for this Designation,Für diese Bezeichnung wurden keine Stellenpläne gefunden, +No Staffing Plans found for this Designation,Für diese Position wurden keine Stellenpläne gefunden, No Student Groups created.,Keine Studentengruppen erstellt., No Students in,Keine Studenten in, No Tax Withholding data found for the current Fiscal Year.,Keine Steuerverweigerungsdaten für das aktuelle Geschäftsjahr gefunden., @@ -1735,7 +1736,6 @@ Non GST Inward Supplies,Nicht GST Inward Supplies, Non Profit,Gemeinnützig, Non Profit (beta),Non-Profit (Beta), Non-GST outward supplies,Nicht-GST-Lieferungen nach außen, -Non-Group to Group,Non-Group-Gruppe, None,Keiner, None of the items have any change in quantity or value.,Keiner der Artikel hat irgendeine Änderung bei Mengen oder Kosten., Nos,Stk, @@ -2027,7 +2027,7 @@ Please select BOM in BOM field for Item {0},Bitte aus dem Stücklistenfeld eine Please select Category first,Bitte zuerst Kategorie auswählen, Please select Charge Type first,Bitte zuerst Chargentyp auswählen, Please select Company,Bitte Unternehmen auswählen, -Please select Company and Designation,Bitte wählen Sie Unternehmen und Stelle, +Please select Company and Designation,Bitte wählen Sie Unternehmen und Position, Please select Company and Posting Date to getting entries,"Bitte wählen Sie Unternehmen und Buchungsdatum, um Einträge zu erhalten", Please select Company first,Bitte zuerst Unternehmen auswählen, Please select Completion Date for Completed Asset Maintenance Log,Bitte wählen Sie Fertigstellungsdatum für das abgeschlossene Wartungsprotokoll für den Vermögenswert, @@ -2772,7 +2772,7 @@ Split,Teilt, Split Batch,Split Batch, Split Issue,Split-Problem, Sports,Sport, -Staffing Plan {0} already exist for designation {1},Personalplan {0} existiert bereits für Bezeichnung {1}, +Staffing Plan {0} already exist for designation {1},Personalplan {0} existiert bereits für Position {1}, Standard,Standard, Standard Buying,Standard-Kauf, Standard Selling,Standard-Vertrieb, @@ -3710,7 +3710,7 @@ Delivered Quantity,Gelieferte Menge, Delivery Notes,Lieferscheine, Depreciated Amount,Abschreibungsbetrag, Description,Beschreibung, -Designation,Bezeichnung, +Designation,Position, Difference Value,Differenzwert, Dimension Filter,Dimensionsfilter, Disabled,Deaktiviert, @@ -3920,7 +3920,7 @@ Please enter Difference Account or set default Stock Adjustment Accoun Please enter GSTIN and state for the Company Address {0},Bitte geben Sie GSTIN ein und geben Sie die Firmenadresse {0} an., Please enter Item Code to get item taxes,"Bitte geben Sie den Artikelcode ein, um die Artikelsteuern zu erhalten", Please enter Warehouse and Date,Bitte geben Sie Lager und Datum ein, -Please enter the designation,Bitte geben Sie die Bezeichnung ein, +Please enter the designation,Bitte geben Sie die Position ein, Please login as a Marketplace User to edit this item.,"Bitte melden Sie sich als Marketplace-Benutzer an, um diesen Artikel zu bearbeiten.", Please login as a Marketplace User to report this item.,"Bitte melden Sie sich als Marketplace-Benutzer an, um diesen Artikel zu melden.", Please select Template Type to download template,"Bitte wählen Sie Vorlagentyp , um die Vorlage herunterzuladen", @@ -5063,7 +5063,7 @@ Accepted Qty,Akzeptierte Menge, Rejected Qty,Abgelehnt Menge, UOM Conversion Factor,Maßeinheit-Umrechnungsfaktor, Discount on Price List Rate (%),Rabatt auf die Preisliste (%), -Price List Rate (Company Currency),Preisliste (Unternehmenswährung), +Price List Rate (Company Currency),Preisliste (Unternehmenswährung), Rate ,Preis, Rate (Company Currency),Preis (Unternehmenswährung), Amount (Company Currency),Betrag (Unternehmenswährung), @@ -6004,7 +6004,7 @@ CN,CN, DE,DE, ES,ES, FR,FR, -IN,IM, +IN,Ein, JP,JP, IT,ES, MX,MX, @@ -6243,7 +6243,7 @@ Checking this will create Lab Test(s) specified in the Sales Invoice on submissi Create Sample Collection document for Lab Test,Erstellen Sie ein Probensammeldokument für den Labortest, Checking this will create a Sample Collection document every time you create a Lab Test,"Wenn Sie dies aktivieren, wird jedes Mal, wenn Sie einen Labortest erstellen, ein Probensammeldokument erstellt", Employee name and designation in print,Name und Bezeichnung des Mitarbeiters im Druck, -Check this if you want the Name and Designation of the Employee associated with the User who submits the document to be printed in the Lab Test Report.,"Aktivieren Sie diese Option, wenn Sie möchten, dass der Name und die Bezeichnung des Mitarbeiters, der dem Benutzer zugeordnet ist, der das Dokument einreicht, im Labortestbericht gedruckt werden.", +Check this if you want the Name and Designation of the Employee associated with the User who submits the document to be printed in the Lab Test Report.,"Aktivieren Sie diese Option, wenn Sie möchten, dass der Name und die Position des Mitarbeiters, der dem Benutzer zugeordnet ist, der das Dokument einreicht, im Labortestbericht gedruckt werden.", Do not print or email Lab Tests without Approval,Drucken oder senden Sie Labortests nicht ohne Genehmigung per E-Mail, Checking this will restrict printing and emailing of Lab Test documents unless they have the status as Approved.,"Wenn Sie dies aktivieren, wird das Drucken und E-Mailen von Labortestdokumenten eingeschränkt, sofern diese nicht den Status "Genehmigt" haben.", Custom Signature in Print,Kundenspezifische Unterschrift im Druck, @@ -6499,7 +6499,7 @@ Department Approver,Abteilungsgenehmiger, Approver,Genehmiger, Required Skills,Benötigte Fähigkeiten, Skills,Kompetenzen, -Designation Skill,Bezeichnung Fähigkeit, +Designation Skill,Positions Fähigkeit, Skill,Fertigkeit, Driver,Fahrer/-in, HR-DRI-.YYYY.-,HR-DRI-.YYYY.-, @@ -6517,20 +6517,20 @@ Driver licence class,Führerscheinklasse, HR-EMP-,HR-EMP-, Employment Type,Art der Beschäftigung, Emergency Contact,Notfallkontakt, -Emergency Contact Name,Notfall Kontaktname, -Emergency Phone,Notruf, +Emergency Contact Name,Name des Notfallkontakts, +Emergency Phone,Telefonnummer des Notfallkontakts, ERPNext User,ERPNext Benutzer, "System User (login) ID. If set, it will become default for all HR forms.","Systembenutzer-ID (Anmeldung). Wenn gesetzt, wird sie standardmäßig für alle HR-Formulare verwendet.", Create User Permission,Benutzerberechtigung Erstellen, This will restrict user access to other employee records,Dies schränkt den Benutzerzugriff auf andere Mitarbeiterdatensätze ein, Joining Details,Details des Beitritts, Offer Date,Angebotsdatum, -Confirmation Date,Datum bestätigen, +Confirmation Date,Bestätigungsdatum, Contract End Date,Vertragsende, -Notice (days),Meldung(s)(-Tage), +Notice (days),Kündigungsfrist (Tage), Date Of Retirement,Zeitpunkt der Pensionierung, Department and Grade,Abteilung und Klasse, -Reports to,Berichte an, +Reports to,Vorgesetzter, Attendance and Leave Details,Anwesenheits- und Urlaubsdetails, Leave Policy,Urlaubsrichtlinie, Attendance Device ID (Biometric/RF tag ID),Anwesenheitsgeräte-ID (biometrische / RF-Tag-ID), @@ -6553,8 +6553,8 @@ Company Email,E-Mail-Adresse des Unternehmens, Provide Email Address registered in company,Geben Sie E-Mail-Adresse in Unternehmen registriert, Current Address Is,Aktuelle Adresse ist, Current Address,Aktuelle Adresse, -Personal Bio,Persönliches Bio, -Bio / Cover Letter,Bio / Anschreiben, +Personal Bio,Lebenslauf, +Bio / Cover Letter,Lebenslauf / Anschreiben, Short biography for website and other publications.,Kurzbiographie für die Webseite und andere Publikationen., Passport Number,Passnummer, Date of Issue,Ausstellungsdatum, @@ -6798,7 +6798,7 @@ Select Employees,Mitarbeiter auswählen, Employment Type (optional),Anstellungsart (optional), Branch (optional),Zweigstelle (optional), Department (optional),Abteilung (optional), -Designation (optional),Bezeichnung (optional), +Designation (optional),Position (optional), Employee Grade (optional),Dienstgrad (optional), Employee (optional),Mitarbeiter (optional), Allocate Leaves,Blätter zuweisen, @@ -7653,7 +7653,7 @@ Campaign Schedules,Kampagnenpläne, Buyer of Goods and Services.,Käufer von Waren und Dienstleistungen., CUST-.YYYY.-,CUST-.YYYY.-, Default Company Bank Account,Standard-Bankkonto des Unternehmens, -From Lead,Von Lead, +From Lead,Aus Lead, Account Manager,Buchhalter, Allow Sales Invoice Creation Without Sales Order,Ermöglichen Sie die Erstellung von Kundenrechnungen ohne Auftrag, Allow Sales Invoice Creation Without Delivery Note,Ermöglichen Sie die Erstellung einer Ausgangsrechnung ohne Lieferschein, @@ -7769,7 +7769,7 @@ Authorized Value,Autorisierter Wert, Applicable To (Role),Anwenden auf (Rolle), Applicable To (Employee),Anwenden auf (Mitarbeiter), Applicable To (User),Anwenden auf (Benutzer), -Applicable To (Designation),Anwenden auf (Bezeichnung), +Applicable To (Designation),Anwenden auf (Position), Approving Role (above authorized value),Genehmigende Rolle (über dem autorisierten Wert), Approving User (above authorized value),Genehmigender Benutzer (über dem autorisierten Wert), Brand Defaults,Markenstandards, @@ -8946,7 +8946,7 @@ Requesting Practitioner,Praktizierender anfordern, Requesting Department,Abteilung anfordern, Employee (Lab Technician),Mitarbeiter (Labortechniker), Lab Technician Name,Name des Labortechnikers, -Lab Technician Designation,Bezeichnung des Labortechnikers, +Lab Technician Designation,Position des Labortechnikers, Compound Test Result,Zusammengesetztes Testergebnis, Organism Test Result,Organismustestergebnis, Sensitivity Test Result,Empfindlichkeitstestergebnis, @@ -9542,7 +9542,7 @@ Preview Email,Vorschau E-Mail, Please select a Supplier,Bitte wählen Sie einen Lieferanten aus, Supplier Lead Time (days),Vorlaufzeit des Lieferanten (Tage), "Home, Work, etc.","Zuhause, Arbeit usw.", -Exit Interview Held On,Beenden Sie das Interview, +Exit Interview Held On,Entlassungsgespräch am, Condition and formula,Zustand und Formel, Sets 'Target Warehouse' in each row of the Items table.,Legt 'Ziellager' in jeder Zeile der Elementtabelle fest., Sets 'Source Warehouse' in each row of the Items table.,Legt 'Source Warehouse' in jeder Zeile der Items-Tabelle fest., @@ -9852,3 +9852,24 @@ Row #{}: You must select {} serial numbers for item {}.,Zeile # {}: Sie müssen {} Available,{} Verfügbar, Report an Issue,Ein Problem melden, User Forum,Anwenderforum, +Get Customer Group Details,Einstellungen aus Kundengruppe übernehmen, +Is Rate Adjustment Entry (Debit Note),Ist Preisanpassung (Belastungsanzeige), +Fetch Timesheet,Zeiterfassung laden, +Company Tax ID,Eigene Steuernummer, +Quotation Number,Angebotsnummer, +Company Shipping Address,Eigene Lieferadresse, +Company Billing Address,Eigene Rechnungsadresse, +Billing Address Details,Vorschau Rechnungsadresse, +Supplier Contact,Lieferantenkontakt, +Order Status,Bestellstatus, +Invoice Portion (%),Rechnungsanteil (%), +Discount Settings,Rabatt-Einstellungen, +Payment Amount (Company Currency),Zahlungsbetrag (Unternehmenswährung), +Putaway Rule,Einlagerungsregel, +Apply Putaway Rule,Einlagerungsregel anwenden, +Default Discount Account,Standard-Rabattkonto, +Default Provisional Account,Standard Provisorisches Konto, +Leave Type Allocation,Zuordnung Abwesenheitsarten, +From Lead,Aus Lead, +From Opportunity,Aus Chance, +Publish in Website,Auf Webseite veröffentlichen, diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv index 8518156eb2..a290ec70eb 100644 --- a/erpnext/translations/fr.csv +++ b/erpnext/translations/fr.csv @@ -175,7 +175,7 @@ Airline,Compagnie aérienne, All Accounts,Tous les comptes, All Addresses.,Toutes les adresses., All Assessment Groups,Tous les Groupes d'Évaluation, -All BOMs,Toutes les LDM, +All BOMs,Toutes les nomenclatures, All Contacts.,Tous les contacts., All Customer Groups,Tous les Groupes Client, All Day,Toute la Journée, @@ -191,7 +191,7 @@ All Supplier scorecards.,Toutes les Fiches d'Évaluation Fournisseurs., All Territories,Tous les territoires, All Warehouses,Tous les entrepôts, All communications including and above this shall be moved into the new Issue,"Toutes les communications, celle-ci et celles au dessus de celle-ci incluses, doivent être transférées dans le nouveau ticket.", -All items have already been transferred for this Work Order.,Tous les articles ont déjà été transférés pour cet ordre de travail., +All items have already been transferred for this Work Order.,Tous les articles ont déjà été transférés pour cet ordre de fabrication., All other ITC,Tous les autres CTI, All the mandatory Task for employee creation hasn't been done yet.,Toutes les tâches obligatoires pour la création d'employés n'ont pas encore été effectuées., Allocate Payment Amount,Allouer le montant du paiement, @@ -330,16 +330,16 @@ Avg Daily Outgoing,Moy Quotidienne Sortante, Avg. Buying Price List Rate,Moyenne de la liste de prix d'achat, Avg. Selling Price List Rate,Prix moyen de la liste de prix de vente, Avg. Selling Rate,Moy. Taux de vente, -BOM,LDM (Liste de Matériaux), -BOM Browser,Explorateur LDM, -BOM No,N° LDM, -BOM Rate,Taux LDM, -BOM Stock Report,Rapport de Stock de LDM, -BOM and Manufacturing Quantity are required,LDM et quantité de production sont nécessaires, -BOM does not contain any stock item,LDM ne contient aucun article en stock, -BOM {0} does not belong to Item {1},LDM {0} n’appartient pas à l'article {1}, -BOM {0} must be active,LDM {0} doit être active, -BOM {0} must be submitted,LDM {0} doit être soumise, +BOM,Nomenclature, +BOM Browser,Explorateur Nomenclature, +BOM No,N° Nomenclature, +BOM Rate,Valeur nomenclature, +BOM Stock Report,Rapport de Stock des nomenclatures, +BOM and Manufacturing Quantity are required,Nomenclature et quantité de production sont nécessaires, +BOM does not contain any stock item,Nomenclature ne contient aucun article en stock, +BOM {0} does not belong to Item {1},Nomenclature {0} n’appartient pas à l'article {1}, +BOM {0} must be active,Nomenclature {0} doit être active, +BOM {0} must be submitted,Nomenclature {0} doit être soumise, Balance,Solde, Balance (Dr - Cr),Balance (Dr - Cr), Balance ({0}),Solde ({0}), @@ -386,8 +386,8 @@ Beginner,Débutant, Bill,Facture, Bill Date,Date de la Facture, Bill No,Numéro de facture, -Bill of Materials,Liste de Matériaux, -Bill of Materials (BOM),Liste de Matériaux (LDM), +Bill of Materials,Nomenclatures, +Bill of Materials (BOM),Nomenclature, Billable Hours,Heures facturables, Billed,Facturé, Billed Amount,Montant facturé, @@ -404,14 +404,14 @@ Birthday Reminder,Rappel d'anniversaire, Black,Noir, Blanket Orders from Costumers.,Commandes provisoires de clients., Block Invoice,Bloquer la facture, -Boms,Listes de Matériaux, +Boms,Nomenclatures, Bonus Payment Date cannot be a past date,La date de paiement du bonus ne peut pas être une date passée, Both Trial Period Start Date and Trial Period End Date must be set,La date de début de la période d'essai et la date de fin de la période d'essai doivent être définies, Both Warehouse must belong to same Company,Les deux Entrepôt doivent appartenir à la même Société, Branch,Branche, Broadcasting,Radio/Télévision, Brokerage,Courtage, -Browse BOM,Parcourir la LDM, +Browse BOM,Parcourir la nomenclature, Budget Against,Budget Pour, Budget List,Liste budgétaire, Budget Variance Report,Rapport d’Écarts de Budget, @@ -455,7 +455,7 @@ Canceled,Annulé, "Cannot Submit, Employees left to mark attendance","Ne peut pas être soumis, certains employés n'ont pas pas validé leurs feuilles de présence", Cannot be a fixed asset item as Stock Ledger is created.,Ne peut pas être un article immobilisé car un Journal de Stock a été créé., Cannot cancel because submitted Stock Entry {0} exists,Impossible d'annuler car l'Écriture de Stock soumise {0} existe, -Cannot cancel transaction for Completed Work Order.,Impossible d'annuler la transaction lorsque l'ordre de travail est terminé., +Cannot cancel transaction for Completed Work Order.,Impossible d'annuler la transaction lorsque l'ordre de fabrication est terminé., Cannot cancel {0} {1} because Serial No {2} does not belong to the warehouse {3},Impossible d'annuler {0} {1} car le numéro de série {2} n'appartient pas à l'entrepôt {3}, Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item,Impossible de modifier les attributs après des mouvements de stock. Faites un nouvel article et transférez la quantité en stock au nouvel article, Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Impossible de modifier les dates de début et de fin d'exercice une fois que l'exercice est enregistré., @@ -467,7 +467,7 @@ Cannot convert Cost Center to ledger as it has child nodes,Conversion impossible Cannot covert to Group because Account Type is selected.,Conversion impossible en Groupe car le Type de Compte est sélectionné., Cannot create Retention Bonus for left Employees,Impossible de créer une prime de fidélisation pour les employés ayant quitté l'entreprise, Cannot create a Delivery Trip from Draft documents.,Impossible de créer un voyage de livraison à partir de documents brouillons., -Cannot deactivate or cancel BOM as it is linked with other BOMs,Désactivation ou annulation de la LDM impossible car elle est liée avec d'autres LDMs, +Cannot deactivate or cancel BOM as it is linked with other BOMs,Désactivation ou annulation de la nomenclature impossible car elle est liée avec d'autres nomenclatures, "Cannot declare as lost, because Quotation has been made.","Impossible de déclarer comme perdu, parce que le Devis a été fait.", Cannot deduct when category is for 'Valuation' or 'Valuation and Total',Déduction impossible lorsque la catégorie est pour 'Évaluation' ou 'Vaulation et Total', Cannot deduct when category is for 'Valuation' or 'Vaulation and Total',Vous ne pouvez pas déduire lorsqu'une catégorie est pour 'Évaluation' ou 'Évaluation et Total', @@ -722,7 +722,7 @@ Currency of the price list {0} must be {1} or {2},La devise de la liste de prix Currency should be same as Price List Currency: {0},La devise doit être la même que la devise de la liste de prix: {0}, Current,Actuel, Current Assets,Actifs Actuels, -Current BOM and New BOM can not be same,La LDM actuelle et la nouvelle LDM ne peuvent être pareilles, +Current BOM and New BOM can not be same,La nomenclature actuelle et la nouvelle nomenclature ne peuvent être pareilles, Current Job Openings,Offres d'Emploi Actuelles, Current Liabilities,Dettes Actuelles, Current Qty,Qté actuelle, @@ -780,9 +780,9 @@ Debtors ({0}),Débiteurs ({0}), Declare Lost,Déclarer perdu, Deduction,Déduction, Default Activity Cost exists for Activity Type - {0},Un Coût d’Activité par défault existe pour le Type d’Activité {0}, -Default BOM ({0}) must be active for this item or its template,LDM par défaut ({0}) doit être actif pour ce produit ou son modèle, -Default BOM for {0} not found,LDM par défaut {0} introuvable, -Default BOM not found for Item {0} and Project {1},La LDM par défaut n'a pas été trouvée pour l'Article {0} et le Projet {1}, +Default BOM ({0}) must be active for this item or its template,Nomenclature par défaut ({0}) doit être actif pour ce produit ou son modèle, +Default BOM for {0} not found,Nomenclature par défaut {0} introuvable, +Default BOM not found for Item {0} and Project {1},La nomenclature par défaut n'a pas été trouvée pour l'Article {0} et le Projet {1}, Default Letter Head,En-Tête de Courrier par Défaut, Default Tax Template,Modèle de Taxes par Défaut, Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,L’Unité de Mesure par Défaut pour l’Article {0} ne peut pas être modifiée directement parce que vous avez déjà fait une (des) transaction (s) avec une autre unité de mesure. Vous devez créer un nouvel article pour utiliser une UDM par défaut différente., @@ -1023,7 +1023,7 @@ Fees,Honoraires, Female,Féminin, Fetch Data,Récupérer des données, Fetch Subscription Updates,Vérifier les mises à jour des abonnements, -Fetch exploded BOM (including sub-assemblies),Récupérer la LDM éclatée (y compris les sous-ensembles), +Fetch exploded BOM (including sub-assemblies),Récupérer la nomenclature éclatée (y compris les sous-ensembles), Fetching records......,Récupération des enregistrements ......, Field Name,Nom du Champ, Fieldname,Nom du Champ, @@ -1135,7 +1135,7 @@ Get Employees,Obtenir des employés, Get Invocies,Obtenir des invocies, Get Invoices,Obtenir des factures, Get Invoices based on Filters,Obtenir les factures en fonction des filtres, -Get Items from BOM,Obtenir les Articles depuis LDM, +Get Items from BOM,Obtenir les Articles depuis nomenclature, Get Items from Healthcare Services,Obtenir des articles des services de santé, Get Items from Prescriptions,Obtenir des articles des prescriptions, Get Items from Product Bundle,Obtenir les Articles du Produit Groupé, @@ -1352,11 +1352,11 @@ Item Description,Description de l'Article, Item Group,Groupe d'Article, Item Group Tree,Arborescence de Groupe d'Article, Item Group not mentioned in item master for item {0},Le Groupe d'Articles n'est pas mentionné dans la fiche de l'article pour l'article {0}, -Item Name,Nom de l'article, +Item Name,Nom de l'article, Item Price added for {0} in Price List {1},Prix de l'Article ajouté pour {0} dans la Liste de Prix {1}, -"Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, UOM, Qty and Dates.","Le prix de l'article apparaît plusieurs fois en fonction de la liste de prix, du fournisseur / client, de la devise, de l'article, de l'unité de mesure, de la quantité et des dates.", +"Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, UOM, Qty and Dates.","Le prix de l'article apparaît plusieurs fois en fonction de la liste de prix, du fournisseur / client, de la devise, de l'article, de l'unité de mesure, de la quantité et des dates.", Item Price updated for {0} in Price List {1},Prix de l'Article mis à jour pour {0} dans la Liste des Prix {1}, -Item Row {0}: {1} {2} does not exist in above '{1}' table,Ligne d'objet {0}: {1} {2} n'existe pas dans la table '{1}' ci-dessus, +Item Row {0}: {1} {2} does not exist in above '{1}' table,Ligne d'objet {0}: {1} {2} n'existe pas dans la table '{1}' ci-dessus, Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,La Ligne de Taxe d'Article {0} doit indiquer un compte de type Taxes ou Produit ou Charge ou Facturable, Item Template,Modèle d'article, Item Variant Settings,Paramètres de Variante d'Article, @@ -1425,8 +1425,8 @@ Last Order Date,Date de la dernière commande, Last Purchase Price,Dernier prix d'achat, Last Purchase Rate,Dernier Prix d'Achat, Latest,Dernier, -Latest price updated in all BOMs,Prix les plus récents mis à jour dans toutes les LDMs, -Lead,Conduire, +Latest price updated in all BOMs,Prix les plus récents mis à jour dans toutes les nomenclatures, +Lead,Prospect, Lead Count,Nombre de Prospects, Lead Owner,Responsable du Prospect, Lead Owner cannot be same as the Lead,Le Responsable du Prospect ne peut pas être identique au Prospect, @@ -1655,7 +1655,7 @@ Net Total,Total net, Net pay cannot be negative,Salaire Net ne peut pas être négatif, New Account Name,Nouveau Nom de Compte, New Address,Nouvelle adresse, -New BOM,Nouvelle LDM, +New BOM,Nouvelle nomenclature, New Batch ID (Optional),Nouveau Numéro de Lot (Optionnel), New Batch Qty,Nouvelle Qté de Lot, New Company,Nouvelle Société, @@ -1689,7 +1689,7 @@ No Item with Serial No {0},Aucun Article avec le N° de Série {0}, No Items available for transfer,Aucun article disponible pour le transfert, No Items selected for transfer,Aucun article sélectionné pour le transfert, No Items to pack,Pas d’Articles à emballer, -No Items with Bill of Materials to Manufacture,Aucun Article avec une Liste de Matériel à Produire, +No Items with Bill of Materials to Manufacture,Aucun Article avec une nomenclature à Produire, No Items with Bill of Materials.,Aucun article avec nomenclature., No Permission,Aucune autorisation, No Remarks,Aucune Remarque, @@ -1699,7 +1699,7 @@ No Staffing Plans found for this Designation,Aucun plan de dotation trouvé pour No Student Groups created.,Aucun Groupe d'Étudiants créé., No Students in,Aucun étudiant dans, No Tax Withholding data found for the current Fiscal Year.,Aucune donnée de retenue d'impôt trouvée pour l'exercice en cours., -No Work Orders created,Aucun ordre de travail créé, +No Work Orders created,Aucun ordre de fabrication créé, No accounting entries for the following warehouses,Pas d’écritures comptables pour les entrepôts suivants, No active or default Salary Structure found for employee {0} for the given dates,Aucune Structure de Salaire active ou par défaut trouvée pour employé {0} pour les dates données, No contacts with email IDs found.,Aucun contact avec des identifiants de messagerie trouvés., @@ -1777,7 +1777,7 @@ Online Auctions,Enchères en ligne, Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,Seules les Demandes de Congés avec le statut 'Appouvée' ou 'Rejetée' peuvent être soumises, "Only the Student Applicant with the status ""Approved"" will be selected in the table below.",Seul les candidatures étudiantes avec le statut «Approuvé» seront sélectionnées dans le tableau ci-dessous., Only users with {0} role can register on Marketplace,Seuls les utilisateurs ayant le rôle {0} peuvent s'inscrire sur Marketplace, -Open BOM {0},Ouvrir LDM {0}, +Open BOM {0},Ouvrir nomenclature {0}, Open Item {0},Ouvrir l'Article {0}, Open Notifications,Notifications ouvertes, Open Orders,Commandes ouvertes, @@ -1945,7 +1945,7 @@ Place Order,Passer la commande, Plan Name,Nom du Plan, Plan for maintenance visits.,Plan pour les visites de maintenance., Planned Qty,Qté Planifiée, -"Planned Qty: Quantity, for which, Work Order has been raised, but is pending to be manufactured.",Qté prévue: quantité pour laquelle l'ordre de travail a été créé mais sa fabrication est en attente., +"Planned Qty: Quantity, for which, Work Order has been raised, but is pending to be manufactured.",Qté prévue: quantité pour laquelle l'ordre de fabrication a été créé mais sa fabrication est en attente., Planning,Planification, Plants and Machineries,Usines et Machines, Please Set Supplier Group in Buying Settings.,Veuillez définir un groupe de fournisseurs par défaut dans les paramètres d'achat., @@ -2015,9 +2015,9 @@ Please save the patient first,Veuillez d'abord enregistrer le patient, Please save the report again to rebuild or update,Veuillez enregistrer le rapport à nouveau pour reconstruire ou mettre à jour, "Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row","Veuillez sélectionner le Montant Alloué, le Type de Facture et le Numéro de Facture dans au moins une ligne", Please select Apply Discount On,Veuillez sélectionnez Appliquer Remise Sur, -Please select BOM against item {0},Veuillez sélectionner la liste de matériaux (LDM) pour l'article {0}, -Please select BOM for Item in Row {0},Veuillez sélectionnez une LDM pour l’Article à la Ligne {0}, -Please select BOM in BOM field for Item {0},Veuillez sélectionner une LDM dans le champ LDM pour l’Article {0}, +Please select BOM against item {0},Veuillez sélectionner la nomenclature pour l'article {0}, +Please select BOM for Item in Row {0},Veuillez sélectionnez une nomenclature pour l’Article à la Ligne {0}, +Please select BOM in BOM field for Item {0},Veuillez sélectionner une nomenclature dans le champ nomenclature pour l’Article {0}, Please select Category first,Veuillez d’abord sélectionner une Catégorie, Please select Charge Type first,Veuillez d’abord sélectionner le Type de Facturation, Please select Company,Veuillez sélectionner une Société, @@ -2044,7 +2044,7 @@ Please select Qty against item {0},Veuillez sélectionner Qté par rapport à l' Please select Sample Retention Warehouse in Stock Settings first,Veuillez d'abord définir un entrepôt de stockage des échantillons dans les paramètres de stock, Please select Start Date and End Date for Item {0},Veuillez sélectionner la Date de Début et Date de Fin pour l'Article {0}, Please select Student Admission which is mandatory for the paid student applicant,Veuillez sélectionner obligatoirement une Admission d'Étudiant pour la candidature étudiante payée, -Please select a BOM,Veuillez sélectionner une LDM, +Please select a BOM,Veuillez sélectionner une nomenclature, Please select a Batch for Item {0}. Unable to find a single batch that fulfills this requirement,Veuillez sélectionner un Lot pour l'Article {0}. Impossible de trouver un seul lot satisfaisant à cette exigence, Please select a Company,Veuillez sélectionner une Société, Please select a batch,Veuillez sélectionner un lot, @@ -2273,8 +2273,8 @@ Quantity to Manufacture must be greater than 0.,La quantité à produire doit ê Quantity to Produce,Quantité à produire, Quantity to Produce can not be less than Zero,La quantité à produire ne peut être inférieure à zéro, Query Options,Options de Requête, -Queued for replacing the BOM. It may take a few minutes.,En file d'attente pour remplacer la LDM. Cela peut prendre quelques minutes., -Queued for updating latest price in all Bill of Materials. It may take a few minutes.,Mise à jour des prix les plus récents dans toutes les Listes de Matériaux en file d'attente. Cela peut prendre quelques minutes., +Queued for replacing the BOM. It may take a few minutes.,En file d'attente pour remplacer la nomenclature. Cela peut prendre quelques minutes., +Queued for updating latest price in all Bill of Materials. It may take a few minutes.,Mise à jour des prix les plus récents dans toutes les nomenclatures en file d'attente. Cela peut prendre quelques minutes., Quick Journal Entry,Écriture Rapide dans le Journal, Quot Count,Compte de Devis, Quot/Lead %,Devis / Prospects %, @@ -2354,7 +2354,7 @@ Reorder Level,Niveau de réapprovisionnement, Reorder Qty,Qté de Réapprovisionnement, Repeat Customer Revenue,Revenus de Clients Récurrents, Repeat Customers,Clients Récurrents, -Replace BOM and update latest price in all BOMs,Remplacer la LDM et actualiser les prix les plus récents dans toutes les LDMs, +Replace BOM and update latest price in all BOMs,Remplacer la nomenclature et actualiser les prix les plus récents dans toutes les nomenclatures, Replied,Répondu, Replies,réponses, Report,Rapport, @@ -2466,11 +2466,11 @@ Row {0}: Advance against Supplier must be debit,Ligne {0} : L’Avance du Fourni Row {0}: Allocated amount {1} must be less than or equals to Payment Entry amount {2},Ligne {0} : Le montant alloué {1} doit être inférieur ou égal au montant du Paiement {2}, Row {0}: Allocated amount {1} must be less than or equals to invoice outstanding amount {2},Ligne {0} : Le montant alloué {1} doit être inférieur ou égal au montant restant sur la Facture {2}, Row {0}: An Reorder entry already exists for this warehouse {1},Ligne {0} : Une écriture de Réapprovisionnement existe déjà pour cet entrepôt {1}, -Row {0}: Bill of Materials not found for the Item {1},Ligne {0} : Liste de Matériaux non trouvée pour l’Article {1}, +Row {0}: Bill of Materials not found for the Item {1},Ligne {0} : Nomenclature non trouvée pour l’Article {1}, Row {0}: Conversion Factor is mandatory,Ligne {0} : Le Facteur de Conversion est obligatoire, Row {0}: Cost center is required for an item {1},Ligne {0}: le Centre de Coûts est requis pour un article {1}, Row {0}: Credit entry can not be linked with a {1},Ligne {0} : L’Écriture de crédit ne peut pas être liée à un {1}, -Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Ligne {0} : La devise de la LDM #{1} doit être égale à la devise sélectionnée {2}, +Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Ligne {0} : La devise de la nomenclature #{1} doit être égale à la devise sélectionnée {2}, Row {0}: Debit entry can not be linked with a {1},Ligne {0} : L’Écriture de Débit ne peut pas être lié à un {1}, Row {0}: Depreciation Start Date is required,Ligne {0}: la date de début de l'amortissement est obligatoire, Row {0}: Enter location for the asset item {1},Ligne {0}: entrez la localisation de l'actif {1}, @@ -2490,7 +2490,7 @@ Row {0}: Please set the Mode of Payment in Payment Schedule,Ligne {0}: Veuillez Row {0}: Please set the correct code on Mode of Payment {1},Ligne {0}: définissez le code correct sur le mode de paiement {1}., Row {0}: Qty is mandatory,Ligne {0} : Qté obligatoire, Row {0}: Quality Inspection rejected for item {1},Ligne {0}: le contrôle qualité a été rejeté pour l'élément {1}., -Row {0}: UOM Conversion Factor is mandatory,Ligne {0} : Facteur de Conversion LDM est obligatoire, +Row {0}: UOM Conversion Factor is mandatory,Ligne {0} : Facteur de Conversion nomenclature est obligatoire, Row {0}: select the workstation against the operation {1},Ligne {0}: sélectionnez le poste de travail en fonction de l'opération {1}, Row {0}: {1} Serial numbers required for Item {2}. You have provided {3}.,Ligne {0}: {1} Numéros de série requis pour l'article {2}. Vous en avez fourni {3}., Row {0}: {1} must be greater than 0,Ligne {0}: {1} doit être supérieure à 0, @@ -2587,8 +2587,8 @@ See past quotations,Voir les citations passées, Select,Sélectionner, Select Alternate Item,Sélectionnez un autre élément, Select Attribute Values,Sélectionner les valeurs d'attribut, -Select BOM,Sélectionner LDM, -Select BOM and Qty for Production,Sélectionner la LDM et la Qté pour la Production, +Select BOM,Sélectionner une nomenclature, +Select BOM and Qty for Production,Sélectionner la nomenclature et la Qté pour la Production, "Select BOM, Qty and For Warehouse","Sélectionner une nomenclature, une quantité et un entrepôt", Select Batch,Sélectionnez le Lot, Select Batch Numbers,Sélectionnez les Numéros de Lot, @@ -2760,7 +2760,7 @@ Source and target warehouse cannot be same for row {0},L'entrepôt source et des Source and target warehouse must be different,Entrepôt source et destination doivent être différents, Source of Funds (Liabilities),Source des Fonds (Passif), Source warehouse is mandatory for row {0},Entrepôt source est obligatoire à la ligne {0}, -Specified BOM {0} does not exist for Item {1},La LDM {0} spécifiée n'existe pas pour l'Article {1}, +Specified BOM {0} does not exist for Item {1},La nomenclature {0} spécifiée n'existe pas pour l'Article {1}, Split,Fractionner, Split Batch,Lot Fractionné, Split Issue,Diviser le ticket, @@ -2789,7 +2789,7 @@ Stock Analytics,Analyse du Stock, Stock Assets,Actifs du Stock, Stock Available,Stock disponible, Stock Balance,Solde du Stock, -Stock Entries already created for Work Order ,Ecritures de stock déjà créées pour l'ordre de travail, +Stock Entries already created for Work Order ,Ecritures de stock déjà créées pour l'ordre de fabrication, Stock Entry,Écriture de Stock, Stock Entry {0} created,Écriture de Stock {0} créée, Stock Entry {0} is not submitted,Écriture de Stock {0} n'est pas soumise, @@ -2815,7 +2815,7 @@ Stock cannot exist for Item {0} since has variants,Stock ne peut pas exister pou Stock transactions before {0} are frozen,Les transactions du stock avant {0} sont gelées, Stop,Arrêter, Stopped,Arrêté, -"Stopped Work Order cannot be cancelled, Unstop it first to cancel","Un ordre de travail arrêté ne peut être annulé, Re-démarrez le pour pouvoir l'annuler", +"Stopped Work Order cannot be cancelled, Unstop it first to cancel","Un ordre de fabrication arrêté ne peut être annulé, Re-démarrez le pour pouvoir l'annuler", Stores,Magasins, Structures have been assigned successfully,Les structures ont été assignées avec succès, Student,Étudiant, @@ -2850,7 +2850,7 @@ Subject,Sujet, Submit,Valider, Submit Proof,Valider une preuve, Submit Salary Slip,Valider la Fiche de Paie, -Submit this Work Order for further processing.,Valider cet ordre de travail pour continuer son traitement., +Submit this Work Order for further processing.,Valider cet ordre de fabrication pour continuer son traitement., Submit this to create the Employee record,Valider pour créer la fiche employé, Submitting Salary Slips...,Validation des bulletins de salaire ..., Subscription,Abonnement, @@ -2888,11 +2888,11 @@ Supplies made to UIN holders,Fournitures faites aux titulaires de l'UIN, Supplies made to Unregistered Persons,Fournitures faites à des personnes non inscrites, Suppliies made to Composition Taxable Persons,Suppleies à des personnes assujetties à la composition, Supply Type,Type d'approvisionnement, -Support,Soutien, -Support Analytics,Analyse du Support, -Support Settings,Paramètres du Support, -Support Tickets,Billets de Support, -Support queries from customers.,Demande de support des clients, +Support,"Assistance/Support", +Support Analytics,Analyse de l'assistance, +Support Settings,Paramètres du module Assistance, +Support Tickets,Ticket d'assistance, +Support queries from customers.,Demande d'assistance des clients, Susceptible,Sensible, Sync has been temporarily disabled because maximum retries have been exceeded,La synchronisation a été temporairement désactivée car les tentatives maximales ont été dépassées, Syntax error in condition: {0},Erreur de syntaxe dans la condition: {0}, @@ -2965,7 +2965,7 @@ The name of the institute for which you are setting up this system.,Le nom de l' The name of your company for which you are setting up this system.,Le nom de l'entreprise pour laquelle vous configurez ce système., The number of shares and the share numbers are inconsistent,Le nombre d'actions dans les transactions est incohérent avec le nombre total d'actions, The payment gateway account in plan {0} is different from the payment gateway account in this payment request,Le compte passerelle de paiement dans le plan {0} est différent du compte passerelle de paiement dans cette requête de paiement., -The selected BOMs are not for the same item,Les LDMs sélectionnées ne sont pas pour le même article, +The selected BOMs are not for the same item,Les nomenclatures sélectionnées ne sont pas pour le même article, The selected item cannot have Batch,L’article sélectionné ne peut pas avoir de Lot, The seller and the buyer cannot be the same,Le vendeur et l'acheteur ne peuvent pas être les mêmes, The shareholder does not belong to this company,L'actionnaire n'appartient pas à cette société, @@ -3132,7 +3132,7 @@ Transaction,Transaction, Transaction Date,Date de la transaction, Transaction Type,Type de transaction, Transaction currency must be same as Payment Gateway currency,La devise de la Transaction doit être la même que la devise de la Passerelle de Paiement, -Transaction not allowed against stopped Work Order {0},La transaction n'est pas autorisée pour l'ordre de travail arrêté {0}, +Transaction not allowed against stopped Work Order {0},La transaction n'est pas autorisée pour l'ordre de fabrication arrêté {0}, Transaction reference no {0} dated {1},Référence de la transaction n° {0} datée du {1}, Transactions,Transactions, Transactions can only be deleted by the creator of the Company,Les Transactions ne peuvent être supprimées que par le créateur de la Société, @@ -3150,7 +3150,7 @@ Transporter Name,Nom du transporteur, Travel,Déplacement, Travel Expenses,Frais de Déplacement, Tree Type,Type d'Arbre, -Tree of Bill of Materials,Arbre des Listes de Matériaux, +Tree of Bill of Materials,Arbre des Nomenclatures, Tree of Item Groups.,Arbre de Groupes d’Articles ., Tree of Procedures,Arbre de procédures, Tree of Quality Procedures.,Arbre de la qualité des procédures., @@ -3304,13 +3304,13 @@ White,blanc, Wire Transfer,Virement, WooCommerce Products,Produits WooCommerce, Work In Progress,Travaux en cours, -Work Order,Ordre de travail, -Work Order already created for all items with BOM,Ordre de travail déjà créé pour tous les articles avec une LDM, -Work Order cannot be raised against a Item Template,Un ordre de travail ne peut pas être créé pour un modèle d'article, -Work Order has been {0},L'ordre de travail a été {0}, -Work Order not created,Ordre de travail non créé, -Work Order {0} must be cancelled before cancelling this Sales Order,L'ordre de travail {0} doit être annulé avant d'annuler cette commande client, -Work Order {0} must be submitted,L'ordre de travail {0} doit être soumis, +Work Order,Ordre de fabrication, +Work Order already created for all items with BOM,Ordre de fabrication déjà créé pour tous les articles avec une nomenclature, +Work Order cannot be raised against a Item Template,Un ordre de fabrication ne peut pas être créé pour un modèle d'article, +Work Order has been {0},L'ordre de fabrication a été {0}, +Work Order not created,Ordre de fabrication non créé, +Work Order {0} must be cancelled before cancelling this Sales Order,L'ordre de fabrication {0} doit être annulé avant d'annuler cette commande client, +Work Order {0} must be submitted,L'ordre de fabrication {0} doit être soumis, Work Orders Created: {0},Ordres de travail créés: {0}, Work Summary for {0},Résumé de travail de {0}, Work-in-Progress Warehouse is required before Submit,L'entrepôt des Travaux en Cours est nécessaire avant de Valider, @@ -3326,7 +3326,7 @@ You are not authorized to add or update entries before {0},Vous n'êtes pas auto You are not authorized to approve leaves on Block Dates,Vous n'êtes pas autorisé à approuver les congés sur les Dates Bloquées, You are not authorized to set Frozen value,Vous n'êtes pas autorisé à définir des valeurs gelées, You are not present all day(s) between compensatory leave request days,Vous n'êtes pas présent(e) tous les jours vos demandes de congé compensatoire, -You can not change rate if BOM mentioned agianst any item,Vous ne pouvez pas modifier le taux si la LDM est mentionnée pour un article, +You can not change rate if BOM mentioned agianst any item,Vous ne pouvez pas modifier le taux si la nomenclature est mentionnée pour un article, You can not enter current voucher in 'Against Journal Entry' column,Vous ne pouvez pas entrer le bon actuel dans la colonne 'Pour l'Écriture de Journal', You can only have Plans with the same billing cycle in a Subscription,Vous ne pouvez avoir que des plans ayant le même cycle de facturation dans le même abonnement, You can only redeem max {0} points in this order.,Vous pouvez uniquement échanger un maximum de {0} points dans cet commande., @@ -3371,7 +3371,7 @@ old_parent,grand_parent, on,sur, {0} '{1}' is disabled,{0} '{1}' est désactivé(e), {0} '{1}' not in Fiscal Year {2},{0} '{1}' n'est pas dans l’Exercice {2}, -{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3},{0} ({1}) ne peut pas être supérieur à la quantité planifiée ({2}) dans l'ordre de travail {3}, +{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3},{0} ({1}) ne peut pas être supérieur à la quantité planifiée ({2}) dans l'ordre de fabrication {3}, {0} - {1} is inactive student,{0} - {1} est un étudiant inactif, {0} - {1} is not enrolled in the Batch {2},{0} - {1} n'est pas inscrit dans le Lot {2}, {0} - {1} is not enrolled in the Course {2},{0} - {1} n'est pas inscrit dans le Cours {2}, @@ -3661,7 +3661,7 @@ Chart,Graphique, Choose a corresponding payment,Choisissez un paiement correspondant, Click on the link below to verify your email and confirm the appointment,Cliquez sur le lien ci-dessous pour vérifier votre email et confirmer le rendez-vous, Close,Fermer, -Communication,la communication, +Communication,Communication, Compact Item Print,Impression de l'Article Compacté, Company,Société, Company of asset {0} and purchase document {1} doesn't matches.,La société de l'actif {0} et le document d'achat {1} ne correspondent pas., @@ -3763,7 +3763,7 @@ Following fields are mandatory to create address:,Les champs suivants sont oblig For Month,Pour mois, "For item {0} at row {1}, count of serial numbers does not match with the picked quantity","Pour l'élément {0} à la ligne {1}, le nombre de numéros de série ne correspond pas à la quantité sélectionnée.", For operation {0}: Quantity ({1}) can not be greter than pending quantity({2}),Pour l'opération {0}: la quantité ({1}) ne peut pas être supérieure à la quantité en attente ({2}), -For quantity {0} should not be greater than work order quantity {1},Pour la quantité {0} ne doit pas être supérieure à la quantité d'ordre de travail {1}, +For quantity {0} should not be greater than work order quantity {1},Pour la quantité {0} ne doit pas être supérieure à la quantité d'ordre de fabrication {1}, Free item not set in the pricing rule {0},Article gratuit non défini dans la règle de tarification {0}, From Date and To Date are Mandatory,La date de début et la date de fin sont obligatoires, From employee is required while receiving Asset {0} to a target location,De l'employé est requis lors de la réception de l'actif {0} vers un emplacement cible, @@ -3884,7 +3884,7 @@ Open,Ouvert, Open Contact,Contact ouvert, Open Lead,Ouvrir le fil, Opening and Closing,Ouverture et fermeture, -Operating Cost as per Work Order / BOM,Coût d'exploitation selon l'ordre de travail / nomenclature, +Operating Cost as per Work Order / BOM,Coût d'exploitation selon l'ordre de fabrication / nomenclature, Order Amount,Montant de la commande, Page {0} of {1},Page {0} sur {1}, Paid amount cannot be less than {0},Le montant payé ne peut pas être inférieur à {0}, @@ -3969,7 +3969,7 @@ Quantity to Manufacture can not be zero for the operation {0},La quantité à fa Quarterly,Trimestriel, Queued,File d'Attente, Quick Entry,Écriture Rapide, -Quiz {0} does not exist,Le questionnaire {0} n'existe pas, +Quiz {0} does not exist,Le questionnaire {0} n'existe pas, Quotation Amount,Montant du devis, Rate or Discount is required for the price discount.,Le taux ou la remise est requis pour la remise de prix., Reason,Raison, @@ -4004,7 +4004,7 @@ Row #{0}: Cannot delete item {1} which has work order assigned to it.,Ligne # {0 Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order.,Ligne # {0}: impossible de supprimer l'article {1} affecté à la commande d'achat du client., Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor,Ligne # {0}: Impossible de sélectionner l'entrepôt fournisseur lors de la fourniture de matières premières au sous-traitant, Row #{0}: Cost Center {1} does not belong to company {2},Ligne # {0}: le centre de coûts {1} n'appartient pas à l'entreprise {2}, -Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Ligne n ° {0}: l'opération {1} n'est pas terminée pour {2} quantité de produits finis dans l'ordre de travail {3}. Veuillez mettre à jour le statut de l'opération via la carte de travail {4}., +Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Ligne n ° {0}: l'opération {1} n'est pas terminée pour {2} quantité de produits finis dans l'ordre de fabrication {3}. Veuillez mettre à jour le statut de l'opération via la carte de travail {4}., Row #{0}: Payment document is required to complete the transaction,Ligne n ° {0}: Un document de paiement est requis pour effectuer la transaction., Row #{0}: Serial No {1} does not belong to Batch {2},Ligne # {0}: le numéro de série {1} n'appartient pas au lot {2}, Row #{0}: Service End Date cannot be before Invoice Posting Date,Ligne # {0}: la date de fin du service ne peut pas être antérieure à la date de validation de la facture, @@ -4071,7 +4071,7 @@ Stock Value ({0}) and Account Balance ({1}) are out of sync for account {2} and Stores - {0},Magasins - {0}, Student with email {0} does not exist,Étudiant avec le courrier électronique {0} n'existe pas, Submit Review,Poster un commentaire, -Submitted,Soumis, +Submitted,Valider, Supplier Addresses And Contacts,Adresses et contacts des fournisseurs, Synchronize this account,Synchroniser ce compte, Tag,Étiquette, @@ -4400,7 +4400,7 @@ Motor Assessment Scale,Échelle d'évaluation motrice, The following {0} were created: {1},Les {0} suivants ont été créés: {1}, Work Orders,Bons de travail, The {0} {1} created sucessfully,Le {0} {1} a été créé avec succès, -Work Order cannot be created for following reason:
    {0},L'ordre de travail ne peut pas être créé pour la raison suivante:
    {0}, +Work Order cannot be created for following reason:
    {0},L'ordre de fabrication ne peut pas être créé pour la raison suivante:
    {0}, Add items in the Item Locations table,Ajouter des articles dans le tableau Emplacements des articles, Update Current Stock,Mettre à jour le stock actuel, "{0} Retain Sample is based on batch, please check Has Batch No to retain sample of item","{0} Conserver l'échantillon est basé sur le lot, veuillez cocher A un numéro de lot pour conserver l'échantillon d'article", @@ -5502,7 +5502,7 @@ Blanket Order,Commande avec limites, Blanket Order Rate,Prix unitaire de commande avec limites, Returned Qty,Qté Retournée, Purchase Order Item Supplied,Article Fourni du Bon de Commande, -BOM Detail No,N° de Détail LDM, +BOM Detail No,N° de Détail de la nomenclature, Stock Uom,UDM du Stock, Raw Material Item Code,Code d’Article de Matière Première, Supplied Qty,Qté Fournie, @@ -5600,7 +5600,6 @@ Call Log,Journal d'appel, Received By,Reçu par, Caller Information,Informations sur l'appelant, Contact Name,Nom du Contact, -Lead ,Conduire, Lead Name,Nom du Prospect, Ringing,Sonnerie, Missed,Manqué, @@ -7183,7 +7182,7 @@ Blanket Order Item,Article de commande avec limites, Ordered Quantity,Quantité Commandée, Item to be manufactured or repacked,Article à produire ou à réemballer, Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Quantité d'article obtenue après production / reconditionnement des quantités données de matières premières, -Set rate of sub-assembly item based on BOM,Définir le prix des articles de sous-assemblage en fonction de la LDM, +Set rate of sub-assembly item based on BOM,Définir le prix des articles de sous-assemblage en fonction de la nomenclature, Allow Alternative Item,Autoriser un article alternatif, Item UOM,UDM de l'Article, Conversion Rate,Taux de Conversion, @@ -7214,34 +7213,34 @@ Website Specifications,Spécifications du Site Web, Show Items,Afficher les Articles, Show Operations,Afficher Opérations, Website Description,Description du Site Web, -BOM Explosion Item,Article Eclaté LDM, +BOM Explosion Item,Article Eclaté en nomenclature, Qty Consumed Per Unit,Qté Consommée Par Unité, Include Item In Manufacturing,Inclure l'article dans la fabrication, -BOM Item,Article LDM, +BOM Item,Article de la nomenclature, Item operation,Opération de l'article, Rate & Amount,Taux et Montant, Basic Rate (Company Currency),Taux de Base (Devise de la Société ), Scrap %,% de Rebut, Original Item,Article original, -BOM Operation,Opération LDM, +BOM Operation,Opération de la nomenclature (gamme), Operation Time ,Durée de l'opération, In minutes,En minutes, Batch Size,Taille du lot, Base Hour Rate(Company Currency),Taux Horaire de Base (Devise de la Société), Operating Cost(Company Currency),Coût d'Exploitation (Devise Société), -BOM Scrap Item,Article Mis au Rebut LDM, +BOM Scrap Item,Article Mis au Rebut dans la nomenclature, Basic Amount (Company Currency),Montant de Base (Devise de la Société), -BOM Update Tool,Outil de mise à jour de LDM, -"Replace a particular BOM in all other BOMs where it is used. It will replace the old BOM link, update cost and regenerate ""BOM Explosion Item"" table as per new BOM.\nIt also updates latest price in all the BOMs.","Remplacez une LDM particulière dans toutes les LDM où elles est utilisée. Cela remplacera le lien vers l'ancienne LDM, mettra à jour les coûts et régénérera le tableau ""Article Explosé de LDM"" selon la nouvelle LDM. Cela mettra également à jour les prix les plus récents dans toutes les LDMs.", -Replace BOM,Remplacer la LDM, -Current BOM,LDM Actuelle, -The BOM which will be replaced,La LDM qui sera remplacée, -The new BOM after replacement,La nouvelle LDM après remplacement, +BOM Update Tool,Outil de mise à jour des Nomenclatures, +"Replace a particular BOM in all other BOMs where it is used. It will replace the old BOM link, update cost and regenerate ""BOM Explosion Item"" table as per new BOM.\nIt also updates latest price in all the BOMs.","Remplacez une nomenclature particulière dans toutes les nomenclatures où elles est utilisée. Cela remplacera le lien vers l'ancienne nomenclature, mettra à jour les coûts et régénérera le tableau ""Article Explosé de nomenclature"" selon la nouvelle nomenclature. Cela mettra également à jour les prix les plus récents dans toutes les nomenclatures.", +Replace BOM,Remplacer la nomenclature, +Current BOM,nomenclature Actuelle, +The BOM which will be replaced,La nomenclature qui sera remplacée, +The new BOM after replacement,La nouvelle nomenclature après remplacement, Replace,Remplacer, -Update latest price in all BOMs,Mettre à jour le prix le plus récent dans toutes les LDMs, -BOM Website Item,Article de LDM du Site Internet, -BOM Website Operation,Opération de LDM du Site Internet, -Operation Time,Heure de l'Opération, +Update latest price in all BOMs,Mettre à jour le prix le plus récent dans toutes les nomenclatures, +BOM Website Item,Article de nomenclature du Site Internet, +BOM Website Operation,Opération de nomenclature du Site Internet, +Operation Time,Durée de l'Opération PO-JOB.#####,PO-JOB. #####, Timing Detail,Détail du timing, Time Logs,Time Logs, @@ -7272,7 +7271,7 @@ Default Scrap Warehouse,Entrepôt de rebut par défaut, Overproduction Percentage For Sales Order,Pourcentage de surproduction pour les commandes client, Overproduction Percentage For Work Order,Pourcentage de surproduction pour les ordres de travail, Other Settings,Autres Paramètres, -Update BOM Cost Automatically,Mettre à jour automatiquement le coût de la LDM, +Update BOM Cost Automatically,Mettre à jour automatiquement le coût de la nomenclature, Material Request Plan Item,Article du plan de demande de matériel, Material Request Type,Type de Demande de Matériel, Material Issue,Sortie de Matériel, @@ -7286,7 +7285,7 @@ Get Sales Orders,Obtenir les Commandes Client, Material Request Detail,Détail de la demande de matériel, Get Material Request,Obtenir la Demande de Matériel, Material Requests,Les Demandes de Matériel, -Get Items For Work Order,Obtenir des articles pour l'ordre de travail, +Get Items For Work Order,Obtenir des articles pour l'ordre de fabrication, Material Request Planning,Planification des demandes de matériel, Include Non Stock Items,Inclure les articles non stockés, Include Subcontracted Items,Inclure les articles sous-traités, @@ -7298,7 +7297,7 @@ Total Planned Qty,Quantité totale prévue, Total Produced Qty,Quantité totale produite, Material Requested,Matériel demandé, Production Plan Item,Article du Plan de Production, -Make Work Order for Sub Assembly Items,Ordre de travail pour les sous-assemblages, +Make Work Order for Sub Assembly Items,Ordre de fabrication pour les sous-assemblages, "If enabled, system will create the work order for the exploded items against which BOM is available.","Si activé, le système créera la commande de travail pour les articles éclatés par rapport à laquelle la nomenclature est disponible.", Planned Start Date,Date de Début Prévue, Quantity and Description,Quantité et description, @@ -7312,7 +7311,7 @@ MFG-WO-.YYYY.-,MFG-WO-.YYYY.-, Item To Manufacture,Article à produire, Material Transferred for Manufacturing,Matériel Transféré pour la Production, Manufactured Qty,Qté Produite, -Use Multi-Level BOM,Utiliser LDM à Plusieurs Niveaux, +Use Multi-Level BOM,Utiliser les nomenclatures à plusieurs niveaux, Plan material for sub-assemblies,Plan de matériaux pour les sous-ensembles, Skip Material Transfer to WIP Warehouse,Ignorer le transfert de matériel vers l'entrepôt WIP, Check if material transfer entry is not required,Vérifiez si une un transfert de matériel n'est pas requis, @@ -7335,10 +7334,10 @@ Actual Operating Cost,Coût d'Exploitation Réel, Additional Operating Cost,Coût d'Exploitation Supplémentaires, Total Operating Cost,Coût d'Exploitation Total, Manufacture against Material Request,Production liée à une Demande de Matériel, -Work Order Item,Article d'ordre de travail, +Work Order Item,Article d'ordre de fabrication, Available Qty at Source Warehouse,Qté Disponible à l'Entrepôt Source, Available Qty at WIP Warehouse,Qté disponible à l'Entrepôt de Travaux en Cours, -Work Order Operation,Opération d'ordre de travail, +Work Order Operation,Opération d'ordre de fabrication, Operation Description,Description de l'Opération, Operation completed for how many finished goods?,Opération terminée pour combien de produits finis ?, Work in Progress,Travaux En Cours, @@ -7685,7 +7684,7 @@ Collected Amount,Montant collecté, Expected Amount,Montant prévu, POS Closing Voucher Invoices,Factures du bon de clôture du PDV, Quantity of Items,Quantité d'articles, -"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item.\n\nNote: BOM = Bill of Materials","Regroupement d' **Articles** dans un autre **Article**. Ceci est utile si vous regroupez certains **Articles** dans un lot et que vous maintenez l'inventaire des **Articles** du lot et non de l'**Article** composé. L'**Article** composé aura ""Article En Stock"" à ""Non"" et ""Article À Vendre"" à ""Oui"". Exemple : Si vous vendez des Ordinateurs Portables et Sacs à Dos séparément et qu'il y a un prix spécial si le client achète les deux, alors l'Ordinateur Portable + le Sac à Dos sera un nouveau Produit Groupé. Remarque: LDM = Liste\nDes Matériaux", +"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item.\n\nNote: BOM = Bill of Materials","Regroupement d' **Articles** dans un autre **Article**. Ceci est utile si vous regroupez certains **Articles** dans un lot et que vous maintenez l'inventaire des **Articles** du lot et non de l'**Article** composé. L'**Article** composé aura ""Article En Stock"" à ""Non"" et ""Article À Vendre"" à ""Oui"". Exemple : Si vous vendez des Ordinateurs Portables et Sacs à Dos séparément et qu'il y a un prix spécial si le client achète les deux, alors l'Ordinateur Portable + le Sac à Dos sera un nouveau Produit Groupé.", Parent Item,Article Parent, List items that form the package.,Liste des articles qui composent le paquet., SAL-QTN-.YYYY.-,SAL-QTN-. AAAA.-, @@ -7720,7 +7719,7 @@ Supplier delivers to Customer,Fournisseur livre au Client, Delivery Warehouse,Entrepôt de Livraison, Planned Quantity,Quantité Planifiée, For Production,Pour la Production, -Work Order Qty,Qté de l'ordre de travail, +Work Order Qty,Qté de l'ordre de fabrication, Produced Quantity,Quantité Produite, Used for Production Plan,Utilisé pour Plan de Production, Sales Partner Type,Type de partenaire de vente, @@ -8089,7 +8088,7 @@ Customer Items,Articles du clients, Inspection Criteria,Critères d'Inspection, Inspection Required before Purchase,Inspection Requise avant Achat, Inspection Required before Delivery,Inspection Requise avant Livraison, -Default BOM,LDM par Défaut, +Default BOM,Nomenclature par Défaut, Supply Raw Materials for Purchase,Fournir les Matières Premières pour l'Achat, If subcontracted to a vendor,Si sous-traité à un fournisseur, Customer Code,Code Client, @@ -8295,7 +8294,7 @@ Delivery Note No,Bon de Livraison N°, Sales Invoice No,N° de la Facture de Vente, Purchase Receipt No,N° du Reçu d'Achat, Inspection Required,Inspection obligatoire, -From BOM,De LDM, +From BOM,Depuis la nomenclature, For Quantity,Pour la Quantité, As per Stock UOM,Selon UDM du Stock, Including items for sub assemblies,Incluant les articles pour des sous-ensembles, @@ -8316,7 +8315,7 @@ Basic Rate (as per Stock UOM),Taux de base (comme l’UDM du Stock), Basic Amount,Montant de Base, Additional Cost,Frais Supplémentaire, Serial No / Batch,N° de Série / Lot, -BOM No. for a Finished Good Item,N° d’Article Produit Fini LDM, +BOM No. for a Finished Good Item,N° de nomenclature pour un d’Article (Produit Fini), Material Request used to make this Stock Entry,Demande de Matériel utilisée pour réaliser cette Écriture de Stock, Subcontracted Item,Article sous-traité, Against Stock Entry,Contre entrée de stock, @@ -8456,9 +8455,9 @@ Bank Remittance,Virement bancaire, Batch Item Expiry Status,Statut d'Expiration d'Article du Lot, Batch-Wise Balance History,Historique de Balance des Lots, BOM Explorer,Explorateur de nomenclature, -BOM Search,Recherche LDM, -BOM Stock Calculated,Stock calculé par liste de matériaux (LDM), -BOM Variance Report,Rapport de variance par liste de matériaux (LDM), +BOM Search,Recherche nomenclature, +BOM Stock Calculated,Stock calculé par nomenclature, +BOM Variance Report,Rapport de variance par nomenclature, Campaign Efficiency,Efficacité des Campagnes, Cash Flow,Flux de Trésorerie, Completed Work Orders,Ordres de travail terminés, @@ -8503,7 +8502,7 @@ HSN-wise-summary of outward supplies,Récapitulatif des fournitures extérieures Inactive Customers,Clients Inactifs, Inactive Sales Items,Articles de vente inactifs, IRS 1099,IRS 1099, -Issued Items Against Work Order,Articles émis pour l'ordre de travail, +Issued Items Against Work Order,Articles émis pour l'ordre de fabrication, Projected Quantity as Source,Quantité Projetée comme Source, Item Balance (Simple),Solde de l'article (simple), Item Price Stock,Stock et prix de l'article, @@ -8593,7 +8592,7 @@ Trial Balance (Simple),Balance d'essai (simple), Trial Balance for Party,Balance Auxiliaire, Unpaid Expense Claim,Note de Frais Impayée, Warehouse wise Item Balance Age and Value,Balance des articles par entrepôt, -Work Order Stock Report,Rapport de stock d'ordre de travail, +Work Order Stock Report,Rapport de stock d'ordre de fabrication, Work Orders in Progress,Ordres de travail en cours, Validation Error,erreur de validation, Automatically Process Deferred Accounting Entry,Traiter automatiquement l'écriture comptable différée, @@ -9026,14 +9025,14 @@ Machine operator errors,Erreurs de l'opérateur de la machine, Machine malfunction,Dysfonctionnement de la machine, Electricity down,Électricité en baisse, Operation Row Number,Numéro de ligne d'opération, -Operation {0} added multiple times in the work order {1},Opération {0} ajoutée plusieurs fois dans l'ordre de travail {1}, -"If ticked, multiple materials can be used for a single Work Order. This is useful if one or more time consuming products are being manufactured.","Si coché, plusieurs articles peuvent être utilisés pour un seul ordre de travail. Ceci est utile si un ou plusieurs produits chronophages sont en cours de fabrication.", +Operation {0} added multiple times in the work order {1},Opération {0} ajoutée plusieurs fois dans l'ordre de fabrication {1}, +"If ticked, multiple materials can be used for a single Work Order. This is useful if one or more time consuming products are being manufactured.","Si coché, plusieurs articles peuvent être utilisés pour un seul ordre de fabrication. Ceci est utile si un ou plusieurs produits chronophages sont en cours de fabrication.", Backflush Raw Materials,Matières premières de backflush, -"The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing.

    When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field.","L'entrée de stock de type «Fabrication» est connue sous le nom de post-consommation. Les matières premières consommées pour fabriquer des produits finis sont connues sous le nom de rétro-consommation.

    Lors de la création d'une entrée de fabrication, les articles de matières premières sont rétro-consommés en fonction de la nomenclature de l'article de production. Si vous souhaitez plutôt que les articles de matières premières soient postconsommés en fonction de l'entrée de transfert de matières effectuée par rapport à cet ordre de travail, vous pouvez la définir dans ce champ.", +"The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing.

    When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field.","L'entrée de stock de type «Fabrication» est connue sous le nom de post-consommation. Les matières premières consommées pour fabriquer des produits finis sont connues sous le nom de rétro-consommation.

    Lors de la création d'une entrée de fabrication, les articles de matières premières sont rétro-consommés en fonction de la nomenclature de l'article de production. Si vous souhaitez plutôt que les articles de matières premières soient postconsommés en fonction de l'entrée de transfert de matières effectuée par rapport à cet ordre de fabrication, vous pouvez la définir dans ce champ.", Work In Progress Warehouse,Entrepôt de travaux en cours, This Warehouse will be auto-updated in the Work In Progress Warehouse field of Work Orders.,Cet entrepôt sera mis à jour automatiquement dans le champ Entrepôt de travaux en cours des bons de travail., Finished Goods Warehouse,Entrepôt de produits finis, -This Warehouse will be auto-updated in the Target Warehouse field of Work Order.,Cet entrepôt sera mis à jour automatiquement dans le champ Entrepôt cible de l'ordre de travail., +This Warehouse will be auto-updated in the Target Warehouse field of Work Order.,Cet entrepôt sera mis à jour automatiquement dans le champ Entrepôt cible de l'ordre de fabrication. "If ticked, the BOM cost will be automatically updated based on Valuation Rate / Price List Rate / last purchase rate of raw materials.","Si coché, le coût de la nomenclature sera automatiquement mis à jour en fonction du taux de valorisation / tarif tarifaire / dernier taux d'achat des matières premières.", Source Warehouses (Optional),Entrepôts d'origine (facultatif), "System will pickup the materials from the selected warehouses. If not specified, system will create material request for purchase.","Le système ramassera les matériaux dans les entrepôts sélectionnés. S'il n'est pas spécifié, le système créera une demande de matériel pour l'achat.", @@ -9271,9 +9270,9 @@ Group by Sales Order,Regrouper par commande client, Sales Value,La valeur des ventes, Stock Qty vs Serial No Count,Quantité de stock vs numéro de série, Serial No Count,Numéro de série, -Work Order Summary,Résumé de l'ordre de travail, +Work Order Summary,Résumé de l'ordre de fabrication, Produce Qty,Produire la quantité, -Lead Time (in mins),Délai d'exécution (en minutes), +Lead Time (in mins),Délai d'exécution (en minutes), Charts Based On,Graphiques basés sur, YouTube Interactions,Interactions YouTube, Published Date,date de publication, @@ -9441,8 +9440,8 @@ The serial no {0} does not belong to item {1},Le numéro de série {0} n'app There is no batch found against the {0}: {1},Aucun lot trouvé pour {0}: {1}, Completed Operation,Opération terminée, Work Order Analysis,Analyse des bons de travail, -Quality Inspection Analysis,Analyse d'inspection de la qualité, -Pending Work Order,Ordre de travail en attente, +Quality Inspection Analysis,Analyse d'inspection de la qualité, +Pending Work Order,Ordre de fabrication en attente, Last Month Downtime Analysis,Analyse des temps d'arrêt du mois dernier, Work Order Qty Analysis,Analyse de la quantité des bons de travail, Job Card Analysis,Analyse des cartes de travail, @@ -9463,7 +9462,7 @@ Please fill the Material Requests table,Veuillez remplir le tableau des demandes Material Requests Required,Demandes de matériel requises, Items to Manufacture are required to pull the Raw Materials associated with it.,Les articles à fabriquer doivent extraire les matières premières qui leur sont associées., Items Required,Articles requis, -Operation {0} does not belong to the work order {1},L'opération {0} ne fait pas partie de l'ordre de travail {1}, +Operation {0} does not belong to the work order {1},L'opération {0} ne fait pas partie de l'ordre de fabrication {1}, Print UOM after Quantity,Imprimer UdM après la quantité, Set default {0} account for perpetual inventory for non stock items,Définir le compte {0} par défaut pour l'inventaire permanent pour les articles hors stock, Loan Security {0} added multiple times,Garantie de prêt {0} ajoutée plusieurs fois, @@ -9628,7 +9627,7 @@ Don't send employee birthday reminders,N'envoyez pas de rappels d'annive Restrict Backdated Leave Applications,Restreindre les demandes de congé antidatées, Sequence ID,ID de séquence, Sequence Id,Id de séquence, -Allow multiple material consumptions against a Work Order,Autoriser plusieurs consommations de matériaux par rapport à un ordre de travail, +Allow multiple material consumptions against a Work Order,Autoriser plusieurs consommations de matériaux par rapport à un ordre de fabrication, Plan time logs outside Workstation working hours,Planifier les journaux de temps en dehors des heures de travail du poste de travail, Plan operations X days in advance,Planifier les opérations X jours à l'avance, Time Between Operations (Mins),Temps entre les opérations (minutes), @@ -9872,4 +9871,59 @@ Show Barcode Field in Stock Transactions,Afficher le champ Code Barre dans les t Convert Item Description to Clean HTML in Transactions,Convertir les descriptions d'articles en HTML valide lors des transactions Have Default Naming Series for Batch ID?,Nom de série par défaut pour les Lots ou Séries "The percentage you are allowed to transfer more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed transfer 110 units","Le pourcentage de quantité que vous pourrez réceptionner en plus de la quantité commandée. Par exemple, vous avez commandé 100 unités, votre pourcentage de dépassement est de 10%, vous pourrez réceptionner 110 unités" +Allowed Items,Articles autorisés +Party Specific Item,Restriction d'article disponible +Restrict Items Based On,Type de critére de restriction +Based On Value,critére de restriction +Unit of Measure (UOM),Unité de mesure (UDM), Unit Of Measure (UOM),Unité de mesure (UDM), +CRM Settings,Paramètres CRM +Do Not Explode,Ne pas décomposer +Quick Access, Accés rapides +{} Available,{} Disponible.s +{} Pending,{} En attente.s +{} To Bill,{} à facturer +{} To Receive,{} A recevoir +{} Active,{} Actif.ve(s) +{} Open,{} Ouvert.e(s) +Incorrect Data Report,Rapport de données incohérentes +Incorrect Serial No Valuation,Valorisation inccorecte par Num. Série / Lots +Incorrect Balance Qty After Transaction,Equilibre des quantités aprés une transaction +Interview Type,Type d'entretien +Interview Round,Cycle d'entretien +Interview,Entretien +Interview Feedback,Retour d'entretien +Journal Energy Point,Historique des points d'énergies +Billing Address Details,Adresse de facturation (détails) +Supplier Address Details,Adresse Fournisseur (détails) +Retail,Commerce +Users,Utilisateurs +Permission Manager,Gestion des permissions +Fetch Timesheet,Récuprer les temps saisis +Get Supplier Group Details,Appliquer les informations depuis le Groupe de fournisseur +Quality Inspection(s),Inspection(s) Qualité +Set Advances and Allocate (FIFO),Affecter les encours au réglement +Apply Putaway Rule,Appliquer la régle de routage d'entrepot +Delete Transactions,Supprimer les transactions +Default Payment Discount Account,Compte par défaut des paiements de remise +Unrealized Profit / Loss Account,Compte de perte +Enable Provisional Accounting For Non Stock Items,Activer la provision pour les articles non stockés +Publish in Website,Publier sur le Site Web +List View,Vue en liste +Allow Excess Material Transfer,Autoriser les transfert de stock supérieurs à l'attendue +Allow transferring raw materials even after the Required Quantity is fulfilled,Autoriser les transfert de matiéres premiére mais si la quantité requise est atteinte +Add Corrective Operation Cost in Finished Good Valuation,Ajouter des opérations de correction de coût pour la valorisation des produits finis +Make Serial No / Batch from Work Order,Générer des numéros de séries / lots depuis les Ordres de Fabrications +System will automatically create the serial numbers / batch for the Finished Good on submission of work order,le systéme va créer des numéros de séries / lots à la validation des produit finis depuis les Ordres de Fabrications +Allow material consumptions without immediately manufacturing finished goods against a Work Order,Autoriser la consommation sans immédiatement fabriqué les produit fini dans les ordres de fabrication +Quality Inspection Parameter,Paramétre des Inspection Qualité +Parameter Group,Groupe de paramétre +E Commerce Settings,Paramétrage E-Commerce +Follow these steps to create a landing page for your store:,Suivez les intructions suivantes pour créer votre page d'accueil de boutique en ligne +Show Price in Quotation,Afficher les prix sur les devis +Add-ons,Extensions +Enable Wishlist,Activer la liste de souhaits +Enable Reviews and Ratings,Activer les avis et notes +Enable Recommendations,Activer les recommendations +Item Search Settings,Paramétrage de la recherche d'article + diff --git a/erpnext/translations/pt-BR.csv b/erpnext/translations/pt-BR.csv index a5c71db104..957cb75752 100644 --- a/erpnext/translations/pt-BR.csv +++ b/erpnext/translations/pt-BR.csv @@ -1,3050 +1,9840 @@ -DocType: Employee,Salary Mode,Modo de Salário -DocType: Buying Settings,Allow Item to be added multiple times in a transaction,Permitir item a ser adicionado várias vezes em uma transação -apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +33,Cancel Material Visit {0} before cancelling this Warranty Claim,Anular Material de Visita {0} antes de cancelar esta solicitação de garantia -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +19,Consumer Products,Produtos para o Consumidor -apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js +52,Please select Party Type first,"Por favor, selecione o Tipo de Sujeito primeiro" -DocType: Item,Customer Items,Itens de clientes -DocType: Project,Costing and Billing,Custos e Faturamento -apps/erpnext/erpnext/accounts/doctype/account/account.py +55,Account {0}: Parent account {1} can not be a ledger,Conta {0}: A Conta Superior {1} não pode ser um livro-razão -DocType: Item,Publish Item to hub.erpnext.com,Publicar Item para hub.erpnext.com -DocType: SMS Center,All Sales Partner Contact,Todos os Contatos de Parceiros de Vendas -DocType: Department,Leave Approvers,Aprovadores de Licença -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +216,"Stopped Production Order cannot be cancelled, Unstop it first to cancel","Parou ordem de produção não pode ser cancelado, desentupir-lo primeiro para cancelar" -apps/erpnext/erpnext/assets/doctype/asset/asset.js +338,Do you really want to scrap this asset?,Você realmente quer se desfazer deste ativo? -apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +38,Currency is required for Price List {0},É necessário informar a Moeda na Lista de Preço {0} -DocType: Employee,Job Applicant,Candidato à Vaga -apps/erpnext/erpnext/buying/doctype/supplier/supplier_dashboard.py +6,This is based on transactions against this Supplier. See timeline below for details,Isto é baseado nas transações envolvendo este Fornecedor. Veja a linha do tempo abaixo para maiores detalhes -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +393,Legal,Legal -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +204,Actual type tax cannot be included in Item rate in row {0},Tipo de imposto real não pode ser incluído na tarifa do item na linha {0} -DocType: Purchase Receipt Item,Required By,Entrega em -DocType: Delivery Note,Return Against Delivery Note,Devolução contra Guia de Remessa -DocType: Purchase Order,% Billed,Faturado % -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +41,Exchange Rate must be same as {0} {1} ({2}),Taxa de câmbio deve ser o mesmo que {0} {1} ({2}) -apps/erpnext/erpnext/setup/setup_wizard/operations/company_setup.py +63,Bank account cannot be named as {0},A conta bancária não pode ser nomeada como {0} -DocType: Account,Heads (or groups) against which Accounting Entries are made and balances are maintained.,Heads (ou grupos) contra o qual as entradas de Contabilidade são feitas e os saldos são mantidos. -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +197,Outstanding for {0} cannot be less than zero ({1}),Excelente para {0} não pode ser inferior a zero ( {1}) -DocType: Manufacturing Settings,Default 10 mins,Padrão 10 minutos -DocType: Leave Type,Leave Type Name,Nome do Tipo de Licença -apps/erpnext/erpnext/templates/pages/projects.js +66,Show open,Mostrar aberta -apps/erpnext/erpnext/templates/includes/cart/cart_dropdown.html +6,Checkout,Finalizar Compra -DocType: Pricing Rule,Apply On,Aplicar em -DocType: Item Price,Multiple Item prices.,Vários preços do item. -,Purchase Order Items To Be Received,"Itens Comprados, mas não Recebidos" -DocType: SMS Center,All Supplier Contact,Todos os Contatos de Fornecedor -DocType: Support Settings,Support Settings,Configurações do Pós Vendas -apps/erpnext/erpnext/projects/doctype/project/project.py +84,Expected End Date can not be less than Expected Start Date,A Data Prevista de Término não pode ser menor que a Data Prevista de Início -apps/erpnext/erpnext/utilities/transaction_base.py +126,Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ,Linha # {0}: O Valor deve ser o mesmo da {1}: {2} ({3} / {4}) -,Batch Item Expiry Status,Status do Vencimento do Item do Lote -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +137,Bank Draft,Cheque Administrativo -DocType: Mode of Payment Account,Mode of Payment Account,Modo de pagamento da conta -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +590,Accounts table cannot be blank.,Tabela de Contas não pode estar vazia. -DocType: Employee Education,Year of Passing,Ano de passagem -apps/erpnext/erpnext/templates/includes/product_page.js +34,In Stock,Em Estoque -apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +46,Open Issues,Incidentes Abertos -DocType: Production Plan Item,Production Plan Item,Item do Planejamento de Produção -apps/erpnext/erpnext/hr/doctype/employee/employee.py +166,User {0} is already assigned to Employee {1},Usuário {0} já está atribuído ao Colaborador {1} -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +31,Health Care,Plano de Saúde -apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +65,Delay in payment (Days),Atraso no Pagamento (Dias) -DocType: Payment Terms Template Detail,Payment Terms Template Detail,Detalhes do Modelo de Termos de Pagamento -,Delay Days,Dias de Atraso -apps/erpnext/erpnext/hr/report/vehicle_expenses/vehicle_expenses.py +26,Service Expense,Despesa com Manutenção de Veículos -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +21,Fiscal Year {0} is required,Ano Fiscal {0} é necessário -DocType: Appraisal Goal,Score (0-5),Pontuação (0-5) -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +257,Row {0}: {1} {2} does not match with {3},Linha {0}: {1} {2} não corresponde com {3} -DocType: Delivery Note,Vehicle No,Placa do Veículo -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +177,Please select Price List,"Por favor, selecione Lista de Preço" -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +90,Accountant,Contador -DocType: Cost Center,Stock User,Usuário de Estoque -,Sales Partners Commission,Comissão dos Parceiros de Vendas -apps/erpnext/erpnext/setup/doctype/company/company.py +50,Abbreviation cannot have more than 5 characters,Abreviatura não pode ter mais de 5 caracteres -apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.js +7,Payment Request,Pedido de Pagamento -DocType: Asset,Value After Depreciation,Valor após Depreciação -apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan_dashboard.py +8,Related,Relacionados -DocType: Grading Scale,Grading Scale Name,Nome escala de avaliação -apps/erpnext/erpnext/accounts/doctype/account/account.js +37,This is a root account and cannot be edited.,Esta é uma conta de root e não pode ser editada. -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +38,Cannot set authorization on basis of Discount for {0},Não é possível definir a autorização com base em desconto para {0} -DocType: Rename Tool,"Attach .csv file with two columns, one for the old name and one for the new name","Anexar arquivo .csv com duas colunas, uma para o nome antigo e um para o novo nome" -apps/erpnext/erpnext/accounts/utils.py +74,{0} {1} not in any active Fiscal Year.,{0} {1} não está em nenhum ano fiscal ativo. -DocType: Packed Item,Parent Detail docname,Nome do documento do detalhe pai -DocType: Item Attribute,Increment,Incremento -apps/erpnext/erpnext/public/js/stock_analytics.js +58,Select Warehouse...,Selecione Armazém... -apps/erpnext/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.py +22,Same Company is entered more than once,Mesma empresa está inscrita mais de uma vez -DocType: Patient,Married,Casado -apps/erpnext/erpnext/accounts/party.py +42,Not permitted for {0},Não permitido para {0} -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +539,Stock cannot be updated against Delivery Note {0},Banco não pode ser atualizado contra nota de entrega {0} -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +267,Salary Structure Missing,Estrutura salarial ausente -DocType: Sales Invoice Item,Sales Invoice Item,Item da Fatura de Venda -DocType: POS Profile,Write Off Cost Center,Centro de custo do abatimento -apps/erpnext/erpnext/config/stock.py +28,Stock Reports,Relatórios de Estoque -DocType: Warehouse,Warehouse Detail,Detalhes do Armazén -apps/erpnext/erpnext/stock/doctype/item/item.py +298,"""Is Fixed Asset"" cannot be unchecked, as Asset record exists against the item","""É Ativo Fixo"" não pode ser desmarcado se já existe um registro de Ativo relacionado ao item" -DocType: Vehicle Service,Brake Oil,Óleo de Freio -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +161,You are not authorized to add or update entries before {0},Você não está autorizado para adicionar ou atualizar entradas antes de {0} -DocType: BOM,Item Image (if not slideshow),Imagem do Item (se não for slideshow) -DocType: Work Order Operation,(Hour Rate / 60) * Actual Operation Time,(Valor por Hora / 60) * Tempo de operação real -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1053,Select BOM,Selecionar LDM -DocType: SMS Log,SMS Log,Log de SMS -apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +27,Cost of Delivered Items,Custo de Produtos Entregues -DocType: Student Log,Student Log,Log do Aluno -apps/erpnext/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +27,Opening,Abertura -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +36,From {0} to {1},A partir de {0} a {1} -DocType: Item,Copy From Item Group,Copiar do item do grupo -DocType: Journal Entry,Opening Entry,Lançamento de Abertura -DocType: Stock Entry,Additional Costs,Custos adicionais -apps/erpnext/erpnext/accounts/doctype/account/account.py +145,Account with existing transaction can not be converted to group.,Contas com a transações existentes não pode ser convertidas em um grupo. -DocType: Lead,Product Enquiry,Consulta de Produto -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +23,Please enter company first,Por favor insira primeira empresa -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +626,Please select Company first,"Por favor, selecione Empresa primeiro" -DocType: Employee Education,Under Graduate,Em Graduação -apps/erpnext/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.js +27,Target On,Meta em -DocType: BOM,Total Cost,Custo total -DocType: Salary Slip,Employee Loan,Empréstimo para Colaboradores -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +282,Item {0} does not exist in the system or has expired,Item {0} não existe no sistema ou expirou -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.html +1,Statement of Account,Extrato da conta -DocType: Purchase Invoice Item,Is Fixed Asset,É Ativo Imobilizado -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +355,"Available qty is {0}, you need {1}","A qtde disponível é {0}, você necessita de {1}" -DocType: Expense Claim Detail,Claim Amount,Valor Requerido -DocType: Assessment Result,Grade,Nota de Avaliação -DocType: Restaurant Table,No of Seats,Número de assentos -DocType: Sales Invoice Item,Delivered By Supplier,Proferido por Fornecedor -DocType: SMS Center,All Contact,Todo o Contato -DocType: Daily Work Summary,Daily Work Summary,Resumo de Trabalho Diário -DocType: Period Closing Voucher,Closing Fiscal Year,Encerramento do Exercício Fiscal -apps/erpnext/erpnext/accounts/party.py +425,{0} {1} is frozen,{0} {1} está congelado -apps/erpnext/erpnext/setup/doctype/company/company.py +152,Please select Existing Company for creating Chart of Accounts,"Por favor, selecione empresa já existente para a criação de Plano de Contas" -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +84,Stock Expenses,Despesas com Estoque -DocType: Journal Entry,Contra Entry,Contrapartida de Entrada -DocType: Journal Entry Account,Credit in Company Currency,Crédito em moeda da empresa -DocType: Delivery Note,Installation Status,Status da Instalação -apps/erpnext/erpnext/controllers/buying_controller.py +433,Accepted + Rejected Qty must be equal to Received quantity for Item {0},A qtde Aceita + Rejeitada deve ser igual a quantidade recebida para o item {0} -DocType: Item,Supply Raw Materials for Purchase,Abastecimento de Matérias-primas para a Compra -DocType: Products Settings,Show Products as a List,Mostrar Produtos como uma Lista -apps/erpnext/erpnext/healthcare/doctype/clinical_procedure_template/clinical_procedure_template.py +43,Item {0} is not active or end of life has been reached,Item {0} não está ativo ou fim de vida útil foi atingido -apps/erpnext/erpnext/controllers/accounts_controller.py +886,"To include tax in row {0} in Item rate, taxes in rows {1} must also be included","Para incluir impostos na linha {0} na taxa de Item, os impostos em linhas {1} também deve ser incluída" -DocType: Sales Invoice,Change Amount,Troco -DocType: Depreciation Schedule,Make Depreciation Entry,Fazer Lançamento de Depreciação -DocType: Appraisal Template Goal,KRA,APR -apps/erpnext/erpnext/hr/doctype/job_offer/job_offer.js +18,Make Employee,Criar Colaborador -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +14,Broadcasting,Radio-difusão -apps/erpnext/erpnext/config/accounts.py +538,Setup mode of POS (Online / Offline),Modo de Configuração do PDV (Online / Offline) -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +144,Execution,execução -apps/erpnext/erpnext/config/manufacturing.py +62,Details of the operations carried out.,Os detalhes das operações realizadas. -DocType: Asset Maintenance Log,Maintenance Status,Status da Manutenção -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +56,{0} {1}: Supplier is required against Payable account {2},{0} {1}: Fornecedor é necessário contra Conta a Pagar {2} -apps/erpnext/erpnext/projects/doctype/project/project_dashboard.html +2,Total hours: {0},Total de horas: {0} -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +43,From Date should be within the Fiscal Year. Assuming From Date = {0},A partir de data deve estar dentro do ano fiscal. Assumindo De Date = {0} -DocType: Supplier,Individual,Pessoa Física -DocType: Academic Term,Academics User,Usuário Acadêmico -DocType: Cheque Print Template,Amount In Figure,Total em Espécie -DocType: Loan Application,Loan Info,Informações do Empréstimo -apps/erpnext/erpnext/public/js/financial_statements.js +53,Financial Statements,Demonstrativos Financeiros -DocType: Guardian,Students,Alunos -apps/erpnext/erpnext/config/selling.py +91,Rules for applying pricing and discount.,Regras para aplicação de preços e de desconto. -apps/erpnext/erpnext/stock/doctype/price_list/price_list.py +14,Price List must be applicable for Buying or Selling,Lista de Preço deve ser aplicável para comprar ou vender -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +79,Installation date cannot be before delivery date for Item {0},Data de instalação não pode ser anterior à data de entrega de item {0} -DocType: Pricing Rule,Discount on Price List Rate (%),% de Desconto sobre o Preço da Lista de Preços -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +87,Out Value,Valor Saída -DocType: Production Plan,Sales Orders,Pedidos de Venda -apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +436,Set as Default,Definir como padrão -,Purchase Order Trends,Tendência de Pedidos de Compra -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +357,Insufficient Stock,Estoque Insuficiente -DocType: Manufacturing Settings,Disable Capacity Planning and Time Tracking,Desativar Controle de Tempo e Planejamento de Capacidade -DocType: Email Digest,New Sales Orders,Novos Pedidos de Venda -DocType: Leave Type,Allow Negative Balance,Permitir saldo negativo -DocType: Employee,Create User,Criar Usuário -DocType: Selling Settings,Default Territory,Território padrão -DocType: Work Order Operation,Updated via 'Time Log',Atualizado via 'Time Log' -apps/erpnext/erpnext/controllers/taxes_and_totals.py +449,Advance amount cannot be greater than {0} {1},O valor do adiantamento não pode ser maior do que {0} {1} -DocType: Naming Series,Series List for this Transaction,Lista de séries para esta transação -DocType: Company,Default Payroll Payable Account,Conta Padrão para Folha de Pagamentos -apps/erpnext/erpnext/education/doctype/student_group/student_group.js +51,Update Email Group,Atualizar Grupo de Email -DocType: Sales Invoice,Is Opening Entry,É Lançamento de Abertura -DocType: Customer Group,Mention if non-standard receivable account applicable,Mencione se a conta a receber aplicável não for a conta padrão -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +199,For Warehouse is required before Submit,Armazén de destino necessário antes de enviar -apps/erpnext/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html +8,Received On,Recebeu em -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +20,Please enter Company,"Por favor, indique Empresa" -DocType: Delivery Note Item,Against Sales Invoice Item,Contra o Item da Fatura de Venda -DocType: Lead,Address & Contact,Endereço e Contato -DocType: Leave Allocation,Add unused leaves from previous allocations,Acrescente as licenças não utilizadas de atribuições anteriores -DocType: Sales Partner,Partner website,Site Parceiro -DocType: Delivery Stop,Contact Name,Nome do Contato -DocType: POS Customer Group,POS Customer Group,Grupo de Cliente PDV -DocType: Vehicle,Additional Details,Detalhes Adicionais -apps/erpnext/erpnext/templates/generators/bom.html +85,No description given,Nenhuma descrição informada -apps/erpnext/erpnext/config/buying.py +13,Request for purchase.,Solicitação de Compra. -apps/erpnext/erpnext/projects/doctype/project/project_dashboard.py +6,This is based on the Time Sheets created against this project,Isto é baseado nos Registros de Tempo relacionados a este Projeto -apps/erpnext/erpnext/hr/doctype/employee/employee.py +138,Relieving Date must be greater than Date of Joining,A Data da Licença deve ser maior que Data de Contratação -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +198,Leaves per Year,Folhas por ano -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +162,Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,"Linha {0}: Por favor, selecione 'É Adiantamento' se este é um lançamento de adiantamento relacionado à conta {1}." -apps/erpnext/erpnext/stock/utils.py +243,Warehouse {0} does not belong to company {1},Armazém {0} não pertence à empresa {1} -DocType: Email Digest,Profit & Loss,Lucro e Perdas -DocType: Task,Total Costing Amount (via Time Sheet),Custo Total (via Registro de Tempo) -DocType: Item Website Specification,Item Website Specification,Especificação do Site do Item -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +543,Leave Blocked,Licenças Bloqueadas -apps/erpnext/erpnext/stock/doctype/item/item.py +818,Item {0} has reached its end of life on {1},Item {0} chegou ao fim da vida em {1} -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.js +82,Bank Entries,Lançamentos do Banco -DocType: Stock Reconciliation Item,Stock Reconciliation Item,Item da Conciliação de Estoque -DocType: Stock Entry,Sales Invoice No,Nº da Nota Fiscal de Venda -DocType: Material Request Item,Min Order Qty,Pedido Mínimo -DocType: Student Group Creation Tool Course,Student Group Creation Tool Course,Ferramenta de Criação de Grupo de Alunos -DocType: Lead,Do Not Contact,Não entre em contato -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +98,Software Developer,Software Developer -DocType: Item,Minimum Order Qty,Pedido Mínimo -,Student Batch-Wise Attendance,Controle de Frequência por Série de Alunos -DocType: POS Profile,Allow user to edit Rate,Permitir que o usuário altere o preço -DocType: Item,Publish in Hub,Publicar no Hub -DocType: Student Admission,Student Admission,Admissão do Aluno -apps/erpnext/erpnext/stock/doctype/item/item.py +840,Item {0} is cancelled,Item {0} é cancelada -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +1138,Material Request,Requisição de Material -DocType: Bank Reconciliation,Update Clearance Date,Atualizar Data Liquidação -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +494,Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1},"Item {0} não encontrado em 'matérias-primas fornecidas"" na tabela Pedido de Compra {1}" -apps/erpnext/erpnext/config/selling.py +18,Confirmed orders from Customers.,Pedidos confirmados de clientes. -DocType: Notification Control,Notification Control,Controle de Notificação -DocType: Territory,Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,"Definir orçamentos para Grupos de Itens neste território. Você também pode incluir a sazonalidade, defininda na Distribuição." -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +308,Payment against {0} {1} cannot be greater than Outstanding Amount {2},O pagamento relacionado {0} {1} não pode ser maior do que o saldo devedor {2} -DocType: Lead,Mobile No.,Telefone Celular -DocType: Maintenance Schedule,Generate Schedule,Gerar Agenda -DocType: Purchase Invoice Item,Expense Head,Conta de despesas -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +149,Please select Charge Type first,Por favor selecione o Tipo de Encargo primeiro -DocType: Student Group Student,Student Group Student,Aluno Grupo de Alunos -apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.py +42,Latest,Mais recentes -DocType: Asset Maintenance Task,2 Yearly,2 Anos -DocType: HR Settings,Emails salary slip to employee based on preferred email selected in Employee,Enviar contracheques para os colaboradores com base em email preferido selecionado no cadastro do colaborador -DocType: Tax Rule,Shipping County,Condado de Entrega -apps/erpnext/erpnext/projects/doctype/activity_type/activity_type.js +3,Activity Cost per Employee,Custo da Atividade por Colaborador -DocType: Accounts Settings,Settings for Accounts,Configurações para Contas -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +800,Supplier Invoice No exists in Purchase Invoice {0},Nº da Nota Fiscal do Fornecedor já existe naFatura de Compra {0} -apps/erpnext/erpnext/config/selling.py +118,Manage Sales Person Tree.,Gerenciar vendedores -DocType: Job Applicant,Cover Letter,Carta de apresentação -apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +37,Outstanding Cheques and Deposits to clear,Cheques em circulação e depósitos para apagar -DocType: Item,Synced With Hub,Sincronizado com o Hub -DocType: Driver,Fleet Manager,Gerente de Frota -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +387,Completed Qty can not be greater than 'Qty to Manufacture',"Qtde concluída não pode ser maior do que ""Qtde de Fabricação""" -DocType: Period Closing Voucher,Closing Account Head,Conta de Fechamento -DocType: Employee,External Work History,Histórico Profissional no Exterior -DocType: Delivery Note,In Words (Export) will be visible once you save the Delivery Note.,Por extenso (Exportação) será visível quando você salvar a Guia de Remessa. -apps/erpnext/erpnext/utilities/bot.py +29,{0} units of [{1}](#Form/Item/{1}) found in [{2}](#Form/Warehouse/{2}),{0} unidades de [{1}] (# Form / Item / {1}) foram encontrados em [{2}] (# Form / Armazém / {2}) -DocType: Lead,Industry,Indústria -DocType: Stock Settings,Notify by Email on creation of automatic Material Request,Notificar por Email a criação de Requisição de Material automática -DocType: Journal Entry,Multi Currency,Multi moeda -apps/erpnext/erpnext/config/learn.py +82,Setting up Taxes,Configurando Impostos -apps/erpnext/erpnext/accounts/utils.py +374,Payment Entry has been modified after you pulled it. Please pull it again.,"Entrada de pagamento foi modificado depois que você puxou-o. Por favor, puxe-o novamente." -apps/erpnext/erpnext/stock/doctype/item/item.py +510,{0} entered twice in Item Tax,{0} entrou duas vezes no Imposto do Item -DocType: Workstation,Rent Cost,Custo do Aluguel -apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +97,Upcoming Calendar Events,Próximos Eventos do Calendário -apps/erpnext/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +114,Please select month and year,Selecione mês e ano -DocType: GL Entry,Debit Amount in Account Currency,Débito em moeda da conta -apps/erpnext/erpnext/stock/doctype/item/item.js +57,This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set,Este artigo é um modelo e não podem ser usados em transações. Atributos item será copiado para as variantes a menos 'No Copy' é definido -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +69,Total Order Considered,Total considerado em pedidos -DocType: Sales Invoice,Rate at which Customer Currency is converted to customer's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base do cliente -DocType: Course Scheduling Tool,Course Scheduling Tool,Ferramenta de Agendamento de Cursos -apps/erpnext/erpnext/controllers/accounts_controller.py +698,Row #{0}: Purchase Invoice cannot be made against an existing asset {1},Linha #{0}: Não pode ser criada uma Nota Fiscal de Compra para um ativo existente {1} -DocType: Item Tax,Tax Rate,Alíquota do Imposto -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +73,{0} already allocated for Employee {1} for period {2} to {3},{0} já está alocado para o Colaborador {1} para o período de {2} até {3} -apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +145,Purchase Invoice {0} is already submitted,A Fatura de Compra {0} já foi enviada -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +90,Row # {0}: Batch No must be same as {1} {2},Linha # {0}: Nº do Lote deve ser o mesmo que {1} {2} -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +101,Convert to non-Group,Converter para Não-Grupo -DocType: Bank Statement Transaction Invoice Item,Invoice Date,Data do Faturamento -DocType: GL Entry,Debit Amount,Total do Débito -apps/erpnext/erpnext/accounts/party.py +277,There can only be 1 Account per Company in {0} {1},Pode haver apenas uma conta por empresa em {0} {1} -DocType: Purchase Order,% Received,Recebido % -apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.js +3,Create Student Groups,Criar Grupos de Alunos -DocType: Chapter Member,Website URL,Endereço do Site -DocType: Quality Inspection,Inspected By,Inspecionado por -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +59,Serial No {0} does not belong to Delivery Note {1},Serial Não {0} não pertence a entrega Nota {1} -apps/erpnext/erpnext/templates/pages/demo.html +47,ERPNext Demo,Demo do ERPNext -DocType: Leave Application,Leave Approver Name,Nome do Aprovador de Licenças -DocType: Depreciation Schedule,Schedule Date,Data Agendada -DocType: Packed Item,Packed Item,Item do Pacote da Guia de Remessa -apps/erpnext/erpnext/config/buying.py +65,Default settings for buying transactions.,As configurações padrão para a compra de transações. -apps/erpnext/erpnext/projects/doctype/activity_cost/activity_cost.py +29,Activity Cost exists for Employee {0} against Activity Type - {1},Já existe um custo da atividade para o colaborador {0} relacionado ao tipo de atividade - {1} -DocType: Currency Exchange,Currency Exchange,Câmbio -DocType: Authorization Rule,Approving User (above authorized value),Usuário Habilitado para Aprovar (acima do valor autorizado) -DocType: Email Digest,Credit Balance,Saldo Credor -DocType: Employee,Widowed,Viúvo(a) -DocType: Request for Quotation,Request for Quotation,Solicitação de Orçamento -DocType: Salary Slip Timesheet,Working Hours,Horas de trabalho -DocType: Naming Series,Change the starting / current sequence number of an existing series.,Alterar o número sequencial de início/atual de uma série existente. -apps/erpnext/erpnext/accounts/page/pos/pos.js +1548,Create a new Customer,Criar novo Cliente -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +59,"If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.","Se várias regras de preços continuam a prevalecer, os usuários são convidados a definir a prioridade manualmente para resolver o conflito." -apps/erpnext/erpnext/utilities/activation.py +90,Create Purchase Orders,Criar Pedidos de Compra -,Purchase Register,Registro de Compras -DocType: Landed Cost Item,Applicable Charges,Encargos aplicáveis -DocType: Workstation,Consumable Cost,Custo dos Consumíveis -DocType: Purchase Receipt,Vehicle Date,Data do Veículo -DocType: Student Log,Medical,Médico -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.js +186,Reason for losing,Motivo para perder -DocType: Announcement,Receiver,Recebedor -apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +83,Workstation is closed on the following dates as per Holiday List: {0},"Workstation é fechado nas seguintes datas, conforme lista do feriado: {0}" -DocType: Lab Test Template,Single,Solteiro -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +231,Please enter Cost Center,"Por favor, indique Centro de Custo" -DocType: Journal Entry Account,Sales Order,Pedido de Venda -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +67,Avg. Selling Rate,Valor Médio de Venda -DocType: Delivery Note,% Installed,Instalado % -apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +25,Read the ERPNext Manual,Leia o manual de ERPNext -DocType: Purchase Invoice,01-Sales Return,01-Devolução de vendas -DocType: Stock Settings,Automatically Set Serial Nos based on FIFO,Número de Série automaticamente definido com base na FIFO -DocType: Accounts Settings,Check Supplier Invoice Number Uniqueness,Verificar unicidade de número de nota fiscal do fornecedor -DocType: Vehicle Service,Oil Change,Troca de Óleo -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +57,'To Case No.' cannot be less than 'From Case No.','Número do Caso Final' não pode ser menor que o 'Número do Caso Inicial' -DocType: Lead,Channel Partner,Canal de Parceria -DocType: Account,Old Parent,Pai Velho -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +221,{0} {1} is not associated with {2} {3},{0} {1} não está associado com {2} {3} -DocType: Notification Control,Customize the introductory text that goes as a part of that email. Each transaction has a separate introductory text.,Personalize o texto introdutório que vai como uma parte do que email. Cada transação tem um texto introdutório separado. -apps/erpnext/erpnext/config/manufacturing.py +84,Global settings for all manufacturing processes.,As configurações globais para todos os processos de fabricação. -DocType: Accounts Settings,Accounts Frozen Upto,Contas congeladas até -DocType: SMS Log,Sent On,Enviado em -apps/erpnext/erpnext/stock/doctype/item/item.py +778,Attribute {0} selected multiple times in Attributes Table,Atributo {0} selecionada várias vezes na tabela de atributos -DocType: HR Settings,Employee record is created using selected field. ,O registro do colaborador é criado usando o campo selecionado. -DocType: Request for Quotation Item,Required Date,Para o Dia -DocType: Delivery Note,Billing Address,Endereço de Faturamento -DocType: Travel Request,Costing,Custo -DocType: Tax Rule,Billing County,País de Faturamento -DocType: Purchase Taxes and Charges,"If checked, the tax amount will be considered as already included in the Print Rate / Print Amount","Se marcado, o valor do imposto será considerado como já incluído na Impressão de Taxa / Impressão do Valor" -DocType: Sales Invoice,Total Qty,Quantidade total -DocType: Item,Show in Website (Variant),Mostar no Site (variante) -DocType: Employee,Health Concerns,Preocupações com a Saúde -DocType: Payroll Entry,Select Payroll Period,Selecione Período de Pagamento -DocType: Payroll Entry,Select Payroll Period,Selecione Período de Pagamento -DocType: Purchase Invoice,Unpaid,A Pagar -DocType: Packing Slip,From Package No.,Do nº do pacote -DocType: Item Attribute,To Range,Para a Faixa -DocType: Job Opening,Description of a Job Opening,Descrição de uma vaga de emprego -DocType: Salary Structure,Salary Component for timesheet based payroll.,Componente salarial para pagamento por hora. -DocType: Sales Order Item,Used for Production Plan,Usado para o Plano de Produção -DocType: Loan,Total Payment,Pagamento Total -DocType: Manufacturing Settings,Time Between Operations (in mins),Tempo entre operações (em minutos) -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +130,{0} {1} is cancelled so the action cannot be completed,{0} {1} é cancelado então a ação não pode ser concluída -DocType: Item Price,Valid Upto,Válido até -DocType: Supplier Scorecard Scoring Standing,Warn Purchase Orders,Avisar em Pedidos de Compra -apps/erpnext/erpnext/utilities/user_progress.py +67,List a few of your customers. They could be organizations or individuals.,Lista de alguns de seus clientes. Eles podem ser empresas ou pessoas físicas. -apps/erpnext/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py +25,Enough Parts to Build,Peças suficientes para construir -DocType: POS Profile User,POS Profile User,Perfil de Usuário do PDV -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +135,Direct Income,Receita Direta -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +53,"Can not filter based on Account, if grouped by Account","Não é possível filtrar com base em conta , se agrupados por Conta" -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +93,Administrative Officer,Escritório Administrativo -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +410,Please select Company,"Por favor, selecione Empresa" -DocType: Stock Entry Detail,Difference Account,Conta Diferença -apps/erpnext/erpnext/projects/doctype/task/task.py +50,Cannot close task as its dependant task {0} is not closed.,Não pode fechar tarefa como sua tarefa dependente {0} não está fechado. -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +435,Please enter Warehouse for which Material Request will be raised,"Por favor, indique Armazén para as quais as Requisições de Material serão levantadas" -DocType: Work Order,Additional Operating Cost,Custo Operacional Adicional -apps/erpnext/erpnext/stock/doctype/item/item.py +583,"To merge, following properties must be same for both items","Para mesclar , seguintes propriedades devem ser os mesmos para ambos os itens" -,Serial No Warranty Expiry,Vencimento da Garantia com Nº de Série -DocType: Sales Invoice,Offline POS Name,Nome do POS Offline -DocType: Sales Order,To Deliver,Para Entregar -DocType: Journal Entry,Difference (Dr - Cr),Diferença ( Dr - Cr) -DocType: Account,Profit and Loss,Lucro e Perdas -apps/erpnext/erpnext/config/stock.py +337,Managing Subcontracting,Gerenciando Subcontratação -DocType: Project,Project will be accessible on the website to these users,Projeto estará acessível no site para os usuários -apps/erpnext/erpnext/config/projects.py +29,Define Project type.,Defina tipo de projeto. -DocType: Quotation,Rate at which Price list currency is converted to company's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base da empresa -apps/erpnext/erpnext/setup/doctype/company/company.py +74,Account {0} does not belong to company: {1},A Conta {0} não pertence à Empresa: {1} -apps/erpnext/erpnext/setup/doctype/company/company.py +56,Abbreviation already used for another company,Abreviatura já utilizado para outra empresa -DocType: Selling Settings,Default Customer Group,Grupo de Clientes padrão -DocType: Global Defaults,"If disable, 'Rounded Total' field will not be visible in any transaction","Desativa campo ""total arredondado"" em qualquer tipo de transação" -DocType: BOM,Operating Cost,Custo de Operação -apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +49,Increment cannot be 0,Incremento não pode ser 0 -DocType: Company,Delete Company Transactions,Excluir Transações Companhia -DocType: Purchase Receipt,Add / Edit Taxes and Charges,Adicionar / Editar Impostos e Encargos -DocType: Payment Entry Reference,Supplier Invoice No,Nº da nota fiscal de compra -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +162,"Cannot delete Serial No {0}, as it is used in stock transactions","Não é possível excluir Serial No {0}, como ele é usado em transações de ações" -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +278,Closing (Cr),Fechamento (Cr) -DocType: Installation Note Item,Installation Note Item,Item da Nota de Instalação -DocType: Production Plan Item,Pending Qty,Pendente Qtde -apps/erpnext/erpnext/accounts/party.py +429,{0} {1} is not active,{0} {1} não está ativo -apps/erpnext/erpnext/config/accounts.py +240,Setup cheque dimensions for printing,Configurar dimensões do cheque para impressão -DocType: Salary Slip,Salary Slip Timesheet,Controle de Tempo do Demonstrativo de Pagamento -apps/erpnext/erpnext/controllers/buying_controller.py +200,Supplier Warehouse mandatory for sub-contracted Purchase Receipt,Fornecedor Armazém obrigatório para sub- contratados Recibo de compra -DocType: Item Price,Valid From,Válido de -DocType: Sales Invoice,Total Commission,Total da Comissão -DocType: Buying Settings,Purchase Receipt Required,Recibo de Compra Obrigatório -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +143,No records found in the Invoice table,Nenhum registro encontrado na tabela de fatura -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js +36,Please select Company and Party Type first,"Por favor, selecione a Empresa e Tipo de Sujeito primeiro" -apps/erpnext/erpnext/config/accounts.py +261,Financial / accounting year.,Ano Financeiro / Exercício. -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +166,"Sorry, Serial Nos cannot be merged","Desculpe, os números de ordem não podem ser mescladas" -DocType: Supplier,Prevent RFQs,Evitar Orçamentos -,Lead Id,Cliente em Potencial ID -DocType: Timesheet,Payslip,Holerite -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +38,Fiscal Year Start Date should not be greater than Fiscal Year End Date,Ano Fiscal Data de início não deve ser maior do que o Fiscal Year End Date -DocType: Issue,Resolution,Solução -DocType: Bank Statement Transaction Entry,Payable Account,Conta para Pagamento -DocType: Sales Order,Billing and Delivery Status,Status do Faturamento e Entrega -DocType: Job Applicant,Resume Attachment,Anexo currículo -apps/erpnext/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py +58,Repeat Customers,Clientes Repetidos -DocType: Leave Control Panel,Allocate,Alocar -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js +909,Sales Return,Devolução de Vendas -DocType: Item,Delivered by Supplier (Drop Ship),Entregue pelo Fornecedor (Drop Ship) -apps/erpnext/erpnext/config/crm.py +12,Database of potential customers.,Banco de dados de clientes potenciais. -apps/erpnext/erpnext/config/selling.py +28,Customer database.,Banco de Dados de Clientes -DocType: Quotation,Quotation To,Orçamento para -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +215,Middle Income,Média Renda -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +250,Opening (Cr),Abertura (Cr) -apps/erpnext/erpnext/stock/doctype/item/item.py +950,Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,Unidade de medida padrão para item {0} não pode ser alterado diretamente porque você já fez alguma transação (s) com outra Unidade de Medida. Você precisará criar um novo item para usar uma Unidade de Medida padrão diferente. -apps/erpnext/erpnext/accounts/utils.py +378,Allocated amount can not be negative,Total alocado não pode ser negativo -DocType: Purchase Order Item,Billed Amt,Valor Faturado -DocType: Training Result Employee,Training Result Employee,Resultado do Treinamento do Colaborador -DocType: Warehouse,A logical Warehouse against which stock entries are made.,Um Depósito lógico contra o qual as entradas de estoque são feitas. -apps/erpnext/erpnext/hr/doctype/loan/loan.js +134,Principal Amount,Valor Principal -DocType: Loan Application,Total Payable Interest,Total de Juros a Pagar -DocType: Sales Invoice Timesheet,Sales Invoice Timesheet,Registro de Tempo da Fatura de Venda -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +150,Reference No & Reference Date is required for {0},Número de referência e Referência Data é necessário para {0} -DocType: Payroll Entry,Select Payment Account to make Bank Entry,Selecione a conta de pagamento para fazer o lançamento bancário -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +143,Proposal Writing,Proposta Redação -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person.py +54,Another Sales Person {0} exists with the same Employee id,Outro Vendedor {0} existe com o mesmo ID de Colaborador -apps/erpnext/erpnext/config/education.py +180,Masters,Cadastros -apps/erpnext/erpnext/config/accounts.py +134,Update Bank Transaction Dates,Conciliação Bancária -apps/erpnext/erpnext/config/projects.py +41,Time Tracking,Controle de Tempo -DocType: Fiscal Year Company,Fiscal Year Company,Ano Fiscal Empresa -DocType: Packing Slip Item,DN Detail,Detalhe DN -DocType: Sales Invoice,Sales Taxes and Charges,Impostos e Taxas sobre Vendas -DocType: Vehicle Service,Vehicle Service,Manutenção no Veículo -apps/erpnext/erpnext/config/setup.py +95,Automatically triggers the feedback request based on conditions.,Dispara automaticamente solicitações de feedback baseado em condições. -DocType: Employee,Reason for Resignation,Motivo para Demissão -DocType: Sales Invoice,Credit Note Issued,Nota de Crédito Emitida -DocType: Payment Reconciliation,Invoice/Journal Entry Details,Detalhes da Fatura/Lançamento no Livro Diário -apps/erpnext/erpnext/accounts/utils.py +84,{0} '{1}' not in Fiscal Year {2},{0} '{1}' não localizado no Ano Fiscal {2} -DocType: Buying Settings,Settings for Buying Module,Configurações para o Módulo de Compras -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +70,Please enter Purchase Receipt first,Digite Recibo de compra primeiro -DocType: Buying Settings,Supplier Naming By,Nomeação do Fornecedor por -DocType: Activity Type,Default Costing Rate,Preço de Custo Padrão -DocType: Maintenance Schedule,Maintenance Schedule,Programação da Manutenção -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +163,"Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc.","Então Preços Regras são filtradas com base no Cliente, Grupo de Clientes, Território, fornecedor, fornecedor Tipo, Campanha, Parceiro de vendas etc" -DocType: Employee,Passport Number,Número do Passaporte -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +87,Manager,Gerente -apps/erpnext/erpnext/public/js/controllers/transaction.js +282, Qty increased by 1,Qtde aumentada em 1 -apps/erpnext/erpnext/selling/doctype/customer/customer.py +185,New credit limit is less than current outstanding amount for the customer. Credit limit has to be atleast {0},Novo limite de crédito é inferior ao saldo devedor atual do cliente. O limite de crédito deve ser de pelo menos {0} -apps/erpnext/erpnext/controllers/trends.py +39,'Based On' and 'Group By' can not be same,'Baseado em' e ' Agrupar por' não podem ser o mesmo -DocType: Sales Person,Sales Person Targets,Metas do Vendedor -DocType: Work Order Operation,In minutes,Em Minutos -DocType: Issue,Resolution Date,Data da Solução -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +339,Timesheet created:,Registro de Tempo criado: -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +1213,Please set default Cash or Bank account in Mode of Payment {0},Defina Caixa padrão ou conta bancária no Modo de pagamento {0} -DocType: Selling Settings,Customer Naming By,Nomeação de Cliente por -DocType: Depreciation Schedule,Depreciation Amount,Valor de Depreciação -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +105,Convert to Group,Converter em Grupo -DocType: BOM Operation,Base Hour Rate(Company Currency),Valor por Hora Base (moeda da empresa) -apps/erpnext/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py +48,Delivered Amount,Quantia entregue -DocType: Quotation Item,Item Balance,Saldo do item -DocType: Sales Invoice,Packing List,Lista de Remessa -apps/erpnext/erpnext/config/buying.py +28,Purchase Orders given to Suppliers.,Pedidos de Compra dados a fornecedores. -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +43,Publishing,Publishing -DocType: Activity Cost,Projects User,Usuário de Projetos -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +158,{0}: {1} not found in Invoice Details table,{0}: {1} não foi encontrado na tabela Detalhes da Fatura -DocType: Company,Round Off Cost Center,Centro de Custo de Arredondamento -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +257,Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Visita de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +243,Opening (Dr),Abertura (Dr) -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +37,Posting timestamp must be after {0},Postando timestamp deve ser posterior a {0} -DocType: Landed Cost Taxes and Charges,Landed Cost Taxes and Charges,Impostos e Encargos sobre custos de desembarque -DocType: Work Order Operation,Actual Start Time,Hora Real de Início -DocType: BOM Operation,Operation Time,Tempo da Operação -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +466,Finish,Finalizar -apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +1659,Write Off Amount,Valor do abatimento -DocType: Leave Block List Allow,Allow User,Permitir que o usuário -DocType: Journal Entry,Bill No,Nota nº -DocType: Company,Gain/Loss Account on Asset Disposal,Conta de Ganho / Perda com Descarte de Ativos -DocType: Selling Settings,Delivery Note Required,Guia de Remessa Obrigatória -DocType: BOM Item,Basic Rate (Company Currency),Valor Base (moeda da empresa) -DocType: Student Attendance,Student Attendance,Frequência do Aluno -DocType: Sales Invoice Timesheet,Time Sheet,Registro de Tempo -DocType: Manufacturing Settings,Backflush Raw Materials Based On,Confirmação de matérias-primas baseada em -DocType: Lead,Lead is an Organization,Cliente em Potencial é uma Empresa -apps/erpnext/erpnext/selling/doctype/customer/customer_dashboard.py +10,Pre Sales,Pré Venda -DocType: Instructor Log,Other Details,Outros detalhes -apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +18,Suplier,Fornecedor -DocType: Vehicle,Odometer Value (Last),Quilometragem do Odômetro (última) -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +382,Marketing,marketing -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +348,Payment Entry is already created,Entrada de pagamento já foi criada -DocType: Purchase Receipt Item Supplied,Current Stock,Estoque Atual -apps/erpnext/erpnext/controllers/accounts_controller.py +681,Row #{0}: Asset {1} does not linked to Item {2},Linha # {0}: Ativo {1} não vinculado ao item {2} -DocType: Account,Expenses Included In Valuation,Despesas Incluídas na Avaliação -,Absent Student Report,Relatório de Frequência do Aluno -DocType: Email Digest,Next email will be sent on:,Próximo email será enviado em: -apps/erpnext/erpnext/stock/doctype/item/item.py +725,Item has variants.,Item tem variantes. -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +65,Item {0} not found,Item {0} não foi encontrado -DocType: Bin,Stock Value,Valor do Estoque -apps/erpnext/erpnext/healthcare/page/appointment_analytic/appointment_analytic.js +54,Tree Type,Tipo de árvore -DocType: BOM Explosion Item,Qty Consumed Per Unit,Qtde Consumida por Unidade -DocType: Sales Invoice,Commission Rate (%),Percentual de Comissão (%) -DocType: Project,Estimated Cost,Custo estimado -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +7,Aerospace,Aeroespacial -DocType: Journal Entry,Credit Card Entry,Lançamento de Cartão de Crédito -apps/erpnext/erpnext/config/accounts.py +35,Company and Accounts,Empresas e Contas -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +85,In Value,Valor Entrada -DocType: Selling Settings,Close Opportunity After Days,Fechar Oportunidade Após Dias -DocType: Purchase Order,Supply Raw Materials,Abastecimento de Matérias-primas -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +10,Current Assets,Ativo Circulante -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +161,{0} is not a stock Item,{0} não é um item de estoque -DocType: Payment Entry,Received Amount (Company Currency),Total recebido (moeda da empresa) -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +192,Lead must be set if Opportunity is made from Lead,O Cliente em Potencial deve ser informado se a Oportunidade foi feita para um Cliente em Potencial. -apps/erpnext/erpnext/hr/doctype/holiday_list/holiday_list.py +30,Please select weekly off day,Por favor selecione dia de folga semanal -DocType: Work Order Operation,Planned End Time,Horário Planejado de Término -,Sales Person Target Variance Item Group-Wise,Variação de Público do Vendedor por Grupo de Item -apps/erpnext/erpnext/accounts/doctype/account/account.py +100,Account with existing transaction cannot be converted to ledger,Contas com transações existentes não pode ser convertidas em livro-razão -DocType: Delivery Note,Customer's Purchase Order No,Nº do Pedido de Compra do Cliente -apps/erpnext/erpnext/stock/reorder_item.py +194,Auto Material Requests Generated,Requisições de Material Geradas Automaticamente -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +184,You can not enter current voucher in 'Against Journal Entry' column,Você não pode lançar o comprovante atual na coluna 'Contra Entrada do Livro Diário' -apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +50,Reserved for manufacturing,Reservado para fabricação -DocType: Opportunity,Opportunity From,Oportunidade de -DocType: BOM,Website Specifications,Especificações do Site -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +23,{0}: From {0} of type {1},{0}: A partir de {0} do tipo {1} -apps/erpnext/erpnext/controllers/buying_controller.py +399,Row {0}: Conversion Factor is mandatory,Linha {0}: Fator de Conversão é obrigatório -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +353,"Multiple Price Rules exists with same criteria, please resolve conflict by assigning priority. Price Rules: {0}","Várias regras de preços existe com os mesmos critérios, por favor, resolver o conflito através da atribuição de prioridade. Regras Preço: {0}" -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +539,Cannot deactivate or cancel BOM as it is linked with other BOMs,Não é possível desativar ou cancelar BOM vez que está associada com outras BOMs -DocType: Item Attribute Value,Item Attribute Value,Item Atributo Valor -apps/erpnext/erpnext/config/selling.py +158,Sales campaigns.,Campanhas de vendas . -DocType: Project Task,Make Timesheet,Fazer Registro de Tempo -DocType: Sales Taxes and Charges Template,"Standard tax template that can be applied to all Sales Transactions. This template can contain list of tax heads and also other expense / income heads like ""Shipping"", ""Insurance"", ""Handling"" etc. - -#### Note - -The tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master. - -#### Description of Columns - -1. Calculation Type: - - This can be on **Net Total** (that is the sum of basic amount). - - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - - **Actual** (as mentioned). -2. Account Head: The Account ledger under which this tax will be booked -3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center. -4. Description: Description of the tax (that will be printed in invoices / quotes). -5. Rate: Tax rate. -6. Amount: Tax amount. -7. Total: Cumulative total to this point. -8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). -9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Template fiscal padrão que pode ser aplicada a todas as transações de vendas. Este modelo pode conter a lista de cabeças de impostos e também outros chefes despesa / receita como ""Frete"", ""Seguro"", ""Manutenção"" etc. - - #### Nota - - a taxa de imposto definir aqui será a taxa normal do IVA para todos os itens ** **. Se houver itens ** ** que têm taxas diferentes, eles devem ser adicionados no ** Imposto item ** tabela no item ** ** mestre. - - #### Descrição das Colunas - - 1. Tipo de Cálculo: - - Isto pode ser em ** Total Líquida ** (que é a soma da quantidade de base). - - ** Na linha anterior Total / Valor ** (para os impostos cumulativos ou encargos). Se você selecionar essa opção, o imposto será aplicado como uma percentagem da linha anterior (na tabela de impostos) ou montante total. - - ** ** Real (como indicado). - 2. Chefe da conta: A contabilidade conta em que este imposto será reservado - 3. Centro de Custo: Se o imposto / taxa é uma renda (como o transporte) ou despesa que precisa ser reservado contra um centro de custo. - 4. Descrição: Descrição do imposto (que será impresso em facturas / aspas). - 5. Classificação: Taxa de imposto. - 6. Valor: Valor das taxas. - 7. Total: Total acumulado até este ponto. - 8. Digite Row: Se baseado em ""Anterior Row Total"", você pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior). - 9. É este imposto incluído na Taxa Básica ?: Se você verificar isso, significa que este imposto não será exibido abaixo da tabela de item, mas será incluída na taxa básica em sua tabela item principal. Isso é útil quando você quer dar um preço fixo (incluindo todos os impostos) dos preços para os clientes." -DocType: Employee,Bank A/C No.,Nº Cta. Bancária -apps/erpnext/erpnext/stock/doctype/material_request/material_request_list.js +9,Partially Ordered,Parcialmente Comprados -apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +163,Doc Name,Nome do Documento -DocType: Expense Claim Detail,Expense Claim Type,Tipo de Pedido de Reembolso de Despesas -DocType: Shopping Cart Settings,Default settings for Shopping Cart,As configurações padrão para Carrinho de Compras -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +116,Office Maintenance Expenses,Despesas com Manutenção de Escritório -apps/erpnext/erpnext/config/learn.py +47,Setting up Email Account,Configurando Conta de Email -apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js +21,Please enter Item first,"Por favor, indique primeiro item" -DocType: Account,Liability,Passivo -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +228,Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Montante Liberado não pode ser maior do que no Pedido de Reembolso na linha {0}. -DocType: Company,Default Cost of Goods Sold Account,Conta de Custo Padrão de Mercadorias Vendidas -apps/erpnext/erpnext/stock/get_item_details.py +523,Price List not selected,Lista de Preço não selecionado -DocType: Employee,Family Background,Antecedentes familiares -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +810,No Permission,Nenhuma permissão -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +76,"To filter based on Party, select Party Type first","Para filtrar baseado em Sujeito, selecione o Tipo de Sujeito primeiro" -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +46,'Update Stock' can not be checked because items are not delivered via {0},"""Atualização do Estoque 'não pode ser verificado porque os itens não são entregues via {0}" -DocType: Vehicle,Acquisition Date,Data da Aquisição -apps/erpnext/erpnext/utilities/user_progress.py +146,Nos,Nos -DocType: Item,Items with higher weightage will be shown higher,Os itens com maior weightage será mostrado maior -DocType: Bank Reconciliation Detail,Bank Reconciliation Detail,Detalhe da conciliação bancária -apps/erpnext/erpnext/controllers/accounts_controller.py +685,Row #{0}: Asset {1} must be submitted,Linha # {0}: Ativo {1} deve ser apresentado -apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py +40,No employee found,Nenhum colaborador encontrado -DocType: Item,If subcontracted to a vendor,Se subcontratada a um fornecedor -DocType: SMS Center,All Customer Contact,Todo o Contato do Cliente -DocType: Location,Tree Details,Detalhes da árvore -DocType: Training Event,Event Status,Status do Evento -,Support Analytics,Análise de Pós-Vendas -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +410,"If you have any questions, please get back to us.","Se você tem alguma pergunta, por favor nos contate." -DocType: Item,Website Warehouse,Armazém do Site -DocType: Payment Reconciliation,Minimum Invoice Amount,Valor Mínimo da Fatura -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +367,Timesheet {0} is already completed or cancelled,O Registro de Tempo {0} está finalizado ou cancelado -apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.js +50,Score must be less than or equal to 5,Pontuação deve ser inferior ou igual a 5 -apps/erpnext/erpnext/config/accounts.py +298,C-Form records,Registros C-Form -DocType: Email Digest,Email Digest Settings,Configurações do Resumo por Email -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +412,Thank you for your business!,Obrigado pela compra! -apps/erpnext/erpnext/config/support.py +12,Support queries from customers.,Suporte às perguntas de clientes. -DocType: HR Settings,Retirement Age,Idade para Aposentadoria -DocType: Bin,Moving Average Rate,Taxa da Média Móvel -DocType: Production Plan,Select Items,Selecione Itens -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +408,{0} against Bill {1} dated {2},{0} contra duplicata {1} na data {2} -apps/erpnext/erpnext/education/doctype/course/course.js +17,Course Schedule,Agenda do Curso -DocType: Maintenance Visit,Completion Status,Status de Conclusão -DocType: HR Settings,Enter retirement age in years,Insira a idade da aposentadoria em anos -DocType: Crop,Target Warehouse,Armazén de Destino -DocType: Item,Allow over delivery or receipt upto this percent,Permitir entrega ou recebimento adicional até este percentual -DocType: Upload Attendance,Import Attendance,Importação de Ponto -apps/erpnext/erpnext/public/js/pos/pos.html +124,All Item Groups,Todos os grupos de itens -DocType: Work Order,Item To Manufacture,Item para Fabricação -apps/erpnext/erpnext/buying/utils.py +80,{0} {1} status is {2},O status {0} {1} é {2} -DocType: Shopping Cart Settings,Enable Checkout,Ativar Caixa -apps/erpnext/erpnext/config/learn.py +202,Purchase Order to Payment,Pedido de Compra para Pagamento -apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +48,Projected Qty,Qtde Projetada -DocType: Sales Invoice,Payment Due Date,Data de Vencimento -apps/erpnext/erpnext/stock/doctype/item/item.js +607,Item Variant {0} already exists with same attributes,Variant item {0} já existe com mesmos atributos -apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +153,'Opening','Abrindo' -apps/erpnext/erpnext/setup/doctype/email_digest/templates/default.html +130,Open To Do,Atribuições em aberto -DocType: Notification Control,Delivery Note Message,Mensagem da Guia de Remessa -DocType: Item Variant Attribute,Item Variant Attribute,Variant item Atributo -,Purchase Receipt Trends,Tendência de Recebimentos -DocType: Payroll Entry,Bimonthly,Bimestralmente -DocType: Vehicle Service,Brake Pad,Pedal de Freio -apps/erpnext/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.py +20,Amount to Bill,Valor a ser Faturado -DocType: Company,Registration Details,Detalhes de Registro -DocType: Item Reorder,Re-Order Qty,Qtde para Reposição -DocType: Leave Block List Date,Leave Block List Date,Deixe Data Lista de Bloqueios -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +101,BOM #{0}: Raw material cannot be same as main Item,LDM # {0}: A matéria-prima não pode ser igual ao item principal -DocType: SMS Log,Requested Numbers,Números solicitadas -DocType: Sales Invoice Item,Stock Details,Detalhes do Estoque -apps/erpnext/erpnext/config/selling.py +332,Point-of-Sale,Ponto de Vendas -DocType: Vehicle Log,Odometer Reading,Leitura do Odômetro -apps/erpnext/erpnext/accounts/doctype/account/account.py +123,"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","O saldo já está em crédito, você não tem a permissão para definir 'saldo deve ser' como 'débito'" -DocType: Account,Balance must be,O Saldo deve ser -DocType: Notification Control,Expense Claim Rejected Message,Mensagem de recusa do Pedido de Reembolso de Despesas -,Available Qty,Qtde Disponível -DocType: Purchase Invoice Item,Rejected Qty,Qtde Rejeitada -DocType: Salary Slip,Working Days,Dias úteis -DocType: Serial No,Incoming Rate,Valor de Entrada -apps/erpnext/erpnext/public/js/setup_wizard.js +110,The name of your company for which you are setting up this system.,O nome da sua empresa para a qual você está configurando o sistema. -DocType: HR Settings,Include holidays in Total no. of Working Days,Incluir feriados no total de dias de trabalho -DocType: Job Applicant,Hold,Segurar -DocType: Employee,Date of Joining,Data da Contratação -DocType: Supplier Quotation,Is Subcontracted,É subcontratada -DocType: Item Attribute,Item Attribute Values,Valores dos Atributos -,Received Items To Be Billed,"Itens Recebidos, mas não Faturados" -apps/erpnext/erpnext/config/accounts.py +271,Currency exchange rate master.,Cadastro de Taxa de Câmbio -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +322,Unable to find Time Slot in the next {0} days for Operation {1},Incapaz de encontrar entalhe Tempo nos próximos {0} dias para a Operação {1} -DocType: Work Order,Plan material for sub-assemblies,Material de Plano de sub-conjuntos -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +628,BOM {0} must be active,LDM {0} deve ser ativa -DocType: Journal Entry,Depreciation Entry,Lançamento de Depreciação -apps/erpnext/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.py +31,Please select the document type first,"Por favor, selecione o tipo de documento primeiro" -apps/erpnext/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.py +65,Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancelar Materiais Visitas {0} antes de cancelar este Manutenção Visita -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +218,Serial No {0} does not belong to Item {1},Serial Não {0} não pertence ao item {1} -DocType: Purchase Receipt Item Supplied,Required Qty,Qtde Requerida -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +32,Internet Publishing,Publishing Internet -apps/erpnext/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js +25,Creating {0} Invoice,Criando Fatura de {0} -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +89,Balance Value,Valor Patrimonial -apps/erpnext/erpnext/accounts/general_ledger.py +178,Please mention Round Off Account in Company,"Por favor, mencione completam Conta in Company" -DocType: Purchase Receipt,Range,Alcance -apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +52,Employee {0} is not active or does not exist,Colaborador {0} não está ativo ou não existe -DocType: Item Barcode,Item Barcode,Código de barras do Item -apps/erpnext/erpnext/stock/doctype/item/item.py +720,Item Variants {0} updated,Variante(s) do Item {0} atualizada(s) -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +994,Cannot {0} {1} {2} without any negative outstanding invoice,Não é possível {0} {1} {2} sem qualquer fatura pendente -DocType: Purchase Invoice Advance,Purchase Invoice Advance,Adiantamento da Fatura de Compra -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +231,Row {0}: Credit entry can not be linked with a {1},Linha {0}: Lançamento de crédito não pode ser relacionado a uma {1} -apps/erpnext/erpnext/config/accounts.py +214,Define budget for a financial year.,Defina orçamento para um ano fiscal. -DocType: Employee,Permanent Address Is,Endereço permanente é -DocType: Payment Terms Template,Payment Terms Template,Modelo de Termos de Pagamento -DocType: Employee,Exit Interview Details,Detalhes da Entrevista de Saída -DocType: Item,Is Purchase Item,É item de compra -DocType: GL Entry,Voucher Detail No,Nº do Detalhe do Comprovante -apps/erpnext/erpnext/public/js/account_tree_grid.js +223,Opening Date and Closing Date should be within same Fiscal Year,Abertura Data e Data de Fechamento deve estar dentro mesmo ano fiscal -DocType: Lead,Request for Information,Solicitação de Informação -,LeaderBoard,Ranking de Desempenho -apps/erpnext/erpnext/accounts/page/pos/pos.js +809,Sync Offline Invoices,Sincronizar Faturas Offline -DocType: Program Fee,Program Fee,Taxa do Programa -DocType: Material Request Item,Lead Time Date,Prazo de Entrega -DocType: Loan,Sanctioned,Liberada -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +179,Row #{0}: Please specify Serial No for Item {1},Linha # {0}: Favor especificar Sem Serial para item {1} -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +678,"For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.","Para os itens 'pacote de produtos ", Armazém, Serial e não há Batch Não será considerada a partir do' Packing List 'tabela. Se Warehouse e Batch Não são as mesmas para todos os itens de embalagem para qualquer item de 'Bundle Produto', esses valores podem ser inseridos na tabela do item principal, os valores serão copiados para 'Packing List' tabela." -DocType: Student Admission,Publish on website,Publicar no site -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +778,Supplier Invoice Date cannot be greater than Posting Date,A data da nota fiscal do fornecedor não pode ser maior do que data do lançamento -DocType: Purchase Invoice Item,Purchase Order Item,Item do Pedido de Compra -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +139,Indirect Income,Receita Indireta -DocType: Student Attendance Tool,Student Attendance Tool,Ferramenta de Presença dos Alunos -DocType: Cheque Print Template,Date Settings,Configurações de Data -DocType: SMS Center,Total Message(s),Total de mensagem(s) -DocType: Purchase Invoice,Additional Discount Percentage,Percentual de Desconto Adicional -DocType: Bank Reconciliation,Select account head of the bank where cheque was deposited.,Selecione a conta bancária onde o valor foi depositado. -DocType: Selling Settings,Allow user to edit Price List Rate in transactions,Permitir ao usuário editar Preço da Lista de Preços em transações -DocType: Pricing Rule,Max Qty,Qtde Máxima -apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +30,"Row {0}: Invoice {1} is invalid, it might be cancelled / does not exist. \ - Please enter a valid Invoice","Linha {0}: Fatura {1} é inválida, poderia ser cancelado / não existe. \ Por favor, indique uma fatura válida" -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +164,Row {0}: Payment against Sales/Purchase Order should always be marked as advance,Linha {0}: O pagamento relacionado a Pedidos de Compra/Venda deve ser sempre marcado como adiantamento -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +16,Chemical,Químico -DocType: BOM,Raw Material Cost(Company Currency),Custo da matéria-prima (moeda da empresa) -DocType: Workstation,Electricity Cost,Custo de Energia Elétrica -DocType: HR Settings,Don't send Employee Birthday Reminders,Não envie aos colaboradores lembretes de aniversários -DocType: Expense Claim,Total Advance Amount,Valor Total do Adiantamento -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +165,Walk In,Vitrine -DocType: BOM Website Item,BOM Website Item,LDM do Item do Site -apps/erpnext/erpnext/public/js/setup_wizard.js +52,Upload your letter head and logo. (you can edit them later).,Publique sua cabeça letra e logotipo. (Você pode editá-las mais tarde). -DocType: SMS Center,All Lead (Open),Todos os Clientes em Potencial em Aberto -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +352,Row {0}: Qty not available for {4} in warehouse {1} at posting time of the entry ({2} {3}),Linha {0}: Qtde não disponível do item {4} no armazén {1} no horário do lançamento ({2} {3}) -DocType: Purchase Invoice,Get Advances Paid,Obter adiantamentos pagos -DocType: Journal Entry,Total Amount in Words,Valor total por extenso -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +7,There was an error. One probable reason could be that you haven't saved the form. Please contact support@erpnext.com if the problem persists.,Houve um erro. Uma razão provável pode ser que você não tenha salvo o formulário. Entre em contato com support@erpnext.com se o problema persistir. -apps/erpnext/erpnext/templates/pages/cart.html +5,My Cart,Meu carrinho -apps/erpnext/erpnext/controllers/selling_controller.py +142,Order Type must be one of {0},Tipo de Ordem deve ser uma das {0} -DocType: Lead,Next Contact Date,Data do Próximo Contato -apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +36,Opening Qty,Qtde Abertura -DocType: Program Enrollment Tool Student,Student Batch Name,Nome da Série de Alunos -DocType: Holiday List,Holiday List Name,Nome da Lista de Feriados -DocType: Repayment Schedule,Balance Loan Amount,Saldo do Empréstimo -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +194,Stock Options,Opções de Compra -DocType: Journal Entry Account,Expense Claim,Pedido de Reembolso de Despesas -apps/erpnext/erpnext/assets/doctype/asset/asset.js +352,Do you really want to restore this scrapped asset?,Você realmente deseja restaurar este ativo descartado? -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +530,Qty for {0},Qtde para {0} -DocType: Leave Application,Leave Application,Solicitação de Licenças -DocType: Leave Block List,Leave Block List Dates,Deixe as datas Lista de Bloqueios -DocType: Workstation,Net Hour Rate,Valor Hora Líquido -DocType: Landed Cost Purchase Receipt,Landed Cost Purchase Receipt,Recibo de Compra do Custo de Desembarque -DocType: Packing Slip Item,Packing Slip Item,Item da Lista de Embalagem -DocType: Purchase Invoice,Cash/Bank Account,Conta do Caixa/Banco -DocType: Delivery Note,Delivery To,Entregar Para -apps/erpnext/erpnext/stock/doctype/item/item.py +774,Attribute table is mandatory,A tabela de atributos é obrigatório -DocType: Production Plan,Get Sales Orders,Obter Pedidos de Venda -DocType: Asset,Total Number of Depreciations,Número Total de Depreciações -DocType: Workstation,Wages,Salário -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +187,Please specify a valid Row ID for row {0} in table {1},"Por favor, especifique um ID válido para Row linha {0} na tabela {1}" -apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +23,Go to the Desktop and start using ERPNext,Vá para o ambiente de trabalho e começar a usar ERPNext -DocType: Landed Cost Item,Purchase Receipt Item,Item do Recibo de Compra -DocType: POS Profile,Sales Invoice Payment,Pagamento da Fatura de Venda -DocType: Production Plan Item,Reserved Warehouse in Sales Order / Finished Goods Warehouse,Armazém reservada no Pedido de Venda / Armazém de Produtos Acabados -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +69,Selling Amount,Valor de Venda -DocType: Serial No,Creation Document No,Número de Criação do Documento -DocType: Asset,Scrapped,Sucateada -DocType: Job Card,WIP Warehouse,Armazén de Trabalho em Andamento -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +195,Serial No {0} is under maintenance contract upto {1},Nº de Série {0} está sob contrato de manutenção até {1} -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +61,Item must be added using 'Get Items from Purchase Receipts' button,"O artigo deve ser adicionado usando ""Obter itens de recibos de compra 'botão" -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js +914,Delivery Trip,Viagem de Entrega -apps/erpnext/erpnext/patches/v4_0/create_price_list_if_missing.py +18,Standard Buying,Compra padrão -DocType: GL Entry,Against,Contra -DocType: Item Default,Default Selling Cost Center,Centro de Custo Padrão de Vendas -apps/erpnext/erpnext/accounts/page/pos/pos.js +1638,ZIP Code,CEP -apps/erpnext/erpnext/controllers/selling_controller.py +265,Sales Order {0} is {1},Pedido de Venda {0} é {1} -DocType: Opportunity,Contact Info,Informações para Contato -apps/erpnext/erpnext/config/stock.py +322,Making Stock Entries,Fazendo Lançamentos no Estoque -DocType: Packing Slip,Net Weight UOM,Unidade de Medida do Peso Líquido -DocType: Loan,Repayment Schedule,Agenda de Pagamentos -DocType: Shipping Rule Condition,Shipping Rule Condition,Regra Condições de envio -apps/erpnext/erpnext/hr/doctype/payroll_period/payroll_period.py +19,End Date can not be less than Start Date,Data final não pode ser inferior a data de início -DocType: Sales Person,Select company name first.,Selecione o nome da empresa por primeiro. -apps/erpnext/erpnext/config/buying.py +23,Quotations received from Suppliers.,Orçamentos recebidos de fornecedores. -apps/erpnext/erpnext/config/manufacturing.py +74,Replace BOM and update latest price in all BOMs,Substitua a LDM e atualize o preço mais recente em todas as LDMs -apps/erpnext/erpnext/utilities/user_progress.py +110,List a few of your suppliers. They could be organizations or individuals.,Lista de alguns de seus fornecedores. Eles podem ser empresas ou pessoas físicas. -apps/erpnext/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js +20,Minimum Lead Age (Days),Tempo de Cadastro Mínimo do Cliente em Potencial (dias) -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +60,All BOMs,Todas as LDMs -DocType: Asset Movement,From Employee,Do Colaborador -DocType: Driver,Cellphone Number,Número do celular -apps/erpnext/erpnext/controllers/accounts_controller.py +545,Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Aviso : O sistema não irá verificar superfaturamento uma vez que o valor para o item {0} em {1} é zero -DocType: Journal Entry,Make Difference Entry,Criar Lançamento de Contrapartida -DocType: Upload Attendance,Attendance From Date,Data Inicial de Comparecimento -DocType: Appraisal Template Goal,Key Performance Area,Área de performance principal -DocType: SMS Center,Total Characters,Total de Personagens -DocType: C-Form Invoice Detail,C-Form Invoice Detail,Detalhe Fatura do Formulário-C -DocType: Payment Reconciliation Invoice,Payment Reconciliation Invoice,Fatura da Conciliação de Pagamento -apps/erpnext/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.py +75,Contribution %,Contribuição% -DocType: Company,Company registration numbers for your reference. Tax numbers etc.,"Números de registro da empresa para sua referência. Exemplo: CNPJ, IE, etc" -DocType: Shopping Cart Shipping Rule,Shopping Cart Shipping Rule,Regra de Envio do Carrinho de Compras -apps/erpnext/erpnext/public/js/controllers/transaction.js +72,Please set 'Apply Additional Discount On',"Por favor, defina "Aplicar desconto adicional em '" -,Ordered Items To Be Billed,"Itens Vendidos, mas não Faturados" -apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +46,From Range has to be less than To Range,De Gama tem de ser inferior à gama -DocType: Global Defaults,Global Defaults,Padrões Globais -apps/erpnext/erpnext/projects/doctype/project/project.py +291,Project Collaboration Invitation,Convite para Colaboração em Projeto -DocType: Purchase Invoice,Start date of current invoice's period,Data de início do período de fatura atual -DocType: Salary Slip,Leave Without Pay,Licença não remunerada -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +366,Capacity Planning Error,Erro de Planejamento de Capacidade -,Trial Balance for Party,Balancete para o Sujeito -DocType: Salary Slip,Earnings,Ganhos -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +538,Finished Item {0} must be entered for Manufacture type entry,O Item finalizado {0} deve ser digitado para a o lançamento de tipo de fabricação -apps/erpnext/erpnext/config/learn.py +87,Opening Accounting Balance,Saldo de Abertura da Conta -DocType: Sales Invoice Advance,Sales Invoice Advance,Adiantamento da Fatura de Venda -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +552,Nothing to request,Nada para pedir -DocType: Payroll Entry,Employee Details,Detalhes do Funcionário -apps/erpnext/erpnext/projects/doctype/task/task.py +44,'Actual Start Date' can not be greater than 'Actual End Date',A 'Data de Início Real' não pode ser maior que a 'Data Final Real' -DocType: Cheque Print Template,Payer Settings,Configurações do Pagador -DocType: Item Attribute Value,"This will be appended to the Item Code of the variant. For example, if your abbreviation is ""SM"", and the item code is ""T-SHIRT"", the item code of the variant will be ""T-SHIRT-SM""","Isso vai ser anexado ao Código do item da variante. Por exemplo, se a sua abreviatura é ""SM"", e o código do item é ""t-shirt"", o código do item da variante será ""T-shirt-SM""" -DocType: Salary Slip,Net Pay (in words) will be visible once you save the Salary Slip.,Pagamento líquido (por extenso) será visível quando você salvar a folha de pagamento. -DocType: Delivery Note,Is Return,É Devolução -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +893,Return / Debit Note,Devolução / Nota de Débito -DocType: Price List Country,Price List Country,Preço da lista País -DocType: Item,UOMs,Unidades de Medida -apps/erpnext/erpnext/stock/utils.py +236,{0} valid serial nos for Item {1},{0} números de série válidos para o item {1} -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +61,Item Code cannot be changed for Serial No.,Código do item não pode ser alterado para o nº de série. -DocType: Purchase Invoice Item,UOM Conversion Factor,Fator de Conversão da Unidade de Medida -DocType: Stock Settings,Default Item Group,Grupo de Itens padrão -apps/erpnext/erpnext/config/buying.py +38,Supplier database.,Banco de dados do fornecedor. -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +797,Cost Center For Item with Item Code ',Centro de Custos para Item com Código ' -apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +30,"Further accounts can be made under Groups, but entries can be made against non-Groups","Outras contas podem ser feitas em Grupos, mas as entradas podem ser feitas contra os Não-Grupos" -DocType: Lead,Lead,Cliente em Potencial -DocType: Email Digest,Payables,Contas a Pagar -apps/erpnext/erpnext/stock/doctype/batch/batch.js +105,Stock Entry {0} created,Lançamento de Estoque {0} criado -apps/erpnext/erpnext/controllers/buying_controller.py +405,Row #{0}: Rejected Qty can not be entered in Purchase Return,Linha # {0}: Qtde rejeitada não pode ser lançada na devolução da compra -,Purchase Order Items To Be Billed,"Itens Comprados, mas não Faturados" -DocType: Purchase Invoice Item,Purchase Invoice Item,Item da Fatura de Compra -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +58,Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts,Banco de Ledger Entradas e GL As entradas são reenviados para os recibos de compra selecionados -apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +8,Item 1,Número 1 -DocType: Holiday,Holiday,Feriado -DocType: Support Settings,Close Issue After Days,Fechar Incidente Após Dias -DocType: Leave Control Panel,Leave blank if considered for all branches,Deixe em branco se considerado para todos os ramos -apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +21,C-form is not applicable for Invoice: {0},C-forma não é aplicável para a fatura: {0} -DocType: Payment Reconciliation,Unreconciled Payment Details,Detalhes do Pagamento não Conciliado -DocType: Purchase Invoice,Disable Rounded Total,Desativar total arredondado -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +486,'Entries' cannot be empty,'Entradas' não pode estar vazio -apps/erpnext/erpnext/config/hr.py +394,Setting up Employees,Configurando Colaboradores -apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py +165,Please select prefix first,Por favor selecione o prefixo primeiro -DocType: Maintenance Visit Purpose,Work Done,Trabalho Feito -apps/erpnext/erpnext/controllers/item_variant.py +35,Please specify at least one attribute in the Attributes table,Especifique pelo menos um atributo na tabela de atributos -apps/erpnext/erpnext/assets/doctype/asset/asset.py +56,Item {0} must be a non-stock item,Item {0} deve ser um item não inventariado -apps/erpnext/erpnext/stock/doctype/batch/batch.js +18,View Ledger,Ver Livro Razão -apps/erpnext/erpnext/stock/report/stock_ageing/stock_ageing.py +42,Earliest,Mais antigas -apps/erpnext/erpnext/stock/doctype/item/item.py +557,"An Item Group exists with same name, please change the item name or rename the item group","Um grupo de itens existe com o mesmo nome, por favor, mude o nome do item ou mude o nome do grupo de itens" -apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py +52,Student Mobile No.,Celular do Aluno -apps/erpnext/erpnext/education/report/absent_student_report/absent_student_report.py +52,Student Mobile No.,Celular do Aluno -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +105,Rest Of The World,Resto do Mundo -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +81,The Item {0} cannot have Batch,O item {0} não pode ter Batch -,Budget Variance Report,Relatório de Variação de Orçamento -apps/erpnext/erpnext/buying/doctype/supplier/supplier.js +39,Accounting Ledger,Registro Contábil -DocType: Asset Value Adjustment,Difference Amount,Total da diferença -DocType: Vehicle Log,Service Detail,Detalhes da Manutenção do Veículo -DocType: Student Sibling,Student Sibling,Irmão do Aluno -apps/erpnext/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py +20,Payment Mode,Forma de Pagamento -DocType: Purchase Invoice,Supplied Items,Itens fornecidos -DocType: Work Order,Qty To Manufacture,Qtde para Fabricar -DocType: Email Digest,New Income,Novas Receitas -DocType: Buying Settings,Maintain same rate throughout purchase cycle,Manter o mesmo valor através de todo o ciclo de compra -DocType: Opportunity Item,Opportunity Item,Item da Oportunidade -,Employee Leave Balance,Saldo de Licenças do Colaborador -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +148,Balance for Account {0} must always be {1},Saldo da Conta {0} deve ser sempre {1} -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +181,Valuation Rate required for Item in row {0},Taxa de avaliação exigida para o Item na linha {0} -DocType: Purchase Invoice,Rejected Warehouse,Armazén de Itens Rejeitados -DocType: GL Entry,Against Voucher,Contra o Comprovante -DocType: Item Default,Default Buying Cost Center,Centro de Custo Padrão de Compra -apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +6,"To get the best out of ERPNext, we recommend that you take some time and watch these help videos.","Para tirar o melhor proveito do ERPNext, recomendamos que você dedique algum tempo para assistir a esses vídeos de ajuda." -DocType: Supplier Quotation Item,Lead Time in days,Prazo de Entrega (em dias) -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +83,Accounts Payable Summary,Resumo do Contas a Pagar -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +214,Not authorized to edit frozen Account {0},Não autorizado para editar conta congelada {0} -DocType: Journal Entry,Get Outstanding Invoices,Obter notas pendentes -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +84,Sales Order {0} is not valid,Pedido de Venda {0} não é válido -DocType: Supplier Scorecard,Warn for new Request for Quotations,Avisar ao criar novas solicitações de orçamentos -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +164,"The total Issue / Transfer quantity {0} in Material Request {1} \ - cannot be greater than requested quantity {2} for Item {3}",A quantidade total Saída / Transferir {0} na Requisição de Material {1} \ não pode ser maior do que a quantidade solicitada {2} para o Item {3} -DocType: Education Settings,Employee Number,Número do Colaborador -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +67,Case No(s) already in use. Try from Case No {0},Processo n º (s) já está em uso . Tente de Processo n {0} -,Invoiced Amount (Exculsive Tax),Valor Faturado (Sem Impostos) -apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +14,Item 2,Número 2 -DocType: Training Event,Training Event,Evento de Treinamento -DocType: Item,Auto re-order,Reposição Automática -apps/erpnext/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py +59,Total Achieved,Total de Alcançados -DocType: Employee,Place of Issue,Local de Envio -DocType: Email Digest,Add Quote,Adicionar Citar -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +1246,UOM coversion factor required for UOM: {0} in Item: {1},Fator de Conversão de Unidade de Medida é necessário para Unidade de Medida: {0} no Item: {1} -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +128,Row {0}: Qty is mandatory,Linha {0}: Qtde é obrigatória -apps/erpnext/erpnext/accounts/page/pos/pos.js +801,Sync Master Data,Sincronizar com o Servidor -apps/erpnext/erpnext/utilities/user_progress.py +138,Your Products or Services,Seus Produtos ou Serviços -DocType: Bank Statement Transaction Payment Item,Mode of Payment,Forma de Pagamento -apps/erpnext/erpnext/stock/doctype/item/item.py +231,Website Image should be a public file or website URL,Site de imagem deve ser um arquivo público ou URL do site -apps/erpnext/erpnext/setup/doctype/item_group/item_group.js +71,This is a root item group and cannot be edited.,Este é um grupo de itens de raiz e não pode ser editada. -DocType: Journal Entry Account,Purchase Order,Pedido de Compra -DocType: Vehicle,Fuel UOM,UDM do Combustível -DocType: Warehouse,Warehouse Contact Info,Informações de Contato do Armazén -DocType: Payment Entry,Write Off Difference Amount,Valor da diferença do abatimento -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +535,"{0}: Employee email not found, hence email not sent","{0}: Email do colaborador não encontrado, portanto o email não foi enviado" -DocType: Email Digest,Annual Income,Receita Anual -DocType: Serial No,Serial No Details,Detalhes do Nº de Série -DocType: Purchase Invoice Item,Item Tax Rate,Alíquota do Imposto do Item -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +177,"For {0}, only credit accounts can be linked against another debit entry","Por {0}, apenas as contas de crédito pode ser ligado contra outro lançamento de débito" -apps/erpnext/erpnext/stock/get_item_details.py +167,Item {0} must be a Sub-contracted Item,Item {0} deve ser um item do sub- contratados -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +44,Capital Equipments,Bens de Capital -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +33,"Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.","Regra de Preços é o primeiro selecionado com base em ""Aplicar On 'campo, que pode ser Item, item de grupo ou Marca." -apps/erpnext/erpnext/regional/report/eway_bill/eway_bill.py +157,Doc Type,Tipo do Documento -apps/erpnext/erpnext/controllers/selling_controller.py +135,Total allocated percentage for sales team should be 100,Porcentagem total alocado para a equipe de vendas deve ser de 100 -,Team Updates,Updates da Equipe -apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.js +39,For Supplier,Para Fornecedor -DocType: Account,Setting Account Type helps in selecting this Account in transactions.,Definir o Tipo de Conta ajuda na seleção desta Conta nas transações. -DocType: Purchase Invoice,Grand Total (Company Currency),Total geral (moeda da empresa) -apps/erpnext/erpnext/utilities/bot.py +39,Did not find any item called {0},Não havia nenhuma item chamado {0} -apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +39,"There can only be one Shipping Rule Condition with 0 or blank value for ""To Value""","Só pode haver uma regra de envio Condição com 0 ou valor em branco para "" To Valor """ -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +76,Note: This Cost Center is a Group. Cannot make accounting entries against groups.,Nota: Este Centro de Custo é um grupo . Não pode fazer lançamentos contábeis contra grupos . -DocType: Item,Website Item Groups,Grupos de Itens do Site -DocType: Purchase Invoice,Total (Company Currency),Total (moeda da empresa) -apps/erpnext/erpnext/stock/utils.py +231,Serial number {0} entered more than once,Número de série {0} entrou mais de uma vez -DocType: Bank Statement Transaction Invoice Item,Journal Entry,Lançamento no Livro Diário -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +269,{0} items in progress,{0} itens em andamento -DocType: Workstation,Workstation Name,Nome da Estação de Trabalho -DocType: Grading Scale Interval,Grade Code,Código de Nota de Avaliação -DocType: POS Item Group,POS Item Group,Grupo de Itens PDV -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +17,Email Digest:,Resumo por Email: -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +644,BOM {0} does not belong to Item {1},A LDM {0} não pertencem ao Item {1} -DocType: Sales Partner,Target Distribution,Distribuição de metas -DocType: Salary Slip,Bank Account No.,Nº Conta Bancária -DocType: Naming Series,This is the number of the last created transaction with this prefix,Este é o número da última transação criada com este prefixo -DocType: Accounts Settings,Book Asset Depreciation Entry Automatically,Lançar de Depreciação de Ativos no Livro Automaticamente -DocType: BOM Operation,Workstation,Estação de Trabalho -DocType: Request for Quotation Supplier,Request for Quotation Supplier,Solicitação de Orçamento para Fornecedor -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +120,Hardware,Ferramentas -DocType: Contract,HR Manager,Gerente de RH -apps/erpnext/erpnext/accounts/party.py +196,Please select a Company,"Por favor, selecione uma empresa" -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +70,Privilege Leave,Privilege Deixar -DocType: Purchase Invoice,Supplier Invoice Date,Data de emissão da nota fiscal de compra -DocType: Stock Settings,Naming Series Prefix,Prefixo do código de documentos -DocType: Appraisal Template Goal,Appraisal Template Goal,Meta do Modelo de Avaliação -DocType: Salary Component,Earning,Ganho -DocType: Purchase Invoice,Party Account Currency,Moeda do Sujeito -,BOM Browser,Navegador de LDM -DocType: Purchase Taxes and Charges,Add or Deduct,Adicionar ou Reduzir -apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +148,Overlapping conditions found between:,Condições sobreposição encontradas entre : -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +188,Against Journal Entry {0} is already adjusted against some other voucher,Contra Journal Entry {0} já é ajustado contra algum outro comprovante -apps/erpnext/erpnext/demo/setup/setup_data.py +341,Food,Alimentos -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +42,Ageing Range 3,Faixa de Envelhecimento 3 -apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +33,Currency of the Closing Account must be {0},Moeda da Conta de encerramento deve ser {0} -apps/erpnext/erpnext/hr/doctype/appraisal_template/appraisal_template.py +21,Sum of points for all goals should be 100. It is {0},Soma de pontos para todos os objetivos deve inteirar 100. (valor atual: {0}) -DocType: Project,Start and End Dates,Datas de início e término -,Delivered Items To Be Billed,"Itens Entregues, mas não Faturados" -apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +16,Open BOM {0},Abrir LDM {0} -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +64,Warehouse cannot be changed for Serial No.,Armazém não pode ser alterado para nº serial. -DocType: Purchase Invoice Item,UOM,UDM -DocType: Rename Tool,Utilities,Serviços Públicos -DocType: Asset,Depreciation Schedules,Tabelas de Depreciação -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +104,Application period cannot be outside leave allocation period,Período de aplicação não pode estar fora do período de atribuição de licença -DocType: Payment Request,Transaction Currency,Moeda de transação -apps/erpnext/erpnext/controllers/buying_controller.py +34,From {0} | {1} {2},A partir de {0} | {1} {2} -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +34,Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Não é possível alterar o Ano Fiscal Data de Início e Data de Fim Ano Fiscal uma vez que o Ano Fiscal é salvo. -apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +42,Avg Daily Outgoing,Média Diária de Saída -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +64,Approval Status must be 'Approved' or 'Rejected',"Status de Aprovação deve ser ""Aprovado"" ou ""Rejeitado""" -DocType: Purchase Invoice,Contact Person,Pessoa de Contato -apps/erpnext/erpnext/projects/doctype/task/task.py +41,'Expected Start Date' can not be greater than 'Expected End Date','Data de Início Esperada' não pode ser maior que 'Data Final Esperada' -DocType: Holiday List,Holidays,Feriados -DocType: Sales Order Item,Planned Quantity,Quantidade Planejada -DocType: Purchase Invoice Item,Item Tax Amount,Valor do Imposto do Item -DocType: Item,Maintain Stock,Manter Estoque -apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +92,Net Change in Fixed Asset,Variação Líquida do Ativo Imobilizado -DocType: Leave Control Panel,Leave blank if considered for all designations,Deixe em branco se considerado para todas as designações -apps/erpnext/erpnext/controllers/accounts_controller.py +892,Charge of type 'Actual' in row {0} cannot be included in Item Rate,Charge do tipo ' real ' na linha {0} não pode ser incluído no item Taxa -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +531,Max: {0},Max: {0} -apps/erpnext/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py +24,From Datetime,A partir da data e hora -apps/erpnext/erpnext/config/support.py +17,Communication log.,Log de Comunicação. -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +70,Buying Amount,Valor de Compra -DocType: Sales Invoice,Shipping Address Name,Endereço de Entrega -DocType: Material Request,Terms and Conditions Content,Conteúdo dos Termos e Condições -apps/erpnext/erpnext/stock/doctype/item/item.py +830,Item {0} is not a stock Item,Item {0} não é um item de estoque -DocType: Maintenance Visit,Unscheduled,Sem Agendamento -DocType: Salary Component,Depends on Leave Without Pay,Depende de licença sem vencimento -,Purchase Invoice Trends,Tendência de Faturas de Compra -DocType: Employee,Better Prospects,Melhores clientes prospectados -DocType: Vehicle,License Plate,Placa do Veículo -DocType: Appraisal,Goals,Metas -apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +399,Select POS Profile,Selecione o perfil do PDV -DocType: Warranty Claim,Warranty / AMC Status,Garantia / Status do CAM -DocType: GL Entry,GL Entry,Lançamento GL -DocType: HR Settings,Employee Settings,Configurações de Colaboradores -,Batch-Wise Balance History,Balanço por Histórico de Lotes -DocType: Package Code,Package Code,Código do pacote -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +106,Negative Quantity is not allowed,Negativo Quantidade não é permitido -DocType: Purchase Invoice Item,"Tax detail table fetched from item master as a string and stored in this field. -Used for Taxes and Charges",Detalhe da tabela de imposto obtido a partir do cadastro do item como texto e armazenado neste campo. Usado para Tributos e Encargos -apps/erpnext/erpnext/hr/doctype/employee/employee.py +171,Employee cannot report to himself.,Colaborador não pode denunciar a si mesmo. -DocType: Account,"If the account is frozen, entries are allowed to restricted users.","Se a conta for congelada, os lançamentos só serão permitidos aos usuários restritos." -apps/erpnext/erpnext/accounts/party.py +269,Accounting Entry for {0}: {1} can only be made in currency: {2},Contabilidade de entrada para {0}: {1} só pode ser feito em moeda: {2} -DocType: Job Opening,"Job profile, qualifications required etc.","Perfil da vaga, qualificações exigidas, etc." -DocType: Journal Entry Account,Account Balance,Saldo da conta -apps/erpnext/erpnext/config/accounts.py +179,Tax Rule for transactions.,Regra de imposto para transações. -DocType: Rename Tool,Type of document to rename.,Tipo de documento a ser renomeado. -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +53,{0} {1}: Customer is required against Receivable account {2},{0} {1}: Um cliente é necessário contra contas a receber {2} -DocType: Purchase Invoice,Total Taxes and Charges (Company Currency),Total de impostos e taxas (moeda da empresa) -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +93,{0} {1}: Account {2} is inactive,{0} {1}: Conta {2} está inativa -DocType: BOM,Scrap Material Cost(Company Currency),Custo de material de sucata (moeda da empresa) -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +44,Sub Assemblies,Subconjuntos -DocType: Shipping Rule Condition,To Value,Para o Valor -DocType: Asset Movement,Stock Manager,Gerente de Estoque -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +250,Source warehouse is mandatory for row {0},O armazén de origem é obrigatório para a linha {0} -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.js +919,Packing Slip,Lista de Embalagem -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +117,Office Rent,Aluguel do Escritório -apps/erpnext/erpnext/config/setup.py +105,Setup SMS gateway settings,Configurações de gateway SMS Setup -apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.js +61,Import Failed!,Falha na Importação! -apps/erpnext/erpnext/public/js/templates/address_list.html +20,No address added yet.,Nenhum endereço adicionado ainda. -DocType: Workstation Working Hour,Workstation Working Hour,Hora de Trabalho da Estação de Trabalho -DocType: Item,Sales Details,Detalhes de Vendas -apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +37,In Qty,Qtde Entrada -DocType: Notification Control,Expense Claim Rejected,Pedido de Reembolso de Despesas Rejeitado -DocType: Item,Item Attribute,Atributos do Item -apps/erpnext/erpnext/config/stock.py +312,Item Variants,Variantes dos Itens -DocType: HR Settings,Email Salary Slip to Employee,Enviar contracheque para colaborador via email -DocType: Cost Center,Parent Cost Center,Centro de Custo pai -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +1098,Select Possible Supplier,Selecione Possível Fornecedor -DocType: Sales Invoice,Source,Origem -apps/erpnext/erpnext/templates/pages/projects.html +31,Show closed,Mostrar fechados -DocType: Leave Type,Is Leave Without Pay,É Licença não remunerada -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +146,No records found in the Payment table,Nenhum registro encontrado na tabela de pagamento -DocType: Student Attendance Tool,Students HTML,Alunos HTML -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +300,Packing Slip(s) cancelled,Lista(s) de embalagem cancelada(s) -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +106,Freight and Forwarding Charges,Frete e Encargos de Envio -DocType: Homepage,Company Tagline for website homepage,O Slogan da Empresa para página inicial do site -DocType: Item Group,Item Group Name,Nome do Grupo de Itens -DocType: Pricing Rule,For Price List,Para Lista de Preço -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +27,Executive Search,Executive Search -apps/erpnext/erpnext/utilities/activation.py +63,Create Leads,Criar Clientes em Potencial -apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +515,POS Profile is required to use Point-of-Sale,Perfil do PDV é necessário para usar o ponto de venda -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +139,{0} {1} has not been submitted so the action cannot be completed,{0} {1} não foi enviado então a ação não pode ser concluída -DocType: Purchase Order Item Supplied,BOM Detail No,Nº do detalhe da LDM -DocType: Landed Cost Voucher,Additional Charges,Encargos Adicionais -DocType: Purchase Invoice,Additional Discount Amount (Company Currency),Total do desconto adicional (moeda da empresa) -DocType: Supplier Scorecard,Supplier Scorecard,Scorecard do Fornecedor -DocType: Sales Invoice Item,Available Batch Qty at Warehouse,Qtde Disponível do Lote no Armazén -apps/erpnext/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js +9,Update Print Format,Atualizar Formato de Impressão -DocType: Landed Cost Voucher,Landed Cost Help,Custo de Desembarque Ajuda -DocType: Purchase Invoice,Select Shipping Address,Selecione um Endereço de Entrega -DocType: Leave Block List,Block Holidays on important days.,Bloco Feriados em dias importantes. -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.js +142,Accounts Receivable Summary,Resumo do Contas a Receber -DocType: Loan,Monthly Repayment Amount,Valor da Parcela Mensal -apps/erpnext/erpnext/hr/doctype/employee/employee.py +218,Please set User ID field in an Employee record to set Employee Role,"Por favor, defina o campo ID do usuário em um registro de empregado para definir Função Funcionário" -DocType: UOM,UOM Name,Nome da Unidade de Medida -apps/erpnext/erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.py +87,Contribution Amount,Contribuição Total -DocType: Purchase Invoice,Shipping Address,Endereço para Entrega -DocType: Stock Reconciliation,This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.,Esta ferramenta ajuda você a atualizar ou corrigir a quantidade ea valorização das ações no sistema. Ele é geralmente usado para sincronizar os valores do sistema e que realmente existe em seus armazéns. -DocType: Delivery Note,In Words will be visible once you save the Delivery Note.,Por extenso será visível quando você salvar a Guia de Remessa. -DocType: Purchase Receipt,Transporter Details,Detalhes da Transportadora -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +1095,Possible Supplier,Possível Fornecedor -apps/erpnext/erpnext/selling/doctype/sms_center/sms_center.py +72,Receiver List is empty. Please create Receiver List,"Lista Receiver está vazio. Por favor, crie Lista Receiver" -apps/erpnext/erpnext/public/js/setup_wizard.js +31,Healthcare (beta),Serviço de Saúde (beta) -DocType: Production Plan Sales Order,Production Plan Sales Order,Pedido de Venda do Plano de Produção -DocType: Sales Partner,Sales Partner Target,Metas do Parceiro de Vendas -DocType: Loan Type,Maximum Loan Amount,Valor Máximo de Empréstimo -DocType: Pricing Rule,Pricing Rule,Regra de Preços -apps/erpnext/erpnext/config/learn.py +197,Material Request to Purchase Order,Requisição de Material para Pedido de Compra -DocType: Shopping Cart Settings,Payment Success URL,URL de Confirmação de Pagamento -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +79,Row # {0}: Returned Item {1} does not exists in {2} {3},Linha # {0}: Item devolvido {1} não existe em {2} {3} -,Bank Reconciliation Statement,Extrato Bancário Conciliado -,Lead Name,Nome do Cliente em Potencial -,POS,PDV -apps/erpnext/erpnext/config/stock.py +317,Opening Stock Balance,Saldo de Abertura do Estoque -apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +58,{0} must appear only once,{0} deve aparecer apenas uma vez -apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py +59,Leaves Allocated Successfully for {0},Folhas atribuídos com sucesso para {0} -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +42,No Items to pack,Nenhum item para embalar -DocType: Shipping Rule Condition,From Value,De Valor -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +717,Manufacturing Quantity is mandatory,Manufacturing Quantidade é obrigatório -DocType: Products Settings,"If checked, the Home page will be the default Item Group for the website","Se for selecionado, a Página Inicial será o Grupo de Itens padrão do site" -DocType: Company,Default Holiday List,Lista Padrão de Feriados -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +152,Stock Liabilities,Passivo Estoque -DocType: Purchase Invoice,Supplier Warehouse,Armazén do Fornecedor -DocType: Opportunity,Contact Mobile No,Celular do Contato -,Material Requests for which Supplier Quotations are not created,"Itens Requisitados, mas não Cotados" -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +191,The day(s) on which you are applying for leave are holidays. You need not apply for leave.,No dia (s) em que você está se candidatando a licença são feriados. Você não precisa solicitar uma licença. -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +21,Resend Payment Email,Reenviar email de pagamento -apps/erpnext/erpnext/templates/pages/projects.html +27,New task,Nova Tarefa -apps/erpnext/erpnext/config/education.py +230,Other Reports,Relatórios Adicionais -apps/erpnext/erpnext/stock/doctype/item/item.py +475,Conversion factor for default Unit of Measure must be 1 in row {0},Fator de conversão de unidade de medida padrão deve ser 1 na linha {0} -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +257,Leave of type {0} cannot be longer than {1},Deixar do tipo {0} não pode ser maior que {1} -DocType: Manufacturing Settings,Try planning operations for X days in advance.,Tente planejar operações para X dias de antecedência. -DocType: HR Settings,Stop Birthday Reminders,Interromper lembretes de aniversários -DocType: SMS Center,Receiver List,Lista de recebedores -apps/erpnext/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py +47,Consumed Amount,Quantidade Consumida -apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +69,Net Change in Cash,Variação Líquida em Dinheiro -DocType: Assessment Plan,Grading Scale,Escala de avaliação -apps/erpnext/erpnext/stock/doctype/item/item.py +469,Unit of Measure {0} has been entered more than once in Conversion Factor Table,Unidade de Medida {0} foi inserida mais de uma vez na Tabela de Conversão de Fator -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +617,Already completed,Já concluído -apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.js +64,Import Successful!,Importação Realizada com Sucesso! -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +35,Payment Request already exists {0},Pedido de Pagamento já existe {0} -apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +27,Cost of Issued Items,Custo dos Produtos Enviados -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +534,Quantity must not be more than {0},Quantidade não deve ser mais do que {0} -apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +120,Previous Financial Year is not closed,O Ano Financeiro Anterior não está fechado -DocType: Quotation Item,Quotation Item,Item do Orçamento -apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +536,From Date cannot be greater than To Date,A partir de data não pode ser maior que a Data -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +203,Serial No {0} quantity {1} cannot be a fraction,Serial Não {0} {1} quantidade não pode ser uma fração -DocType: Purchase Order Item,Supplier Part Number,Número da Peça do Fornecedor -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +227,{0} {1} is cancelled or stopped,{0} {1} está cancelado ou parado -DocType: Accounts Settings,Credit Controller,Controlador de crédito -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +267,Purchase Receipt {0} is not submitted,Recibo de compra {0} não é enviado -DocType: Company,Default Payable Account,Contas a Pagar Padrão -apps/erpnext/erpnext/config/website.py +17,"Settings for online shopping cart such as shipping rules, price list etc.","Configurações do carrinho de compras on-line, tais como regras de navegação, lista de preços etc." -apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +73,Reserved Qty,Qtde Reservada -DocType: Party Account,Party Account,Conta do Sujeito -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +216,Upper Income,Alta Renda -DocType: Journal Entry Account,Debit in Company Currency,Débito em moeda da empresa -DocType: Appraisal,For Employee,Para o Colaborador -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +170,Row {0}: Advance against Supplier must be debit,Linha {0}: Adiantamento relacionado com o fornecedor deve ser um débito -DocType: Expense Claim,Total Amount Reimbursed,Quantia total reembolsada -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +118,Against Supplier Invoice {0} dated {1},Relacionado à nota fiscal do fornecedor nº {0} emitida em {1} -apps/erpnext/erpnext/assets/doctype/asset/asset.py +492,Asset Movement record {0} created,Registro de Movimentação de Ativos {0} criado -DocType: Journal Entry,Entry Type,Tipo de Lançamento -,Customer Credit Balance,Saldo de Crédito do Cliente -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +42,Customer required for 'Customerwise Discount',Necessário para ' Customerwise Discount ' Cliente -apps/erpnext/erpnext/config/accounts.py +136,Update bank payment dates with journals.,Atualizar datas de pagamento bancário com livro Diário. -apps/erpnext/erpnext/selling/doctype/customer/customer_dashboard.py +26,Pricing,Precificação -DocType: Quotation,Term Details,Detalhes dos Termos -apps/erpnext/erpnext/education/doctype/student_group/student_group.py +30,Cannot enroll more than {0} students for this student group.,Não é possível inscrever mais de {0} alunos neste grupo de alunos. -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +17,Lead Count,Contagem de Clientes em Potencial -DocType: Manufacturing Settings,Capacity Planning For (Days),Planejamento de capacidade para (Dias) -apps/erpnext/erpnext/buying/doctype/supplier/supplier_dashboard.py +10,Procurement,Cotação -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +67,None of the items have any change in quantity or value.,Nenhum dos itens tiver qualquer mudança na quantidade ou valor. -,Lead Details,Detalhes do Cliente em Potencial -DocType: Salary Slip,Loan repayment,Pagamento do empréstimo -DocType: Purchase Invoice,End date of current invoice's period,Data final do período de fatura atual -DocType: Pricing Rule,Applicable For,Aplicável -apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py +16,Current Odometer reading entered should be greater than initial Vehicle Odometer {0},A quilometragem atual deve ser superior à quilometragem inicial Veículo {0} -DocType: Shipping Rule Country,Shipping Rule Country,Regra envio País -DocType: Maintenance Visit,Partially Completed,Parcialmente Concluída -DocType: Leave Type,Include holidays within leaves as leaves,Incluir feriados dentro de licenças como licenças -DocType: Sales Invoice,Packed Items,Pacotes de Itens -apps/erpnext/erpnext/config/support.py +27,Warranty Claim against Serial No.,Reclamação de Garantia contra nº de Série -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +237,'Total','Total' -DocType: Employee,Permanent Address,Endereço permanente -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +292,"Advance paid against {0} {1} cannot be greater \ - than Grand Total {2}",Adiantamento pago contra {0} {1} não pode ser maior do que o Total Geral {2} -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +147,Please select item code,Por favor selecione o código do item -DocType: Territory,Territory Manager,Gestor de Territórios -DocType: Packed Item,To Warehouse (Optional),Para o Armazén (Opcional) -DocType: Payment Entry,Paid Amount (Company Currency),Valor pago (moeda da empresa) -DocType: Selling Settings,Selling Settings,Configurações de Vendas -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +101,Please specify either Quantity or Valuation Rate or both,"Por favor, especifique a quantidade ou Taxa de Valorização ou ambos" -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order_dashboard.py +18,Fulfillment,Realização -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +110,Marketing Expenses,Despesas com Marketing -,Item Shortage Report,Relatório de Itens em Falta no Estoque -apps/erpnext/erpnext/stock/doctype/item/item.js +366,"Weight is mentioned,\nPlease mention ""Weight UOM"" too","Peso é mencionado, \n Também mencione ""Unidade de Medida de Peso""" -DocType: Stock Entry Detail,Material Request used to make this Stock Entry,Requisição de Material usada para fazer esta Entrada de Material -apps/erpnext/erpnext/config/support.py +32,Single unit of an Item.,Unidade única de um item. -DocType: Fee Category,Fee Category,Categoria de Taxas -,Student Fee Collection,Cobrança de Taxa do Aluno -DocType: Accounts Settings,Make Accounting Entry For Every Stock Movement,Fazer lançamento contábil para cada movimento de estoque -DocType: Leave Allocation,Total Leaves Allocated,Total de licenças alocadas -apps/erpnext/erpnext/public/js/setup_wizard.js +178,Please enter valid Financial Year Start and End Dates,"Por favor, indique datas inicial e final válidas do Ano Financeiro" -DocType: Employee,Date Of Retirement,Data da aposentadoria -apps/erpnext/erpnext/setup/setup_wizard/operations/defaults_setup.py +118,ERPNext Setup Complete!,Configuração do ERPNext Concluída! -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +67,{0} {1}: Cost Center is required for 'Profit and Loss' account {2}. Please set up a default Cost Center for the Company.,"{0} {1}: Centro de Custo é necessário para a conta de ""Lucros e Perdas"" {2}. Por favor, crie um Centro de Custo padrão para a Empresa." -apps/erpnext/erpnext/selling/doctype/customer/customer.py +175,A Customer Group exists with same name please change the Customer name or rename the Customer Group,"Existe um grupo de clientes com o mesmo nome, por favor modifique o nome do cliente ou renomeie o grupo de clientes" -apps/erpnext/erpnext/public/js/templates/contact_list.html +37,New Contact,Novo Contato -DocType: Territory,Parent Territory,Território pai -apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +891,Material Receipt,Entrada de Material -DocType: Item,"If this item has variants, then it cannot be selected in sales orders etc.","Se este item tem variantes, então ele não pode ser selecionado em pedidos de venda etc." -DocType: Lead,Next Contact By,Próximo Contato Por -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +339,Quantity required for Item {0} in row {1},Quantidade necessária para item {0} na linha {1} -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +46,Warehouse {0} can not be deleted as quantity exists for Item {1},Armazém {0} não pode ser excluído pois existe quantidade para item {1} -,Item-wise Sales Register,Registro de Vendas por Item -DocType: Asset,Gross Purchase Amount,Valor Bruto de Compra -DocType: Purchase Taxes and Charges,Is this Tax included in Basic Rate?,Este Imposto Está Incluído na Base de Cálculo? -apps/erpnext/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.py +59,Total Target,Meta Total -DocType: Job Applicant,Applicant for a Job,Candidato à uma Vaga -DocType: Production Plan Material Request,Production Plan Material Request,Requisição de Material do Planejamento de Produção -DocType: Stock Reconciliation,Reconciliation JSON,Reconciliação JSON -DocType: Purchase Invoice Item,Batch No,Nº do Lote -DocType: Selling Settings,Allow multiple Sales Orders against a Customer's Purchase Order,Permitir vários Pedidos de Venda relacionados ao Pedido de Compra do Cliente -DocType: Naming Series,Set prefix for numbering series on your transactions,Definir prefixo para séries de numeração em suas transações -DocType: Employee Attendance Tool,Employees HTML,Colaboradores HTML -apps/erpnext/erpnext/stock/doctype/item/item.py +489,Default BOM ({0}) must be active for this item or its template,LDM Padrão ({0}) precisa estar ativo para este item ou o seu modelo -DocType: Employee,Leave Encashed?,Licenças Cobradas? -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +32,Opportunity From field is mandatory,"O campo ""Oportunidade de"" é obrigatório" -DocType: Email Digest,Annual Expenses,Despesas Anuais -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1309,Make Purchase Order,Criar Pedido de Compra -DocType: Payment Reconciliation Payment,Allocated amount,Quantidade atribuída -DocType: Stock Reconciliation,Stock Reconciliation,Conciliação de Estoque -DocType: Territory,Territory Name,Nome do Território -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +197,Work-in-Progress Warehouse is required before Submit,Armazén de Trabalho em Andamento é necessário antes de Enviar -DocType: Supplier,Statutory info and other general information about your Supplier,Informações contratuais e outras informações gerais sobre o seu fornecedor -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +262,Against Journal Entry {0} does not have any unmatched {1} entry,Contra Journal Entry {0} não tem qualquer {1} entrada incomparável -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +210,Duplicate Serial No entered for Item {0},Duplicar Serial Não entrou para item {0} -DocType: Shipping Rule Condition,A condition for a Shipping Rule,A condição para uma regra de Remessa -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +256,Please set filter based on Item or Warehouse,"Por favor, defina o filtro com base em artigo ou Armazém" -DocType: Packing Slip,The net weight of this package. (calculated automatically as sum of net weight of items),O peso líquido do pacote. (Calculado automaticamente como soma do peso líquido dos itens) -DocType: Sales Order,To Deliver and Bill,Para Entregar e Faturar -DocType: GL Entry,Credit Amount in Account Currency,Crédito em moeda da conta -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +631,BOM {0} must be submitted,LDM {0} deve ser enviada -DocType: Authorization Control,Authorization Control,Controle de autorização -apps/erpnext/erpnext/controllers/buying_controller.py +416,Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Linha # {0}: Armazén Rejeitado é obrigatório para o item rejeitado {1} -apps/erpnext/erpnext/utilities/activation.py +81,Manage your orders,Gerir seus pedidos -DocType: Work Order Operation,Actual Time and Cost,Tempo e Custo Real -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +57,Material Request of maximum {0} can be made for Item {1} against Sales Order {2},Requisição de Material de no máximo {0} pode ser feita para item {1} relacionado à ordem de venda {2} -DocType: Course,Course Abbreviation,Abreviação do Curso -DocType: Student Leave Application,Student Leave Application,Pedido de Licença do Aluno -DocType: Item,Will also apply for variants,Também se aplica às variantes -apps/erpnext/erpnext/assets/doctype/asset/asset.py +297,"Asset cannot be cancelled, as it is already {0}","Activo não podem ser canceladas, como já é {0}" -apps/erpnext/erpnext/config/selling.py +62,Bundle items at time of sale.,Empacotar itens no momento da venda. -DocType: Material Request Plan Item,Actual Qty,Qtde Real -DocType: Hub Tracked Item,Hub Node,Hub Node -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +78,You have entered duplicate items. Please rectify and try again.,"Você digitou itens duplicados . Por favor, corrigir e tentar novamente." -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +92,Associate,Associado -DocType: Asset Movement,Asset Movement,Movimentação de Ativos -apps/erpnext/erpnext/accounts/page/pos/pos.js +2227,New Cart,Novo Carrinho -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +44,Item {0} is not a serialized Item,Item {0} não é um item serializado -DocType: SMS Center,Create Receiver List,Criar Lista de Receptor -DocType: Packing Slip,To Package No.,Até nº do pacote -DocType: Production Plan,Material Requests,Requisições de Material -DocType: Warranty Claim,Issue Date,Data do Incidente -DocType: Sales Invoice Timesheet,Timesheet Detail,Detalhes do Registro de Tempo -DocType: Purchase Receipt Item Supplied,Consumed Qty,Qtde Consumida -DocType: Packing Slip,Indicates that the package is a part of this delivery (Only Draft),Indica que o pacote é uma parte desta entrega (Só Rascunho) -DocType: Soil Texture,Loam,Barro -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +37,Make Payment Entry,Criar Entrada de Pagamento -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +129,Quantity for Item {0} must be less than {1},Quantidade de item {0} deve ser inferior a {1} -,Sales Invoice Trends,Tendência de Faturamento de Vendas -DocType: Leave Application,Apply / Approve Leaves,Aplicar / Aprovar Leaves -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +180,Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',Pode se referir linha apenas se o tipo de acusação é 'On Anterior Valor Row ' ou ' Previous Row Total' -DocType: Sales Order Item,Delivery Warehouse,Armazén de Entrega -apps/erpnext/erpnext/config/accounts.py +209,Tree of financial Cost Centers.,Árvore de Centros de Custo. -DocType: Serial No,Delivery Document No,Nº do Documento de Entrega -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +42,"Selling must be checked, if Applicable For is selected as {0}","Venda deve ser verificada, se for caso disso for selecionado como {0}" -DocType: Production Plan Material Request,Material Request Date,Data da Requisição de Material -DocType: Purchase Order Item,Supplier Quotation Item,Item do Orçamento de Fornecedor -DocType: Student,Student Mobile Number,Número de Celular do Aluno -DocType: Monthly Distribution,Name of the Monthly Distribution,Nome da distribuição mensal -DocType: Sales Person,Parent Sales Person,Vendedor pai -apps/erpnext/erpnext/config/learn.py +253,Managing Projects,Gerenciamento de Projetos -DocType: Supplier,Supplier of Goods or Services.,Fornecedor de bens ou serviços. -DocType: Budget,Fiscal Year,Exercício Fiscal -DocType: Vehicle Log,Fuel Price,Preço do Combustível -apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js +83,Set Open,Definir como Aberto -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +60,"Budget cannot be assigned against {0}, as it's not an Income or Expense account","Orçamento não pode ser atribuído contra {0}, pois não é uma conta de renda ou despesa" -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +167,Row {0}: Allocated amount {1} must be less than or equals to invoice outstanding amount {2},Linha {0}: Valor alocado {1} deve ser menor ou igual ao saldo devedor {2} da nota -DocType: Sales Invoice,In Words will be visible once you save the Sales Invoice.,Por extenso será visível quando você salvar a Fatura de Venda. -DocType: Item,Is Sales Item,É item de venda -apps/erpnext/erpnext/setup/doctype/item_group/item_group.js +55,Item Group Tree,Árvore de Grupos do Item -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +73,Item {0} is not setup for Serial Nos. Check Item master,"Item {0} não está configurado para nºs de série mestre, verifique o cadastro do item" -DocType: Maintenance Visit,Maintenance Time,Horário da Manutenção -,Amount to Deliver,Total à Entregar -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.js +201,There were errors.,Ocorreram erros. -DocType: Guardian,Guardian Interests,Interesses do Responsável -apps/erpnext/erpnext/controllers/accounts_controller.py +331,Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year,"Vários anos fiscais existem para a data {0}. Por favor, defina empresa no ano fiscal" -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +229,{0} created,{0} criou -DocType: Delivery Note Item,Against Sales Order,Relacionado ao Pedido de Venda -,Serial No Status,Status do Nº de Série -DocType: Payment Entry Reference,Outstanding,Saldo devedor -DocType: Supplier,Warn POs,Avisar em Pedidos de Compra -,Daily Timesheet Summary,Resumo Diário dos Registros de Tempo -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +137,"Row {0}: To set {1} periodicity, difference between from and to date \ - must be greater than or equal to {2}","Fila {0}: Para definir {1} periodicidade, diferença entre a data de \ - e deve ser maior do que ou igual a {2}" -apps/erpnext/erpnext/stock/doctype/item/item_dashboard.py +6,This is based on stock movement. See {0} for details,Isto é baseado no movimento de estoque. Veja o {0} para maiores detalhes -DocType: Sales Person,Name and Employee ID,Nome e ID do Colaborador -DocType: Website Item Group,Website Item Group,Grupo de Itens do Site -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +160,Duties and Taxes,Impostos e Contribuições -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +392,Please enter Reference date,"Por favor, indique data de referência" -apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +44,{0} payment entries can not be filtered by {1},{0} entradas de pagamento não podem ser filtrados por {1} -DocType: Item Website Specification,Table for Item that will be shown in Web Site,Tabela para o item que será mostrado no Web Site -DocType: Purchase Order Item Supplied,Supplied Qty,Qtde fornecida -DocType: Purchase Order Item,Material Request Item,Item da Requisição de Material -apps/erpnext/erpnext/config/selling.py +75,Tree of Item Groups.,Árvore de Grupos de itens . -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +190,Cannot refer row number greater than or equal to current row number for this Charge type,Não é possível consultar número da linha superior ou igual ao número da linha atual para este tipo de carga -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +230,Please click on 'Generate Schedule' to fetch Serial No added for Item {0},"Por favor, clique em ""Gerar Cronograma"" para buscar Serial Sem adição de item {0}" -DocType: Account,Frozen,Congelado -DocType: Sales Invoice Payment,Base Amount (Company Currency),Valor Base (moeda da empresa) -DocType: Installation Note,Installation Time,O tempo de Instalação -DocType: Sales Invoice,Accounting Details,Detalhes da Contabilidade -apps/erpnext/erpnext/setup/doctype/company/company.js +133,Delete all the Transactions for this Company,Apagar todas as transações para esta empresa -DocType: Issue,Resolution Details,Detalhes da Solução -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +159,Please enter Material Requests in the above table,Por favor insira as Requisições de Material na tabela acima -DocType: Item Attribute,Attribute Name,Nome do atributo -DocType: BOM,Show In Website,Mostrar no Site -DocType: Loan Application,Total Payable Amount,Total a Pagar -DocType: Task,Expected Time (in hours),Tempo esperado (em horas) -DocType: Item Reorder,Check in (group),Entrada (grupo) -,Qty to Order,Qtde para Encomendar -DocType: Period Closing Voucher,"The account head under Liability or Equity, in which Profit/Loss will be booked","Conta sob Passivo ou Capital Próprio, no qual o Lucro / Prejuízo será escrito" -apps/erpnext/erpnext/config/projects.py +36,Gantt chart of all tasks.,Gráfico de Gantt de todas as tarefas. -DocType: Opportunity,Mins to First Response,Minutos para Primeira Resposta -DocType: Pricing Rule,Margin Type,Tipo da Margem -DocType: Course,Default Grading Scale,Escala de avaliação padrão -DocType: Appraisal,For Employee Name,Para Nome do Colaborador -DocType: C-Form Invoice Detail,Invoice No,Nota nº -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +408,Make Payment,Fazer Pagamento -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +115,"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Deixe não pode ser aplicada / cancelada antes {0}, como saldo licença já tenha sido no futuro recorde alocação licença encaminhadas-carry {1}" -DocType: Activity Cost,Costing Rate,Preço de Custo -apps/erpnext/erpnext/config/selling.py +234,Customer Addresses And Contacts,Endereços e Contatos do Cliente -DocType: Employee,Resignation Letter Date,Data da Carta de Demissão -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +39,Pricing Rules are further filtered based on quantity.,As regras de tarifação são ainda filtrados com base na quantidade. -DocType: Task,Total Billing Amount (via Time Sheet),Total Faturado (via Registro de Tempo) -apps/erpnext/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py +61,Repeat Customer Revenue,Receita Clientes Repetidos -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1048,Select BOM and Qty for Production,Selecionar LDM e quantidade para produção -DocType: Asset,Depreciation Schedule,Tabela de Depreciação -DocType: Bank Reconciliation Detail,Against Account,Contra à Conta -DocType: Item,Has Batch No,Tem nº de Lote -DocType: Delivery Note,Excise Page Number,Número de página do imposto -DocType: Asset,Purchase Date,Data da Compra -DocType: Student,Personal Details,Detalhes pessoais -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +199,Please set 'Asset Depreciation Cost Center' in Company {0},"Por favor, defina "de ativos Centro de Custo Depreciação 'in Company {0}" -,Maintenance Schedules,Horários de Manutenção -DocType: Task,Actual End Date (via Time Sheet),Data Final Real (via Registro de Tempo) -,Quotation Trends,Tendência de Orçamentos -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +166,Item Group not mentioned in item master for item {0},Grupo item não mencionado no mestre de item para item {0} -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +440,Debit To account must be a Receivable account,De débito em conta deve ser uma conta a receber -DocType: Shipping Rule,Shipping Amount,Valor do Transporte -apps/erpnext/erpnext/public/js/event.js +19,Add Customers,Adicionar Clientes -apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +20,Pending Amount,Total pendente -,Vehicle Expenses,Despesas com Veículos -DocType: Purchase Receipt,Vehicle Number,Placa do Veículo -DocType: Loan,Loan Amount,Valor do Empréstimo -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +479,Row {0}: Bill of Materials not found for the Item {1},Linha {0}: Lista de MAteriais não encontrada para o item {1} -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +112,Total allocated leaves {0} cannot be less than already approved leaves {1} for the period,Total de licenças alocadas {0} não pode ser menor do que as licenças já aprovadas {1} para o período -DocType: Work Order,Use Multi-Level BOM,Utilize LDM Multinível -DocType: Bank Reconciliation,Include Reconciled Entries,Incluir entradas reconciliadas -DocType: Leave Control Panel,Leave blank if considered for all employee types,Deixe em branco se considerado para todos os tipos de colaboradores -DocType: Landed Cost Voucher,Distribute Charges Based On,Distribuir encargos baseado em -DocType: Projects Settings,Timesheets,Registros de Tempo -DocType: HR Settings,HR Settings,Configurações de RH -DocType: Salary Slip,net pay info,Informações de remuneração líquida -DocType: Purchase Invoice,Additional Discount Amount,Total do Desconto Adicional -apps/erpnext/erpnext/controllers/accounts_controller.py +671,"Row #{0}: Qty must be 1, as item is a fixed asset. Please use separate row for multiple qty.","Linha #{0}: A qtde deve ser 1, pois o item é um ativo imobilizado. Por favor, utilize uma linha separada para múltiplas qtdes." -DocType: Leave Block List Allow,Leave Block List Allow,Deixe Lista de Bloqueios Permitir -apps/erpnext/erpnext/setup/doctype/company/company.py +349,Abbr can not be blank or space,Abbr não pode estar em branco ou espaço -apps/erpnext/erpnext/accounts/doctype/account/account.js +67,Group to Non-Group,Grupo para Não-Grupo -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +50,Sports,Esportes -DocType: Loan Type,Loan Name,Nome do Empréstimo -apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +85,Total Actual,Total Atual -DocType: Student Siblings,Student Siblings,Irmãos do Aluno -apps/erpnext/erpnext/stock/get_item_details.py +157,Please specify Company,"Por favor, especifique Empresa" -,Customer Acquisition and Loyalty,Aquisição de Clientes e Fidelização -DocType: Purchase Invoice,Warehouse where you are maintaining stock of rejected items,Armazén onde você está mantendo estoque de itens rejeitados -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +22,{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.,"{0} é agora o Ano Fiscal padrão. Por favor, atualize seu navegador para que a alteração tenha efeito." -apps/erpnext/erpnext/projects/doctype/task/task.js +45,Expense Claims,Relatórios de Despesas -DocType: Issue,Support,Pós-Vendas -,BOM Search,Pesquisar LDM -DocType: Vehicle,Fuel Type,Tipo de Combustível -apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +27,Please specify currency in Company,"Por favor, especifique moeda in Company" -DocType: Workstation,Wages per hour,Salário por hora -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +47,Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3},Da balança em Batch {0} se tornará negativo {1} para item {2} no Armazém {3} -apps/erpnext/erpnext/templates/emails/reorder_item.html +1,Following Material Requests have been raised automatically based on Item's re-order level,As seguintes Requisições de Material foram criadas automaticamente com base no nível de reposição do item -apps/erpnext/erpnext/controllers/accounts_controller.py +376,Account {0} is invalid. Account Currency must be {1},Conta {0} é inválido. Conta de moeda deve ser {1} -apps/erpnext/erpnext/buying/utils.py +34,UOM Conversion factor is required in row {0},Fator de Conversão da Unidade de Medida é necessário na linha {0} -DocType: Production Plan Item,material_request_item,material_request_item -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +1120,"Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice or Journal Entry","Linha #{0}: O Tipo de Documento de Referência deve ser um Pedido de Venda, uma Nota Fiscal de Venda ou um Lançamento Contábil" -DocType: Stock Reconciliation Item,Amount Difference,Valor da Diferença -apps/erpnext/erpnext/stock/get_item_details.py +416,Item Price added for {0} in Price List {1},Item Preço adicionada para {0} na lista de preços {1} -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person_tree.js +8,Please enter Employee Id of this sales person,Digite o ID de Colaborador deste Vendedor -DocType: Territory,Classification of Customers by region,Classificação dos clientes por região -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +66,Difference Amount must be zero,O Valor da Diferença deve ser zero -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order.js +60,Please enter Production Item first,"Por favor, indique item Produção primeiro" -apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +45,Calculated Bank Statement balance,Saldo calculado do extrato bancário -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +64,disabled user,usuário desativado -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +970,Quotation,Orçamento -DocType: Salary Slip,Total Deduction,Dedução total -,Production Analytics,Análise de Produção -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +136,Item {0} has already been returned,Item {0} já foi devolvido -DocType: Fiscal Year,**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.,O **Ano Fiscal** representa um exercício financeiro. Todos os lançamentos contábeis e outras transações principais são rastreadas contra o **Ano Fiscal**. -DocType: Opportunity,Customer / Lead Address,Endereço do Cliente/Cliente em Potencial -apps/erpnext/erpnext/stock/doctype/item/item.py +262,Warning: Invalid SSL certificate on attachment {0},Aviso: certificado SSL inválido no anexo {0} -DocType: Work Order Operation,Actual Operation Time,Tempo Real da Operação -DocType: Authorization Rule,Applicable To (User),Aplicável Para (Usuário) -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +196,Job Description,Descrição da Vaga -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +942,Re-open,Abrir Novamente -DocType: Sales Invoice Item,Qty as per Stock UOM,Qtde por UDM do Estoque -DocType: Purchase Invoice,02-Post Sale Discount,02-Desconto pós venda -apps/erpnext/erpnext/setup/doctype/naming_series/naming_series.py +139,"Special Characters except ""-"", ""#"", ""."" and ""/"" not allowed in naming series","Caracteres especiais, exceto ""-"" ""."", ""#"", e ""/"", não são permitidos em nomeação em série" -DocType: Campaign,"Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment.","Mantenha o controle de campanhas de vendas. Mantenha o controle de Clientes em Potencial, Orçamentos, Pedidos de Venda, de Campanhas e etc, para medir retorno sobre o investimento." -,SO Qty,Qtde na OV -DocType: Appraisal,Calculate Total Score,Calcular a Pontuação Total -DocType: Asset Repair,Manufacturing Manager,Gerente de Fabricação -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +191,Serial No {0} is under warranty upto {1},Nº de Série {0} está na garantia até {1} -apps/erpnext/erpnext/hooks.py +115,Shipments,Entregas -DocType: Payment Entry,Total Allocated Amount (Company Currency),Total alocado (moeda da empresa) -DocType: Purchase Order Item,To be delivered to customer,Para ser entregue ao cliente -DocType: BOM,Scrap Material Cost,Custo do Material Sucateado -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +243,Serial No {0} does not belong to any Warehouse,O Nº de Série {0} não pertence a nenhum Armazén -DocType: Purchase Invoice,In Words (Company Currency),Por extenso (moeda da empresa) -apps/erpnext/erpnext/accounts/doctype/payment_order/payment_order.js +9,Get From,Obter do -apps/erpnext/erpnext/controllers/stock_controller.py +231,Expense or Difference account is mandatory for Item {0} as it impacts overall stock value,Despesa ou Diferença conta é obrigatória para item {0} como ela afeta o valor das ações em geral -DocType: Leave Application,Total Leave Days,Total de dias de licença -DocType: Email Digest,Note: Email will not be sent to disabled users,Observação: Emails não serão enviado para usuários desabilitados -apps/erpnext/erpnext/public/js/account_tree_grid.js +57,Select Company...,Selecione a Empresa... -DocType: Leave Control Panel,Leave blank if considered for all departments,Deixe em branco se considerado para todos os departamentos -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +506,{0} is mandatory for Item {1},{0} é obrigatório para o item {1} -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +171,"Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row","Por favor, selecione montante atribuído, tipo de fatura e número da fatura em pelo menos uma fileira" -apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +143,Cost of New Purchase,Custo da Nova Compra -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +98,Sales Order required for Item {0},Pedido de Venda necessário para o item {0} -DocType: Purchase Invoice Item,Rate (Company Currency),Preço (moeda da empresa) -DocType: Payment Entry,Unallocated Amount,Total não alocado -apps/erpnext/erpnext/templates/includes/product_page.js +101,Cannot find a matching Item. Please select some other value for {0}.,"Não consegue encontrar um item correspondente. Por favor, selecione algum outro valor para {0}." -DocType: Item,"A Product or a Service that is bought, sold or kept in stock.","Um produto ou um serviço que é comprado, vendido ou mantido em estoque." -apps/erpnext/erpnext/hr/page/team_updates/team_updates.js +44,No more updates,Nenhum update -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +184,Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row,"Não é possível selecionar o tipo de carga como "" Valor Em linha anterior ' ou ' On Anterior Row Total ' para a primeira linha" -apps/erpnext/erpnext/selling/doctype/product_bundle/product_bundle.py +29,Child Item should not be a Product Bundle. Please remove item `{0}` and save,Criança item não deve ser um pacote de produtos. Por favor remover o item `` {0} e salvar -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +12,Banking,Bancário -DocType: Vehicle Service,Service Item,Item de Manutenção -DocType: Bank Guarantee,Bank Guarantee,Garantia Bancária -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +39,Please click on 'Generate Schedule' to get schedule,"Por favor, clique em ""Gerar Agenda"" para obter cronograma" -DocType: Blanket Order Item,Ordered Quantity,Quantidade Encomendada -apps/erpnext/erpnext/public/js/setup_wizard.js +118,"e.g. ""Build tools for builders""","ex: ""Desenvolve ferramentas para construtores """ -DocType: Grading Scale,Grading Scale Intervals,Intervalos da escala de avaliação -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +126,{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: Entradas contabeis para {2} só pode ser feito em moeda: {3} -DocType: Fee Schedule,In Process,Em Processo -DocType: Authorization Rule,Itemwise Discount,Desconto relativo ao Item -apps/erpnext/erpnext/config/accounts.py +53,Tree of financial accounts.,Árvore de contas financeiras. -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +400,{0} against Sales Order {1},{0} contra o Pedido de Venda {1} -DocType: Account,Fixed Asset,Ativo Imobilizado -apps/erpnext/erpnext/config/stock.py +327,Serialized Inventory,Inventário por Nº de Série -DocType: Activity Type,Default Billing Rate,Preço de Faturamento Padrão -DocType: Sales Invoice,Total Billing Amount,Valor Total do Faturamento -DocType: Bank Statement Transaction Entry,Receivable Account,Contas a Receber -apps/erpnext/erpnext/controllers/accounts_controller.py +689,Row #{0}: Asset {1} is already {2},Linha # {0}: Ativo {1} já é {2} -DocType: Quotation Item,Stock Balance,Balanço de Estoque -apps/erpnext/erpnext/config/selling.py +327,Sales Order to Payment,Pedido de Venda para Pagamento -DocType: Expense Claim Detail,Expense Claim Detail,Detalhe do Pedido de Reembolso de Despesas -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +915,Please select correct account,"Por favor, selecione conta correta" -DocType: Purchase Invoice Item,Weight UOM,UDM de Peso -DocType: Salary Structure Employee,Salary Structure Employee,Colaborador da Estrutura Salário -DocType: Employee Leave Approver,Users who can approve a specific employee's leave applications,Usuários que podem aprovar pedidos de licença de um colaborador específico -DocType: Purchase Invoice Item,Qty,Qtde -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +24,Electronics,eletrônica -DocType: Stock Settings,Raise Material Request when stock reaches re-order level,Criar Requisição de Material quando o estoque atingir o nível mínimo -DocType: Payroll Entry,Employees,Colaboradores -DocType: Employee,Contact Details,Detalhes do Contato -DocType: C-Form,Received Date,Data de Recebimento -DocType: Delivery Note,"If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.","Se você criou um modelo padrão de Impostos e Taxas de Vendas Modelo, selecione um e clique no botão abaixo." -DocType: BOM Scrap Item,Basic Amount (Company Currency),Total Base (moeda da empresa) -DocType: Shopping Cart Settings,Prices will not be shown if Price List is not set,Os preços não serão mostrados se a lista de preços não estiver configurada -DocType: Stock Entry,Total Incoming Value,Valor Total Recebido -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +434,Debit To is required,Para Débito é necessária -apps/erpnext/erpnext/stock/report/item_prices/item_prices.py +41,Purchase Price List,Preço de Compra Lista -DocType: Job Offer Term,Offer Term,Termos da Oferta -DocType: Asset,Quality Manager,Gerente de Qualidade -DocType: Job Applicant,Job Opening,Vaga de Trabalho -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +153,Please select Incharge Person's name,"Por favor, selecione a pessoa responsável" -DocType: BOM Website Operation,BOM Website Operation,LDM da Operação do Site -apps/erpnext/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +27,Total Invoiced Amt,Valor Total Faturado -DocType: Supplier,Warn RFQs,Alertar em Solicitações de Orçamentos -DocType: Cashier Closing,To Time,Até o Horário -DocType: Authorization Rule,Approving Role (above authorized value),Função de Aprovador (para autorização de valor excedente) -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +147,Credit To account must be a Payable account,A conta de Crédito deve ser uma conta do Contas à Pagar -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +370,BOM recursion: {0} cannot be parent or child of {2},LDM recursão: {0} não pode ser pai ou filho de {2} -DocType: Work Order Operation,Completed Qty,Qtde Concluída -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +180,"For {0}, only debit accounts can be linked against another credit entry","Por {0}, apenas as contas de débito pode ser ligado contra outra entrada crédito" -DocType: Manufacturing Settings,Allow Overtime,Permitir Hora Extra -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +149,"Serialized Item {0} cannot be updated using Stock Reconciliation, please use Stock Entry","O item de série {0} não pode ser atualizado utilizando a Reconciliação de Estoque, utilize o Lançamento de Estoque" -DocType: Training Event Employee,Training Event Employee,Colaborador do Evento de Treinamento -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +206,{0} Serial Numbers required for Item {1}. You have provided {2}.,{0} número de série é necessário para item {1}. Você forneceu {2}. -DocType: Stock Reconciliation Item,Current Valuation Rate,Taxa Atual de Avaliação -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +129,Exchange Gain/Loss,Ganho/Perda com Câmbio -DocType: Opportunity,Lost Reason,Motivo da Perda -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +47,Please enter Receipt Document,Por favor insira o Documento de Recibo -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.py +49,Please specify a valid 'From Case No.',"Por favor, especifique um válido 'De Caso No.'" -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +24,Further cost centers can be made under Groups but entries can be made against non-Groups,"Mais centros de custo podem ser feitos em grupos, mas as entradas podem ser feitas contra os Não-Grupos" -apps/erpnext/erpnext/config/setup.py +66,Users and Permissions,Usuários e Permissões -DocType: Branch,Branch,Ramo -DocType: Bin,Actual Quantity,Quantidade Real -DocType: Shipping Rule,example: Next Day Shipping,exemplo: envio no dia seguinte -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +187,Serial No {0} not found,Serial No {0} não foi encontrado -DocType: Fee Schedule Program,Student Batch,Série de Alunos -apps/erpnext/erpnext/utilities/activation.py +119,Make Student,Fazer Aluno -apps/erpnext/erpnext/projects/doctype/project/project.py +279,You have been invited to collaborate on the project: {0},Você foi convidado para colaborar com o projeto: {0} -apps/erpnext/erpnext/education/doctype/student_admission/templates/student_admission.html +70,Apply Now,Aplique agora -,Bank Clearance Summary,Resumo da Liquidação Bancária -apps/erpnext/erpnext/config/setup.py +100,"Create and manage daily, weekly and monthly email digests.","Cria e configura as regras de recebimento de emails, como diário, semanal ou mensal." -DocType: Appraisal Goal,Appraisal Goal,Meta de Avaliação -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +59,Buildings,Edifícios -DocType: Fee Schedule,Fee Structure,Estrutura da Taxa -DocType: Timesheet Detail,Costing Amount,Valor de Custo -apps/erpnext/erpnext/hr/doctype/payroll_entry/payroll_entry.js +75,Submit Salary Slip,Enviar Folha de Pagamentos -DocType: Sales Partner,Address & Contacts,Endereços e Contatos -DocType: SMS Log,Sent To,Enviado para -DocType: Payment Request,Make Sales Invoice,Fazer Fatura de Venda -apps/erpnext/erpnext/crm/doctype/lead/lead.py +53,Next Contact Date cannot be in the past,A Próxima Data de Contato não pode ocorrer no passado -DocType: Company,For Reference Only.,Apenas para referência. -DocType: Sales Invoice Advance,Advance Amount,Valor Adiantado -DocType: Manufacturing Settings,Capacity Planning,Planejamento de capacidade -apps/erpnext/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py +43,'From Date' is required,Informe a 'Data Inicial' -apps/erpnext/erpnext/stock/get_item_details.py +146,No Item with Barcode {0},Nenhum artigo com código de barras {0} -DocType: Item,Show a slideshow at the top of the page,Mostrar uma apresentação de slides no topo da página -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +552,Boms,LDMs -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +15,Ageing Based On,Envelhecimento Baseado em -DocType: Item,End of Life,Validade -apps/erpnext/erpnext/demo/setup/setup_data.py +344,Travel,Viagem -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +266,No active or default Salary Structure found for employee {0} for the given dates,Não foi encontrada nenhuma Estrutura Salarial padrão ativa para o colaborador {0} ou para as datas indicadas -DocType: Leave Block List,Allow Users,Permitir que os usuários -DocType: Purchase Order,Customer Mobile No,Celular do Cliente -DocType: Cost Center,Track separate Income and Expense for product verticals or divisions.,Acompanhe resultados separada e despesa para verticais de produtos ou divisões. -DocType: Rename Tool,Rename Tool,Ferramenta de Renomear -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +81,Update Cost,Atualize o custo -DocType: Item Reorder,Item Reorder,Reposição de Item -apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.js +488,Show Salary Slip,Mostrar Contracheque -DocType: BOM,"Specify the operations, operating cost and give a unique Operation no to your operations.","Especificar as operações, custos operacionais e dar um número único de operação às suas operações." -apps/erpnext/erpnext/controllers/status_updater.py +207,This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?,Este documento está fora do limite {0} {1} para o item {4}. Você está fazendo outro(a) {3} relacionado(a) a(o) mesmo(a) {2}? -apps/erpnext/erpnext/public/js/controllers/transaction.js +1288,Please set recurring after saving,"Por favor, defina recorrentes depois de salvar" -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +874,Select change amount account,Selecione a conta de troco -DocType: Naming Series,User must always select,O Usuário deve sempre selecionar -DocType: Stock Settings,Allow Negative Stock,Permitir Estoque Negativo -DocType: Topic,Topic,Tópico -DocType: Quality Inspection,Verified By,Verificado por -apps/erpnext/erpnext/setup/doctype/company/company.py +84,"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.","Não é possível alterar a moeda padrão da empresa, porque existem operações existentes. Transações devem ser canceladas para alterar a moeda padrão." -DocType: Grading Scale Interval,Grade Description,Descrição da Nota de Avaliação -DocType: Stock Entry,Purchase Receipt No,Nº do Recibo de Compra -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +31,Earnest Money,Sinal/Garantia em Dinheiro -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +144,Source of Funds (Liabilities),Fonte de Recursos (Passivos) -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +522,Quantity in row {0} ({1}) must be same as manufactured quantity {2},A quantidade na linha {0} ( {1} ) deve ser a mesma que a quantidade fabricada {2} -DocType: Supplier Scorecard Scoring Standing,Employee,Colaborador -DocType: Payment Entry,Payment Deductions or Loss,Deduções ou perdas de pagamento -apps/erpnext/erpnext/config/setup.py +42,Standard contract terms for Sales or Purchase.,Termos do contrato padrão para vendas ou compra. -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +56,Group by Voucher,Agrupar por Comprovante -apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.js +42,Sales Pipeline,Pipeline de Vendas -apps/erpnext/erpnext/templates/form_grid/material_request_grid.html +7,Required On,Obrigatório On -DocType: Rename Tool,File to Rename,Arquivo para Renomear -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +200,Please select BOM for Item in Row {0},"Por favor, selecione LDM para o Item na linha {0}" -apps/erpnext/erpnext/controllers/buying_controller.py +719,Specified BOM {0} does not exist for Item {1},A LDM {0} especificada não existe para o Item {1} -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +246,Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,Programação de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda -DocType: Notification Control,Expense Claim Approved,Pedido de Reembolso de Despesas Aprovado -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +403,Salary Slip of employee {0} already created for this period,Contracheque do colaborador {0} já criado para este período -apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +26,Cost of Purchased Items,Custo de Produtos Comprados -DocType: Selling Settings,Sales Order Required,Pedido de Venda Obrigatório -DocType: Purchase Invoice,Credit To,Crédito para -apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.py +33,Active Leads / Customers,Clientes em Potencial Ativos / Clientes -DocType: Maintenance Schedule Detail,Maintenance Schedule Detail,Detalhe da Programação da Manutenção -DocType: Supplier Scorecard,Warn for new Purchase Orders,Avisar em Novos Pedidos de Compra -DocType: Buying Settings,Buying Settings,Configurações de Compras -DocType: Stock Entry Detail,BOM No. for a Finished Good Item,Nº da LDM para um Item Bom Acabado -DocType: Upload Attendance,Attendance To Date,Data Final de Comparecimento -DocType: Warranty Claim,Raised By,Levantadas por -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +1112,Please specify Company to proceed,"Por favor, especifique a Empresa para prosseguir" -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +66,Compensatory Off,Saída Compensatória -DocType: Job Offer,Accepted,Aceito -DocType: BOM Update Tool,BOM Update Tool,Ferramenta de atualização da Lista de Materiais -DocType: SG Creation Tool Course,Student Group Name,Nome do Grupo de Alunos -apps/erpnext/erpnext/setup/doctype/company/company.js +111,Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.,"Por favor, certifique-se de que você realmente quer apagar todas as operações para esta empresa. Os seus dados mestre vai permanecer como está. Essa ação não pode ser desfeita." -DocType: Room,Room Number,Número da Sala -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +187,{0} ({1}) cannot be greater than planned quanitity ({2}) in Production Order {3},{0} ({1}) não pode ser maior do que a quantidade planejada ({2}) na ordem de produção {3} -DocType: Shipping Rule,Shipping Rule Label,Rótulo da Regra de Envio -apps/erpnext/erpnext/public/js/conf.js +28,User Forum,Fórum de Usuários -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +333,Raw Materials cannot be blank.,Matérias-primas não pode ficar em branco. -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +570,"Could not update stock, invoice contains drop shipping item.","Não foi possível atualizar estoque, fatura contém gota artigo do transporte." -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +533,Quick Journal Entry,Lançamento no Livro Diário Rápido -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +244,You can not change rate if BOM mentioned agianst any item,Você não pode alterar a taxa se a LDM é mencionada em algum item -DocType: Employee,Previous Work Experience,Experiência anterior de trabalho -DocType: Job Card,For Quantity,Para Quantidade -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +205,Please enter Planned Qty for Item {0} at row {1},"Por favor, indique a qtde planejada para o item {0} na linha {1}" -,Minutes to First Response for Issues,Minutos para Primeira Resposta em Incidentes -DocType: Purchase Invoice,Terms and Conditions1,Termos e Condições -DocType: Accounts Settings,"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.","Registros contábeis congelados até a presente data, ninguém pode criar/modificar registros com exceção do perfil especificado abaixo." -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +116,Please save the document before generating maintenance schedule,"Por favor, salve o documento antes de gerar programação de manutenção" -apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js +45,Latest price updated in all BOMs,Preço mais recente atualizado em todas as LDMs -apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +28,Project Status,Status do Projeto -DocType: UOM,Check this to disallow fractions. (for Nos),Marque esta opção para não permitir frações. (Para n) -DocType: Student Admission Program,Naming Series (for Student Applicant),Código dos Documentos (para condidato à vaga de estudo) -,Minutes to First Response for Opportunity,Minutos para Primeira Resposta em Oportunidades -apps/erpnext/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +97,Total Absent,Total de faltas -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +1064,Item or Warehouse for row {0} does not match Material Request,Item ou Armazén na linha {0} não corresponde à Requisição de Material -DocType: Fiscal Year,Year End Date,Data final do ano -DocType: Task Depends On,Task Depends On,Tarefa depende de -DocType: Operation,Default Workstation,Estação de Trabalho Padrão -DocType: Notification Control,Expense Claim Approved Message,Mensagem de aprovação do Pedido de Reembolso de Despesas -DocType: Payment Entry,Deductions or Loss,Dedução ou Perda -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +279,{0} {1} is closed,{0} {1} esta fechado(a) -DocType: Purchase Receipt,Get Current Stock,Obter Estoque Atual -apps/erpnext/erpnext/config/manufacturing.py +46,Tree of Bill of Materials,Árvore da Lista de Materiais -,Employees working on a holiday,Colaboradores Trabalhando no Feriado -DocType: Project,% Complete Method,Método para % Concluído -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +200,Maintenance start date can not be before delivery date for Serial No {0},Manutenção data de início não pode ser anterior à data de entrega para Serial Não {0} -DocType: Job Card,Actual End Date,Data Final Real -DocType: BOM,Operating Cost (Company Currency),Custo operacional (moeda da empresa) -DocType: Authorization Rule,Applicable To (Role),Aplicável Para (Função) -DocType: BOM Update Tool,Replace BOM,Substituir lista de materiais -DocType: Asset Movement,Purpose,Finalidade -DocType: Company,Fixed Asset Depreciation Settings,Configurações de Depreciação do Ativo Imobilizado -DocType: Item,Will also apply for variants unless overrridden,Também se aplica a variantes a não ser que seja sobrescrito -DocType: Work Order,Manufacture against Material Request,Fabricação Vinculada a uma Requisição de Material -DocType: Item Reorder,Request for,Solicitado para -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +32,Approving User cannot be same as user the rule is Applicable To,Usuário Aprovador não pode ser o mesmo usuário da regra: é aplicável a -DocType: Stock Entry Detail,Basic Rate (as per Stock UOM),Preço Unitário (de acordo com a UDM do estoque) -DocType: SMS Log,No of Requested SMS,Nº de SMS pedidos -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +853,Please supply the specified items at the best possible rates,"Por favor, informe os melhores valores e condições possíveis para os itens especificados" -apps/erpnext/erpnext/hotels/doctype/hotel_room_reservation/hotel_room_reservation.js +7,Make Invoice,Criar Fatura -DocType: Selling Settings,Auto close Opportunity after 15 days,Fechar automaticamente a oportunidade após 15 dias -apps/erpnext/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js +25,End Year,Ano Final -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +23,Quot/Lead %,Orçamento / Cliente em Potencial % -apps/erpnext/erpnext/hr/doctype/employee/employee.py +141,Contract End Date must be greater than Date of Joining,Data de Encerramento do Contrato deve ser maior que Data de Inicio -DocType: Sales Partner,A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.,Um distribuidor de terceiros / revendedor / comissão do agente / filial / revendedor que vende os produtos de empresas de uma comissão. -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +412,{0} against Purchase Order {1},{0} relacionado ao Pedido de Compra {1} -DocType: Task,Actual Start Date (via Time Sheet),Data de Início Real (via Registro de Tempo) -apps/erpnext/erpnext/portal/doctype/homepage/homepage.py +15,This is an example website auto-generated from ERPNext,Este é um exemplo website auto- gerada a partir ERPNext -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +28,Ageing Range 1,Faixa Envelhecimento 1 -DocType: Purchase Taxes and Charges Template,"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc. - -#### Note - -The tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master. - -#### Description of Columns - -1. Calculation Type: - - This can be on **Net Total** (that is the sum of basic amount). - - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. - - **Actual** (as mentioned). -2. Account Head: The Account ledger under which this tax will be booked -3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center. -4. Description: Description of the tax (that will be printed in invoices / quotes). -5. Rate: Tax rate. -6. Amount: Tax amount. -7. Total: Cumulative total to this point. -8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row). -9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. -10. Add or Deduct: Whether you want to add or deduct the tax.","Template fiscal padrão que pode ser aplicado a todas as operações de compra. Este modelo pode conter a lista de cabeças de impostos e também outros chefes de despesas como ""Frete"", ""Seguro"", ""Manutenção"" etc. - - #### Nota - - A taxa de imposto que você definir aqui será a taxa normal do IVA para todos os itens ** **. Se houver itens ** ** que têm taxas diferentes, eles devem ser adicionados no ** Imposto item ** tabela no item ** ** mestre. - - #### Descrição das Colunas - - 1. Tipo de Cálculo: - - Isto pode ser em ** Total Líquida ** (que é a soma da quantidade de base). - - ** Na linha anterior Total / Valor ** (para os impostos cumulativos ou encargos). Se você selecionar essa opção, o imposto será aplicado como uma percentagem da linha anterior (na tabela de impostos) ou montante total. - - ** ** Real (como indicado). - 2. Chefe da conta: A contabilidade conta em que este imposto será reservado - 3. Centro de Custo: Se o imposto / taxa é uma renda (como o transporte) ou despesa que precisa ser reservado contra um centro de custo. - 4. Descrição: Descrição do imposto (que será impresso em facturas / aspas). - 5. Classificação: Taxa de imposto. - 6. Valor: Valor das taxas. - 7. Total: Total acumulado até este ponto. - 8. Digite Row: Se baseado em ""Anterior Row Total"", você pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior). - 9. Considere imposto ou encargo para: Nesta seção, você pode especificar se o imposto / taxa é apenas para avaliação (não uma parte do total) ou apenas para total (não agrega valor ao item) ou para ambos. - 10. Adicionar ou deduzir: Se você quer adicionar ou deduzir o imposto." -DocType: Purchase Receipt Item,Recd Quantity,Quantidade Recebida -apps/erpnext/erpnext/education/doctype/program_enrollment/program_enrollment.py +64,Fee Records Created - {0},Registos de Taxas Criados - {0} -DocType: Asset Category Account,Asset Category Account,Ativo Categoria Conta -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +137,Cannot produce more Item {0} than Sales Order quantity {1},Não é possível produzir mais item {0} do que a quantidade no Pedido de Venda {1} -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +583,Stock Entry {0} is not submitted,Lançamento no Estoque {0} não é enviado -DocType: Payment Reconciliation,Bank / Cash Account,Banco / Conta Caixa -apps/erpnext/erpnext/crm/doctype/lead/lead.py +47,Next Contact By cannot be same as the Lead Email Address,O responsável pelo Próximo Contato não pode ser o mesmo que o Endereço de Email de Potencial Cliente -DocType: Tax Rule,Billing City,Cidade de Faturamento -DocType: Salary Component Account,Salary Component Account,Conta do Componente Salárial -DocType: Warranty Claim,Service Address,Endereço da Manutenção do Veículo -DocType: Item,Manufacture,Fabricação -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +13,Please Delivery Note first,Por favor de entrega Nota primeiro -DocType: Salary Component,Amount based on formula,Total Baseado na Fórmula -DocType: Purchase Invoice,Currency and Price List,Moeda e Preço -DocType: Opportunity,Customer / Lead Name,Nome do Cliente/Cliente em Potencial -apps/erpnext/erpnext/accounts/doctype/bank_reconciliation/bank_reconciliation.py +115,Clearance Date not mentioned,Apuramento data não mencionada -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +74,Row {0}:Start Date must be before End Date,Linha {0}: Data de início deve ser anterior a data de término -apps/erpnext/erpnext/controllers/trends.py +19,Total(Qty),Total (Qtde) -DocType: Installation Note Item,Installed Qty,Qtde Instalada -apps/erpnext/erpnext/utilities/user_progress.py +31,You added ,Você adicionou -DocType: Purchase Taxes and Charges,Parenttype,Parenttype -apps/erpnext/erpnext/hr/doctype/training_event/training_event.js +10,Training Result,Resultado do Treinamento -DocType: Salary Structure,Total Earning,Total de ganhos -DocType: Purchase Receipt,Time at which materials were received,Horário em que os materiais foram recebidos -apps/erpnext/erpnext/controllers/accounts_controller.py +377, or ,ou -DocType: Sales Order,Billing Status,Status do Faturamento -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +127,Utility Expenses,Despesas com Serviços Públicos -apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +64,90-Above,Acima de 90 -DocType: Buying Settings,Default Buying Price List,Lista de preço de compra padrão -DocType: Payroll Entry,Salary Slip Based on Timesheet,Demonstrativo de pagamento baseado em controle de tempo -DocType: Notification Control,Sales Order Message,Mensagem do Pedido de Venda -apps/erpnext/erpnext/config/setup.py +15,"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Defina valores padrão , como empresa, moeda, ano fiscal atual , etc" -DocType: Payroll Entry,Select Employees,Selecione Colaboradores -DocType: Opportunity,Potential Sales Deal,Promoção de Vendas Potenciais -DocType: Purchase Invoice,Total Taxes and Charges,Total de Impostos e Encargos -DocType: Employee,Emergency Contact,Contato de emergência -DocType: Bank Reconciliation Detail,Payment Entry,Pagamentos -,sales-browser,navegador de vendas -apps/erpnext/erpnext/accounts/doctype/account/account.js +78,Ledger,Livro Razão -DocType: Target Detail,Target Amount,Valor da Meta -DocType: Shopping Cart Settings,Shopping Cart Settings,Configurações do Carrinho de Compras -DocType: Journal Entry,Accounting Entries,Lançamentos contábeis -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +24,Duplicate Entry. Please check Authorization Rule {0},"Duplicar entrada . Por favor, verifique Regra de Autorização {0}" -DocType: Purchase Order,Ref SQ,Ref SQ -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +55,Receipt document must be submitted,O Documento de Recibo precisa ser enviado -DocType: Purchase Invoice Item,Received Qty,Qtde Recebida -DocType: Stock Entry Detail,Serial No / Batch,N º de Série / lote -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +359,Not Paid and Not Delivered,Não pago e não entregue -DocType: Product Bundle,Parent Item,Item Pai -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +160,Leave Type {0} cannot be carry-forwarded,Deixe tipo {0} não pode ser encaminhado carry- -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +215,Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',"Programação de manutenção não é gerada para todos os itens. Por favor, clique em ""Gerar Agenda""" -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +209,"For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included","Para linha {0} em {1}. Para incluir {2} na taxa de Item, linhas {3} também devem ser incluídos" -apps/erpnext/erpnext/utilities/activation.py +101,Make User,Fazer Usuário -DocType: Packing Slip,Identification of the package for the delivery (for print),Identificação do pacote para a Entrega (para impressão) -DocType: Landed Cost Voucher,Purchase Receipt Items,Itens do Recibo de Compra -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +52,Arrear,Atrasado -apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +173,Depreciation Amount during the period,Total de Depreciação durante o período -apps/erpnext/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.py +43,Disabled template must not be default template,O modelo desativado não pode ser o modelo padrão -DocType: Account,Income Account,Conta de Receitas -DocType: Payment Request,Amount in customer's currency,Total em moeda do cliente -DocType: Stock Reconciliation Item,Current Qty,Qtde atual -DocType: Appraisal Goal,Key Responsibility Area,Área de responsabilidade principal -DocType: Payment Entry,Total Allocated Amount,Total Alocado -DocType: Item Reorder,Material Request Type,Tipo de Requisição de Material -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +130,Row {0}: UOM Conversion Factor is mandatory,Linha {0}: Fator de Conversão da Unidade de Medida é obrigatório -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.html +28,Ref,Referência -apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +57,Voucher #,Comprovante # -DocType: Notification Control,Purchase Order Message,Mensagem do Pedido de Compra -DocType: Selling Settings,Hide Customer's Tax Id from Sales Transactions,Esconder CPF/CNPJ em transações de vendas -DocType: Upload Attendance,Upload HTML,Upload HTML -DocType: Employee,Relieving Date,Data da Liberação -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +14,"Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.","Regra de preços é feita para substituir Lista de Preços / define percentual de desconto, com base em alguns critérios." -DocType: Serial No,Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Armazém só pode ser alterado através de entrada / entrega da nota / recibo de compra -DocType: Employee Education,Class / Percentage,Classe / Percentual -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +50,Income Tax,Imposto de Renda -apps/erpnext/erpnext/config/selling.py +174,Track Leads by Industry Type.,"Rastreia Clientes em Potencial, por Segmento." -apps/erpnext/erpnext/public/js/controllers/transaction.js +1389,Please enter Item Code to get batch no,"Por favor, insira o Código Item para obter lotes não" -apps/erpnext/erpnext/selling/doctype/quotation/quotation.js +928,Please select a value for {0} quotation_to {1},Por favor selecione um valor para {0} orçamento_para {1} -DocType: Company,Stock Settings,Configurações de Estoque -apps/erpnext/erpnext/accounts/doctype/account/account.py +244,"Merging is only possible if following properties are same in both records. Is Group, Root Type, Company","A fusão só é possível se seguintes propriedades são as mesmas em ambos os registros. É Group, tipo de raiz, Company" -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +130,Gain/Loss on Asset Disposal,Ganho/Perda no Descarte de Ativo -apps/erpnext/erpnext/config/selling.py +36,Manage Customer Group Tree.,Gerenciar grupos de clientes -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center_tree.js +22,New Cost Center Name,Novo Centro de Custo Nome -DocType: Leave Control Panel,Leave Control Panel,Painel de Controle de Licenças -apps/erpnext/erpnext/templates/includes/product_page.js +31,Not in Stock,Esgotado -DocType: Additional Salary,HR User,Usuário do RH -DocType: Support Settings,Issues,Incidentes -apps/erpnext/erpnext/controllers/status_updater.py +12,Status must be one of {0},Status deve ser um dos {0} -DocType: Delivery Note,Required only for sample item.,Necessário apenas para o item de amostra. -DocType: Stock Ledger Entry,Actual Qty After Transaction,Qtde Real Após a Transação -,Pending SO Items For Purchase Request,Itens Pendentes da Ordem de Venda por Solicitação de Compra -apps/erpnext/erpnext/education/doctype/student_admission/student_admission.py +35,Student Admissions,Admissões de Alunos -DocType: Supplier,Billing Currency,Moeda de Faturamento -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +152,Extra Large,Extra Grande -apps/erpnext/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +97,Total Leaves,Total de licenças -,Profit and Loss Statement,Demonstrativo de Resultados -DocType: Bank Reconciliation Detail,Cheque Number,Número do cheque -DocType: Journal Entry,Total Credit,Crédito total -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +586,Warning: Another {0} # {1} exists against stock entry {2},Aviso: Outra {0} # {1} existe contra entrada de material {2} -DocType: Homepage Featured Product,Homepage Featured Product,Produtos em Destaque na Página Inicial -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse_tree.js +15,New Warehouse Name,Nome do Novo Armazén -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +151,Please mention no of visits required,O número de visitas é obrigatório -DocType: Stock Settings,Default Valuation Method,Método de Avaliação padrão -DocType: Vehicle Log,Fuel Qty,Qtde de Combustível -DocType: Work Order Operation,Planned Start Time,Horário Planejado de Início -DocType: Payment Entry Reference,Allocated,Alocado -apps/erpnext/erpnext/config/accounts.py +235,Close Balance Sheet and book Profit or Loss.,Fechar Balanço e livro ou perda . -DocType: Fees,Fees,Taxas -DocType: Currency Exchange,Specify Exchange Rate to convert one currency into another,Especifique Taxa de Câmbio para converter uma moeda em outra -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +165,Quotation {0} is cancelled,O Orçamento {0} está cancelado -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +139,Total Outstanding Amount,Saldo devedor total -DocType: Price List,Price List Master,Cadastro da Lista de Preços -DocType: Sales Person,All Sales Transactions can be tagged against multiple **Sales Persons** so that you can set and monitor targets.,Todas as transações de vendas pode ser marcado contra várias pessoas das vendas ** ** para que você pode definir e monitorar as metas. -,S.O. No.,Número da Ordem de Venda -apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +242,Please create Customer from Lead {0},"Por favor, crie um Cliente apartir do Cliente em Potencial {0}" -DocType: Price List,Applicable for Countries,Aplicável para os Países -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +46,Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,"Somente pedidos de licença com o status ""Aprovado"" ou ""Rejeitado"" podem ser enviados" -apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.py +52,Student Group Name is mandatory in row {0},Nome do Grupo de Alunos é obrigatório na linha {0} -DocType: Homepage,Products to be shown on website homepage,Produtos para serem mostrados na página inicial -apps/erpnext/erpnext/setup/doctype/customer_group/customer_group.js +13,This is a root customer group and cannot be edited.,Este é um grupo de clientes de raiz e não pode ser editada. -DocType: POS Profile,Ignore Pricing Rule,Ignorar regra de preços -DocType: Employee Education,Graduate,Pós-graduação -DocType: Leave Block List,Block Days,Bloco de Dias -DocType: Journal Entry,Excise Entry,Lançamento de Impostos -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +69,Warning: Sales Order {0} already exists against Customer's Purchase Order {1},Aviso: Pedido de Venda {0} já existe relacionado ao Pedido de Compra do Cliente {1} -DocType: Terms and Conditions,"Standard Terms and Conditions that can be added to Sales and Purchases. - -Examples: - -1. Validity of the offer. -1. Payment Terms (In Advance, On Credit, part advance etc). -1. What is extra (or payable by the Customer). -1. Safety / usage warning. -1. Warranty if any. -1. Returns Policy. -1. Terms of shipping, if applicable. -1. Ways of addressing disputes, indemnity, liability, etc. -1. Address and Contact of your Company.","Termos e Condições Padrão que podem ser adicionados para compras e vendas. - - Exemplos: - - 1. Validade da oferta. - 1. Condições de pagamento (com antecedência, sobre o crédito, parte antecedência etc). - 1. O que é muito (ou a pagar pelo cliente). - 1. Aviso de segurança / utilização. - 1. Garantia, se houver. - 1. Política de Devolução. - 1. Condições de entrega, se aplicável. - 1. Formas de disputas de endereçamento, indenização, responsabilidade, etc. - 1. Endereço e de contato da sua empresa." -apps/erpnext/erpnext/controllers/stock_controller.py +237,Expense / Difference account ({0}) must be a 'Profit or Loss' account,Despesa conta / Diferença ({0}) deve ser um 'resultados' conta -DocType: Healthcare Service Unit Type,Item Details,Detalhes do Item -apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +19,Attendance for employee {0} is already marked,Comparecimento para o colaborador {0} já está marcado -DocType: Packing Slip,If more than one package of the same type (for print),Se mais do que uma embalagem do mesmo tipo (para impressão) -,Salary Register,Registro de Salário -DocType: Warehouse,Parent Warehouse,Armazén Pai -apps/erpnext/erpnext/config/non_profit.py +74,Define various loan types,Defina vários tipos de empréstimos -DocType: Bin,FCFS Rate,Taxa FCFS -DocType: Bank Statement Transaction Invoice Item,Outstanding Amount,Valor Devido -DocType: Project Task,Working,Trabalhando -DocType: Stock Ledger Entry,Stock Queue (FIFO),Fila do estoque (PEPS) -apps/erpnext/erpnext/accounts/doctype/pos_profile/pos_profile.py +46,{0} does not belong to Company {1},{0} não pertence à empresa {1} -DocType: Account,Round Off,Arredondamento -DocType: Material Request Plan Item,Requested Qty,Qtde Solicitada -DocType: Tax Rule,Use for Shopping Cart,Use para Compras -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +46,"Charges will be distributed proportionately based on item qty or amount, as per your selection","Encargos serão distribuídos proporcionalmente com base na qtde de itens ou valor, conforme sua seleção" -DocType: Maintenance Visit,Purposes,Finalidades -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +110,Atleast one item should be entered with negative quantity in return document,Pelo menos um item deve ser inserido com quantidade negativa no documento de devolução -apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +71,"Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Operação {0} mais do que as horas de trabalho disponíveis na estação de trabalho {1}, quebrar a operação em várias operações" -DocType: Purchase Invoice,Overdue,Atrasado -DocType: Account,Stock Received But Not Billed,"Itens Recebidos, mas não Faturados" -apps/erpnext/erpnext/accounts/doctype/account/account.py +91,Root Account must be a group,Conta raiz deve ser um grupo -DocType: Item,Total Projected Qty,Quantidade Total Projetada -DocType: Monthly Distribution,Distribution Name,Nome da distribuição -DocType: Course,Course Code,Código do Curso -apps/erpnext/erpnext/controllers/stock_controller.py +341,Quality Inspection required for Item {0},Inspeção de Qualidade exigido para item {0} -DocType: Quotation,Rate at which customer's currency is converted to company's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base da empresa -DocType: Purchase Invoice Item,Net Rate (Company Currency),Preço líquido (moeda da empresa) -apps/erpnext/erpnext/config/selling.py +105,Manage Territory Tree.,Gerenciar territórios -DocType: Bank Statement Transaction Invoice Item,Sales Invoice,Fatura de Venda -DocType: Journal Entry Account,Party Balance,Saldo do Sujeito -apps/erpnext/erpnext/accounts/page/pos/pos.js +500,Please select Apply Discount On,"Por favor, selecione Aplicar Discount On" -DocType: Stock Entry,Material Transfer for Manufacture,Transferência de Material para Fabricação -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +20,Discount Percentage can be applied either against a Price List or for all Price List.,Percentual de desconto pode ser aplicado contra uma lista de preços ou para todos Lista de Preços. -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +432,Accounting Entry for Stock,Lançamento Contábil de Estoque -DocType: Sales Invoice,Sales Team1,Equipe de Vendas 1 -apps/erpnext/erpnext/stock/doctype/item/item.py +578,Item {0} does not exist,Item {0} não existe -DocType: Sales Invoice,Customer Address,Endereço do Cliente -DocType: Loan,Loan Details,Detalhes do Empréstimo -DocType: Company,Default Inventory Account,Conta de Inventário Padrão -DocType: Purchase Invoice,Apply Additional Discount On,Aplicar Desconto Adicional em -DocType: Account,Root Type,Tipo de Raiz -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +139,Row # {0}: Cannot return more than {1} for Item {2},Linha # {0}: Não é possível retornar mais de {1} para o item {2} -DocType: Item Group,Show this slideshow at the top of the page,Mostrar esta apresentação de slides no topo da página -DocType: BOM,Item UOM,Unidade de Medida do Item -DocType: Sales Taxes and Charges,Tax Amount After Discount Amount (Company Currency),Valor do imposto após desconto (moeda da empresa) -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +256,Target warehouse is mandatory for row {0},Destino do Warehouse é obrigatória para a linha {0} -DocType: Purchase Invoice,Select Supplier Address,Selecione um Endereço do Fornecedor -apps/erpnext/erpnext/public/js/event.js +27,Add Employees,Adicionar Colaboradores -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +148,Extra Small,Muito Pequeno -DocType: Company,Standard Template,Template Padrão -apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +1103,Warning: Material Requested Qty is less than Minimum Order Qty,Aviso: A quantidade de material solicitado é menor do que o Pedido Mínimo -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +212,Account {0} is frozen,A Conta {0} está congelada -DocType: Company,Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.,Entidade Legal / Subsidiária com um gráfico separado de Contas pertencente à Organização. -DocType: Payment Request,Mute Email,Mudo Email -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +29,"Food, Beverage & Tobacco","Alimentos, Bebidas e Fumo" -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +794,Can only make payment against unbilled {0},Só pode fazer o pagamento contra a faturar {0} -apps/erpnext/erpnext/controllers/selling_controller.py +114,Commission rate cannot be greater than 100,Percentual de comissão não pode ser maior do que 100 -apps/erpnext/erpnext/public/js/utils/party.js +167,Please enter {0} first,"Por favor, indique {0} primeiro" -DocType: Work Order Operation,Actual End Time,Tempo Final Real -DocType: Item,Manufacturer Part Number,Número de Peça do Fabricante -DocType: Work Order Operation,Estimated Time and Cost,Tempo estimado e Custo -DocType: SMS Log,No of Sent SMS,Nº de SMS enviados -DocType: Antibiotic,Healthcare Administrator,Administrador de Serviço de Saúde -apps/erpnext/erpnext/utilities/user_progress.py +47,Set a Target,Definir uma Meta -DocType: Supplier Scorecard Scoring Standing,Prevent Purchase Orders,Evitar Pedidos de Compra -DocType: Patient Appointment,Scheduled,Agendado -apps/erpnext/erpnext/config/buying.py +18,Request for quotation.,Solicitação de orçamento. -apps/erpnext/erpnext/selling/doctype/product_bundle/product_bundle.js +13,"Please select Item where ""Is Stock Item"" is ""No"" and ""Is Sales Item"" is ""Yes"" and there is no other Product Bundle","Por favor, selecione o item em que "é o estoque item" é "Não" e "é o item Vendas" é "Sim" e não há nenhum outro pacote de produtos" -DocType: Student Log,Academic,Acadêmico -apps/erpnext/erpnext/controllers/accounts_controller.py +617,Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2}),Avanço total ({0}) contra Pedido {1} não pode ser maior do que o total geral ({2}) -DocType: Sales Partner,Select Monthly Distribution to unevenly distribute targets across months.,Selecione distribuição mensal para distribuir desigualmente metas nos meses. -DocType: Vehicle,Diesel,Diesel -apps/erpnext/erpnext/stock/get_item_details.py +546,Price List Currency not selected,Lista de Preço Moeda não selecionado -,Student Monthly Attendance Sheet,Folha de Presença Mensal do Aluno -DocType: Rename Tool,Rename Log,Renomear Log -DocType: Maintenance Visit Purpose,Against Document No,Contra o Documento Nº -apps/erpnext/erpnext/config/selling.py +110,Manage Sales Partners.,Gerenciar parceiros de vendas. -apps/erpnext/erpnext/utilities/activation.py +117,Add Students,Adicionar Alunos -apps/erpnext/erpnext/hr/doctype/employee_tax_exemption_declaration/employee_tax_exemption_declaration.js +18,Please select {0},Por favor selecione {0} -DocType: C-Form,C-Form No,Nº do Formulário-C -DocType: BOM,Exploded_items,Exploded_items -DocType: Employee Attendance Tool,Unmarked Attendance,Presença Desmarcada -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +100,Researcher,Pesquisador -DocType: Program Enrollment Tool Student,Program Enrollment Tool Student,Ferramenta de Inscrição de Alunos no Programa -apps/erpnext/erpnext/hr/doctype/job_applicant/job_applicant.py +25,Name or Email is mandatory,Nome ou email é obrigatório -DocType: Purchase Order Item,Returned Qty,Qtde Devolvida -DocType: Student,Exit,Saída -apps/erpnext/erpnext/accounts/doctype/account/account.py +163,Root Type is mandatory,Tipo de Raiz é obrigatório -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +44,"{0} currently has a {1} Supplier Scorecard standing, and RFQs to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, as Cotações para este fornecedor devem ser emitidas com cautela." -DocType: BOM,Total Cost(Company Currency),Custo total (moeda da empresa) -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +398,Serial No {0} created,Nº de Série {0} criado -DocType: Homepage,Company Description for website homepage,A Descrição da Empresa para a página inicial do site -DocType: Item Customer Detail,"For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes","Para a comodidade dos clientes, estes códigos podem ser usados em formatos de impressão, como Notas Fiscais e Guias de Remessa" -apps/erpnext/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.py +18,Suplier Name,Nome do Fornecedor -DocType: Sales Invoice,Time Sheet List,Lista de Registros de Tempo -DocType: Employee,You can enter any date manually,Você pode inserir qualquer data manualmente -DocType: Asset Category Account,Depreciation Expense Account,Conta de Depreciação -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +191,Probationary Period,Período Probatório -DocType: Customer Group,Only leaf nodes are allowed in transaction,Somente nós-folha são permitidos em transações -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +168,Row {0}: Advance against Customer must be credit,Row {0}: Avanço contra o Cliente deve estar de crédito -apps/erpnext/erpnext/accounts/doctype/account/account.js +88,Non-Group to Group,Não-Grupo para Grupo -DocType: Purchase Receipt Item Supplied,Purchase Receipt Item Supplied,Item do Recibo de Compra Fornecido -apps/erpnext/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py +24,To Datetime,Até a Data e Hora -apps/erpnext/erpnext/config/selling.py +308,Logs for maintaining sms delivery status,Logs para a manutenção de status de entrega sms -DocType: Accounts Settings,Make Payment via Journal Entry,Fazer o Pagamento via Lançamento no Livro Diário -DocType: Fee Component,Fees Category,Categoria de Taxas -apps/erpnext/erpnext/hr/doctype/employee/employee.py +151,Please enter relieving date.,"Por favor, indique data da liberação." -apps/erpnext/erpnext/controllers/trends.py +149,Amt,Total -DocType: Opportunity,Enter name of campaign if source of enquiry is campaign,Digite o nome da campanha se o motivo da consulta foi uma campanha. -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +38,Newspaper Publishers,Editor de Newsletter -apps/erpnext/erpnext/support/page/support_analytics/support_analytics.js +30,Select Fiscal Year,Selecione Ano Fiscal -apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +43,Reorder Level,Estoque Mínimo -DocType: Attendance,Attendance Date,Data de Comparecimento -DocType: Salary Structure,Salary breakup based on Earning and Deduction.,Separação Salário com base em salário e dedução. -apps/erpnext/erpnext/accounts/doctype/account/account.py +135,Account with child nodes cannot be converted to ledger,Contas com nós filhos não podem ser convertidas em um livro-razão -DocType: Purchase Invoice Item,Accepted Warehouse,Armazén Aceito -DocType: Bank Reconciliation Detail,Posting Date,Data da Postagem -apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +203,Mark Half Day,Marcar Meio Período -DocType: Sales Invoice,Sales Team,Equipe de Vendas -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +88,Duplicate entry,Duplicar lançamento -DocType: Program Enrollment Tool,Get Students,Obter Alunos -DocType: Sales Order,In Words will be visible once you save the Sales Order.,Por extenso será visível quando você salvar o Pedido de Venda. -,Employee Birthday,Aniversário dos Colaboradores -DocType: Student Batch Attendance Tool,Student Batch Attendance Tool,Ferramenta de Presença de Alunos em Massa -DocType: UOM,Must be Whole Number,Deve ser Número inteiro -DocType: Leave Control Panel,New Leaves Allocated (In Days),Novas Licenças alocadas (em dias) -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +49,Serial No {0} does not exist,Nº de Série {0} não existe -DocType: Sales Invoice Item,Customer Warehouse (Optional),Armazén do Cliente (Opcional) -DocType: Payment Reconciliation Invoice,Invoice Number,Número da Nota Fiscal -DocType: Manufacturing Settings,Material Transferred for Manufacture,Material Transferido para Fabricação -DocType: Landed Cost Item,Receipt Document Type,Tipo de Documento de Recibo -DocType: Daily Work Summary Settings,Select Companies,Selecione Empresas -DocType: Antibiotic,Healthcare,Serviço de Saúde -DocType: Target Detail,Target Detail,Detalhe da meta -apps/erpnext/erpnext/hr/doctype/job_opening/job_opening.py +51,All Jobs,Todos as Tarefas -DocType: Sales Order,% of materials billed against this Sales Order,% do material faturado deste Pedido de Venda -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.js +65,Period Closing Entry,Lançamento de Encerramento do Período -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +40,Cost Center with existing transactions can not be converted to group,Centro de custo com as operações existentes não podem ser convertidos em grupo -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +376,Amount {0} {1} {2} {3},Total {0} {1} {2} {3} -DocType: Employee Attendance Tool,Employee Attendance Tool,Ferramenta para Lançamento de Ponto -apps/erpnext/erpnext/stock/report/item_variant_details/item_variant_details.py +77,Avg. Selling Price List Rate,Valor médio na lista de preços de venda -apps/erpnext/erpnext/accounts/utils.py +519,Payment Entries {0} are un-linked,Os Registos de Pagamento {0} não estão relacionados -DocType: GL Entry,Voucher No,Nº do Comprovante -,Lead Owner Efficiency,Eficiência do Administrador do Cliente em Potencial -DocType: Compensatory Leave Request,Leave Allocation,Alocação de Licenças -DocType: Training Event,Trainer Email,Email do Instrutor -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +550,Material Requests {0} created,Requisições de Material {0} criadas -DocType: Restaurant Reservation,No of People,Número de pessoas -DocType: Bank Account,Address and Contact,Endereço e Contato -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +306,Stock cannot be updated against Purchase Receipt {0},O estoque não pode ser atualizado em relação ao Recibo de Compra {0} -DocType: Support Settings,Auto close Issue after 7 days,Fechar atuomaticamente o incidente após 7 dias -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +85,"Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Deixe não pode ser alocado antes {0}, como saldo licença já tenha sido no futuro recorde alocação licença encaminhadas-carry {1}" -apps/erpnext/erpnext/accounts/party.py +350,Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),Observação: Devido / Data de referência excede dias de crédito de cliente permitido por {0} dia(s) -apps/erpnext/erpnext/education/doctype/program/program.js +8,Student Applicant,Inscrição do Aluno -DocType: Stock Settings,Freeze Stock Entries,Congelar Lançamentos no Estoque -DocType: Asset Finance Book,Expected Value After Useful Life,Valor Esperado Após Sua Vida Útil -DocType: Item,Reorder level based on Warehouse,Nível de reposição baseado no Armazén -DocType: Activity Cost,Billing Rate,Preço de Faturamento -,Qty to Deliver,Qtde para Entregar -,Stock Analytics,Análise do Estoque -DocType: Maintenance Visit Purpose,Against Document Detail No,Contra o Nº do Documento Detalhado -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +111,Party Type is mandatory,É obrigatório colocar o Tipo de Sujeito -DocType: Quality Inspection,Outgoing,De Saída -DocType: Material Request,Requested For,Solicitado para -DocType: Quotation Item,Against Doctype,Contra o Doctype -apps/erpnext/erpnext/controllers/buying_controller.py +503,{0} {1} is cancelled or closed,{0} {1} está cancelado(a) ou fechado(a) -DocType: Delivery Note,Track this Delivery Note against any Project,Acompanhar este Guia de Remessa contra qualquer projeto -DocType: Work Order,Work-in-Progress Warehouse,Armazén de Trabalho em Andamento -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +116,Asset {0} must be submitted,O Ativo {0} deve ser enviado -apps/erpnext/erpnext/education/doctype/student_attendance/student_attendance.py +56,Attendance Record {0} exists against Student {1},O registro de presença {0} já existe relaciolado ao Aluno {1} -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +390,Reference #{0} dated {1},Referência #{0} datado de {1} -apps/erpnext/erpnext/templates/includes/cart/cart_address.html +15,Manage Addresses,Gerenciar endereços -DocType: Serial No,Warranty / AMC Details,Garantia / Detalhes do CAM -DocType: Journal Entry,User Remark,Observação do Usuário -DocType: Lead,Market Segment,Segmento de Renda -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +999,Paid Amount cannot be greater than total negative outstanding amount {0},O valor pago não pode ser superior ao saldo devedor {0} -DocType: Employee Internal Work History,Employee Internal Work History,Histórico de Trabalho Interno do Colaborador -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +271,Closing (Dr),Fechamento (Dr) -DocType: Cheque Print Template,Cheque Size,Tamanho da Folha de Cheque -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +284,Serial No {0} not in stock,Nº de Série {0} esgotado -apps/erpnext/erpnext/config/selling.py +169,Tax template for selling transactions.,Modelo impostos para transações de venda. -DocType: Sales Invoice,Write Off Outstanding Amount,Abater saldo devedor -DocType: Stock Settings,Default Stock UOM,Unidade de Medida Padrão do Estoque -DocType: Landed Cost Item,Receipt Document,Documento de Recibo -DocType: Employee Education,School/University,Escola / Universidade -DocType: Sales Invoice Item,Available Qty at Warehouse,Qtde Disponível no Estoque -apps/erpnext/erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py +20,Billed Amount,Total Faturado -DocType: Asset,Double Declining Balance,Equilíbrio decrescente duplo -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +188,Closed order cannot be cancelled. Unclose to cancel.,ordem fechada não pode ser cancelada. Unclose para cancelar. -apps/erpnext/erpnext/controllers/accounts_controller.py +703,'Update Stock' cannot be checked for fixed asset sale,"""Atualizar Estoque"" não pode ser selecionado para venda de ativo fixo" -DocType: Bank Reconciliation,Bank Reconciliation,Conciliação bancária -DocType: Attendance,On Leave,De Licença -apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +7,Get Updates,Receber notícias -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +97,{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Conta {2} não pertence à empresa {3} -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +164,Material Request {0} is cancelled or stopped,Requisição de Material {0} é cancelada ou parada -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +214,Lower Income,Baixa Renda -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +244,"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry","Conta diferença deve ser uma conta de tipo ativo / passivo, uma vez que este da reconciliação é uma entrada de Abertura" -apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +91,Purchase Order number required for Item {0},Número do Pedido de Compra necessário para o item {0} -apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +18,'From Date' must be after 'To Date',A 'Data Final' deve ser posterior a 'Data Inicial' -apps/erpnext/erpnext/education/doctype/student_applicant/student_applicant.py +39,Cannot change status as student {0} is linked with student application {1},Não é possível alterar o status pois o aluno {0} está relacionado à candidatura à vaga de estudo {1} -DocType: Asset,Fully Depreciated,Depreciados Totalmente -,Stock Projected Qty,Projeção de Estoque -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +516,Customer {0} does not belong to project {1},Cliente {0} não pertence ao projeto {1} -DocType: Employee Attendance Tool,Marked Attendance HTML,Presença marcante HTML -DocType: Sales Invoice,Customer's Purchase Order,Pedido de Compra do Cliente -apps/erpnext/erpnext/config/stock.py +112,Serial No and Batch,Número de Série e Lote -apps/erpnext/erpnext/public/js/stock_analytics.js +48,Value or Qty,Valor ou Qtde -DocType: Payment Terms Template,Payment Terms,Termos de Pagamento -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +485,Productions Orders cannot be raised for:,Ordens de produção não puderam ser geradas para: -DocType: Purchase Invoice,Purchase Taxes and Charges,Impostos e Encargos sobre Compras -,Qty to Receive,Qtde para Receber -DocType: Leave Block List,Leave Block List Allowed,Deixe Lista de Bloqueios admitidos -DocType: Grading Scale Interval,Grading Scale Interval,Intervalo da escala de avaliação -apps/erpnext/erpnext/hr/doctype/vehicle_log/vehicle_log.py +49,Expense Claim for Vehicle Log {0},Reembolso de Despesa para o Log do Veículo {0} -DocType: Healthcare Service Unit Type,Rate / UOM,Valor / UDM -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +144,Credit To account must be a Balance Sheet account,Para crédito de conta deve ser uma conta de Balanço -DocType: Global Defaults,Disable In Words,Desativar por extenso -apps/erpnext/erpnext/stock/doctype/item/item.py +74,Item Code is mandatory because Item is not automatically numbered,Código do item é obrigatório porque Item não é numerada automaticamente -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +102,Quotation {0} not of type {1},O Orçamento {0} não é do tipo {1} -DocType: Maintenance Schedule Item,Maintenance Schedule Item,Ítem da Programação da Manutenção -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +167,Bank Overdraft Account,Conta Bancária Garantida -apps/erpnext/erpnext/projects/doctype/timesheet/timesheet.js +49,Make Salary Slip,Criar Folha de Pagamento -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.js +84,Browse BOM,Navegar LDM -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +106,Please set Depreciation related Accounts in Asset Category {0} or Company {1},"Por favor, defina as contas relacionadas com depreciação de ativos em Categoria {0} ou Empresa {1}" -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +179,Opening Balance Equity,Saldo de Abertura do Patrimônio Líquido -apps/erpnext/erpnext/education/report/assessment_plan_status/assessment_plan_status.py +175,Remaining,Remanescente -apps/erpnext/erpnext/hr/doctype/leave_block_list/leave_block_list.py +19,Date is repeated,Data é repetida -apps/erpnext/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html +27,Authorized Signatory,Signatário autorizado -DocType: Project,Total Purchase Cost (via Purchase Invoice),Custo Total de Compra (via Fatura de Compra) -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +34,Approving Role cannot be same as role the rule is Applicable To,Perfil Aprovandor não pode ser o mesmo Perfil da regra é aplicável a -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +65,Unsubscribe from this Email Digest,Cancelar a inscrição neste Resumo por Email -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.js +29,Message Sent,Mensagem enviada -apps/erpnext/erpnext/accounts/doctype/account/account.py +105,Account with child nodes cannot be set as ledger,Conta com nós filho não pode ser definido como contabilidade -DocType: Sales Invoice,Rate at which Price list currency is converted to customer's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base do cliente -DocType: Purchase Invoice Item,Net Amount (Company Currency),Valor Líquido (moeda da empresa) -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +223,Total advance amount cannot be greater than total sanctioned amount,O montante do adiantamento total não pode ser maior do que o montante liberado total -DocType: Salary Slip,Hour Rate,Valor por Hora -DocType: Stock Settings,Item Naming By,Nomeação de Item por -apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +46,Another Period Closing Entry {0} has been made after {1},Outra entrada no Período de Encerramento {0} foi feita após {1} -DocType: Work Order,Material Transferred for Manufacturing,Material Transferido para Fabricação -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +49,Account {0} does not exists,Conta {0} não existe -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person.py +17,Either target qty or target amount is mandatory.,Meta de qtde ou valor da meta são obrigatórios. -apps/erpnext/erpnext/config/projects.py +56,Cost of various activities,Custo das diferentes actividades -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +60,"Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}","Configurando eventos para {0}, uma vez que o colaborador relacionado aos vendedores abaixo não tem um ID do usuário {1}" -apps/erpnext/erpnext/stock/dashboard/item_dashboard.js +163,Source and target warehouse must be different,O armazén de origem e o armazém de destino devem ser diferentes um do outro -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +101,Not allowed to update stock transactions older than {0},Não é permitido atualizar transações com ações mais velho do que {0} -DocType: Purchase Invoice Item,PR Detail,Detalhe PR -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +20,Cash In Hand,Dinheiro na Mão -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +143,Delivery warehouse required for stock item {0},Armazén de entrega necessário para item do estoque {0} -DocType: Packing Slip,The gross weight of the package. Usually net weight + packaging material weight. (for print),O peso bruto do pacote. Normalmente peso líquido + peso do material de embalagem. (para impressão) -DocType: Accounts Settings,Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,Os usuários com esta função são autorizados a estabelecer contas congeladas e criar / modificar lançamentos contábeis contra contas congeladas -DocType: Serial No,Is Cancelled,É cancelado -DocType: Journal Entry,Bill Date,Data de Faturamento -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +45,"Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:","Mesmo se houver várias regras de preços com maior prioridade, então seguintes prioridades internas são aplicadas:" -DocType: Supplier,Supplier Details,Detalhes do Fornecedor -DocType: Expense Claim,Approval Status,Estado da Aprovação -apps/erpnext/erpnext/accounts/doctype/shipping_rule/shipping_rule.py +35,From value must be less than to value in row {0},Do valor deve ser menor do que o valor na linha {0} -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +135,Wire Transfer,por Transferência Bancária -apps/erpnext/erpnext/education/doctype/student_attendance_tool/student_attendance_tool.js +93,Check all,Marcar todos -DocType: Vehicle Log,Invoice Ref,Nota Fiscal de Referência -DocType: Company,Default Income Account,Conta Padrão de Recebimento -apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +39,Unclosed Fiscal Years Profit / Loss (Credit),Lucro / Prejuízo (Crédito) de Anos Fiscais não Encerrados -DocType: Sales Invoice,Time Sheets,Registros de Tempo -DocType: Payment Gateway Account,Default Payment Request Message,Mensagem Padrão de Pedido de Pagamento -DocType: Item Group,Check this if you want to show in website,Marque esta opção se você deseja mostrar no site -apps/erpnext/erpnext/config/accounts.py +130,Banking and Payments,Bancos e Pagamentos -,Welcome to ERPNext,Bem vindo ao ERPNext -apps/erpnext/erpnext/config/learn.py +102,Lead to Quotation,Fazer um Orçamento -apps/erpnext/erpnext/demo/setup/setup_data.py +340,Calls,chamadas -DocType: Purchase Order Item Supplied,Stock UOM,Unidade de Medida do Estoque -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +263,Purchase Order {0} is not submitted,Pedido de Compra {0} não é enviado -DocType: Work Order Item,Available Qty at WIP Warehouse,Qtd disponível no Armazén de Trabalho em Andamento -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +233,Serial No {0} does not belong to Warehouse {1},Serial Não {0} não pertence ao Armazém {1} -apps/erpnext/erpnext/controllers/status_updater.py +180,Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0,Nota : O sistema não irá verificar o excesso de entrega e sobre- reserva para item {0} como quantidade ou valor é 0 -DocType: Notification Control,Quotation Message,Mensagem do Orçamento -DocType: Purchase Receipt Item,Rate and Amount,Preço e Total -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +77,Both Warehouse must belong to same Company,Ambos Armazéns devem pertencer a mesma empresa -apps/erpnext/erpnext/public/js/templates/contact_list.html +34,No contacts added yet.,Nenhum contato adicionado ainda. -DocType: Purchase Invoice Item,Landed Cost Voucher Amount,Comprovante de Custo do Desembarque -apps/erpnext/erpnext/config/accounts.py +19,Bills raised by Suppliers.,Faturas emitidas por Fornecedores. -DocType: POS Profile,Write Off Account,Conta de Abatimentos -DocType: Purchase Invoice Item,Discount Amount,Valor do Desconto -DocType: Purchase Invoice,Return Against Purchase Invoice,Devolução Relacionada à Fatura de Compra -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py +30,Sub-contracting,Subcontratação -DocType: Journal Entry Account,Journal Entry Account,Conta de Lançamento no Livro Diário -apps/erpnext/erpnext/education/doctype/academic_year/academic_year.js +3,Student Group,Grupo de Alunos -DocType: Shopping Cart Settings,Quotation Series,Séries de Orçamento -apps/erpnext/erpnext/setup/doctype/item_group/item_group.py +60,"An item exists with same name ({0}), please change the item group name or rename the item","Um item existe com o mesmo nome ( {0}) , por favor, altere o nome do grupo de itens ou renomeie o item" -apps/erpnext/erpnext/accounts/page/pos/pos.js +2052,Please select customer,Selecione o cliente -DocType: Company,Asset Depreciation Cost Center,Centro de Custo do Ativo Depreciado -DocType: Production Plan Sales Order,Sales Order Date,Data do Pedido de Venda -DocType: Sales Invoice Item,Delivered Qty,Qtde Entregue -apps/erpnext/erpnext/healthcare/doctype/patient/patient.py +90,Customer {0} is created.,O cliente {0} foi criado. -DocType: Stock Settings,Limit Percent,Limite Percentual -,Payment Period Based On Invoice Date,Prazo Médio de Pagamento Baseado na Emissão da Nota -apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +59,Missing Currency Exchange Rates for {0},Faltando taxas de câmbio para {0} -DocType: Journal Entry,Stock Entry,Lançamento no Estoque -DocType: Asset,Insurance Details,Detalhes do Seguro -DocType: Account,Payable,A pagar -apps/erpnext/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py +57,New Customers,Clientes Novos -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +72,Gross Profit %,Lucro Bruto % -DocType: Bank Reconciliation Detail,Clearance Date,Data de Liberação -apps/erpnext/erpnext/assets/doctype/asset/asset.py +72,Gross Purchase Amount is mandatory,Valor Bruto de Compra é obrigatório -DocType: Lead,Address Desc,Descrição do Endereço -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +114,Party is mandatory,É obrigatório colocar o sujeito -DocType: Topic,Topic Name,Nome do tópico -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +38,Atleast one of the Selling or Buying must be selected,Pelo menos um dos Vendedores ou Compradores deve ser selecionado -apps/erpnext/erpnext/public/js/setup_wizard.js +36,Select the nature of your business.,Selecione a natureza do seu negócio. -apps/erpnext/erpnext/config/manufacturing.py +57,Where manufacturing operations are carried.,Onde as operações de fabricação são realizadas. -DocType: BOM Explosion Item,Source Warehouse,Armazém de origem -apps/erpnext/erpnext/controllers/accounts_controller.py +677,Row #{0}: Asset {1} does not belong to company {2},Linha # {0}: Ativo {1} não pertence à empresa {2} -DocType: C-Form,Total Invoiced Amount,Valor Total Faturado -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +51,Min Qty can not be greater than Max Qty,Qtde mínima não pode ser maior do que qtde máxima -DocType: Stock Entry,Customer or Supplier Details,Detalhes do Cliente ou Fornecedor -DocType: Loan Application,Required by Date,Necessário até a data -DocType: Lead,Lead Owner,Proprietário do Cliente em Potencial -DocType: Stock Settings,Auto Material Request,Requisição de Material Automática -DocType: Delivery Note Item,Available Batch Qty at From Warehouse,Qtde Disponível do Lote no Armazém -apps/erpnext/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py +39,Current BOM and New BOM can not be same,A LDM Atual e a Nova LDM não podem ser as mesmas -apps/erpnext/erpnext/hr/report/salary_register/salary_register.py +47,Salary Slip ID,ID da folha de pagamento -apps/erpnext/erpnext/hr/doctype/employee/employee.py +135,Date Of Retirement must be greater than Date of Joining,Data da aposentadoria deve ser maior que Data de Contratação -DocType: Sales Invoice,Against Income Account,Contra a Conta de Recebimentos -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +106,Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item).,Item {0}: Qtde pedida {1} não pode ser inferior a qtde mínima de pedido {2} (definido no cadastro do Item). -DocType: Monthly Distribution Percentage,Monthly Distribution Percentage,Distribuição percentual mensal -DocType: Territory,Territory Targets,Metas do Território -DocType: Delivery Note,Transporter Info,Informações da Transportadora -apps/erpnext/erpnext/accounts/utils.py +526,Please set default {0} in Company {1},Por favor configure um(a) {0} padrão na empresa {1} -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +33,Same supplier has been entered multiple times,Mesmo fornecedor foi inserido várias vezes -apps/erpnext/erpnext/accounts/report/profitability_analysis/profitability_analysis.py +152,Gross Profit / Loss,Lucro / Prejuízo Bruto -DocType: Purchase Order Item Supplied,Purchase Order Item Supplied,Item Fornecido do Pedido de Compra -apps/erpnext/erpnext/public/js/setup_wizard.js +94,Company Name cannot be Company,Nome da empresa não pode ser empresa -apps/erpnext/erpnext/config/setup.py +27,Letter Heads for print templates.,Cabeçalhos para modelos de impressão. -DocType: Student Guardian,Student Guardian,Responsável pelo Aluno -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +231,Valuation type charges can not marked as Inclusive,Encargos tipo de avaliação não pode marcado como Inclusive -DocType: POS Profile,Update Stock,Atualizar Estoque -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +100,Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM.,UDM diferente para itens gerará um Peso Líquido (Total ) incorreto. Certifique-se de que o peso líquido de cada item está na mesma UDM. -apps/erpnext/erpnext/stock/report/item_prices/item_prices.py +41,BOM Rate,Valor na LDM -DocType: Asset,Journal Entry for Scrap,Lançamento no Livro Diário para Sucata -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +83,Please pull items from Delivery Note,"Por favor, puxar itens de entrega Nota" -apps/erpnext/erpnext/accounts/utils.py +496,Journal Entries {0} are un-linked,Lançamentos no Livro Diário {0} são desvinculados -DocType: Manufacturer,Manufacturers used in Items,Fabricantes utilizados em Itens -apps/erpnext/erpnext/accounts/general_ledger.py +181,Please mention Round Off Cost Center in Company,"Por favor, mencione completam centro de custo na empresa" -DocType: Purchase Invoice,Terms,Condições -DocType: Academic Term,Term Name,Nome do Período Letivo -DocType: Buying Settings,Purchase Order Required,Pedido de Compra Obrigatório -,Item-wise Sales History,Histórico de Vendas por Item -DocType: Expense Claim,Total Sanctioned Amount,Valor Total Liberado -,Purchase Analytics,Analítico de Compras -DocType: Purchase Taxes and Charges,Reference Row #,Referência Linha # -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +76,Batch number is mandatory for Item {0},Número do lote é obrigatória para item {0} -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person.js +22,This is a root sales person and cannot be edited.,Esta é uma pessoa de vendas de raiz e não pode ser editado. -,Stock Ledger,Livro de Inventário -apps/erpnext/erpnext/templates/includes/cart/cart_items.html +29,Rate: {0},Classificação: {0} -DocType: Company,Exchange Gain / Loss Account,Conta de Ganho / Perda com Câmbio -apps/erpnext/erpnext/config/hr.py +7,Employee and Attendance,Colaborador e Ponto -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +123,Purpose must be one of {0},Objetivo deve ser um dos {0} -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.js +99,Fill the form and save it,Preencha o formulário e salve -apps/erpnext/erpnext/setup/page/welcome_to_erpnext/welcome_to_erpnext.html +26,Community Forum,Forum da Comunidade -apps/erpnext/erpnext/stock/page/stock_balance/stock_balance.js +52,Actual qty in stock,Quantidade real em estoque -DocType: Leave Application,Leave Balance Before Application,Saldo de Licenças Antes da Solicitação -apps/erpnext/erpnext/healthcare/doctype/lab_test/lab_test.js +41,Send SMS,Envie SMS -DocType: Company,Default Letter Head,Cabeçalho Padrão -DocType: Purchase Order,Get Items from Open Material Requests,Obter Itens de Requisições de Material Abertas -DocType: Lab Test Template,Standard Selling Rate,Valor de venda padrão -DocType: Account,Rate at which this tax is applied,Taxa em que este imposto é aplicado -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +92,Reorder Qty,Qtde para Reposição -apps/erpnext/erpnext/hr/doctype/job_opening/job_opening.py +55,Current Job Openings,Vagas Disponíveis Atualmente -DocType: Company,Stock Adjustment Account,Conta de Ajuste -apps/erpnext/erpnext/public/js/payment/pos_payment.html +17,Write Off,Abatimento -DocType: Timesheet Detail,Operation ID,ID da Operação -DocType: Employee,"System User (login) ID. If set, it will become default for all HR forms.","Identificação do usuário no sistema (login). Se for marcado, ele vai se tornar padrão para todos os formulários de RH." -apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +16,{0}: From {1},{0}: A partir de {1} -apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +26,Name of new Account. Note: Please don't create accounts for Customers and Suppliers,"Nome da nova conta. Nota: Por favor, não criar contas para Clientes e Fornecedores" -apps/erpnext/erpnext/config/setup.py +37,Country wise default Address Templates,Modelos de Endereços Padronizados por País -apps/erpnext/erpnext/stock/report/item_variant_details/item_variant_details.py +77,Avg. Buying Price List Rate,Valor médio de lista de preços de compra -DocType: Sales Order Item,Supplier delivers to Customer,O fornecedor entrega diretamente ao cliente -apps/erpnext/erpnext/utilities/bot.py +34,[{0}](#Form/Item/{0}) is out of stock,Não há [{0}] ({0}) em estoque. -apps/erpnext/erpnext/accounts/party.py +353,Due / Reference Date cannot be after {0},Vencimento / Data de Referência não pode ser depois de {0} -apps/erpnext/erpnext/config/setup.py +51,Data Import and Export,Importação e Exportação de Dados -DocType: Tax Withholding Category,Account Details,Detalhes da Conta -apps/erpnext/erpnext/education/doctype/student_group/student_group.py +76,No students Found,Nenhum Aluno Encontrado -apps/erpnext/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py +55,Invoice Posting Date,Data do Lançamento da Fatura -DocType: Product Bundle,List items that form the package.,Lista de itens que compõem o pacote. -apps/erpnext/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.py +26,Percentage Allocation should be equal to 100%,Percentual de alocação deve ser igual a 100% -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +611,Please select Posting Date before selecting Party,"Por favor, selecione data de lançamento antes de selecionar o sujeito" -DocType: Serial No,Out of AMC,Fora do CAM -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js +47,Make Maintenance Visit,Criar Visita de Manutenção -apps/erpnext/erpnext/selling/doctype/customer/customer.py +263,Please contact to the user who have Sales Master Manager {0} role,"Por favor, entre em contato com um usuário que tem a função {0} Gerente de Cadastros de Vendas" -apps/erpnext/erpnext/config/accounts.py +40,Company (not Customer or Supplier) master.,"Cadastro da Empresa (a própria companhia, não se refere ao cliente, nem ao fornecedor)" -apps/erpnext/erpnext/education/doctype/student/student_dashboard.py +6,This is based on the attendance of this Student,Isto é baseado na frequência do aluno -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +224,Delivery Notes {0} must be cancelled before cancelling this Sales Order,A Guia de Remessa {0} deve ser cancelada antes de cancelar este Pedido de Venda -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +113,Paid amount + Write Off Amount can not be greater than Grand Total,Valor pago + Valor do abatimento não pode ser maior do que o total geral -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +78,{0} is not a valid Batch Number for Item {1},{0} não é um número de lote válido para o item {1} -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +198,Note: There is not enough leave balance for Leave Type {0},Nota: Não é suficiente equilíbrio pela licença Tipo {0} -DocType: Program Enrollment Fee,Program Enrollment Fee,Taxa de Inscrição no Programa -DocType: Item,Supplier Items,Itens do Fornecedor -apps/erpnext/erpnext/setup/doctype/company/delete_company_transactions.py +19,Transactions can only be deleted by the creator of the Company,Transações só podem ser excluídos pelo criador da Companhia -apps/erpnext/erpnext/accounts/general_ledger.py +21,Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,Número incorreto de General Ledger Entries encontrado. Talvez você tenha selecionado uma conta de errado na transação. -DocType: Selling Settings,Validate Selling Price for Item against Purchase Rate or Valuation Rate,Validar Preço de Venda para o Item de acordo com o Valor de Compra ou Taxa de Avaliação -DocType: Fee Schedule,Fee Schedule,Cronograma de Taxas -DocType: Company,Create Chart Of Accounts Based On,Criar plano de contas baseado em -apps/erpnext/erpnext/hr/doctype/employee/employee.py +129,Date of Birth cannot be greater than today.,Data de nascimento não pode ser maior do que hoje. -,Stock Ageing,Envelhecimento do Estoque -apps/erpnext/erpnext/projects/doctype/task/task.js +39,Timesheet,Registro de Tempo -apps/erpnext/erpnext/controllers/accounts_controller.py +315,{0} '{1}' is disabled,{0} '{1}' está desativado -DocType: Cheque Print Template,Scanned Cheque,Cheque Escaneado -DocType: Notification Control,Send automatic emails to Contacts on Submitting transactions.,Enviar emails automáticos para Contatos sobre transações de enviar. -DocType: Customer,Credit Limit and Payment Terms,Limite de Crédito e Termos de Pagamento -DocType: Purchase Order,Customer Contact Email,Cliente Fale Email -DocType: Warranty Claim,Item and Warranty Details,Itens e Garantia Detalhes -apps/erpnext/erpnext/controllers/accounts_controller.py +143,Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,Nota: Entrada pagamento não será criado desde 'Cash ou conta bancária ' não foi especificado -DocType: Accounts Settings,Allow Stale Exchange Rates,Permitir taxas de câmbio defasadas -DocType: Sales Person,Sales Person Name,Nome do Vendedor -apps/erpnext/erpnext/accounts/doctype/c_form/c_form.py +54,Please enter atleast 1 invoice in the table,"Por favor, indique pelo menos uma fatura na tabela" -apps/erpnext/erpnext/utilities/user_progress.py +247,Add Users,Adicionar Usuários -DocType: POS Item Group,Item Group,Grupo de Itens -DocType: Item,Safety Stock,Estoque de Segurança -DocType: Healthcare Settings,Healthcare Settings,Configurações de Serviço de Saúde -DocType: Purchase Invoice,Taxes and Charges Added (Company Currency),Impostos e taxas acrescidos (moeda da empresa) -apps/erpnext/erpnext/stock/doctype/item/item.py +507,Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,Item Imposto Row {0} deve ter em conta tipo de imposto ou de renda ou de despesa ou carregável -apps/erpnext/erpnext/setup/doctype/company/company.js +109,Please re-type company name to confirm,"Por favor, digite novamente o nome da empresa para confirmar" -apps/erpnext/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +50,Total Outstanding Amt,Total devido -DocType: Journal Entry,Printing Settings,Configurações de impressão -DocType: Employee Advance,Advance Account,Conta de Adiantamentos -DocType: Sales Invoice,Include Payment (POS),Incluir pagamento (PDV) -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +324,Total Debit must be equal to Total Credit. The difference is {0},Débito total deve ser igual ao total de crédito. -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +11,Automotive,Automotivo -DocType: Asset Category Account,Fixed Asset Account,Conta do Ativo Imobilizado -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.js +47,From Delivery Note,De Nota de Entrega -DocType: Cashier Closing,From Time,Do Horário -apps/erpnext/erpnext/public/js/pos/pos_bill_item.html +12,In Stock: ,No Estoque: -DocType: Notification Control,Custom Message,Mensagem personalizada -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +33,Investment Banking,Investimento Bancário -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +107,Cash or Bank Account is mandatory for making payment entry,Dinheiro ou conta bancária é obrigatória para a tomada de entrada de pagamento -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +82,Intern,internar -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +94,Stock transactions before {0} are frozen,Transações com ações antes {0} são congelados -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +219,Please click on 'Generate Schedule',"Por favor, clique em ""Gerar Agenda""" -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +154,Reference No is mandatory if you entered Reference Date,Referência Não é obrigatório se você entrou Data de Referência -apps/erpnext/erpnext/hr/doctype/employee/employee.py +132,Date of Joining must be greater than Date of Birth,Data de Contratação deve ser maior do que a Data de Nascimento -apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +886,Issue Material,Saída de Material -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1161,For Warehouse,Para Armazén -DocType: Employee,Offer Date,Data da Oferta -apps/erpnext/erpnext/selling/page/sales_funnel/sales_funnel.py +35,Quotations,Orçamentos -apps/erpnext/erpnext/accounts/page/pos/pos.js +742,You are in offline mode. You will not be able to reload until you have network.,Você está em modo offline. Você não será capaz de recarregar até ter conexão. -apps/erpnext/erpnext/education/doctype/student_group_creation_tool/student_group_creation_tool.py +47,No Student Groups created.,Não foi criado nenhum grupo de alunos. -DocType: Purchase Invoice Item,Serial No,Nº de Série -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +143,Please enter Maintaince Details first,"Por favor, indique Maintaince Detalhes primeiro" -DocType: Stock Entry,Including items for sub assemblies,Incluindo itens para subconjuntos -apps/erpnext/erpnext/education/doctype/program_enrollment/program_enrollment.py +33,Student is already enrolled.,Aluno já está inscrito. -DocType: Fiscal Year,Year Name,Nome do ano -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +323,There are more holidays than working days this month.,Há mais feriados do que dias úteis do mês. -DocType: Production Plan Item,Product Bundle Item,Item do Pacote de Produtos -DocType: Sales Partner,Sales Partner Name,Nome do Parceiro de Vendas -apps/erpnext/erpnext/hooks.py +148,Request for Quotations,Solicitação de Orçamento -DocType: Payment Reconciliation,Maximum Invoice Amount,Valor Máximo da Fatura -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +24,Order/Quot %,Pedido / Orçamentos % -DocType: Asset,Partially Depreciated,parcialmente depreciados -DocType: Issue,Opening Time,Horário de Abertura -apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +97,From and To dates required,De e datas necessárias -apps/erpnext/erpnext/stock/doctype/item/item.py +760,Default Unit of Measure for Variant '{0}' must be same as in Template '{1}',A unidade de medida padrão para a variante '{0}' deve ser o mesmo que no modelo '{1}' -DocType: Shipping Rule,Calculate Based On,Calcule Baseado em -DocType: Delivery Note Item,From Warehouse,Armazén de Origem -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1033,No Items with Bill of Materials to Manufacture,Não há itens com Lista de Materiais para Fabricação -DocType: Assessment Plan,Supervisor Name,Nome do supervisor -DocType: Purchase Taxes and Charges,Valuation and Total,Valorização e Total -DocType: Notification Control,Customize the Notification,Personalizar a Notificação -DocType: Manufacturer,Limited to 12 characters,Limitados a 12 caracteres -DocType: Journal Entry,Print Heading,Cabeçalho de Impressão -apps/erpnext/erpnext/config/stock.py +149,Delivery Trip service tours to customers.,Fretes e entregas para Clientes. -apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +57,Total cannot be zero,Total não pode ser zero -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +16,'Days Since Last Order' must be greater than or equal to zero,'Dias desde a última Ordem' deve ser maior ou igual a zero -DocType: Journal Entry Account,Employee Advance,Adiantamento à Colaboradores -DocType: Leave Application,Follow via Email,Receber alterações por Email -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +56,Plants and Machineries,Instalações e Maquinários -DocType: Purchase Taxes and Charges,Tax Amount After Discount Amount,Total de Impostos Depois Montante do Desconto -DocType: Daily Work Summary Settings,Daily Work Summary Settings,Configurações do Resumo de Trabalho Diário -apps/erpnext/erpnext/setup/doctype/territory/territory.py +19,Either target qty or target amount is mandatory,Meta de qtde ou valor da meta são obrigatórios -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +627,Please select Posting Date first,"Por favor, selecione Data de lançamento primeiro" -apps/erpnext/erpnext/public/js/account_tree_grid.js +209,Opening Date should be before Closing Date,Data de Abertura deve ser antes da Data de Fechamento -DocType: Leave Control Panel,Carry Forward,Encaminhar -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +32,Cost Center with existing transactions can not be converted to ledger,Centro de custo com as operações existentes não podem ser convertidos em registro -DocType: Department,Days for which Holidays are blocked for this department.,Dias para que feriados são bloqueados para este departamento. -DocType: Issue,Raised By (Email),Levantadas por (Email) -DocType: Training Event,Trainer Name,Nome do Instrutor -apps/erpnext/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py +28,Last Communication,Último Contato -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +385,Cannot deduct when category is for 'Valuation' or 'Valuation and Total',Não pode deduzir quando é para categoria ' Avaliação ' ou ' Avaliação e Total' -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +286,Serial Nos Required for Serialized Item {0},Nº de Série Obrigatório para o Item Serializado {0} -apps/erpnext/erpnext/config/accounts.py +140,Match Payments with Invoices,Conciliação de Pagamentos -DocType: Journal Entry,Bank Entry,Lançamento Bancário -DocType: Authorization Rule,Applicable To (Designation),Aplicável Para (Designação) -,Profitability Analysis,Análise de Lucratividade -DocType: Supplier,Prevent POs,Evitar Pedidos de Compra -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.js +197,Group By,Agrupar por -apps/erpnext/erpnext/config/accounts.py +266,Enable / disable currencies.,Ativar / Desativar moedas. -DocType: Production Plan,Get Material Request,Obter Requisições de Material -apps/erpnext/erpnext/controllers/trends.py +19,Total(Amt),Total (Quantia) -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +26,Entertainment & Leisure,Entretenimento & Lazer -DocType: Quality Inspection,Item Serial No,Nº de série do Item -apps/erpnext/erpnext/utilities/activation.py +135,Create Employee Records,Criar registros de colaboradores -apps/erpnext/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +97,Total Present,Total Presente -apps/erpnext/erpnext/config/accounts.py +83,Accounting Statements,Demonstrativos Contábeis -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +33,New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt,"New Serial Não, não pode ter Warehouse. Warehouse deve ser definida pelo Banco de entrada ou Recibo de compra" -DocType: Lead,Lead Type,Tipo de Cliente em Potencial -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +183,You are not authorized to approve leaves on Block Dates,Você não está autorizado a aprovar folhas em datas Bloco -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +408,All these items have already been invoiced,Todos esses itens já foram faturados -DocType: Company,Monthly Sales Target,Meta de Vendas Mensais -apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py +37,Can be approved by {0},Pode ser aprovado pelo {0} -DocType: Item,Default Material Request Type,Tipo de Requisição de Material Padrão -DocType: Shipping Rule,Shipping Rule Conditions,Regra Condições de envio -DocType: BOM Update Tool,The new BOM after replacement,A nova LDM após substituição -,Point of Sale,Ponto de Vendas -DocType: Payment Entry,Received Amount,Total recebido -DocType: Payment Entry,Party Name,Nome do Sujeito -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +153,"Batched Item {0} cannot be updated using Stock Reconciliation, instead use Stock Entry","O item em lote {0} não pode ser atualizado utilizando a Reconciliação de Estoque, em vez disso, utilize o Lançamento de Estoque" -DocType: Quality Inspection,Report Date,Data do Relatório -DocType: Job Opening,Job Title,Cargo -DocType: Manufacturing Settings,Update BOM Cost Automatically,Atualize automaticamente o preço da lista de materiais -apps/erpnext/erpnext/utilities/activation.py +99,Create Users,Criar Usuários -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +414,Quantity to Manufacture must be greater than 0.,Quantidade de Fabricação deve ser maior que 0. -DocType: Asset Settings,Calculate Prorated Depreciation Schedule Based on Fiscal Year,Calcular Depreciação Proporcional no Calendário com base no Ano Fiscal -apps/erpnext/erpnext/config/maintenance.py +17,Visit report for maintenance call.,Relatório da visita da chamada de manutenção. -DocType: Stock Entry,Update Rate and Availability,Atualizar Valor e Disponibilidade -DocType: Stock Settings,Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.,"Percentagem que estão autorizados a receber ou entregar mais contra a quantidade encomendada. Por exemplo: Se você encomendou 100 unidades. e seu subsídio é de 10%, então você está autorizada a receber 110 unidades." -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +231,Expense account is mandatory for item {0},Conta de despesa é obrigatória para item {0} -DocType: BOM,Website Description,Descrição do Site -apps/erpnext/erpnext/accounts/report/cash_flow/cash_flow.py +101,Net Change in Equity,Mudança no Patrimônio Líquido -apps/erpnext/erpnext/assets/doctype/asset/asset.py +300,Please cancel Purchase Invoice {0} first,Por favor cancelar a Fatura de Compra {0} primeiro -DocType: Serial No,AMC Expiry Date,Data de Validade do CAM -,Sales Register,Registro de Vendas -DocType: Daily Work Summary Group,Send Emails At,Enviar Emails em -DocType: Quotation,Quotation Lost Reason,Motivo da perda do Orçamento -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +383,Transaction reference no {0} dated {1},Referência da transação nº {0} em {1} -apps/erpnext/erpnext/setup/doctype/supplier_group/supplier_group.js +5,There is nothing to edit.,Não há nada a ser editado. -apps/erpnext/erpnext/selling/page/point_of_sale/point_of_sale.js +542,Form View,Ver Formulário -apps/erpnext/erpnext/public/js/financial_statements.js +58,Cash Flow Statement,Demonstrativo de Fluxo de Caixa -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +563,Please remove this Invoice {0} from C-Form {1},"Por favor, remova esta Invoice {0} a partir de C-Form {1}" -DocType: Leave Control Panel,Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year,Por favor selecione Encaminhar se você também quer incluir o saldo de licenças do ano fiscal anterior neste ano fiscal -DocType: GL Entry,Against Voucher Type,Contra o Tipo de Comprovante -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +256,Please enter Write Off Account,"Por favor, indique a conta de abatimento" -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +71,Last Order Date,Data do último pedido -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +57,Account {0} does not belongs to company {1},Conta {0} não pertence à empresa {1} -DocType: Student,Guardian Details,Detalhes do Responsável -DocType: C-Form,C-Form,Formulário-C -DocType: Vehicle,Chassis No,Nº do Chassi -DocType: Payment Request,Initiated,Iniciada -DocType: Production Plan Item,Planned Start Date,Data Planejada de Início -DocType: Serial No,Creation Document Type,Tipo de Criação do Documento -apps/erpnext/erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.js +24,Make Journal Entry,Fazer Lançamento no Livro Diário -DocType: Leave Allocation,New Leaves Allocated,Novas Licenças alocadas -apps/erpnext/erpnext/controllers/trends.py +269,Project-wise data is not available for Quotation,Dados do baseados em projeto não estão disponíveis para Orçamentos -DocType: Project,Expected End Date,Data Prevista de Término -DocType: Budget Account,Budget Amount,Valor do Orçamento -DocType: Payment Entry,Account Paid To,Recebido na Conta -apps/erpnext/erpnext/selling/doctype/product_bundle/product_bundle.py +24,Parent Item {0} must not be a Stock Item,Pai item {0} não deve ser um item da -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +168,{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0} Orçamento para a Conta {1} contra o {2} {3} é {4}. Ele irá exceder em {5} -apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +37,Out Qty,Qtde Saída -apps/erpnext/erpnext/buying/doctype/supplier/supplier.py +49,Series is mandatory,Série é obrigatório -DocType: Student Sibling,Student ID,ID do Aluno -apps/erpnext/erpnext/config/projects.py +51,Types of activities for Time Logs,Tipos de Atividades para Registros de Tempo -DocType: Stock Entry Detail,Basic Amount,Valor Base -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +534,Warehouse required for stock Item {0},Armazém necessário para o ítem do estoque {0} -DocType: Leave Allocation,Unused leaves,Folhas não utilizadas -DocType: Patient,Alcohol Past Use,Uso passado de álcool -DocType: Tax Rule,Billing State,Estado de Faturamento -apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +1008,Fetch exploded BOM (including sub-assemblies),Buscar LDM explodida (incluindo sub-conjuntos ) -DocType: Authorization Rule,Applicable To (Employee),Aplicável para (Colaborador) -apps/erpnext/erpnext/controllers/accounts_controller.py +180,Due Date is mandatory,A data de vencimento é obrigatória -apps/erpnext/erpnext/controllers/item_variant.py +82,Increment for Attribute {0} cannot be 0,Atributo incremento para {0} não pode ser 0 -DocType: Journal Entry,Pay To / Recd From,Pagar Para / Recebido De -DocType: Naming Series,Setup Series,Configuração de Séries -DocType: Payment Reconciliation,To Invoice Date,Até a Data de Faturamento -DocType: Bank Account,Contact HTML,Contato HTML -DocType: Landed Cost Voucher,Purchase Receipts,Recibos de compra -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +29,How Pricing Rule is applied?,Como regra de preços é aplicada? -DocType: Stock Entry,Delivery Note No,Nº da Guia de Remessa -apps/erpnext/erpnext/public/js/setup_wizard.js +28,Retail,Varejo -DocType: Purchase Taxes and Charges Template,Purchase Taxes and Charges Template,Modelo de Encargos e Impostos sobre Compras -apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +61,{0} {1}: Either debit or credit amount is required for {2},{0} {1}: Um valor de débito ou crédito é necessário para {2} -DocType: Payment Entry,Account Paid From,Conta de Origem do Pagamento -DocType: Purchase Order Item Supplied,Raw Material Item Code,Código de Item de Matérias-primas -DocType: Journal Entry,Write Off Based On,Abater baseado em -DocType: Stock Settings,Show Barcode Field,Mostrar Campo Código de Barras -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +866,Send Supplier Emails,Enviar emails a fornecedores -DocType: Fiscal Year,Auto Created,Criado automaticamente -DocType: Chapter Member,Leave Reason,Motivo da Saída -apps/erpnext/erpnext/config/accounts.py +544,Setup default values for POS Invoices,Configurar valores padrão para faturas do PDV -apps/erpnext/erpnext/config/hr.py +248,Training,Treinamento -DocType: Timesheet,Employee Detail,Detalhes do Colaborador -apps/erpnext/erpnext/config/website.py +11,Settings for website homepage,Configurações para página inicial do site -DocType: Job Offer,Awaiting Response,Aguardando Resposta -DocType: Salary Slip,Earning & Deduction,Ganho & Dedução -apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +36,Optional. This setting will be used to filter in various transactions.,Opcional . Esta configuração será usada para filtrar em várias transações. -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +111,Negative Valuation Rate is not allowed,Taxa de Avaliação negativa não é permitida -DocType: Holiday List,Weekly Off,Descanso semanal -DocType: Fiscal Year,"For e.g. 2012, 2012-13","Para por exemplo 2012, 2012-13" -apps/erpnext/erpnext/accounts/report/balance_sheet/balance_sheet.py +99,Provisional Profit / Loss (Credit),Provisão Lucro / Prejuízo (Crédito) -DocType: Sales Invoice,Return Against Sales Invoice,Devolução contra Fatura de Venda -apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +32,Item 5,O item 5 -DocType: Serial No,Creation Time,Horário de Criação -apps/erpnext/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py +62,Total Revenue,Receita total -DocType: Sales Invoice,Product Bundle Help,Pacote de Produtos Ajuda -,Monthly Attendance Sheet,Folha de Ponto Mensal -apps/erpnext/erpnext/hr/report/employee_advance_summary/employee_advance_summary.py +15,No record found,Nenhum registro encontrado -apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +155,Cost of Scrapped Asset,Custo do Ativo Sucateado -apps/erpnext/erpnext/controllers/stock_controller.py +240,{0} {1}: Cost Center is mandatory for Item {2},{0} {1}: Centro de Custo é obrigatória para item {2} -DocType: Vehicle,Policy No,Nº da Apólice -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +743,Get Items from Product Bundle,Obter Itens do Pacote de Produtos -DocType: Asset,Straight Line,Linha reta -DocType: Project User,Project User,Usuário do Projeto -DocType: GL Entry,Is Advance,É Adiantamento -apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.js +21,Attendance From Date and Attendance To Date is mandatory,Data de Início do Comparecimento e Data Final de Comparecimento é obrigatória -apps/erpnext/erpnext/controllers/buying_controller.py +196,Please enter 'Is Subcontracted' as Yes or No,"Por favor, digite ' é subcontratado ""como Sim ou Não" -apps/erpnext/erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py +29,Last Communication Date,Data do Último Contato -DocType: Sales Team,Contact No.,Nº Contato. -DocType: Bank Reconciliation,Payment Entries,Lançamentos de Pagamentos -DocType: Program Enrollment Tool,Get Students From,Obter Alunos de -apps/erpnext/erpnext/config/learn.py +263,Publish Items on Website,Publicar Itens no site -DocType: Sales Invoice,Terms and Conditions Details,Detalhes dos Termos e Condições -DocType: Sales Taxes and Charges Template,Sales Taxes and Charges Template,Modelo de Encargos e Impostos sobre Vendas -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +67,Number of Order,Número de pedidos -DocType: Item Group,HTML / Banner that will show on the top of product list.,HTML / Faixa que vai ser mostrada no topo da lista de produtos. -DocType: Shipping Rule,Specify conditions to calculate shipping amount,Especificar condições para calcular valor de frete -DocType: Accounts Settings,Role Allowed to Set Frozen Accounts & Edit Frozen Entries,Papel permissão para definir as contas congeladas e editar entradas congeladas -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +30,Cannot convert Cost Center to ledger as it has child nodes,"Não é possível converter Centro de Custo de contabilidade , uma vez que tem nós filhos" -apps/erpnext/erpnext/stock/report/stock_balance/stock_balance.py +83,Opening Value,Valor de Abertura -apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py +59,Serial #,Serial # -apps/erpnext/erpnext/controllers/accounts_controller.py +706,"Row #{0}: Asset {1} cannot be submitted, it is already {2}","Linha # {0}: Ativo {1} não pode ser enviado, já é {2}" -DocType: Tax Rule,Billing Country,País de Faturamento -DocType: Purchase Order Item,Expected Delivery Date,Data Prevista de Entrega -apps/erpnext/erpnext/accounts/general_ledger.py +134,Debit and Credit not equal for {0} #{1}. Difference is {2}.,O Débito e Crédito não são iguais para {0} # {1}. A diferença é de {2}. -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +105,Entertainment Expenses,Despesas com Entretenimento -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +98,Make Material Request,Fazer Requisição de Material -apps/erpnext/erpnext/manufacturing/doctype/bom/bom_item_preview.html +20,Open Item {0},Abrir Item {0} -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +235,Sales Invoice {0} must be cancelled before cancelling this Sales Order,A Fatura de Venda {0} deve ser cancelada antes de cancelar este Pedido de Venda -DocType: Sales Invoice Timesheet,Billing Amount,Total para Faturamento -apps/erpnext/erpnext/stock/doctype/packing_slip/packing_slip.js +84,Invalid quantity specified for item {0}. Quantity should be greater than 0.,Quantidade inválido especificado para o item {0} . Quantidade deve ser maior do que 0 . -DocType: Company,Default Employee Advance Account,Conta Padrão de Adiantamento à Colaboradores -apps/erpnext/erpnext/accounts/doctype/account/account.py +171,Account with existing transaction can not be deleted,Contas com transações existentes não pode ser excluídas -DocType: Vehicle,Last Carbon Check,Última Inspeção de Emissão de Carbono -DocType: Purchase Invoice,Posting Time,Horário da Postagem -DocType: Timesheet,% Amount Billed,Valor Faturado % -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +125,Telephone Expenses,Despesas com Telefone -DocType: Sales Partner,Logo,Logotipo -DocType: Naming Series,Check this if you want to force the user to select a series before saving. There will be no default if you check this.,Marque esta opção se você deseja forçar o usuário a selecionar uma série antes de salvar. Não haverá nenhum padrão se você marcar isso. -apps/erpnext/erpnext/stock/get_item_details.py +150,No Item with Serial No {0},Nenhum Item com Nº de Série {0} -DocType: Payment Entry,Difference Amount (Company Currency),Total da diferença (moeda da empresa) -apps/erpnext/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py +60,New Customer Revenue,Receita com novos clientes -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +126,Travel Expenses,Despesas com viagem -DocType: Maintenance Visit,Breakdown,Pane -apps/erpnext/erpnext/controllers/accounts_controller.py +907,Account: {0} with currency: {1} can not be selected,A Conta: {0} com moeda: {1} não pode ser selecionada -DocType: Manufacturing Settings,"Update BOM cost automatically via Scheduler, based on latest valuation rate / price list rate / last purchase rate of raw materials.","Atualize o custo da lista lista de materiais automaticamente através do Agendador, com base na taxa de avaliação / taxa de preços mais recente / última taxa de compra de matérias-primas." -apps/erpnext/erpnext/accounts/doctype/account/account.py +57,Account {0}: Parent account {1} does not belong to company: {2},Conta {0}: A Conta Superior {1} não pertence à empresa: {2} -apps/erpnext/erpnext/setup/doctype/company/company.js +126,Successfully deleted all transactions related to this company!,Todas as transações relacionadas a esta empresa foram excluídas com sucesso! -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +22,As on Date,Como na Data -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +78,Probation,Provação -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +866,Return / Credit Note,Devolução / Nota de Crédito -apps/erpnext/erpnext/public/js/controllers/transaction.js +322, does not exist!,não existe! -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +137,Total Paid Amount,Valor total pago -DocType: Job Card,Transferred Qty,Qtde Transferida -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +141,Planning,Planejamento -apps/erpnext/erpnext/accounts/report/purchase_register/purchase_register.py +80,Supplier Id,ID do Fornecedor -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +290,Quantity should be greater than 0,Quantidade deve ser maior do que 0 -DocType: Journal Entry,Cash Entry,Entrada de Caixa -DocType: Attendance Request,Half Day Date,Meio Período da Data -DocType: Sales Partner,Contact Desc,Descrição do Contato -DocType: Email Digest,Send regular summary reports via Email.,Enviar relatórios periódicos de síntese via Email. -apps/erpnext/erpnext/hr/doctype/expense_claim/expense_claim.py +289,Please set default account in Expense Claim Type {0},Por favor configure uma conta padrão no tipo de Reembolso de Despesas {0} -DocType: Hub Tracked Item,Item Manager,Gerente de Item -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +150,Payroll Payable,Folha de pagamento a pagar -DocType: Work Order,Total Operating Cost,Custo de Operacional Total -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +172,Note: Item {0} entered multiple times,Observação: O Item {0} foi inserido mais de uma vez -apps/erpnext/erpnext/config/selling.py +41,All Contacts.,Todos os Contatos. -apps/erpnext/erpnext/public/js/setup_wizard.js +71,Company Abbreviation,Sigla da Empresa -apps/erpnext/erpnext/healthcare/doctype/healthcare_practitioner/healthcare_practitioner.py +51,User {0} does not exist,Usuário {0} não existe -DocType: Bank Account,Party Type,Tipo de Sujeito -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +220,Payment Entry already exists,Pagamento já existe -apps/erpnext/erpnext/setup/doctype/authorization_control/authorization_control.py +36,Not authroized since {0} exceeds limits,Não authroized desde {0} excede os limites -apps/erpnext/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py +64,Set Tax Rule for shopping cart,Conjunto de regras de imposto por carrinho de compras -,Sales Funnel,Funil de Vendas -apps/erpnext/erpnext/setup/doctype/company/company.py +53,Abbreviation is mandatory,Abreviatura é obrigatória -,Qty to Transfer,Qtde para Transferir -apps/erpnext/erpnext/config/selling.py +13,Quotes to Leads or Customers.,Cotações para Clientes em Potencial ou Clientes. -DocType: Stock Settings,Role Allowed to edit frozen stock,Papel permissão para editar estoque congelado -,Territory Target Variance Item Group-Wise,Variação Territorial de Público por Grupo de Item -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +108,All Customer Groups,Todos os grupos de clientes -apps/erpnext/erpnext/controllers/accounts_controller.py +864,{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0} é obrigatório. Talvez o valor de câmbio não exista de {1} para {2}. -apps/erpnext/erpnext/accounts/doctype/tax_rule/tax_rule.py +46,Tax Template is mandatory.,Modelo de impostos é obrigatório. -apps/erpnext/erpnext/accounts/doctype/account/account.py +51,Account {0}: Parent account {1} does not exist,Conta {0}: A Conta Superior {1} não existe -DocType: Purchase Invoice Item,Price List Rate (Company Currency),Preço da Lista de Preços (moeda da empresa) -DocType: Products Settings,Products Settings,Configurações de Produtos -DocType: Monthly Distribution Percentage,Percentage Allocation,Alocação Percentual -DocType: Global Defaults,"If disable, 'In Words' field will not be visible in any transaction","Desativa campo ""por extenso"" em qualquer tipo de transação" -DocType: Serial No,Distinct unit of an Item,Unidade distinta de um item -DocType: Pricing Rule,Buying,Compras -DocType: HR Settings,Employee Records to be created by,Registro do colaborador a ser criado por -DocType: POS Profile,Apply Discount On,Aplicar Discount On -,Reqd By Date,Entrega Esperada em -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +95,Row # {0}: Serial No is mandatory,Linha # {0}: O número de série é obrigatório -DocType: Purchase Taxes and Charges,Item Wise Tax Detail,Detalhes do Imposto Vinculados ao Item -,Item-wise Price List Rate,Lista de Preços por Item -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +1156,Supplier Quotation,Orçamento de Fornecedor -DocType: Quotation,In Words will be visible once you save the Quotation.,Por extenso será visível quando você salvar o orçamento. -apps/erpnext/erpnext/stock/doctype/item/item.py +523,Barcode {0} already used in Item {1},Código de barras {0} já utilizado em item {1} -apps/erpnext/erpnext/config/selling.py +86,Rules for adding shipping costs.,Regras para adicionar os custos de envio . -DocType: Item,Opening Stock,Abertura de Estoque -apps/erpnext/erpnext/support/doctype/warranty_claim/warranty_claim.py +20,Customer is required,O Cliente é obrigatório -DocType: Purchase Order,To Receive,Receber -apps/erpnext/erpnext/utilities/user_progress.py +252,user@example.com,usuario@exemplo.com.br -apps/erpnext/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +86,Total Variance,Variância total -DocType: Accounts Settings,"If enabled, the system will post accounting entries for inventory automatically.","Se ativado, o sistema irá postar lançamentos contábeis para o inventário automaticamente." -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +15,Brokerage,Corretagem -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +264,Attendance for employee {0} is already marked for this day,Presença para o colaborador {0} já está registrada para este dia -DocType: Work Order Operation,"in Minutes -Updated via 'Time Log'","em Minutos - Atualizado via 'Registro de Tempo'" -DocType: Customer,From Lead,Do Cliente em Potencial -apps/erpnext/erpnext/config/manufacturing.py +13,Orders released for production.,Ordens liberadas para produção. -apps/erpnext/erpnext/public/js/account_tree_grid.js +65,Select Fiscal Year...,Selecione o Ano Fiscal ... -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +639,POS Profile required to make POS Entry,Perfil do PDV necessário para fazer entrada no PDV -DocType: Program Enrollment Tool,Enroll Students,Matricular Alunos -apps/erpnext/erpnext/patches/v4_0/create_price_list_if_missing.py +21,Standard Selling,Venda padrão -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +244,Atleast one warehouse is mandatory,Pelo menos um armazém é obrigatório -DocType: Serial No,Out of Warranty,Fora de Garantia -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +396,{0} against Sales Invoice {1},{0} contra Fatura de Venda {1} -DocType: Customer,Mention if non-standard receivable account,Mencione se a conta a receber não for a conta padrão -DocType: Journal Entry Account,If Income or Expense,Se é Receita ou Despesa -DocType: Work Order,Required Items,Itens Necessários -DocType: Stock Ledger Entry,Stock Value Difference,Diferença de valor do estoque -DocType: Payment Reconciliation Payment,Payment Reconciliation Payment,Pagamento da Conciliação de Pagamento -DocType: BOM Item,BOM No,Nº da LDM -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +192,Journal Entry {0} does not have account {1} or already matched against other voucher,Lançamento no Livro Diário {0} não tem conta {1} ou já conciliado com outro comprovante -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +47,Electronic Equipments,Equipamentos Eletrônicos -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +63,Leaves must be allocated in multiples of 0.5,"Folhas devem ser alocados em múltiplos de 0,5" -DocType: Work Order,Operation Cost,Custo da Operação -apps/erpnext/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +47,Outstanding Amt,Valor Devido -DocType: Sales Person,Set targets Item Group-wise for this Sales Person.,Estabelecer Metas para este Vendedor por Grupo de Itens -DocType: Stock Settings,Freeze Stocks Older Than [Days],Congelar lançamentos mais antigos do que [Dias] -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +42,"If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.","Se duas ou mais regras de preços são encontrados com base nas condições acima, a prioridade é aplicada. Prioridade é um número entre 0 a 20, enquanto o valor padrão é zero (em branco). Número maior significa que ele terá prioridade se houver várias regras de preços com as mesmas condições." -apps/erpnext/erpnext/controllers/trends.py +36,Fiscal Year: {0} does not exists,Ano Fiscal: {0} não existe -DocType: Leave Block List,Allow the following users to approve Leave Applications for block days.,Permitir que os usuários a seguir para aprovar aplicações deixam para os dias de bloco. -DocType: Purchase Invoice Item,Weight Per Unit,Peso Unitário -apps/erpnext/erpnext/config/stock.py +7,Stock Transactions,Transações de Estoque -DocType: Employee,Internal Work History,História Trabalho Interno -DocType: Depreciation Schedule,Accumulated Depreciation Amount,Total de Depreciação Acumulada -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +42,Private Equity,Patrimônio Líquido -DocType: Maintenance Visit,Customer Feedback,Comentário do Cliente -DocType: Item Attribute,From Range,Da Faixa -DocType: BOM,Set rate of sub-assembly item based on BOM,Definir custo de semiacabado baseado na lista de materiais -DocType: Daily Work Summary Settings Company,Daily Work Summary Settings Company,Configurações Resumo de Trabalho Diário da Empresa -apps/erpnext/erpnext/stock/utils.py +149,Item {0} ignored since it is not a stock item,Item {0} ignorado uma vez que não é um item de estoque -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.js +23,"To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.","Para não aplicar regra de preços em uma transação particular, todas as regras de preços aplicáveis devem ser desativados." -apps/erpnext/erpnext/hr/doctype/job_opening/job_opening.py +54,Jobs,Tarefas -,Sales Order Trends,Tendência de Pedidos de Venda -DocType: Employee,Held On,Realizada em -apps/erpnext/erpnext/manufacturing/doctype/work_order/work_order_calendar.js +36,Production Item,Bem de Produção -,Employee Information,Informações do Colaborador -apps/erpnext/erpnext/accounts/report/general_ledger/general_ledger.py +57,"Can not filter based on Voucher No, if grouped by Voucher","Não é possível filtrar com base no Comprovante Não, se agrupados por voucher" -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +975,Make Supplier Quotation,Criar Orçamento do Fornecedor -DocType: BOM,Materials Required (Exploded),Materiais necessários (lista explodida) -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +100,Row # {0}: Serial No {1} does not match with {2} {3},Row # {0}: Número de ordem {1} não coincide com {2} {3} -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +64,Casual Leave,Casual Deixar -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +386,Note: {0},Observação: {0} -,Delivery Note Trends,Tendência de Remessas -apps/erpnext/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py +24,In Stock Qty,Quantidade no Estoque -apps/erpnext/erpnext/accounts/general_ledger.py +113,Account: {0} can only be updated via Stock Transactions,Conta: {0} só pode ser atualizado via transações de ações -DocType: Bank Account,Party,Sujeito -DocType: Opportunity,Opportunity Date,Data da Oportunidade -DocType: Purchase Receipt,Return Against Purchase Receipt,Devolução contra Recibo de Compra -DocType: Request for Quotation Item,Request for Quotation Item,Solicitação de Orçamento do Item -DocType: Purchase Order,To Bill,Para Faturar -DocType: Material Request,% Ordered,% Comprado -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +81,Piecework,trabalho por peça -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +68,Avg. Buying Rate,Méd. Valor de Compra -DocType: Task,Actual Time (in Hours),Tempo Real (em horas) -DocType: Employee,History In Company,Histórico na Empresa -DocType: Stock Ledger Entry,Stock Ledger Entry,Lançamento do Livro de Inventário -DocType: Department,Leave Block List,Lista de Bloqueio de Licença -DocType: Purchase Invoice,Tax ID,CPF/CNPJ -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +198,Item {0} is not setup for Serial Nos. Column must be blank,Item {0} não está configurado para Serial Coluna N º s deve estar em branco -DocType: Accounts Settings,Accounts Settings,Configurações de Contas -DocType: Customer,Sales Partner and Commission,Parceiro de Vendas e Comissão -DocType: Loan,Rate of Interest (%) / Year,Taxa de Juros (%) / Ano -DocType: Loan Type,Rate of Interest (%) Yearly,Taxa de Juros (%) Anual -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +75,Temporary Accounts,Contas Temporárias -DocType: BOM Explosion Item,BOM Explosion Item,Item da Explosão da LDM -apps/erpnext/erpnext/stock/get_item_details.py +521,Price List {0} is disabled or does not exist,Lista de Preços {0} está desativada ou não existe -DocType: Purchase Invoice,Return,Devolução -apps/erpnext/erpnext/education/doctype/student_group/student_group.py +41,{0} - {1} is not enrolled in the Batch {2},{0} - {1} não está inscrito no Lote {2} -apps/erpnext/erpnext/assets/doctype/asset/depreciation.py +118,"Asset {0} cannot be scrapped, as it is already {1}","Activo {0} não pode ser descartado, uma vez que já é {1}" -DocType: Task,Total Expense Claim (via Expense Claim),Reivindicação Despesa Total (via Despesa Claim) -apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +177,Mark Absent,Marcar Ausente -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +155,Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Linha {0}: Moeda da LDM # {1} deve ser igual à moeda selecionada {2} -DocType: Journal Entry Account,Exchange Rate,Taxa de Câmbio -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +657,Sales Order {0} is not submitted,Pedido de Venda {0} não foi enviado -DocType: Homepage,Tag Line,Slogan -DocType: Fee Component,Fee Component,Componente da Taxa -apps/erpnext/erpnext/education/doctype/course/course.py +20,Total Weightage of all Assessment Criteria must be 100%,O peso total de todos os Critérios de Avaliação deve ser 100% -DocType: Purchase Order Item,Last Purchase Rate,Valor da Última Compra -DocType: Project Task,Task ID,ID Tarefa -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +84,Stock cannot exist for Item {0} since has variants,Stock não pode existir por item {0} já que tem variantes -,Sales Person-wise Transaction Summary,Resumo de Vendas por Vendedor -DocType: Training Event,Contact Number,Telefone para Contato -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +74,Warehouse {0} does not exist,Armazém {0} não existe -DocType: Monthly Distribution,Monthly Distribution Percentages,Percentagens distribuição mensal -apps/erpnext/erpnext/stock/doctype/batch/batch.py +115,The selected item cannot have Batch,O item selecionado não pode ter Batch -DocType: Delivery Note,% of materials delivered against this Delivery Note,% do material entregue contra esta Guia de Remessa -DocType: Project,Customer Details,Detalhes do Cliente -,Unpaid Expense Claim,Reembolso de Despesas a Pagar -DocType: Payment Entry,Paid Amount,Valor Pago -,Available Stock for Packing Items,Estoque Disponível para o Empacotamento de Itens -DocType: Item Variant,Item Variant,Item Variant -apps/erpnext/erpnext/accounts/doctype/account/account.py +121,"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","O saldo já está em débito, você não tem permissão para definir 'saldo deve ser' como 'crédito'" -apps/erpnext/erpnext/assets/doctype/asset/asset.py +52,Item {0} has been disabled,Item {0} foi desativado -apps/erpnext/erpnext/buying/utils.py +47,Please enter quantity for Item {0},"Por favor, indique a quantidade de item {0}" -DocType: Employee External Work History,Employee External Work History,Histórico de Trabalho Externo do Colaborador -DocType: Opening Invoice Creation Tool,Purchase,Compras -apps/erpnext/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +37,Balance Qty,Qtde Balanço -apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +20,Goals cannot be empty,Objetivos não podem estar em branco -DocType: Item Group,Parent Item Group,Grupo de item pai -DocType: Purchase Receipt,Rate at which supplier's currency is converted to company's base currency,Taxa na qual a moeda do fornecedor é convertida para a moeda base da empresa -apps/erpnext/erpnext/manufacturing/doctype/workstation/workstation.py +36,Row #{0}: Timings conflicts with row {1},Linha # {0}: conflitos Timings com linha {1} -apps/erpnext/erpnext/config/accounts.py +276,Setup Gateway accounts.,Configuração contas Gateway. -DocType: Employee,Employment Type,Tipo de Emprego -DocType: Payment Entry,Set Exchange Gain / Loss,Definir Perda/Ganho com Câmbio -DocType: Item Default,Default Expense Account,Conta Padrão de Despesa -apps/erpnext/erpnext/education/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py +53,Student Email ID,Email do Aluno -DocType: Employee,Notice (days),Aviso Prévio ( dias) -DocType: Tax Rule,Sales Tax Template,Modelo de Impostos sobre Vendas -apps/erpnext/erpnext/accounts/page/pos/pos.js +2524,Select items to save the invoice,Selecione os itens para salvar a nota -DocType: Employee,Encashment Date,Data da cobrança -DocType: Account,Stock Adjustment,Ajuste do estoque -apps/erpnext/erpnext/projects/doctype/activity_cost/activity_cost.py +34,Default Activity Cost exists for Activity Type - {0},Existe Atividade Custo Padrão para o Tipo de Atividade - {0} -DocType: Work Order,Planned Operating Cost,Custo Operacional Planejado -DocType: Academic Term,Term Start Date,Data de Início do Ano Letivo -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +18,Opp Count,Nº de Oportunidades -apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +34,Bank Statement balance as per General Ledger,Extrato bancário de acordo com o livro razão -DocType: Authorization Rule,Customer / Item Name,Nome do Cliente/Produto -DocType: Product Bundle,"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. - -The package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"". - -For Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item. - -Note: BOM = Bill of Materials","Grupo agregado de Itens ** ** em outro item ** **. Isso é útil se você está empacotando um certo Itens ** ** em um pacote e você manter o estoque dos itens embalados ** ** e não o agregado ** ** item. O pacote ** ** item terá "é Stock item" como "Não" e "é o item Vendas" como "Sim". Por exemplo: Se você está vendendo Laptops e Mochilas separadamente e têm um preço especial se o cliente compra ambos, então o Laptop Backpack + será um novo item Bundle produto. Nota: BOM = Bill of Materials" -apps/erpnext/erpnext/selling/doctype/installation_note/installation_note.py +42,Serial No is mandatory for Item {0},Número de séries é obrigatório para item {0} -apps/erpnext/erpnext/stock/doctype/item_attribute/item_attribute.py +43,Please specify from/to range,"Por favor, especifique de / para variar" -DocType: Serial No,Under AMC,Sob CAM -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +55,Item valuation rate is recalculated considering landed cost voucher amount,Taxa de valorização do item é recalculado considerando valor do voucher custo desembarcou -apps/erpnext/erpnext/config/selling.py +153,Default settings for selling transactions.,Configuração padrão para transações de vendas. -DocType: Guardian,Guardian Of ,Responsável por -DocType: Grading Scale Interval,Threshold,Média -DocType: BOM Update Tool,Current BOM,LDM atual -apps/erpnext/erpnext/public/js/utils.js +56,Add Serial No,Adicionar Serial No -DocType: Work Order Item,Available Qty at Source Warehouse,Qtd disponível no Armazén de Origem -apps/erpnext/erpnext/assets/doctype/asset_movement/asset_movement.py +19,{0} asset cannot be transferred,{0} ativo não pode ser transferido -DocType: Blanket Order,Purchasing,Requisições -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +51,Warehouse can not be deleted as stock ledger entry exists for this warehouse.,Armazém não pode ser excluído pois existe entrada de material para este armazém. -DocType: Expense Claim Advance,Expense Claim Advance,Adiantamento de Solicitação de Reembolso -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +96,Project Manager,Gerente de Projetos -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +75,Max discount allowed for item: {0} is {1}%,Max desconto permitido para o item: {0} é {1}% -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +325,Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Linha # {0}: Não é permitido mudar de fornecedor quando o Pedido de Compra já existe -DocType: Accounts Settings,Role that is allowed to submit transactions that exceed credit limits set.,Papel que é permitido submeter transações que excedam os limites de crédito estabelecidos. -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.js +1068,Select Items to Manufacture,Selecionar Itens para Produzir -apps/erpnext/erpnext/accounts/page/pos/pos.js +974,"Master data syncing, it might take some time","Os dados estão sendo sincronizados, isto pode demorar algum tempo" -DocType: Item Price,Item Price,Preço do Item -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +48,Soap & Detergent,Soap & detergente -DocType: BOM,Show Items,Mostrar Itens -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +36,Motion Picture & Video,Motion Picture & Video -DocType: Warehouse,Warehouse Name,Nome do Armazén -DocType: Naming Series,Select Transaction,Selecione a Transação -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +30,Please enter Approving Role or Approving User,"Por favor, indique Função Aprovadora ou Usuário Aprovador" -DocType: Journal Entry,Write Off Entry,Lançamento de Abatimento -DocType: BOM,Rate Of Materials Based On,Preço dos materiais com base em -apps/erpnext/erpnext/support/page/support_analytics/support_analytics.js +21,Support Analtyics,Análise de Pós-Vendas -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +49,To Date should be within the Fiscal Year. Assuming To Date = {0},Para data deve ser dentro do exercício social. Assumindo Para Date = {0} -DocType: Employee,"Here you can maintain height, weight, allergies, medical concerns etc","Aqui você pode manter a altura, peso, alergias, restrições médicas, etc" -DocType: Leave Block List,Applies to Company,Aplica-se a Empresa -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +222,Cannot cancel because submitted Stock Entry {0} exists,Não pode cancelar por causa da entrada submetido {0} existe -DocType: Loan,Disbursement Date,Data do Desembolso -DocType: BOM Update Tool,Update latest price in all BOMs,Atualize o preço mais recente em todas as LDMs -DocType: Sales Order Item,For Production,Para Produção -DocType: Payment Request,payment_url,payment_url -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +22,Opp/Lead %,Oportunidade / Cliente em Potencial % -,Asset Depreciations and Balances,Depreciação de Ativos e Saldos -DocType: Sales Invoice,Get Advances Received,Obter adiantamentos recebidos -DocType: Email Digest,Add/Remove Recipients,Adicionar / Remover Destinatários -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.js +19,"To set this Fiscal Year as Default, click on 'Set as Default'","Para definir esse Ano Fiscal como padrão , clique em ' Definir como padrão '" -apps/erpnext/erpnext/projects/doctype/project/project.py +281,Join,Junte-se -apps/erpnext/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py +81,Shortage Qty,Qtde em Falta -apps/erpnext/erpnext/stock/doctype/item/item.py +792,Item variant {0} exists with same attributes,Variante item {0} existe com os mesmos atributos -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +405,Requesting payment against {0} {1} for amount {2},Esta é uma solicitação de pagamento relacionada à {0} {1} no valor de {2} -DocType: Additional Salary,Salary Slip,Contracheque -DocType: Pricing Rule,Margin Rate or Amount,Percentual ou Valor de Margem -apps/erpnext/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py +48,'To Date' is required,'Data Final' é necessária -DocType: Packing Slip,"Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.","Gerar lista de embalagem para os pacotes a serem entregues. Usado para identificar número do pacote, o conteúdo do pacote e seu peso." -DocType: Sales Invoice Item,Sales Order Item,Item do Pedido de Venda -DocType: Salary Slip,Payment Days,Datas de Pagamento -DocType: Stock Settings,Convert Item Description to Clean HTML,Converter a Descrição do Item para HTML Limpo -DocType: BOM,Manage cost of operations,Gerenciar custo das operações -DocType: Notification Control,"When any of the checked transactions are ""Submitted"", an email pop-up automatically opened to send an email to the associated ""Contact"" in that transaction, with the transaction as an attachment. The user may or may not send the email.","Quando qualquer uma das operações marcadas são ""Enviadas"", um pop-up abre automaticamente para enviar um email para o ""Contato"" associado a transação, com a transação como um anexo. O usuário pode ou não enviar o email." -apps/erpnext/erpnext/config/setup.py +14,Global Settings,Configurações Globais -DocType: Crop,Row Spacing UOM,Espaçamento de linhas UDM -DocType: Employee Education,Employee Education,Escolaridade do Colaborador -apps/erpnext/erpnext/public/js/controllers/transaction.js +1247,It is needed to fetch Item Details.,Isto é necessário para buscar detalhes de itens -DocType: Salary Slip,Net Pay,Pagamento Líquido -apps/erpnext/erpnext/stock/doctype/serial_no/serial_no.py +222,Serial No {0} has already been received,Nº de Série {0} já foi recebido -,Requested Items To Be Transferred,"Items Solicitados, mas não Transferidos" -DocType: Expense Claim,Vehicle Log,Log do Veículo -DocType: Customer,Sales Team Details,Detalhes da Equipe de Vendas -apps/erpnext/erpnext/accounts/page/pos/pos.js +1366,Delete permanently?,Apagar de forma permanente? -DocType: Expense Claim,Total Claimed Amount,Quantia Total Reivindicada -apps/erpnext/erpnext/config/crm.py +17,Potential opportunities for selling.,Oportunidades potenciais para a venda. -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +68,Sick Leave,Licença Médica -DocType: Email Digest,Email Digest,Resumo por Email -DocType: Delivery Note,Billing Address Name,Endereço de Faturamento -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +22,Department Stores,Lojas de Departamento -DocType: Sales Invoice,Base Change Amount (Company Currency),Troco (moeda da empresa) -apps/erpnext/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +310,No accounting entries for the following warehouses,Nenhuma entrada de contabilidade para os seguintes armazéns -apps/erpnext/erpnext/projects/doctype/project/project.js +98,Save the document first.,Salve o documento pela primeira vez. -DocType: Account,Chargeable,Taxável -DocType: Company,Change Abbreviation,Mudar abreviação -DocType: Expense Claim Detail,Expense Date,Data da despesa -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +70,Last Order Amount,Valor do último pedido -DocType: Delivery Stop,Email Sent To,Email Enviado para -DocType: Budget,Warn,Avisar -DocType: Appraisal,"Any other remarks, noteworthy effort that should go in the records.","Quaisquer outras observações, esforço digno de nota que deve constar nos registros." -DocType: Asset Maintenance,Manufacturing User,Usuário de Fabricação -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +94,Business Development Manager,Gerente de Desenvolvimento de Negócios -DocType: Maintenance Visit Purpose,Maintenance Visit Purpose,Finalidade da Visita de Manutenção -apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.js +27,General Ledger,Livro Razão -apps/erpnext/erpnext/selling/doctype/campaign/campaign.js +10,View Leads,Veja os Clientes em Potencial -DocType: Item Attribute Value,Attribute Value,Atributo Valor -,Itemwise Recommended Reorder Level,Níves de Reposição Recomendados por Item -DocType: Salary Detail,Salary Detail,Detalhes de Salário -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +1103,Please select {0} first,Por favor selecione {0} primeiro -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +1076,Batch {0} of Item {1} has expired.,Lote {0} de {1} item expirou. -apps/erpnext/erpnext/config/manufacturing.py +27,Time Sheet for manufacturing.,Registro de Tempo para fabricação -DocType: Salary Detail,Default Amount,Quantidade Padrão -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +96,Warehouse not found in the system,Armazén não foi encontrado no sistema -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.py +123,This Month's Summary,Resumo deste mês -DocType: Quality Inspection Reading,Quality Inspection Reading,Leitura da Inspeção de Qualidade -apps/erpnext/erpnext/stock/doctype/stock_settings/stock_settings.py +26,`Freeze Stocks Older Than` should be smaller than %d days.,'Congelar Estoque anterior a' deve ser menor que %d dias. -DocType: Tax Rule,Purchase Tax Template,Modelo de Impostos sobre a compra -,Project wise Stock Tracking,Rastreio de Estoque por Projeto -DocType: Clinical Procedure Item,Actual Qty (at source/target),Qtde Real (na origem / destino) -DocType: HR Settings,Payroll Settings,Configurações da Folha de Pagamento -apps/erpnext/erpnext/config/accounts.py +142,Match non-linked Invoices and Payments.,Combinar Faturas e Pagamentos não relacionados. -DocType: POS Settings,POS Settings,Configurações do PDV -apps/erpnext/erpnext/templates/pages/cart.html +16,Place Order,Fazer pedido -DocType: Email Digest,New Purchase Orders,Novos Pedidos de Compra -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +26,Root cannot have a parent cost center,Root não pode ter um centro de custos pai -apps/erpnext/erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.py +167,Accumulated Depreciation as on,Depreciação acumulada como em -DocType: Sales Invoice,C-Form Applicable,Formulário-C Aplicável -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +419,Operation Time must be greater than 0 for Operation {0},Tempo de Operação deve ser maior que 0 para a operação {0} -apps/erpnext/erpnext/controllers/sales_and_purchase_return.py +105,Warehouse is mandatory,Armazém é obrigatório -DocType: UOM Conversion Detail,UOM Conversion Detail,Detalhe da Conversão de Unidade de Medida -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +407,Production Order cannot be raised against a Item Template,Ordem de produção não pode ser levantada contra um modelo de item -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +52,Charges are updated in Purchase Receipt against each item,Encargos são atualizados em Recibo de compra para cada item -DocType: Warranty Claim,Resolved By,Resolvido por -apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +42,Cheques and Deposits incorrectly cleared,Cheques e depósitos apagados incorretamente -apps/erpnext/erpnext/accounts/doctype/account/account.py +53,Account {0}: You can not assign itself as parent account,Conta {0}: Você não pode definir a própria conta como uma conta superior -DocType: Purchase Invoice Item,Price List Rate,Preço na Lista de Preços -apps/erpnext/erpnext/utilities/activation.py +72,Create customer quotes,Criar orçamentos de clientes -DocType: Item,"Show ""In Stock"" or ""Not in Stock"" based on stock available in this warehouse.","Mostrar ""Em Estoque"" ou ""Esgotado"" baseado no estoque disponível neste armazén." -DocType: Item,Average time taken by the supplier to deliver,Tempo médio necessário para entrega do fornecedor. -DocType: Project,Expected Start Date,Data Prevista de Início -apps/erpnext/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js +49,Remove item if charges is not applicable to that item,"Remover item, se as cargas não é aplicável a esse elemento" -apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py +40,Transaction currency must be same as Payment Gateway currency,Moeda de transação deve ser o mesmo da moeda gateway de pagamento -apps/erpnext/erpnext/templates/pages/rfq.html +75,Quotations: ,Orçamentos: -DocType: Workstation,Operating Costs,Custos Operacionais -DocType: Daily Work Summary Settings,"Emails will be sent to all Active Employees of the company at the given hour, if they do not have holiday. Summary of responses will be sent at midnight.","Os e-mails serão enviados para todos os colaboradores ativos da empresa na hora informada, caso não estejam de férias. O resumo das respostas serão enviadas à meia-noite." -DocType: Employee Leave Approver,Employee Leave Approver,Licença do Colaborador Aprovada -apps/erpnext/erpnext/stock/doctype/item/item.py +541,Row {0}: An Reorder entry already exists for this warehouse {1},Linha {0}: Uma entrada de reposição já existe para este armazém {1} -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.py +99,"Cannot declare as lost, because Quotation has been made.","Não se pode declarar como perdido , porque foi realizado um Orçamento." -apps/erpnext/erpnext/hr/doctype/training_event/training_event.js +16,Training Feedback,Feedback do Treinamento -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +149,Please select Start Date and End Date for Item {0},Por favor selecione a Data de início e a Data de Término do Item {0} -apps/erpnext/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js +16,To date cannot be before from date,Até o momento não pode ser antes a partir da data -apps/erpnext/erpnext/stock/doctype/item/item.js +359,Add / Edit Prices,Adicionar / Editar preços -DocType: Cheque Print Template,Cheque Print Template,Template para Impressão de Cheques -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.js +85,Chart of Cost Centers,Plano de Centros de Custo -,Requested Items To Be Ordered,"Itens Solicitados, mas não Comprados" -DocType: Blanket Order,Manufacturing,Fabricação -,Ordered Items To Be Delivered,"Itens Vendidos, mas não Entregues" -DocType: Account,Income,Receita -DocType: Industry Type,Industry Type,Tipo de Indústria -apps/erpnext/erpnext/templates/includes/cart.js +150,Something went wrong!,Algo deu errado! -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +174,Warning: Leave application contains following block dates,Aviso: pedido de férias contém as datas de intervalos -apps/erpnext/erpnext/accounts/report/trial_balance/trial_balance.py +25,Fiscal Year {0} does not exist,Ano Fiscal {0} não existe -DocType: Purchase Invoice Item,Amount (Company Currency),Total (moeda da empresa) -DocType: Fee Schedule,Student Category,Categoria do Aluno -DocType: Announcement,Student,Aluno -DocType: Company,Budget Detail,Detalhe do Orçamento -apps/erpnext/erpnext/selling/doctype/sms_center/sms_center.py +79,Please enter message before sending,Por favor introduza a mensagem antes de enviá- -apps/erpnext/erpnext/config/accounts.py +543,Point-of-Sale Profile,Perfil do Ponto de Vendas -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +166,Unsecured Loans,Empréstimos não Garantidos -DocType: Maintenance Schedule Detail,Scheduled Date,Data Agendada -apps/erpnext/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py +34,Total Paid Amt,Quantia total paga -DocType: SMS Center,Messages greater than 160 characters will be split into multiple messages,Mensagens maiores do que 160 caracteres vão ser divididos em múltiplas mensagens -DocType: Purchase Receipt Item,Received and Accepted,Recebeu e aceitou -,Serial No Service Contract Expiry,Vencimento do Contrato de Serviço com Nº de Série -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +331,You cannot credit and debit same account at the same time,Você não pode ter débito e crédito na mesma conta -DocType: Naming Series,Help HTML,Ajuda HTML -DocType: Student Group Creation Tool,Student Group Creation Tool,Ferramenta de Criação de Grupos de Alunos -apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +53,Total weightage assigned should be 100%. It is {0},Peso total atribuído deve ser de 100%. É {0} -apps/erpnext/erpnext/selling/doctype/quotation/quotation.py +80,Cannot set as Lost as Sales Order is made.,Não é possível definir como Perdido uma vez que foi feito um Pedido de Venda -DocType: Request for Quotation Item,Supplier Part No,Nº da Peça no Fornecedor -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +379,Received From,Recebido de -DocType: Item,Has Serial No,Tem nº de Série -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +173,Row #{0}: Set Supplier for item {1},Linha # {0}: Defina o fornecedor para o item {1} -apps/erpnext/erpnext/projects/doctype/timesheet/timesheet.py +127,Row {0}: Hours value must be greater than zero.,Linha {0}: Horas deve ser um valor maior que zero -apps/erpnext/erpnext/stock/doctype/item/item.py +224,Website Image {0} attached to Item {1} cannot be found,Site Imagem {0} anexada ao Item {1} não pode ser encontrado -DocType: Item,List this Item in multiple groups on the website.,Listar este item em vários grupos no site. -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +355,Please check Multi Currency option to allow accounts with other currency,"Por favor, verifique multi opção de moeda para permitir que contas com outra moeda" -apps/erpnext/erpnext/manufacturing/doctype/bom/bom.py +88,Item: {0} does not exist in the system,Item: {0} não existe no sistema -apps/erpnext/erpnext/accounts/doctype/account/account.py +113,You are not authorized to set Frozen value,Você não está autorizado para definir o valor congelado -DocType: Payment Reconciliation,Get Unreconciled Entries,Obter Lançamentos não Conciliados -DocType: Payment Reconciliation,From Invoice Date,A Partir da Data de Faturamento -DocType: Leave Encashment,Leave Encashment,Pagamento da Saída -apps/erpnext/erpnext/public/js/setup_wizard.js +114,What does it do?,O que isto faz ? -apps/erpnext/erpnext/stock/doctype/batch/batch.js +84,To Warehouse,Para o Armazén -apps/erpnext/erpnext/education/doctype/student_admission/student_admission.py +26,All Student Admissions,Todas Admissões de Alunos -,Average Commission Rate,Percentual de Comissão Médio -apps/erpnext/erpnext/stock/doctype/item/item.py +479,'Has Serial No' can not be 'Yes' for non-stock item,'Tem Número Serial' não pode ser confirmado para itens sem controle de estoque -apps/erpnext/erpnext/hr/doctype/attendance/attendance.py +44,Attendance can not be marked for future dates,Comparecimento não pode ser marcado para datas futuras -DocType: Pricing Rule,Pricing Rule Help,Regra Preços Ajuda -DocType: Purchase Taxes and Charges,Account Head,Conta -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +119,Electrical,elétrico -apps/erpnext/erpnext/utilities/activation.py +100,Add the rest of your organization as your users. You can also add invite Customers to your portal by adding them from Contacts,Adicione o resto de sua organização como seus usuários. Você também pode adicionar clientes convidados ao seu portal adicionando-os de Contatos -DocType: Stock Entry,Total Value Difference (Out - In),Diferença do Valor Total (Saída - Entrada) -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +380,Row {0}: Exchange Rate is mandatory,Linha {0}: Taxa de Câmbio é obrigatória -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person.py +46,User ID not set for Employee {0},ID de usuário não definida para Colaborador {0} -DocType: Stock Entry,Default Source Warehouse,Armazén de Origem Padrão -DocType: Item,Customer Code,Código do Cliente -apps/erpnext/erpnext/selling/report/inactive_customers/inactive_customers.py +72,Days Since Last Order,Dias desde a última compra -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +437,Debit To account must be a Balance Sheet account,Débito em conta deve ser uma conta de Balanço -DocType: Asset,Naming Series,Código dos Documentos -DocType: Leave Block List,Leave Block List Name,Deixe o nome Lista de Bloqueios -apps/erpnext/erpnext/hr/doctype/vehicle/vehicle.py +14,Insurance Start date should be less than Insurance End date,A data de início da cobertura do seguro deve ser inferior a data de término da cobertura -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +33,Stock Assets,Ativos Estoque -DocType: Target Detail,Target Qty,Meta de Qtde -DocType: Shopping Cart Settings,Checkout Settings,Configurações de Vendas -DocType: Notification Control,Sales Invoice Message,Mensagem da Fatura de Venda -apps/erpnext/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +27,Closing Account {0} must be of type Liability / Equity,Fechando Conta {0} deve ser do tipo de responsabilidade / Patrimônio Líquido -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +407,Salary Slip of employee {0} already created for time sheet {1},Contracheque do colaborador {0} já criado para o registro de tempo {1} -DocType: Vehicle Log,Odometer,Odômetro -DocType: Production Plan Item,Ordered Qty,Qtde Encomendada -apps/erpnext/erpnext/stock/doctype/item/item.py +822,Item {0} is disabled,Item {0} está desativado -DocType: Stock Settings,Stock Frozen Upto,Estoque congelado até -apps/erpnext/erpnext/stock/doctype/material_request/material_request.js +1021,BOM does not contain any stock item,LDM não contém nenhum item de estoque -DocType: Vehicle Log,Refuelling Details,Detalhes de Abastecimento -apps/erpnext/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +46,"Buying must be checked, if Applicable For is selected as {0}","Compra deve ser verificada, se for caso disso nos items selecionados como {0}" -apps/erpnext/erpnext/setup/doctype/authorization_rule/authorization_rule.py +40,Discount must be less than 100,Desconto deve ser inferior a 100 -DocType: Purchase Invoice,Write Off Amount (Company Currency),Valor abatido (moeda da empresa) -apps/erpnext/erpnext/stock/doctype/item/item.py +545,Row #{0}: Please set reorder quantity,"Linha # {0}: Por favor, defina a quantidade de reposição" -DocType: Landed Cost Voucher,Landed Cost Voucher,Comprovante de Custos de Desembarque -apps/erpnext/erpnext/public/js/queries.js +39,Please set {0},Defina {0} -DocType: Employee,Health Details,Detalhes sobre a Saúde -DocType: Serial No,Delivery Document Type,Tipo do Documento de Entrega -DocType: Email Digest,Receivables,Recebíveis -DocType: Lead Source,Lead Source,Origem do Cliente em Potencial -DocType: Customer,Additional information regarding the customer.,Informações adicionais sobre o cliente. -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.py +237,"{0} {1} is associated with {2}, but Party Account is {3}","{0} {1} está associado a {2}, mas a Conta do Partido é {3}" -DocType: Maintenance Visit,Maintenance Date,Data da Manutenção -DocType: Purchase Invoice Item,Rejected Serial No,Nº de Série Rejeitado -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +82,Year start date or end date is overlapping with {0}. To avoid please set company,Ano data de início ou data de término é a sobreposição com {0}. Para evitar defina empresa -apps/erpnext/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py +156,Start date should be less than end date for Item {0},Data de início deve ser inferior a data final para o item {0} -DocType: Item,"Example: ABCD.##### -If series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Exemplo:. ABCD ##### - Se série é ajustada e número de série não é mencionado em transações, número de série, em seguida automática será criado com base nesta série. Se você sempre quis mencionar explicitamente Serial Nos para este item. deixe em branco." -DocType: Upload Attendance,Upload Attendance,Enviar o Ponto -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +648,BOM and Manufacturing Quantity are required,A LDM e a Quantidade para Fabricação são necessários -apps/erpnext/erpnext/accounts/report/accounts_payable/accounts_payable.js +35,Ageing Range 2,Faixa Envelhecimento 2 -,Sales Analytics,Analítico de Vendas -,Prospects Engaged But Not Converted,"Clientes prospectados, mas não convertidos" -DocType: Manufacturing Settings,Manufacturing Settings,Configurações de Fabricação -apps/erpnext/erpnext/config/setup.py +56,Setting up Email,Configurando Email -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +135,Please enter default currency in Company Master,"Por favor, indique moeda padrão ino cadastro da empresa" -DocType: Stock Entry Detail,Stock Entry Detail,Detalhe do Lançamento no Estoque -DocType: Products Settings,Home Page is Products,Página Inicial é Produtos -,Asset Depreciation Ledger,Livro Razão de Depreciação de Ativos -apps/erpnext/erpnext/accounts/doctype/tax_rule/tax_rule.py +97,Tax Rule Conflicts with {0},Conflitos regra fiscal com {0} -apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +25,New Account Name,Nome da Nova Conta -DocType: Purchase Invoice Item,Raw Materials Supplied Cost,Custo de fornecimento de Matérias-primas -DocType: Selling Settings,Settings for Selling Module,Configurações do Módulo de Vendas -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +388,Customer Service,Atendimento ao Cliente -DocType: Item Customer Detail,Item Customer Detail,Detalhe do Cliente do Item -DocType: Notification Control,Prompt for Email on Submission of,Solicitar o Envio de Email no Envio do Documento -apps/erpnext/erpnext/hr/doctype/leave_allocation/leave_allocation.py +102,Total allocated leaves are more than days in the period,Total de licenças alocadas é maior do que número de dias no período -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +70,Item {0} must be a stock Item,Item {0} deve ser um item de estoque -DocType: Manufacturing Settings,Default Work In Progress Warehouse,Armazén Padrão de Trabalho em Andamento -apps/erpnext/erpnext/config/accounts.py +256,Default settings for accounting transactions.,As configurações padrão para as transações contábeis. -DocType: Purchase Invoice Item,Stock Qty,Quantidade em estoque -apps/erpnext/erpnext/templates/includes/footer/footer_extension.html +26,Error: Not a valid id?,Erro: Não é um ID válido? -DocType: Naming Series,Update Series Number,Atualizar Números de Séries -DocType: Account,Equity,Patrimônio Líquido -DocType: Job Offer,Printing Details,Imprimir detalhes -apps/erpnext/erpnext/stock/report/bom_search/bom_search.js +38,Search Sub Assemblies,Pesquisa Subconjuntos -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +200,Item Code required at Row No {0},Código do item exigido na Linha Nº {0} -DocType: Sales Partner,Partner Type,Tipo de parceiro -DocType: Authorization Rule,Customerwise Discount,Desconto referente ao Cliente -apps/erpnext/erpnext/config/projects.py +46,Timesheet for tasks.,Registros de Tempo para tarefas. -DocType: Purchase Invoice,Against Expense Account,Contra a Conta de Despesas -DocType: Bank Reconciliation,Get Payment Entries,Obter Lançamentos de Pagamentos -DocType: Quotation Item,Against Docname,Contra o Docname -DocType: SMS Center,All Employee (Active),Todos os Colaboradores (Ativos) -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +9,View Now,Ver Agora -DocType: BOM,Raw Material Cost,Custo de Matéria-prima -DocType: Item Reorder,Re-Order Level,Nível de Reposição -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +77,Part-time,De meio expediente -DocType: Employee,Applicable Holiday List,Lista de Férias Aplicável -apps/erpnext/erpnext/accounts/doctype/account/account.py +166,Report Type is mandatory,Tipo de Relatório é obrigatório -DocType: Item,Serial Number Series,Séries de Nº de Série -apps/erpnext/erpnext/buying/utils.py +68,Warehouse is mandatory for stock Item {0} in row {1},Armazém é obrigatória para stock o item {0} na linha {1} -apps/erpnext/erpnext/setup/setup_wizard/data/industry_type.py +45,Retail & Wholesale,Varejo e Atacado -DocType: Issue,First Responded On,Primeira Resposta em -DocType: Website Item Group,Cross Listing of Item in multiple groups,Listagem cruzada dos produtos que pertencem à vários grupos -apps/erpnext/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +90,Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0},Ano Fiscal Data de Início e Término do Exercício Social Data já estão definidos no ano fiscal de {0} -apps/erpnext/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +132,Successfully Reconciled,Reconciliados com sucesso -DocType: Work Order,Planned End Date,Data Planejada de Término -DocType: Request for Quotation,Supplier Detail,Detalhe do Fornecedor -apps/erpnext/erpnext/accounts/report/accounts_receivable/accounts_receivable.html +119,Invoiced Amount,Valor Faturado -apps/erpnext/erpnext/education/doctype/course_schedule/course_schedule.js +7,Attendance,Comparecimento -apps/erpnext/erpnext/public/js/pos/pos.html +115,Stock Items,Itens de estoque -DocType: Leave Block List,"If not checked, the list will have to be added to each Department where it has to be applied.","Se não for controlada, a lista deverá ser adicionado a cada departamento onde tem de ser aplicado." -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +689,Posting date and posting time is mandatory,Data e horário da postagem são obrigatórios -DocType: Purchase Order,In Words will be visible once you save the Purchase Order.,Por extenso será visível quando você salvar o Pedido de Compra. -DocType: Period Closing Voucher,Period Closing Voucher,Comprovante de Encerramento do Período -apps/erpnext/erpnext/config/selling.py +67,Price List master.,Cadastro da Lista de Preços. -DocType: Task,Review Date,Data da Revisão -DocType: Company,Series for Asset Depreciation Entry (Journal Entry),Série para lançamento de Depreciação de Ativos (Lançamento no Livro Diário) -DocType: Restaurant Reservation,Waitlisted,Colocado na lista de espera -apps/erpnext/erpnext/accounts/doctype/account/account.py +131,Currency can not be changed after making entries using some other currency,Moeda não pode ser alterada depois de fazer entradas usando alguma outra moeda -DocType: Vehicle Service,Clutch Plate,Disco de Embreagem -DocType: Company,Round Off Account,Conta de Arredondamento -DocType: Customer Group,Parent Customer Group,Grupo de Clientes pai -DocType: Vehicle Service,Change,Alteração -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +898,Subscription,Inscrição -DocType: Purchase Invoice,Contact Email,Email do Contato -DocType: Appraisal Goal,Score Earned,Pontuação Obtida -apps/erpnext/erpnext/setup/setup_wizard/operations/install_fixtures.py +199,Notice Period,Período de Aviso Prévio -DocType: Asset Category,Asset Category Name,Ativo Categoria Nome -apps/erpnext/erpnext/setup/doctype/territory/territory.js +13,This is a root territory and cannot be edited.,Este é um território de raiz e não pode ser editada. -apps/erpnext/erpnext/setup/doctype/sales_person/sales_person_tree.js +5,New Sales Person Name,Nome do Novo Vendedor -DocType: Packing Slip,Gross Weight UOM,Unidade de Medida do Peso Bruto -DocType: Delivery Note Item,Against Sales Invoice,Contra a Fatura de Venda -DocType: Bin,Reserved Qty for Production,Qtde Reservada para Produção -DocType: Asset,Frequency of Depreciation (Months),Frequência das Depreciações (meses) -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.js +542,Credit Account,Conta de crédito -DocType: Landed Cost Item,Landed Cost Item,Custo de Desembarque do Item -apps/erpnext/erpnext/accounts/report/profitability_analysis/profitability_analysis.js +58,Show zero values,Mostrar valores zerados -DocType: BOM,Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Quantidade do item obtido após a fabricação / reembalagem a partir de determinadas quantidades de matéria-prima -DocType: Payment Reconciliation,Receivable / Payable Account,Conta de Recebimento/Pagamento -DocType: Delivery Note Item,Against Sales Order Item,Relacionado ao Item do Pedido de Venda -apps/erpnext/erpnext/stock/doctype/item/item.py +787,Please specify Attribute Value for attribute {0},"Por favor, especifique Atributo Valor para o atributo {0}" -apps/erpnext/erpnext/accounts/doctype/budget/budget.py +55,Budget cannot be assigned against Group Account {0},Orçamento não pode ser atribuído contra a conta de grupo {0} -apps/erpnext/erpnext/accounts/doctype/cost_center/cost_center.py +24,Please enter parent cost center,Por favor entre o centro de custo pai -DocType: Delivery Note,Print Without Amount,Imprimir sem valores -apps/erpnext/erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py +92,Depreciation Date,Data da Depreciação -DocType: Issue,Support Team,Equipe de Pós-Vendas -apps/erpnext/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py +36,Expiry (In Days),Vencimento (em dias) -DocType: Appraisal,Total Score (Out of 5),Pontuação Total (nota máxima 5) -apps/erpnext/erpnext/stock/doctype/item/item.js +29,Balance,Balanço -DocType: Room,Seating Capacity,Número de Assentos -DocType: Issue,ISS-,INC- -DocType: Project,Total Expense Claim (via Expense Claims),Reivindicação de Despesa Total (via relatórios de despesas) -DocType: Assessment Result,Total Score,Nota Total -DocType: Stock Entry,As per Stock UOM,Como UDM do Estoque -apps/erpnext/erpnext/stock/doctype/batch/batch_list.js +7,Not Expired,Não expirado -DocType: Journal Entry,Total Debit,Débito total -DocType: Manufacturing Settings,Default Finished Goods Warehouse,Armazén de Produtos Acabados -apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +74,Sales Person,Vendedor -DocType: Vehicle Service,Half Yearly,Semestral -DocType: Assessment Plan Criteria,Maximum Score,Nota Máxima -apps/erpnext/erpnext/config/setup.py +83,Create rules to restrict transactions based on values.,Criar regras para restringir operações com base em valores. -DocType: HR Settings,"If checked, Total no. of Working Days will include holidays, and this will reduce the value of Salary Per Day","Se marcado, o total de dias de trabalho vai incluir férias, e isso vai reduzir o valor de salário por dia" -DocType: Purchase Invoice,Total Advance,Total Pago Adiantado -apps/erpnext/erpnext/crm/report/campaign_efficiency/campaign_efficiency.py +19,Quot Count,Contagem de Orçamentos -,BOM Stock Report,Relatório de Estoque por LDM -DocType: GL Entry,Credit Amount,Total de Crédito -apps/erpnext/erpnext/crm/doctype/opportunity/opportunity.js +184,Set as Lost,Definir como Perdido -apps/erpnext/erpnext/accounts/print_format/payment_receipt_voucher/payment_receipt_voucher.html +4,Payment Receipt Note,O pagamento Recibo Nota -apps/erpnext/erpnext/selling/doctype/customer/customer_dashboard.py +6,This is based on transactions against this Customer. See timeline below for details,Isto é baseado nas transações envolvendo este Cliente. Veja a linha do tempo abaixo para maiores detalhes -DocType: Tax Rule,Tax Rule,Regras de Aplicação de Impostos -DocType: Selling Settings,Maintain Same Rate Throughout Sales Cycle,Manter o mesmo preço durante todo o ciclo de vendas -DocType: Manufacturing Settings,Plan time logs outside Workstation Working Hours.,Planejar Registros de Tempo fora do horário de trabalho da estação de trabalho. -apps/erpnext/erpnext/public/js/pos/pos.html +98,Customers in Queue,Clientes na Fila -,Items To Be Requested,Itens para Requisitar -apps/erpnext/erpnext/accounts/page/pos/pos.js +1399,Select or add new customer,Selecione ou adicione um novo cliente -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +9,Application of Funds (Assets),Aplicação de Recursos (Ativos) -apps/erpnext/erpnext/hr/doctype/employee/employee_dashboard.py +6,This is based on the attendance of this Employee,Isto é baseado na frequência deste Colaborador -apps/erpnext/erpnext/education/doctype/student_attendance_tool/student_attendance_tool.js +113,Mark Attendance,Marcar Presença -DocType: Fiscal Year,Year Start Date,Data do início do ano -DocType: Additional Salary,Employee Name,Nome do Colaborador -DocType: Purchase Invoice,Rounded Total (Company Currency),Total arredondado (moeda da empresa) -apps/erpnext/erpnext/accounts/doctype/account/account.py +103,Cannot covert to Group because Account Type is selected.,"Não é possível converter para o Grupo, pois o tipo de conta é selecionado." -apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py +276,{0} {1} has been modified. Please refresh.,"{0} {1} foi modificado. Por favor, atualize." -DocType: Leave Block List,Stop users from making Leave Applications on following days.,Impedir que usuários solicitem licenças em dias seguintes -DocType: Loyalty Point Entry,Purchase Amount,Valor de Compra -apps/erpnext/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +261,Supplier Quotation {0} created,Orçamento do fornecedor {0} criado -apps/erpnext/erpnext/accounts/report/financial_statements.py +106,End Year cannot be before Start Year,O ano final não pode ser antes do ano de início -DocType: Employee Benefit Application,Employee Benefits,Benefícios a Colaboradores -apps/erpnext/erpnext/stock/doctype/delivery_note/delivery_note.py +269,Packed quantity must equal quantity for Item {0} in row {1},Embalado quantidade deve ser igual a quantidade de item {0} na linha {1} -DocType: Work Order,Manufactured Qty,Qtde Fabricada -DocType: Purchase Receipt Item,Accepted Quantity,Quantidade Aceita -apps/erpnext/erpnext/hr/doctype/employee/employee.py +302,Please set a default Holiday List for Employee {0} or Company {1},"Por favor, defina uma Lista de Feriados padrão para o(a) Colaboador(a) {0} ou para a Empresa {1}" -apps/erpnext/erpnext/config/accounts.py +14,Bills raised to Customers.,Faturas emitidas para Clientes. -apps/erpnext/erpnext/projects/report/project_wise_stock_tracking/project_wise_stock_tracking.py +26,Project Id,Id Projeto -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +578,Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},Linha {0}: Valor não pode ser superior ao valor pendente relacionado ao Reembolso de Despesas {1}. O valor pendente é {2} -DocType: Assessment Plan,Schedule,Agendar -DocType: Account,Parent Account,Conta Superior -DocType: GL Entry,Voucher Type,Tipo de Comprovante -apps/erpnext/erpnext/accounts/page/pos/pos.js +1731,Price List not found or disabled,Preço de tabela não encontrado ou deficientes -apps/erpnext/erpnext/hr/doctype/salary_slip/salary_slip.py +349,Employee relieved on {0} must be set as 'Left',Colaborador dispensado em {0} deve ser definido como 'Desligamento' -apps/erpnext/erpnext/hr/doctype/appraisal/appraisal.py +42,Appraisal {0} created for Employee {1} in the given date range,Avaliação {0} criada para o Colaborador {1} no intervalo de datas informado -DocType: Selling Settings,Campaign Naming By,Nomeação de Campanha por -DocType: Employee,Current Address Is,Endereço atual é -apps/erpnext/erpnext/utilities/user_progress.py +51,Monthly Sales Target (,Meta de Vendas Mensais ( -apps/erpnext/erpnext/accounts/doctype/account/account_tree.js +41,"Optional. Sets company's default currency, if not specified.","Opcional. Define moeda padrão da empresa, se não for especificado." -apps/erpnext/erpnext/config/accounts.py +45,Accounting journal entries.,Lançamentos no livro Diário. -DocType: Delivery Note Item,Available Qty at From Warehouse,Qtde disponível no armazén de origem -apps/erpnext/erpnext/hr/doctype/department_approver/department_approver.py +17,Please select Employee Record first.,"Por favor, selecione o registro do Colaborador primeiro." -DocType: POS Profile,Account for Change Amount,Conta para troco -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +249,Row {0}: Party / Account does not match with {1} / {2} in {3} {4},Linha {0}: Sujeito / Conta não coincidem com {1} / {2} em {3} {4} -apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +241,Please enter Expense Account,Por favor insira Conta Despesa -DocType: Account,Stock,Estoque -apps/erpnext/erpnext/accounts/doctype/payment_entry/payment_entry.js +1128,"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry","Linha #{0}: O Tipo de Documento de Referência deve ser um Pedido de Compra, uma Nota Fiscal de Compra ou um Lançamento Contábil" -DocType: Item,"If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified","Se o item é uma variante de outro item, em seguida, descrição, imagem, preços, impostos etc será definido a partir do modelo, a menos que explicitamente especificado" -DocType: Serial No,Purchase / Manufacture Details,Detalhes Compra / Fabricação -apps/erpnext/erpnext/config/stock.py +332,Batch Inventory,Inventário por Lote -DocType: Employee,Contract End Date,Data Final do Contrato -DocType: Sales Order,Track this Sales Order against any Project,Acompanhar este Pedido de Venda relacionado a qualquer projeto -apps/erpnext/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js +129,Not Available,não disponível -DocType: Pricing Rule,Min Qty,Qtde Mínima -DocType: Production Plan Item,Planned Qty,Qtde Planejada -apps/erpnext/erpnext/accounts/report/purchase_register/purchase_register.py +121,Total Tax,Fiscal total -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.py +284,For Quantity (Manufactured Qty) is mandatory,Para Quantidade (qtde fabricada) é obrigatório -DocType: Stock Entry,Default Target Warehouse,Armazén de Destino Padrão -DocType: Purchase Invoice,Net Total (Company Currency),Total Líquido (moeda da empresa) -DocType: Notification Control,Purchase Receipt Message,Mensagem do Recibo de Compra -DocType: Job Card,Actual Start Date,Data de Início Real -DocType: Sales Order,% of materials delivered against this Sales Order,% do material entregue deste Pedido de Venda -apps/erpnext/erpnext/accounts/party.py +288,Accounting entries have already been made in currency {0} for company {1}. Please select a receivable or payable account with currency {0}.,"Lançamentos contábeis já foram feitas em moeda {0} para {1} empresa. Por favor, selecione uma conta a receber ou a pagar com a moeda {0}." -DocType: Asset,Is Existing Asset,É Ativo Existente -DocType: Warranty Claim,If different than customer address,Se diferente do endereço do cliente -DocType: BOM Operation,BOM Operation,Operação da LDM -DocType: Purchase Taxes and Charges,On Previous Row Amount,No Valor da Linha Anterior -DocType: POS Profile,POS Profile,Perfil do PDV -apps/erpnext/erpnext/stock/get_item_details.py +163,"Item {0} is a template, please select one of its variants","Item {0} é um modelo, por favor selecione uma de suas variantes" -DocType: Asset,Asset Category,Categoria de Ativos -apps/erpnext/erpnext/hr/doctype/salary_structure/salary_structure.py +39,Net pay cannot be negative,Salário líquido não pode ser negativo -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +951,Material to Supplier,Material a Fornecedor -apps/erpnext/erpnext/stock/doctype/stock_entry/stock_entry.js +708,Excise Invoice,Guia de Recolhimento de Tributos -DocType: Expense Claim,Employees Email Id,Endereços de Email dos Colaboradores -apps/erpnext/erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py +145,Current Liabilities,Passivo Circulante -apps/erpnext/erpnext/config/selling.py +303,Send mass SMS to your contacts,Enviar SMS em massa para seus contatos -DocType: Purchase Taxes and Charges,Consider Tax or Charge for,Considere Imposto ou Encargo para -apps/erpnext/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +57,Actual Qty is mandatory,Qtde Real é obrigatória -apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.py +89,"{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, os Pedidos de Compra para este fornecedor devem ser emitidos com cautela." -DocType: Loan,Loan Type,Tipo de Empréstimo -DocType: Employee Education,Major/Optional Subjects,Assuntos Principais / Opcionais -DocType: Sales Invoice Item,Drop Ship,Drop Ship -DocType: Employee,"Here you can maintain family details like name and occupation of parent, spouse and children","Aqui você pode manter detalhes familiares como o nome e ocupação do cônjuge, pai e filhos" -DocType: Academic Term,Term End Date,Data de Término do Período Letivo -DocType: Purchase Invoice,Taxes and Charges Deducted (Company Currency),Impostos e taxas deduzidos (moeda da empresa) -DocType: Item Group,General Settings,Configurações Gerais -apps/erpnext/erpnext/setup/doctype/currency_exchange/currency_exchange.py +23,From Currency and To Currency cannot be same,De Moeda e Para Moeda não pode ser o mesmo -apps/erpnext/erpnext/setup/doctype/email_digest/email_digest.js +6,You must Save the form before proceeding,Você deve salvar o formulário antes de continuar -apps/erpnext/erpnext/public/js/setup_wizard.js +56,Attach Logo,Anexar Logo -apps/erpnext/erpnext/stock/doctype/batch/batch.js +51,Stock Levels,Níveis de Estoque -DocType: Customer,Commission Rate,Percentual de Comissão -apps/erpnext/erpnext/templates/includes/cart/cart_dropdown.html +25,Cart is Empty,Seu carrinho está vazio -DocType: Work Order,Actual Operating Cost,Custo Operacional Real -DocType: Soil Texture,Clay Loam,Barro de Argila -apps/erpnext/erpnext/accounts/doctype/account/account.py +88,Root cannot be edited.,Root não pode ser editado. -DocType: Item,Units of Measure,Unidades de Medida -DocType: Manufacturing Settings,Allow Production on Holidays,Permitir a Produção em Feriados -DocType: Sales Invoice,Customer's Purchase Order Date,Data do Pedido de Compra do Cliente -DocType: Packing Slip,Package Weight Details,Detalhes de Peso do Pacote -DocType: Payment Gateway Account,Payment Gateway Account,Integração com API's de Meios de Pagamento -DocType: Shopping Cart Settings,After payment completion redirect user to selected page.,Após a conclusão do pagamento redirecionar usuário para a página selecionada. -DocType: Company,Existing Company,Empresa Existente -apps/erpnext/erpnext/hr/doctype/upload_attendance/upload_attendance.py +104,Please select a csv file,"Por favor, selecione um arquivo csv" -DocType: Student Leave Application,Mark as Present,Marcar como presente -apps/erpnext/erpnext/templates/pages/home.html +14,Featured Products,Produtos em Destaque -apps/erpnext/erpnext/config/selling.py +163,Terms and Conditions Template,Modelo de Termos e Condições -DocType: Delivery Trip,Delivery Details,Detalhes da entrega -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +618,Cost Center is required in row {0} in Taxes table for type {1},Centro de Custo é necessária na linha {0} no Imposto de mesa para o tipo {1} -,Item-wise Purchase Register,Registro de Compras por Item -apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +381,Please select Category first,Por favor selecione a Categoria primeiro -apps/erpnext/erpnext/config/projects.py +13,Project master.,Cadastro de Projeto. -apps/erpnext/erpnext/controllers/status_updater.py +215,"To allow over-billing or over-ordering, update ""Allowance"" in Stock Settings or the Item.","Para permitir o excesso de faturamento ou excesso de pedidos, atualize ""Permitir entrega ou recebimento adicional até este percentual"" nas configurações de Estoque ou do Item." -DocType: Global Defaults,Do not show any symbol like $ etc next to currencies.,Não mostrar nenhum símbolo como R$ etc ao lado de moedas. -apps/erpnext/erpnext/hr/doctype/leave_application/leave_application.py +526, (Half Day),(Meio Período) -apps/erpnext/erpnext/utilities/activation.py +128,Make Student Batch,Faça uma Série de Alunos -DocType: Leave Type,Is Carry Forward,É encaminhado -apps/erpnext/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py +41,Lead Time Days,Prazo de Entrega (em dias) -apps/erpnext/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +125,Please enter Sales Orders in the above table,"Por favor, indique os pedidos de venda na tabela acima" -,Stock Summary,Resumo do Estoque -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +137,Row {0}: Party Type and Party is required for Receivable / Payable account {1},Linha {0}: Tipo de Sujeito e Sujeito são necessários para receber / pagar contas {1} -apps/erpnext/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py +94,Ref Date,Ref Data -DocType: Employee,Reason for Leaving,Motivo da saída -DocType: BOM Operation,Operating Cost(Company Currency),Custo operacional (moeda da empresa) -DocType: Loan Application,Rate of Interest,Taxa de Juros -DocType: Expense Claim Detail,Sanctioned Amount,Valor Liberado -DocType: GL Entry,Is Opening,É Abertura -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +228,Row {0}: Debit entry can not be linked with a {1},Linha {0}: Lançamento de débito não pode ser relacionado a uma {1} -DocType: Journal Entry,Subscription Section,Seção de Inscrição -apps/erpnext/erpnext/accounts/doctype/account/account.py +238,Account {0} does not exist,A Conta {0} não existe -DocType: Account,Cash,Dinheiro -DocType: Employee,Short biography for website and other publications.,Breve biografia para o site e outras publicações. +"""Customer Provided Item"" cannot be Purchase Item also","Item Fornecido pelo Cliente" não pode ser Item de Compra também, +"""Customer Provided Item"" cannot have Valuation Rate","Item Fornecido pelo Cliente" não pode ter Taxa de Avaliação, +"""Is Fixed Asset"" cannot be unchecked, as Asset record exists against the item","""É Ativo Fixo"" não pode ser desmarcado se já existe um registro de Ativo relacionado ao item", +'Based On' and 'Group By' can not be same,'Baseado em' e 'Agrupar por' não podem ser o mesmo, +'Days Since Last Order' must be greater than or equal to zero,'Dias desde a última Ordem' deve ser maior ou igual a zero, +'Entries' cannot be empty,'Entradas' não pode estar vazio, +'From Date' is required,'Informe a 'Data Inicial', +'From Date' must be after 'To Date',A 'Data Final' deve ser posterior a 'Data Inicial', +'Has Serial No' can not be 'Yes' for non-stock item,'Tem Número Serial' não pode ser confirmado para itens sem controle de estoque, +'Opening','Abrindo', +'To Case No.' cannot be less than 'From Case No.','Número do Caso Final' não pode ser menor que o 'Número do Caso Inicial', +'To Date' is required,'Data Final' é necessária, +'Total',';Total';, +'Update Stock' can not be checked because items are not delivered via {0},'Atualização do Estoque' não pode ser verificado porque os itens não são entregues via {0}, +'Update Stock' cannot be checked for fixed asset sale,"'Atualizar Estoque' não pode ser selecionado para venda de ativo fixo", +) for {0},) para {0}, +1 exact match.,1 correspondência exata., +90-Above,Acima de 90, +A Customer Group exists with same name please change the Customer name or rename the Customer Group,Existe um grupo de clientes com o mesmo nome por favor modifique o nome do cliente ou renomeie o grupo de clientes, +A Default Service Level Agreement already exists.,Um contrato de nível de serviço padrão já existe., +A Lead requires either a person's name or an organization's name,Um Lead requer o nome de uma pessoa ou o nome de uma organização, +A customer with the same name already exists,Um cliente com o mesmo nome já existe, +A question must have more than one options,Uma pergunta deve ter mais de uma opção, +A qustion must have at least one correct options,Uma questão deve ter pelo menos uma opção correta, +A {0} exists between {1} and {2} (,Um {0} existe entre {1} e {2} (, +A4,A4, +API Endpoint,API Endpoint, +API Key,Chave da API, +Abbr can not be blank or space,Abbr não pode estar em branco ou espaço, +Abbreviation already used for another company,Abreviatura já utilizado para outra empresa, +Abbreviation cannot have more than 5 characters,Abreviatura não pode ter mais de 5 caracteres, +Abbreviation is mandatory,Abreviatura é obrigatória, +About the Company,Sobre a Empresa, +About your company,Sobre a sua empresa, +Above,Acima, +Absent,Ausente, +Academic Term,Período Letivo, +Academic Term: ,Período Acadêmico:, +Academic Year,Ano Letivo, +Academic Year: ,Ano Acadêmico:, +Accepted + Rejected Qty must be equal to Received quantity for Item {0},A qtde Aceita + Rejeitada deve ser igual a quantidade recebida para o item {0}, +Access Token,Token de Acesso, +Accessable Value,Valor Acessível, +Account,Conta, +Account Number,Número da Conta, +Account Number {0} already used in account {1},Número de conta {0} já utilizado na conta {1}, +Account Pay Only,Só Conta de Pagamento, +Account Type,Tipo de Conta, +Account Type for {0} must be {1},O Tipo de Conta para {0} deverá ser {1}, +"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","O saldo já está em crédito, você não tem a permissão para definir 'saldo deve ser' como 'débito'", +"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","O saldo já está em débito, você não tem permissão para definir 'saldo deve ser' como 'crédito'", +Account number for account {0} is not available.
    Please setup your Chart of Accounts correctly.,O número da conta da conta {0} não está disponível.
    Configure seu Plano de Contas corretamente., +Account with child nodes cannot be converted to ledger,Contas com nós filhos não podem ser convertidas em um livro-razão, +Account with child nodes cannot be set as ledger,Conta com nós filho não pode ser definido como contabilidade, +Account with existing transaction can not be converted to group.,Contas com a transações existentes não pode ser convertidas em um grupo., +Account with existing transaction can not be deleted,Contas com transações existentes não pode ser excluídas, +Account with existing transaction cannot be converted to ledger,Contas com transações existentes não pode ser convertidas em livro-razão, +Account {0} does not belong to company: {1},A Conta {0} não pertence à Empresa: {1}, +Account {0} does not belongs to company {1},Conta {0} não pertence à empresa {1}, +Account {0} does not exist,A Conta {0} não existe, +Account {0} does not exists,Conta {0} não existe, +Account {0} does not match with Company {1} in Mode of Account: {2},A conta {0} não coincide com a Empresa {1} no Modo de Conta: {2}, +Account {0} has been entered multiple times,A Conta {0} foi inserida várias vezes, +Account {0} is added in the child company {1},Conta {0} é adicionada na empresa filha {1}, +Account {0} is frozen,A Conta {0} está congelada, +Account {0} is invalid. Account Currency must be {1},Conta {0} é inválido. Conta de moeda deve ser {1}, +Account {0}: Parent account {1} can not be a ledger,Conta {0}: a Conta Superior {1} não pode ser um livro-razão, +Account {0}: Parent account {1} does not belong to company: {2},Conta {0}: a Conta Superior {1} não pertence à empresa: {2}, +Account {0}: Parent account {1} does not exist,Conta {0}: a Conta Superior {1} não existe, +Account {0}: You can not assign itself as parent account,Conta {0}: Você não pode definir a própria conta como uma conta superior, +Account: {0} can only be updated via Stock Transactions,Conta: {0} só pode ser atualizado via transações de ações, +Account: {0} with currency: {1} can not be selected,A Conta: {0} com moeda: {1} não pode ser selecionada, +Accountant,Contador, +Accounting,Contabilidade, +Accounting Entry for Asset,Entrada Contábil de Ativo, +Accounting Entry for Stock,Lançamento Contábil de Estoque, +Accounting Entry for {0}: {1} can only be made in currency: {2},Contabilidade de entrada para {0}: {1} só pode ser feito em moeda: {2}, +Accounting Ledger,Registro Contábil, +Accounting journal entries.,Lançamentos no livro Diário., +Accounts,Contas, +Accounts Manager,Gerente de Contas, +Accounts Payable,Contas a Pagar, +Accounts Payable Summary,Resumo do Contas a Pagar, +Accounts Receivable,Contas a Receber, +Accounts Receivable Summary,Resumo do Contas a Receber, +Accounts User,Usuário de Contas, +Accounts table cannot be blank.,Tabela de Contas não pode estar vazia., +Accrual Journal Entry for salaries from {0} to {1},Entrada de diário de acréscimo para salários de {0} a {1}, +Accumulated Depreciation,Depreciação Acumulada, +Accumulated Depreciation Amount,Total de Depreciação Acumulada, +Accumulated Depreciation as on,Depreciação Acumulada Como Em, +Accumulated Monthly,Acumulada Mensalmente, +Accumulated Values,Valores Acumulados, +Accumulated Values in Group Company,Valores Acumulados na Empresa do Grupo, +Achieved ({}),Alcançado ({}), +Action,Ação, +Action Initialised,Ação Inicializada, +Actions,Ações, +Active,Ativo, +Activity Cost exists for Employee {0} against Activity Type - {1},Já existe um custo da atividade para o colaborador {0} relacionado ao tipo de atividade - {1}, +Activity Cost per Employee,Custo da Atividade Por Colaborador, +Activity Type,Tipo de Atividade, +Actual Cost,Custo Real, +Actual Delivery Date,Data de Entrega Real, +Actual Qty,Qtde Real, +Actual Qty is mandatory,Qtde Real é obrigatória, +Actual Qty {0} / Waiting Qty {1},Qtd Real {0} / Qtd de Espera {1}, +Actual Qty: Quantity available in the warehouse.,Atual Qtde: Quantidade existente no armazém., +Actual qty in stock,Quantidade real em estoque, +Actual type tax cannot be included in Item rate in row {0},Tipo de imposto real não pode ser incluído na tarifa do item na linha {0}, +Add,Adicionar, +Add / Edit Prices,Adicionar / Editar Preços, +Add Comment,Adicionar Comentário, +Add Customers,Adicionar Clientes, +Add Employees,Adicionar Colaboradores, +Add Item,Adicionar Item, +Add Items,Adicionar Itens, +Add Leads,Adicionar Leads, +Add Multiple Tasks,Adicionar Várias Tarefas, +Add Row,Adicionar Linha, +Add Sales Partners,Adicionar Parceiros de Vendas, +Add Serial No,Adicionar Serial No, +Add Students,Adicionar Alunos, +Add Suppliers,Adicionar Fornecedores, +Add Time Slots,Adicionar Intervalos de Tempo, +Add Timesheets,Adicionar Registo de Horas, +Add Timeslots,Adicionar Timeslots, +Add Users to Marketplace,Adicionar Usuários Ao Mercado, +Add a new address,Adicione um novo endereço, +Add cards or custom sections on homepage,Adicione cartões ou seções personalizadas na página inicial, +Add more items or open full form,Adicionar mais itens ou abrir formulário inteiro, +Add notes,Adicione notas, +Add the rest of your organization as your users. You can also add invite Customers to your portal by adding them from Contacts,Adicione o resto de sua organização como seus usuários. Você também pode adicionar clientes convidados ao seu portal adicionando-os de Contatos, +Add to Details,Adicionar Aos Detalhes, +Add/Remove Recipients,Adicionar / Remover Destinatários, +Added,Adicionado, +Added to details,Adicionado aos detalhes, +Added {0} users,Adicionados {0} usuários, +Additional Salary Component Exists.,Componente Salarial Adicional Existente., +Address,Endereço, +Address Line 2,Complemento, +Address Name,Nome do Endereço, +Address Title,Título do Endereço, +Address Type,Tipo de Endereço, +Administrative Expenses,Despesas Administrativas, +Administrative Officer,Escritório Administrativo, +Administrator,Administrador, +Admission,Admissão, +Admission and Enrollment,Admissão e Inscrição, +Admissions for {0},Admissões Para {0}, +Admit,Admitem, +Admitted,Admitido/a, +Advance Amount,Valor Adiantado, +Advance Payments,Adiantamentos, +Advance account currency should be same as company currency {0},A moeda da conta avançada deve ser igual à moeda da empresa {0}, +Advance amount cannot be greater than {0} {1},O valor do adiantamento não pode ser maior do que {0} {1}, +Advertising,Publicidade, +Aerospace,Aeroespacial, +Against,Contra, +Against Account,Contra À Conta, +Against Journal Entry {0} does not have any unmatched {1} entry,Contra Journal Entry {0} não tem qualquer {1} entrada incomparável, +Against Journal Entry {0} is already adjusted against some other voucher,Contra Journal Entry {0} já é ajustado contra algum outro comprovante, +Against Supplier Invoice {0} dated {1},Relacionado à nota fiscal do fornecedor nº {0} emitida em {1}, +Against Voucher,Contra o Comprovante, +Against Voucher Type,Contra o Tipo de Comprovante, +Age,Idade, +Age (Days),Idade (dias), +Ageing Based On,Envelhecimento Baseado Em, +Ageing Range 1,Faixa Envelhecimento 1, +Ageing Range 2,Faixa Envelhecimento 2, +Ageing Range 3,Faixa de Envelhecimento 3, +Agriculture,Agricultura, +Agriculture (beta),Agricultura (beta), +Airline,Companhia Aérea, +All Accounts,Todas as Contas, +All Addresses.,Todos os Endereços., +All Assessment Groups,Todos os Grupos de Avaliação, +All BOMs,Todas as LDMs, +All Contacts.,Todos os Contatos., +All Customer Groups,Todos os Grupos de Clientes, +All Day,Dia Inteiro, +All Departments,Todos os Departamentos, +All Healthcare Service Units,Todas as Unidades de Serviço de Saúde, +All Item Groups,Todos os Grupos de Itens, +All Jobs,Todos as Tarefas, +All Products,Todos os Produtos, +All Products or Services.,Todos os Produtos Ou Serviços., +All Student Admissions,Todas Admissões de Alunos, +All Supplier Groups,Todos os Grupos de Fornecedores, +All Supplier scorecards.,Todos os scorecards do fornecedor., +All Territories,Todos os Territórios, +All Warehouses,Todos os Armazéns, +All communications including and above this shall be moved into the new Issue,Todas as comunicações incluindo e acima serão transferidas para o novo problema., +All items have already been transferred for this Work Order.,Todos os itens já foram transferidos para esta Ordem de Serviço., +All other ITC,Todos os outros ITC, +All the mandatory Task for employee creation hasn't been done yet.,Todas as Tarefas obrigatórias para criação de funcionários ainda não foram concluídas., +Allocate Payment Amount,Atribuir Valor do Pagamento, +Allocated Amount,Quantidade Atribuída, +Allocated Leaves,Folhas Alocadas, +Allocating leaves...,Alocando as folhas..., +Already record exists for the item {0},Já existe registro para o item {0}, +"Already set default in pos profile {0} for user {1}, kindly disabled default","Já definiu o padrão no perfil pos {0} para o usuário {1}, desabilitado gentilmente por padrão", +Alternate Item,Item Alternativo, +Alternative item must not be same as item code,Item alternativo não deve ser igual ao código do item, +Amended From,Alterado De, +Amount,Montante, +Amount After Depreciation,Montante Após Depreciação, +Amount of Integrated Tax,Quantidade de Imposto Integrado, +Amount of TDS Deducted,Quantidade de TDS Deduzida, +Amount should not be less than zero.,O valor não deve ser menor que zero., +Amount to Bill,Valor a Ser Faturado, +Amount {0} {1} against {2} {3},Quantidade {0} {1} em {2} {3}, +Amount {0} {1} deducted against {2},Montante {0} {1} deduzido em {2}, +Amount {0} {1} transferred from {2} to {3},Montante {0} {1} transferido de {2} para {3}, +Amount {0} {1} {2} {3},Total {0} {1} {2} {3}, +Amt,Total, +"An Item Group exists with same name, please change the item name or rename the item group","Um grupo de itens existe com o mesmo nome, por favor, mude o nome do item ou mude o nome do grupo de itens", +An academic term with this 'Academic Year' {0} and 'Term Name' {1} already exists. Please modify these entries and try again.,"Já existe um prazo académico com este""Ano Lectivo"" {0} e ""Nome do Prazo"" {1}. Por favor, altere estes registos e tente novamente.", +An error occurred during the update process,Ocorreu um erro durante o processo de atualização, +"An item exists with same name ({0}), please change the item group name or rename the item","Um item existe com o mesmo nome ( {0}) , por favor, altere o nome do grupo de itens ou renomeie o item", +Analyst,Analista, +Analytics,Análise, +Annual Billing: {0},Faturação Anual: {0}, +Annual Salary,Salário Anual, +Anonymous,Anônimo, +Another Budget record '{0}' already exists against {1} '{2}' and account '{3}' for fiscal year {4},Outro registro de orçamento ';{0}'; já existe contra {1} ';{2}'; e conta ';{3}'; para o ano fiscal {4}, +Another Period Closing Entry {0} has been made after {1},Outra entrada no Período de Encerramento {0} foi feita após {1}, +Another Sales Person {0} exists with the same Employee id,Outro Vendedor {0} existe com o mesmo ID de Colaborador, +Antibiotic,Antibiótico, +Apparel & Accessories,Vestuário e Acessórios, +Applicable For,Aplicável, +"Applicable if the company is SpA, SApA or SRL","Aplicável se a empresa for SpA, SApA ou SRL", +Applicable if the company is a limited liability company,Aplicável se a empresa for uma sociedade de responsabilidade limitada, +Applicable if the company is an Individual or a Proprietorship,Aplicável se a empresa é um indivíduo ou uma propriedade, +Applicant,Candidato, +Applicant Type,Tipo de Candidato, +Application of Funds (Assets),Aplicação de Recursos (ativos), +Application period cannot be across two allocation records,O período de aplicação não pode ser realizado em dois registros de alocação, +Application period cannot be outside leave allocation period,Período de aplicação não pode estar fora do período de atribuição de licença, +Applied,Aplicado, +Apply Now,Aplique Agora, +Appointment Confirmation,Confirmação de Compromisso, +Appointment Duration (mins),Duração da Consulta (min.), +Appointment Type,Tipo de Compromisso, +Appointment {0} and Sales Invoice {1} cancelled,Compromisso {0} e fatura de vendas {1} cancelados, +Appointments and Encounters,Nomeações e Encontros, +Appointments and Patient Encounters,Nomeações e Encontros Com Pacientes, +Appraisal {0} created for Employee {1} in the given date range,Avaliação {0} criada para o Colaborador {1} no intervalo de datas informado, +Apprentice,Aprendiz, +Approval Status,Estado da Aprovação, +Approval Status must be 'Approved' or 'Rejected',"Status de Aprovação deve ser ""Aprovado"" ou ""Rejeitado""", +Approve,Aprovar, +Approving Role cannot be same as role the rule is Applicable To,Função Aprovadora não pode ser a mesmo função da regra é Aplicável a, +Approving User cannot be same as user the rule is Applicable To,Usuário Aprovador não pode ser o mesmo usuário da regra é Aplicável a, +"Apps using current key won't be able to access, are you sure?","Aplicativos que usam a chave atual não poderão acessar, tem certeza?", +Are you sure you want to cancel this appointment?,Tem certeza de que deseja cancelar esse compromisso?, +Arrear,Atrasado, +As Examiner,Como Examinador, +As On Date,Como na Data, +As Supervisor,Como Supervisor, +As per rules 42 & 43 of CGST Rules,Conforme as regras 42 e 43 das Regras CGST, +As per section 17(5),Conforme seção 17 (5), +As per your assigned Salary Structure you cannot apply for benefits,De acordo com a estrutura salarial atribuída você não pode solicitar benefícios, +Assessment,Avaliação, +Assessment Criteria,Critérios de Avaliação, +Assessment Group,Grupo de Avaliação, +Assessment Group: ,Grupo de Avaliação:, +Assessment Plan,Plano de Avaliação, +Assessment Plan Name,Nome do Plano de Avaliação, +Assessment Report,Relatório de Avaliação, +Assessment Reports,Relatórios de Avaliação, +Assessment Result,Resultado da Avaliação, +Assessment Result record {0} already exists.,Avaliação do registro de resultados {0} já existe., +Asset,Ativo, +Asset Category,Categoria de Ativos, +Asset Category is mandatory for Fixed Asset item,É obrigatório colocar a Categoria Ativo para um item de Ativo Imobilizado, +Asset Maintenance,Manutenção de Ativos, +Asset Movement,Movimentação de Ativos, +Asset Movement record {0} created,Registro de Movimentação de Ativos {0} criado, +Asset Name,Nome do Ativo, +Asset Received But Not Billed,Ativo Recebido Mas Não Faturado, +Asset Value Adjustment,Ajuste do Valor do Ativo, +"Asset cannot be cancelled, as it is already {0}","Activo não podem ser canceladas, como já é {0}", +Asset scrapped via Journal Entry {0},Ativo excluído através do Lançamento Contabilístico {0}, +"Asset {0} cannot be scrapped, as it is already {1}","Activo {0} não pode ser descartado, uma vez que já é {1}", +Asset {0} does not belong to company {1},O ativo {0} não pertence à empresa {1}, +Asset {0} must be submitted,O Ativo {0} deve ser enviado, +Assets,Ativos, +Assign,Atribuir, +Assign Salary Structure,Atribuir Estrutura Salarial, +Assign To,Atribuir A, +Assign to Employees,Atribuir Aos Funcionários, +Assigning Structures...,Atribuindo Estruturas..., +Associate,Associado, +At least one mode of payment is required for POS invoice.,É necessário pelo menos um modo de pagamento para a fatura POS., +Atleast one item should be entered with negative quantity in return document,Pelo menos um item deve ser inserido com quantidade negativa no documento de devolução, +Atleast one of the Selling or Buying must be selected,Pelo menos um dos Vendedores ou Compradores deve ser selecionado, +Atleast one warehouse is mandatory,Pelo menos um armazém é obrigatório, +Attach Logo,Anexar Logo, +Attachment,Anexo, +Attachments,Anexos, +Attendance,Comparecimento, +Attendance From Date and Attendance To Date is mandatory,Data de Início do Comparecimento e Data Final de Comparecimento é obrigatória, +Attendance can not be marked for future dates,Comparecimento não pode ser marcado para datas futuras, +Attendance date can not be less than employee's joining date,Data de presença não pode ser inferior á data de admissão do funcionário, +Attendance for employee {0} is already marked,Comparecimento para o colaborador {0} já está marcado, +Attendance for employee {0} is already marked for this day,Presença para o colaborador {0} já está registrada para este dia, +Attendance has been marked successfully.,A presença foi registada com sucesso., +Attendance not submitted for {0} as it is a Holiday.,Participação não enviada para {0} pois é um feriado., +Attendance not submitted for {0} as {1} on leave.,Participação não enviada para {0} como {1} de licença., +Attribute table is mandatory,A tabela de atributos é obrigatório, +Attribute {0} selected multiple times in Attributes Table,Atributo {0} selecionada várias vezes na tabela de atributos, +Author,Autor, +Authorized Signatory,Signatário Autorizado, +Auto Material Requests Generated,Requisições de Material Geradas Automaticamente, +Auto Repeat,Repetição Automática, +Auto repeat document updated,Auto repetir documento atualizado, +Automotive,Automotivo, +Available,Disponível, +Available Leaves,Folhas Disponíveis, +Available Qty,Qtde Disponível, +Available Selling,Venda Disponível, +Available for use date is required,Disponível para data de uso é obrigatório, +Available slots,Slots disponíveis, +Available {0},Disponível {0}, +Available-for-use Date should be after purchase date,A data disponível para uso deve ser posterior à data de compra, +Average Age,Idade Média, +Average Rate,Taxa Média, +Avg Daily Outgoing,Média Diária de Saída, +Avg. Buying Price List Rate,Valor Médio de Lista de Preços de Compra, +Avg. Selling Price List Rate,Valor Médio na Lista de Preços de Venda, +Avg. Selling Rate,Valor Médio de Venda, +BOM,LDM, +BOM Browser,Navegador de LDM, +BOM No,Nº da LDM, +BOM Rate,Valor na LDM, +BOM Stock Report,Relatório de Estoque Por LDM, +BOM and Manufacturing Quantity are required,A LDM e a Quantidade para Fabricação são necessários, +BOM does not contain any stock item,LDM não contém nenhum item de estoque, +BOM {0} does not belong to Item {1},A LDM {0} não pertencem ao Item {1}, +BOM {0} must be active,LDM {0} deve ser ativa, +BOM {0} must be submitted,LDM {0} deve ser enviada, +Balance,Balanço, +Balance (Dr - Cr),Equilíbrio (Dr - Cr), +Balance ({0}),Equilíbrio ({0}), +Balance Qty,Qtde Balanço, +Balance Sheet,Balanço, +Balance Value,Valor Patrimonial, +Balance for Account {0} must always be {1},Saldo da Conta {0} deve ser sempre {1}, +Bank,Banco, +Bank Account,Conta Bancária, +Bank Accounts,Contas Bancárias, +Bank Draft,Cheque Administrativo, +Bank Entries,Lançamentos do Banco, +Bank Name,Nome do Banco, +Bank Overdraft Account,Conta Bancária Garantida, +Bank Reconciliation,Conciliação Bancária, +Bank Reconciliation Statement,Extrato Bancário Conciliado, +Bank Statement,Extrato Bancário, +Bank Statement Settings,Configurações do Extrato Bancário, +Bank Statement balance as per General Ledger,Extrato bancário de acordo com o livro razão, +Bank account cannot be named as {0},A conta bancária não pode ser nomeada como {0}, +Bank/Cash transactions against party or for internal transfer,Transações Bancárias/Dinheiro de terceiros ou de transferências internas, +Banking,Bancos, +Banking and Payments,Bancos e Pagamentos, +Barcode {0} already used in Item {1},Código de barras {0} já utilizado em item {1}, +Barcode {0} is not a valid {1} code,O código de barras {0} não é um código {1} válido, +Base,Base, +Base URL,URL Base, +Based On,Baseado Em, +Based On Payment Terms,Baseado Em Termos de Pagamento, +Basic,Básico, +Batch,Lote, +Batch Entries,Entradas de Lote, +Batch ID is mandatory,O ID do lote é obrigatório, +Batch Inventory,Inventário Por Lote, +Batch Name,Nome de Lote, +Batch No,Nº do Lote, +Batch number is mandatory for Item {0},Número do lote é obrigatória para item {0}, +Batch {0} of Item {1} has expired.,Lote {0} de {1} item expirou., +Batch {0} of Item {1} is disabled.,Lote {0} do item {1} está desativado., +Batch: ,Lote:, +Batches,Lotes, +Become a Seller,Torne-se Um Vendedor, +Beginner,Principiante, +Bill,Fatura, +Bill Date,Data de Faturamento, +Bill No,Nota Nº, +Bill of Materials,Lista de Materiais, +Bill of Materials (BOM),Lista de Materiais (LDM), +Billable Hours,Horas Faturáveis, +Billed,Faturado, +Billed Amount,Total Faturado, +Billing,Faturamento, +Billing Address,Endereço de Faturamento, +Billing Address is same as Shipping Address,O endereço de cobrança é o mesmo do endereço de entrega, +Billing Amount,Total Para Faturamento, +Billing Status,Status do Faturamento, +Billing currency must be equal to either default company's currency or party account currency,A moeda de faturamento deve ser igual à moeda da empresa padrão ou à moeda da conta do parceiro, +Bills raised by Suppliers.,Contas criadas por Fornecedores., +Bills raised to Customers.,Faturas emitidas para Clientes., +Biotechnology,Biotecnologia, +Birthday Reminder,Lembrete de Aniversário, +Black,Preto, +Blanket Orders from Costumers.,Pedidos de cobertores de clientes., +Block Invoice,Bloquear Fatura, +Boms,LDMs, +Bonus Payment Date cannot be a past date,Data de pagamento do bônus não pode ser uma data passada, +Both Trial Period Start Date and Trial Period End Date must be set,A data de início do período de avaliação e a data de término do período de avaliação devem ser definidas, +Both Warehouse must belong to same Company,Ambos Armazéns devem pertencer a mesma empresa, +Branch,Filial, +Broadcasting,Radio-difusão, +Brokerage,Corretagem, +Browse BOM,Navegar LDM, +Budget Against,Orçamento Em, +Budget List,Lista de Orçamentos, +Budget Variance Report,Relatório de Variação de Orçamento, +Budget cannot be assigned against Group Account {0},Orçamento não pode ser atribuído contra a conta de grupo {0}, +"Budget cannot be assigned against {0}, as it's not an Income or Expense account","Orçamento não pode ser atribuído contra {0}, pois não é uma conta de renda ou despesa", +Buildings,Edifícios, +Bundle items at time of sale.,Empacotar itens no momento da venda., +Business Development Manager,Gerente de Desenvolvimento de Negócios, +Buy,Comprar, +Buying,Compras, +Buying Amount,Valor de Compra, +Buying Price List,Lista de Preços de Compra, +Buying Rate,Taxa de Compra, +"Buying must be checked, if Applicable For is selected as {0}","Compra deve ser verificada, se for caso disso nos items selecionados como {0}", +By {0},Por {0}, +Bypass credit check at Sales Order ,Ignorar verificação de crédito na ordem do cliente, +C-Form records,Registros C-Form, +C-form is not applicable for Invoice: {0},C-forma não é aplicável para a fatura: {0}, +CEO,CEO, +CESS Amount,Quantidade CESS, +CGST Amount,Quantidade CGST, +CRM,CRM, +CWIP Account,Conta do CWIP, +Calculated Bank Statement balance,Saldo calculado do extrato bancário, +Calls,Chamadas, +Campaign,Campanha, +Can be approved by {0},Pode ser aprovado por {0}, +"Can not filter based on Account, if grouped by Account","Não é possível filtrar com base em conta , se agrupados por Conta", +"Can not filter based on Voucher No, if grouped by Voucher","Não é possível filtrar com base no Comprovante Não, se agrupados por voucher", +"Can not mark Inpatient Record Discharged, there are Unbilled Invoices {0}","Não é possível marcar o Inpatient Record Discharged, há Faturas Não Faturadas {0}", +Can only make payment against unbilled {0},Só pode fazer o pagamento contra a faturar {0}, +Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',Pode se referir linha apenas se o tipo de acusação é 'On Anterior Valor Row ' ou ' Previous Row Total', +"Can't change valuation method, as there are transactions against some items which does not have it's own valuation method","Não é possível alterar o método de avaliação, uma vez que há transações contra alguns itens que não tem seu próprio método de avaliação", +Can't create standard criteria. Please rename the criteria,Não é possível criar critérios padrão. Renomeie os critérios, +Cancel,Cancelar, +Cancel Material Visit {0} before cancelling this Warranty Claim,Anular Material de Visita {0} antes de cancelar esta solicitação de garantia, +Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancelar Materiais Visitas {0} antes de cancelar este Manutenção Visita, +Cancel Subscription,Cancelar Assinatura, +Cancel the journal entry {0} first,Cancelar a entrada do diário {0} primeiro, +Canceled,Cancelado, +"Cannot Submit, Employees left to mark attendance","Não é possível enviar, funcionários deixados para marcar presença", +Cannot be a fixed asset item as Stock Ledger is created.,Não pode ser um item de ativos fixos pois o Ledger de estoque é criado., +Cannot cancel because submitted Stock Entry {0} exists,Não pode cancelar por causa da entrada submetido {0} existe, +Cannot cancel transaction for Completed Work Order.,Não é possível cancelar a transação para a ordem de serviço concluída., +Cannot cancel {0} {1} because Serial No {2} does not belong to the warehouse {3},Não é possível cancelar {0} {1} porque o número de série {2} não pertence ao depósito {3}, +Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item,Não é possível alterar os Atributos após a transação do estoque. Faça um novo Item e transfira estoque para o novo Item, +Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Não é possível alterar o Ano Fiscal Data de Início e Data de Fim Ano Fiscal uma vez que o Ano Fiscal é salvo., +Cannot change Service Stop Date for item in row {0},Não é possível alterar a Data de Parada do Serviço para o item na linha {0}, +Cannot change Variant properties after stock transaction. You will have to make a new Item to do this.,Não é possível alterar as propriedades da Variante após a transação de estoque. Você terá que fazer um novo item para fazer isso., +"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.","Não é possível alterar a moeda padrão da empresa, porque existem operações existentes. Transações devem ser canceladas para alterar a moeda padrão.", +Cannot change status as student {0} is linked with student application {1},Não é possível alterar o status pois o aluno {0} está relacionado à candidatura à vaga de estudo {1}, +Cannot convert Cost Center to ledger as it has child nodes,Não é possível converter Centro de Custo de contabilidade uma vez que tem nós filhos, +Cannot covert to Group because Account Type is selected.,Não é possível converter para o Grupo pois o tipo de conta é selecionado., +Cannot create Retention Bonus for left Employees,Não é possível criar bônus de retenção para funcionários da esquerda, +Cannot create a Delivery Trip from Draft documents.,Não é possível criar uma viagem de entrega a partir de documentos de rascunho., +Cannot deactivate or cancel BOM as it is linked with other BOMs,Não é possível desativar ou cancelar BOM vez que está associada com outras BOMs, +"Cannot declare as lost, because Quotation has been made.","Não se pode declarar como perdido , porque foi realizado um Orçamento.", +Cannot deduct when category is for 'Valuation' or 'Valuation and Total',Não pode deduzir quando é para categoria ' Avaliação ' ou ' Avaliação e Total', +Cannot deduct when category is for 'Valuation' or 'Vaulation and Total',"Não pode deduzir quando a categoria é para ""Estimativa"" ou ""Estimativa e Total""", +"Cannot delete Serial No {0}, as it is used in stock transactions","Não é possível excluir Serial no {0}, como ele é usado em transações de ações", +Cannot enroll more than {0} students for this student group.,Não é possível inscrever mais de {0} alunos neste grupo de alunos., +Cannot find active Leave Period,Não é possível encontrar período de saída ativo, +Cannot produce more Item {0} than Sales Order quantity {1},Não é possível produzir mais item {0} do que a quantidade no Pedido de Venda {1}, +Cannot promote Employee with status Left,Não é possível promover funcionários com status, +Cannot refer row number greater than or equal to current row number for this Charge type,Não é possível consultar número da linha superior ou igual ao número da linha atual para este tipo de carga, +Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row,"Não é possível selecionar o tipo de carga como "" Valor Em linha anterior ' ou ' On Anterior Row Total ' para a primeira linha", +Cannot set as Lost as Sales Order is made.,Não é possível definir como Perdido uma vez que foi feito um Pedido de Venda, +Cannot set authorization on basis of Discount for {0},Não é possível definir a autorização com base em desconto para {0}, +Cannot set multiple Item Defaults for a company.,Não é possível definir vários padrões de item para uma empresa., +Cannot set quantity less than delivered quantity,Não é possível definir quantidade menor que a quantidade fornecida, +Cannot set quantity less than received quantity,Não é possível definir quantidade menor que a quantidade recebida, +Cannot set the field {0} for copying in variants,Não é possível definir o campo {0} para copiar em variantes, +Cannot transfer Employee with status Left,Não é possível transferir o funcionário com status, +Cannot {0} {1} {2} without any negative outstanding invoice,Não é possível {0} {1} {2} sem qualquer fatura pendente, +Capital Equipments,Bens de Capital, +Capital Stock,Capital Social, +Capital Work in Progress,Trabalho de Capital Em Progresso, +Cart,Carrinho, +Cart is Empty,Seu Carrinho Está Vazio, +Case No(s) already in use. Try from Case No {0},Processo n º (s) já está em uso. Tente de Processo n {0}, +Cash,Dinheiro, +Cash Flow Statement,Demonstrativo de Fluxo de Caixa, +Cash Flow from Financing,Fluxo de Caixa de Financiamento, +Cash Flow from Investing,Fluxo de Caixa de Investimentos, +Cash Flow from Operations,Fluxo de Caixa das Operações, +Cash In Hand,Dinheiro na Mão, +Cash or Bank Account is mandatory for making payment entry,Dinheiro ou conta bancária é obrigatória para a tomada de entrada de pagamento, +Cashier Closing,Fechamento do Caixa, +Casual Leave,Casual Deixar, +Category,Categoria, +Category Name,Nome da Categoria, +Caution,Cuidado, +Central Tax,Imposto Central, +Certification,Certificação, +Cess,Cobrança, +Change Amount,Troco, +Change Item Code,Alterar o Código do Item, +Change Release Date,Alterar Data de Liberação, +Change Template Code,Código de Modelo de Mudança, +Changing Customer Group for the selected Customer is not allowed.,A alteração do grupo de clientes para o cliente selecionado não é permitida., +Chapter,Capítulo, +Chapter information.,Informações do capítulo., +Charge of type 'Actual' in row {0} cannot be included in Item Rate,Charge do tipo ' real ' na linha {0} não pode ser incluído no item Taxa, +Chargeble,Chargeble, +Charges are updated in Purchase Receipt against each item,Encargos são atualizados em Recibo de compra para cada item, +"Charges will be distributed proportionately based on item qty or amount, as per your selection","Encargos serão distribuídos proporcionalmente com base na qtde de itens ou valor, conforme sua seleção", +Chart of Cost Centers,Plano de Centros de Custo, +Check all,Marcar Todos, +Checkout,Finalizar Compra, +Chemical,Químico, +Cheque,Cheque, +Cheque/Reference No,Nr. de Cheque/referência, +Cheques Required,Cheques Necessários, +Cheques and Deposits incorrectly cleared,Cheques e depósitos apagados incorretamente, +Child Task exists for this Task. You can not delete this Task.,Tarefa infantil existe para esta Tarefa. Você não pode excluir esta Tarefa., +Child nodes can be only created under 'Group' type nodes,"Os Subgrupos só podem ser criados sob os ramos do tipo ""Grupo""", +Child warehouse exists for this warehouse. You can not delete this warehouse.,Existe um armazém secundário para este armazém. Não pode eliminar este armazém., +Circular Reference Error,Erro de Referência Circular, +City,Cidade, +City/Town,Cidade, +Claimed Amount,Montante Reclamado, +Clay,Argila, +Clear filters,Limpar filtros, +Clear values,Limpar valores, +Clearance Date,Data de Liberação, +Clearance Date not mentioned,Apuramento data não mencionada, +Clearance Date updated,Data de Liquidação atualizada, +Client,Cliente, +Client ID,ID do Cliente, +Client Secret,Segredo do Cliente, +Clinical Procedure,Procedimento Clínico, +Clinical Procedure Template,Modelo de Procedimento Clínico, +Close Balance Sheet and book Profit or Loss.,Fechar Balanço e livro ou perda., +Close Loan,Fechar Empréstimo, +Close the POS,Feche o PDV, +Closed,Fechado, +Closed order cannot be cancelled. Unclose to cancel.,ordem fechada não pode ser cancelada. Unclose para cancelar., +Closing (Cr),Fechamento (cr), +Closing (Dr),Fechamento (dr), +Closing (Opening + Total),Fechamento (Abertura + Total), +Closing Account {0} must be of type Liability / Equity,Fechando Conta {0} deve ser do tipo de responsabilidade / Patrimônio Líquido, +Closing Balance,Saldo Final, +Code,Código, +Collapse All,Recolher Todos, +Color,Cor, +Colour,Cor, +Combined invoice portion must equal 100%,A fração da fatura combinada deve ser igual a 100%, +Commercial,Comercial, +Commission,Comissão, +Commission Rate %,Taxa de Comissão %, +Commission on Sales,Comissão Sobre Vendas, +Commission rate cannot be greater than 100,Percentual de comissão não pode ser maior do que 100, +Community Forum,Forum da Comunidade, +Company (not Customer or Supplier) master.,Cadastro da Empresa (não Cliente nem Fornecedor), +Company Abbreviation,Abreviação da Empresa, +Company Abbreviation cannot have more than 5 characters,Abreviação da Empresa não pode ter mais de 5 caracteres, +Company Name,Nome da Empresa, +Company Name cannot be Company,Nome da empresa não pode ser Empresa, +Company currencies of both the companies should match for Inter Company Transactions.,As moedas da empresa de ambas as empresas devem corresponder às transações da empresa., +Company is manadatory for company account,Empresa é mandatório para conta da empresa, +Company name not same,Nome da empresa não o mesmo, +Company {0} does not exist,A Empresa {0} não existe, +Compensatory Off,Saída Compensatória, +Compensatory leave request days not in valid holidays,Dias de solicitação de licença compensatória não em feriados válidos, +Complaint,Queixa, +Completion Date,Data de Conclusão, +Computer,Computador, +Condition,Condição, +Configure,Configurar, +Configure {0},Configure {0}, +Confirmed orders from Customers.,Pedidos confirmados de clientes., +Connect Amazon with ERPNext,Conecte-se à Amazon com o ERPNext, +Connect Shopify with ERPNext,Conecte o Shopify com o ERPNext, +Connect to Quickbooks,Conecte-se a Quickbooks, +Connected to QuickBooks,Conectado Ao Quickbooks, +Connecting to QuickBooks,Conectando-se Ao Quickbooks, +Consultation,Consulta, +Consultations,Consultas, +Consulting,Consultoria, +Consumable,Consumíveis, +Consumed,Consumido, +Consumed Amount,Quantidade Consumida, +Consumed Qty,Qtde Consumida, +Consumer Products,Produtos Para o Consumidor, +Contact,Contato, +Contact Details,Detalhes do Contato, +Contact Number,Telefone Para Contato, +Contact Us,Contate-nos, +Content,Conteúdo, +Content Masters,Mestres de Conteúdo, +Content Type,Tipo de Conteúdo, +Continue Configuration,Continue a Configuração, +Contract,Contrato, +Contract End Date must be greater than Date of Joining,Data de Encerramento do Contrato deve ser maior que Data de Inicio, +Contribution %,Contribuição%, +Contribution Amount,Contribuição Total, +Conversion factor for default Unit of Measure must be 1 in row {0},Fator de conversão de unidade de medida padrão deve ser 1 na linha {0}, +Conversion rate cannot be 0 or 1,A taxa de conversão não pode ser 0 ou 1, +Convert to Group,Converter Em Grupo, +Convert to Non-Group,Converter Para Não-grupo, +Cosmetics,Cosméticos, +Cost Center,Centro de Custos, +Cost Center Number,Número do Centro de Custo, +Cost Center and Budgeting,Centro de Custo e Orçamento, +Cost Center is required in row {0} in Taxes table for type {1},Centro de Custo é necessária na linha {0} no Imposto de mesa para o tipo {1}, +Cost Center with existing transactions can not be converted to group,Centro de custo com as operações existentes não podem ser convertidos em grupo, +Cost Center with existing transactions can not be converted to ledger,Centro de custo com as operações existentes não podem ser convertidos em registro, +Cost Centers,Centros de Custo, +Cost Updated,Custo Atualizado, +Cost as on,Custo Como Em, +Cost of Delivered Items,Custo de Produtos Entregues, +Cost of Goods Sold,Custo Dos Produtos Vendidos, +Cost of Issued Items,Custo Dos Produtos Enviados, +Cost of New Purchase,Custo da Nova Compra, +Cost of Purchased Items,Custo de Produtos Comprados, +Cost of Scrapped Asset,Custo do Ativo Sucateado, +Cost of Sold Asset,Custo do Ativo Vendido, +Cost of various activities,Custo das diferentes actividades, +"Could not create Credit Note automatically, please uncheck 'Issue Credit Note' and submit again",Não foi possível criar uma nota de crédito automaticamente. Desmarque a opção "Emitir nota de crédito" e envie novamente, +Could not generate Secret,Não foi possível gerar Segredo, +Could not retrieve information for {0}.,Não foi possível recuperar informações para {0}., +Could not solve criteria score function for {0}. Make sure the formula is valid.,Não foi possível resolver a função de pontuação dos critérios para {0}. Verifique se a fórmula é válida., +Could not solve weighted score function. Make sure the formula is valid.,Não foi possível resolver a função de pontuação ponderada. Verifique se a fórmula é válida., +Could not submit some Salary Slips,Não foi possível enviar alguns recibos de salário, +"Could not update stock, invoice contains drop shipping item.","Não foi possível atualizar estoque, fatura contém gota artigo do transporte.", +Country wise default Address Templates,Modelos de Endereços Padronizados por País, +Course,Curso, +Course Code: ,Código do Curso:, +Course Enrollment {0} does not exists,O enrollment do curso {0} não existe, +Course Schedule,Agenda do Curso, +Course: ,Curso:, +Cr,Cr, +Create,Criar, +Create BOM,Criar Lista Técnica, +Create Delivery Trip,Criar Viagem de Entrega, +Create Disbursement Entry,Criar Entrada de Desembolso, +Create Employee,Criar Empregado, +Create Employee Records,Criar Registros de Colaboradores, +"Create Employee records to manage leaves, expense claims and payroll","Criar registos de funcionários para gerir faltas, declarações de despesas e folha de salários", +Create Fee Schedule,Criar Tabela de Taxas, +Create Fees,Criar Taxas, +Create Inter Company Journal Entry,Criar Entrada de Diário Entre Empresas, +Create Invoice,Criar Recibo, +Create Invoices,Criar Faturas, +Create Job Card,Criar Cartão de Trabalho, +Create Journal Entry,Criar Entrada de Diário, +Create Lead,Criar Lead, +Create Leads,Criar Leads, +Create Maintenance Visit,Criar Visita de Manutenção, +Create Material Request,Criar Pedido de Material, +Create Multiple,Criar Múltiplo, +Create Opening Sales and Purchase Invoices,Criar Vendas de Abertura e Faturas de Compra, +Create Payment Entries,Criar Entradas de Pagamento, +Create Payment Entry,Criar Entrada de Pagamento, +Create Print Format,Criar Formato de Impressão, +Create Purchase Order,Criar Pedido, +Create Purchase Orders,Criar Pedidos de Compra, +Create Quotation,Criar Cotação, +Create Salary Slip,Criar Folha de Vencimento, +Create Salary Slips,Criar Recibos Salariais, +Create Sales Invoice,Criar Fatura de Vendas, +Create Sales Order,Criar Pedido de Venda, +Create Sales Orders to help you plan your work and deliver on-time,Criar pedidos de vendas para ajudá-lo a planejar seu trabalho e entregar dentro do prazo, +Create Sample Retention Stock Entry,Criar Entrada de Estoque de Retenção de Amostra, +Create Student,Criar Aluno, +Create Student Batch,Criar Lote de Alunos, +Create Student Groups,Criar Grupos de Alunos, +Create Supplier Quotation,Criar Cotação de Fornecedor, +Create Tax Template,Criar Modelo de Imposto, +Create Timesheet,Criar Quadro de Horários, +Create User,Criar Usuário, +Create Users,Criar Usuários, +Create Variant,Criar Variante, +Create Variants,Criar Variantes, +"Create and manage daily, weekly and monthly email digests.","Cria e configura as regras de recebimento de emails, como diário, semanal ou mensal.", +Create customer quotes,Criar orçamentos de clientes, +Create rules to restrict transactions based on values.,Criar regras para restringir operações com base em valores., +Created {0} scorecards for {1} between: ,Criou {0} scorecards para {1} entre:, +Creating Company and Importing Chart of Accounts,Criando Empresa e Importando Plano de Contas, +Creating Fees,Criando Taxas, +Creating Payment Entries......,Criando Entradas de Pagamento......, +Creating Salary Slips...,Criando Slips Salariais..., +Creating student groups,Criando grupos de alunos, +Creating {0} Invoice,Criando Fatura de {0}, +Credit,Crédito, +Credit ({0}),Crédito ({0}), +Credit Account,Conta de Crédito, +Credit Balance,Saldo Credor, +Credit Card,Cartão de Crédito, +Credit Days cannot be a negative number,Days Credit não pode ser um número negativo, +Credit Limit,Limite de Crédito, +Credit Note,Nota de Crédito, +Credit Note Amount,Valor da Nota de Crédito, +Credit Note Issued,Nota de Crédito Emitida, +Credit Note {0} has been created automatically,A nota de crédito {0} foi criada automaticamente, +Credit limit has been crossed for customer {0} ({1}/{2}),O limite de crédito foi cruzado para o cliente {0} ({1} / {2}), +Creditors,Credores, +Criteria weights must add up to 100%,Os pesos dos critérios devem somar até 100%, +Crop Cycle,Ciclo de Colheita, +Crops & Lands,Culturas e Terras, +Currency Exchange must be applicable for Buying or for Selling.,Câmbio deve ser aplicável para compra ou venda., +Currency can not be changed after making entries using some other currency,Moeda não pode ser alterada depois de fazer entradas usando alguma outra moeda, +Currency exchange rate master.,Cadastro de Taxa de Câmbio, +Currency for {0} must be {1},A moeda para {0} deve ser {1}, +Currency is required for Price List {0},É necessário informar a Moeda na Lista de Preço {0}, +Currency of the Closing Account must be {0},Moeda da Conta de encerramento deve ser {0}, +Currency of the price list {0} must be {1} or {2},Moeda da lista de preços {0} deve ser {1} ou {2}, +Currency should be same as Price List Currency: {0},A moeda deve ser a mesma que a Moeda da lista de preços: {0}, +Current,Atual, +Current Assets,Ativo Circulante, +Current BOM and New BOM can not be same,A LDM Atual e a Nova LDM não podem ser as mesmas, +Current Job Openings,Vagas Disponíveis Atualmente, +Current Liabilities,Passivo Circulante, +Current Qty,Qtde Atual, +Current invoice {0} is missing,A fatura atual {0} está faltando, +Custom HTML,Html Personalizado, +Custom?,Personalizado?, +Customer,Cliente, +Customer Addresses And Contacts,Endereços e Contatos do Cliente, +Customer Contact,Contato do Cliente, +Customer Database.,Banco de Dados de Clientes, +Customer Group,Grupo de Clientes, +Customer LPO,LPO do Cliente, +Customer LPO No.,Cliente Número LPO, +Customer Name,Nome do Cliente, +Customer POS Id,ID do PD do Cliente, +Customer Service,Atendimento Ao Cliente, +Customer and Supplier,Clientes e Fornecedores, +Customer is required,O Cliente é obrigatório, +Customer isn't enrolled in any Loyalty Program,O cliente não está inscrito em nenhum programa de fidelidade, +Customer required for 'Customerwise Discount',Necessário para ' Customerwise Discount ' Cliente, +Customer {0} does not belong to project {1},Cliente {0} não pertence ao projeto {1}, +Customer {0} is created.,O cliente {0} foi criado., +Customers in Queue,Clientes na Fila, +Customize Homepage Sections,Personalizar Seções da Página Inicial, +Customizing Forms,Personalização de Formulários, +Daily Project Summary for {0},Resumo Diário do Projeto Para {0}, +Daily Reminders,Lembretes Diários, +Daily Work Summary,Resumo de Trabalho Diário, +Daily Work Summary Group,Grupo de Resumo do Trabalho Diário, +Data Import and Export,Importação e Exportação de Dados, +Data Import and Settings,Importação de Dados, +Database of potential customers.,Banco de dados de clientes potenciais., +Date Format,Formato de Data, +Date Of Retirement must be greater than Date of Joining,Data da aposentadoria deve ser maior que Data de Contratação, +Date is repeated,Data é repetida, +Date of Birth,Data de Nascimento, +Date of Birth cannot be greater than today.,Data de nascimento não pode ser maior do que hoje., +Date of Commencement should be greater than Date of Incorporation,A data de início deve ser maior que a data de incorporação, +Date of Joining,Data da Contratação, +Date of Joining must be greater than Date of Birth,Data de Contratação deve ser maior do que a Data de Nascimento, +Date of Transaction,Data da Transação, +Datetime,Data e Hora, +Day,Dia, +Debit,Débito, +Debit ({0}),Débito ({0}), +Debit A/C Number,Débito a / C Number, +Debit Account,Conta de Débito, +Debit Note,Nota de Débito, +Debit Note Amount,Valor da Nota de Débito, +Debit Note Issued,Nota de Débito Emitida, +Debit To is required,Para Débito é necessária, +Debit and Credit not equal for {0} #{1}. Difference is {2}.,O Débito e Crédito não são iguais para {0} # {1}. a diferença é de {2}., +Debtors,Devedores, +Debtors ({0}),Devedores ({0}), +Declare Lost,Declarar Perdido, +Deduction,Dedução, +Default Activity Cost exists for Activity Type - {0},Existe Atividade Custo Padrão para o Tipo de Atividade - {0}, +Default BOM ({0}) must be active for this item or its template,LDM Padrão ({0}) precisa estar ativo para este item ou o seu modelo, +Default BOM for {0} not found,Não foi encontrado a LDM Padrão para {0}, +Default BOM not found for Item {0} and Project {1},Lista de materiais padrão não encontrada para Item {0} e Projeto {1}, +Default Letter Head,Cabeçalho Padrão, +Default Tax Template,Modelo de Imposto Padrão, +Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,Unidade de medida padrão para item {0} não pode ser alterado diretamente porque você já fez alguma transação (s) com outra Unidade de Medida. Você precisará criar um novo item para usar uma Unidade de Medida padrão diferente., +Default Unit of Measure for Variant '{0}' must be same as in Template '{1}',A unidade de medida padrão para a variante '{0}' deve ser o mesmo que no modelo '{1}', +Default settings for buying transactions.,As configurações padrão para a compra de transações., +Default settings for selling transactions.,Configuração padrão para transações de vendas., +Default tax templates for sales and purchase are created.,Os modelos de imposto padrão para vendas e compra são criados., +Defaults,Padrões, +Defense,Defesa, +Define Project type.,Defina tipo de projeto., +Define budget for a financial year.,Defina orçamento para um ano fiscal., +Define various loan types,Defina vários tipos de empréstimos, +Del,Del, +Delay in payment (Days),Atraso no Pagamento (Dias), +Delete all the Transactions for this Company,Apagar todas as transações para esta empresa, +Deletion is not permitted for country {0},A exclusão não está permitida para o país {0}, +Delivered,Entregue, +Delivered Amount,Quantia Entregue, +Delivered Qty,Qtde Entregue, +Delivered: {0},Entregue: {0}, +Delivery,Entrega, +Delivery Date,Data de Entrega, +Delivery Note,Guia de Remessa, +Delivery Note {0} is not submitted,A Guia de Remessa {0} não foi enviada, +Delivery Note {0} must not be submitted,A Guia de Remessa {0} não deve ser enviada, +Delivery Notes {0} must be cancelled before cancelling this Sales Order,A Guia de Remessa {0} deve ser cancelada antes de cancelar este Pedido de Venda, +Delivery Notes {0} updated,Notas de entrega {0} atualizadas, +Delivery Status,Status da Entrega, +Delivery Trip,Viagem de Entrega, +Delivery warehouse required for stock item {0},Armazém de entrega necessário para item do estoque {0}, +Department,Departamento, +Department Stores,Lojas de Departamento, +Depreciation,Depreciação, +Depreciation Amount,Valor de Depreciação, +Depreciation Amount during the period,Total de Depreciação durante o período, +Depreciation Date,Data da Depreciação, +Depreciation Eliminated due to disposal of assets,A Depreciação foi Eliminada devido à alienação de ativos, +Depreciation Entry,Lançamento de Depreciação, +Depreciation Method,Método de Depreciação, +Depreciation Row {0}: Depreciation Start Date is entered as past date,Linha de depreciação {0}: a data de início da depreciação é entrada como data anterior, +Depreciation Row {0}: Expected value after useful life must be greater than or equal to {1},Linha de depreciação {0}: o valor esperado após a vida útil deve ser maior ou igual a {1}, +Depreciation Row {0}: Next Depreciation Date cannot be before Available-for-use Date,Linha de depreciação {0}: a próxima data de depreciação não pode ser anterior à data disponível para uso, +Depreciation Row {0}: Next Depreciation Date cannot be before Purchase Date,Linha de depreciação {0}: a próxima data de depreciação não pode ser anterior à data de compra, +Designer,Designer, +Detailed Reason,Razão Detalhada, +Details,Detalhes, +Details of Outward Supplies and inward supplies liable to reverse charge,Detalhes de suprimentos externos e suprimentos internos sujeitos a reversão de carga, +Details of the operations carried out.,Os detalhes das operações realizadas., +Diagnosis,Diagnóstico, +Did not find any item called {0},Não havia nenhuma item chamado {0}, +Diff Qty,Dif Qtd, +Difference Account,Conta Diferença, +"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry","Conta diferença deve ser uma conta de tipo ativo / passivo, uma vez que este da reconciliação é uma entrada de Abertura", +Difference Amount,Total da Diferença, +Difference Amount must be zero,O Valor da Diferença deve ser zero, +Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM.,UDM diferente para itens gerará um Peso Líquido (Total ) incorreto. Certifique-se de que o peso líquido de cada item está na mesma UDM., +Direct Expenses,Despesas Diretas, +Direct Income,Receita Direta, +Disable,Desativar, +Disabled template must not be default template,O modelo desativado não pode ser o modelo padrão, +Disburse Loan,Desembolsar Empréstimo, +Disbursed,Desembolsado, +Disc,Disco, +Discharge,Descarga, +Discount,Desconto, +Discount Percentage can be applied either against a Price List or for all Price List.,Percentual de desconto pode ser aplicado contra uma lista de preços ou para todos Lista de Preços., +Discount must be less than 100,Desconto deve ser inferior a 100, +Diseases & Fertilizers,Doenças e Fertilizantes, +Dispatch,Expedição, +Dispatch Notification,Notificação de Despacho, +Dispatch State,Estado de Despacho, +Distance,Distância, +Distribution,Distribuição, +Distributor,Distribuidor, +Dividends Paid,Dividendos Pagos, +Do you really want to restore this scrapped asset?,Você realmente deseja restaurar este ativo descartado?, +Do you really want to scrap this asset?,Você realmente quer se desfazer deste ativo?, +Do you want to notify all the customers by email?,Deseja notificar todos os clientes por e-mail?, +Doc Date,Data do Doc, +Doc Name,Nome do Documento, +Doc Type,Tipo do Documento, +Docs Search,Pesquisa do Documentos, +Document Name,Nome do Documento, +Document Status,Status do Documento, +Document Type,Tipo de Documento, +Domain,Domínio, +Domains,Domínios, +Done,Feito, +Donor,Doador, +Donor Type information.,Informação do tipo de doador., +Donor information.,Informação do doador., +Download JSON,Baixar JSON, +Draft,Rascunho, +Drop Ship,Drop Ship, +Drug,Droga, +Due / Reference Date cannot be after {0},Vencimento / Data de Referência não pode ser depois de {0}, +Due Date cannot be before Posting / Supplier Invoice Date,A data de vencimento não pode ser antes da data da remessa / da fatura do fornecedor, +Due Date is mandatory,A data de vencimento é obrigatória, +Duplicate Entry. Please check Authorization Rule {0},Duplicar entrada. Por favor verifique Regra de Autorização {0}, +Duplicate Serial No entered for Item {0},Duplicar Serial Não entrou para item {0}, +Duplicate customer group found in the cutomer group table,Foi encontrado um grupo de clientes duplicado na tabela de grupo do cliente, +Duplicate entry,Duplicar lançamento, +Duplicate item group found in the item group table,Foi encontrado um grupo item duplicado na tabela de grupo de itens, +Duplicate roll number for student {0},Número de rolo duplicado para o estudante {0}, +Duplicate row {0} with same {1},Linha duplicada {0} com o mesmo {1}, +Duplicate {0} found in the table,Duplicar {0} encontrado na tabela, +Duration in Days,Duração Em Dias, +Duties and Taxes,Impostos e Contribuições, +E-Invoicing Information Missing,Informações de Faturamento Eletrônico Ausentes, +ERPNext Demo,Demo do ERPNext, +ERPNext Settings,Configurações do ERPNext, +Earliest,Mais Antigas, +Earnest Money,Sinal/garantia Em Dinheiro, +Earning,Ganho, +Edit,Editar, +Edit Publishing Details,Editar Detalhes de Publicação, +"Edit in full page for more options like assets, serial nos, batches etc.","Edite em página inteira para obter mais opções, como ativos, números de série, lotes etc.", +Education,Educação, +Either location or employee must be required,Qualquer local ou funcionário deve ser necessário, +Either target qty or target amount is mandatory,Meta de qtde ou valor da meta são obrigatórios, +Either target qty or target amount is mandatory.,Meta de qtde ou valor da meta são obrigatórios., +Electrical,Elétrico, +Electronic Equipments,Equipamentos Eletrônicos, +Electronics,Eletrônica, +Eligible ITC,ITC Elegível, +Email Account,Conta de Email, +Email Address,Endereço de Email, +"Email Address must be unique, already exists for {0}","O ID de Email deve ser único, já existe para {0}", +Email Digest: ,Email de Resumo:, +Email Reminders will be sent to all parties with email contacts,Lembretes de e-mail serão enviados a todas as partes com contatos de e-mail, +Email Sent,Email Enviado, +Email Template,Modelo de Email, +Email not found in default contact,E-mail não encontrado em contato padrão, +Email sent to {0},E-mail enviado para {0}, +Employee,Colaborador, +Employee A/C Number,Número de Funcionário a / C, +Employee Advances,Avanços do Funcionário, +Employee Benefits,Benefícios a Colaboradores, +Employee Grade,Employee Grade, +Employee ID,ID do Empregado, +Employee Lifecycle,Ciclo de Vida do Funcionário, +Employee Name,Nome do Colaborador, +Employee Promotion cannot be submitted before Promotion Date ,A promoção de funcionários não pode ser enviada antes da data da promoção, +Employee Referral,Referência de Funcionário, +Employee Transfer cannot be submitted before Transfer Date ,Transferência de Empregados não pode ser submetida antes da Data de Transferência, +Employee cannot report to himself.,Colaborador não pode denunciar a si mesmo., +Employee relieved on {0} must be set as 'Left',Colaborador dispensado em {0} deve ser definido como 'Desligamento', +Employee {0} already submited an apllication {1} for the payroll period {2},O funcionário {0} já enviou uma aplicação {1} para o período da folha de pagamento {2}, +Employee {0} has already applied for {1} between {2} and {3} : ,O empregado {0} já aplicou {1} entre {2} e {3}:, +Employee {0} has no maximum benefit amount,Empregado {0} não tem valor de benefício máximo, +Employee {0} is not active or does not exist,Colaborador {0} não está ativo ou não existe, +Employee {0} is on Leave on {1},Empregado {0} Está Em Sair Em {1}, +Employee {0} of grade {1} have no default leave policy,Empregado {0} da nota {1} não tem política de licença padrão, +Employee {0} on Half day on {1},Employee {0} no Meio Dia Em {1}, +Enable,Permitir, +Enable / disable currencies.,Ativar / Desativar moedas., +Enabled,Ativado, +"Enabling 'Use for Shopping Cart', as Shopping Cart is enabled and there should be at least one Tax Rule for Shopping Cart","Ao ativar a ""Utilização para Carrinho de Compras"", o Carrinho de Compras ficará ativado e deverá haver pelo menos uma Regra de Impostos para o Carrinho de Compras", +End Date,Data Final, +End Date can not be less than Start Date,Data final não pode ser inferior a data de início, +End Date cannot be before Start Date.,A data de término não pode ser anterior à data de início., +End Year,Ano Final, +End Year cannot be before Start Year,O ano final não pode ser antes do ano de início, +End on,Término Em, +End time cannot be before start time,O horário de término não pode ser antes do horário de início, +Ends On date cannot be before Next Contact Date.,As datas finais não podem ser anteriores à data do contato., +Energy,Energia, +Engineer,Engenheiro, +Enough Parts to Build,Peças Suficientes Para Construir, +Enroll,Matricular, +Enrolling student,estudante de inscrição, +Enrolling students,Inscrição de alunos, +Enter depreciation details,Insira detalhes de depreciação, +Enter the Bank Guarantee Number before submittting.,Digite o número da garantia bancária antes de enviar., +Enter the name of the Beneficiary before submittting.,Digite o nome do beneficiário antes de enviar., +Enter the name of the bank or lending institution before submittting.,Digite o nome do banco ou instituição de empréstimo antes de enviar., +Enter value betweeen {0} and {1},Digite o valor entre {0} e {1}, +Entertainment & Leisure,Entretenimento & Lazer, +Entertainment Expenses,Despesas Com Entretenimento, +Equity,Patrimônio Líquido, +Error Log,Log de Erro, +Error evaluating the criteria formula,Erro ao avaliar a fórmula de critérios, +Error in formula or condition: {0},Erro na fórmula ou condição: {0}, +Error: Not a valid id?,Erro: Não é um ID válido?, +Estimated Cost,Custo Estimado, +Evaluation,Avaliação, +"Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:","Mesmo se houver várias regras de preços com maior prioridade, então seguintes prioridades internas são aplicadas:", +Event,Evento, +Event Location,Local do Evento, +Event Name,Nome do Evento, +Exchange Gain/Loss,Ganho/perda Com Câmbio, +Exchange Rate Revaluation master.,Mestre de Reavaliação da Taxa de Câmbio., +Exchange Rate must be same as {0} {1} ({2}),Taxa de câmbio deve ser o mesmo que {0} {1} ({2}), +Excise Invoice,Guia de Recolhimento de Tributos, +Execution,Execução, +Executive Search,Executive Search, +Expand All,Expandir Todos, +Expected Delivery Date,Data Prevista de Entrega, +Expected Delivery Date should be after Sales Order Date,Data de entrega esperada deve ser após a data da ordem de venda, +Expected End Date,Data Prevista de Término, +Expected Hrs,Horas Esperadas, +Expected Start Date,Data Prevista de Início, +Expense,Despesa, +Expense / Difference account ({0}) must be a 'Profit or Loss' account,Despesa conta / Diferença ({0}) deve ser um 'resultados' conta, +Expense Account,Conta de Despesas, +Expense Claim,Pedido de Reembolso de Despesas, +Expense Claim for Vehicle Log {0},Reembolso de Despesa Para o Log do Veículo {0}, +Expense Claim {0} already exists for the Vehicle Log,O Relatório de Despesas {0} já existe no Registo de Veículo, +Expense Claims,Relatórios de Despesas, +Expense account is mandatory for item {0},Conta de despesa é obrigatória para item {0}, +Expenses,Despesas, +Expenses Included In Asset Valuation,Despesas Incluídas na Avaliação de Imobilizado, +Expenses Included In Valuation,Despesas Incluídas na Avaliação, +Expired Batches,Lotes Expirados, +Expires On,Expira Em, +Expiring On,Expirando Em, +Expiry (In Days),Vencimento (em Dias), +Explore,Explorar, +Export E-Invoices,Exportar Faturas Eletrônicas, +Extra Large,Extra Grande, +Extra Small,Muito Pequeno, +Fail,Falha, +Failed,Falhou, +Failed to create website,Falha ao criar o site, +Failed to install presets,Falha na instalação de predefinições, +Failed to login,Falha ao fazer o login, +Failed to setup company,Falha na configuração da empresa, +Failed to setup defaults,Falha ao configurar os padrões, +Failed to setup post company fixtures,Falha ao configurar dispositivos móveis da empresa postal, +Fax,Fax, +Fee,Taxa, +Fee Created,Fee Created, +Fee Creation Failed,Fee Creation Failed, +Fee Creation Pending,Criação de Taxa Pendente, +Fee Records Created - {0},Registos de Taxas Criados - {0}, +Feedback,Comentários, +Fees,Taxas, +Female,Feminino, +Fetch Data,Buscar Dados, +Fetch Subscription Updates,Buscar Atualizações de Assinatura, +Fetch exploded BOM (including sub-assemblies),Buscar LDM explodida (incluindo sub-conjuntos ), +Fetching records......,Buscando registros......, +Field Name,Nome do Campo, +Fieldname,Nome do Campo, +Fields,Campos, +Fill the form and save it,Preencha o formulário e salve, +Filter Employees By (Optional),Filtre os Funcionários Por (opcional), +"Filter Fields Row #{0}: Fieldname {1} must be of type ""Link"" or ""Table MultiSelect""",Filtrar Campos Linha # {0}: o campo Nome {1} deve ser do tipo "Link" ou "MultiSelecionar Tabela", +Filter Total Zero Qty,Qtd Total de Zero do Filtro, +Finance Book,Livro Contábil, +Financial / accounting year.,Ano Financeiro / Exercício., +Financial Services,Serviços Financeiros, +Financial Statements,Demonstrativos Financeiros, +Financial Year,Ano Financeiro, +Finish,Finalizar, +Finished Good,Bem Acabado, +Finished Good Item Code,Código de Item Acabado, +Finished Goods,Produtos Acabados, +Finished Item {0} must be entered for Manufacture type entry,O Item finalizado {0} deve ser digitado para a o lançamento de tipo de fabricação, +Finished product quantity {0} and For Quantity {1} cannot be different,Quantidade de produto finalizada {0} e para Quantidade {1} não pode ser diferente, +First Name,Nome, +"Fiscal Regime is mandatory, kindly set the fiscal regime in the company {0}","Regime Fiscal é obrigatório, gentilmente definir o regime fiscal na empresa {0}", +Fiscal Year,Exercício Fiscal, +Fiscal Year End Date should be one year after Fiscal Year Start Date,A data final do ano fiscal deve ser de um ano após a data de início do ano fiscal, +Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0},Ano Fiscal Data de Início e Término do Exercício Social Data já estão definidos no ano fiscal de {0}, +Fiscal Year Start Date should be one year earlier than Fiscal Year End Date,A data de início do exercício fiscal deve ser um ano antes da data final do exercício fiscal., +Fiscal Year {0} does not exist,Ano Fiscal {0} não existe, +Fiscal Year {0} is required,Ano Fiscal {0} é necessário, +Fiscal Year {0} not found,O Ano Fiscal de {0} não foi encontrado, +Fixed Asset,Ativo Imobilizado, +Fixed Asset Item must be a non-stock item.,O Item Ativo Imobilizado deve ser um item não inventariado., +Fixed Assets,Ativos Imobilizados, +Following Material Requests have been raised automatically based on Item's re-order level,As seguintes Requisições de Material foram criadas automaticamente com base no nível de reposição do item, +Following accounts might be selected in GST Settings:,As seguintes contas podem ser selecionadas nas Configurações de GST:, +Following course schedules were created,Seguiram os horários dos cursos criados, +Following item {0} is not marked as {1} item. You can enable them as {1} item from its Item master,O item seguinte {0} não está marcado como item {1}. Você pode ativá-los como um item {1} do seu mestre de itens, +Following items {0} are not marked as {1} item. You can enable them as {1} item from its Item master,Os itens seguintes {0} não estão marcados como item {1}. Você pode ativá-los como um item {1} do seu mestre de itens, +Food,Alimentos, +"Food, Beverage & Tobacco","Alimentos, Bebidas e Fumo", +For,Para, +"For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.","Para os itens dos ""Pacote de Produtos"", o Armazém e Nr. de Lote serão considerados a partir da tabela de ""Lista de Empacotamento"". Se o Armazém e o Nr. de Lote forem os mesmos para todos os itens empacotados para qualquer item dum ""Pacote de Produto"", esses valores podem ser inseridos na tabela do Item principal, e os valores serão copiados para a tabela da ""Lista de Empacotamento'"".", +For Employee,Para o Colaborador, +For Quantity (Manufactured Qty) is mandatory,Para Quantidade (qtde fabricada) é obrigatório, +For Supplier,Para Fornecedor, +For Warehouse,Para Armazém, +For Warehouse is required before Submit,Armazém de destino necessário antes de enviar, +"For an item {0}, quantity must be negative number","Para um item {0}, a quantidade deve ser um número negativo", +"For an item {0}, quantity must be positive number","Para um item {0}, a quantidade deve ser um número positivo", +"For job card {0}, you can only make the 'Material Transfer for Manufacture' type stock entry","Para o cartão de trabalho {0}, você só pode fazer a entrada de estoque do tipo ';Transferência de material para produção';", +"For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included","Para linha {0} em {1}. Para incluir {2} na taxa de Item, linhas {3} também devem ser incluídos", +For row {0}: Enter Planned Qty,Para a Linha {0}: Digite a Quantidade Planejada, +"For {0}, only credit accounts can be linked against another debit entry","Por {0}, apenas as contas de crédito pode ser ligado contra outro lançamento de débito", +"For {0}, only debit accounts can be linked against another credit entry","Por {0}, apenas as contas de débito pode ser ligado contra outra entrada crédito", +Forum Activity,Atividade do Fórum, +Free item code is not selected,Código de item livre não selecionado, +Freight and Forwarding Charges,Frete e Encargos de Envio, +Frequency,Frequência, +Friday,Sexta-feira, +From,De, +From Address 1,Do Endereço 1, +From Address 2,Do Endereço 2, +From Currency and To Currency cannot be same,De Moeda e Para Moeda não pode ser o mesmo, +From Date and To Date lie in different Fiscal Year,De data e até a data estão em diferentes anos fiscais, +From Date cannot be greater than To Date,A partir de data não pode ser maior que a Data, +From Date must be before To Date,A Data de deve ser anterior à Data A, +From Date should be within the Fiscal Year. Assuming From Date = {0},A partir de data deve estar dentro do ano fiscal. Assumindo de Date = {0}, +From Date {0} cannot be after employee's relieving Date {1},A partir da data {0} não pode ser após a data de alívio do empregado {1}, +From Date {0} cannot be before employee's joining Date {1},A partir da data {0} não pode ser anterior à data de adesão do funcionário {1}, +From Datetime,A Partir da Data e Hora, +From Delivery Note,De Nota de Entrega, +From Fiscal Year,A Partir do Ano Fiscal, +From GSTIN,De GSTIN, +From Party Name,Do Parceiro, +From Pin Code,Do código PIN, +From Place,Do Lugar, +From Range has to be less than To Range,De Gama tem de ser inferior à gama, +From State,Do Estado, +From Time,Do Horário, +From Time Should Be Less Than To Time,Do Tempo Deve Ser Menor Que o Tempo, +From Time cannot be greater than To Time.,O Tempo de não pode ser após o Tempo Para., +"From a supplier under composition scheme, Exempt and Nil rated","De um fornecedor sob esquema de composição, Isento e Nulo", +From and To dates required,De e datas necessárias, +From date can not be less than employee's joining date,A partir da data não pode ser menor do que a data de ingresso do funcionário, +From value must be less than to value in row {0},Do valor deve ser menor do que o valor na linha {0}, +From {0} | {1} {2},A Partir de {0} | {1} {2}, +Fuel Price,Preço do Combustível, +Fuel Qty,Qtde de Combustível, +Fulfillment,Realização, +Full,Cheio, +Full Name,Nome Completo, +Full-time,Tempo Integral, +Fully Depreciated,Depreciados Totalmente, +Furnitures and Fixtures,Móveis e Utensílios, +"Further accounts can be made under Groups, but entries can be made against non-Groups","Outras contas podem ser feitas em Grupos, mas as entradas podem ser feitas contra os Não-Grupos", +Further cost centers can be made under Groups but entries can be made against non-Groups,Mais centros de custo podem ser feitos em grupos mas as entradas podem ser feitas contra os Não-Grupos, +Further nodes can be only created under 'Group' type nodes,Outros nós só podem ser criados dentro dos nós do tipo 'Grupo', +Future dates not allowed,Datas futuras não permitidas, +GSTIN,GSTIN, +GSTR3B-Form,GSTR3B-Form, +Gain/Loss on Asset Disposal,Ganho/perda no Descarte de Ativo, +Gantt Chart,Gráfico de Gantt, +Gantt chart of all tasks.,Gráfico de Gantt de todas as tarefas., +Gender,Sexo, +General,Geral, +General Ledger,Livro Razão, +Generate Material Requests (MRP) and Work Orders.,Gerar Solicitações de Materiais (mrp) e Ordens de Serviço., +Generate Secret,Gerar Segredo, +Get Details From Declaration,Obter Detalhes da Declaração, +Get Employees,Obter Funcionários, +Get Invocies,Receba Invocies, +Get Invoices,Obter Faturas, +Get Invoices based on Filters,Obter faturas com base em filtros, +Get Items from BOM,Obter itens da LDM, +Get Items from Healthcare Services,Obter itens de serviços de saúde, +Get Items from Prescriptions,Obter itens de prescrições, +Get Items from Product Bundle,Obter Itens do Pacote de Produtos, +Get Suppliers,Obter Fornecedores, +Get Suppliers By,Obter Provedores Por, +Get Updates,Receber Notícias, +Get customers from,Obtenha clientes de, +Get from Patient Encounter,Obter do Encontro do Paciente, +Getting Started,Começando, +GitHub Sync ID,Github Sync ID, +Global settings for all manufacturing processes.,As configurações globais para todos os processos de fabricação., +Go to the Desktop and start using ERPNext,Vá para o ambiente de trabalho e começar a usar ERPNext, +GoCardless SEPA Mandate,Mandato SEPA GoCardless, +GoCardless payment gateway settings,Configurações do gateway de pagamento GoCardless, +Goal and Procedure,Objetivo e Procedimento, +Goals cannot be empty,Objetivos não podem estar em branco, +Goods In Transit,Mercadorias Em Trânsito, +Goods Transferred,Mercadorias Transferidas, +Goods and Services Tax (GST India),Imposto sobre Bens e Serviços (GST India), +Goods are already received against the outward entry {0},As mercadorias já são recebidas contra a entrada de saída {0}, +Government,Governo, +Grand Total,Total Geral, +Grant,Conceder, +Grant Application,Solicitação de Subsídio, +Grant Leaves,Grant Leaves, +Grant information.,Conceda informações., +Grocery,Mercearia, +Gross Pay,Salário Bruto, +Gross Profit,Lucro Bruto, +Gross Profit %,Lucro Bruto %, +Gross Profit / Loss,Lucro / Prejuízo Bruto, +Gross Purchase Amount,Valor Bruto de Compra, +Gross Purchase Amount is mandatory,Valor Bruto de Compra é obrigatório, +Group by Account,Agrupar Por Conta, +Group by Party,Agrupar Por Parceiro, +Group by Voucher,Agrupar Por Comprovante, +Group by Voucher (Consolidated),Grupo Por Vale (consolidado), +Group node warehouse is not allowed to select for transactions,Não é permitido selecionar o subgrupo de armazém para as transações, +Group to Non-Group,Grupo Para Não-grupo, +Group your students in batches,Grupo seus alunos em lotes, +Groups,Grupos, +Guardian1 Email ID,E-mail Guardian1, +Guardian1 Mobile No,Celular Guardian1, +Guardian1 Name,Nome Guardian1, +Guardian2 Email ID,E-mail Guardian2, +Guardian2 Mobile No,Celular Guardian2, +Guardian2 Name,Nome Guardian2, +Guest,Convidado, +HR Manager,Gerente de RH, +HSN,HSN, +HSN/SAC,HSN/SAC, +Half Day,Meio Período, +Half Day Date is mandatory,Meio Dia a data é obrigatória, +Half Day Date should be between From Date and To Date,Metade Data Day deve estar entre de Data e To Date, +Half Day Date should be in between Work From Date and Work End Date,A data de meio dia deve estar entre o trabalho da data e a data de término do trabalho, +Half Yearly,Semestral, +Half day date should be in between from date and to date,A data de meio dia deve estar entre a data e a data, +Half-Yearly,Semestralmente, +Hardware,Ferramentas, +Head of Marketing and Sales,Diretor de Marketing e Vendas, +Health Care,Plano de Saúde, +Healthcare,Serviço de Saúde, +Healthcare (beta),Serviço de Saúde (beta), +Healthcare Practitioner,Praticante de Saúde, +Healthcare Practitioner not available on {0},Profissional de Saúde não disponível em {0}, +Healthcare Practitioner {0} not available on {1},Praticante de Assistência Médica {0} não disponível em {1}, +Healthcare Service Unit,Unidade de Atendimento de Saúde, +Healthcare Service Unit Tree,Árvore da Unidade de Serviços de Saúde, +Healthcare Service Unit Type,Tipo de Unidade de Serviço de Saúde, +Healthcare Services,Serviços de Saúde, +Healthcare Settings,Configurações de Serviço de Saúde, +Hello,Olá, +Help Results for,Resultados da Ajuda Para, +High,Alto, +High Sensitivity,Alta Sensibilidade, +Hold,Segurar, +Hold Invoice,Segurar Fatura, +Holiday,Feriado, +Holiday List,Lista de Feriados, +Hotel Rooms of type {0} are unavailable on {1},Hotel os quartos do tipo {0} estão indisponíveis no {1}, +Hotels,Hotéis, +Hourly,De Hora Em Hora, +Hours,Horas, +House rent paid days overlapping with {0},Aluguel da casa paga dias sobrepostos com {0}, +House rented dates required for exemption calculation,Datas alugadas da casa necessárias para o cálculo da isenção, +House rented dates should be atleast 15 days apart,Datas alugadas da casa devem ser pelo menos 15 dias de intervalo, +How Pricing Rule is applied?,Como regra de preços é aplicada?, +Hub Category,Categoria Hub, +Hub Sync ID,Identificação da Sincronização do Hub, +Human Resource,Recursos Humanos, +Human Resources,Recursos Humanos, +IFSC Code,Código IFSC, +IGST Amount,Valor IGST, +IP Address,Endereço de Ip, +ITC Available (whether in full op part),ITC disponível (seja na parte operacional completa), +ITC Reversed,ITC Invertido, +Identifying Decision Makers,Identificando os Tomadores de Decisão, +"If Auto Opt In is checked, then the customers will be automatically linked with the concerned Loyalty Program (on save)","Se a opção Aceitação automática estiver marcada, os clientes serão automaticamente vinculados ao Programa de fidelidade em questão (quando salvo)", +"If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.","Se várias regras de preços continuam a prevalecer, os usuários são convidados a definir a prioridade manualmente para resolver o conflito.", +"If selected Pricing Rule is made for 'Rate', it will overwrite Price List. Pricing Rule rate is the final rate, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.","Se a Regra de preços selecionada for feita para ';Taxa';, ela substituirá a Lista de preços. a taxa de tarifa de preços é a taxa final, portanto, nenhum desconto adicional deve ser aplicado. Assim, em transações como Ordem de Vendas, Ordem de Compra, etc., será buscado no campo "Taxa", em vez do campo "Taxa de Lista de Preços".", +"If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.","Se forem encontradas duas ou mais Regras de Fixação de Preços baseadas nas condições acima, é aplicada a Prioridade. a Prioridade é um número entre 0 a 20, enquanto que o valor padrão é zero (em branco). Um número maior significa que terá prioridade se houver várias Regras de Fixação de Preços com as mesmas condições.", +"If unlimited expiry for the Loyalty Points, keep the Expiry Duration empty or 0.","Se a expiração for ilimitada para os Pontos de Lealdade, mantenha a Duração de Expiração vazia ou 0.", +"If you have any questions, please get back to us.","Se você tem alguma pergunta, por favor nos contate.", +Ignore Existing Ordered Qty,Ignorar Quantidade Pedida Existente, +Image,Imagem, +Image View,Visualização de Imagem, +Import Data,Importar Dados, +Import Day Book Data,Importar Dados do Livro Diário, +Import Log,Log de Importação, +Import Master Data,Importar Dados Mestre, +Import in Bulk,Importação Em Massa, +Import of goods,Importação de mercadorias, +Import of services,Importação de serviços, +Importing Items and UOMs,Importando Itens e UDMs, +Importing Parties and Addresses,Importando Partes e Endereços, +In Maintenance,Em Manutenção, +In Production,Em Produção, +In Qty,Qtde Entrada, +In Stock Qty,Quantidade no Estoque, +In Stock: ,No Estoque:, +In Value,Valor Entrada, +"In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent","No caso do programa multicamadas, os Clientes serão atribuídos automaticamente ao nível em questão de acordo com o gasto", +Inactive,Inativo, +Incentives,Incentivos, +Include Default Book Entries,Incluir Entradas de Livro Padrão, +Include Exploded Items,Incluir Itens Explodidos, +Include POS Transactions,Incluir Transações PDV, +Include UOM,Incluir UDM, +Included in Gross Profit,Incluído no Lucro Bruto, +Income,Receita, +Income Account,Conta de Receitas, +Income Tax,Imposto de Renda, +Incoming,Entrada, +Incoming Rate,Valor de Entrada, +Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,Número incorreto de General Ledger Entries encontrado. Talvez você tenha selecionado uma conta de errado na transação., +Increment cannot be 0,Incremento não pode ser 0, +Increment for Attribute {0} cannot be 0,Atributo incremento para {0} não pode ser 0, +Indirect Expenses,Despesas Indiretas, +Indirect Income,Receita Indireta, +Individual,Pessoa Física, +Ineligible ITC,ITC Não Elegível, +Initiated,Iniciada, +Inpatient Record,Registro de Internamento, +Insert,Inserir, +Installation Note,Nota de Instalação, +Installation Note {0} has already been submitted,A nota de instalação {0} já foi enviada, +Installation date cannot be before delivery date for Item {0},Data de instalação não pode ser anterior à data de entrega de item {0}, +Installing presets,Instalando predefinições, +Institute Abbreviation,Abreviação do Instituto, +Institute Name,Nome do Instituto, +Instructor,Instrutor, +Insufficient Stock,Estoque Insuficiente, +Insurance Start date should be less than Insurance End date,A data de início da cobertura do seguro deve ser inferior a data de término da cobertura, +Integrated Tax,Imposto Integrado, +Inter-State Supplies,Suprimentos Interestaduais, +Interest Amount,Montante de Juros, +Interests,Juros, +Intern,Estagiário, +Internet Publishing,Publishing Internet, +Intra-State Supplies,Suprimentos Intra-estatais, +Introduction,Introdução, +Invalid Attribute,Atributo Inválido, +Invalid Blanket Order for the selected Customer and Item,Ordem de cobertura inválida para o cliente e item selecionados, +Invalid Company for Inter Company Transaction.,Empresa Inválida Para Transação Entre Empresas., +Invalid GSTIN! A GSTIN must have 15 characters.,GSTIN inválido! Um GSTIN deve ter 15 caracteres., +Invalid GSTIN! First 2 digits of GSTIN should match with State number {0}.,GSTIN inválido! os primeiros 2 dígitos do GSTIN devem corresponder ao número do estado {0}., +Invalid GSTIN! The input you've entered doesn't match the format of GSTIN.,GSTIN inválido! a entrada que você digitou não corresponde ao formato de GSTIN., +Invalid Posting Time,Tempo de Lançamento Inválido, +Invalid attribute {0} {1},Atributo inválido {0} {1}, +Invalid quantity specified for item {0}. Quantity should be greater than 0.,Quantidade inválido especificado para o item {0}. Quantidade deve ser maior do que 0., +Invalid reference {0} {1},Referência inválida {0} {1}, +Invalid {0},Inválido {0}, +Invalid {0} for Inter Company Transaction.,{0} inválido para transação entre empresas., +Invalid {0}: {1},Inválido {0}: {1}, +Inventory,Inventário, +Investment Banking,Investimento Bancário, +Investments,Investimentos, +Invoice,Fatura, +Invoice Created,Fatura Criada, +Invoice Discounting,Desconto de Fatura, +Invoice Patient Registration,Fatura Registro de Pacientes, +Invoice Posting Date,Data do Lançamento da Fatura, +Invoice Type,Tipo de Fatura, +Invoice already created for all billing hours,Fatura já criada para todos os horários de cobrança, +Invoice can't be made for zero billing hour,A fatura não pode ser feita para zero hora de cobrança, +Invoice {0} no longer exists,A fatura {0} não existe mais, +Invoiced,Facturado, +Invoiced Amount,Valor Faturado, +Invoices,Faturas, +Invoices for Costumers.,Faturas Para Clientes., +Inward supplies from ISD,Suprimentos internos da ISD, +Inward supplies liable to reverse charge (other than 1 & 2 above),Suprimentos internos sujeitos a reversão de carga (exceto 1 e 2 acima), +Is Active,É Ativo, +Is Default,É Padrão, +Is Existing Asset,É Ativo Existente, +Is Frozen,Está Congelado, +Is Group,É Grupo, +Issue,Incidente, +Issue Material,Saída de Material, +Issued,Emitido, +Issues,Incidentes, +It is needed to fetch Item Details.,Isto é necessário para buscar detalhes de itens, +Item,Item, +Item 1,Número 1, +Item 2,Número 2, +Item 3,Item 3, +Item 4,Item 4, +Item 5,Item 5, +Item Cart,Item do Carrinho, +Item Code,Código do Item, +Item Code cannot be changed for Serial No.,Código do item não pode ser alterado para o nº de série., +Item Code required at Row No {0},Código do item exigido na Linha Nº {0}, +Item Description,Descrição do Item, +Item Group,Grupo de Itens, +Item Group Tree,Árvore de Grupos do Item, +Item Group not mentioned in item master for item {0},Grupo item não mencionado no mestre de item para item {0}, +Item Name,Nome do Item, +Item Price added for {0} in Price List {1},Item Preço adicionada para {0} na lista de preços {1}, +"Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, UOM, Qty and Dates.","O Preço do Item aparece várias vezes com base na Lista de Preços, Fornecedor / Cliente, Moeda, Item, UOM, Quantidade e Datas.", +Item Price updated for {0} in Price List {1},O Preço do Item foi atualizado para {0} na Lista de Preços {1}, +Item Row {0}: {1} {2} does not exist in above '{1}' table,Linha do Item {0}: {1} {2} não existe na tabela ';{1}'; acima, +Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,Item Imposto Row {0} deve ter em conta tipo de imposto ou de renda ou de despesa ou carregável, +Item Template,Modelo de Item, +Item Variant Settings,Configurações da Variante de Item, +Item Variant {0} already exists with same attributes,Variant item {0} já existe com mesmos atributos, +Item Variants,Variantes Dos Itens, +Item Variants updated,Variantes de item atualizadas, +Item has variants.,Item tem variantes., +Item must be added using 'Get Items from Purchase Receipts' button,"O artigo deve ser adicionado usando ""Obter itens de recibos de compra 'botão", +Item valuation rate is recalculated considering landed cost voucher amount,Taxa de valorização do item é recalculado considerando valor do voucher custo desembarcou, +Item variant {0} exists with same attributes,Variante item {0} existe com os mesmos atributos, +Item {0} does not exist,Item {0} não existe, +Item {0} does not exist in the system or has expired,Item {0} não existe no sistema ou expirou, +Item {0} has already been returned,Item {0} já foi devolvido, +Item {0} has been disabled,Item {0} foi desativado, +Item {0} has reached its end of life on {1},Item {0} chegou ao fim da vida em {1}, +Item {0} ignored since it is not a stock item,Item {0} ignorado uma vez que não é um item de estoque, +"Item {0} is a template, please select one of its variants","Item {0} é um modelo, por favor selecione uma de suas variantes", +Item {0} is cancelled,Item {0} é cancelada, +Item {0} is disabled,Item {0} está desativado, +Item {0} is not a serialized Item,Item {0} não é um item serializado, +Item {0} is not a stock Item,Item {0} não é um item de estoque, +Item {0} is not active or end of life has been reached,Item {0} não está ativo ou fim de vida útil foi atingido, +Item {0} is not setup for Serial Nos. Check Item master,Item {0} não está configurado para nºs de série mestre verifique o cadastro do item, +Item {0} is not setup for Serial Nos. Column must be blank,Item {0} não está configurado para Serial Coluna N º s deve estar em branco, +Item {0} must be a Fixed Asset Item,O Item {0} deve ser um Item de Ativo Imobilizado, +Item {0} must be a Sub-contracted Item,Item {0} deve ser um item do sub- contratados, +Item {0} must be a non-stock item,Item {0} deve ser um item não inventariado, +Item {0} must be a stock Item,Item {0} deve ser um item de estoque, +Item {0} not found,Item {0} não foi encontrado, +Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1},"Item {0} não encontrado em 'matérias-primas fornecidas"" na tabela Pedido de Compra {1}", +Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item).,Item {0}: Qtde pedida {1} não pode ser inferior a qtde mínima de pedido {2} (definido no cadastro do Item)., +Item: {0} does not exist in the system,Item: {0} não existe no sistema, +Items,Itens, +Items Filter,Filtro de Itens, +Items and Pricing,Itens e Preços, +Items for Raw Material Request,Itens Para Solicitação de Matéria-prima, +Job Card,Cartão de Trabalho, +Job Description,Descrição da Vaga, +Job Offer,Oferta de Emprego, +Job card {0} created,Cartão de trabalho {0} criado, +Jobs,Tarefas, +Join,Junte-se, +Journal Entries {0} are un-linked,Lançamentos no Livro Diário {0} são desvinculados, +Journal Entry,Lançamento no Livro Diário, +Journal Entry {0} does not have account {1} or already matched against other voucher,Lançamento no Livro Diário {0} não tem conta {1} ou já conciliado com outro comprovante, +Kanban Board,Painel Kanban, +Key Reports,Relatórios Principais, +LMS Activity,Atividade LMS, +Lab Test,Teste de Laboratório, +Lab Test Report,Relatório de Teste de Laboratório, +Lab Test Sample,Amostra de Teste de Laboratório, +Lab Test Template,Modelo de Teste de Laboratório, +Lab Test UOM,Teste de Laboratório UDM, +Lab Tests and Vital Signs,Testes Laboratoriais e Sinais Vitais, +Lab result datetime cannot be before testing datetime,O tempo da data do resultado do laboratório não pode ser antes de testar a data e hora, +Lab testing datetime cannot be before collection datetime,O tempo de exibição no laboratório não pode ser anterior à data de coleta, +Label,Rótulo, +Laboratory,Laboratório, +Language Name,Nome do Idioma, +Large,Grande, +Last Communication,Último Contato, +Last Communication Date,Data do Último Contato, +Last Name,Sobrenome, +Last Order Amount,Valor do Último Pedido, +Last Order Date,Data do Último Pedido, +Last Purchase Price,Último preço de compra, +Last Purchase Rate,Valor da Última Compra, +Latest,Mais Recentes, +Latest price updated in all BOMs,Preço mais recente atualizado em todas as LDMs, +Lead,Lead, +Lead Count,Contagem de Leads, +Lead Owner,Proprietário do Lead, +Lead Owner cannot be same as the Lead,Proprietário do Lead não pode ser o mesmo que o Lead, +Lead Time Days,Prazo de Entrega (em Dias), +Lead to Quotation,Fazer Um Orçamento, +"Leads help you get business, add all your contacts and more as your leads","Leads ajudam a gerar negócios, adicione todos os seus contatos como Leads", +Learn,Aprender, +Leave Approval Notification,Deixar a Notificação de Aprovação, +Leave Blocked,Licenças Bloqueadas, +Leave Encashment,Pagamento da Saída, +Leave Management,Gestão de Licenças, +Leave Status Notification,Deixar a Notificação de Status, +Leave Type,Tipo de Licença, +Leave Type is madatory,Deixe o tipo é uma coisa louca, +Leave Type {0} cannot be allocated since it is leave without pay,O Tipo de Licença {0} não pode ser atribuído uma vez que é uma licença sem vencimento, +Leave Type {0} cannot be carry-forwarded,Deixe tipo {0} não pode ser encaminhado carry-, +Leave Type {0} is not encashable,Deixe o tipo {0} não é inviolável, +Leave Without Pay,Licença Não Remunerada, +Leave and Attendance,Licenças e Assiduidade, +Leave application {0} already exists against the student {1},Deixe o aplicativo {0} já existir contra o aluno {1}, +"Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Deixe não pode ser alocado antes {0}, como saldo licença já tenha sido no futuro recorde alocação licença encaminhadas-carry {1}", +"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Deixe não pode ser aplicada / cancelada antes {0}, como saldo licença já tenha sido no futuro recorde alocação licença encaminhadas-carry {1}", +Leave of type {0} cannot be longer than {1},Deixar do tipo {0} não pode ser maior que {1}, +Leaves,Sai, +Leaves Allocated Successfully for {0},Folhas Atribuídos Com Sucesso Para {0}, +Leaves has been granted sucessfully,Folhas foi concedido com sucesso, +Leaves must be allocated in multiples of 0.5,Folhas devem ser alocados em múltiplos de 0 5, +Leaves per Year,Folhas Por Ano, +Ledger,Livro Razão, +Legal,Legal, +Legal Expenses,Despesas Legais, +Letter Head,Cabeçalho de Carta, +Letter Heads for print templates.,Cabeçalhos para modelos de impressão., +Level,Nível, +Liability,Passivo, +License,Licença, +Lifecycle,Ciclo de Vida, +Limit,Limite, +Limit Crossed,Limite Ultrapassado, +Link to Material Request,Link Para Solicitação de Material, +List of all share transactions,Lista de todas as transações de compartilhamento, +List of available Shareholders with folio numbers,Lista de accionistas disponíveis com números folio, +Loading Payment System,Sistema de Pagamento de Carregamento, +Loan,Empréstimo, +Loan Amount cannot exceed Maximum Loan Amount of {0},Valor do Empréstimo não pode exceder Máximo Valor do Empréstimo de {0}, +Loan Application,Pedido de Empréstimo, +Loan Management,Gestão de Empréstimos, +Loan Repayment,Pagamento do Empréstimo, +Loan Start Date and Loan Period are mandatory to save the Invoice Discounting,Data de Início do Empréstimo e Período do Empréstimo são obrigatórios para salvar o Desconto da Fatura, +Loans (Liabilities),Empréstimos (passivo), +Loans and Advances (Assets),Empréstimos e Adiantamentos (ativos), +Local,Local, +Log,Registo, +Logs for maintaining sms delivery status,Logs para a manutenção de status de entrega sms, +Lost,Perdido, +Lost Reasons,Razões Perdidas, +Low,Baixo, +Low Sensitivity,Baixa Sensibilidade, +Lower Income,Baixa Renda, +Loyalty Amount,Montante de Fidelidade, +Loyalty Point Entry,Entrada do Ponto de Fidelidade, +Loyalty Points,Pontos de Fidelidade, +"Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned.","Os pontos de fidelidade serão calculados a partir do gasto realizado (via fatura de vendas), com base no fator de cobrança mencionado.", +Loyalty Points: {0},Pontos de Fidelidade: {0}, +Loyalty Program,Programa de Lealdade, +Main,Principal, +Maintenance,Manutenção, +Maintenance Log,Log de Manutenção, +Maintenance Manager,Gerente de Manutenção, +Maintenance Schedule,Programação da Manutenção, +Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',"Programação de manutenção não é gerada para todos os itens. Por favor, clique em ""Gerar Agenda""", +Maintenance Schedule {0} exists against {1},O cronograma de manutenção {0} existe contra {1}, +Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,Programação de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda, +Maintenance Status has to be Cancelled or Completed to Submit,O Status de Manutenção Deve Ser Cancelado Ou Concluído Para Enviar, +Maintenance User,Usuário da Manutenção, +Maintenance Visit,Visita de Manutenção, +Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Visita de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda, +Maintenance start date can not be before delivery date for Serial No {0},Manutenção data de início não pode ser anterior à data de entrega para Serial Não {0}, +Make,Criar, +Make Payment,Criar Pagamento, +Make project from a template.,Criar projeto a partir de um modelo., +Making Stock Entries,Criando Lançamentos no Estoque, +Male,Masculino, +Manage Customer Group Tree.,Gerenciar Grupos de Clientes, +Manage Sales Partners.,Gerenciar Parceiros de Vendas., +Manage Sales Person Tree.,Gerenciar Vendedores, +Manage Territory Tree.,Gerenciar Territórios, +Manage your orders,Gerir seus pedidos, +Management,Gestão, +Manager,Gerente, +Managing Projects,Gerenciamento de Projetos, +Managing Subcontracting,Gerenciando Subcontratação, +Mandatory,Obrigatório, +Mandatory field - Academic Year,Campo obrigatório - ano acadêmico, +Mandatory field - Get Students From,Campo Obrigatório - Obter Alunos De, +Mandatory field - Program,Campo obrigatório - Programa, +Manufacture,Fabricação, +Manufacturer,Fabricante, +Manufacturer Part Number,Número de Peça do Fabricante, +Manufacturing,Fabricação, +Manufacturing Quantity is mandatory,Manufacturing Quantidade é obrigatório, +Mapping,Mapeamento, +Mapping Type,Tipo de Mapeamento, +Mark Absent,Marcar Ausente, +Mark Attendance,Marcar Presença, +Mark Half Day,Marcar Meio Período, +Mark Present,Marcar Presença, +Marketing,Marketing, +Marketing Expenses,Despesas Com Marketing, +Marketplace,Marketplace, +Marketplace Error,Erro do Mercado, +Masters,Cadastros, +Match Payments with Invoices,Conciliação de Pagamentos, +Match non-linked Invoices and Payments.,Combinar Faturas e Pagamentos não relacionados., +Material,Material, +Material Consumption,Consumo de Material, +Material Consumption is not set in Manufacturing Settings.,O consumo de material não está definido em Configurações de fabricação., +Material Receipt,Entrada de Material, +Material Request,Requisição de Material, +Material Request Date,Data da Requisição de Material, +Material Request No,Pedido de Material No, +"Material Request not created, as quantity for Raw Materials already available.","Solicitação de material não criada, como quantidade para matérias-primas já disponíveis.", +Material Request of maximum {0} can be made for Item {1} against Sales Order {2},Requisição de Material de no máximo {0} pode ser feita para item {1} relacionado à ordem de venda {2}, +Material Request to Purchase Order,Requisição de Material Para Pedido de Compra, +Material Request {0} is cancelled or stopped,Requisição de Material {0} é cancelada ou parada, +Material Request {0} submitted.,Solicitação de Material {0} enviada., +Material Transfer,Transferência de Material, +Material Transferred,Material Transferido, +Material to Supplier,Material a Fornecedor, +Max Exemption Amount cannot be greater than maximum exemption amount {0} of Tax Exemption Category {1},O valor máximo de isenção não pode ser maior do que o valor máximo de isenção {0} da categoria de isenção de imposto {1}, +Max benefits should be greater than zero to dispense benefits,Benefícios máximos devem ser maiores que zero para dispensar benefícios, +Max discount allowed for item: {0} is {1}%,Max desconto permitido para o item: {0} é {1}%, +Max: {0},Max: {0}, +Maximum Samples - {0} can be retained for Batch {1} and Item {2}.,Amostras máximas - {0} podem ser mantidas para Batch {1} e Item {2}., +Maximum Samples - {0} have already been retained for Batch {1} and Item {2} in Batch {3}.,Amostras máximas - {0} já foram mantidas para Batch {1} e Item {2} no Batch {3}., +Maximum amount eligible for the component {0} exceeds {1},A quantia máxima elegível para o componente {0} excede {1}, +Maximum benefit amount of component {0} exceeds {1},A quantidade máxima de benefício do componente {0} excede {1}, +Maximum benefit amount of employee {0} exceeds {1},O valor máximo de benefício do empregado {0} excede {1}, +Maximum discount for Item {0} is {1}%,O desconto máximo para o item {0} é de {1}%, +Maximum leave allowed in the leave type {0} is {1},Licença máxima permitida no tipo de licença {0} é {1}, +Medical,Médico, +Medical Code,Código Médico, +Medical Code Standard,Padrão do Código Médico, +Medical Department,Departamento Medico, +Medical Record,Registo Médico, +Medium,Médio, +Meeting,Reunião, +Member Activity,Atividade de Membro, +Member ID,ID do Membro, +Member Name,Nome do Membro, +Member information.,Informações dos Membros., +Membership,Associação, +Membership Details,Detalhes da Associação, +Membership ID,ID de Associação, +Membership Type,Tipo de Membro, +Memebership Details,Detalhes da Associação, +Memebership Type Details,Detalhes do Tipo de Associação, +Merge,Mesclar, +Merge Account,Mesclar Conta, +Merge with Existing Account,Mesclar com conta existente, +"Merging is only possible if following properties are same in both records. Is Group, Root Type, Company","A fusão só é possível se seguintes propriedades são as mesmas em ambos os registros. É Group, tipo de raiz, Company", +Message Examples,Exemplos de Mensagens, +Message Sent,Mensagem Enviada, +Method,Método, +Middle Income,Renda Média, +Middle Name,Nome do Meio, +Middle Name (Optional),Nome do Meio (opcional), +Min Amt can not be greater than Max Amt,Min Amt não pode ser maior que Max Amt, +Min Qty can not be greater than Max Qty,Qtde mínima não pode ser maior do que qtde máxima, +Minimum Lead Age (Days),Tempo de Cadastro Mínimo do Lead (dias), +Miscellaneous Expenses,Despesas Diversas, +Missing Currency Exchange Rates for {0},Faltando Taxas de Câmbio Para {0}, +Missing email template for dispatch. Please set one in Delivery Settings.,Modelo de email ausente para envio. Por favor defina um em Configurações de Entrega., +"Missing value for Password, API Key or Shopify URL","Valor ausente para senha, chave de API ou URL do Shopify", +Mode of Payment,Forma de Pagamento, +Mode of Payments,Modo de Pagamento, +Mode of Transport,Modo de Transporte, +Mode of Transportation,Modo de Transporte, +Mode of payment is required to make a payment,Modo de pagamento é necessário para fazer um pagamento, +Model,Modelo, +Moderate Sensitivity,Sensibilidade Moderada, +Monday,Segunda-feira, +Monthly,Mensal, +Monthly Distribution,Distribuição Mensal, +Monthly Repayment Amount cannot be greater than Loan Amount,Mensal Reembolso Valor não pode ser maior do que o valor do empréstimo, +More,Mais, +More Information,Mais Informações, +More than one selection for {0} not allowed,Mais de uma seleção para {0} não permitida, +More...,Mais..., +Motion Picture & Video,Motion Picture & Video, +Move,Mover, +Move Item,Mover Item, +Multi Currency,Multi Moeda, +Multiple Item prices.,Vários preços do item., +Multiple Loyalty Program found for the Customer. Please select manually.,Programa de fidelidade múltipla encontrado para o cliente. Por favor selecione manualmente., +"Multiple Price Rules exists with same criteria, please resolve conflict by assigning priority. Price Rules: {0}","Várias regras de preços existe com os mesmos critérios, por favor, resolver o conflito através da atribuição de prioridade. Regras Preço: {0}", +Multiple Variants,Variantes Múltiplas, +Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year,Vários anos fiscais existem para a data {0}. Por favor defina empresa no ano fiscal, +Music,Música, +My Account,Minha Conta, +Name error: {0},Nome de erro: {0}, +Name of new Account. Note: Please don't create accounts for Customers and Suppliers,Nome da nova conta. Nota: Por favor não criar contas para Clientes e Fornecedores, +Name or Email is mandatory,Nome ou email é obrigatório, +Nature Of Supplies,Natureza Dos Suprimentos, +Navigating,Navegação, +Needs Analysis,Precisa de Análise, +Negative Quantity is not allowed,Negativo Quantidade não é permitido, +Negative Valuation Rate is not allowed,Taxa de Avaliação negativa não é permitida, +Negotiation/Review,Negociação / Revisão, +Net Asset value as on,Valor Patrimonial Líquido como em, +Net Cash from Financing,Caixa Líquido de Financiamento, +Net Cash from Investing,Caixa Líquido de Investimentos, +Net Cash from Operations,Caixa Líquido de Operações, +Net Change in Accounts Payable,Variação Líquida Em Contas a Pagar, +Net Change in Accounts Receivable,Variação Líquida Em Contas a Receber, +Net Change in Cash,Variação Líquida Em Dinheiro, +Net Change in Equity,Mudança no Patrimônio Líquido, +Net Change in Fixed Asset,Variação Líquida do Ativo Imobilizado, +Net Change in Inventory,Variação Líquida no Inventário, +Net ITC Available(A) - (B),ITC Líquido Disponível (a) - (b), +Net Pay,Pagamento Líquido, +Net Pay cannot be less than 0,A Remuneração Líquida não pode ser inferior a 0, +Net Profit,Lucro Líquido, +Net Salary Amount,Valor do Salário Líquido, +Net Total,Total Líquido, +Net pay cannot be negative,Salário líquido não pode ser negativo, +New Account Name,Nome da Nova Conta, +New Address,Novo Endereço, +New BOM,Nova LDM, +New Batch ID (Optional),Novo ID do Lote (opcional), +New Batch Qty,Nova Quantidade de Lote, +New Company,Nova Empresa, +New Cost Center Name,Novo Centro de Custo Nome, +New Customer Revenue,Receita Com Novos Clientes, +New Customers,Clientes Novos, +New Department,Novo Departamento, +New Employee,Novo Empregado, +New Location,Nova Localização, +New Quality Procedure,Novo Procedimento de Qualidade, +New Sales Invoice,Nova Fatura de Venda, +New Sales Person Name,Nome do Novo Vendedor, +New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt,New Serial Não não pode ter Warehouse. Warehouse deve ser definida pelo Banco de entrada ou Recibo de compra, +New Warehouse Name,Nome do Novo Armazén, +New credit limit is less than current outstanding amount for the customer. Credit limit has to be atleast {0},Novo limite de crédito é inferior ao saldo devedor atual do cliente. o limite de crédito deve ser de pelo menos {0}, +New task,Nova Tarefa, +New {0} pricing rules are created,Novas {0} regras de precificação são criadas, +Newsletters,Newsletters, +Newspaper Publishers,Editor de Newsletter, +Next,Próximo, +Next Contact By cannot be same as the Lead Email Address,Próximo Contato não pode ser o mesmo que o Endereço de Email do Lead, +Next Contact Date cannot be in the past,A Próxima Data de Contato não pode ocorrer no passado, +Next Steps,Próximos Passos, +No Action,Nenhuma Ação, +No Customers yet!,Nenhum cliente ainda!, +No Data,Sem Dados, +No Delivery Note selected for Customer {},Nenhuma nota de entrega selecionada para o cliente {}, +No Employee Found,Nenhum Colaborador Encontrado, +No Item with Barcode {0},Nenhum artigo com código de barras {0}, +No Item with Serial No {0},Nenhum Item com Nº de Série {0}, +No Items available for transfer,Nenhum item disponível para transferência, +No Items selected for transfer,Nenhum item selecionado para transferência, +No Items to pack,Nenhum item para embalar, +No Items with Bill of Materials to Manufacture,Não há itens com Lista de Materiais para Fabricação, +No Items with Bill of Materials.,Nenhum item com lista de materiais., +No Permission,Nenhuma Permissão, +No Remarks,Sem Observações, +No Result to submit,Nenhum resultado para enviar, +No Salary Structure assigned for Employee {0} on given date {1},Nenhuma estrutura salarial atribuída para o empregado {0} em determinada data {1}, +No Staffing Plans found for this Designation,Não foram encontrados planos de pessoal para esta designação, +No Student Groups created.,Não foi criado nenhum grupo de alunos., +No Students in,Sem Alunos Em, +No Tax Withholding data found for the current Fiscal Year.,Nenhum dado de retenção fiscal encontrado para o ano fiscal atual., +No Work Orders created,Nenhuma ordem de serviço criada, +No accounting entries for the following warehouses,Nenhuma entrada de contabilidade para os seguintes armazéns, +No active or default Salary Structure found for employee {0} for the given dates,Não foi encontrada nenhuma Estrutura Salarial padrão ativa para o colaborador {0} ou para as datas indicadas, +No contacts with email IDs found.,Nenhum contato com email encontrado., +No data for this period,Nenhum dado para este período, +No description given,Nenhuma descrição informada, +No employees for the mentioned criteria,Nenhum empregado pelos critérios mencionados, +No gain or loss in the exchange rate,Nenhum ganho ou perda na taxa de câmbio, +No items listed,Nenhum item listado, +No items to be received are overdue,Nenhum item a ser recebido está atrasado, +No material request created,Não foi criada nenhuma solicitação de material, +No more updates,Nenhum update, +No of Interactions,Nº de Interações, +No of Shares,Nº de Ações, +No pending Material Requests found to link for the given items.,Nenhuma solicitação de material pendente encontrada para vincular os itens fornecidos., +No products found,Nenhum produto encontrado, +No products found.,Não foram encontrados produtos., +No record found,Nenhum registro encontrado, +No records found in the Invoice table,Nenhum registro encontrado na tabela de fatura, +No records found in the Payment table,Nenhum registro encontrado na tabela de pagamento, +No replies from,Sem respostas de, +No salary slip found to submit for the above selected criteria OR salary slip already submitted,Nenhum recibo de salário encontrado para enviar para o critério acima selecionado OU recibo de salário já enviado, +No tasks,não há tarefas, +No time sheets,Não há folhas de tempo, +No values,Sem valores, +No {0} found for Inter Company Transactions.,Nenhum {0} encontrado para transações entre empresas., +Non GST Inward Supplies,Suprimentos Internos não GST, +Non Profit,Sem Fins Lucrativos, +Non Profit (beta),Sem Fins Lucrativos (beta), +Non-GST outward supplies,Suprimentos externos não-GST, +Non-Group to Group,Não-grupo Para Grupo, +None,Nenhum, +None of the items have any change in quantity or value.,Nenhum dos itens tiver qualquer mudança na quantidade ou valor., +Nos,Nos, +Not Available,Não Disponível, +Not Marked,Não Marcado, +Not Paid and Not Delivered,Não Pago e Não Entregue, +Not Permitted,Não Permitido, +Not Started,Não Iniciado, +Not active,Inativo, +Not allow to set alternative item for the item {0},Não permite definir item alternativo para o item {0}, +Not allowed to update stock transactions older than {0},Não é permitido atualizar transações com ações mais velho do que {0}, +Not authorized to edit frozen Account {0},Não autorizado para editar conta congelada {0}, +Not authroized since {0} exceeds limits,Não authroized desde {0} excede os limites, +Not permitted for {0},Não permitido para {0}, +"Not permitted, configure Lab Test Template as required","Não permitido, configure o Modelo de teste de laboratório conforme necessário", +Not permitted. Please disable the Service Unit Type,Não é permitido. Por favor desative o tipo de unidade de serviço, +Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),Observação: Devido / Data de referência excede dias de crédito de cliente permitido por {0} dia(s), +Note: Item {0} entered multiple times,Observação: o Item {0} foi inserido mais de uma vez, +Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,Nota: Entrada pagamento não será criado desde 'Cash ou conta bancária ' não foi especificado, +Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0,Nota : o sistema não irá verificar o excesso de entrega e sobre- reserva para item {0} como quantidade ou valor é 0, +Note: There is not enough leave balance for Leave Type {0},Nota: Não é suficiente equilíbrio pela licença Tipo {0}, +Note: This Cost Center is a Group. Cannot make accounting entries against groups.,Nota: Este Centro de Custo é um grupo. Não pode fazer lançamentos contábeis contra grupos., +Note: {0},Observação: {0}, +Notes,Notas, +Nothing is included in gross,Nada está incluído no bruto, +Nothing more to show.,Nada mais para mostrar., +Nothing to change,Nada para mudar, +Notice Period,Período de Aviso Prévio, +Notify Customers via Email,Notificar Clientes Por E-mail, +Number,Número, +Number of Depreciations Booked cannot be greater than Total Number of Depreciations,O Número de Depreciações Reservadas não pode ser maior do que o Número Total de Depreciações, +Number of Interaction,Número de Interações, +Number of Order,Número de Pedidos, +"Number of new Account, it will be included in the account name as a prefix","Número da nova conta, será incluído no nome da conta como um prefixo", +"Number of new Cost Center, it will be included in the cost center name as a prefix","Número do novo centro de custo, ele será incluído no nome do centro de custo como um prefixo", +Number of root accounts cannot be less than 4,Número de contas raiz não pode ser menor que 4, +Odometer,Odômetro, +Office Equipments,Equipamentos de Escritório, +Office Maintenance Expenses,Despesas Com Manutenção de Escritório, +Office Rent,Aluguel do Escritório, +On Hold,Em Espera, +On Net Total,No Total Líquido, +One customer can be part of only single Loyalty Program.,Um cliente pode fazer parte de um único programa de fidelidade., +Online Auctions,Leilões Online, +Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,"Somente pedidos de licença com o status ""Aprovado"" ou ""Rejeitado"" podem ser enviados", +"Only the Student Applicant with the status ""Approved"" will be selected in the table below.",Apenas o Candidato Estudante com o status "Aprovado" será selecionado na tabela abaixo., +Only users with {0} role can register on Marketplace,Somente usuários com função {0} podem se registrar no Marketplace, +Open BOM {0},Abrir LDM {0}, +Open Item {0},Abrir Item {0}, +Open Notifications,Notificações Abertas, +Open Orders,Pedidos Em Aberto, +Open a new ticket,Abra um novo ticket, +Opening,Abertura, +Opening (Cr),Abertura (cr), +Opening (Dr),Abertura (dr), +Opening Accounting Balance,Saldo de Abertura da Conta, +Opening Accumulated Depreciation,Depreciação Acumulada Inicial, +Opening Accumulated Depreciation must be less than equal to {0},A Depreciação Acumulada Inicial deve ser menor ou igual a {0}, +Opening Balance,Saldo Inicial, +Opening Balance Equity,Saldo de Abertura do Patrimônio Líquido, +Opening Date and Closing Date should be within same Fiscal Year,Abertura Data e Data de Fechamento deve estar dentro mesmo ano fiscal, +Opening Date should be before Closing Date,Data de Abertura deve ser antes da Data de Fechamento, +Opening Entry Journal,Jornal de Entrada de Abertura, +Opening Invoice Creation Tool,Ferramenta de Criação de Fatura de Abertura, +Opening Invoice Item,Item de Fatura de Abertura, +Opening Invoices,Abertura de Faturas, +Opening Invoices Summary,Resumo Das Faturas de Abertura, +Opening Qty,Qtde Abertura, +Opening Stock,Abertura de Estoque, +Opening Stock Balance,Saldo de Abertura do Estoque, +Opening Value,Valor de Abertura, +Opening {0} Invoice created,Abertura {0} Fatura criada, +Operation,Operação, +Operation Time must be greater than 0 for Operation {0},Tempo de Operação deve ser maior que 0 para a operação {0}, +"Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Operação {0} mais do que as horas de trabalho disponíveis na estação de trabalho {1}, quebrar a operação em várias operações", +Operations,Operações, +Operations cannot be left blank,As operações não podem ser deixadas em branco, +Opp Count,Nº de Oportunidades, +Opp/Lead %,Oport/Lead %, +Opportunities,Oportunidades, +Opportunities by lead source,Oportunidades por origem do lead, +Opportunity,Oportunidade, +Opportunity Amount,Valor da Oportunidade, +Optional Holiday List not set for leave period {0},Lista de feriados opcional não definida para o período de licença {0}, +"Optional. Sets company's default currency, if not specified.","Opcional. Define moeda padrão da empresa, se não for especificado.", +Optional. This setting will be used to filter in various transactions.,Opcional. Esta configuração será usada para filtrar em várias transações., +Options,Opções, +Order Count,Contagem de Pedidos, +Order Entry,Entrada de Pedido, +Order Value,Valor do Pedido, +Order rescheduled for sync,Pedido reprogramado para sincronização, +Order/Quot %,Pedido / Orçamentos %, +Ordered,Pedido, +Ordered Qty,Qtde Encomendada, +"Ordered Qty: Quantity ordered for purchase, but not received.","Qtd Pedida: Quantidade pedida para compra, mas não recebida.", +Orders,Pedidos, +Orders released for production.,Ordens liberadas para produção., +Organization,Organização, +Organization Name,Nome da Organização, +Other,Outro, +Other Reports,Relatórios Adicionais, +"Other outward supplies(Nil rated,Exempted)","Outras fontes externas (valor nominal nominal, isentos)", +Others,Outros, +Out Qty,Qtde Saída, +Out Value,Valor Saída, +Out of Order,Fora de Serviço, +Outgoing,Saída, +Outstanding,Saldo Devedor, +Outstanding Amount,Valor Devido, +Outstanding Amt,Valor Devido, +Outstanding Cheques and Deposits to clear,Cheques em circulação e depósitos para apagar, +Outstanding for {0} cannot be less than zero ({1}),Excelente para {0} não pode ser inferior a zero ( {1}), +Outward taxable supplies(zero rated),Suprimentos tributáveis externos (classificação zero), +Overdue,Vencido, +Overlap in scoring between {0} and {1},Sobreposição na pontuação entre {0} e {1}, +Overlapping conditions found between:,Condições sobreposição encontradas entre :, +Owner,Proprietário, +PAN,PAN, +POS,PDV, +POS Profile,Perfil do PDV, +POS Profile is required to use Point-of-Sale,Perfil do PDV é necessário para usar o ponto de venda, +POS Profile required to make POS Entry,Perfil do PDV necessário para fazer entrada no PDV, +POS Settings,Configurações do PDV, +Packed quantity must equal quantity for Item {0} in row {1},Embalado quantidade deve ser igual a quantidade de item {0} na linha {1}, +Packing Slip,Lista de Embalagem, +Packing Slip(s) cancelled,Lista(s) de embalagem cancelada(s), +Paid,Pago, +Paid Amount,Valor Pago, +Paid Amount cannot be greater than total negative outstanding amount {0},O valor pago não pode ser superior ao saldo devedor {0}, +Paid amount + Write Off Amount can not be greater than Grand Total,Valor pago + Valor do abatimento não pode ser maior do que o total geral, +Paid and Not Delivered,Pago e Não Entregue, +Parameter,Parâmetro, +Parent Item {0} must not be a Stock Item,Pai item {0} não deve ser um item de Estoque, +Parents Teacher Meeting Attendance,Atendimento À Reunião de Pais de Professores, +Part-time,Meio Expediente, +Partially Depreciated,Parcialmente Depreciados, +Partially Received,Parcialmente Recebido, +Party,Parceiro, +Party Name,Nome do Parceiro, +Party Type,Tipo de Parceiro, +Party Type and Party is mandatory for {0} account,O Tipo de Parceiro e o Parceiro são obrigatórios para a conta {0}, +Party Type is mandatory,É obrigatório colocar o Tipo de Parceiro, +Party is mandatory,Parceiro é obrigatório, +Password,Senha, +Password policy for Salary Slips is not set,A política de senhas para Slips Salariais não está definida, +Past Due Date,Data de Vencimento Passado, +Patient,Paciente, +Patient Appointment,Nomeação do Paciente, +Patient Encounter,Encontro do Paciente, +Patient not found,Paciente não encontrado, +Pay Remaining,Pagar Restante, +Pay {0} {1},Pague {0} {1}, +Payable,A Pagar, +Payable Account,Conta Para Pagamento, +Payable Amount,Valor a Pagar, +Payment,Pagamento, +Payment Cancelled. Please check your GoCardless Account for more details,Pagamento cancelado. Por favor verifique a sua conta GoCardless para mais detalhes, +Payment Confirmation,Confirmação de Pagamento, +Payment Date,Data de Pagamento, +Payment Days,Datas de Pagamento, +Payment Document,Documento de Pagamento, +Payment Due Date,Data de Vencimento, +Payment Entries {0} are un-linked,Os Registos de Pagamento {0} não estão relacionados, +Payment Entry,Pagamentos, +Payment Entry already exists,Pagamento já existe, +Payment Entry has been modified after you pulled it. Please pull it again.,Entrada de pagamento foi modificado depois que você puxou-o. Por favor puxe-o novamente., +Payment Entry is already created,Entrada de pagamento já foi criada, +Payment Failed. Please check your GoCardless Account for more details,Pagamento falhou. Por favor verifique a sua conta GoCardless para mais detalhes, +Payment Gateway,Gateway de Pagamento, +"Payment Gateway Account not created, please create one manually.","Não foi criada uma Conta do Portal de Pagamento, por favor, crie uma manualmente.", +Payment Gateway Name,Nome do Gateway de Pagamento, +Payment Mode,Forma de Pagamento, +Payment Receipt Note,Nota de Recibo de Pagamento, +Payment Request,Pedido de Pagamento, +Payment Request for {0},Pedido de Pagamento Para {0}, +Payment Tems,Tems de Pagamento, +Payment Term,Termo de Pagamento, +Payment Terms,Termos de Pagamento, +Payment Terms Template,Modelo de Termos de Pagamento, +Payment Terms based on conditions,Termos de pagamento com base nas condições, +Payment Type,Tipo de Pagamento, +"Payment Type must be one of Receive, Pay and Internal Transfer","O Tipo de Pagamento deve ser Receber, Pagar ou Transferência Interna", +Payment against {0} {1} cannot be greater than Outstanding Amount {2},O pagamento relacionado {0} {1} não pode ser maior do que o saldo devedor {2}, +Payment of {0} from {1} to {2},Pagamento de {0} de {1} a {2}, +Payment request {0} created,Pedido de pagamento {0} criado, +Payments,Pagamentos, +Payroll,Folha de Pagamento, +Payroll Number,Número da Folha de Pagamento, +Payroll Payable,Folha de Pagamento a Pagar, +Payslip,Holerite, +Pending Activities,Atividades Pendentes, +Pending Amount,Total Pendente, +Pending Leaves,Folhas Pendentes, +Pending Qty,Pendente Qtde, +Pending Quantity,Quantidade Pendente, +Pending Review,Revisão Pendente, +Pending activities for today,Atividades pendentes para hoje, +Pension Funds,Fundos de Pensão, +Percentage Allocation should be equal to 100%,Percentual de alocação deve ser igual a 100%, +Perception Analysis,Análise de Percepção, +Period,Período, +Period Closing Entry,Lançamento de Encerramento do Período, +Period Closing Voucher,Comprovante de Encerramento do Período, +Periodicity,Periodicidade, +Personal Details,Detalhes Pessoais, +Pharmaceutical,Farmacêutico, +Pharmaceuticals,Farmacêuticos, +Physician,Médico, +Piecework,Trabalho Por Peça, +Pincode,Pincode, +Place Of Supply (State/UT),Lugar de Fornecimento (estado / UT), +Place Order,Fazer Pedido, +Plan Name,Nome do Plano, +Plan for maintenance visits.,Plano de visitas de manutenção., +Planned Qty,Qtde Planejada, +"Planned Qty: Quantity, for which, Work Order has been raised, but is pending to be manufactured.","Quantidade planejada: quantidade para a qual a ordem de serviço foi aumentada, mas está pendente de ser fabricada.", +Planning,Planejamento, +Plants and Machineries,Instalações e Maquinários, +Please Set Supplier Group in Buying Settings.,Por Favor Defina o Grupo de Fornecedores Nas Configurações de Compra., +Please add a Temporary Opening account in Chart of Accounts,Adicione uma conta de abertura temporária no plano de contas, +Please add the account to root level Company - ,Por favor adicione a conta ao nível da raiz da empresa -, +Please add the remaining benefits {0} to any of the existing component,Por favor adicione os benefícios restantes {0} para qualquer um dos componentes existentes, +Please check Multi Currency option to allow accounts with other currency,Por favor verifique multi opção de moeda para permitir que contas com outra moeda, +Please click on 'Generate Schedule',"Por favor, clique em ""Gerar Agenda""", +Please click on 'Generate Schedule' to fetch Serial No added for Item {0},"Por favor, clique em ""Gerar Cronograma"" para buscar Serial Sem adição de item {0}", +Please click on 'Generate Schedule' to get schedule,"Por favor, clique em ""Gerar Agenda"" para obter cronograma", +Please confirm once you have completed your training,Confirme uma vez que você tenha completado seu treinamento, +Please create purchase receipt or purchase invoice for the item {0},Por favor crie recibo de compra ou fatura de compra para o item {0}, +Please define grade for Threshold 0%,Por favor defina o grau para o Limiar 0%, +Please enable Applicable on Booking Actual Expenses,Por favor habilite Aplicável na Reserva de Despesas Reais, +Please enable Applicable on Purchase Order and Applicable on Booking Actual Expenses,Por favor habilite Aplicável no Pedido de Compra e Aplicável na Reserva de Despesas Reais, +Please enable default incoming account before creating Daily Work Summary Group,Ative a conta de entrada padrão antes de criar o Grupo de Resumo do Trabalho Diário, +Please enable pop-ups,Por favor habilite os pop-ups, +Please enter 'Is Subcontracted' as Yes or No,"Por favor, digite ' é subcontratado ""como Sim ou Não", +Please enter API Consumer Key,Por favor insira a chave do consumidor da API, +Please enter API Consumer Secret,Por favor insira o segredo do consumidor da API, +Please enter Account for Change Amount,Por favor insira a Conta para o Montante de Alterações, +Please enter Approving Role or Approving User,Por favor indique Função Aprovadora ou Usuário Aprovador, +Please enter Cost Center,Por favor indique Centro de Custo, +Please enter Delivery Date,Digite Data de Entrega, +Please enter Employee Id of this sales person,Digite o ID de Colaborador deste Vendedor, +Please enter Expense Account,Por favor insira Conta Despesa, +Please enter Item Code to get Batch Number,Por favor insira o Código Item para obter número de lote, +Please enter Item Code to get batch no,Por favor insira o Código Item para obter lotes não, +Please enter Item first,Por favor indique primeiro item, +Please enter Maintaince Details first,Por favor indique Maintaince Detalhes primeiro, +Please enter Planned Qty for Item {0} at row {1},Por favor indique a qtde planejada para o item {0} na linha {1}, +Please enter Preferred Contact Email,Por favor indique contato preferencial Email, +Please enter Production Item first,Por favor indique item Produção primeiro, +Please enter Purchase Receipt first,Digite Recibo de compra primeiro, +Please enter Receipt Document,Por favor insira o Documento de Recibo, +Please enter Reference date,Por favor indique data de referência, +Please enter Repayment Periods,Por favor indique períodos de reembolso, +Please enter Reqd by Date,Digite Reqd by Date, +Please enter Woocommerce Server URL,Por favor indique o URL do servidor de Woocommerce, +Please enter Write Off Account,Por favor indique a conta de abatimento, +Please enter atleast 1 invoice in the table,Por favor indique pelo menos uma fatura na tabela, +Please enter company first,Por favor insira primeira empresa, +Please enter company name first,Por favor insira o nome da empresa primeiro, +Please enter default currency in Company Master,Por favor indique moeda padrão ino cadastro da empresa, +Please enter message before sending,Por favor introduza a mensagem antes de enviá-, +Please enter parent cost center,Por favor entre o centro de custo pai, +Please enter quantity for Item {0},Por favor indique a quantidade de item {0}, +Please enter relieving date.,Por favor indique data da liberação., +Please enter repayment Amount,Por favor indique reembolso Valor, +Please enter valid Financial Year Start and End Dates,Por favor indique datas inicial e final válidas do Ano Financeiro, +Please enter valid email address,Por favor insira o endereço de e-mail válido, +Please enter {0} first,Por favor indique {0} primeiro, +Please fill in all the details to generate Assessment Result.,Por favor preencha todos os detalhes para gerar o resultado da avaliação., +Please identify/create Account (Group) for type - {0},Por favor identifique / crie uma conta (grupo) para o tipo - {0}, +Please identify/create Account (Ledger) for type - {0},Por favor identifique / crie uma conta (Ledger) para o tipo - {0}, +Please login as another user to register on Marketplace,Por favor faça login como outro usuário para se registrar no Marketplace, +Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.,Por favor certifique-se de que você realmente quer apagar todas as operações para esta empresa. os seus dados mestre vai permanecer como está. Essa ação não pode ser desfeita., +Please mention Basic and HRA component in Company,Por favor mencione o componente Básico e HRA na Empresa, +Please mention Round Off Account in Company,Por favor mencione completam Conta in Company, +Please mention Round Off Cost Center in Company,Por favor mencione completam centro de custo na empresa, +Please mention no of visits required,O número de visitas é obrigatório, +Please mention the Lead Name in Lead {0},Por favor mencione o Nome do Lead em {0}, +Please pull items from Delivery Note,Por favor puxar itens de entrega Nota, +Please register the SIREN number in the company information file,Registre o número SIREN no arquivo de informações da empresa, +Please remove this Invoice {0} from C-Form {1},Por favor remova esta Invoice {0} a partir de C-Form {1}, +Please save the patient first,Salve primeiro o paciente, +Please save the report again to rebuild or update,Por favor salve o relatório novamente para reconstruir ou atualizar, +"Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row","Por favor, selecione montante atribuído, tipo de fatura e número da fatura em pelo menos uma fileira", +Please select Apply Discount On,Por favor selecione Aplicar Discount On, +Please select BOM against item {0},Selecione BOM em relação ao item {0}, +Please select BOM for Item in Row {0},Por favor selecione LDM para o Item na linha {0}, +Please select BOM in BOM field for Item {0},Por favor selecione a LDM no campo LDM para o Item {0}, +Please select Category first,Por favor selecione a Categoria primeiro, +Please select Charge Type first,Por favor selecione o Tipo de Encargo primeiro, +Please select Company,Por favor selecione Empresa, +Please select Company and Designation,Por favor selecione Empresa e Designação, +Please select Company and Posting Date to getting entries,Por favor selecione Empresa e Data de Lançamento para obter as inscrições, +Please select Company first,Por favor selecione Empresa primeiro, +Please select Completion Date for Completed Asset Maintenance Log,Selecione a Data de conclusão do registro de manutenção de ativos concluídos, +Please select Completion Date for Completed Repair,Selecione a Data de Conclusão para o Reparo Completo, +Please select Course,Por favor selecione Curso, +Please select Drug,Por favor selecione Drug, +Please select Employee,Selecione Empregado, +Please select Existing Company for creating Chart of Accounts,Por favor selecione empresa já existente para a criação de Plano de Contas, +Please select Healthcare Service,Por favor selecione Serviço de Saúde, +"Please select Item where ""Is Stock Item"" is ""No"" and ""Is Sales Item"" is ""Yes"" and there is no other Product Bundle","Por favor, selecione o item em que "é o estoque item" é "Não" e "é o item Vendas" é "Sim" e não há nenhum outro pacote de produtos", +Please select Maintenance Status as Completed or remove Completion Date,Selecione o Status da manutenção como concluído ou remova a Data de conclusão, +Please select Party Type first,Por favor selecione o Tipo de Parceiro primeiro, +Please select Patient,Selecione Paciente, +Please select Patient to get Lab Tests,Selecione Paciente para obter testes laboratoriais, +Please select Posting Date before selecting Party,Por favor selecione data de lançamento antes de selecionar o Parceiro, +Please select Posting Date first,Por favor selecione Data de lançamento primeiro, +Please select Price List,Por favor selecione Lista de Preço, +Please select Program,Selecione o programa, +Please select Qty against item {0},Selecione Qtd. Contra o item {0}, +Please select Sample Retention Warehouse in Stock Settings first,Selecione Almacço de retenção de amostra em Configurações de estoque primeiro, +Please select Start Date and End Date for Item {0},Por favor selecione a Data de início e a Data de Término do Item {0}, +Please select Student Admission which is mandatory for the paid student applicant,Selecione a Admissão de Estudante que é obrigatória para o estudante pago., +Please select a BOM,Selecione uma lista de materiais, +Please select a Batch for Item {0}. Unable to find a single batch that fulfills this requirement,Selecione um lote para o item {0}. Não é possível encontrar um único lote que preenche este requisito, +Please select a Company,Por favor selecione uma empresa, +Please select a batch,Selecione um lote, +Please select a csv file,Por favor selecione um arquivo csv, +Please select a field to edit from numpad,Selecione um campo para editar a partir do numpad, +Please select a table,Selecione uma tabela, +Please select a valid Date,Por favor selecione uma data válida, +Please select a value for {0} quotation_to {1},Por favor selecione um valor para {0} orçamento_para {1}, +Please select a warehouse,Selecione um armazém, +Please select at least one domain.,Selecione pelo menos um domínio., +Please select correct account,Por favor selecione conta correta, +Please select date,Por favor selecione a data, +Please select item code,Por favor selecione o código do item, +Please select month and year,Selecione mês e ano, +Please select prefix first,Por favor selecione o prefixo primeiro, +Please select the Company,Selecione a Empresa, +Please select the Multiple Tier Program type for more than one collection rules.,Por favor selecione o tipo de Programa de Múltiplas Classes para mais de uma regra de coleta., +Please select the assessment group other than 'All Assessment Groups',Selecione o grupo de avaliação diferente de "Todos os grupos de avaliação", +Please select the document type first,Por favor selecione o tipo de documento primeiro, +Please select weekly off day,Por favor selecione dia de folga semanal, +Please select {0},Por favor selecione {0}, +Please select {0} first,Por favor selecione {0} primeiro, +Please set 'Apply Additional Discount On',"Por Favor, Defina "aplicar Desconto Adicional Em ';", +Please set 'Asset Depreciation Cost Center' in Company {0},"Por Favor, Defina "de Ativos Centro de Custo Depreciação ';in Company {0}", +Please set 'Gain/Loss Account on Asset Disposal' in Company {0},"Por Favor, Defina a ""conta de Ganhos/perdas na Eliminação de Ativos"" na Empresa {0}", +Please set Account in Warehouse {0} or Default Inventory Account in Company {1},Por Favor Defina a Conta no Depósito {0} Ou a Conta de Inventário Padrão na Empresa {1}, +Please set B2C Limit in GST Settings.,Defina B2c Limit Em Gst Settings., +Please set Company,Defina Company, +Please set Company filter blank if Group By is 'Company',Defina o filtro de empresa em branco se Group By for ';Company';, +Please set Default Payroll Payable Account in Company {0},Por Favor Definir Payroll Conta a Pagar Padrão In Company {0}, +Please set Depreciation related Accounts in Asset Category {0} or Company {1},Por favor defina as contas relacionadas com depreciação de ativos em Categoria {0} ou Empresa {1}, +Please set Email Address,Por Favor Defina o Endereço de Email, +Please set GST Accounts in GST Settings,Defina as Contas GST Em Configurações GST, +Please set Hotel Room Rate on {},Defina a Tarifa do Quarto do Hotel Em {}, +Please set Number of Depreciations Booked,Por Favor Defina o Número de Depreciações Marcado, +Please set Unrealized Exchange Gain/Loss Account in Company {0},Por Favor Defina a Conta de Ganho / Perda de Moeda Não Realizada na Empresa {0}, +Please set User ID field in an Employee record to set Employee Role,Por favor defina o campo ID do usuário em um registro de empregado para definir Função Funcionário, +Please set a default Holiday List for Employee {0} or Company {1},Por favor defina uma Lista de Feriados padrão para o(a) Colaboador(a) {0} ou para a Empresa {1}, +Please set account in Warehouse {0},Defina conta no Warehouse {0}, +Please set an active menu for Restaurant {0},Defina um menu ativo para o Restaurante {0}, +Please set associated account in Tax Withholding Category {0} against Company {1},Por favor defina a conta associada na Categoria Retenção Fiscal {0} contra a Empresa {1}, +Please set at least one row in the Taxes and Charges Table,Por favor defina pelo menos uma linha na Tabela de Impostos e Taxas, +Please set default Cash or Bank account in Mode of Payment {0},Defina Caixa padrão ou conta bancária no Modo de pagamento {0}, +Please set default account in Salary Component {0},Por favor defina conta padrão no Componente Salarial {0}, +Please set default customer in Restaurant Settings,Defina o cliente padrão em Configurações do restaurante, +Please set default template for Leave Approval Notification in HR Settings.,Por favor defina o modelo padrão para deixar a notificação de aprovação nas configurações de RH., +Please set default template for Leave Status Notification in HR Settings.,Por favor defina o modelo padrão para Notificação de status de saída em Configurações de RH., +Please set default {0} in Company {1},Por favor configure um(a) {0} padrão na empresa {1}, +Please set filter based on Item or Warehouse,Por favor defina o filtro com base em artigo ou Armazém, +Please set leave policy for employee {0} in Employee / Grade record,Por favor defina a política de licença para o funcionário {0} no registro de Empregado / Nota, +Please set recurring after saving,Por favor defina recorrentes depois de salvar, +Please set the Company,Defina a Empresa, +Please set the Customer Address,Por Favor Defina o Endereço do Cliente, +Please set the Date Of Joining for employee {0},Defina a data de início da sessão para o empregado {0}, +Please set the Default Cost Center in {0} company.,Defina o Centro de custo padrão na {0} empresa., +Please set the Email ID for the Student to send the Payment Request,Defina o email para que o Aluno envie a Solicitação de Pagamento, +Please set the Item Code first,Defina primeiro o código do item, +Please set the Payment Schedule,Por Favor Defina o Cronograma de Pagamento, +Please set the series to be used.,Por favor defina a série a ser usada., +Please set {0} for address {1},Por favor defina {0} para o endereço {1}, +Please setup Students under Student Groups,Por favor configure alunos sob grupos de estudantes, +Please share your feedback to the training by clicking on 'Training Feedback' and then 'New',"Por favor, compartilhe seus comentários para o treinamento clicando em ';Feedback de Treinamento'; e depois ';Novo';", +Please specify Company,Por favor especifique Empresa, +Please specify Company to proceed,Por favor especifique a Empresa para prosseguir, +Please specify a valid 'From Case No.',"Por favor, especifique um válido ';De Caso No.';", +Please specify a valid Row ID for row {0} in table {1},Por favor especifique um ID válido para Row linha {0} na tabela {1}, +Please specify at least one attribute in the Attributes table,Especifique pelo menos um atributo na tabela de atributos, +Please specify currency in Company,Por favor especifique moeda in Company, +Please specify either Quantity or Valuation Rate or both,Por favor especifique a quantidade ou Taxa de Valorização ou ambos, +Please specify from/to range,Por favor especifique de / para variar, +Please supply the specified items at the best possible rates,Por favor informe os melhores valores e condições possíveis para os itens especificados, +Please update your status for this training event,Atualize seu status para este evento de treinamento, +Please wait 3 days before resending the reminder.,Aguarde 3 dias antes de reenviar o lembrete., +Point of Sale,Ponto de Vendas, +Point-of-Sale,Ponto de Vendas, +Point-of-Sale Profile,Perfil do Ponto de Vendas, +Portal,Portal, +Portal Settings,Configurações do Portal, +Possible Supplier,Possível Fornecedor, +Postal Expenses,Despesas Postais, +Posting Date,Data da Postagem, +Posting Date cannot be future date,A Data de Postagem não pode ser uma data futura, +Posting Time,Horário da Postagem, +Posting date and posting time is mandatory,Data e horário da postagem são obrigatórios, +Posting timestamp must be after {0},Postando timestamp deve ser posterior a {0}, +Potential opportunities for selling.,Oportunidades potenciais para a venda., +Practitioner Schedule,Agenda do Praticante, +Pre Sales,Pré Venda, +Preference,Preferência, +Prescribed Procedures,Procedimentos Prescritos, +Prescription,Prescrição, +Prescription Dosage,Dosagem de Prescrição, +Prescription Duration,Duração da Prescrição, +Prescriptions,Prescrições, +Present,Presente, +Prev,Anterior, +Preview,Pré-visualização, +Preview Salary Slip,Pré-visualizar Folha de Pagamento, +Previous Financial Year is not closed,O Ano Financeiro Anterior não está fechado, +Price,Preço, +Price List,Lista de Preços, +Price List Currency not selected,Lista de Preço Moeda não selecionado, +Price List Rate,Preço na Lista de Preços, +Price List master.,Cadastro da Lista de Preços., +Price List must be applicable for Buying or Selling,Lista de Preço deve ser aplicável para comprar ou vender, +Price List {0} is disabled or does not exist,Lista de Preços {0} está desativada ou não existe, +Price or product discount slabs are required,As lajes de desconto de preço ou produto são necessárias, +Pricing,Precificação, +Pricing Rule,Regra de Preços, +"Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.","Regra de Preços é o primeiro selecionado com base em ""Aplicar On 'campo, que pode ser Item, item de grupo ou Marca.", +"Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.","Regra de preços é feita para substituir Lista de Preços / define percentual de desconto, com base em alguns critérios.", +Pricing Rule {0} is updated,A regra de precificação {0} é atualizada, +Pricing Rules are further filtered based on quantity.,As regras de tarifação são ainda filtrados com base na quantidade., +Primary Address Details,Detalhes Principais do Endereço, +Primary Contact Details,Detalhes Principais de Contato, +Principal Amount,Valor Principal, +Print Format,Formato de Impressão, +Print IRS 1099 Forms,Imprimir Formulários do Irs 1099, +Print Report Card,Imprimir Boletim, +Print Settings,Configurações de Impressão, +Print and Stationery,Impressão e Artigos de Papelaria, +Print settings updated in respective print format,As definições de impressão estão atualizadas no respectivo formato de impressão, +Print taxes with zero amount,Imprima impostos com montante zero, +Printing and Branding,Impressão e Branding, +Private Equity,Patrimônio Líquido, +Privilege Leave,Privilege Deixar, +Probation,Provação, +Probationary Period,Período Probatório, +Procedure,Procedimento, +Process Day Book Data,Dados do Livro do Dia de Processo, +Process Master Data,Dados Mestre do Processo, +Processing Chart of Accounts and Parties,Processando Plano de Contas e Partes, +Processing Items and UOMs,Processando Itens e UDMs, +Processing Party Addresses,Processando Endereços do Parceiro, +Processing Vouchers,Processando Vouchers, +Procurement,Cotação, +Produced Qty,Qtd Produzido, +Product,Produtos, +Product Bundle,Pacote de Produtos, +Product Search,Pesquisa de Produto, +Production,Produção, +Production Item,Bem de Produção, +Products,Produtos, +Profit and Loss,Lucro e Perdas, +Profit for the year,Lucros para o ano, +Program,Programa, +Program in the Fee Structure and Student Group {0} are different.,O programa na estrutura de tarifas e no grupo de alunos {0} são diferentes., +Program {0} does not exist.,O programa {0} não existe., +Program: ,Programa:, +Progress % for a task cannot be more than 100.,A % de Progresso para uma tarefa não pode ser superior a 100., +Project Collaboration Invitation,Convite Para Colaboração Em Projeto, +Project Id,ID Projeto, +Project Manager,Gerente de Projetos, +Project Name,Nome do Projeto, +Project Start Date,Data de Início do Projeto, +Project Status,Status do Projeto, +Project Summary for {0},Resumo do Projeto Para {0}, +Project Update.,Atualização do Projeto., +Project Value,Valor do Projeto, +Project activity / task.,Atividade / tarefa do projeto., +Project master.,Cadastro de Projeto., +Project-wise data is not available for Quotation,Dados do baseados em projeto não estão disponíveis para Orçamentos, +Projected,Projetado, +Projected Qty,Qtde Projetada, +Projected Quantity Formula,Fórmula de Quantidade Projetada, +Projects,Projetos, +Property,Propriedade, +Property already added,Propriedade já adicionada, +Proposal Writing,Proposta Redação, +Proposal/Price Quote,Proposta / Cotação de Preço, +Prospecting,Prospecção, +Provisional Profit / Loss (Credit),Provisão Lucro / Prejuízo (crédito), +Publications,Publicações, +Publish Items on Website,Publicar Itens no Site, +Published,Publicado, +Publishing,Publishing, +Purchase,Compras, +Purchase Amount,Valor de Compra, +Purchase Date,Data da Compra, +Purchase Invoice,Fatura de Compra, +Purchase Invoice {0} is already submitted,A Fatura de Compra {0} já foi enviada, +Purchase Manager,Gerente de Compras, +Purchase Master Manager,Gerente de Cadastros de Compras, +Purchase Order,Pedido de Compra, +Purchase Order Amount,Valor do Pedido de Compra, +Purchase Order Amount(Company Currency),Valor do Pedido de Compra (moeda da Empresa), +Purchase Order Date,Data do Pedido, +Purchase Order Items not received on time,Ordem de compra Itens não recebidos a tempo, +Purchase Order number required for Item {0},Número do Pedido de Compra necessário para o item {0}, +Purchase Order to Payment,Pedido de Compra Para Pagamento, +Purchase Order {0} is not submitted,Pedido de Compra {0} não é enviado, +Purchase Orders are not allowed for {0} due to a scorecard standing of {1}.,As ordens de compra não são permitidas para {0} devido a um ponto de avaliação de {1}., +Purchase Orders given to Suppliers.,Pedidos de Compra dados a fornecedores., +Purchase Price List,Preço de Compra Lista, +Purchase Receipt,Recibo de Compra, +Purchase Receipt {0} is not submitted,Recibo de compra {0} não é enviado, +Purchase Tax Template,Modelo de Impostos Sobre a Compra, +Purchase User,Usuário de Compra, +Purchase orders help you plan and follow up on your purchases,As ordens de compra ajudá-lo a planejar e acompanhar suas compras, +Purchasing,Requisições, +Purpose must be one of {0},Objetivo deve ser um dos {0}, +Qty,Qtd, +Qty To Manufacture,Qtde Para Fabricar, +Qty Total,Qtd Total, +Qty for {0},Qtd Para {0}, +Qualification,Qualificação, +Quality,Qualidade, +Quality Action,Ação de Qualidade, +Quality Goal.,Objetivo de Qualidade., +Quality Inspection,Inspeção de Qualidade, +Quality Inspection: {0} is not submitted for the item: {1} in row {2},Inspeção de qualidade: {0} não é enviado para o item: {1} na linha {2}, +Quality Management,Gestão da Qualidade, +Quality Meeting,Encontro de Qualidade, +Quality Procedure,Procedimento de Qualidade, +Quality Procedure.,Procedimento de Qualidade, +Quality Review,Revisão de Qualidade, +Quantity,Quantidade, +Quantity for Item {0} must be less than {1},Quantidade de item {0} deve ser inferior a {1}, +Quantity in row {0} ({1}) must be same as manufactured quantity {2},A quantidade na linha {0} ( {1} ) deve ser a mesma que a quantidade fabricada {2}, +Quantity must be less than or equal to {0},A quantidade deve ser inferior ou igual a {0}, +Quantity must not be more than {0},Quantidade não deve ser mais do que {0}, +Quantity required for Item {0} in row {1},Quantidade necessária para item {0} na linha {1}, +Quantity should be greater than 0,Quantidade deve ser maior do que 0, +Quantity to Make,Quantidade a Fazer, +Quantity to Manufacture must be greater than 0.,Quantidade de Fabricação deve ser maior que 0., +Quantity to Produce,Quantidade Para Produzir, +Quantity to Produce can not be less than Zero,Quantidade para produzir não pode ser menor que zero, +Query Options,Opções de Consulta, +Queued for replacing the BOM. It may take a few minutes.,Em fila para substituir a lista de materiais. Pode demorar alguns minutos., +Queued for updating latest price in all Bill of Materials. It may take a few minutes.,Em fila para atualizar o preço mais recente em todas as Marcas de materiais. Pode demorar alguns minutos., +Quick Journal Entry,Lançamento no Livro Diário Rápido, +Quot Count,Contagem de Orçamentos, +Quot/Lead %,Orçamento/Lead %, +Quotation,Orçamento, +Quotation {0} is cancelled,O Orçamento {0} está cancelado, +Quotation {0} not of type {1},O Orçamento {0} não é do tipo {1}, +Quotations,Orçamentos, +"Quotations are proposals, bids you have sent to your customers","Citações são propostas, as propostas que enviou aos seus clientes", +Quotations received from Suppliers.,Orçamentos recebidos de fornecedores., +Quotations: ,Orçamentos:, +Quotes to Leads or Customers.,Cotações Para Leads ou Clientes., +RFQs are not allowed for {0} due to a scorecard standing of {1},RFQs não são permitidos para {0} devido a um ponto de avaliação de {1}, +Range,Alcance, +Rate,Taxa, +Rate:,Taxa:, +Rating,Rating, +Raw Material,Matéria-prima, +Raw Materials,Matérias-primas, +Raw Materials cannot be blank.,Matérias-primas não pode ficar em branco., +Re-open,Abrir Novamente, +Read blog,Leia o blog, +Read the ERPNext Manual,Leia o Manual de Erpnext, +Reading Uploaded File,Lendo Arquivo Carregado, +Real Estate,Imóveis, +Reason For Putting On Hold,Razão Para Colocar Em Espera, +Reason for Hold,Razão Para Segurar, +Reason for hold: ,Razão da espera:, +Receipt,Recibo, +Receipt document must be submitted,O Documento de Recibo precisa ser enviado, +Receivable,A Receber, +Receivable Account,Contas a Receber, +Received,Recebido, +Received On,Recebeu Em, +Received Quantity,Quantidade Recebida, +Received Stock Entries,Entradas de Estoque Recebidas, +Receiver List is empty. Please create Receiver List,Lista Receiver está vazio. Por favor crie Lista Receiver, +Recipients,Destinatários, +Reconcile,Conciliar, +"Record of all communications of type email, phone, chat, visit, etc.","Registo de todas as comunicações do tipo de email, telefone, chat, visita, etc.", +Records,Registos, +Redirect URL,Redirecionar URL, +Ref,Referência, +Ref Date,Ref Data, +Reference,Referência, +Reference #{0} dated {1},Referência #{0} datado de {1}, +Reference Date,Data de Referência, +Reference Doctype must be one of {0},O Tipo de Documento de Referência deve ser um de {0}, +Reference Document,Documento de Referência, +Reference Document Type,Referência Tipo de Documento, +Reference No & Reference Date is required for {0},Número de referência e Referência Data é necessário para {0}, +Reference No and Reference Date is mandatory for Bank transaction,É obrigatório colocar o Nº de Referência e a Data de Referência para as transações bancárias, +Reference No is mandatory if you entered Reference Date,Referência Não é obrigatório se você entrou Data de Referência, +Reference No.,Referência No., +Reference Number,Número de Referência, +Reference Owner,Proprietário de Referência, +Reference Type,Tipo de Referência, +"Reference: {0}, Item Code: {1} and Customer: {2}","Referência: {0}, Código do Item: {1} e Cliente: {2}", +References,Referências, +Refresh Token,Token de Atualização, +Region,Região, +Register,Registo, +Reject,Rejeitar, +Rejected,Rejeitado, +Related,Relacionados, +Relation with Guardian1,Relação com Guardian1, +Relation with Guardian2,Relação com Guardian2, +Release Date,Data de Lançamento, +Reload Linked Analysis,Análise Recarregada, +Remaining,Remanescente, +Remaining Balance,Saldo Remanescente, +Remarks,Observações, +Reminder to update GSTIN Sent,Lembrete para atualizar GSTIN Sent, +Remove item if charges is not applicable to that item,Remover item se as cargas não é aplicável a esse elemento, +Removed items with no change in quantity or value.,Itens removidos sem nenhuma alteração na quantidade ou valor., +Reopen,Reabrir, +Reorder Level,Estoque Mínimo, +Reorder Qty,Qtde Para Reposição, +Repeat Customer Revenue,Receita Clientes Repetidos, +Repeat Customers,Clientes Repetidos, +Replace BOM and update latest price in all BOMs,Substitua a LDM e atualize o preço mais recente em todas as LDMs, +Replied,Respondido, +Replies,Respostas, +Report,Relatório, +Report Builder,Criador de Relatório, +Report Type,Tipo de Relatório, +Report Type is mandatory,Tipo de Relatório é obrigatório, +Reports,Relatórios, +Reqd By Date,Entrega Esperada Em, +Reqd Qty,Reqd Qty, +Request for Quotation,Solicitação de Orçamento, +Request for Quotations,Solicitação de Orçamento, +Request for Raw Materials,Solicitação de Matérias Primas, +Request for purchase.,Solicitação de Compra., +Request for quotation.,Solicitação de orçamento., +Requested Qty,Qtde Solicitada, +"Requested Qty: Quantity requested for purchase, but not ordered.","Aangevraagd Aantal : Aantal op aankoop, maar niet besteld.", +Requesting Site,Solicitando Site, +Requesting payment against {0} {1} for amount {2},Esta é uma solicitação de pagamento relacionada à {0} {1} no valor de {2}, +Requestor,Solicitador, +Required On,Obrigatório On, +Required Qty,Qtde Requerida, +Required Quantity,Quantidade Requerida, +Reschedule,Reprogramar, +Research,Pesquisa, +Research & Development,Pesquisa e Desenvolvimento, +Researcher,Pesquisador, +Resend Payment Email,Reenviar Email de Pagamento, +Reserve Warehouse,Armazém de Reserva, +Reserved Qty,Qtde Reservada, +Reserved Qty for Production,Qtde Reservada Para Produção, +Reserved Qty for Production: Raw materials quantity to make manufacturing items.,Quantidade reservada para produção: quantidade de matérias-primas para fabricar itens de produção., +"Reserved Qty: Quantity ordered for sale, but not delivered.","Gereserveerd Aantal : Aantal besteld te koop , maar niet geleverd.", +Reserved Warehouse is mandatory for Item {0} in Raw Materials supplied,Armazém reservado é obrigatório para o item {0} em matérias-primas fornecidas, +Reserved for manufacturing,Reservado para fabricação, +Reserved for sale,Reservado para venda, +Reserved for sub contracting,Reservado para subcontratação, +Resistant,Resistente, +Resolve error and upload again.,Resolva o erro e faça o upload novamente., +Responsibilities,Responsabilidades, +Rest Of The World,Resto do Mundo, +Restart Subscription,Reinicie a Assinatura, +Restaurant,Restaurante, +Result Date,Data do Resultado, +Result already Submitted,Resultado já enviado, +Resume,Currículo, +Retail,Varejo, +Retail & Wholesale,Varejo e Atacado, +Retail Operations,Operações de Distribuição, +Retained Earnings,Lucros Acumulados, +Retention Stock Entry,Entrada de Estoque de Retenção, +Retention Stock Entry already created or Sample Quantity not provided,Entrada de estoque de retenção já criada ou Quantidade de amostra não fornecida, +Return,Devolução, +Return / Credit Note,Devolução / Nota de Crédito, +Return / Debit Note,Devolução / Nota de Débito, +Returns,Devoluções, +Reverse Journal Entry,Entrada de Diário Reversa, +Review Invitation Sent,Revisão do Convite Enviado, +Review and Action,Revisão e Ação, +Role,Função, +Rooms Booked,Quartos Reservados, +Root Company,Empresa Raiz, +Root Type,Tipo de Raiz, +Root Type is mandatory,Tipo de Raiz é obrigatório, +Root cannot be edited.,Root não pode ser editado., +Root cannot have a parent cost center,Root não pode ter um centro de custos pai, +Round Off,Arredondamento, +Rounded Total,Total Arredondado, +Route,Rota, +Row # {0}: ,Linha # {0}:, +Row # {0}: Batch No must be same as {1} {2},Linha # {0}: Nº do Lote deve ser o mesmo que {1} {2}, +Row # {0}: Cannot return more than {1} for Item {2},Linha # {0}: Não é possível retornar mais de {1} para o item {2}, +Row # {0}: Rate cannot be greater than the rate used in {1} {2},Linha # {0}: a taxa não pode ser maior que a taxa usada em {1} {2}, +Row # {0}: Serial No is mandatory,Linha # {0}: o número de série é obrigatório, +Row # {0}: Serial No {1} does not match with {2} {3},Linha # {0}: Número de ordem {1} não coincide com {2} {3}, +Row #{0} (Payment Table): Amount must be negative,Linha # {0} (Tabela de pagamento): o valor deve ser negativo, +Row #{0} (Payment Table): Amount must be positive,Linha # {0} (Tabela de pagamento): o valor deve ser positivo, +Row #{0}: Account {1} does not belong to company {2},Linha # {0}: Conta {1} não pertence à empresa {2}, +Row #{0}: Allocated Amount cannot be greater than outstanding amount.,Linha # {0}: Allocated Amount não pode ser maior do que o montante pendente., +"Row #{0}: Asset {1} cannot be submitted, it is already {2}","Linha # {0}: Ativo {1} não pode ser enviado, já é {2}", +Row #{0}: Cannot set Rate if amount is greater than billed amount for Item {1}.,Linha # {0}: Não é possível definir Taxa se o valor for maior do que o valor faturado do Item {1}., +Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Linha #{0}: a Data de Liquidação {1} não pode ser anterior à Data do Cheque {2}, +Row #{0}: Duplicate entry in References {1} {2},Linha # {0}: entrada duplicada em referências {1} {2}, +Row #{0}: Expected Delivery Date cannot be before Purchase Order Date,Linha # {0}: a data de entrega prevista não pode ser anterior à data da ordem de compra, +Row #{0}: Item added,Linha # {0}: Item adicionado, +Row #{0}: Journal Entry {1} does not have account {2} or already matched against another voucher,Linha # {0}: o Lançamento Contabilístico {1} não tem uma conta {2} ou está relacionado a outro voucher, +Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Linha # {0}: Não é permitido mudar de fornecedor quando o Pedido de Compra já existe, +Row #{0}: Please set reorder quantity,Linha # {0}: Por favor defina a quantidade de reposição, +Row #{0}: Please specify Serial No for Item {1},Linha # {0}: Favor especificar Sem Serial para item {1}, +Row #{0}: Qty increased by 1,Linha # {0}: Quantidade aumentada em 1, +Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ,Linha # {0}: o Valor deve ser o mesmo da {1}: {2} ({3} / {4}), +Row #{0}: Reference Document Type must be one of Expense Claim or Journal Entry,Linha # {0}: o tipo de documento de referência deve ser um pedido de despesa ou entrada de diário, +"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry","Linha #{0}: o Tipo de Documento de Referência deve ser um Pedido de Compra, uma Nota Fiscal de Compra ou um Lançamento Contábil", +Row #{0}: Rejected Qty can not be entered in Purchase Return,Linha # {0}: Qtde rejeitada não pode ser lançada na devolução da compra, +Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Linha # {0}: Armazém Rejeitado é obrigatório para o item rejeitado {1}, +Row #{0}: Reqd by Date cannot be before Transaction Date,Linha # {0}: Reqd por data não pode ser antes da data da transação, +Row #{0}: Set Supplier for item {1},Linha # {0}: Defina o fornecedor para o item {1}, +Row #{0}: Status must be {1} for Invoice Discounting {2},Linha # {0}: o status deve ser {1} para desconto na fatura {2}, +"Row #{0}: The batch {1} has only {2} qty. Please select another batch which has {3} qty available or split the row into multiple rows, to deliver/issue from multiple batches","Linha # {0}: o lote {1} tem apenas {2} qty. Selecione outro lote com {3} qty disponível ou dividido a linha em várias linhas, para entregar / emitir de vários lotes", +Row #{0}: Timings conflicts with row {1},Linha # {0}: conflitos Timings com linha {1}, +Row #{0}: {1} can not be negative for item {2},Linha # {0}: {1} não pode ser negativo para o item {2}, +Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},Linha {0}: Valor não pode ser superior ao valor pendente relacionado ao Reembolso de Despesas {1}. o valor pendente é {2}, +Row {0} : Operation is required against the raw material item {1},Linha {0}: a operação é necessária em relação ao item de matéria-prima {1}, +Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2},Linha {0} # o valor alocado {1} não pode ser maior do que a quantidade não reclamada {2}, +Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3},Linha {0} # Item {1} não pode ser transferido mais do que {2} contra a ordem de compra {3}, +Row {0}# Paid Amount cannot be greater than requested advance amount,Linha {0} # Valor pago não pode ser maior do que o montante antecipado solicitado, +Row {0}: Activity Type is mandatory.,Linha {0}: É obrigatório colocar o Tipo de Atividade., +Row {0}: Advance against Customer must be credit,Linha {0}: Avanço contra o Cliente deve estar de crédito, +Row {0}: Advance against Supplier must be debit,Linha {0}: Adiantamento relacionado com o fornecedor deve ser um débito, +Row {0}: Allocated amount {1} must be less than or equals to Payment Entry amount {2},Linha {0}: o montante atribuído {1} deve ser menor ou igual ao montante de Registo de Pagamento {2}, +Row {0}: Allocated amount {1} must be less than or equals to invoice outstanding amount {2},Linha {0}: Valor alocado {1} deve ser menor ou igual ao saldo devedor {2} da nota, +Row {0}: An Reorder entry already exists for this warehouse {1},Linha {0}: Uma entrada de reposição já existe para este armazém {1}, +Row {0}: Bill of Materials not found for the Item {1},Linha {0}: Lista de MAteriais não encontrada para o item {1}, +Row {0}: Conversion Factor is mandatory,Linha {0}: Fator de Conversão é obrigatório, +Row {0}: Cost center is required for an item {1},Linha {0}: o centro de custo é necessário para um item {1}, +Row {0}: Credit entry can not be linked with a {1},Linha {0}: Lançamento de crédito não pode ser relacionado a uma {1}, +Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Linha {0}: Moeda da LDM # {1} deve ser igual à moeda selecionada {2}, +Row {0}: Debit entry can not be linked with a {1},Linha {0}: Lançamento de débito não pode ser relacionado a uma {1}, +Row {0}: Depreciation Start Date is required,Linha {0}: Data de Início da Depreciação é obrigatória, +Row {0}: Enter location for the asset item {1},Linha {0}: inserir local para o item do ativo {1}, +Row {0}: Exchange Rate is mandatory,Linha {0}: Taxa de Câmbio é obrigatória, +Row {0}: Expected Value After Useful Life must be less than Gross Purchase Amount,Linha {0}: o valor esperado após a vida útil deve ser menor que o valor da compra bruta, +Row {0}: From Time and To Time is mandatory.,Linha {0}: É obrigatório colocar a Periodicidade., +Row {0}: From Time and To Time of {1} is overlapping with {2},Linha {0}: a Periodicidade de {1} está a sobrepor-se com {2}, +Row {0}: From time must be less than to time,Linha {0}: do tempo deve ser menor que a hora, +Row {0}: Hours value must be greater than zero.,Linha {0}: Horas deve ser um valor maior que zero, +Row {0}: Invalid reference {1},Linha {0}: referência inválida {1}, +Row {0}: Party / Account does not match with {1} / {2} in {3} {4},Linha {0}: Parceiro / Conta não coincidem com {1} / {2} em {3} {4}, +Row {0}: Party Type and Party is required for Receivable / Payable account {1},Linha {0}: Tipo de Parceiro e Parceiro são necessários para receber / pagar contas {1}, +Row {0}: Payment against Sales/Purchase Order should always be marked as advance,Linha {0}: o pagamento relacionado a Pedidos de Compra/Venda deve ser sempre marcado como adiantamento, +Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,Linha {0}: Por favor selecione 'É Adiantamento' se este é um lançamento de adiantamento relacionado à conta {1}., +Row {0}: Please set at Tax Exemption Reason in Sales Taxes and Charges,Linha {0}: Por Favor Defina o Motivo da Isenção de Impostos Em Impostos e Taxas de Vendas, +Row {0}: Please set the Mode of Payment in Payment Schedule,Linha {0}: Por Favor Defina o Modo de Pagamento na Programação de Pagamento, +Row {0}: Please set the correct code on Mode of Payment {1},Linha {0}: Por favor defina o código correto em Modo de pagamento {1}, +Row {0}: Qty is mandatory,Linha {0}: Qtde é obrigatória, +Row {0}: Quality Inspection rejected for item {1},Linha {0}: inspeção de qualidade rejeitada para o item {1}, +Row {0}: UOM Conversion Factor is mandatory,Linha {0}: Fator de Conversão da Unidade de Medida é obrigatório, +Row {0}: select the workstation against the operation {1},Linha {0}: selecione a estação de trabalho contra a operação {1}, +Row {0}: {1} Serial numbers required for Item {2}. You have provided {3}.,Linha {0}: {1} Números de série necessários para o Item {2}. Você forneceu {3}., +Row {0}: {1} must be greater than 0,Linha {0}: {1} deve ser maior que 0, +Row {0}: {1} {2} does not match with {3},Linha {0}: {1} {2} não corresponde com {3}, +Row {0}:Start Date must be before End Date,Linha {0}: Data de início deve ser anterior a data de término, +Rows with duplicate due dates in other rows were found: {0},Linhas com datas de vencimento duplicadas em outras linhas foram encontradas: {0}, +Rules for adding shipping costs.,Regras para adicionar os custos de envio., +Rules for applying pricing and discount.,Regras para aplicação de preços e de desconto., +S.O. No.,Número da Ordem de Venda, +SGST Amount,Quantidade de SGST, +SO Qty,Qtde na OV, +Safety Stock,Estoque de Segurança, +Salary,Salário, +Salary Slip ID,ID da Folha de Pagamento, +Salary Slip of employee {0} already created for this period,Contracheque do colaborador {0} já criado para este período, +Salary Slip of employee {0} already created for time sheet {1},Contracheque do colaborador {0} já criado para o registro de tempo {1}, +Salary Slip submitted for period from {0} to {1},Salário Slip enviado para o período de {0} a {1}, +Salary Structure Assignment for Employee already exists,Atribuição de estrutura salarial para empregado já existe, +Salary Structure Missing,Estrutura Salarial Ausente, +Salary Structure must be submitted before submission of Tax Ememption Declaration,Estrutura Salarial deve ser submetida antes da apresentação da Declaração de Emissão Fiscal, +Salary Structure not found for employee {0} and date {1},Estrutura Salarial não encontrada para o empregado {0} e data {1}, +Salary Structure should have flexible benefit component(s) to dispense benefit amount,Estrutura Salarial deve ter componente (s) de benefício flexível para dispensar o valor do benefício, +"Salary already processed for period between {0} and {1}, Leave application period cannot be between this date range.","O salário já foi processado para período entre {0} e {1}, o período de aplicação da Licença não pode estar entre este intervalo de datas.", +Sales,Vendas, +Sales Account,Conta de Vendas, +Sales Expenses,Despesas Com Vendas, +Sales Funnel,Funil de Vendas, +Sales Invoice,Fatura de Venda, +Sales Invoice {0} has already been submitted,A Fatura de Venda {0} já foi enviada, +Sales Invoice {0} must be cancelled before cancelling this Sales Order,A Fatura de Venda {0} deve ser cancelada antes de cancelar este Pedido de Venda, +Sales Manager,Gerente de Vendas, +Sales Master Manager,Gerente de Cadastros de Vendas, +Sales Order,Pedido de Venda, +Sales Order Item,Item do Pedido de Venda, +Sales Order required for Item {0},Pedido de Venda necessário para o item {0}, +Sales Order to Payment,Pedido de Venda Para Pagamento, +Sales Order {0} is not submitted,Pedido de Venda {0} não foi enviado, +Sales Order {0} is not valid,Pedido de Venda {0} não é válido, +Sales Order {0} is {1},Pedido de Venda {0} É {1}, +Sales Orders,Pedidos de Venda, +Sales Partner,Parceiro de Vendas, +Sales Pipeline,Pipeline de Vendas, +Sales Price List,Lista de Preço de Venda, +Sales Return,Devolução de Vendas, +Sales Summary,Resumo de Vendas, +Sales Tax Template,Modelo de Impostos Sobre Vendas, +Sales Team,Equipe de Vendas, +Sales User,Usuário de Vendas, +Sales and Returns,Vendas e Devoluções, +Sales campaigns.,Campanhas de vendas., +Sales orders are not available for production,Pedidos de vendas não estão disponíveis para produção, +Salutation,Saudação, +Same Company is entered more than once,Mesma empresa está inscrita mais de uma vez, +Same item cannot be entered multiple times.,Mesmo item não pode ser inserido várias vezes., +Same supplier has been entered multiple times,Mesmo fornecedor foi inserido várias vezes, +Sample,Amostra, +Sample Collection,Coleção de Amostras, +Sample quantity {0} cannot be more than received quantity {1},A quantidade de amostra {0} não pode ser superior à quantidade recebida {1}, +Sanctioned,Liberada, +Sanctioned Amount,Valor Liberado, +Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Montante Liberado não pode ser maior do que no Pedido de Reembolso na linha {0}., +Sand,Areia, +Saturday,Sábado, +Saved,Salvo, +Saving {0},Salvando {0}, +Scan Barcode,Scan Barcode, +Schedule,Agendar, +Schedule Admission,Agendar Admissão, +Schedule Course,Calendário de Cursos, +Schedule Date,Data Agendada, +Schedule Discharge,Descarga Horária, +Scheduled,Agendado, +Scheduled Upto,Programado Até, +"Schedules for {0} overlaps, do you want to proceed after skiping overlaped slots ?","Programações para sobreposições {0}, você deseja prosseguir após ignorar os slots sobrepostos?", +Score cannot be greater than Maximum Score,Pontuação não pode ser maior do que pontuação máxima, +Score must be less than or equal to 5,Pontuação deve ser inferior ou igual a 5, +Scorecards,Scorecards, +Scrapped,Sucateada, +Search,Pesquisar, +Search Results,Procurar Resultados, +Search Sub Assemblies,Pesquisa Subconjuntos, +"Search by item code, serial number, batch no or barcode","Pesquisa por código de item, número de série, número de lote ou código de barras", +"Seasonality for setting budgets, targets etc.","Sazonalidade para definição de orçamentos, metas etc.", +Secret Key,Chave Secreta, +Secretary,Secretário, +Section Code,Código da Seção, +Secured Loans,Empréstimos Garantidos, +Securities & Commodity Exchanges,Valores Mobiliários e Bolsas de Mercadorias, +Securities and Deposits,Títulos e Depósitos, +See All Articles,Veja Todos os Artigos, +See all open tickets,Veja todos os ingressos abertos, +See past orders,Veja pedidos anteriores, +See past quotations,Veja citações passadas, +Select,Selecionar, +Select Alternate Item,Selecionar Item Alternativo, +Select Attribute Values,Selecione os Valores do Atributo, +Select BOM,Selecionar LDM, +Select BOM and Qty for Production,Selecionar LDM e Quantidade Para Produção, +"Select BOM, Qty and For Warehouse","Selecione Bom, Quantidade e Para Armazém", +Select Batch,Selecione Lote, +Select Batch Numbers,Selecione Números de Lote, +Select Brand...,Selecione a Marca..., +Select Company,Selecione Empresa, +Select Company...,Selecione a Empresa..., +Select Customer,Selecione o Cliente, +Select Days,Selecione Dias, +Select Default Supplier,Selecione o Fornecedor Padrão, +Select DocType,Selecione DocType, +Select Fiscal Year...,Selecione o Ano Fiscal..., +Select Item (optional),Selecione Item (opcional), +Select Items based on Delivery Date,Selecione itens com base na data de entrega, +Select Items to Manufacture,Selecionar Itens Para Produzir, +Select Loyalty Program,Selecione o Programa de Fidelidade, +Select Patient,Selecione Paciente, +Select Possible Supplier,Selecione Possível Fornecedor, +Select Property,Selecione a Propriedade, +Select Quantity,Selecionar Quantidade, +Select Serial Numbers,Selecione Números de Série, +Select Target Warehouse,Selecionar Depósito de Destino, +Select Warehouse...,Selecione Armazém..., +Select an account to print in account currency,Selecione uma conta para imprimir na moeda da conta, +Select an employee to get the employee advance.,Selecione um funcionário para obter o adiantamento do funcionário., +Select at least one value from each of the attributes.,Selecione pelo menos um valor de cada um dos atributos., +Select change amount account,Selecione a conta de troco, +Select company first,Selecione a empresa primeiro, +Select students manually for the Activity based Group,Selecionar os alunos manualmente para o grupo baseado em atividade, +Select the customer or supplier.,Selecione o cliente ou fornecedor., +Select the nature of your business.,Selecione a natureza do seu negócio., +Select the program first,Selecione primeiro o programa, +Select to add Serial Number.,Selecione Para Adicionar o Número de Série., +Select your Domains,Selecione seus domínios, +Selected Price List should have buying and selling fields checked.,A Lista de Preços Selecionada deve ter campos de compra e venda verificados., +Sell,Vender, +Selling,Vendas, +Selling Amount,Valor de Venda, +Selling Price List,Lista de Preços de Venda, +Selling Rate,Taxa de Vendas, +"Selling must be checked, if Applicable For is selected as {0}","Venda deve ser verificada, se for caso disso for selecionado como {0}", +Send Grant Review Email,Enviar o E-mail de Revisão de Concessão, +Send Now,Enviar Agora, +Send SMS,Envie SMS, +Send mass SMS to your contacts,Enviar SMS em massa para seus contatos, +Sensitivity,Sensibilidade, +Sent,Enviado, +Serial No and Batch,Número de Série e Lote, +Serial No is mandatory for Item {0},Número de séries é obrigatório para item {0}, +Serial No {0} does not belong to Batch {1},O número de série {0} não pertence ao Lote {1}, +Serial No {0} does not belong to Delivery Note {1},Serial Não {0} não pertence a entrega Nota {1}, +Serial No {0} does not belong to Item {1},Serial Não {0} não pertence ao item {1}, +Serial No {0} does not belong to Warehouse {1},Serial Não {0} não pertence ao Armazém {1}, +Serial No {0} does not belong to any Warehouse,O Nº de Série {0} não pertence a nenhum Armazén, +Serial No {0} does not exist,Nº de Série {0} não existe, +Serial No {0} has already been received,Nº de Série {0} já foi recebido, +Serial No {0} is under maintenance contract upto {1},Nº de Série {0} está sob contrato de manutenção até {1}, +Serial No {0} is under warranty upto {1},Nº de Série {0} está na garantia até {1}, +Serial No {0} not found,Serial no {0} não foi encontrado, +Serial No {0} not in stock,Nº de Série {0} esgotado, +Serial No {0} quantity {1} cannot be a fraction,Serial Não {0} {1} quantidade não pode ser uma fração, +Serial Nos Required for Serialized Item {0},Nº de Série Obrigatório Para o Item Serializado {0}, +Serial Number: {0} is already referenced in Sales Invoice: {1},Número de série: {0} já está referenciado na fatura de vendas: {1}, +Serial Numbers,Números de Série, +Serial Numbers in row {0} does not match with Delivery Note,Os números de série na linha {0} não correspondem à nota de entrega, +Serial no {0} has been already returned,O número de série {0} já foi retornado, +Serial number {0} entered more than once,Número de série {0} entrou mais de uma vez, +Serialized Inventory,Inventário Por Nº de Série, +Series Updated,Série Atualizada, +Series Updated Successfully,Série Atualizada Com Sucesso, +Series is mandatory,Série é obrigatório, +Series {0} already used in {1},Série {0} já usado em {1}, +Service,Serviço, +Service Expense,Despesa Com Manutenção de Veículos, +Service Level Agreement,Acordo de Nível de Serviço, +Service Level Agreement.,Acordo de Nível de Serviço., +Service Level.,Nível de Serviço., +Service Stop Date cannot be after Service End Date,Data de parada de serviço não pode ser após a data de término do serviço, +Service Stop Date cannot be before Service Start Date,A data de parada de serviço não pode ser anterior à data de início do serviço, +Services,Serviços, +"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Defina valores padrão , como empresa, moeda, ano fiscal atual , etc", +Set Details,Detalhes do Conjunto, +Set New Release Date,Definir Nova Data de Lançamento, +Set Project and all Tasks to status {0}?,Definir projeto e todas as tarefas para status {0}?, +Set Status,Definir Status, +Set Tax Rule for shopping cart,Conjunto de regras de imposto por carrinho de compras, +Set as Closed,Definir Como Fechado, +Set as Completed,Definir Como Concluído, +Set as Default,Definir Como Padrão, +Set as Lost,Definir Como Perdido, +Set as Open,Definir Como Aberto, +Set default inventory account for perpetual inventory,Defina a conta de inventário padrão para o inventário perpétuo, +Set this if the customer is a Public Administration company.,Defina isto se o cliente for uma empresa da Administração Pública., +Set {0} in asset category {1} or company {2},Defina {0} na categoria de recurso {1} ou na empresa {2}, +"Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}","Configurando eventos para {0}, uma vez que o colaborador relacionado aos vendedores abaixo não tem um ID do usuário {1}", +Setting defaults,Configuração de padrões, +Setting up Email,Configurando Email, +Setting up Email Account,Configurando Conta de Email, +Setting up Employees,Configurando Colaboradores, +Setting up Taxes,Configurando Impostos, +Setting up company,Criação de empresa, +Settings,Configurações, +"Settings for online shopping cart such as shipping rules, price list etc.","Configurações do carrinho de compras on-line, tais como regras de navegação, lista de preços etc.", +Settings for website homepage,Configurações para página inicial do site, +Settings for website product listing,Configurações para listagem de produtos do website, +Settled,Liquidado, +Setup Gateway accounts.,Configuração contas Gateway., +Setup SMS gateway settings,Configurações de gateway SMS Setup, +Setup cheque dimensions for printing,Configurar dimensões do cheque para impressão, +Setup default values for POS Invoices,Configurar valores padrão para faturas do PDV, +Setup mode of POS (Online / Offline),Modo de Configuração do PDV (Online / Offline), +Setup your Institute in ERPNext,Configure seu Instituto no ERPNext, +Share Balance,Balanço de Ações, +Share Ledger,Ledger de Ações, +Share Management,Gerenciamento de Ações, +Share Transfer,Transferência de Ações, +Share Type,Tipo de Ação, +Shareholder,Acionista, +Ship To State,Enviar Para Estado, +Shipments,Entregas, +Shipping,Expedição, +Shipping Address,Endereço Para Entrega, +"Shipping Address does not have country, which is required for this Shipping Rule","O endereço de envio não tem país, o que é necessário para esta regra de envio", +Shipping rule only applicable for Buying,Regra de envio aplicável apenas para compra, +Shipping rule only applicable for Selling,Regra de envio aplicável apenas para venda, +Shopify Supplier,Fornecedor Shopify, +Shopping Cart,Carrinho de Compras, +Shopping Cart Settings,Configurações do Carrinho de Compras, +Short Name,Nome Curto, +Shortage Qty,Qtde Em Falta, +Show Completed,Mostrar Concluído, +Show Cumulative Amount,Mostrar Montante Cumulativo, +Show Employee,Mostrar Empregado, +Show Open,Mostrar Aberta, +Show Opening Entries,Mostrar Entradas de Abertura, +Show Payment Details,Mostrar Detalhes de Pagamento, +Show Return Entries,Mostrar Entradas de Devolução, +Show Salary Slip,Mostrar Contracheque, +Show Variant Attributes,Mostrar Atributos Variantes, +Show Variants,Mostrar Variantes, +Show closed,Mostrar fechados, +Show exploded view,Mostrar vista explodida, +Show only POS,Mostrar apenas POS, +Show unclosed fiscal year's P&L balances,Mostrar saldos P&L de ano fiscal não encerrado, +Show zero values,Mostrar valores zerados, +Sick Leave,Licença Médica, +Silt,Silt, +Single Variant,Variante Única, +Single unit of an Item.,Unidade única de um item., +"Skipping Leave Allocation for the following employees, as Leave Allocation records already exists against them. {0}","Ignorar a atribuição de licenças para os funcionários a seguir, já que os registros de alocação de licenças já existem contra eles. {0}", +"Skipping Salary Structure Assignment for the following employees, as Salary Structure Assignment records already exists against them. {0}","Ignorar Atribuição de estrutura salarial para os seguintes empregados, como registros de atribuição de estrutura salarial já existe contra eles. {0}", +Slideshow,Apresentação de Slides, +Slots for {0} are not added to the schedule,Slots para {0} não são adicionados ao cronograma, +Small,Pequeno, +Soap & Detergent,Soap & Detergente, +Software,Software, +Software Developer,Software Developer, +Softwares,Softwares, +Soil compositions do not add up to 100,As composições de solo não somam até 100, +Sold,Vendido, +Some emails are invalid,Alguns emails são inválidos, +Some information is missing,Alguma informação está faltando, +Something went wrong!,Algo deu errado!, +"Sorry, Serial Nos cannot be merged","Desculpe, os números de ordem não podem ser mescladas", +Source,Origem, +Source Name,Nome da Fonte, +Source Warehouse,Armazém de Origem, +Source and Target Location cannot be same,A origem e o local de destino não podem ser iguais, +Source and target warehouse cannot be same for row {0},Fonte e armazém de destino não pode ser o mesmo para a linha {0}, +Source and target warehouse must be different,O Armazém de origem e o armazém de destino devem ser diferentes um do outro, +Source of Funds (Liabilities),Fonte de Recursos (passivos), +Source warehouse is mandatory for row {0},O Armazém de origem é obrigatório para a linha {0}, +Specified BOM {0} does not exist for Item {1},A LDM {0} especificada não existe para o Item {1}, +Split,Dividido, +Split Batch,Lote Dividido, +Split Issue,Problema de Divisão, +Sports,Esportes, +Staffing Plan {0} already exist for designation {1},Plano de Pessoal {0} já existe para designação {1}, +Standard,Padrão, +Standard Buying,Compra Padrão, +Standard Selling,Venda Padrão, +Standard contract terms for Sales or Purchase.,Termos do contrato padrão para vendas ou compra., +Start Date,Data de Início, +Start Date of Agreement can't be greater than or equal to End Date.,A data de início do contrato não pode ser maior ou igual à data de término., +Start Year,Ano de Início, +"Start and end dates not in a valid Payroll Period, cannot calculate {0}","Datas de início e término não em um Período da folha de pagamento válido, não é possível calcular {0}", +"Start and end dates not in a valid Payroll Period, cannot calculate {0}.","Datas de início e término fora de um Período da Folha de Pagamento válido, não é possível calcular {0}.", +Start date should be less than end date for Item {0},Data de início deve ser inferior a data final para o item {0}, +Start date should be less than end date for task {0},A data de início deve ser inferior à data de término da tarefa {0}, +Start day is greater than end day in task '{0}',O dia de início é maior que o final da tarefa ';{0}';, +Start on,Início Em, +State,Estado, +State/UT Tax,Imposto Estadual, +Statement of Account,Extrato da Conta, +Status must be one of {0},Status deve ser um dos {0}, +Stock,Estoque, +Stock Adjustment,Ajuste do Estoque, +Stock Analytics,Análise do Estoque, +Stock Assets,Ativos Estoque, +Stock Available,Disponível Em Estoque, +Stock Balance,Balanço de Estoque, +Stock Entries already created for Work Order ,Entradas de ações já criadas para ordem de serviço, +Stock Entry,Lançamento no Estoque, +Stock Entry {0} created,Lançamento de Estoque {0} criado, +Stock Entry {0} is not submitted,Lançamento no Estoque {0} não é enviado, +Stock Expenses,Despesas Com Estoque, +Stock In Hand,Estoque na Mão, +Stock Items,Itens de Estoque, +Stock Ledger,Livro de Inventário, +Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts,Banco de Ledger Entradas e GL as entradas são reenviados para os recibos de compra selecionados, +Stock Levels,Níveis de Estoque, +Stock Liabilities,Passivo Estoque, +Stock Options,Opções de Compra, +Stock Qty,Quantidade Em Estoque, +Stock Received But Not Billed,Itens Recebidos Mas Não Faturados, +Stock Reports,Relatórios de Estoque, +Stock Summary,Resumo do Estoque, +Stock Transactions,Transações de Estoque, +Stock UOM,Unidade de Medida do Estoque, +Stock Value,Valor do Estoque, +Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3},Da balança em Batch {0} se tornará negativo {1} para item {2} no Armazém {3}, +Stock cannot be updated against Delivery Note {0},Banco não pode ser atualizado contra nota de entrega {0}, +Stock cannot be updated against Purchase Receipt {0},O estoque não pode ser atualizado em relação ao Recibo de Compra {0}, +Stock cannot exist for Item {0} since has variants,Estoque não pode existir por item {0} já que tem variantes, +Stock transactions before {0} are frozen,Transações com ações antes {0} são congelados, +Stop,Parar, +Stopped,Parado, +"Stopped Work Order cannot be cancelled, Unstop it first to cancel","A ordem de trabalho interrompida não pode ser cancelada, descompacte-a primeiro para cancelar", +Stores,Lojas, +Structures have been assigned successfully,Estruturas foram atribuídas com sucesso, +Student,Aluno, +Student Activity,Atividade Estudantil, +Student Address,Endereço do Estudante, +Student Admissions,Admissões de Alunos, +Student Attendance,Frequência do Aluno, +"Student Batches help you track attendance, assessments and fees for students","Os lotes de estudante ajudar a controlar assiduidade, avaliação e taxas para estudantes", +Student Email Address,Endereço de Email do Estudante, +Student Email ID,Email do Aluno, +Student Group,Grupo de Alunos, +Student Group Strength,Grupo de Estudantes Força, +Student Group is already updated.,O grupo de alunos já está atualizado., +Student Group: ,Grupo de Estudantes:, +Student ID,ID do Aluno, +Student ID: ,Identidade Estudantil:, +Student LMS Activity,Atividade Lms do Aluno, +Student Mobile No.,Celular do Aluno, +Student Name,Nome do Aluno, +Student Name: ,Nome do Aluno:, +Student Report Card,Cartão de Relatório do Aluno, +Student is already enrolled.,Aluno já está inscrito., +Student {0} - {1} appears Multiple times in row {2} & {3},O aluno {0} - {1} aparece Diversas vezes na linha {2} e {3}, +Student {0} does not belong to group {1},O aluno {0} não pertence ao grupo {1}, +Student {0} exist against student applicant {1},O aluno {0} existe contra candidato a estudante {1}, +"Students are at the heart of the system, add all your students","Os estudantes estão no centro do sistema, adicione todos os seus alunos", +Sub Assemblies,Subconjuntos, +Sub Type,Subtipo, +Sub-contracting,Subcontratação, +Subcontract,Subcontratar, +Subject,Assunto, +Submit,Enviar, +Submit Proof,Enviar Prova, +Submit Salary Slip,Enviar Folha de Pagamentos, +Submit this Work Order for further processing.,Envie esta Ordem de Serviço para processamento adicional., +Submit this to create the Employee record,Envie isto para criar o registro do funcionário, +Submitting Salary Slips...,Enviando Slips Salariais..., +Subscription,Inscrição, +Subscription Management,Gerenciamento de Assinaturas, +Subscriptions,Assinaturas, +Subtotal,Subtotal, +Successful,Bem Sucedido, +Successfully Reconciled,Reconciliados Com Sucesso, +Successfully Set Supplier,Definir o Fornecedor Com Sucesso, +Successfully created payment entries,Entradas de pagamento criadas com sucesso, +Successfully deleted all transactions related to this company!,Todas as transações relacionadas a esta empresa foram excluídas com sucesso!, +Sum of Scores of Assessment Criteria needs to be {0}.,Soma dos escores de critérios de avaliação precisa ser {0}., +Sum of points for all goals should be 100. It is {0},Soma de pontos para todos os objetivos deve inteirar 100. (valor atual: {0}), +Summary,Resumo, +Summary for this month and pending activities,Resumo para este mês e atividades pendentes, +Summary for this week and pending activities,Resumo para esta semana e atividades pendentes, +Sunday,Domingo, +Suplier,Fornecedor, +Supplier,Fornecedor, +Supplier Group,Grupo de Fornecedores, +Supplier Group master.,Mestre do Grupo de Fornecedores., +Supplier Id,ID do Fornecedor, +Supplier Invoice Date cannot be greater than Posting Date,A data da nota fiscal do fornecedor não pode ser maior do que data do lançamento, +Supplier Invoice No,Nº da Nota Fiscal de Compra, +Supplier Invoice No exists in Purchase Invoice {0},Nº da Nota Fiscal do Fornecedor já existe naFatura de Compra {0}, +Supplier Name,Nome do Fornecedor, +Supplier Part No,Nº da Peça no Fornecedor, +Supplier Quotation,Orçamento de Fornecedor, +Supplier Scorecard,Scorecard do Fornecedor, +Supplier Warehouse mandatory for sub-contracted Purchase Receipt,Fornecedor Armazém obrigatório para sub- contratados Recibo de compra, +Supplier database.,Banco de dados do fornecedor., +Supplier {0} not found in {1},Fornecedor {0} não encontrado em {1}, +Supplier(s),Fornecedor(es), +Supplies made to UIN holders,Suprimentos feitos para os titulares de UIN, +Supplies made to Unregistered Persons,Suprimentos para pessoas não registradas, +Suppliies made to Composition Taxable Persons,Suplementos feitos à composição de sujeitos passivos, +Supply Type,Tipo de Alimentação, +Support,Pós-vendas, +Support Analytics,Análise de Pós-vendas, +Support Settings,Configurações do Pós Vendas, +Support Tickets,Bilhetes de Suporte, +Support queries from customers.,Suporte às perguntas de clientes., +Susceptible,Susceptível, +Sync has been temporarily disabled because maximum retries have been exceeded,A sincronização foi temporariamente desativada porque tentativas máximas foram excedidas, +Syntax error in condition: {0},Erro de sintaxe na condição: {0}, +Syntax error in formula or condition: {0},Erro de sintaxe na fórmula ou condição: {0}, +System Manager,Administrador do Sistema, +TDS Rate %,% de taxa de TDS, +Tap items to add them here,Toque em itens para adicioná-los aqui, +Target,Meta, +Target ({}),Meta ({}), +Target On,Meta Em, +Target Warehouse,Armazém de Destino, +Target warehouse is mandatory for row {0},Destino do Warehouse é obrigatória para a linha {0}, +Task,Tarefa, +Tasks,Tarefas, +Tasks have been created for managing the {0} disease (on row {1}),Tarefas foram criadas para gerenciar a doença {0} (na linha {1}), +Tax,Imposto, +Tax Assets,Ativo Fiscal, +Tax Category,Categoria de Impostos, +Tax Category for overriding tax rates.,Categoria de imposto para taxas de imposto sobrepostas., +"Tax Category has been changed to ""Total"" because all the Items are non-stock items",Categoria de imposto foi alterada para "Total" porque todos os itens são itens sem estoque, +Tax ID,Cpf/cnpj, +Tax Id: ,Cpf/cnpj:, +Tax Rate,Alíquota do Imposto, +Tax Rule Conflicts with {0},Conflitos regra fiscal com {0}, +Tax Rule for transactions.,Regra de imposto para transações., +Tax Template is mandatory.,Modelo de impostos é obrigatório., +Tax Withholding rates to be applied on transactions.,Taxas de retenção fiscal a serem aplicadas em transações., +Tax template for buying transactions.,Modelo de impostos para a compra de transações., +Tax template for item tax rates.,Modelo de imposto para taxas de imposto de item., +Tax template for selling transactions.,Modelo impostos para transações de venda., +Taxable Amount,Valor Tributável, +Taxes,Impostos, +Team Updates,Updates da Equipe, +Technology,Tecnologia, +Telecommunications,Telecomunicações, +Telephone Expenses,Despesas Com Telefone, +Television,Televisão, +Template Name,Nome do Modelo, +Template of terms or contract.,Modelo de termos ou contratos., +Templates of supplier scorecard criteria.,Modelos de critérios de scorecard do fornecedor., +Templates of supplier scorecard variables.,Modelos de variáveis do scorecard do fornecedor., +Templates of supplier standings.,Modelos de classificação de fornecedores., +Temporarily on Hold,Temporariamente Em Espera, +Temporary,Temporário, +Temporary Accounts,Contas Temporárias, +Temporary Opening,Abertura Temporária, +Terms and Conditions,Termos e Condições, +Terms and Conditions Template,Modelo de Termos e Condições, +Territory,Território, +Test,Teste, +Thank you,Obrigado, +Thank you for your business!,Obrigado pela compra!, +The 'From Package No.' field must neither be empty nor it's value less than 1.,O ';A partir do número do pacote'; o campo não deve estar vazio nem valor inferior a 1., +The Brand,A Marca, +The Item {0} cannot have Batch,O item {0} não pode ter Batch, +The Loyalty Program isn't valid for the selected company,O programa de fidelidade não é válido para a empresa selecionada, +The Payment Term at row {0} is possibly a duplicate.,O termo de pagamento na linha {0} é possivelmente uma duplicata., +The Term End Date cannot be earlier than the Term Start Date. Please correct the dates and try again.,O Prazo de Data Final não pode ser anterior ao Prazo de Data de Início. Por favor corrija as datas e tente novamente., +The Term End Date cannot be later than the Year End Date of the Academic Year to which the term is linked (Academic Year {}). Please correct the dates and try again.,O Prazo de Data de Término não pode ser posterior à Data de Término de Ano do Ano Letivo com a qual está relacionado o termo (Ano Lectivo {}). Por favor corrija as datas e tente novamente., +The Term Start Date cannot be earlier than the Year Start Date of the Academic Year to which the term is linked (Academic Year {}). Please correct the dates and try again.,O Prazo da Data de Início não pode ser antes da Data de Início do Ano Letivo com o qual o termo está vinculado (Ano Lectivo {}). Por favor corrija as datas e tente novamente., +The Year End Date cannot be earlier than the Year Start Date. Please correct the dates and try again.,A Data de Término do Ano não pode ser anterior à Data de Início de Ano. Por favor corrija as datas e tente novamente., +The amount of {0} set in this payment request is different from the calculated amount of all payment plans: {1}. Make sure this is correct before submitting the document.,O valor de {0} definido nesta solicitação de pagamento é diferente do valor calculado de todos os planos de pagamento: {1}. Certifique-se de que está correto antes de enviar o documento., +The day(s) on which you are applying for leave are holidays. You need not apply for leave.,No dia (s) em que você está se candidatando a licença são feriados. Você não precisa solicitar uma licença., +The field From Shareholder cannot be blank,O campo do Acionista não pode estar em branco, +The field To Shareholder cannot be blank,O campo Acionista não pode estar em branco, +The fields From Shareholder and To Shareholder cannot be blank,Os campos do Acionista e do Acionista não podem estar em branco, +The folio numbers are not matching,Os números do folio não estão combinando, +The holiday on {0} is not between From Date and To Date,O feriado em {0} não é entre de Data e To Date, +The name of the institute for which you are setting up this system.,O nome do instituto para o qual está a instalar este sistema., +The name of your company for which you are setting up this system.,O nome da sua empresa para a qual você está configurando o sistema., +The number of shares and the share numbers are inconsistent,O número de ações e os números de compartilhamento são inconsistentes, +The payment gateway account in plan {0} is different from the payment gateway account in this payment request,A conta do gateway de pagamento no plano {0} é diferente da conta do gateway de pagamento nesta solicitação de pagamento, +The selected BOMs are not for the same item,As listas de materiais selecionadas não são para o mesmo item, +The selected item cannot have Batch,O item selecionado não pode ter Batch, +The seller and the buyer cannot be the same,O vendedor e o comprador não podem ser os mesmos, +The shareholder does not belong to this company,O acionista não pertence a esta empresa, +The shares already exist,As ações já existem, +The shares don't exist with the {0},As ações não existem com o {0}, +"The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Draft stage","A tarefa foi enfileirada como um trabalho em segundo plano. Caso haja algum problema no processamento em background, o sistema adicionará um comentário sobre o erro nessa reconciliação de estoque e reverterá para o estágio de rascunho", +"Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc.","Então Preços Regras são filtradas com base no Cliente, Grupo de Clientes, Território, fornecedor, fornecedor Tipo, Campanha, Parceiro de vendas etc", +"There are inconsistencies between the rate, no of shares and the amount calculated","Existem inconsistências entre a taxa, o número de ações e o valor calculado", +There are more holidays than working days this month.,Há mais feriados do que dias úteis do mês., +There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier.,Pode haver vários fatores de cobrança em camadas com base no total gasto. Mas o fator de conversão para resgate será sempre o mesmo para todo o nível., +There can only be 1 Account per Company in {0} {1},Pode haver apenas uma conta por empresa em {0} {1}, +"There can only be one Shipping Rule Condition with 0 or blank value for ""To Value""","Só pode haver uma regra de envio Condição com 0 ou valor em branco para "" To Valor """, +There is no leave period in between {0} and {1},Não há período de licença entre {0} e {1}, +There is not enough leave balance for Leave Type {0},Não há o suficiente equilíbrio pela licença Tipo {0}, +There is nothing to edit.,Não há nada a ser editado., +There isn't any item variant for the selected item,Não há variante de item para o item selecionado, +"There seems to be an issue with the server's GoCardless configuration. Don't worry, in case of failure, the amount will get refunded to your account.","Parece haver um problema com a configuração GoCardless do servidor. Não se preocupe, em caso de falha, o valor será reembolsado na sua conta.", +There were errors creating Course Schedule,Houve erros na criação da programação do curso, +There were errors.,Ocorreram erros., +This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set,Este artigo é um modelo e não podem ser usados em transações. Atributos item será copiado para as variantes a menos 'No Copy' é definido, +This Item is a Variant of {0} (Template).,Este Item É Uma Variante de {0} (modelo)., +This Month's Summary,Resumo Deste Mês, +This Week's Summary,Resumo da Semana, +This action will stop future billing. Are you sure you want to cancel this subscription?,Essa ação interromperá o faturamento futuro. Tem certeza de que deseja cancelar esta assinatura?, +This covers all scorecards tied to this Setup,Isso abrange todos os scorecards vinculados a esta configuração, +This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?,Este documento está fora do limite {0} {1} para o item {4}. Você está fazendo outro(a) {3} relacionado(a) a(o) mesmo(a) {2}?, +This is a root account and cannot be edited.,Esta é uma conta de root e não pode ser editada., +This is a root customer group and cannot be edited.,Este é um grupo de clientes de raiz e não pode ser editada., +This is a root department and cannot be edited.,Este é um departamento raiz e não pode ser editado., +This is a root healthcare service unit and cannot be edited.,Esta é uma unidade de serviço de saúde raiz e não pode ser editada., +This is a root item group and cannot be edited.,Este é um grupo de itens de raiz e não pode ser editada., +This is a root sales person and cannot be edited.,Esta é uma pessoa de vendas de raiz e não pode ser editado., +This is a root supplier group and cannot be edited.,Este é um grupo de fornecedores raiz e não pode ser editado., +This is a root territory and cannot be edited.,Este é um território de raiz e não pode ser editada., +This is an example website auto-generated from ERPNext,Este é um exemplo website auto- gerada a partir ERPNext, +This is based on logs against this Vehicle. See timeline below for details,Isto é baseado em registos deste veículo. Veja o cronograma abaixo para obter mais detalhes, +This is based on stock movement. See {0} for details,Isto é baseado no movimento de estoque. Veja o {0} para maiores detalhes, +This is based on the Time Sheets created against this project,Isto é baseado nos Registros de Tempo relacionados a este Projeto, +This is based on the attendance of this Employee,Isto é baseado na frequência deste Colaborador, +This is based on the attendance of this Student,Isto é baseado na frequência do aluno, +This is based on transactions against this Customer. See timeline below for details,Isto é baseado nas transações envolvendo este Cliente. Veja a linha do tempo abaixo para maiores detalhes, +This is based on transactions against this Healthcare Practitioner.,Isto é baseado em transações contra este profissional de saúde., +This is based on transactions against this Patient. See timeline below for details,Isso é baseado em transações contra este Paciente. Veja a linha de tempo abaixo para detalhes, +This is based on transactions against this Sales Person. See timeline below for details,Isso é baseado em transações contra essa pessoa de vendas. Veja a linha do tempo abaixo para detalhes, +This is based on transactions against this Supplier. See timeline below for details,Isto é baseado nas transações envolvendo este Fornecedor. Veja a linha do tempo abaixo para maiores detalhes, +This will submit Salary Slips and create accrual Journal Entry. Do you want to proceed?,Isso enviará os Slides salariais e criará a entrada no diário de acumulação. Você quer prosseguir?, +This {0} conflicts with {1} for {2} {3},Este/a {0} entra em conflito com {1} por {2} {3}, +Time Sheet for manufacturing.,Registro de Tempo para fabricação, +Time Tracking,Controle de Tempo, +"Time slot skiped, the slot {0} to {1} overlap exisiting slot {2} to {3}","Time slot skiped, o slot {0} para {1} se sobrepõe ao slot existente {2} para {3}", +Time slots added,Slots de tempo adicionados, +Time(in mins),Tempo (em minutos), +Timer,Cronômetro, +Timer exceeded the given hours.,O temporizador excedeu as horas dadas., +Timesheet,Registro de Tempo, +Timesheet for tasks.,Registros de Tempo para tarefas., +Timesheet {0} is already completed or cancelled,O Registro de Tempo {0} está finalizado ou cancelado, +Timesheets,Registros de Tempo, +"Timesheets help keep track of time, cost and billing for activites done by your team","O Registo de Horas ajudar a manter o controlo do tempo, custo e faturação para atividades feitas pela sua equipa", +Titles for print templates e.g. Proforma Invoice.,Títulos para modelos de impressão por exemplo Fatura Proforma., +To,Para, +To Address 1,Para Endereço 1, +To Address 2,Para Endereço 2, +To Bill,Para Faturar, +To Date,Até a Data, +To Date cannot be before From Date,Até o momento não pode ser antes a partir da data, +To Date cannot be less than From Date,Até a data não pode ser menor que a partir da data, +To Date must be greater than From Date,To Date deve ser maior que From Date, +To Date should be within the Fiscal Year. Assuming To Date = {0},Para data deve ser dentro do exercício social. Assumindo Para Date = {0}, +To Datetime,Até a Data e Hora, +To Deliver,Para Entregar, +To Deliver and Bill,Para Entregar e Faturar, +To Fiscal Year,Para o Ano Fiscal, +To GSTIN,Para GSTIN, +To Party Name,Para o Parceiro, +To Pin Code,Para Fixar o Código, +To Place,Colocar, +To Receive,Receber, +To Receive and Bill,Para Receber e Faturar, +To State,Declarar, +To Warehouse,Para o Armazén, +To create a Payment Request reference document is required,Para criar um documento de referência de Pedido de pagamento é necessário, +To date can not be equal or less than from date,Até o momento não pode ser igual ou menor que a data, +To date can not be less than from date,Até o momento não pode ser menor que a data, +To date can not greater than employee's relieving date,Até à data não pode maior do que a data de alívio do empregado, +"To filter based on Party, select Party Type first","Para filtrar baseado em Sujeito, selecione o Tipo de Sujeito primeiro", +"To get the best out of ERPNext, we recommend that you take some time and watch these help videos.","Para tirar o melhor proveito do ERPNext, recomendamos que você dedique algum tempo para assistir a esses vídeos de ajuda.", +"To include tax in row {0} in Item rate, taxes in rows {1} must also be included","Para incluir impostos na linha {0} na taxa de Item, os impostos em linhas {1} também deve ser incluída", +To make Customer based incentive schemes.,Fazer esquemas de incentivo baseados no cliente., +"To merge, following properties must be same for both items","Para mesclar , seguintes propriedades devem ser os mesmos para ambos os itens", +"To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.","Para não aplicar regra de preços em uma transação particular, todas as regras de preços aplicáveis devem ser desativados.", +"To set this Fiscal Year as Default, click on 'Set as Default'","Para definir esse Ano Fiscal como padrão , clique em ' Definir como padrão '", +To view logs of Loyalty Points assigned to a Customer.,Exibir registros de pontos de fidelidade atribuídos a um cliente., +To {0},Para {0}, +To {0} | {1} {2},Para {0} | {1} {2}, +Toggle Filters,Toggle Filters, +Too many columns. Export the report and print it using a spreadsheet application.,Muitas colunas. Exportar o relatório e imprimi-lo usando um aplicativo de planilha., +Tools,Ferramentas, +Total (Credit),Total (crédito), +Total (Without Tax),Total (sem Imposto), +Total Absent,Total de Faltas, +Total Achieved,Total de Alcançados, +Total Actual,Total Atual, +Total Allocated Leaves,Total de Folhas Alocadas, +Total Amount,Valor Total, +Total Amount Credited,Quantidade Total Creditada, +Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total de encargos aplicáveis em Purchase mesa Itens recibo deve ser o mesmo que o total Tributos e Encargos, +Total Budget,Orçamento Total, +Total Collected: {0},Total Coletado: {0}, +Total Commission,Total da Comissão, +Total Contribution Amount: {0},Valor Total da Contribuição: {0}, +Total Credit/ Debit Amount should be same as linked Journal Entry,O valor total de crédito / débito deve ser o mesmo que o lançamento no diário associado, +Total Debit must be equal to Total Credit. The difference is {0},Débito total deve ser igual ao total de crédito., +Total Deduction,Dedução Total, +Total Invoiced Amount,Valor Total Faturado, +Total Leaves,Total de Licenças, +Total Order Considered,Total Considerado Em Pedidos, +Total Order Value,Valor Total do Pedido, +Total Outgoing,Total de Saída, +Total Outstanding,Total Pendente, +Total Outstanding Amount,Saldo Devedor Total, +Total Outstanding: {0},Total Pendente: {0}, +Total Paid Amount,Valor Total Pago, +Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total,O valor total do pagamento no cronograma de pagamento deve ser igual a total / total arredondado, +Total Payments,Total de Pagamentos, +Total Present,Total Presente, +Total Qty,Quantidade Total, +Total Quantity,Quantidade Total, +Total Revenue,Receita Total, +Total Student,Estudante Total, +Total Target,Meta Total, +Total Tax,Fiscal Total, +Total Taxable Amount,Valor Total Tributável, +Total Taxable Value,Valor Tributável Total, +Total Unpaid: {0},Total Por Pagar: {0}, +Total Variance,Variância Total, +Total Weightage of all Assessment Criteria must be 100%,O peso total de todos os Critérios de Avaliação deve ser 100%, +Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2}),Avanço total ({0}) contra Pedido {1} não pode ser maior do que o total geral ({2}), +Total advance amount cannot be greater than total claimed amount,A quantia de antecipação total não pode ser maior do que o montante total reclamado, +Total advance amount cannot be greater than total sanctioned amount,O montante do adiantamento total não pode ser maior do que o montante liberado total, +Total allocated leaves are more days than maximum allocation of {0} leave type for employee {1} in the period,O total de folhas alocadas é mais dias do que a alocação máxima de {0} tipo de licença para o funcionário {1} no período, +Total allocated leaves are more than days in the period,Total de licenças alocadas é maior do que número de dias no período, +Total allocated percentage for sales team should be 100,Porcentagem total alocado para a equipe de vendas deve ser de 100, +Total cannot be zero,Total não pode ser zero, +Total contribution percentage should be equal to 100,A porcentagem total de contribuição deve ser igual a 100, +Total flexible benefit component amount {0} should not be less than max benefits {1},O valor total do componente de benefício flexível {0} não deve ser menor do que os benefícios máximos {1}, +Total hours: {0},Total de horas: {0}, +Total leaves allocated is mandatory for Leave Type {0},O total de folhas alocadas é obrigatório para o tipo de licença {0}, +Total working hours should not be greater than max working hours {0},O total de horas de trabalho não deve ser maior que o nr. máx. de horas de trabalho {0}, +Total {0} ({1}),Total {0} ({1}), +"Total {0} for all items is zero, may be you should change 'Distribute Charges Based On'","Total de {0} para todos os itens é zero, pode ser que você deve mudar ';Distribuir taxas sobre';", +Total(Amt),Total (quantia), +Total(Qty),Total (qtde), +Traceability,Rastreabilidade, +Traceback,Traceback, +Track Leads by Lead Source.,Rastrear Leads Por Origem., +Training,Treinamento, +Training Event,Evento de Treinamento, +Training Events,Eventos de Treinamento, +Training Feedback,Feedback do Treinamento, +Training Result,Resultado do Treinamento, +Transaction,Transação, +Transaction Date,Data da Transação, +Transaction Type,Tipo de Transação, +Transaction currency must be same as Payment Gateway currency,Moeda de transação deve ser o mesmo da moeda gateway de pagamento, +Transaction not allowed against stopped Work Order {0},Transação não permitida em relação à ordem de trabalho interrompida {0}, +Transaction reference no {0} dated {1},Referência da transação nº {0} em {1}, +Transactions,Transações, +Transactions can only be deleted by the creator of the Company,Transações só podem ser excluídos pelo criador da Companhia, +Transfer,Transferir, +Transfer Material,Transferência de Material, +Transfer Type,Tipo de Transferência, +Transfer an asset from one warehouse to another,Transferir um ativo de um armazém para outro, +Transfered,Transferido, +Transferred Quantity,Quantidade Transferida, +Transport Receipt Date,Data de Recebimento de Transporte, +Transport Receipt No,Recibo de Transporte Não, +Transportation,Transporte, +Transporter ID,ID do Transportador, +Transporter Name,Nome da Transportadora, +Travel,Viagem, +Travel Expenses,Despesas Com Viagem, +Tree Type,Tipo de Árvore, +Tree of Bill of Materials,Árvore da Lista de Materiais, +Tree of Item Groups.,Árvore de Grupos de itens., +Tree of Procedures,Árvore de Procedimentos, +Tree of Quality Procedures.,Árvore de Procedimentos de Qualidade., +Tree of financial Cost Centers.,Árvore de Centros de Custo., +Tree of financial accounts.,Árvore de contas financeiras., +Treshold {0}% appears more than once,Treshold {0}% aparece mais de uma vez, +Trial Period End Date Cannot be before Trial Period Start Date,Data de término do período de avaliação não pode ser anterior à data de início do período de avaliação, +Trialling,Julgamento, +Type of Business,Tipo de Negócios, +Types of activities for Time Logs,Tipos de Atividades para Registros de Tempo, +UOM,UDM, +UOM Conversion factor is required in row {0},Fator de Conversão da UDM é necessário na linha {0}, +UOM coversion factor required for UOM: {0} in Item: {1},Fator de Conversão de UDM é necessário para Unidade de Medida: {0} no Item: {1}, +URL,URL, +Unable to find DocType {0},Não foi possível encontrar DocType {0}, +Unable to find exchange rate for {0} to {1} for key date {2}. Please create a Currency Exchange record manually,Não é possível encontrar a taxa de câmbio para {0} a {1} para a data-chave {2}. Crie um registro de troca de moeda manualmente, +Unable to find score starting at {0}. You need to have standing scores covering 0 to 100,Não foi possível encontrar uma pontuação a partir de {0}. Você precisa ter pontuações em pé cobrindo de 0 a 100, +Unable to find variable: ,Não foi possível encontrar a variável:, +Unblock Invoice,Desbloquear Fatura, +Uncheck all,Desmarcar Todos, +Unclosed Fiscal Years Profit / Loss (Credit),Lucro / Prejuízo (crédito) de Anos Fiscais Não Encerrados, +Unit,Unidade, +Unit of Measure,Unidade de Medida, +Unit of Measure {0} has been entered more than once in Conversion Factor Table,Unidade de Medida {0} foi inserida mais de uma vez na Tabela de Conversão de Fator, +Unknown,Desconhecido, +Unpaid,A Pagar, +Unsecured Loans,Empréstimos Não Garantidos, +Unsubscribe from this Email Digest,Cancelar a inscrição neste Resumo por Email, +Unsubscribed,Inscrição Cancelada, +Until,Até, +Unverified Webhook Data,Dados Não-confirmados da Webhook, +Update Account Name / Number,Atualizar Nome / Número da Conta, +Update Account Number / Name,Atualizar Número da Conta / Nome, +Update Cost,Atualizar Custo, +Update Items,Atualizar Itens, +Update Print Format,Atualizar Formato de Impressão, +Update Response,Atualizar Resposta, +Update bank payment dates with journals.,Atualizar datas de pagamento bancário com livro Diário., +Update in progress. It might take a while.,Atualização em andamento. Pode demorar um pouco., +Update rate as per last purchase,Atualizar taxa de acordo com a última compra, +Update stock must be enable for the purchase invoice {0},Atualizar estoque deve ser ativado para a fatura de compra {0}, +Updating Variants...,Atualizando Variantes..., +Upload your letter head and logo. (you can edit them later).,Publique seu timbre e logotipo. (Você pode editá-las mais tarde)., +Upper Income,Alta Renda, +Use Sandbox,Use Sandbox, +Used Leaves,Folhas Usadas, +User,Usuário, +User ID,ID de Usuário, +User ID not set for Employee {0},ID de Usuário Não Definida Para Colaborador {0}, +User Remark,Observação do Usuário, +User has not applied rule on the invoice {0},O usuário não aplicou regra na fatura {0}, +User {0} already exists,O usuário {0} já existe, +User {0} created,Usuário {0} criado, +User {0} does not exist,Usuário {0} não existe, +User {0} doesn't have any default POS Profile. Check Default at Row {1} for this User.,O usuário {0} não possui perfil de POS padrão. Verifique Padrão na Linha {1} para este Usuário., +User {0} is already assigned to Employee {1},Usuário {0} já está atribuído ao Colaborador {1}, +User {0} is already assigned to Healthcare Practitioner {1},O usuário {0} já está atribuído ao Healthcare Practitioner {1}, +Users,Usuários, +Utility Expenses,Despesas Com Utilidades, +Valid From Date must be lesser than Valid Upto Date.,Válido da data deve ser menor que a data de validade., +Valid Till,Válida Até, +Valid from and valid upto fields are mandatory for the cumulative,Válido de e válido até campos são obrigatórios para o cumulativo, +Valid from date must be less than valid upto date,Válido a partir da data deve ser inferior a data de validade, +Valid till date cannot be before transaction date,A data de validade até a data não pode ser anterior à data da transação, +Validity,Validade, +Validity period of this quotation has ended.,O período de validade desta citação terminou., +Valuation Rate,Taxa de Avaliação, +Valuation Rate is mandatory if Opening Stock entered,É obrigatório colocar a Taxa de Avaliação se foi introduzido o Estoque de Abertura, +Valuation type charges can not marked as Inclusive,Encargos tipo de avaliação não pode marcado como Inclusive, +Value Or Qty,Valor Ou Qtde, +Value Proposition,Proposta de Valor, +Value for Attribute {0} must be within the range of {1} to {2} in the increments of {3} for Item {4},O Valor para o Atributo {0} deve estar dentro do intervalo de {1} a {2} nos acréscimos de {3} para o Item {4}, +Value missing,Valor ausente, +Value must be between {0} and {1},O valor deve estar entre {0} e {1}, +"Values of exempt, nil rated and non-GST inward supplies","Valores de suprimentos internos isentos, nulos e não-GST", +Variable,Variável, +Variance,Variação, +Variance ({}),Variação ({}), +Variant,Variante, +Variant Attributes,Atributos Variante, +Variant Based On cannot be changed,A variante baseada em não pode ser alterada, +Variant Details Report,Relatório de Detalhes da Variante, +Variant creation has been queued.,A criação de variantes foi colocada na fila., +Vehicle Expenses,Despesas Com Veículos, +Vehicle No,Placa do Veículo, +Vehicle Type,Tipo de Veículo, +Vehicle/Bus Number,Número de Veículo / Ônibus, +Venture Capital,Capital de Risco, +View Chart of Accounts,Visualizar Plano de Contas, +View Fees Records,Exibir Registros de Taxas, +View Form,Visualizar Formulário, +View Lab Tests,Ver Testes Laboratoriais, +View Leads,Ver Leads, +View Ledger,Ver Livro Razão, +View Now,Ver Agora, +View a list of all the help videos,Ver uma lista de todos os vídeos de ajuda, +View in Cart,Ver Carrinho, +Visit report for maintenance call.,Relatório da visita da chamada de manutenção., +Visit the forums,Visite os fóruns, +Vital Signs,Sinais Vitais, +Volunteer,Voluntário, +Volunteer Type information.,Informação do tipo de voluntário., +Volunteer information.,Informação de voluntários., +Voucher #,Comprovante #, +Voucher No,Nº do Comprovante, +Voucher Type,Tipo de Comprovante, +WIP Warehouse,Armazém de Trabalho Em Andamento, +Walk In,Vitrine, +Warehouse can not be deleted as stock ledger entry exists for this warehouse.,Armazém não pode ser excluído pois existe entrada de material para este armazém., +Warehouse cannot be changed for Serial No.,Armazém não pode ser alterado para nº serial., +Warehouse is mandatory,Armazém é obrigatório, +Warehouse is mandatory for stock Item {0} in row {1},Armazém é obrigatória para estoque o item {0} na linha {1}, +Warehouse not found in the system,Armazém não foi encontrado no sistema, +"Warehouse required at Row No {0}, please set default warehouse for the item {1} for the company {2}","Armazém requerido na Linha Não {0}, por favor, defina armazém padrão para o item {1} para a empresa {2}", +Warehouse required for stock Item {0},Armazém necessário para o ítem do estoque {0}, +Warehouse {0} can not be deleted as quantity exists for Item {1},Armazém {0} não pode ser excluído pois existe quantidade para item {1}, +Warehouse {0} does not belong to company {1},Armazém {0} não pertence à empresa {1}, +Warehouse {0} does not exist,Armazém {0} não existe, +"Warehouse {0} is not linked to any account, please mention the account in the warehouse record or set default inventory account in company {1}.","O depósito {0} não está vinculado a nenhuma conta, mencione a conta no registro do depósito ou defina a conta do inventário padrão na empresa {1}.", +Warehouses with child nodes cannot be converted to ledger,Os armazéns com subgrupos não podem ser convertido em livro, +Warehouses with existing transaction can not be converted to group.,Os Armazéns com a transação existente não podem ser convertidos num grupo., +Warehouses with existing transaction can not be converted to ledger.,Os Armazéns com transação existente não podem ser convertidos em razão., +Warning,Aviso, +Warning: Another {0} # {1} exists against stock entry {2},Aviso: Outra {0} # {1} existe contra entrada de material {2}, +Warning: Invalid SSL certificate on attachment {0},Aviso: certificado SSL inválido no anexo {0}, +Warning: Invalid attachment {0},Aviso: anexo inválido {0}, +Warning: Leave application contains following block dates,Aviso: pedido de férias contém as datas de intervalos, +Warning: Material Requested Qty is less than Minimum Order Qty,Aviso: a quantidade de material solicitado é menor do que o Pedido Mínimo, +Warning: Sales Order {0} already exists against Customer's Purchase Order {1},Aviso: Pedido de Venda {0} já existe relacionado ao Pedido de Compra do Cliente {1}, +Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Aviso : o sistema não irá verificar superfaturamento uma vez que o valor para o item {0} em {1} é zero, +Warranty,Garantia, +Warranty Claim,Solicitação de Garantia, +Warranty Claim against Serial No.,Solicitação de Garantia contra nº de Série, +Website,Site, +Website Image should be a public file or website URL,Site de imagem deve ser um arquivo público ou URL do site, +Website Image {0} attached to Item {1} cannot be found,Site Imagem {0} anexada ao Item {1} não pode ser encontrado, +Website Listing,Listagem de Sites, +Website Manager,Administrador do Site, +Website Settings,Configurações do Site, +Wednesday,Quarta-feira, +Week,Semana, +Weekdays,Dias da Semana, +Weekly,Semanalmente, +"Weight is mentioned,\nPlease mention ""Weight UOM"" too","Peso é mencionado, \n Também mencione ""Unidade de Medida de Peso""", +Welcome email sent,Email de Boas Vindas enviado, +Welcome to ERPNext,Bem Vindo Ao Erpnext, +What do you need help with?,Com o que você precisa de ajuda?, +What does it do?,O que isto faz?, +Where manufacturing operations are carried.,Onde as operações de fabricação são realizadas., +White,Branco, +Wire Transfer,Transferência Bancária, +WooCommerce Products,Produtos Woocommerce, +Work In Progress,Trabalho Em Andamento, +Work Order,Ordem de Trabalho, +Work Order already created for all items with BOM,Ordem de Serviço já criada para todos os itens com BOM, +Work Order cannot be raised against a Item Template,A ordem de serviço não pode ser levantada em relação a um modelo de item, +Work Order has been {0},A ordem de serviço foi {0}, +Work Order not created,Ordem de serviço não criada, +Work Order {0} must be cancelled before cancelling this Sales Order,A ordem de serviço {0} deve ser cancelada antes de cancelar este pedido de venda, +Work Order {0} must be submitted,A ordem de serviço {0} deve ser enviada, +Work Orders Created: {0},Ordens de Serviço Criadas: {0}, +Work Summary for {0},Resumo do Trabalho Para {0}, +Work-in-Progress Warehouse is required before Submit,Armazém de Trabalho em Andamento é necessário antes de Enviar, +Workflow,Fluxo de Trabalho, +Working,Trabalhando, +Working Hours,Horas de Trabalho, +Workstation,Estação de Trabalho, +Workstation is closed on the following dates as per Holiday List: {0},Workstation é fechado nas seguintes datas conforme lista do feriado: {0}, +Wrapping up,Empacotando, +Wrong Password,Senha Incorreta, +Year start date or end date is overlapping with {0}. To avoid please set company,Ano data de início ou data de término é a sobreposição com {0}. Para evitar defina empresa, +You are not authorized to add or update entries before {0},Você não está autorizado para adicionar ou atualizar entradas antes de {0}, +You are not authorized to approve leaves on Block Dates,Você não está autorizado a aprovar folhas em datas Bloco, +You are not authorized to set Frozen value,Você não está autorizado para definir o valor congelado, +You are not present all day(s) between compensatory leave request days,Você não está presente todos os dias entre os dias de solicitação de licença compensatória, +You can not change rate if BOM mentioned agianst any item,Você não pode alterar a taxa se a LDM é mencionada em algum item, +You can not enter current voucher in 'Against Journal Entry' column,Você não pode lançar o comprovante atual na coluna 'Contra Entrada do Livro Diário', +You can only have Plans with the same billing cycle in a Subscription,Você só pode ter planos com o mesmo ciclo de faturamento em uma assinatura, +You can only redeem max {0} points in this order.,Você só pode resgatar no máximo {0} pontos nesse pedido., +You can only renew if your membership expires within 30 days,Você só pode renovar se a sua adesão expirar dentro de 30 dias, +You can only select a maximum of one option from the list of check boxes.,Você só pode selecionar um máximo de uma opção na lista de caixas de seleção., +You can only submit Leave Encashment for a valid encashment amount,Você só pode enviar uma licença para uma quantia válida de reembolso, +You can't redeem Loyalty Points having more value than the Grand Total.,Você não pode resgatar Pontos de fidelidade com mais valor do que o total geral., +You cannot credit and debit same account at the same time,Você não pode ter débito e crédito na mesma conta, +You cannot delete Fiscal Year {0}. Fiscal Year {0} is set as default in Global Settings,Não pode eliminar o Ano Fiscal de {0}. o Ano Fiscal de {0} está definido como padrão nas Definições Gerais, +You cannot delete Project Type 'External',Você não pode excluir o Tipo de Projeto ';Externo';, +You cannot edit root node.,Você não pode editar o nó raiz., +You cannot restart a Subscription that is not cancelled.,Você não pode reiniciar uma Assinatura que não seja cancelada., +You don't have enought Loyalty Points to redeem,Você não tem suficientes pontos de lealdade para resgatar, +You have already assessed for the assessment criteria {}.,Você já avaliou os critérios de avaliação {}., +You have already selected items from {0} {1},Já selecionou itens de {0} {1}, +You have been invited to collaborate on the project: {0},Você foi convidado para colaborar com o projeto: {0}, +You have entered duplicate items. Please rectify and try again.,Você digitou itens duplicados. Por favor corrigir e tentar novamente., +You need to be a user other than Administrator with System Manager and Item Manager roles to register on Marketplace.,Você precisa ser um usuário diferente das funções Administrador com Gerente do Sistema e Gerenciador de Itens para registrar no Marketplace., +You need to be a user with System Manager and Item Manager roles to add users to Marketplace.,Você precisa ser um usuário com as funções System Manager e Item Manager para adicionar usuários ao Marketplace., +You need to be a user with System Manager and Item Manager roles to register on Marketplace.,Você precisa ser um usuário com as funções System Manager e Item Manager para registrar no Marketplace., +You need to be logged in to access this page,Você precisa estar logado para acessar esta página, +You need to enable Shopping Cart,É preciso ativar o Carrinho de Compras, +You will lose records of previously generated invoices. Are you sure you want to restart this subscription?,Você perderá registros de faturas geradas anteriormente. Tem certeza de que deseja reiniciar esta assinatura?, +Your Organization,Sua Organização, +Your cart is Empty,Seu carrinho está vazio, +Your email address...,Seu endereço de email..., +Your order is out for delivery!,Seu pedido está fora de prazo!, +Your tickets,Seus ingressos, +ZIP Code,CEP, +[Error],[Erro], +[{0}](#Form/Item/{0}) is out of stock,Não há [{0}] ({0}) em estoque., +`Freeze Stocks Older Than` should be smaller than %d days.,Congelar Estoque anterior a' deve ser menor que %d dias., +based_on,baseado em, +cannot be greater than 100,não pode ser maior do que 100, +disabled user,usuário desativado, +"e.g. ""Build tools for builders""","ex: ""Desenvolve ferramentas para construtores """, +"e.g. ""Primary School"" or ""University""","ex: ""Escola Primária"" ou ""Universidade""", +"e.g. Bank, Cash, Credit Card","ex: Banco, Dinheiro, Cartão de Crédito", +hidden,oculto, +modified,modificado, +old_parent,old_parent, +on,em, +{0} '{1}' is disabled,{0} '{1}' está desativado, +{0} '{1}' not in Fiscal Year {2},{0} '{1}' não localizado no Ano Fiscal {2}, +{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3},{0} ({1}) não pode ser maior que a quantidade planejada ({2}) na Ordem de Serviço {3}, +{0} - {1} is inactive student,{0} - {1} é estudante inativo, +{0} - {1} is not enrolled in the Batch {2},{0} - {1} não está inscrito no Lote {2}, +{0} - {1} is not enrolled in the Course {2},{0} - {1} não está inscrito no Curso {2}, +{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0} Orçamento para a Conta {1} contra o {2} {3} é {4}. Ele irá exceder em {5}, +{0} Digest,{0} Digest, +{0} Request for {1},{0} pedido para {1}, +{0} Result submittted,{0} Resultado enviado, +{0} Serial Numbers required for Item {1}. You have provided {2}.,{0} número de série é necessário para item {1}. Você forneceu {2}., +{0} Student Groups created.,{0} Grupos de Alunos criados., +{0} Students have been enrolled,{0} Estudantes foram matriculados, +{0} against Bill {1} dated {2},{0} contra duplicata {1} na data {2}, +{0} against Purchase Order {1},{0} relacionado ao Pedido de Compra {1}, +{0} against Sales Invoice {1},{0} contra Fatura de Venda {1}, +{0} against Sales Order {1},{0} contra o Pedido de Venda {1}, +{0} already allocated for Employee {1} for period {2} to {3},{0} já está alocado para o Colaborador {1} para o período de {2} até {3}, +{0} applicable after {1} working days,{0} aplicável após {1} dias úteis, +{0} asset cannot be transferred,{0} ativo não pode ser transferido, +{0} can not be negative,{0} não pode ser negativo, +{0} created,{0} criou, +"{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, os Pedidos de Compra para este fornecedor devem ser emitidos com cautela.", +"{0} currently has a {1} Supplier Scorecard standing, and RFQs to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, as Cotações para este fornecedor devem ser emitidas com cautela.", +{0} does not belong to Company {1},{0} não pertence à empresa {1}, +{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner master,{0} não possui um agendamento de profissionais de saúde. Adicione-o no master do Healthcare Practitioner, +{0} entered twice in Item Tax,{0} entrou duas vezes no Imposto do Item, +{0} for {1},{0} para {1}, +{0} has been submitted successfully,{0} foi enviado com sucesso, +{0} has fee validity till {1},{0} tem validade de taxa até {1}, +{0} hours,{0} horas, +{0} in row {1},{0} na linha {1}, +{0} is blocked so this transaction cannot proceed,{0} está bloqueado portanto essa transação não pode continuar, +{0} is mandatory,{0} é obrigatório, +{0} is mandatory for Item {1},{0} é obrigatório para o item {1}, +{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0} é obrigatório. Talvez o valor de câmbio não exista de {1} para {2}., +{0} is not a stock Item,{0} não é um item de estoque, +{0} is not a valid Batch Number for Item {1},{0} não é um número de lote válido para o item {1}, +{0} is not added in the table,{0} não é adicionado na tabela, +{0} is not in Optional Holiday List,{0} não está na lista de feriados opcional, +{0} is not in a valid Payroll Period,{0} não está em um período de folha de pagamento válido, +{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.,{0} é agora o Ano Fiscal padrão. Por favor atualize seu navegador para que a alteração tenha efeito., +{0} is on hold till {1},{0} está em espera até {1}, +{0} item found.,{0} item encontrado., +{0} items found.,{0} itens encontrados., +{0} items in progress,{0} itens em andamento, +{0} items produced,{0} itens produzidos, +{0} must appear only once,{0} deve aparecer apenas uma vez, +{0} must be negative in return document,{0} deve ser negativo no documento de devolução, +{0} must be submitted,{0} deve ser enviado, +{0} not allowed to transact with {1}. Please change the Company.,{0} não pode transacionar com {1}. Por favor altere a empresa., +{0} not found for item {1},{0} não encontrado para Item {1}, +{0} parameter is invalid,{0} parâmetro é inválido, +{0} payment entries can not be filtered by {1},{0} entradas de pagamento não podem ser filtrados por {1}, +{0} should be a value between 0 and 100,{0} deve ser um valor entre 0 e 100, +{0} units of [{1}](#Form/Item/{1}) found in [{2}](#Form/Warehouse/{2}),{0} unidades de [{1}] (# Form / Item / {1}) foram encontrados em [{2}] (# Form / Armazém / {2}), +{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction.,São necessárias {0} unidades de {1} em {2} em {3} {4} para {5} para concluir esta transação., +{0} units of {1} needed in {2} to complete this transaction.,São necessárias {0} unidades de {1} em {2} para concluir esta transação., +{0} valid serial nos for Item {1},{0} números de série válidos para o item {1}, +{0} variants created.,{0} variantes criadas., +{0} {1} created,{0} {1} criado, +{0} {1} does not exist,{0} {1} não existe, +{0} {1} has been modified. Please refresh.,{0} {1} foi modificado. Por favor atualize., +{0} {1} has not been submitted so the action cannot be completed,{0} {1} não foi enviado então a ação não pode ser concluída, +"{0} {1} is associated with {2}, but Party Account is {3}","{0} {1} está associado a {2}, mas a Conta do Partido é {3}", +{0} {1} is cancelled or closed,{0} {1} está cancelado(a) ou fechado(a), +{0} {1} is cancelled or stopped,{0} {1} está cancelado ou parado, +{0} {1} is cancelled so the action cannot be completed,{0} {1} é cancelado então a ação não pode ser concluída, +{0} {1} is closed,{0} {1} esta fechado(a), +{0} {1} is disabled,{0} {1} está desativado, +{0} {1} is frozen,{0} {1} está congelado, +{0} {1} is fully billed,{0} {1} está totalmente faturado, +{0} {1} is not active,{0} {1} não está ativo, +{0} {1} is not associated with {2} {3},{0} {1} não está associado com {2} {3}, +{0} {1} is not present in the parent company,{0} {1} não está presente na empresa controladora, +{0} {1} is not submitted,{0} {1} não foi enviado, +{0} {1} is {2},{0} {1} é {2}, +{0} {1} must be submitted,{0} {1} deve ser enviado, +{0} {1} not in any active Fiscal Year.,{0} {1} não está em nenhum ano fiscal ativo., +{0} {1} status is {2},O status {0} {1} é {2}, +{0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,"{0} {1}: o tipo de conta ""Lucros e Perdas"" {2} não é permitido num Registo de Entrada", +{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Conta {2} não pertence à empresa {3}, +{0} {1}: Account {2} is inactive,{0} {1}: Conta {2} está inativa, +{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: Entradas contabeis para {2} só pode ser feito em moeda: {3}, +{0} {1}: Cost Center is mandatory for Item {2},{0} {1}: Centro de Custo é obrigatória para item {2}, +{0} {1}: Cost Center is required for 'Profit and Loss' account {2}. Please set up a default Cost Center for the Company.,"{0} {1}: Centro de Custo é necessário para a conta de ""Lucros e Perdas"" {2}. Por favor, crie um Centro de Custo padrão para a Empresa.", +{0} {1}: Cost Center {2} does not belong to Company {3},{0} {1}: o centro de custo {2} não pertence à empresa {3}, +{0} {1}: Customer is required against Receivable account {2},{0} {1}: Um cliente é necessário contra contas a receber {2}, +{0} {1}: Either debit or credit amount is required for {2},{0} {1}: Um valor de débito ou crédito é necessário para {2}, +{0} {1}: Supplier is required against Payable account {2},{0} {1}: Fornecedor é necessário contra Conta a Pagar {2}, +{0}% Billed,{0}% faturado, +{0}% Delivered,{0}% entregue, +"{0}: Employee email not found, hence email not sent","{0}: Email do colaborador não encontrado, portanto o email não foi enviado", +{0}: From {0} of type {1},{0}: a partir de {0} do tipo {1}, +{0}: From {1},{0}: a partir de {1}, +{0}: {1} does not exists,{0}: {1} não existe, +{0}: {1} not found in Invoice Details table,{0}: {1} não foi encontrado na tabela Detalhes da Fatura, +{} of {},{} do {}, +Assigned To,Atribuído A, +Chat,Chat, +Completed By,Completado Por, +Conditions,Condições, +County,Distrito, +Day of Week,Dia da Semana, +"Dear System Manager,","Caro Administrador de Sistema,", +Default Value,Valor Padrão, +Email Group,Grupo de Email, +Email Settings,Configurações de Email, +Email not sent to {0} (unsubscribed / disabled),Email não foi enviado para {0} (inscrição anulada / desativado), +Error Message,Mensagem de Erro, +Fieldtype,Tipo de Campo, +Help Articles,Artigos de Ajuda, +ID,ID, +Images,Imagens, +Import,Importar, +Language,Idioma, +Likes,Gostos, +Merge with existing,Mesclar com existente, +Office,Escritório, +Orientation,Orientação, +Parent,Principal, +Passive,Passivo, +Payment Failed,Pagamento Falhou, +Percent,Por Cento, +Permanent,Permanente, +Personal,Pessoal, +Plant,Fábrica, +Post,Post, +Postal,Postal, +Postal Code,CEP, +Previous,Anterior, +Provider,Fornecedor, +Read Only,Somente Leitura, +Recipient,Destinatário, +Reviews,Revisões, +Sender,Remetente, +Shop,Loja, +Sign Up,Inscrever-se, +Subsidiary,Subsidiário, +There is some problem with the file url: {0},Há algum problema com a url do arquivo: {0}, +There were errors while sending email. Please try again.,Ocorreram erros durante o envio de email. Por favor tente novamente., +Values Changed,Valores Alterados, +or,ou, +Ageing Range 4,Faixa de Envelhecimento 4, +Allocated amount cannot be greater than unadjusted amount,Quantia alocada não pode ser maior que quantia não ajustada, +Allocated amount cannot be negative,Quantidade alocada não pode ser negativa, +"Difference Account must be a Asset/Liability type account, since this Stock Entry is an Opening Entry","A conta de diferença deve ser uma conta do tipo Ativos / passivos, uma vez que essa entrada de estoque é uma entrada de abertura", +Error in some rows,Erro em algumas linhas, +Import Successful,Importação Bem Sucedida, +Please save first,Por favor salve primeiro, +Price not found for item {0} in price list {1},Preço não encontrado para o item {0} na lista de preços {1}, +Warehouse Type,Tipo de Armazém, +'Date' is required,';Data'; é obrigatório, +Benefit,Benefício, +Budgets,Orçamentos, +Bundle Qty,Pacote Qtd, +Company GSTIN,Empresa Gstin, +Company field is required,Campo da empresa é obrigatório, +Creating Dimensions...,Criando Dimensões..., +Duplicate entry against the item code {0} and manufacturer {1},Entrada duplicada no código do item {0} e no fabricante {1}, +Invalid GSTIN! The input you've entered doesn't match the GSTIN format for UIN Holders or Non-Resident OIDAR Service Providers,GSTIN inválido! a entrada que você inseriu não corresponde ao formato GSTIN para os titulares de UIN ou para os provedores de serviços OIDAR não residentes, +Invoice Grand Total,Total Geral da Fatura, +Last carbon check date cannot be a future date,A última data de verificação de carbono não pode ser uma data futura, +Make Stock Entry,Fazer Entrada de Estoque, +Quality Feedback,Feedback de Qualidade, +Quality Feedback Template,Modelo de Feedback de Qualidade, +Rules for applying different promotional schemes.,Regras para aplicar diferentes esquemas promocionais., +Shift,Mudança, +Show {0},Mostrar {0}, +"Special Characters except ""-"", ""#"", ""."", ""/"", ""{"" and ""}"" not allowed in naming series","Caracteres especiais, exceto "-", "#", ".", "/", "{" e "}" não permitidos na série de nomenclatura", +Target Details,Detalhes do Alvo, +{0} already has a Parent Procedure {1}.,{0} já tem um procedimento pai {1}., +API,API, +Annual,Anual, +Approved,Aprovado, +Change,Alteração, +Contact Email,Email de Contato, +Export Type,Tipo de Exportação, +From Date,Data De, +Group By,Agrupar Por, +Importing {0} of {1},Importando {0} de {1}, +Invalid URL,URL inválida, +Landscape,Panorama, +Last Sync On,Última sincronização em, +Naming Series,Código Dos Documentos, +No data to export,Nenhum dado para exportar, +Portrait,Retrato, +Print Heading,Cabeçalho de Impressão, +Scheduler Inactive,Agendador Inativo, +Scheduler is inactive. Cannot import data.,O agendador está inativo. Não é possível importar dados., +Show Document,Mostrar Documento, +Show Traceback,Mostrar Traceback, +Video,Vídeo, +Webhook Secret,Segredo do Webhook, +% Of Grand Total,% do total geral, +'employee_field_value' and 'timestamp' are required.,';employee_field_value'; e ';timestamp'; são obrigatórios., +Company is a mandatory filter.,A empresa é um filtro obrigatório., +From Date is a mandatory filter.,A partir da data é um filtro obrigatório., +From Time cannot be later than To Time for {0},From Time não pode ser posterior a To Time para {0}, +To Date is a mandatory filter.,Até a data é um filtro obrigatório., +A new appointment has been created for you with {0},Um novo compromisso foi criado para você com {0}, +Account Value,Valor da Conta, +Account is mandatory to get payment entries,A conta é obrigatória para obter entradas de pagamento, +Account is not set for the dashboard chart {0},A conta não está definida para o gráfico do painel {0}, +Account {0} does not belong to company {1},A conta {0} não pertence à empresa {1}, +Account {0} does not exists in the dashboard chart {1},A conta {0} não existe no gráfico do painel {1}, +Account: {0} is capital Work in progress and can not be updated by Journal Entry,Conta: {0} é capital em andamento e não pode ser atualizado pela entrada de diário, +Account: {0} is not permitted under Payment Entry,Conta: {0} não é permitida em Entrada de pagamento, +Accounting Dimension {0} is required for 'Balance Sheet' account {1}.,A dimensão contábil {0} é necessária para a conta "Balanço" {1}., +Accounting Dimension {0} is required for 'Profit and Loss' account {1}.,A dimensão contábil {0} é necessária para a conta ';Lucros e perdas'; {1}., +Accounting Masters,Cadastros Contábeis, +Accounting Period overlaps with {0},Período de Contabilidade sobrepõe-se a {0}, +Activity,Atividade, +Add / Manage Email Accounts.,Adicionar / Gerenciar Contas de Email., +Add Child,Adicionar Sub-item, +Add Loan Security,Adicionar Garantia ao Empréstimo, +Add Multiple,Adicionar Múltiplos, +Add Participants,Adicione Participantes, +Add to Featured Item,Adicionar Ao Item Em Destaque, +Add your review,Adicione seu comentário, +Add/Edit Coupon Conditions,Adicionar / Editar Condições do Cupom, +Added to Featured Items,Adicionado Aos Itens Em Destaque, +Added {0} ({1}),Adicionado {0} ({1}), +Address Line 1,Endereço, +Addresses,Endereços, +Admission End Date should be greater than Admission Start Date.,A Data de término da admissão deve ser maior que a Data de início da admissão., +Against Loan,Contra Empréstimo, +Against Loan:,Contra Empréstimo:, +All,Todos, +All bank transactions have been created,Todas as transações bancárias foram criadas, +All the depreciations has been booked,Todas as depreciações foram registradas, +Allocation Expired!,Alocação Expirada!, +Allow Resetting Service Level Agreement from Support Settings.,Permitir redefinir o contrato de nível de serviço das configurações de suporte., +Amount of {0} is required for Loan closure,É necessário um valor de {0} para o fechamento do empréstimo, +Amount paid cannot be zero,O valor pago não pode ser zero, +Applied Coupon Code,Código de Cupom Aplicado, +Apply Coupon Code,Aplicar Código de Cupom, +Appointment Booking,Marcação de Consultas, +"As there are existing transactions against item {0}, you can not change the value of {1}","Como existem transações existentes contra item de {0}, você não pode alterar o valor de {1}", +Asset Id,ID do Recurso, +Asset Value,Valor Patrimonial, +Asset Value Adjustment cannot be posted before Asset's purchase date {0}.,O ajuste do valor do ativo não pode ser lançado antes da data de compra do ativo {0}., +Asset {0} does not belongs to the custodian {1},O ativo {0} não pertence ao custodiante {1}, +Asset {0} does not belongs to the location {1},O ativo {0} não pertence ao local {1}, +At least one of the Applicable Modules should be selected,Pelo menos um dos módulos aplicáveis deve ser selecionado, +Atleast one asset has to be selected.,Pelo menos um ativo deve ser selecionado., +Attendance Marked,Atendimento Marcado, +Attendance has been marked as per employee check-ins,A participação foi marcada como por check-ins de funcionários, +Authentication Failed,Autenticação Falhou, +Automatic Reconciliation,Reconciliação Automática, +Available For Use Date,Data de Uso Disponível, +Available Stock,Estoque Disponível, +"Available quantity is {0}, you need {1}","A quantidade disponível é {0}, você precisa de {1}", +BOM 1,BOM 1, +BOM 2,BOM 2, +BOM Comparison Tool,Ferramenta de Comparação de BOM, +BOM recursion: {0} cannot be child of {1},Recursão da BOM: {0} não pode ser filho de {1}, +BOM recursion: {0} cannot be parent or child of {1},Recursão de BOM: {0} não pode ser pai ou filho de {1}, +Back to Home,Retornar ao Início, +Back to Messages,Voltar Para Mensagens, +Bank Data mapper doesn't exist,O mapeador de dados bancários não existe, +Bank Details,Detalhes Bancários, +Bank account '{0}' has been synchronized,Conta bancária ';{0}'; foi sincronizada, +Bank account {0} already exists and could not be created again,A conta bancária {0} já existe e não pôde ser criada novamente, +Bank accounts added,Contas bancárias adicionadas, +Batch no is required for batched item {0},Lote não é necessário para o item em lote {0}, +Billing Date,Data de Cobrança, +Billing Interval Count cannot be less than 1,A contagem do intervalo de faturamento não pode ser menor que 1, +Blue,Azul, +Book,Livro, +Book Appointment,Anotação de Livro, +Brand,Marca, +Browse,Pesquisar, +Call Connected,Chamada Conectada, +Call Disconnected,Chamada Desconectada, +Call Missed,Chamada Perdida, +Call Summary,Resumo de Chamadas, +Call Summary Saved,Resumo de Chamadas Salvo, +Cancelled,Cancelado, +Cannot Calculate Arrival Time as Driver Address is Missing.,Não É Possível Calcular o Horário de Chegada Pois o Endereço do Driver Está Ausente., +Cannot Optimize Route as Driver Address is Missing.,Não É Possível Otimizar a Rota Pois o Endereço do Driver Está Ausente., +Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,Não é possível concluir a tarefa {0} pois sua tarefa dependente {1} não está concluída / cancelada., +Cannot create loan until application is approved,Não é possível criar empréstimo até que o aplicativo seja aprovado, +Cannot find a matching Item. Please select some other value for {0}.,Não consegue encontrar um item correspondente. Por favor selecione algum outro valor para {0}., +"Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Não é possível exceder o item {0} na linha {1} mais que {2}. Para permitir cobrança excessiva, defina a permissão nas Configurações de contas", +"Capacity Planning Error, planned start time can not be same as end time","Erro de planejamento de capacidade, a hora de início planejada não pode ser igual à hora de término", +Categories,Categorias, +Changes in {0},Alterações Em {0}, +Chart,Gráfico, +Choose a corresponding payment,Escolha um pagamento correspondente, +Click on the link below to verify your email and confirm the appointment,Clique no link abaixo para verificar seu e-mail e confirmar a consulta, +Close,Fechar, +Communication,Comunicação, +Compact Item Print,Imprimir Item no Formato Compacto, +Company,Empresa, +Company of asset {0} and purchase document {1} doesn't matches.,A empresa do ativo {0} e o documento de compra {1} não correspondem., +Compare BOMs for changes in Raw Materials and Operations,Compare listas técnicas para alterações nas matérias-primas e operações, +Compare List function takes on list arguments,A função de lista de comparação aceita argumentos da lista, +Complete,Concluído, +Completed,Concluído, +Completed Quantity,Quantidade Concluída, +Connect your Exotel Account to ERPNext and track call logs,Conecte sua conta Exotel ao ERPNext e acompanhe os registros de chamadas, +Connect your bank accounts to ERPNext,Conecte suas contas bancárias ao ERPNext, +Contact Seller,Contatar Vendedor, +Continue,Continuar, +Cost Center: {0} does not exist,Centro de custo: {0} não existe, +Couldn't Set Service Level Agreement {0}.,Não Foi Possível Definir o Nível de Serviço {0}., +Country,País, +Country Code in File does not match with country code set up in the system,O código do país no arquivo não corresponde ao código do país configurado no sistema, +Create New Contact,Criar Novo Contato, +Create New Lead,Criar Novo Lead, +Create Pick List,Criar Lista de Seleção, +Create Quality Inspection for Item {0},Criar Inspeção de Qualidade Para o Item {0}, +Creating Accounts...,Criando Contas..., +Creating bank entries...,Criando entradas bancárias..., +Credit limit is already defined for the Company {0},O limite de crédito já está definido para a empresa {0}, +Ctrl + Enter to submit,Ctrl + Enter para enviar, +Ctrl+Enter to submit,Ctrl + Enter para enviar, +Currency,Moeda, +Current Status,Status Atual, +Customer PO,PO Cliente, +Customize,Personalizar, +Daily,Diário, +Date,Data, +Date Range,Intervalo de Datas, +Date of Birth cannot be greater than Joining Date.,A data de nascimento não pode ser maior que a data de ingresso., +Dear,Caro, +Default,Padrão, +Define coupon codes.,Defina códigos de cupom., +Delayed Days,Dias Atrasados, +Delete,Excluir, +Delivered Quantity,Quantidade Entregue, +Delivery Notes,Notas de Entrega, +Depreciated Amount,Valor Depreciado, +Description,Descrição, +Designation,Designação, +Difference Value,Valor da Diferença, +Dimension Filter,Filtro de Dimensão, +Disabled,Desativado, +Disbursement and Repayment,Desembolso e Reembolso, +Distance cannot be greater than 4000 kms,Distância não pode ser maior que 4000 kms, +Do you want to submit the material request,Você deseja enviar a solicitação de material, +Doctype,Doctype, +Document {0} successfully uncleared,Documento {0} com sucesso não corrigido, +Download Template,Baixar Modelo, +Dr,Dr, +Due Date,Data de Vencimento, +Duplicate,Duplicar, +Duplicate Project with Tasks,Projeto duplicado com tarefas, +Duplicate project has been created,Projeto duplicado foi criado, +E-Way Bill JSON can only be generated from a submitted document,e-Way Bill JSON só pode ser gerado a partir de um documento enviado, +E-Way Bill JSON can only be generated from submitted document,e-Way Bill JSON só pode ser gerado a partir do documento enviado, +E-Way Bill JSON cannot be generated for Sales Return as of now,e-Way Bill JSON não pode ser gerado para retorno de vendas a partir de agora, +ERPNext could not find any matching payment entry,O ERPNext não conseguiu encontrar qualquer entrada de pagamento correspondente, +Earliest Age,Idade Mais Antiga, +Edit Details,Editar Detalhes, +Edit Profile,Editar Perfil, +Either GST Transporter ID or Vehicle No is required if Mode of Transport is Road,O ID do Transportador GST ou o Número do Veículo é necessário se o Modo de Transporte for Rodoviário, +Email,Email, +Email Campaigns,Campanhas de Email, +Employee ID is linked with another instructor,O ID do funcionário está vinculado a outro instrutor, +Employee Tax and Benefits,Imposto e Benefícios do Empregado, +Employee is required while issuing Asset {0},O funcionário é necessário ao emitir o Ativo {0}, +Employee {0} does not belongs to the company {1},O funcionário {0} não pertence à empresa {1}, +Enable Auto Re-Order,Ativar Reordenação Automática, +End Date of Agreement can't be less than today.,A data final do contrato não pode ser inferior a hoje., +End Time,Horário de Término, +Energy Point Leaderboard,Placar de Pontos de Energia, +Enter API key in Google Settings.,Digite a Chave da API Nas Configurações do Google., +Enter Supplier,Entrar no Fornecedor, +Enter Value,Digite o Valor, +Entity Type,Tipo de Entidade, +Error,Erro, +Error in Exotel incoming call,Erro na chamada recebida do Exotel, +Error: {0} is mandatory field,Erro: {0} é campo obrigatório, +Event Link,Link do Evento, +Exception occurred while reconciling {0},Ocorreu uma exceção ao reconciliar {0}, +Expected and Discharge dates cannot be less than Admission Schedule date,As datas esperadas e de alta não podem ser inferiores à data do horário de admissão, +Expire Allocation,Alocação de Expiração, +Expired,Expirado, +Export,Exportar, +Export not allowed. You need {0} role to export.,Exportação não é permitida. Você precisa da função {0} para exportar., +Failed to add Domain,Falha Ao Adicionar Domínio, +Fetch Items from Warehouse,Buscar itens do armazém, +Fetching...,Buscando..., +Field,Campo, +File Manager,Gestor de Arquivos, +Filters,Filtros, +Finding linked payments,Como encontrar pagamentos vinculados, +Fleet Management,Gestão de Frotas, +Following fields are mandatory to create address:,Os campos a seguir são obrigatórios para criar um endereço:, +For Month,Por Mês, +"For item {0} at row {1}, count of serial numbers does not match with the picked quantity","Para o item {0} na linha {1}, a contagem de números de série não corresponde à quantidade selecionada", +For operation {0}: Quantity ({1}) can not be greter than pending quantity({2}),Para a operação {0}: a quantidade ({1}) não pode ser melhor que a quantidade pendente ({2}), +For quantity {0} should not be greater than work order quantity {1},Para a quantidade {0} não deve ser maior que a quantidade da ordem de serviço {1}, +Free item not set in the pricing rule {0},Item gratuito não definido na regra de preço {0}, +From Date and To Date are Mandatory,A Partir da Data e Até a Data São Obrigatórias, +From employee is required while receiving Asset {0} to a target location,É necessário do funcionário ao receber o Ativo {0} em um local de destino, +Fuel Expense,Despesa de Combustível, +Future Payment Amount,Valor do Pagamento Futuro, +Future Payment Ref,Referência de Pagamento Futuro, +Future Payments,Pagamentos Futuros, +GST HSN Code does not exist for one or more items,O código GST HSN não existe para um ou mais itens, +Generate E-Way Bill JSON,Gerar e-Way Bill JSON, +Get Items,Obter Itens, +Get Outstanding Documents,Obter Documentos Pendentes, +Goal,Meta, +Greater Than Amount,Maior Que Quantidade, +Green,Verde, +Group,Grupo, +Group By Customer,Agrupar Por Cliente, +Group By Supplier,Agrupar Por Fornecedor, +Group Node,Grupo de Nós, +Group Warehouses cannot be used in transactions. Please change the value of {0},Armazéns de grupo não podem ser usados em transações. Altere o valor de {0}, +Help,Ajuda, +Help Article,Artigo de Ajuda, +"Helps you keep tracks of Contracts based on Supplier, Customer and Employee","Ajuda a acompanhar os contratos com base no fornecedor, cliente e funcionário", +Helps you manage appointments with your leads,Ajuda a gerenciar compromissos com seus leads, +Home,Início, +IBAN is not valid,IBAN não é válido, +Import Data from CSV / Excel files.,Importar dados de arquivos CSV / Excel., +In Progress,Em Progresso, +Incoming call from {0},Chamada recebida de {0}, +Incorrect Warehouse,Armazém Incorreto, +Intermediate,Intermediário, +Invalid Barcode. There is no Item attached to this barcode.,Código de barras inválido. Não há nenhum item anexado a este código de barras., +Invalid credentials,Credenciais inválidas, +Invite as User,Convidar Como Usuário, +Issue Priority.,Prioridade do Incidente., +Issue Type.,Tipo de Incidente., +"It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account.","Parece que há um problema com a configuração de distribuição do servidor. Em caso de falha, o valor será reembolsado em sua conta.", +Item Reported,Item Relatado, +Item listing removed,Lista de itens removidos, +Item quantity can not be zero,Quantidade de item não pode ser zero, +Item taxes updated,Impostos sobre itens atualizados, +Item {0}: {1} qty produced. ,Item {0}: {1} quantidade produzida., +Joining Date can not be greater than Leaving Date,A data de ingresso não pode ser maior que a data de saída, +Lab Test Item {0} already exist,O item de teste de laboratório {0} já existe, +Last Issue,Última edição, +Latest Age,Idade Mais Recente, +Leave application is linked with leave allocations {0}. Leave application cannot be set as leave without pay,O aplicativo de licença está vinculado às alocações de licença {0}. o pedido de licença não pode ser definido como licença sem pagamento, +Leaves Taken,Folhas Tiradas, +Less Than Amount,Menos Que Quantidade, +Liabilities,Passivo, +Loading...,Carregando..., +Loan Amount exceeds maximum loan amount of {0} as per proposed securities,O valor do empréstimo excede o valor máximo do empréstimo de {0} conforme as garantias propostas, +Loan Applications from customers and employees.,Pedidos de empréstimo de clientes e funcionários., +Loan Disbursement,Desembolso de Empréstimos, +Loan Processes,Processos de Empréstimos, +Loan Security,Garantias de Empréstimo, +Loan Security Pledge,Gravame da Garantia de Empréstimo, +Loan Security Pledge Created : {0},Gravame da Garantia do Empréstimo Criada: {0}, +Loan Security Price,Preço da Garantia do Empréstimo, +Loan Security Price overlapping with {0},Preço da Garantia do Empréstimo sobreposto com {0}, +Loan Security Unpledge,Liberação da Garantia de Empréstimo, +Loan Security Value,Valor da Garantia do Empréstimo, +Loan Type for interest and penalty rates,Tipo de empréstimo para taxas de juros e multas, +Loan amount cannot be greater than {0},O valor do empréstimo não pode ser maior que {0}, +Loan is mandatory,O empréstimo é obrigatório, +Loans,Empréstimos, +Loans provided to customers and employees.,Empréstimos concedidos a clientes e funcionários., +Location,Localização, +Log Type is required for check-ins falling in the shift: {0}.,O tipo de registro é necessário para check-ins que caem no turno: {0}., +Looks like someone sent you to an incomplete URL. Please ask them to look into it.,Parece que alguém lhe enviou a um URL incompleta. Por favor pedir-lhes para olhar para ele., +Make Journal Entry,Fazer Lançamento no Livro Diário, +Make Purchase Invoice,Maak Inkoopfactuur, +Manufactured,Fabricado, +Mark Work From Home,Marcar Trabalho de Casa, +Master,Cadastro, +Max strength cannot be less than zero.,A força máxima não pode ser menor que zero., +Maximum attempts for this quiz reached!,Máximo de tentativas para este teste alcançado!, +Message,Mensagem, +Missing Values Required,Faltando Valores Obrigatórios, +Mobile No,Telefone Celular, +Mobile Number,Número de Celular, +Month,Mês, +Name,Nome, +Near you,Perto de Você, +Net Profit/Loss,Lucro / Perda Líquida, +New Expense,Nova Despesa, +New Invoice,Nova Fatura, +New Payment,Novo Pagamento, +New release date should be in the future,A nova data de lançamento deve estar no futuro, +Newsletter,Newsletter, +No Account matched these filters: {},Nenhuma conta corresponde a esses filtros: {}, +No Employee found for the given employee field value. '{}': {},Nenhum funcionário encontrado para o valor do campo de empregado determinado. ';{}';: {}, +No Leaves Allocated to Employee: {0} for Leave Type: {1},Nenhuma Licença Atribuída Ao Empregado: {0} Para o Tipo de Licença: {1}, +No communication found.,Nenhuma comunicação encontrada., +No correct answer is set for {0},Nenhuma resposta correta está definida para {0}, +No description,Sem descrição, +No issue has been raised by the caller.,Nenhum problema foi levantado pelo chamador., +No items to publish,Nenhum item para publicar, +No outstanding invoices found,Nenhuma fatura pendente encontrada, +No outstanding invoices found for the {0} {1} which qualify the filters you have specified.,Nenhuma fatura pendente encontrada para o {0} {1} que qualifica os filtros que você especificou., +No outstanding invoices require exchange rate revaluation,Nenhuma fatura pendente requer reavaliação da taxa de câmbio, +No reviews yet,Ainda não há comentários, +No views yet,Ainda sem vistas, +Non stock items,Itens não estocáveis, +Not Allowed,Não Desejados, +Not allowed to create accounting dimension for {0},Não é permitido criar dimensão contábil para {0}, +Not permitted. Please disable the Lab Test Template,Não é permitido. Desative o modelo de teste de laboratório, +Note,Nota, +Notes: ,Notas:, +On Converting Opportunity,Sobre a Conversão de Oportunidades, +On Purchase Order Submission,No Envio do Pedido, +On Sales Order Submission,No Envio da Ordem do Cliente, +On Task Completion,Na Conclusão da Tarefa, +On {0} Creation,Na Criação de {0}, +Only .csv and .xlsx files are supported currently,Somente arquivos.csv e.xlsx são suportados atualmente, +Only expired allocation can be cancelled,Somente alocação expirada pode ser cancelada, +Only users with the {0} role can create backdated leave applications,Somente usuários com a função {0} podem criar aplicativos de licença antigos, +Open,Aberto, +Open Contact,Contato Aberto, +Open Lead,Lead Aberto, +Opening and Closing,Abertura e Fechamento, +Operating Cost as per Work Order / BOM,Custo Operacional Conforme Ordem de Serviço / Lista Técnica, +Order Amount,Valor do Pedido, +Page {0} of {1},Página {0} de {1}, +Paid amount cannot be less than {0},O valor pago não pode ser menor que {0}, +Parent Company must be a group company,A controladora deve ser uma empresa do grupo, +Passing Score value should be between 0 and 100,O valor da pontuação de aprovação deve estar entre 0 e 100, +Password policy cannot contain spaces or simultaneous hyphens. The format will be restructured automatically,A política de senha não pode conter espaços ou hífens simultâneos. o formato será reestruturado automaticamente, +Patient History,História do Paciente, +Pause,Pausa, +Pay,Pagar, +Payment Document Type,Tipo de Documento de Pagamento, +Payment Name,Nome do Pagamento, +Penalty Amount,Valor da Penalidade, +Pending,Pendente, +Performance,Atuação, +Period based On,Período baseado em, +Perpetual inventory required for the company {0} to view this report.,Inventário perpétuo necessário para a empresa {0} exibir este relatório., +Phone,Telefone, +Pick List,Lista de Escolhas, +Plaid authentication error,Erro de autenticação da manta, +Plaid public token error,Erro de token público de xadrez, +Plaid transactions sync error,Erro de sincronização de transações de xadrez, +Please check the error log for details about the import errors,Por favor verifique o log de erros para detalhes sobre os erros de importação., +Please create DATEV Settings for Company {}.,Crie configurações de DATEV para a empresa {}., +Please create adjustment Journal Entry for amount {0} ,Crie um lançamento contábil manual para o valor {0}, +Please do not create more than 500 items at a time,Por favor não crie mais de 500 itens de cada vez, +Please enter Difference Account or set default Stock Adjustment Account for company {0},Insira a Conta de diferença ou defina a Conta de ajuste de estoque padrão para a empresa {0}, +Please enter GSTIN and state for the Company Address {0},Por favor digite GSTIN e informe o endereço da empresa {0}, +Please enter Item Code to get item taxes,Digite o Código do item para obter os impostos do item, +Please enter Warehouse and Date,Entre o armazém e a data, +Please enter the designation,Por favor insira a designação, +Please login as a Marketplace User to edit this item.,Faça o login como um usuário do Marketplace para editar este item., +Please login as a Marketplace User to report this item.,Faça o login como usuário do Marketplace para relatar este item., +Please select Template Type to download template,Selecione Tipo de modelo para fazer o download do modelo, +Please select Applicant Type first,Selecione primeiro o tipo de candidato, +Please select Customer first,Por favor selecione o Cliente primeiro, +Please select Item Code first,Selecione primeiro o código do item, +Please select Loan Type for company {0},Selecione Tipo de empréstimo para a empresa {0}, +Please select a Delivery Note,Selecione uma nota de entrega, +Please select a Sales Person for item: {0},Selecione um vendedor para o item: {0}, +Please select another payment method. Stripe does not support transactions in currency '{0}',Selecione outro método de pagamento. Stripe não suporta transações em moeda ';{0}';, +Please select the customer.,Por favor selecione o cliente., +Please set a Supplier against the Items to be considered in the Purchase Order.,Defina um fornecedor em relação aos itens a serem considerados no pedido de compra., +Please set account heads in GST Settings for Compnay {0},Por favor defina os cabeçalhos de conta em Configurações de GST para Compnay {0}, +Please set an email id for the Lead {0},Por favor defina um email para o Lead {0}, +Please set default UOM in Stock Settings,Defina o UOM padrão nas Configurações de estoque, +Please set filter based on Item or Warehouse due to a large amount of entries.,Defina o filtro com base no Item ou no Armazém devido a uma grande quantidade de entradas., +Please set up the Campaign Schedule in the Campaign {0},Por Favor Configure o Calendário de Campanha na Campanha {0}, +Please set valid GSTIN No. in Company Address for company {0},Defina o número GSTIN válido no endereço da empresa para a empresa {0}, +Please set {0},Defina {0},customer +Please setup a default bank account for company {0},Por favor configure uma conta bancária padrão para a empresa {0}, +Please specify,Por favor especifique, +Please specify a {0},Por favor especifique um {0},lead +Pledge Status,Status da Promessa, +Pledge Time,Tempo da Promessa, +Printing,Impressão, +Priority,Prioridade, +Priority has been changed to {0}.,A prioridade foi alterada para {0}., +Priority {0} has been repeated.,A prioridade {0} foi repetida., +Processing XML Files,Processando Arquivos Xml, +Profitability,Rentabilidade, +Project,Projeto, +Proposed Pledges are mandatory for secured Loans,As promessas propostas são obrigatórias para empréstimos garantidos, +Provide the academic year and set the starting and ending date.,Forneça o ano acadêmico e defina as datas inicial e final., +Public token is missing for this bank,O token público está em falta neste banco, +Publish,Publicar, +Publish 1 Item,Publicar 1 Item, +Publish Items,Publicar Itens, +Publish More Items,Publicar Mais Itens, +Publish Your First Items,Publique Seus Primeiros Itens, +Publish {0} Items,Publicar {0} Itens, +Published Items,Itens Publicados, +Purchase Invoice cannot be made against an existing asset {0},A fatura de compra não pode ser feita com relação a um ativo existente {0}, +Purchase Invoices,Faturas de Compra, +Purchase Orders,Ordens de Compra, +Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,O recibo de compra não possui nenhum item para o qual a opção Retain Sample esteja ativada., +Purchase Return,Devolução de Compra, +Qty of Finished Goods Item,Quantidade de Item de Produtos Acabados, +Qty or Amount is mandatroy for loan security,Quantidade ou quantidade é mandatroy para garantia de empréstimo, +Quality Inspection required for Item {0} to submit,Inspeção de qualidade necessária para o item {0} enviar, +Quantity to Manufacture,Quantidade a Fabricar, +Quantity to Manufacture can not be zero for the operation {0},A quantidade a fabricar não pode ser zero para a operação {0}, +Quarterly,Trimestralmente, +Queued,Em Fila, +Quick Entry,Entrada Rápida, +Quiz {0} does not exist,Questionário {0} não existe, +Quotation Amount,Valor da Cotação, +Rate or Discount is required for the price discount.,Taxa ou desconto é necessário para o desconto no preço., +Reason,Motivo, +Reconcile Entries,Reconciliar Entradas, +Reconcile this account,Reconciliar esta conta, +Reconciled,Reconciliado, +Recruitment,Recrutamento, +Red,Vermelho, +Refreshing,Atualizando, +Release date must be in the future,Data de lançamento deve estar no futuro, +Relieving Date must be greater than or equal to Date of Joining,A Data de Alívio deve ser maior ou igual à Data de Ingresso, +Rename,Renomear, +Rename Not Allowed,Renomear Não Permitido, +Repayment Method is mandatory for term loans,O método de reembolso é obrigatório para empréstimos a prazo, +Repayment Start Date is mandatory for term loans,A data de início do reembolso é obrigatória para empréstimos a prazo, +Report Item,Item de Relatorio, +Report this Item,Denunciar este item, +Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Quantidade reservada para subcontratação: quantidade de matérias-primas para fazer itens subcontratados., +Reset,Redefinir, +Reset Service Level Agreement,Redefinir Acordo de Nível de Serviço, +Resetting Service Level Agreement.,Redefinindo o Acordo de Nível de Serviço., +Return amount cannot be greater unclaimed amount,O valor da devolução não pode ser maior que o valor não reclamado, +Review,Reveja, +Room,Quarto, +Room Type,Tipo de Quarto, +Row # ,Linha #, +Row #{0}: Accepted Warehouse and Supplier Warehouse cannot be same,Linha nº {0}: o Warehouse aceito e o Warehouse do fornecedor não podem ser iguais, +Row #{0}: Cannot delete item {1} which has already been billed.,Linha # {0}: não é possível excluir o item {1} que já foi faturado., +Row #{0}: Cannot delete item {1} which has already been delivered,Linha # {0}: não é possível excluir o item {1} que já foi entregue, +Row #{0}: Cannot delete item {1} which has already been received,Linha # {0}: não é possível excluir o item {1} que já foi recebido, +Row #{0}: Cannot delete item {1} which has work order assigned to it.,Linha # {0}: Não é possível excluir o item {1} que possui uma ordem de serviço atribuída a ele., +Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order.,Linha nº {0}: não é possível excluir o item {1} atribuído ao pedido de compra do cliente., +Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor,Linha nº {0}: não é possível selecionar o armazém do fornecedor ao fornecer matérias-primas ao subcontratado, +Row #{0}: Cost Center {1} does not belong to company {2},Linha # {0}: o centro de custo {1} não pertence à empresa {2}, +Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,Linha # {0}: a operação {1} não está concluída para {2} quantidade de produtos acabados na Ordem de Serviço {3}. Por favor atualize o status da operação através do Job Card {4}., +Row #{0}: Payment document is required to complete the transaction,Linha # {0}: documento de pagamento é necessário para concluir a transação, +Row #{0}: Serial No {1} does not belong to Batch {2},Linha # {0}: o número de série {1} não pertence ao lote {2}, +Row #{0}: Service End Date cannot be before Invoice Posting Date,Linha # {0}: a data de término do serviço não pode ser anterior à data de lançamento da fatura, +Row #{0}: Service Start Date cannot be greater than Service End Date,Linha # {0}: a data de início do serviço não pode ser maior que a data de término do serviço, +Row #{0}: Service Start and End Date is required for deferred accounting,Linha nº {0}: a data de início e término do serviço é necessária para a contabilidade diferida, +Row {0}: Invalid Item Tax Template for item {1},Linha {0}: modelo de imposto sobre itens inválido para o item {1}, +Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3}),Linha {0}: Quantidade não disponível para {4} no depósito {1} no momento da postagem da entrada ({2} {3}), +Row {0}: user has not applied the rule {1} on the item {2},Linha {0}: o usuário não aplicou a regra {1} no item {2}, +Row {0}:Sibling Date of Birth cannot be greater than today.,Linha {0}: a data de nascimento do irmão não pode ser maior que hoje., +Row({0}): {1} is already discounted in {2},Linha ({0}): {1} já está com desconto em {2}, +Rows Added in {0},Linhas Adicionadas Em {0}, +Rows Removed in {0},Linhas Removidas Em {0}, +Sanctioned Amount limit crossed for {0} {1},Limite do valor sancionado cruzado para {0} {1}, +Sanctioned Loan Amount already exists for {0} against company {1},O montante do empréstimo sancionado já existe para {0} contra a empresa {1}, +Save,Salvar, +Save Item,Salvar Item, +Saved Items,Itens Salvos, +Search Items ...,Pesquisar Itens..., +Search for a payment,Procurar por um pagamento, +Search for anything ...,Procurar por qualquer coisa..., +Search results for,Buscar resultados para, +Select All,Selecionar Tudo, +Select Difference Account,Selecione Uma Conta de Diferença, +Select a Default Priority.,Selecione Uma Prioridade Padrão., +Select a company,Selecione uma empresa, +Select finance book for the item {0} at row {1},Selecione o livro contábil para o item {0} na linha {1}, +Select only one Priority as Default.,Selecione apenas uma prioridade como padrão., +Seller Information,Informações do Vendedor, +Send,Enviar, +Send a message,Envie uma mensagem, +Sending,Enviando, +Sends Mails to lead or contact based on a Campaign schedule,Envia e-mails para Leads ou contatos baseado em um cronograma da campanha, +Serial Number Created,Número de Série Criado, +Serial Numbers Created,Números de Série Criados, +Serial no(s) required for serialized item {0},Número (s) de série requerido para o item serializado {0}, +Series,Série, +Server Error,Erro de Servidor, +Service Level Agreement has been changed to {0}.,O Acordo de Nível de Serviço foi alterado para {0}., +Service Level Agreement was reset.,O Contrato de Nível de Serviço foi redefinido., +Service Level Agreement with Entity Type {0} and Entity {1} already exists.,O Acordo de Nível de Serviço com o Tipo de Entidade {0} e a Entidade {1} já existe., +Set,Definir, +Set Meta Tags,Definir Meta Tags, +Set {0} in company {1},Defina {0} na empresa {1}, +Setup,Configuração, +Setup Wizard,Assistente de Configuração, +Shift Management,Gerenciamento de Turno, +Show Future Payments,Mostrar Pagamentos Futuros, +Show Linked Delivery Notes,Mostrar Notas de Entrega Vinculadas, +Show Sales Person,Mostrar Vendedor, +Show Stock Ageing Data,Mostrar Dados de Estoque, +Show Warehouse-wise Stock,Mostrar Estoque Em Armazém, +Size,Tamanho, +Something went wrong while evaluating the quiz.,Algo deu errado ao avaliar o quiz., +Sr,Sr, +Start,Iniciar, +Start Date cannot be before the current date,Data de início não pode ser anterior à data atual, +Start Time,Horário de Início, +Status,Status, +Status must be Cancelled or Completed,O status deve ser cancelado ou concluído, +Stock Balance Report,Relatório de Balanço de Estoque, +Stock Entry has been already created against this Pick List,A entrada de estoque já foi criada para esta lista de seleção, +Stock Ledger ID,ID do Razão de Estoque, +Stock Value ({0}) and Account Balance ({1}) are out of sync for account {2} and it's linked warehouses.,O valor do estoque ({0}) e o saldo da conta ({1}) estão fora de sincronia para a conta {2} e são armazéns vinculados., +Stores - {0},Lojas - {0}, +Student with email {0} does not exist,Aluno com email {0} não existe, +Submit Review,Enviar Revisão, +Submitted,Enviado, +Supplier Addresses And Contacts,Contatos e Endereços de Fornecedores, +Synchronize this account,Sincronize esta conta, +Tag,Tag, +Target Location is required while receiving Asset {0} from an employee,O local de destino é necessário ao receber o ativo {0} de um funcionário, +Target Location is required while transferring Asset {0},O local de destino é necessário ao transferir o ativo {0}, +Target Location or To Employee is required while receiving Asset {0},O local de destino ou o funcionário é necessário ao receber o ativo {0}, +Task's {0} End Date cannot be after Project's End Date.,A data de término da tarefa {0} não pode ser posterior à data de término do projeto., +Task's {0} Start Date cannot be after Project's End Date.,A data de início da tarefa {0} não pode ser posterior à data de término do projeto., +Tax Account not specified for Shopify Tax {0},Conta Fiscal não especificada para o Shopify Tax {0}, +Tax Total,Total do Imposto, +Template,Modelo, +The Campaign '{0}' already exists for the {1} '{2}',A campanha ';{0}'; já existe para o {1} ';{2}';, +The difference between from time and To Time must be a multiple of Appointment,A diferença entre time e Time deve ser um múltiplo de Compromisso, +The field Asset Account cannot be blank,O campo Conta do ativo não pode ficar em branco, +The field Equity/Liability Account cannot be blank,O campo Conta do patrimônio líquido / passivo não pode ficar em branco, +The following serial numbers were created:

    {0},Os seguintes números de série foram criados:

    {0}, +The parent account {0} does not exists in the uploaded template,A conta pai {0} não existe no modelo enviado, +The question cannot be duplicate,A pergunta não pode ser duplicada, +The selected payment entry should be linked with a creditor bank transaction,A entrada de pagamento selecionada deve estar vinculada a uma transação bancária do credor, +The selected payment entry should be linked with a debtor bank transaction,A entrada de pagamento selecionada deve estar vinculada a uma transação bancária devedora, +The total allocated amount ({0}) is greated than the paid amount ({1}).,O montante total alocado ({0}) é maior do que o valor pago ({1})., +There are no vacancies under staffing plan {0},Não há vagas no plano de equipe {0}, +This Service Level Agreement is specific to Customer {0},Este Acordo de Nível de Serviço é específico para o Cliente {0}, +This action will unlink this account from any external service integrating ERPNext with your bank accounts. It cannot be undone. Are you certain ?,Esta ação desvinculará esta conta de qualquer serviço externo que integre o ERPNext às suas contas bancárias. Não pode ser desfeito. Você está certo ?, +This bank account is already synchronized,Esta conta bancária já está sincronizada, +This bank transaction is already fully reconciled,Esta transação bancária já está totalmente reconciliada, +This employee already has a log with the same timestamp.{0},Este funcionário já possui um log com o mesmo timestamp. {0}, +This page keeps track of items you want to buy from sellers.,Esta página acompanha os itens que você deseja comprar dos vendedores., +This page keeps track of your items in which buyers have showed some interest.,Esta página acompanha seus itens nos quais os compradores demonstraram algum interesse., +Thursday,Quinta-feira, +Timing,Cronometragem, +Title,Título, +"To allow over billing, update ""Over Billing Allowance"" in Accounts Settings or the Item.","Para permitir o excesso de faturamento, atualize o "Over the Billing Allowance" em Accounts Settings ou no Item.", +"To allow over receipt / delivery, update ""Over Receipt/Delivery Allowance"" in Stock Settings or the Item.","Para permitir o recebimento / entrega excedente, atualize "Recebimento em excesso / Fornecimento de remessa" em Configurações de estoque ou no Item.", +To date needs to be before from date,Até a data precisa ser anterior à data, +Total,Total, +Total Early Exits,Total de Saídas Antecipadas, +Total Late Entries,Total de Entradas Tardias, +Total Payment Request amount cannot be greater than {0} amount,O valor total da solicitação de pagamento não pode ser maior que o valor {0}, +Total payments amount can't be greater than {},O valor total dos pagamentos não pode ser maior que {}, +Totals,Totais, +Training Event:,Evento de Treinamento:, +Transactions already retreived from the statement,Transações já recuperadas da declaração, +Transfer Material to Supplier,Transferência de Material Para Fornecedor, +Transport Receipt No and Date are mandatory for your chosen Mode of Transport,O recibo de transporte não e a data são obrigatórios para o seu modo de transporte escolhido, +Tuesday,Terça-feira, +Type,Tipo, +Unable to find Salary Component {0},Não é possível encontrar o componente Salary {0}, +Unable to find the time slot in the next {0} days for the operation {1}.,Não foi possível encontrar o horário nos próximos {0} dias para a operação {1}., +Unable to update remote activity,Não é possível atualizar a atividade remota, +Unknown Caller,Chamador Desconhecido, +Unlink external integrations,Desvincular integrações externas, +Unmarked Attendance for days,Presença não marcada por dias, +Unpublish Item,Cancelar Publicação de Item, +Unreconciled,Não Reconciliado, +Unsupported GST Category for E-Way Bill JSON generation,Categoria GST não suportada para geração JSON Bill E-Way, +Update,Atualizar, +Update Details,Detalhes da Atualização, +Update Taxes for Items,Atualizar Impostos Para Itens, +"Upload a bank statement, link or reconcile a bank account","Carregar extrato bancário, vincular ou reconciliar uma conta bancária", +Upload a statement,Carregar uma declaração, +Use a name that is different from previous project name,Use um nome diferente do nome do projeto anterior, +User {0} is disabled,Usuário {0} está desativado, +Users and Permissions,Usuários e Permissões, +Vacancies cannot be lower than the current openings,As vagas não podem ser inferiores às aberturas atuais, +Valid From Time must be lesser than Valid Upto Time.,O Valid From Time deve ser menor que o Valid Upto Time., +Valuation Rate required for Item {0} at row {1},Taxa de avaliação necessária para o item {0} na linha {1}, +Values Out Of Sync,Valores Fora de Sincronia, +Vehicle Type is required if Mode of Transport is Road,O tipo de veículo é obrigatório se o modo de transporte for rodoviário, +Vendor Name,Nome do Vendedor, +Verify Email,Verificar E-mail, +View,Visão, +View all issues from {0},Ver todas as edições de {0}, +View call log,Visualizar log de chamadas, +Warehouse,Armazém, +Warehouse not found against the account {0},Armazém não encontrado na conta {0}, +Welcome to {0},Bem-vindo Ao {0}, +Why do think this Item should be removed?,Por que você acha que esse item deve ser removido?, +Work Order {0}: Job Card not found for the operation {1},Ordem de Serviço {0}: Cartão de Trabalho não encontrado para a operação {1}, +Workday {0} has been repeated.,A jornada de trabalho {0} foi repetida., +XML Files Processed,Arquivos XML processados, +Year,Ano, +Yearly,Anualmente, +You,Você, +You are not allowed to enroll for this course,Você não tem permissão para se inscrever neste curso, +You are not enrolled in program {0},Você não está inscrito no programa {0}, +You can Feature upto 8 items.,Você pode destacar até 8 itens., +You can also copy-paste this link in your browser,Você também pode copiar e colar este link no seu navegador, +You can publish upto 200 items.,Você pode publicar até 200 itens., +You have to enable auto re-order in Stock Settings to maintain re-order levels.,Você precisa habilitar a reordenação automática nas Configurações de estoque para manter os níveis de reordenamento., +You must be a registered supplier to generate e-Way Bill,Você deve ser um fornecedor registrado para gerar e-Way Bill, +You need to login as a Marketplace User before you can add any reviews.,Você precisa fazer login como usuário do Marketplace antes de poder adicionar comentários., +Your Featured Items,Seus Itens Em Destaque, +Your Items,Seus Itens, +Your Profile,Seu Perfil, +Your rating:,Sua avaliação:, +and,e, +e-Way Bill already exists for this document,Bill e-Way já existe para este documento, +woocommerce - {0},woocommerce - {0}, +{0} Coupon used are {1}. Allowed quantity is exhausted,{0} o cupom usado é {1}. a quantidade permitida está esgotada, +{0} Name,{0} Nome, +{0} Operations: {1},{0} Operações: {1}, +{0} bank transaction(s) created,{0} transações bancárias criadas, +{0} bank transaction(s) created and {1} errors,{0} transacções bancárias criadas e {1} erros, +{0} can not be greater than {1},{0} não pode ser maior que {1}, +{0} conversations,{0} conversas, +{0} is not a company bank account,{0} não é uma conta bancária da empresa, +{0} is not a group node. Please select a group node as parent cost center,{0} não é um nó do grupo. Selecione um nó de grupo como centro de custo pai, +{0} is not the default supplier for any items.,{0} não é o fornecedor padrão para nenhum item., +{0} is required,{0} é necessário, +{0}: {1} must be less than {2},{0}: {1} deve ser menor que {2}, +{} is an invalid Attendance Status.,{} é um status de participação inválido., +{} is required to generate E-Way Bill JSON,{} é necessário para gerar e-Way Bill JSON, +"Invalid lost reason {0}, please create a new lost reason","Motivo perdido perdido {0}, crie um novo motivo perdido", +Profit This Year,Lucro Este Ano, +Total Expense,Custo Total, +Total Expense This Year,Despesa Total Este Ano, +Total Income,Renda Total, +Total Income This Year,Renda Total Este Ano, +Barcode,Código de Barras, +Bold,Negrito, +Center,Centro, +Clear,Limpar, +Comment,Comentário, +Comments,Comentários, +DocType,DocType, +Download,Baixar, +Left,Saiu, +Link,Link, +New,Novo, +Not Found,Não Encontrado, +Print,Impressão, +Reference Name,Nome de Referência, +Refresh,Atualizar, +Success,Sucesso, +Time,Tempo, +Value,Valor, +Actual,Real, +Add to Cart,Adicionar Ao Carrinho, +Days Since Last Order,Dias Desde a Última Compra, +In Stock,Em Estoque, +Loan Amount is mandatory,Montante do empréstimo é obrigatório, +Mode Of Payment,Forma de Pagamento, +No students Found,Nenhum Aluno Encontrado, +Not in Stock,Esgotado, +Please select a Customer,Selecione um Cliente, +Printed On,Impresso Em, +Received From,Recebido De, +Sales Person,Vendedor, +To date cannot be before From date,Até o momento não pode ser antes a partir da data, +Write Off,Abatimento, +{0} Created,{0} Criado, +Email Id,Email, +No,Não, +Reference Doctype,DocType de Referência, +User Id,ID do Usuário, +Yes,Sim, +Actual ,Real , +Add to cart,Adicionar ao carrinho, +Budget,Orçamento, +Chart of Accounts,Plano de Contas, +Customer database.,Banco de Dados de Clientes, +Days Since Last order,Dias desde a última compra, +Download as JSON,Baixe Como Json, +End date can not be less than start date,Data final não pode ser inferior a data de início, +For Default Supplier (Optional),Para Fornecedor Padrão (opcional), +From date cannot be greater than To date,A partir de data não pode ser maior que a Data, +Group by,Agrupar Por, +In stock,Em Estoque, +Item name,Nome do item, +Loan amount is mandatory,Montante do empréstimo é obrigatório, +Minimum Qty,Qtd Mínima, +More details,Mais detalhes, +Nature of Supplies,Natureza Dos Suprimentos, +No Items found.,Nenhum item encontrado., +No employee found,Nenhum colaborador encontrado, +No students found,Nenhum Aluno Encontrado, +Not in stock,Esgotado, +Not permitted,Não Permitido, +Open Issues ,Incidentes Em Aberto, +Open Projects ,Abrir Projetos, +Open To Do ,Tarefas Abertas, +Operation Id,ID da Operação, +Partially ordered,Parcialmente Comprados, +Please select company first,Por favor selecione Empresa primeiro, +Please select patient,Por favor selecione Paciente, +Printed On ,Impresso Em, +Projected qty,Qtde Projetada, +Sales person,Vendedor, +Serial No {0} Created,Nº de Série {0} Criado, +Source Location is required for the Asset {0},O local de origem é obrigatório para o ativo {0}, +Tax Id,CPF/CNPJ, +To Time,Até o Horário, +To date cannot be before from date,Até o momento não pode ser antes a partir da data, +Total Taxable value,Valor tributável total, +Upcoming Calendar Events ,Próximos Eventos no Calendário, +Value or Qty,Valor Ou Qtde, +Variance ,Variação, +Variant of,Variante De, +Write off,Abatimento, +hours,horas, +received from,Recebido de, +to,para, +Cards,Postais, +Percentage,Percentagem, +Failed to setup defaults for country {0}. Please contact support@erpnext.com,Falha na configuração dos padrões para o país {0}. Entre em contato com support@erpnext.com, +Row #{0}: Item {1} is not a Serialized/Batched Item. It cannot have a Serial No/Batch No against it.,Linha nº {0}: o item {1} não é um item serializado / em lote. Não pode ter um número de série / lote não., +Please set {0},Defina {0}, +Please set {0},Defina {0},supplier +Draft,Rascunho,"docstatus,=,0" +Cancelled,Cancelado,"docstatus,=,2" +Please setup Instructor Naming System in Education > Education Settings,Configure o Sistema de Nomenclatura do Instrutor em Educação> Configurações da Educação, +Please set Naming Series for {0} via Setup > Settings > Naming Series,Defina Naming Series Como {0} Em Configuração> Configurações> Naming Series, +UOM Conversion factor ({0} -> {1}) not found for item: {2},Fator de conversão de UOM ({0} -> {1}) não encontrado para o item: {2}, +Item Code > Item Group > Brand,Código do Item> Grupo de Itens> Marca, +Customer > Customer Group > Territory,Cliente> Grupo de Clientes> Território, +Supplier > Supplier Type,Fornecedor> Tipo de Fornecedor, +Please setup Employee Naming System in Human Resource > HR Settings,Configure o sistema de nomeação de funcionários em Recursos humanos> Configurações de RH, +Please setup numbering series for Attendance via Setup > Numbering Series,Configure séries de numeração para Presença em Configuração> Série de numeração, +The value of {0} differs between Items {1} and {2},O valor de {0} difere entre Itens {1} e {2}, +Auto Fetch,Auto Fetch, +Fetch Serial Numbers based on FIFO,Buscar números de série com base em FIFO, +"Outward taxable supplies(other than zero rated, nil rated and exempted)","Fornecimentos tributáveis externos (diferente de zero, zero e isentos)", +"To allow different rates, disable the {0} checkbox in {1}.","Para permitir taxas diferentes, desative a caixa de seleção {0} em {1}.", +Current Odometer Value should be greater than Last Odometer Value {0},O valor atual do odômetro deve ser maior que o valor do último odômetro {0}, +No additional expenses has been added,Nenhuma despesa adicional foi adicionada, +Asset{} {assets_link} created for {},Recurso {} {assets_link} criado para {}, +Row {}: Asset Naming Series is mandatory for the auto creation for item {},Linha {}: a série de nomenclatura de ativos é obrigatória para a criação automática do item {}, +Assets not created for {0}. You will have to create asset manually.,Recursos não criados para {0}. Você terá que criar o ativo manualmente., +{0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}.,{0} {1} possui entradas contábeis na moeda {2} para a empresa {3}. Selecione uma conta a receber ou a pagar com a moeda {2}., +Invalid Account,Conta Inválida, +Purchase Order Required,Pedido de Compra Obrigatório, +Purchase Receipt Required,Recibo de Compra Obrigatório, +Account Missing,Falta de Conta, +Requested,Solicitado, +Partially Paid,Parcialmente Pago, +Invalid Account Currency,Moeda de Conta Inválida, +"Row {0}: The item {1}, quantity must be positive number","Linha {0}: o item {1}, a quantidade deve ser um número positivo", +"Please set {0} for Batched Item {1}, which is used to set {2} on Submit.","Defina {0} para Item em lote {1}, que é usado para definir {2} ao Enviar.", +Expiry Date Mandatory,Data de Expiração Obrigatória, +Variant Item,Item Variante, +BOM 1 {0} and BOM 2 {1} should not be same,BOM 1 {0} e BOM 2 {1} não devem ser iguais, +Note: Item {0} added multiple times,Nota: Item {0} adicionado várias vezes, +YouTube,Youtube, +Vimeo,Vimeo, +Publish Date,Data de Publicação, +Duration,Duração, +Advanced Settings,Configurações Avançadas, +Path,Caminho, +Components,Componentes, +Verified By,Verificado Por, +Invalid naming series (. missing) for {0},Série de nomenclatura inválida (. Ausente) para {0}, +Filter Based On,Filtro Baseado Em, +Reqd by date,Entrega Esperada em, +Manufacturer Part Number {0} is invalid,Número da peça do fabricante {0} é inválido, +Invalid Part Number,Número de Peça Inválido, +Select atleast one Social Media from Share on.,Selecione pelo menos uma mídia social em Compartilhar., +Invalid Scheduled Time,Hora Programada Inválida, +Length Must be less than 280.,O comprimento deve ser inferior a 280., +Error while POSTING {0},Erro ao POSTAR {0}, +"Session not valid, Do you want to login?",Sessão inválida. Quer fazer o login?, +Session Active,Sessão Ativa, +Session Not Active. Save doc to login.,Sessão não ativa. Salve o documento para fazer o login., +Error! Failed to get request token.,Erro! Falha ao obter o token de solicitação., +Invalid {0} or {1},{0} ou {1} inválido, +Error! Failed to get access token.,Erro! Falha ao obter token de acesso., +Invalid Consumer Key or Consumer Secret Key,Chave do Consumidor Ou Chave Secreta do Consumidor Inválida, +Your Session will be expire in ,Sua sessão irá expirar em, + days., dias., +Session is expired. Save doc to login.,A sessão expirou. Salve o documento para fazer o login., +Error While Uploading Image,Erro Ao Enviar Imagem, +You Didn't have permission to access this API,Você não tinha permissão para acessar esta API, +Valid Upto date cannot be before Valid From date,A data de atualização válida não pode ser anterior à data de início de validade, +Valid From date not in Fiscal Year {0},Válido desde a data não no ano fiscal {0}, +Valid Upto date not in Fiscal Year {0},Data válida até a data não no ano fiscal {0}, +Group Roll No,Grupo Roll No, +Maintain Same Rate Throughout Sales Cycle,Manter o Mesmo Preço Durante Todo o Ciclo de Vendas, +"Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}.","Linha {1}: Quantidade ({0}) não pode ser uma fração. Para permitir isso, desative ';{2}'; no UOM {3}.", +Must be Whole Number,Deve Ser Número Inteiro, +Please setup Razorpay Plan ID,Por favor configure o ID do Plano Razorpay, +Contact Creation Failed,Falha na Criação do Contato, +{0} already exists for employee {1} and period {2},{0} já existe para funcionário {1} e período {2}, +Leaves Allocated,Folhas Alocadas, +Leaves Expired,Folhas Expiradas, +Leave Without Pay does not match with approved {} records,Sair sem pagar não corresponde aos registros {} aprovados, +Income Tax Slab not set in Salary Structure Assignment: {0},Placa de Imposto de Renda Não Definida na Atribuição da Estrutura Salarial: {0}, +Income Tax Slab: {0} is disabled,Slab de imposto de renda: {0} está desativado, +Income Tax Slab must be effective on or before Payroll Period Start Date: {0},A folha de imposto de renda deve entrar em vigor na ou antes da data de início do período da folha de pagamento: {0}, +No leave record found for employee {0} on {1},Nenhum registro de licença encontrado para o funcionário {0} em {1}, +Row {0}: {1} is required in the expenses table to book an expense claim.,Linha {0}: {1} é necessária na tabela de despesas para registrar um relatório de despesas., +Set the default account for the {0} {1},Defina a conta padrão para o {0} {1}, +(Half Day),(Meio dia), +Income Tax Slab,Laje de Imposto de Renda, +Row #{0}: Cannot set amount or formula for Salary Component {1} with Variable Based On Taxable Salary,Linha # {0}: Não é possível definir o valor ou fórmula para o componente de salário {1} com variável baseada no salário tributável, +Row #{}: {} of {} should be {}. Please modify the account or select a different account.,Linha nº {}: {} de {} deve ser {}. Modifique a conta ou selecione uma conta diferente., +Row #{}: Please asign task to a member.,Linha # {}: Atribua tarefa a um membro., +Process Failed,Falha no Processo, +Tally Migration Error,Erro de Migração de Tally, +Please set Warehouse in Woocommerce Settings,Defina o Armazém Nas Configurações de Comércio do Woocommerce, +Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same,Linha {0}: Delivery Warehouse ({1}) e Customer Warehouse ({2}) não podem ser iguais, +Row {0}: Due Date in the Payment Terms table cannot be before Posting Date,Linha {0}: a data de vencimento na tabela Condições de pagamento não pode ser anterior à data de lançamento, +Cannot find {} for item {}. Please set the same in Item Master or Stock Settings.,Não é possível encontrar {} para o item {}. Defina o mesmo no Item Master ou Configurações de estoque., +Row #{0}: The batch {1} has already expired.,Linha nº {0}: o lote {1} já expirou., +Start Year and End Year are mandatory,Ano inicial e ano final são obrigatórios, +GL Entry,Lançamento GL, +Cannot allocate more than {0} against payment term {1},Não é possível alocar mais de {0} nas condições de pagamento {1}, +The root account {0} must be a group,A conta raiz {0} deve ser um grupo, +Shipping rule not applicable for country {0} in Shipping Address,A regra de envio não se aplica ao país {0} no endereço de entrega, +Get Payments from,Receba pagamentos de, +Set Shipping Address or Billing Address,Definir Endereço de Entrega Ou Endereço de Cobrança, +Consultation Setup,Configuração de Consulta, +Fee Validity,Validade da Tarifa, +Laboratory Setup,Configuração do Laboratório, +Dosage Form,Formulário de Dosagem, +Records and History,Registros e História, +Patient Medical Record,Registro Médico do Paciente, +Rehabilitation,Reabilitação, +Exercise Type,Tipo de Exercício, +Exercise Difficulty Level,Nível de Dificuldade de Exercício, +Therapy Type,Tipo de Terapia, +Therapy Plan,Plano de Terapia, +Therapy Session,Sessão de Terapia, +Motor Assessment Scale,Escala de Avaliação Motora, +[Important] [ERPNext] Auto Reorder Errors,[Importante] [ERPNext] Erros de reordenamento automático, +"Regards,","Saudações,", +The following {0} were created: {1},Os seguintes {0} foram criados: {1}, +Work Orders,Ordens de Trabalho, +The {0} {1} created sucessfully,O {0} {1} foi criado com sucesso, +Work Order cannot be created for following reason:
    {0},A Ordem de Serviço não pode ser criada pelo seguinte motivo:
    {0}, +Add items in the Item Locations table,Adicionar itens na tabela de localização de itens, +Update Current Stock,Atualizar Estoque Atual, +"{0} Retain Sample is based on batch, please check Has Batch No to retain sample of item","{0} Retain Sample é baseado no lote, por favor, marque Has Batch no para reter a amostra do item", +Empty,Vazio, +Currently no stock available in any warehouse,Atualmente nenhum estoque disponível em qualquer armazém, +BOM Qty,BOM Qtd, +Time logs are required for {0} {1},Registros de tempo são necessários para {0} {1}, +Total Completed Qty,Total de Qtd Concluído, +Qty to Manufacture,Qtde Para Fabricar, +Repay From Salary can be selected only for term loans,Reembolso do salário pode ser selecionado apenas para empréstimos a prazo, +No valid Loan Security Price found for {0},Nenhuma Garantia de Empréstimo válida encontrado para {0}, +Loan Account and Payment Account cannot be same,A conta de empréstimo e a conta de pagamento não podem ser iguais, +Loan Security Pledge can only be created for secured loans,O Gravame de Garantia de Empréstimo só pode ser criado para empréstimos com garantias, +Social Media Campaigns,Campanhas de Mídia Social, +From Date can not be greater than To Date,A data inicial não pode ser maior que a data final, +Please set a Customer linked to the Patient,Defina um cliente vinculado ao paciente, +Customer Not Found,Cliente Não Encontrado, +Please Configure Clinical Procedure Consumable Item in ,Configure o Item Consumível de Procedimento Clínico Em, +Missing Configuration,Configuração Ausente, +Out Patient Consulting Charge Item,Item de Cobrança de Consulta Ao Paciente, +Inpatient Visit Charge Item,Item de Cobrança de Visita a Pacientes Internados, +OP Consulting Charge,Op Consulting Charge, +Inpatient Visit Charge,Taxa de Visita a Pacientes Internados, +Appointment Status,Status de Compromisso, +Test: ,Teste:, +Collection Details: ,Detalhes da Coleção:, +{0} out of {1},{0} de {1}, +Select Therapy Type,Selecione o Tipo de Terapia, +{0} sessions completed,{0} sessões concluídas, +{0} session completed,{0} sessão concluída, + out of {0}, de {0}, +Therapy Sessions,Sessões de Terapia, +Add Exercise Step,Adicionar Etapa de Exercício, +Edit Exercise Step,Editar Etapa do Exercício, +Patient Appointments,Compromissos do Paciente, +Item with Item Code {0} already exists,Item com código de item {0} já existe, +Registration Fee cannot be negative or zero,Taxa de registro não pode ser negativa ou zero, +Configure a service Item for {0},Configure um item de serviço para {0}, +Temperature: ,Temperatura:, +Pulse: ,Pulso:, +Respiratory Rate: ,Frequência Respiratória:, +BP: ,BP:, +BMI: ,IMC:, +Note: ,Nota:, +Check Availability,Verificar Disponibilidade, +Please select Patient first,Selecione primeiro o paciente, +Please select a Mode of Payment first,Selecione um modo de pagamento primeiro, +Please set the Paid Amount first,Defina o valor pago primeiro, +Not Therapies Prescribed,Não São Terapias Prescritas, +There are no Therapies prescribed for Patient {0},Não há terapias prescritas para o paciente {0}, +Appointment date and Healthcare Practitioner are Mandatory,A data da nomeação e o profissional de saúde são obrigatórios, +No Prescribed Procedures found for the selected Patient,Nenhum procedimento prescrito encontrado para o paciente selecionado, +Please select a Patient first,Selecione um paciente primeiro, +There are no procedure prescribed for ,Não há procedimento prescrito para, +Prescribed Therapies,Terapias Prescritas, +Appointment overlaps with ,Compromisso sobrepõe-se a, +{0} has appointment scheduled with {1} at {2} having {3} minute(s) duration.,{0} tem compromisso agendado para {1} às {2} tendo {3} minuto (s) de duração., +Appointments Overlapping,Compromissos Sobrepostos, +Consulting Charges: {0},Taxas de Consultoria: {0}, +Appointment Cancelled. Please review and cancel the invoice {0},Compromisso cancelado. Reveja e cancele a fatura {0}, +Appointment Cancelled.,Compromisso Cancelado., +Fee Validity {0} updated.,Validade da taxa {0} atualizada., +Practitioner Schedule Not Found,Agenda do Praticante Não Encontrada, +{0} is on a Half day Leave on {1},{0} está de licença de meio dia em {1}, +{0} is on Leave on {1},{0} está de licença em {1}, +{0} does not have a Healthcare Practitioner Schedule. Add it in Healthcare Practitioner,{0} não tem uma agenda de profissional de saúde. Adicione em Healthcare Practitioner, +Healthcare Service Units,Unidades de Serviço de Saúde, +Complete and Consume,Completar e Consumir, +Complete {0} and Consume Stock?,Concluir {0} e Consumir Estoque?, +Complete {0}?,Concluir {0}?, +Stock quantity to start the Procedure is not available in the Warehouse {0}. Do you want to record a Stock Entry?,Quantidade em estoque para iniciar o Procedimento não disponível no Armazém {0}. Você deseja registrar uma entrada de estoque?, +{0} as on {1},{0} como em {1}, +Clinical Procedure ({0}):,Procedimento Clínico ({0}):, +Please set Customer in Patient {0},Defina o Cliente no Paciente {0}, +Item {0} is not active,O item {0} não está ativo, +Therapy Plan {0} created successfully.,Plano de terapia {0} criado com sucesso., +Symptoms: ,Sintomas:, +No Symptoms,Sem Sintomas, +Diagnosis: ,Diagnóstico:, +No Diagnosis,Sem Diagnóstico, +Drug(s) Prescribed.,Medicamento (s) Prescrito (s)., +Test(s) Prescribed.,Teste (s) Prescrito (s)., +Procedure(s) Prescribed.,Procedimento (s) Prescrito (s)., +Counts Completed: {0},Contagens Concluídas: {0}, +Patient Assessment,Avaliação do Paciente, +Assessments,Assessments, +Heads (or groups) against which Accounting Entries are made and balances are maintained.,Heads (ou grupos) contra o qual as entradas de Contabilidade são feitas e os saldos são mantidos., +Account Name,Nome da Conta, +Inter Company Account,Conta Intercompanhia, +Parent Account,Conta Superior, +Setting Account Type helps in selecting this Account in transactions.,Definir o Tipo de Conta ajuda na seleção desta Conta nas transações., +Chargeable,Taxável, +Rate at which this tax is applied,Taxa em que este imposto é aplicado, +Frozen,Congelado, +"If the account is frozen, entries are allowed to restricted users.","Se a conta for congelada, os lançamentos só serão permitidos aos usuários restritos.", +Balance must be,O Saldo deve ser, +Lft,Esq, +Rgt,Dir, +Old Parent,Principal Antigo, +Include in gross,Incluir em bruto, +Auditor,Auditor, +Accounting Dimension,Dimensão Contábil, +Dimension Name,Nome da Dimensão, +Dimension Defaults,Padrões de Dimensão, +Accounting Dimension Detail,Detalhe da Dimensão Contábil, +Default Dimension,Dimensão Padrão, +Mandatory For Balance Sheet,Obrigatório Para o Balanço, +Mandatory For Profit and Loss Account,Obrigatório Para Conta de Lucros e Perdas, +Accounting Period,Período Contábil, +Period Name,Nome do Período, +Closed Documents,Documentos Fechados, +Accounts Settings,Configurações de Contas, +Settings for Accounts,Configurações Para Contas, +Make Accounting Entry For Every Stock Movement,Fazer Lançamento Contábil Para Cada Movimento de Estoque, +Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,Os usuários com esta função são autorizados a estabelecer contas congeladas e criar / modificar lançamentos contábeis contra contas congeladas, +Determine Address Tax Category From,Determinar a Categoria de Imposto de Endereço De, +Over Billing Allowance (%),Sobre o Abatimento de Cobrança (%), +Credit Controller,Controlador de Crédito, +Check Supplier Invoice Number Uniqueness,Verificar Unicidade de Número de Nota Fiscal do Fornecedor, +Make Payment via Journal Entry,Fazer o Pagamento Via Lançamento no Livro Diário, +Unlink Payment on Cancellation of Invoice,Desvincular Pagamento no Cancelamento da Fatura, +Book Asset Depreciation Entry Automatically,Lançar de Depreciação de Ativos no Livro Automaticamente, +Automatically Add Taxes and Charges from Item Tax Template,Adicionar automaticamente impostos e encargos do modelo de imposto do item, +Automatically Fetch Payment Terms,Buscar Automaticamente Condições de Pagamento, +Show Payment Schedule in Print,Mostrar Horário de Pagamento na Impressão, +Currency Exchange Settings,Configurações de Câmbio, +Allow Stale Exchange Rates,Permitir Taxas de Câmbio Defasadas, +Stale Days,Dias Fechados, +Report Settings,Configurações do Relatório, +Use Custom Cash Flow Format,Use o Formato de Fluxo de Caixa Personalizado, +Allowed To Transact With,Permitido Transacionar Com, +SWIFT number,Número rápido, +Branch Code,Código da Agência, +Address and Contact,Endereço e Contato, +Address HTML,Endereço Html, +Contact HTML,Contato Html, +Data Import Configuration,Configuração de Importação de Dados, +Bank Transaction Mapping,Mapeamento de Transações Bancárias, +Plaid Access Token,Token de Acesso Xadrez, +Company Account,Conta da Empresa, +Account Subtype,Subtipo de Conta, +Is Default Account,É a conta padrão, +Is Company Account,Conta Corporativa, +Party Details,Detalhes do Parceiro, +Account Details,Detalhes da Conta, +IBAN,IBAN, +Bank Account No,Número da Conta Bancária, +Integration Details,Detalhes de Integração, +Integration ID,ID de integração, +Last Integration Date,Última data de integração, +Change this date manually to setup the next synchronization start date,Altere esta data manualmente para configurar a próxima data de início da sincronização, +Mask,Mascarar, +Bank Account Subtype,Subtipo de Conta Bancária, +Bank Account Type,Tipo de Conta Bancária, +Bank Guarantee,Garantia Bancária, +Bank Guarantee Type,Tipo de Garantia Bancária, +Receiving,Recebendo, +Providing,Fornecendo, +Reference Document Name,Nome do Documento de Referência, +Validity in Days,Validade Em Dias, +Bank Account Info,Informações da Conta Bancária, +Clauses and Conditions,Cláusulas e Condições, +Other Details,Outros Detalhes, +Bank Guarantee Number,Número de Garantia Bancária, +Name of Beneficiary,Nome do Beneficiário, +Margin Money,Dinheiro Margem, +Charges Incurred,Taxas Incorridas, +Fixed Deposit Number,Número de Depósito Fixo, +Account Currency,Moeda da Conta, +Select the Bank Account to reconcile.,Selecione a conta bancária para reconciliar., +Include Reconciled Entries,Incluir Entradas Reconciliadas, +Get Payment Entries,Obter Lançamentos de Pagamentos, +Payment Entries,Lançamentos de Pagamentos, +Update Clearance Date,Atualizar Data Liquidação, +Bank Reconciliation Detail,Detalhe da Conciliação Bancária, +Cheque Number,Número do Cheque, +Cheque Date,Data do Cheque, +Statement Header Mapping,Mapeamento de Cabeçalho de Declaração, +Statement Headers,Cabeçalhos de Declaração, +Transaction Data Mapping,Mapeamento de Dados de Transação, +Mapped Items,Itens Mapeados, +Bank Statement Settings Item,Item de Configurações de Extrato Bancário, +Mapped Header,Cabeçalho Mapeado, +Bank Header,Cabeçalho do Banco, +Bank Statement Transaction Entry,Entrada de Transação de Extrato Bancário, +Bank Transaction Entries,Entradas de Transações Bancárias, +New Transactions,Novas Transações, +Match Transaction to Invoices,Corresponder Transação a Faturas, +Create New Payment/Journal Entry,Criar Novo Pagamento / Entrada no Diário, +Submit/Reconcile Payments,Enviar / Reconciliar Pagamentos, +Matching Invoices,Faturas Correspondentes, +Payment Invoice Items,Itens de Fatura de Pagamento, +Reconciled Transactions,Transações Reconciliadas, +Bank Statement Transaction Invoice Item,Item de Fatura de Transação de Extrato Bancário, +Payment Description,Descrição de Pagamento, +Invoice Date,Data do Faturamento, +invoice,fatura, +Bank Statement Transaction Payment Item,Item de Pagamento de Transação de Extrato Bancário, +outstanding_amount,quantidade_exclusiva, +Payment Reference,Referência de Pagamento, +Bank Statement Transaction Settings Item,Item de Configuração de Transação de Extrato Bancário, +Bank Data,Dados Bancários, +Mapped Data Type,Tipo de Dados Mapeados, +Mapped Data,Dados Mapeados, +Bank Transaction,Transação Bancária, +ACC-BTN-.YYYY.-,ACC-BTN-.YYYY.-, +Transaction ID,ID da Transação, +Unallocated Amount,Total Não Alocado, +Field in Bank Transaction,Campo Em Transação Bancária, +Column in Bank File,Coluna no Arquivo Bancário, +Bank Transaction Payments,Pagamentos de Transações Bancárias, +Control Action,Ação de Controle, +Applicable on Material Request,Aplicável no Pedido de Material, +Action if Annual Budget Exceeded on MR,Ação Se o Orçamento Anual Ultrapassar, +Warn,Avisar, +Ignore,Ignorar, +Action if Accumulated Monthly Budget Exceeded on MR,Ação Se o Orçamento Mensal Acumulado For Excedido Em Mr, +Applicable on Purchase Order,Aplicável no Pedido, +Action if Annual Budget Exceeded on PO,Ação Se o Orçamento Anual Ultrapassar, +Action if Accumulated Monthly Budget Exceeded on PO,Ação Se o Orçamento Mensal Acumulado For Excedido no Po, +Applicable on booking actual expenses,Aplicável na reserva de despesas reais, +Action if Annual Budget Exceeded on Actual,Ação Se o Orçamento Anual Ultrapassar, +Action if Accumulated Monthly Budget Exceeded on Actual,Ação Se Orçamento Mensal Acumulado Excedido Em Reais, +Budget Accounts,Contas do Orçamento, +Budget Account,Conta do Orçamento, +Budget Amount,Valor do Orçamento, +C-Form,Formulário-c, +ACC-CF-.YYYY.-,ACC-CF-.YYYY.-, +C-Form No,Nº do Formulário-c, +Received Date,Data de Recebimento, +Quarter,Trimestre, +I,I, +II,II, +III,III, +IV,IV, +C-Form Invoice Detail,Detalhe Fatura do Formulário-c, +Invoice No,Nota Nº, +Cash Flow Mapper,Mapeador de Fluxo de Caixa, +Section Name,Nome da Seção, +Section Header,Cabeçalho da Seção, +Section Leader,Líder da Seção, +e.g Adjustments for:,por exemplo ajustes para:, +Section Subtotal,Subtotal de Seção, +Section Footer,Rodapé de Seção, +Position,Posição, +Cash Flow Mapping,Mapeamento de Fluxo de Caixa, +Select Maximum Of 1,Selecione Máximo de 1, +Is Finance Cost,O Custo Das Finanças, +Is Working Capital,É capital de trabalho, +Is Finance Cost Adjustment,É o Ajuste de Custo Financeiro, +Is Income Tax Liability,É Responsabilidade Fiscal de Renda, +Is Income Tax Expense,É a despesa de imposto de renda, +Cash Flow Mapping Accounts,Contas de Mapeamento de Fluxo de Caixa, +account,Conta, +Cash Flow Mapping Template,Modelo de Mapeamento de Fluxo de Caixa, +Cash Flow Mapping Template Details,Detalhes do Modelo de Mapeamento de Fluxo de Caixa, +POS-CLO-,POS-CLO-, +Custody,Custódia, +Net Amount,Valor Líquido, +Cashier Closing Payments,Pagamentos de Fechamento do Caixa, +Chart of Accounts Importer,Importador de Plano de Contas, +Import Chart of Accounts from a csv file,Importar Plano de Contas de um arquivo csv, +Attach custom Chart of Accounts file,Anexar arquivo de Plano de Contas personalizado, +Chart Preview,Visualização de Gráfico, +Chart Tree,Árvore de gráfico, +Cheque Print Template,Template Para Impressão de Cheques, +Has Print Format,Tem Formato de Impressão, +Primary Settings,Definições Principais, +Cheque Size,Tamanho da Folha de Cheque, +Regular,Regular, +Starting position from top edge,Posição de início a partir do limite superior, +Cheque Width,Largura do Cheque, +Cheque Height,Altura do Cheque, +Scanned Cheque,Cheque Escaneado, +Is Account Payable,É Uma Conta a Pagar, +Distance from top edge,Distância da margem superior, +Distance from left edge,Distância da margem esquerda, +Message to show,Mensagem a mostrar, +Date Settings,Configurações de Data, +Starting location from left edge,Localização inicial a partir do lado esquerdo, +Payer Settings,Configurações do Pagador, +Width of amount in word,Largura do valor por extenso, +Line spacing for amount in words,Espaçamento entre linhas para o valor por extenso, +Amount In Figure,Total Em Espécie, +Signatory Position,Posição do Signatário, +Closed Document,Documento Fechado, +Track separate Income and Expense for product verticals or divisions.,Acompanhe resultados separada e despesa para verticais de produtos ou divisões., +Cost Center Name,Nome do Centro de Custo, +Parent Cost Center,Centro de Custo Pai, +lft,Esq, +rgt,rgt, +Coupon Code,Código do Cupom, +Coupon Name,Nome do Cupom, +"e.g. ""Summer Holiday 2019 Offer 20""","por exemplo, "Oferta de férias de verão 2019 20"", +Coupon Type,Tipo de Cupom, +Promotional,Promocional, +Gift Card,Cartão Presente, +unique e.g. SAVE20 To be used to get discount,exclusivo por exemplo SAVE20 Para ser usado para obter desconto, +Validity and Usage,Validade e Uso, +Valid From,Válido De, +Valid Upto,Válido Até, +Maximum Use,Uso Máximo, +Used,Usava, +Coupon Description,Descrição do Cupom, +Discounted Invoice,Fatura Descontada, +Debit to,Débito Para, +Exchange Rate Revaluation,Reavaliação da Taxa de Câmbio, +Get Entries,Receber Entradas, +Exchange Rate Revaluation Account,Conta de Reavaliação da Taxa de Câmbio, +Total Gain/Loss,Ganho / Perda Total, +Balance In Account Currency,Saldo Em Moeda da Conta, +Current Exchange Rate,Taxa de Câmbio Atual, +Balance In Base Currency,Saldo Em Moeda Base, +New Exchange Rate,Nova Taxa de Câmbio, +New Balance In Base Currency,Novo Saldo Em Moeda Base, +Gain/Loss,Ganho / Perda, +**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.,O **Ano Fiscal** representa um exercício financeiro. Todos os lançamentos contábeis e outras transações principais são rastreadas contra o **Ano Fiscal**., +Year Name,Nome do Ano, +"For e.g. 2012, 2012-13","Para por exemplo 2012, 2012-13", +Year Start Date,Data do Início do Ano, +Year End Date,Data Final do Ano, +Companies,Empresas, +Auto Created,Criado Automaticamente, +Stock User,Usuário de Estoque, +Fiscal Year Company,Ano Fiscal Empresa, +Debit Amount,Total do Débito, +Credit Amount,Total de Crédito, +Debit Amount in Account Currency,Débito Em Moeda da Conta, +Credit Amount in Account Currency,Crédito Em Moeda da Conta, +Voucher Detail No,Nº do Detalhe do Comprovante, +Is Opening,É Abertura, +Is Advance,É Adiantamento, +To Rename,Renomear, +GST Account,Conta GST, +CGST Account,Conta CGST, +SGST Account,Conta SGST, +IGST Account,Conta IGST, +CESS Account,Conta CESS, +Loan Start Date,Data de Início do Empréstimo, +Loan Period (Days),Período de Empréstimo (dias), +Loan End Date,Data Final do Empréstimo, +Bank Charges,Taxas Bancarias, +Short Term Loan Account,Conta de Empréstimo a Curto Prazo, +Bank Charges Account,Conta Bancária, +Accounts Receivable Credit Account,Conta de Crédito de Contas a Receber, +Accounts Receivable Discounted Account,Conta Com Desconto de Contas a Receber, +Accounts Receivable Unpaid Account,Conta Não Paga de Contas a Receber, +Item Tax Template,Modelo de Impostos Por Item, +Tax Rates,Taxas de Impostos, +Item Tax Template Detail,Detalhe do Modelo de Imposto de Item, +Entry Type,Tipo de Lançamento, +Inter Company Journal Entry,Entrada de Diário Entre Empresas, +Bank Entry,Lançamento Bancário, +Cash Entry,Entrada de Caixa, +Credit Card Entry,Lançamento de Cartão de Crédito, +Contra Entry,Contrapartida de Entrada, +Excise Entry,Lançamento de Impostos, +Write Off Entry,Lançamento de Abatimento, +Opening Entry,Lançamento de Abertura, +ACC-JV-.YYYY.-,ACC-JV-.YYYY.-, +Accounting Entries,Lançamentos Contábeis, +Total Debit,Débito Total, +Total Credit,Crédito Total, +Difference (Dr - Cr),Diferença ( Dr - Cr), +Make Difference Entry,Criar Lançamento de Contrapartida, +Total Amount Currency,Valor Total da Moeda, +Total Amount in Words,Valor Total Por Extenso, +Remark,Observação, +Paid Loan,Empréstimo Pago, +Inter Company Journal Entry Reference,Referência de Entrada de Diário Entre Empresas, +Write Off Based On,Abater Baseado Em, +Get Outstanding Invoices,Obter Notas Pendentes, +Write Off Amount,Valor do Abatimento, +Printing Settings,Configurações de Impressão, +Pay To / Recd From,Pagar Para / Recebido De, +Payment Order,Ordem de Pagamento, +Subscription Section,Seção de Inscrição, +Journal Entry Account,Conta de Lançamento no Livro Diário, +Account Balance,Saldo da Conta, +Party Balance,Saldo do Parceiro, +Accounting Dimensions,Dimensões Contábeis, +If Income or Expense,Se É Receita Ou Despesa, +Exchange Rate,Taxa de Câmbio, +Debit in Company Currency,Débito Em Moeda da Empresa, +Credit in Company Currency,Crédito Em Moeda da Empresa, +Payroll Entry,Entrada de Folha de Pagamento, +Employee Advance,Adiantamento À Colaboradores, +Reference Due Date,Data de Vencimento de Referência, +Loyalty Program Tier,Nível do Programa de Fidelidade, +Redeem Against,Resgatar Contra, +Expiry Date,Data de Validade, +Loyalty Point Entry Redemption,Resgate de Entrada do Ponto de Fidelidade, +Redemption Date,Data de Resgate, +Redeemed Points,Pontos Redimidos, +Loyalty Program Name,Nome do Programa de Fidelidade, +Loyalty Program Type,Tipo de Programa de Fidelidade, +Single Tier Program,Programa de Camada Única, +Multiple Tier Program,Programa de Múltiplos Níveis, +Customer Territory,Território do Cliente, +Auto Opt In (For all customers),Auto Opt In (para todos os clientes), +Collection Tier,Camada de Coleta, +Collection Rules,Regras de Coleta, +Redemption,Redenção, +Conversion Factor,Fator de Conversão, +1 Loyalty Points = How much base currency?,1 Pontos de fidelidade = Quanto de moeda base?, +Expiry Duration (in days),Duração de expiração (em dias), +Help Section,Seção de Ajuda, +Loyalty Program Help,Ajuda do Programa de Fidelidade, +Loyalty Program Collection,Coleção de Programas de Fidelidade, +Tier Name,Nome do Nível, +Minimum Total Spent,Total Mínimo Gasto, +Collection Factor (=1 LP),Fator de Coleta (= 1 Lp), +For how much spent = 1 Loyalty Point,Por quanto gastou = 1 Ponto de fidelidade, +Mode of Payment Account,Modo de Pagamento da Conta, +Default Account,Conta Padrão, +Default account will be automatically updated in POS Invoice when this mode is selected.,A conta padrão será atualizada automaticamente na Fatura POS quando esse modo for selecionado., +**Monthly Distribution** helps you distribute the Budget/Target across months if you have seasonality in your business.,A **Distribuição Mensal** ajuda-o a distribuir o Orçamento/Meta por vários meses caso o seu negócio seja sazonal., +Distribution Name,Nome da Distribuição, +Name of the Monthly Distribution,Nome da Distribuição Mensal, +Monthly Distribution Percentages,Percentagens Distribuição Mensal, +Monthly Distribution Percentage,Distribuição Percentual Mensal, +Percentage Allocation,Alocação Percentual, +Create Missing Party,Criar Parceiro Desaparecido, +Create missing customer or supplier.,Criar cliente ou fornecedor faltando., +Opening Invoice Creation Tool Item,Item de Ferramenta de Criação de Fatura de Abertura, +Temporary Opening Account,Conta de Abertura Temporária, +Party Account,Conta do Parceiro, +Type of Payment,Tipo de Pagamento, +ACC-PAY-.YYYY.-,ACC-PAY-.YYYY.-, +Receive,Receber, +Internal Transfer,Transferência Interna, +Payment Order Status,Status do Pedido de Pagamento, +Payment Ordered,Pagamento Pedido, +Payment From / To,Pagamento de / Para, +Company Bank Account,Conta Bancária da Empresa, +Party Bank Account,Conta Bancária do Parceiro, +Account Paid From,Conta de Origem do Pagamento, +Account Paid To,Recebido na Conta, +Paid Amount (Company Currency),Valor Pago (moeda da Empresa), +Received Amount,Total Recebido, +Received Amount (Company Currency),Total Recebido (moeda da Empresa), +Get Outstanding Invoice,Obter Fatura Pendente, +Payment References,Referências de Pagamento, +Writeoff,Liquidar, +Total Allocated Amount,Total Alocado, +Total Allocated Amount (Company Currency),Total Alocado (moeda da Empresa), +Set Exchange Gain / Loss,Definir Perda/ganho Com Câmbio, +Difference Amount (Company Currency),Total da Diferença (moeda da Empresa), +Write Off Difference Amount,Valor da Diferença do Abatimento, +Deductions or Loss,Dedução Ou Perda, +Payment Deductions or Loss,Deduções Ou Perdas de Pagamento, +Cheque/Reference Date,Data do Cheque/referência, +Payment Entry Deduction,Dedução de Registo de Pagamento, +Payment Entry Reference,Referência de Registo de Pagamento, +Allocated,Alocado, +Payment Gateway Account,Integração Com Api's de Meios de Pagamento, +Payment Account,Conta de Pagamento, +Default Payment Request Message,Mensagem Padrão de Pedido de Pagamento, +PMO-,PMO-, +Payment Order Type,Tipo de Ordem de Pagamento, +Payment Order Reference,Referência de Pedido de Pagamento, +Bank Account Details,Detalhes da Conta Bancária, +Payment Reconciliation,Conciliação de Pagamento, +Receivable / Payable Account,Conta de Recebimento/pagamento, +Bank / Cash Account,Banco / Conta Caixa, +From Invoice Date,A Partir da Data de Faturamento, +To Invoice Date,Até a Data de Faturamento, +Minimum Invoice Amount,Valor Mínimo da Fatura, +Maximum Invoice Amount,Valor Máximo da Fatura, +System will fetch all the entries if limit value is zero.,O sistema buscará todas as entradas se o valor limite for zero., +Get Unreconciled Entries,Obter Lançamentos Não Conciliados, +Unreconciled Payment Details,Detalhes do Pagamento Não Conciliado, +Invoice/Journal Entry Details,Detalhes da Fatura/lançamento no Livro Diário, +Payment Reconciliation Invoice,Fatura da Conciliação de Pagamento, +Invoice Number,Número da Nota Fiscal, +Payment Reconciliation Payment,Pagamento da Conciliação de Pagamento, +Reference Row,Linha de Referência, +Allocated amount,Quantidade atribuída, +Payment Request Type,Solicitação de Pagamento, +Outward,Para Fora, +Inward,Interior, +ACC-PRQ-.YYYY.-,ACC-PRQ-.YYYY.-, +Transaction Details,Detalhes da Transação, +Amount in customer's currency,Total em moeda do cliente, +Is a Subscription,É uma assinatura, +Transaction Currency,Moeda de Transação, +Subscription Plans,Planos de Subscrição, +SWIFT Number,Número Rápido, +Recipient Message And Payment Details,Mensagem e Dados de Pagamento do Destinatário, +Make Sales Invoice,Fazer Fatura de Venda, +Mute Email,Mudo Email, +payment_url,payment_url, +Payment Gateway Details,Dados do Portal de Pagamento, +Payment Schedule,Agenda de Pagamentos, +Invoice Portion,Porção de Fatura, +Payment Amount,Valor do Pagamento, +Payment Term Name,Nome do Prazo de Pagamento, +Due Date Based On,Data de Vencimento Baseada Em, +Day(s) after invoice date,Dia (s) após a data da factura, +Day(s) after the end of the invoice month,Dia (s) após o final do mês da fatura, +Month(s) after the end of the invoice month,Mês (s) após o final do mês da factura, +Credit Days,Dias de Crédito, +Credit Months,Meses de Crédito, +Allocate Payment Based On Payment Terms,Alocar o Pagamento Com Base Nas Condições de Pagamento, +"If this checkbox is checked, paid amount will be splitted and allocated as per the amounts in payment schedule against each payment term","Se esta caixa de seleção estiver marcada, o valor pago será dividido e alocado de acordo com os valores na programação de pagamento contra cada condição de pagamento", +Payment Terms Template Detail,Detalhes do Modelo de Termos de Pagamento, +Closing Fiscal Year,Encerramento do Exercício Fiscal, +Closing Account Head,Conta de Fechamento, +"The account head under Liability or Equity, in which Profit/Loss will be booked","Conta sob Passivo ou Capital Próprio, no qual o Lucro / Prejuízo será escrito", +POS Customer Group,Grupo de Cliente PDV, +POS Field,Campo POS, +POS Item Group,Grupo de Itens PDV, +Company Address,Endereço da Companhia, +Update Stock,Atualizar Estoque, +Ignore Pricing Rule,Ignorar Regra de Preços, +Applicable for Users,Aplicável Para Usuários, +Sales Invoice Payment,Pagamento da Fatura de Venda, +Item Groups,Grupos de Itens, +Only show Items from these Item Groups,Mostrar apenas itens desses grupos de itens, +Customer Groups,Grupos de Clientes, +Only show Customer of these Customer Groups,Mostrar apenas o cliente desses grupos de clientes, +Write Off Account,Conta de Abatimentos, +Write Off Cost Center,Centro de Custo do Abatimento, +Account for Change Amount,Conta Para Troco, +Taxes and Charges,Impostos e Encargos, +Apply Discount On,Aplicar Discount On, +POS Profile User,Perfil de Usuário do PDV, +Apply On,Aplicar Em, +Price or Product Discount,Preço Ou Desconto do Produto, +Apply Rule On Item Code,Aplicar Regra no Código do Item, +Apply Rule On Item Group,Aplicar Regra no Grupo de Itens, +Apply Rule On Brand,Aplique a Regra na Marca, +Mixed Conditions,Condições Mistas, +Conditions will be applied on all the selected items combined. ,As condições serão aplicadas em todos os itens selecionados combinados., +Is Cumulative,É cumulativo, +Coupon Code Based,Baseado Em Código de Cupom, +Discount on Other Item,Desconto no Outro Item, +Apply Rule On Other,Aplicar Regra a Outras, +Party Information,Informação do Parceiro, +Quantity and Amount,Quantidade e Quantidade, +Min Qty,Qtde Mínima, +Max Qty,Qtde Máxima, +Min Amt,Min Amt, +Max Amt,Max Amt, +Period Settings,Configurações do Período, +Margin,Margem, +Margin Type,Tipo da Margem, +Margin Rate or Amount,Percentual Ou Valor de Margem, +Price Discount Scheme,Esquema de Desconto de Preço, +Rate or Discount,Taxa Ou Desconto, +Discount Percentage,Percentagem de Desconto, +Discount Amount,Valor do Desconto, +For Price List,Para Lista de Preço, +Product Discount Scheme,Esquema de Desconto do Produto, +Same Item,Mesmo Item, +Free Item,Item Grátis, +Threshold for Suggestion,Limite Para Sugestão, +System will notify to increase or decrease quantity or amount ,O sistema notificará para aumentar ou diminuir a quantidade ou quantidade, +"Higher the number, higher the priority","Quanto maior o número, maior a prioridade", +Apply Multiple Pricing Rules,Aplicar Várias Regras de Precificação, +Apply Discount on Rate,Aplicar Desconto na Taxa, +Validate Applied Rule,Validar Regra Aplicada, +Rule Description,Descrição da Regra, +Pricing Rule Help,Regra Preços Ajuda, +Promotional Scheme Id,ID do Esquema Promocional, +Promotional Scheme,Esquema Promocional, +Pricing Rule Brand,Marca de Regra de Preços, +Pricing Rule Detail,Detalhe da Regra de Preços, +Child Docname,Child Docname, +Rule Applied,Regra Aplicada, +Pricing Rule Item Code,Código do Item da Regra de Precificação, +Pricing Rule Item Group,Grupo de Itens de Regras de Precificação, +Price Discount Slabs,Lajes de Desconto de Preço, +Promotional Scheme Price Discount,Desconto de Preço do Regime Promocional, +Product Discount Slabs,Lajes de Desconto do Produto, +Promotional Scheme Product Discount,Desconto do Produto do Esquema Promocional, +Min Amount,Quantidade Mínima, +Max Amount,Quantidade Máxima, +Discount Type,Tipo de Desconto, +ACC-PINV-.YYYY.-,ACC-PINV-.YYYY.-, +Tax Withholding Category,Categoria de Retenção Fiscal, +Edit Posting Date and Time,Editar Postagem Data e Hora, +Is Paid,Está Pago, +Is Return (Debit Note),É retorno (nota de débito), +Apply Tax Withholding Amount,Aplicar Montante de Retenção Fiscal, +Accounting Dimensions ,Dimensões Contábeis, +Supplier Invoice Details,Fornecedor Detalhes da Fatura, +Supplier Invoice Date,Data de Emissão da Nota Fiscal de Compra, +Return Against Purchase Invoice,Devolução Relacionada À Fatura de Compra, +Select Supplier Address,Selecione Um Endereço do Fornecedor, +Contact Person,Pessoa de Contato, +Select Shipping Address,Selecione Um Endereço de Entrega, +Currency and Price List,Moeda e Preço, +Price List Currency,Moeda da Lista de Preços, +Price List Exchange Rate,Taxa de Câmbio da Lista de Preços, +Set Accepted Warehouse,Definir Depósito Aceito, +Rejected Warehouse,Armazém de Itens Rejeitados, +Warehouse where you are maintaining stock of rejected items,Armazém onde você está mantendo estoque de itens rejeitados, +Raw Materials Supplied,Matérias-primas Fornecidas, +Supplier Warehouse,Armazém do Fornecedor, +Pricing Rules,Regras de Precificação, +Supplied Items,Itens Fornecidos, +Total (Company Currency),Total (moeda da Empresa), +Net Total (Company Currency),Total Líquido (moeda da Empresa), +Total Net Weight,Peso Líquido Total, +Shipping Rule,Regra de Envio, +Purchase Taxes and Charges Template,Modelo de Encargos e Impostos Sobre Compras, +Purchase Taxes and Charges,Impostos e Encargos Sobre Compras, +Tax Breakup,Desagregação de Impostos, +Taxes and Charges Calculation,Cálculo de Impostos e Encargos, +Taxes and Charges Added (Company Currency),Impostos e Taxas Acrescidos (moeda da Empresa), +Taxes and Charges Deducted (Company Currency),Impostos e Taxas Deduzidos (moeda da Empresa), +Total Taxes and Charges (Company Currency),Total de Impostos e Taxas (moeda da Empresa), +Taxes and Charges Added,Impostos e Encargos Adicionados, +Taxes and Charges Deducted,Impostos e Encargos Deduzidos, +Total Taxes and Charges,Total de Impostos e Encargos, +Additional Discount,Desconto Adicional, +Apply Additional Discount On,Aplicar Desconto Adicional Em, +Additional Discount Amount (Company Currency),Total do Desconto Adicional (moeda da Empresa), +Additional Discount Percentage,Percentual de Desconto Adicional, +Additional Discount Amount,Total do Desconto Adicional, +Grand Total (Company Currency),Total Geral (moeda da Empresa), +Rounding Adjustment (Company Currency),Ajuste de Arredondamento (moeda da Empresa), +Rounded Total (Company Currency),Total Arredondado (moeda da Empresa), +In Words (Company Currency),Por Extenso (moeda da Empresa), +Rounding Adjustment,Ajuste de Arredondamento, +In Words,Por Extenso, +Total Advance,Total Pago Adiantado, +Disable Rounded Total,Desativar Total Arredondado, +Cash/Bank Account,Conta do Caixa/banco, +Write Off Amount (Company Currency),Valor Abatido (moeda da Empresa), +Set Advances and Allocate (FIFO),Definir Adiantamentos e Alocar (fifo), +Get Advances Paid,Obter Adiantamentos Pagos, +Advances,Avanços, +Terms,Condições, +Terms and Conditions1,Termos e Condições, +Group same items,Mesmos itens do grupo, +Print Language,Idioma de Impressão, +"Once set, this invoice will be on hold till the set date","Depois de definida, esta fatura ficará em espera até a data definida", +Credit To,Crédito Para, +Party Account Currency,Moeda do Parceiro, +Against Expense Account,Contra a Conta de Despesas, +Inter Company Invoice Reference,Referência de Fatura Entre Empresas, +Is Internal Supplier,É fornecedor interno, +Start date of current invoice's period,Data de início do período de fatura atual, +End date of current invoice's period,Data final do período de fatura atual, +Update Auto Repeat Reference,Atualizar Referência de Repetição Automática, +Purchase Invoice Advance,Adiantamento da Fatura de Compra, +Purchase Invoice Item,Item da Fatura de Compra, +Quantity and Rate,Quantidade e Valor, +Received Qty,Qtde Recebida, +Accepted Qty,Quantidade Aceita, +Rejected Qty,Qtde Rejeitada, +UOM Conversion Factor,Fator de Conversão da Unidade de Medida, +Discount on Price List Rate (%),% de Desconto sobre o Preço da Lista de Preços, +Price List Rate (Company Currency),Preço da Lista de Preços (moeda da Empresa), +Rate ,Valor, +Rate (Company Currency),Preço (moeda da Empresa), +Amount (Company Currency),Total (moeda da Empresa), +Is Free Item,É item grátis, +Net Rate,Taxa Líquida, +Net Rate (Company Currency),Preço Líquido (moeda da Empresa), +Net Amount (Company Currency),Valor Líquido (moeda da Empresa), +Item Tax Amount Included in Value,Item Montante do Imposto Incluído no Valor, +Landed Cost Voucher Amount,Comprovante de Custo do Desembarque, +Raw Materials Supplied Cost,Custo de Fornecimento de Matérias-primas, +Accepted Warehouse,Armazém Aceito, +Serial No,Nº de Série, +Rejected Serial No,Nº de Série Rejeitado, +Expense Head,Conta de Despesas, +Is Fixed Asset,É Ativo Imobilizado, +Asset Location,Localização do Ativo, +Deferred Expense,Despesa Diferida, +Deferred Expense Account,Conta de Despesas Diferidas, +Service Stop Date,Data de Parada de Serviço, +Enable Deferred Expense,Ativar Despesa Adiada, +Service Start Date,Data de Início do Serviço, +Service End Date,Data de Término do Serviço, +Allow Zero Valuation Rate,Permitir Taxa de Avaliação Zero, +Item Tax Rate,Alíquota do Imposto do Item, +Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges,O dado da tabela de imposto obtido a partir do definidor de item como uma string e armazenado neste campo.\n Utilizado para Impostos e Encargos, +Purchase Order Item,Item do Pedido de Compra, +Purchase Receipt Detail,Detalhe do Recibo de Compra, +Item Weight Details,Detalhes do Peso do Item, +Weight Per Unit,Peso Unitário, +Total Weight,Peso Total, +Weight UOM,Udm de Peso, +Page Break,Quebra de Página, +Consider Tax or Charge for,Considere Imposto Ou Encargo Para, +Valuation and Total,Valorização e Total, +Valuation,Avaliação, +Add or Deduct,Adicionar Ou Reduzir, +Deduct,Deduzir, +On Previous Row Amount,No Valor da Linha Anterior, +On Previous Row Total,No Total da Linha Anterior, +On Item Quantity,Na Quantidade do Item, +Reference Row #,Referência Linha #, +Is this Tax included in Basic Rate?,Este Imposto Está Incluído na Base de Cálculo?, +"If checked, the tax amount will be considered as already included in the Print Rate / Print Amount","Se marcado, o valor do imposto será considerado como já incluído na Impressão de Taxa / Impressão do Valor", +Account Head,Conta, +Tax Amount After Discount Amount,Total de Impostos Depois Montante do Desconto, +Item Wise Tax Detail ,Item Wise Tax Detail, +"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.","O modelo de impostos padrão que pode ser aplicado a todas as Operações de Compra. Este modelo pode conter a lista de títulos de impostos e também outros títulos de despesas como ""Envio"", ""Seguro"", ""Manutenção"" etc. \n\n #### Nota \n\n a taxa de imposto que definir aqui será a taxa normal de impostos para todos os **Itens**. Se houver **Itens** que têm taxas diferentes, eles devem ser adicionados na tabela de **Imposto do Item** no definidor de **Item**.\n\n #### Descrição das Colunas \n\n 1. Tipo de Cálculo: \n - Isto pode ser em **Total Líquido** (que é a soma do montante de base).\n - **No Total / Montante da Linha Anterior** (para os impostos ou encargos cumulativos). Se você essa opção, o imposto será aplicado como uma percentagem da linha anterior (na tabela de impostos) ou montante total.\n - **Real** (como mencionado).\n 2. Título da Conta: o livro de contabilidade em que este imposto será escrito\n 3. Centro de Custo: Se o imposto / taxa é uma rendimento (como o envio) ou despesa precisa ser reservado num Centro de Custo.\n 4. Descrição: a descrição do imposto (que será impresso em faturas / cotações).\n 5. Classificação: Taxa de imposto.\n 6. Montante: Montante das taxas.\n 7. Total: Total acumulado até este ponto.\n 8. Inserir Linha: Se for baseado no ""Total da Linha Anterior"", pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior).\n 9. Considerar Imposto ou Encargo para: Nesta seção, pode especificar se o imposto / encargo é apenas para avaliação (não uma parte do total) ou apenas para o total (não adiciona valor ao item) ou para ambos.\n 10. Adicionar ou Deduzir: Se quer adicionar ou deduzir o imposto.", +Salary Component Account,Conta do Componente Salárial, +Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.,A conta Bancária / Dinheiro padrão será atualizada automaticamente no Registo de Lançamento Contabilístico quando for selecionado este modo., +ACC-SINV-.YYYY.-,ACC-SINV-.YYYY.-, +Include Payment (POS),Incluir Pagamento (PDV), +Offline POS Name,Nome do Pos Offline, +Is Return (Credit Note),É retorno (nota de crédito), +Return Against Sales Invoice,Devolução Contra Fatura de Venda, +Update Billed Amount in Sales Order,Atualizar Valor Cobrado no Pedido de Vendas, +Customer PO Details,Detalhes do Cliente PO, +Customer's Purchase Order,Pedido de Compra do Cliente, +Customer's Purchase Order Date,Data do Pedido de Compra do Cliente, +Customer Address,Endereço do Cliente, +Shipping Address Name,Endereço de Entrega, +Company Address Name,Nome da Endereço da Empresa, +Rate at which Customer Currency is converted to customer's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base do cliente, +Rate at which Price list currency is converted to customer's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base do cliente, +Set Source Warehouse,Definir Depósito de Origem, +Packing List,Lista de Remessa, +Packed Items,Pacotes de Itens, +Product Bundle Help,Pacote de Produtos Ajuda, +Time Sheet List,Lista de Registros de Tempo, +Time Sheets,Registros de Tempo, +Total Billing Amount,Valor Total do Faturamento, +Sales Taxes and Charges Template,Modelo de Encargos e Impostos Sobre Vendas, +Sales Taxes and Charges,Impostos e Taxas Sobre Vendas, +Loyalty Points Redemption,Resgate de Pontos de Fidelidade, +Redeem Loyalty Points,Resgatar Pontos de Fidelidade, +Redemption Account,Conta de Resgate, +Redemption Cost Center,Centro de Custo de Resgate, +In Words will be visible once you save the Sales Invoice.,Por extenso será visível quando você salvar a Fatura de Venda., +Allocate Advances Automatically (FIFO),Alocar Avanços Automaticamente (FIFO), +Get Advances Received,Obter Adiantamentos Recebidos, +Base Change Amount (Company Currency),Troco (moeda da Empresa), +Write Off Outstanding Amount,Abater Saldo Devedor, +Terms and Conditions Details,Detalhes Dos Termos e Condições, +Is Internal Customer,É cliente interno, +Is Discounted,Tem Desconto, +Unpaid and Discounted,Não Pago e Descontado, +Overdue and Discounted,Em Atraso e Descontado, +Accounting Details,Detalhes da Contabilidade, +Debit To,Débito Para, +Is Opening Entry,É Lançamento de Abertura, +C-Form Applicable,Formulário-c Aplicável, +Commission Rate (%),Percentual de Comissão (%), +Sales Team1,Equipe de Vendas 1, +Against Income Account,Contra a Conta de Recebimentos, +Sales Invoice Advance,Adiantamento da Fatura de Venda, +Advance amount,Valor Adiantado, +Sales Invoice Item,Item da Fatura de Venda, +Customer's Item Code,Código do Item do Cliente, +Brand Name,Nome da Marca, +Qty as per Stock UOM,Qtde Por Udm do Estoque, +Discount and Margin,Desconto e Margem, +Rate With Margin,Taxa Com Margem, +Discount (%) on Price List Rate with Margin,Desconto (%) na Taxa da Lista de Preços com Margem, +Rate With Margin (Company Currency),Taxa Com Margem (moeda da Empresa), +Delivered By Supplier,Proferido Por Fornecedor, +Deferred Revenue,Receita Diferida, +Deferred Revenue Account,Conta de Receita Diferida, +Enable Deferred Revenue,Ativar Receita Diferida, +Stock Details,Detalhes do Estoque, +Customer Warehouse (Optional),Armazém do Cliente (opcional), +Available Batch Qty at Warehouse,Qtde Disponível do Lote no Armazén, +Available Qty at Warehouse,Qtde Disponível no Estoque, +Delivery Note Item,Item da Guia de Remessa, +Base Amount (Company Currency),Valor Base (moeda da Empresa), +Sales Invoice Timesheet,Registro de Tempo da Fatura de Venda, +Time Sheet,Registro de Tempo, +Billing Hours,Horas de Faturação, +Timesheet Detail,Detalhes do Registro de Tempo, +Tax Amount After Discount Amount (Company Currency),Valor do Imposto Após Desconto (moeda da Empresa), +Item Wise Tax Detail,Detalhes do Imposto Vinculados Ao Item, +Parenttype,Parenttype, +"Standard tax template that can be applied to all Sales Transactions. This template can contain list of tax heads and also other expense / income heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","O modelo de impostos padrão que pode ser aplicado a todas as Transações de Vendas. Este modelo pode conter a lista de livros fiscais e também outros livros de despesas / receitas como ""Envio"", ""Seguro"", ""Processamento"" etc. \n\n #### Nota \n\nA taxa de imposto que definir aqui será a taxa normal de IVA para todos os **Itens**. Se houver **Itens** que possuam taxas diferentes, eles devem ser adicionados na tabela **Imposto de Item** no definidor de **Item**.\n\n #### Descrição das Colunas \n\n 1. Tipo de Cálculo: \n - Isto pode ser no **Total Líquido** (que é a soma do montante base).\n - **Na linha Total / Montante Anterior** (para os impostos ou encargos cumulativos). Se selecionar esta opção, o imposto será aplicado como uma percentagem do montante da linha anterior (na tabela de impostos) ou montante total.\n - **Atual** (como indicado).\n 2. Título de Contas: o Livro de contas em que este imposto será escrito\n 3. Centro de Custo: Se o imposto / taxa for um rendimento (como por exemplo o envio) ou uma despesa, necessita ser reservado num Centro de Custo.\n 4. Descrição: Descrição do imposto (que será impresso em faturas / cotações).\n 5. Taxa: Montante de Imposto.\n 6. Valor: Valor dos impostos.\n 7. Total: Total acumulado até este ponto.\n 8. Inserir Linha: Se for baseado em ""Total da Linha Anterior"", pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior).\n 9. Este imposto está incluído na Taxa Básica?: Se selecionar isto, significa que este imposto não será exibido abaixo da tabela de item, mas será incluído na Taxa Básica na sua tabela de item principal. Isto é útil quando quer atribuir um preço fixo (incluindo todos os impostos) para os clientes.", +* Will be calculated in the transaction.,* Será calculado na transação., +From No,De Não, +To No,Para Não, +Is Company,É a empresa, +Current State,Estado Atual, +Purchased,Comprado, +From Shareholder,Do Acionista, +From Folio No,Do Folio No, +To Shareholder,Ao Acionista, +To Folio No,Para Folio No, +Equity/Liability Account,Conta de Patrimônio / Responsabilidade, +Asset Account,Conta de Ativo, +(including),(incluindo), +ACC-SH-.YYYY.-,ACC-SH-.YYYY.-, +Folio no.,Folio No., +Address and Contacts,Endereços e Contatos, +Contact List,Lista de Contatos, +Hidden list maintaining the list of contacts linked to Shareholder,Lista escondida mantendo a lista de contatos ligados ao Acionista, +Specify conditions to calculate shipping amount,Especificar condições para calcular valor de frete, +Shipping Rule Label,Rótulo da Regra de Envio, +example: Next Day Shipping,exemplo: envio no dia seguinte, +Shipping Rule Type,Tipo de Regra de Envio, +Shipping Account,Conta de Envio, +Calculate Based On,Calcule Baseado Em, +Fixed,Fixo, +Net Weight,Peso Líquido, +Shipping Amount,Valor do Transporte, +Shipping Rule Conditions,Regra Condições de Envio, +Restrict to Countries,Restringir Aos Países, +Valid for Countries,Válido Para Países, +Shipping Rule Condition,Regra Condições de Envio, +A condition for a Shipping Rule,A condição para uma regra de Remessa, +From Value,De Valor, +To Value,Para o Valor, +Shipping Rule Country,Regra Envio País, +Subscription Period,Período de Inscrição, +Subscription Start Date,Data de Início da Assinatura, +Cancelation Date,Data de Cancelamento, +Trial Period Start Date,Data de Início do Período de Avaliação, +Trial Period End Date,Data de Término do Período de Avaliação, +Current Invoice Start Date,Data de Início da Fatura Atual, +Current Invoice End Date,Data Final da Fatura Atual, +Days Until Due,Dias Até o Vencimento, +Number of days that the subscriber has to pay invoices generated by this subscription,Número de dias que o assinante deve pagar as faturas geradas por esta assinatura, +Cancel At End Of Period,Cancelar no Final do Período, +Generate Invoice At Beginning Of Period,Gerar Fatura no Início do Período, +Plans,Planos, +Discounts,Descontos, +Additional DIscount Percentage,Percentual de Desconto Adicional, +Additional DIscount Amount,Total do Desconto Adicional, +Subscription Invoice,Fatura de Subscrição, +Subscription Plan,Plano de Assinatura, +Cost,Custo, +Billing Interval,Intervalo de Cobrança, +Billing Interval Count,Contagem de Intervalos de Faturamento, +"Number of intervals for the interval field e.g if Interval is 'Days' and Billing Interval Count is 3, invoices will be generated every 3 days","Número de intervalos para o campo de intervalo, por exemplo, se o intervalo for ';Dias'; e a Contagem de intervalos de faturamento for 3, as faturas serão geradas a cada 3 dias", +Payment Plan,Plano de Pagamento, +Subscription Plan Detail,Detalhe do Plano de Assinatura, +Plan,Plano, +Subscription Settings,Configurações de Assinatura, +Grace Period,Período de Carência, +Number of days after invoice date has elapsed before canceling subscription or marking subscription as unpaid,Número de dias após a data da fatura ter expirado antes de cancelar a assinatura ou marcar a assinatura como não remunerada, +Prorate,Proporcionado, +Tax Rule,Regras de Aplicação de Impostos, +Tax Type,Tipo de Imposto, +Use for Shopping Cart,Use Para Compras, +Billing City,Cidade de Faturamento, +Billing County,Distrito de Faturamento, +Billing State,Estado de Faturamento, +Billing Zipcode,Cep Para Cobrança, +Billing Country,País de Faturamento, +Shipping City,Cidade de Entrega, +Shipping County,Distrito de Entrega, +Shipping State,Estado de Entrega, +Shipping Zipcode,CEP de Entrega, +Shipping Country,País de Entrega, +Tax Withholding Account,Conta de Imposto Retido, +Tax Withholding Rates,Taxas de Imposto Retido, +Rates,Percentuais, +Tax Withholding Rate,Taxa de Retenção Fiscal, +Single Transaction Threshold,Limite Único de Transação, +Cumulative Transaction Threshold,Limite de Transação Cumulativa, +Agriculture Analysis Criteria,Critérios de Análise da Agricultura, +Linked Doctype,Documento Vinculado, +Water Analysis,Análise de Água, +Soil Analysis,Análise do Solo, +Plant Analysis,Análise de Planta, +Fertilizer,Fertilizante, +Soil Texture,Textura do Solo, +Weather,Clima, +Agriculture Manager,Gerente de Agricultura, +Agriculture User,Usuário da Agricultura, +Agriculture Task,Tarefa de Agricultura, +Task Name,Nome da Tarefa, +Start Day,Dia de Início, +End Day,Dia Final, +Holiday Management,Gestão de Férias, +Ignore holidays,Ignorar feriados, +Previous Business Day,Dia Útil Anterior, +Next Business Day,Próximo Dia Comercial, +Urgent,Urgente, +Crop,Colheita, +Crop Name,Nome da Cultura, +Scientific Name,Nome Científico, +"You can define all the tasks which need to carried out for this crop here. The day field is used to mention the day on which the task needs to be carried out, 1 being the 1st day, etc.. ","Você pode definir todas as tarefas que devem ser realizadas para esta cultura aqui. o campo do dia é usado para mencionar o dia em que a tarefa precisa ser realizada, 1 sendo o 1º dia, etc.", +Crop Spacing,Espaçamento de Colheita, +Crop Spacing UOM,Uom de Espaçamento de Colheitas, +Row Spacing,Espaçamento Entre Linhas, +Row Spacing UOM,Espaçamento de Linhas Udm, +Perennial,Perene, +Biennial,Bienal, +Planting UOM,Plantando UDM, +Planting Area,Área de plantação, +Yield UOM,Rendimento UDM, +Materials Required,Materiais Requisitados, +Produced Items,Artigos Produzidos, +Produce,Produzir, +Byproducts,Subprodutos, +Linked Location,Local Vinculado, +A link to all the Locations in which the Crop is growing,Um link para todos os locais em que a safra está crescendo, +This will be day 1 of the crop cycle,Este será o dia 1 do ciclo da cultura, +ISO 8601 standard,Norma ISO 8601, +Cycle Type,Tipo de Ciclo, +Less than a year,Menos de um ano, +The minimum length between each plant in the field for optimum growth,O comprimento mínimo entre cada planta no campo para o melhor crescimento, +The minimum distance between rows of plants for optimum growth,A distância mínima entre fileiras de plantas para o melhor crescimento, +Detected Diseases,Doenças Detectadas, +List of diseases detected on the field. When selected it'll automatically add a list of tasks to deal with the disease ,Lista de doenças detectadas no campo. Quando selecionado ele adicionará automaticamente uma lista de tarefas para lidar com a doença, +Detected Disease,Doença Detectada, +LInked Analysis,Linked Analysis, +Disease,Doença, +Tasks Created,Tarefas Criadas, +Common Name,Nome Comum, +Treatment Task,Tarefa de Tratamento, +Treatment Period,Período de Tratamento, +Fertilizer Name,Nome do Fertilizante, +Density (if liquid),Densidade (se líquido), +Fertilizer Contents,Conteúdo de Fertilizantes, +Fertilizer Content,Conteúdo de Fertilizante, +Linked Plant Analysis,Análise de Planta Vinculada, +Linked Soil Analysis,Análise de Solo Associada, +Linked Soil Texture,Textura de Solo Ligada, +Collection Datetime,Data de Coleta, +Laboratory Testing Datetime,Teste de Laboratório Data Tempo, +Result Datetime,Resultado Data Hora, +Plant Analysis Criterias,Critérios de Análise de Planta, +Plant Analysis Criteria,Critérios de Análise da Planta, +Minimum Permissible Value,Valor Mínimo Permissível, +Maximum Permissible Value,Valor Máximo Admissível, +Ca/K,Ca / K, +Ca/Mg,Ca / Mg, +Mg/K,Mg / K, +(Ca+Mg)/K,(Ca + Mg) / K, +Ca/(K+Ca+Mg),Ca / (k + Ca + Mg), +Soil Analysis Criterias,Critérios de Análise do Solo, +Soil Analysis Criteria,Critérios de Análise do Solo, +Soil Type,Tipo de Solo, +Loamy Sand,Loamy Sand, +Sandy Loam,Sandy Loam, +Loam,Barro, +Silt Loam,Silt Loam, +Sandy Clay Loam,Sandy Clay Loam, +Clay Loam,Barro de Argila, +Silty Clay Loam,Silly Clay Loam, +Sandy Clay,Argila Arenosa, +Silty Clay,Argila Silty, +Clay Composition (%),Composição da Argila (%), +Sand Composition (%),Composição da Areia (%), +Silt Composition (%),Composição do Silt (%), +Ternary Plot,Parcela Ternar, +Soil Texture Criteria,Critérios de Textura do Solo, +Type of Sample,Tipo de Amostra, +Container,Recipiente, +Origin,Origem, +Collection Temperature ,Temperatura de Coleta, +Storage Temperature,Temperatura de Armazenamento, +Appearance,Aparência, +Person Responsible,Pessoa Responsável, +Water Analysis Criteria,Critérios de Análise de Água, +Weather Parameter,Parâmetro do Tempo, +ACC-ASS-.YYYY.-,ACC-ASS-.YYYY.-, +Asset Owner,Proprietário de Ativos, +Asset Owner Company,Proprietário Proprietário Empresa, +Custodian,Custodiante, +Disposal Date,Data de Eliminação, +Journal Entry for Scrap,Lançamento no Livro Diário Para Sucata, +Available-for-use Date,Data Disponível Para Uso, +Calculate Depreciation,Calcular Depreciação, +Allow Monthly Depreciation,Permitir Depreciação Mensal, +Number of Depreciations Booked,Número de Depreciações Reservadas, +Finance Books,Livros Contábeis, +Straight Line,Linha Reta, +Double Declining Balance,Equilíbrio Decrescente Duplo, +Manual,Manual, +Value After Depreciation,Valor Após Depreciação, +Total Number of Depreciations,Número Total de Depreciações, +Frequency of Depreciation (Months),Frequência Das Depreciações (meses), +Next Depreciation Date,Próxima Data de Depreciação, +Depreciation Schedule,Tabela de Depreciação, +Depreciation Schedules,Tabelas de Depreciação, +Insurance details,Detalhes do Seguro, +Policy number,Número da polícia, +Insurer,Segurador, +Insured value,Valor segurado, +Insurance Start Date,Data de Início do Seguro, +Insurance End Date,Data Final do Seguro, +Comprehensive Insurance,Seguro Abrangente, +Maintenance Required,Manutenção Requerida, +Check if Asset requires Preventive Maintenance or Calibration,Verifique se o recurso requer manutenção preventiva ou calibração, +Booked Fixed Asset,Ativos Fixos Reservados, +Purchase Receipt Amount,Quantia do Recibo de Compra, +Default Finance Book,Livro Contábil Padrão, +Quality Manager,Gerente de Qualidade, +Asset Category Name,Ativo Categoria Nome, +Depreciation Options,Opções de Depreciação, +Enable Capital Work in Progress Accounting,Ativar Contabilidade de Capital Em Andamento, +Finance Book Detail,Detalhe do Livro Contábil, +Asset Category Account,Ativo Categoria Conta, +Fixed Asset Account,Conta do Ativo Imobilizado, +Accumulated Depreciation Account,Conta de Depreciação Acumulada, +Depreciation Expense Account,Conta de Depreciação, +Capital Work In Progress Account,Conta de Trabalho Em Andamento de Capital, +Asset Finance Book,Livro Contábil de Ativos, +Written Down Value,Valor Baixado, +Expected Value After Useful Life,Valor Esperado Após Sua Vida Útil, +Rate of Depreciation,Taxa de Depreciação, +In Percentage,Em Porcentagem, +Maintenance Team,Equipe de Manutenção, +Maintenance Manager Name,Nome do Gerente de Manutenção, +Maintenance Tasks,Tarefas de Manutenção, +Manufacturing User,Usuário de Fabricação, +Asset Maintenance Log,Registro de Manutenção de Ativos, +ACC-AML-.YYYY.-,ACC-AML-.YYYY.-, +Maintenance Type,Tipo de Manutenção, +Maintenance Status,Status da Manutenção, +Planned,Planejado, +Has Certificate ,Tem Certificado, +Certificate,Certificado, +Actions performed,Ações realizadas, +Asset Maintenance Task,Tarefa de Manutenção de Ativos, +Maintenance Task,Tarefa de Manutenção, +Preventive Maintenance,Manutenção Preventiva, +Calibration,Calibração, +2 Yearly,2 Anos, +Certificate Required,Certificado Necessário, +Assign to Name,Atribuir Ao Nome, +Next Due Date,Próxima Data de Vencimento, +Last Completion Date,Última Data de Conclusão, +Asset Maintenance Team,Equipe de Manutenção de Ativos, +Maintenance Team Name,Nome da Equipe de Manutenção, +Maintenance Team Members,Membros da Equipe de Manutenção, +Purpose,Finalidade, +Stock Manager,Gerente de Estoque, +Asset Movement Item,Item de Movimento de Ativos, +Source Location,Localização da Fonte, +From Employee,Do Colaborador, +Target Location,Localização Alvo, +To Employee,Para Empregado, +Asset Repair,Reparo de Ativos, +ACC-ASR-.YYYY.-,ACC-ASR-.YYYY.-, +Failure Date,Data de Falha, +Assign To Name,Atribuir Para Nomear, +Repair Status,Status do Reparo, +Error Description,Descrição de Erro, +Downtime,Tempo de Inatividade, +Repair Cost,Custo de Reparo, +Manufacturing Manager,Gerente de Fabricação, +Current Asset Value,Valor Atual do Ativo, +New Asset Value,Novo Valor do Ativo, +Make Depreciation Entry,Fazer Lançamento de Depreciação, +Finance Book Id,ID do Livro Contábil, +Location Name,Nome da Localização, +Parent Location,Localização Dos Pais, +Is Container,Container, +Check if it is a hydroponic unit,Verifique se é uma unidade hidropônica, +Location Details,Detalhes da Localização, +Latitude,Latitude, +Longitude,Longitude, +Area,Área, +Area UOM,UOM da área, +Tree Details,Detalhes da Árvore, +Maintenance Team Member,Membro da Equipe de Manutenção, +Team Member,Membro da Equipe, +Maintenance Role,Função de Manutenção, +Buying Settings,Configurações de Compras, +Settings for Buying Module,Configurações Para o Módulo de Compras, +Supplier Naming By,Nomeação do Fornecedor Por, +Default Supplier Group,Grupo de Fornecedores Padrão, +Default Buying Price List,Lista de Preço de Compra Padrão, +Backflush Raw Materials of Subcontract Based On,Backflush Matérias-primas de Subcontratação Com Base Em, +Material Transferred for Subcontract,Material Transferido Para Subcontrato, +Over Transfer Allowance (%),Excesso de Transferência (%), +Percentage you are allowed to transfer more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to transfer 110 units.,Porcentagem que você tem permissão para transferir mais em relação à quantidade solicitada. Por exemplo: Se você encomendou 100 unidades. e sua permissão for de 10% você poderá transferir 110 unidades., +PUR-ORD-.YYYY.-,PUR-ORD-.YYYY.-, +Get Items from Open Material Requests,Obter Itens de Requisições de Material Abertas, +Fetch items based on Default Supplier.,Obter itens com base no fornecedor padrão., +Required By,Entrega Em, +Order Confirmation No,Confirmação do Pedido Não, +Order Confirmation Date,Data de Confirmação do Pedido, +Customer Mobile No,Celular do Cliente, +Customer Contact Email,Cliente Fale Email, +Set Target Warehouse,Definir Armazém Alvo, +Sets 'Warehouse' in each row of the Items table.,Define ';Warehouse'; em cada linha da tabela de itens., +Supply Raw Materials,Abastecimento de Matérias-primas, +Purchase Order Pricing Rule,Regra de Precificação de Pedidos de Compra, +Set Reserve Warehouse,Definir Armazém de Reserva, +In Words will be visible once you save the Purchase Order.,Por extenso será visível quando você salvar o Pedido de Compra., +Advance Paid,Adiantamento Pago, +Tracking,Rastreamento, +% Billed,Faturado %, +% Received,Recebido %, +Ref SQ,Ref SQ, +Inter Company Order Reference,Referência de Pedidos Entre Empresas, +Supplier Part Number,Número da Peça do Fornecedor, +Billed Amt,Valor Faturado, +Warehouse and Reference,Armazém e Referência, +To be delivered to customer,Para ser entregue ao cliente, +Material Request Item,Item da Requisição de Material, +Supplier Quotation Item,Item do Orçamento de Fornecedor, +Against Blanket Order,Contra a Ordem Geral, +Blanket Order,Pedido de Cobertor, +Blanket Order Rate,Taxa de Ordem de Cobertura, +Returned Qty,Qtde Devolvida, +Purchase Order Item Supplied,Item Fornecido do Pedido de Compra, +BOM Detail No,Nº do Detalhe da LDM, +Stock Uom,Unidade de Medida do Estoque, +Raw Material Item Code,Código de Item de Matérias-primas, +Supplied Qty,Qtde Fornecida, +Purchase Receipt Item Supplied,Item do Recibo de Compra Fornecido, +Current Stock,Estoque Atual, +PUR-RFQ-.YYYY.-,PUR-RFQ-.YYYY.-, +For individual supplier,Para cada fornecedor, +Link to Material Requests,Link Para Solicitações de Materiais, +Message for Supplier,Mensagem Para o Fornecedor, +Request for Quotation Item,Solicitação de Orçamento do Item, +Required Date,Para o Dia, +Request for Quotation Supplier,Solicitação de Orçamento Para Fornecedor, +Send Email,Enviar Email, +Quote Status,Status da Cotação, +Download PDF,Transferir Pdf, +Supplier of Goods or Services.,Fornecedor de Bens Ou Serviços., +Name and Type,Nome e Tipo, +SUP-.YYYY.-,SUP-.YYYY.-, +Default Bank Account,Conta Bancária Padrão, +Is Transporter,É transportador, +Represents Company,Representa Empresa, +Supplier Type,Tipo de Fornecedor, +Allow Purchase Invoice Creation Without Purchase Order,Permitir a Criação de Fatura de Compra Sem Ordem de Compra, +Allow Purchase Invoice Creation Without Purchase Receipt,Permitir a Criação de Fatura de Compra Sem Recibo de Compra, +Warn RFQs,Alertar Em Solicitações de Orçamentos, +Warn POs,Avisar Em Pedidos de Compra, +Prevent RFQs,Evitar Orçamentos, +Prevent POs,Evitar Pedidos de Compra, +Billing Currency,Moeda de Faturamento, +Default Payment Terms Template,Modelo de Termos de Pagamento Padrão, +Block Supplier,Fornecedor de Blocos, +Hold Type,Hold Type, +Leave blank if the Supplier is blocked indefinitely,Deixe em branco se o fornecedor estiver bloqueado indefinidamente, +Default Payable Accounts,Contas a Pagar Padrão, +Mention if non-standard payable account,Mencionar se a conta a pagar não padrão, +Default Tax Withholding Config,Configuração Padrão de Retenção de Imposto, +Supplier Details,Detalhes do Fornecedor, +Statutory info and other general information about your Supplier,Informações contratuais e outras informações gerais sobre o seu fornecedor, +PUR-SQTN-.YYYY.-,PUR-SQTN-.YYYY.-, +Supplier Address,Endereço do Fornecedor, +Link to material requests,Link para pedidos de material, +Rounding Adjustment (Company Currency,Ajuste de Arredondamento (moeda da Empresa, +Auto Repeat Section,Seção de Repetição Automática, +Is Subcontracted,É subcontratada, +Lead Time in days,Prazo de Entrega (em dias), +Supplier Score,Pontuação do Fornecedor, +Indicator Color,Cor do Indicador, +Evaluation Period,Periodo de Avaliação, +Per Week,Por Semana, +Per Month,Por Mês, +Per Year,Por Ano, +Scoring Setup,Configuração de Pontuação, +Weighting Function,Função de Ponderação, +"Scorecard variables can be used, as well as:\n{total_score} (the total score from that period),\n{period_number} (the number of periods to present day)\n","As variáveis do Scorecard podem ser usadas, bem como: {total_score} (a pontuação total desse período), {period_number} (o número de períodos até hoje)", +Scoring Standings,Classificação de Pontuação, +Criteria Setup,Configuração de Critérios, +Load All Criteria,Carregar Todos os Critérios, +Scoring Criteria,Critérios de Pontuação, +Scorecard Actions,Ações do Scorecard, +Warn for new Request for Quotations,Avisar ao criar novas Solicitações de Orçamento, +Warn for new Purchase Orders,Avisar ao criar novos Pedidos de Compra, +Notify Supplier,Notificar Fornecedor, +Notify Employee,Notificar Empregado, +Supplier Scorecard Criteria,Critérios do Scorecard do Fornecedor, +Criteria Name,Nome Dos Critérios, +Max Score,Pontuação Máxima, +Criteria Formula,Fórmula Critérios, +Criteria Weight,Critérios Peso, +Supplier Scorecard Period,Período do Scorecard do Fornecedor, +PU-SSP-.YYYY.-,PU-SSP-.YYYY.-, +Period Score,Pontuação do Período, +Calculations,Cálculos, +Criteria,Critério, +Variables,Variáveis, +Supplier Scorecard Setup,Configuração do Scorecard Fornecedor, +Supplier Scorecard Scoring Criteria,Critérios de Pontuação do Scorecard do Fornecedor, +Score,Ponto, +Supplier Scorecard Scoring Standing,Scorecard do Fornecedor Pontuação Permanente, +Standing Name,Nome Permanente, +Purple,Roxo, +Yellow,Amarelo, +Orange,Laranja, +Min Grade,Min Grade, +Max Grade,Max Grade, +Warn Purchase Orders,Avisar Em Pedidos de Compra, +Prevent Purchase Orders,Evitar Pedidos de Compra, +Employee ,Funcionário, +Supplier Scorecard Scoring Variable,Variável de Pontuação do Scorecard do Fornecedor, +Variable Name,Nome Variável, +Parameter Name,Nome do Parâmetro, +Supplier Scorecard Standing,Posição do Scorecard do Fornecedor, +Notify Other,Notificar Outro, +Supplier Scorecard Variable,Variável do Scorecard do Fornecedor, +Call Log,Registro de Chamadas, +Received By,Recebido Por, +Caller Information,Informações do Chamador, +Contact Name,Nome do Contato, +Lead ,Lead , +Lead Name,Nome do Lead, +Ringing,Toque, +Missed,Perdido, +Call Duration in seconds,Duração da chamada em segundos, +Recording URL,URL de Gravação, +Communication Medium,Meio de Comunicação, +Communication Medium Type,Tipo de Meio de Comunicação, +Voice,Voz, +Catch All,Pegar Tudo, +"If there is no assigned timeslot, then communication will be handled by this group","Se não houver período de atividade atribuído, a comunicação será tratada por este grupo", +Timeslots,Intervalos de Tempo, +Communication Medium Timeslot,Meio de Comunicação Timeslot, +Employee Group,Grupo de Empregados, +Appointment,Compromisso, +Scheduled Time,Hora Marcada, +Unverified,Não Verificado, +Customer Details,Detalhes do Cliente, +Phone Number,Número de Telefone, +Skype ID,ID do Skype, +Linked Documents,Documentos Vinculados, +Appointment With,Compromisso Com, +Calendar Event,Evento do Calendário, +Appointment Booking Settings,Configurações de Reserva de Compromisso, +Enable Appointment Scheduling,Ativar Agendamento de Compromissos, +Agent Details,Detalhes do Agente, +Availability Of Slots,Disponibilidade de Slots, +Number of Concurrent Appointments,Número de Compromissos Simultâneos, +Agents,Agentes, +Appointment Details,Detalhes do Compromisso, +Appointment Duration (In Minutes),Duração da Consulta (em Minutos), +Notify Via Email,Notificar Por E-mail, +Notify customer and agent via email on the day of the appointment.,Notifique o cliente e o agente por e-mail no dia do compromisso., +Number of days appointments can be booked in advance,Número de dias em que os compromissos podem ser agendados com antecedência, +Success Settings,Configurações de Sucesso, +Success Redirect URL,URL de redirecionamento de sucesso, +"Leave blank for home.\nThis is relative to site URL, for example ""about"" will redirect to ""https://yoursitename.com/about""","Deixe em branco para casa. Isso é relativo ao URL do site. Por exemplo, "about" será redirecionado para "https://yoursitename.com/about"", +Appointment Booking Slots,Horários de Agendamento, +Day Of Week,Dia da Semana, +From Time ,Hora De, +Campaign Email Schedule,Agenda de E-mail da Campanha, +Send After (days),Enviar Após (dias), +Signed,Assinado, +Party User,Usuário do Parceiro, +Unsigned,Não Assinado, +Fulfilment Status,Status de Cumprimento, +N/A,N / D, +Unfulfilled,Não Cumprido, +Partially Fulfilled,Cumprido Parcialmente, +Fulfilled,Realizada, +Lapsed,Caducado, +Contract Period,Período do Contrato, +Signee Details,Detalhes da Signee, +Signee,Signee, +Signed On,Inscrito Em, +Contract Details,Detalhes do Contrato, +Contract Template,Modelo de Contrato, +Contract Terms,Termos do Contrato, +Fulfilment Details,Detalhes de Cumprimento, +Requires Fulfilment,Requer Cumprimento, +Fulfilment Deadline,Prazo de Cumprimento, +Fulfilment Terms,Termos de Cumprimento, +Contract Fulfilment Checklist,Lista de Verificação de Cumprimento do Contrato, +Requirement,Requerimento, +Contract Terms and Conditions,Termos e Condições do Contrato, +Fulfilment Terms and Conditions,Termos e Condições de Cumprimento, +Contract Template Fulfilment Terms,Termos de Cumprimento do Modelo de Contrato, +Email Campaign,Campanha de E-mail, +Email Campaign For ,Campanha de E-mail Para, +Lead is an Organization,Lead é uma Empresa, +CRM-LEAD-.YYYY.-,CRM-LEAD-.YYYY.-, +Person Name,Nome da Pessoa, +Lost Quotation,Cotação Perdida, +Interested,Interessado, +Converted,Convertido, +Do Not Contact,Não Entre Em Contato, +From Customer,Do Cliente, +Campaign Name,Nome da Campanha, +Follow Up,Acompanhamento, +Next Contact By,Próximo Contato Por, +Next Contact Date,Data do Próximo Contato, +Ends On,Termina Em, +Address & Contact,Endereço e Contato, +Mobile No.,Telefone Celular, +Lead Type,Tipo de Lead, +Channel Partner,Canal de Parceria, +Consultant,Consultor, +Market Segment,Segmento de Renda, +Industry,Indústria, +Request Type,Tipo de Solicitação, +Product Enquiry,Consulta de Produto, +Request for Information,Solicitação de Informação, +Suggestions,Sugestões, +Blog Subscriber,Assinante do Blog, +LinkedIn Settings,Configurações do Linkedin, +Company ID,ID da Empresa, +OAuth Credentials,Credenciais Oauth, +Consumer Key,Chave do Consumidor, +Consumer Secret,Consumidor Secreto, +User Details,Detalhes do Usuario, +Person URN,Pessoa Urn, +Session Status,Status da Sessão, +Lost Reason Detail,Detalhe da Razão Perdida, +Opportunity Lost Reason,Oportunidade Razão Perdida, +Potential Sales Deal,Promoção de Vendas Potenciais, +CRM-OPP-.YYYY.-,CRM-OPP-.YYYY.-, +Opportunity From,Oportunidade De, +Customer / Lead Name,Nome do Cliente/Lead, +Opportunity Type,Tipo de Oportunidade, +Converted By,Convertido Por, +Sales Stage,Estágio de Vendas, +Lost Reason,Motivo da Perda, +Expected Closing Date,Data Prevista de Fechamento, +To Discuss,Para Discutir, +With Items,Com Itens, +Probability (%),Probabilidade (%), +Contact Info,Informações Para Contato, +Customer / Lead Address,Endereço do Cliente/Lead, +Contact Mobile No,Celular do Contato, +Enter name of campaign if source of enquiry is campaign,Digite o nome da campanha se o motivo da consulta foi uma campanha., +Opportunity Date,Data da Oportunidade, +Opportunity Item,Item da Oportunidade, +Basic Rate,Taxa Básica, +Stage Name,Nome Artístico, +Social Media Post,Postagem Em Mídia Social, +Post Status,Status da Postagem, +Posted,Postou, +Share On,Compartilhar No, +Twitter,Twitter, +LinkedIn,Linkedin, +Twitter Post Id,Twitter Post Id, +LinkedIn Post Id,ID de Postagem no Linkedin, +Tweet,Tweet, +Twitter Settings,Configurações do Twitter, +API Secret Key,Chave Secreta Api, +Term Name,Nome do Período Letivo, +Term Start Date,Data de Início do Ano Letivo, +Term End Date,Data de Término do Período Letivo, +Academics User,Usuário Acadêmico, +Academic Year Name,Nome do Ano Letivo, +Article,Artigo, +LMS User,Usuário Lms, +Assessment Criteria Group,Critérios de Avaliação Grupo, +Assessment Group Name,Nome do Grupo de Avaliação, +Parent Assessment Group,Grupo de Avaliação Pai, +Assessment Name,Nome da Avaliação, +Grading Scale,Escala de Avaliação, +Examiner,Examinador, +Examiner Name,Nome do Examinador, +Supervisor,Supervisor, +Supervisor Name,Nome do Supervisor, +Evaluate,Avalie, +Maximum Assessment Score,Pontuação Máxima Assessment, +Assessment Plan Criteria,Critérios Plano de Avaliação, +Maximum Score,Nota Máxima, +Result,Resultado, +Total Score,Nota Total, +Grade,Nota de Avaliação, +Assessment Result Detail,Avaliação Resultado Detalhe, +Assessment Result Tool,Avaliação Resultado Ferramenta, +Result HTML,Resultado Html, +Content Activity,Atividade de Conteúdo, +Last Activity ,Ultima Atividade, +Content Question,Questão de Conteúdo, +Question Link,Link da Pergunta, +Course Name,Nome do Curso, +Topics,Tópicos, +Hero Image,Imagem do Herói, +Default Grading Scale,Escala de Avaliação Padrão, +Education Manager,Gerente de Educação, +Course Activity,Atividade do Curso, +Course Enrollment,Inscrição no Curso, +Activity Date,Data da Atividade, +Course Assessment Criteria,Critérios de Avaliação do Curso, +Weightage,Peso, +Course Content,Conteúdo do Curso, +Quiz,Questionário, +Program Enrollment,Inscrição no Programa, +Enrollment Date,Data de Matrícula, +Instructor Name,Nome do Instrutor, +EDU-CSH-.YYYY.-,EDU-CSH-.YYYY.-, +Course Scheduling Tool,Ferramenta de Agendamento de Cursos, +Course Start Date,Data de Início do Curso, +To TIme,Até o Horário, +Course End Date,Data de Término do Curso, +Course Topic,Tópico do Curso, +Topic,Tópico, +Topic Name,Nome do Tópico, +Education Settings,Configurações de Educação, +Current Academic Year,Ano Acadêmico Em Curso, +Current Academic Term,Termo Acadêmico Atual, +Attendance Freeze Date,Data de Congelamento do Comparecimento, +Validate Batch for Students in Student Group,Validar Lote Para Estudantes Em Grupo de Estudantes, +"For Batch based Student Group, the Student Batch will be validated for every Student from the Program Enrollment.","Para o grupo de alunos com base em lote, o lote de estudante será validado para cada aluno da inscrição no programa.", +Validate Enrolled Course for Students in Student Group,Validar Curso Matriculado Para Alunos do Grupo Estudantil, +"For Course based Student Group, the Course will be validated for every Student from the enrolled Courses in Program Enrollment.","Para o Grupo de Estudantes com Curso, o Curso será validado para cada Estudante dos Cursos Inscritos em Inscrição no Programa.", +Make Academic Term Mandatory,Tornar o Mandato Acadêmico Obrigatório, +"If enabled, field Academic Term will be Mandatory in Program Enrollment Tool.","Se ativado, o Termo Acadêmico do campo será obrigatório na Ferramenta de Inscrição do Programa.", +Skip User creation for new Student,Pular criação de usuário para novo aluno, +"By default, a new User is created for every new Student. If enabled, no new User will be created when a new Student is created.","Por padrão, um novo usuário é criado para cada novo aluno. Se habilitado, nenhum novo usuário será criado quando um novo aluno for criado.", +Instructor Records to be created by,Registros de instrutor a serem criados por, +Employee Number,Número do Colaborador, +Fee Category,Categoria de Taxas, +Fee Component,Componente da Taxa, +Fees Category,Categoria de Taxas, +Fee Schedule,Cronograma de Taxas, +Fee Structure,Estrutura da Taxa, +EDU-FSH-.YYYY.-,EDU-FSH-.YYYY.-, +Fee Creation Status,Status da Criação de Taxas, +In Process,Em Processo, +Send Payment Request Email,Enviar E-mail de Pedido de Pagamento, +Student Category,Categoria do Aluno, +Fee Breakup for each student,Fee Breakup para cada aluno, +Total Amount per Student,Montante Total Por Aluno, +Institution,Instituição, +Fee Schedule Program,Programa de Programação de Taxas, +Student Batch,Série de Alunos, +Total Students,Total de Alunos, +Fee Schedule Student Group,Fee Schedule Student Group, +EDU-FST-.YYYY.-,EDU-FST-.YYYY.-, +EDU-FEE-.YYYY.-,EDU-FEE-.YYYY.-, +Include Payment,Incluir Pagamento, +Send Payment Request,Enviar Pedido de Pagamento, +Student Details,Detalhes do Aluno, +Student Email,E-mail do Aluno, +Grading Scale Name,Nome Escala de Avaliação, +Grading Scale Intervals,Intervalos da Escala de Avaliação, +Intervals,Intervalos, +Grading Scale Interval,Intervalo da Escala de Avaliação, +Grade Code,Código de Nota de Avaliação, +Threshold,Média, +Grade Description,Descrição da Nota de Avaliação, +Guardian,Responsável, +Guardian Name,Nome do Responsável, +Alternate Number,Número Alternativo, +Occupation,Ocupação, +Work Address,Endereço de Trabalho, +Guardian Of ,Responsável Por, +Students,Alunos, +Guardian Interests,Interesses do Responsável, +Guardian Interest,Interesse do Responsável, +Interest,Juros, +Guardian Student,Guardião Student, +EDU-INS-.YYYY.-,EDU-INS-.YYYY.-, +Instructor Log,Registro de Instrutor, +Other details,Outros detalhes, +Option,Opção, +Is Correct,Está Correto, +Program Name,Nome do Programa, +Program Abbreviation,Abreviação do Programa, +Courses,Cursos, +Is Published,Está Publicado, +Allow Self Enroll,Permitir Autoinscrição, +Is Featured,É destaque, +Intro Video,Vídeo Intro, +Program Course,Curso do Programa, +School House,School House, +Boarding Student,Estudante de Embarque, +Check this if the Student is residing at the Institute's Hostel.,Verifique se o estudante reside no albergue do Instituto., +Walking,Caminhando, +Institute's Bus,Ônibus do Instituto, +Public Transport,Transporte Público, +Self-Driving Vehicle,Veículo de Auto-condução, +Pick/Drop by Guardian,Pick / Drop By Guardian, +Enrolled courses,Cursos matriculados, +Program Enrollment Course,Curso de Inscrição no Programa, +Program Enrollment Fee,Taxa de Inscrição no Programa, +Program Enrollment Tool,Ferramenta de Inscrição no Programa, +Get Students From,Obter Alunos De, +Student Applicant,Inscrição do Aluno, +Get Students,Obter Alunos, +Enrollment Details,Detalhes da Inscrição, +New Program,Novo Programa, +New Student Batch,Novo Lote de Estudantes, +Enroll Students,Matricular Alunos, +New Academic Year,Novo Ano Letivo, +New Academic Term,Novo Prazo Acadêmico, +Program Enrollment Tool Student,Ferramenta de Inscrição de Alunos no Programa, +Student Batch Name,Nome da Série de Alunos, +Program Fee,Taxa do Programa, +Question,Questão, +Single Correct Answer,Resposta Correta Única, +Multiple Correct Answer,Resposta Correta Múltipla, +Quiz Configuration,Configuração do Questionário, +Passing Score,Pontuação de Passagem, +Score out of 100,Pontuação de 100, +Max Attempts,Tentativas Máximas, +Enter 0 to waive limit,Digite 0 para renunciar ao limite, +Grading Basis,Base de Classificação, +Latest Highest Score,Última Pontuação Máxima, +Latest Attempt,Tentativa Mais Recente, +Quiz Activity,Atividade de Questionário, +Enrollment,Inscrição, +Pass,Passar, +Quiz Question,Quiz Question, +Quiz Result,Resultado do Teste, +Selected Option,Opção Selecionada, +Correct,Corrigir, +Wrong,Errado, +Room Name,Nome da Sala, +Room Number,Número da Sala, +Seating Capacity,Número de Assentos, +House Name,Nome Casa, +EDU-STU-.YYYY.-,EDU-STU-.YYYY.-, +Student Mobile Number,Número de Celular do Aluno, +Joining Date,Data de Admissão, +Blood Group,Grupo Sanguíneo, +A+,A+, +A-,A-, +B+,B+, +B-,B-, +O+,O+, +O-,O-, +AB+,AB+, +AB-,AB-, +Nationality,Nacionalidade, +Home Address,Endereço Residencial, +Guardian Details,Detalhes do Responsável, +Guardians,Responsáveis, +Sibling Details,Dados de Irmão/irmã, +Siblings,Irmãos, +Exit,Saída, +Date of Leaving,Data de Saída, +Leaving Certificate Number,Deixando Número do Certificado, +Reason For Leaving,Motivo da Saída, +Student Admission,Admissão do Aluno, +Admission Start Date,Data de Início de Admissão, +Admission End Date,Data de Término de Admissão, +Publish on website,Publicar no site, +Eligibility and Details,Elegibilidade e Detalhes, +Student Admission Program,Programa de Admissão de Estudantes, +Minimum Age,Idade Minima, +Maximum Age,Máxima Idade, +Application Fee,Taxa de Inscrição, +Naming Series (for Student Applicant),Código Dos Documentos (para Condidato À Vaga de Estudo), +LMS Only,Apenas Lms, +EDU-APP-.YYYY.-,EDU-APP-.YYYY.-, +Application Status,Estado da Candidatura, +Application Date,Data de Candidatura, +Student Attendance Tool,Ferramenta de Presença Dos Alunos, +Group Based On,Grupo Baseado Em, +Students HTML,Alunos Html, +Group Based on,Grupo Baseado Em, +Student Group Name,Nome do Grupo de Alunos, +Max Strength,Força Máx., +Set 0 for no limit,Defina 0 para sem limite, +Instructors,Instrutores, +Student Group Creation Tool,Ferramenta de Criação de Grupos de Alunos, +Leave blank if you make students groups per year,Deixe em branco se você fizer grupos de alunos por ano, +Get Courses,Obter Cursos, +Separate course based Group for every Batch,Grupo separado baseado em cursos para cada lote, +Leave unchecked if you don't want to consider batch while making course based groups. ,Deixe desmarcada se você não quiser considerar lote ao fazer cursos com base grupos., +Student Group Creation Tool Course,Ferramenta de Criação de Grupo de Alunos, +Course Code,Código do Curso, +Student Group Instructor,Instrutor de Grupo de Estudantes, +Student Group Student,Aluno Grupo de Alunos, +Group Roll Number,Número de Rolo de Grupo, +Student Guardian,Responsável Pelo Aluno, +Relation,Relação, +Mother,Mãe, +Father,Pai, +Student Language,Student Idioma, +Student Leave Application,Pedido de Licença do Aluno, +Mark as Present,Marcar Como Presente, +Student Log,Log do Aluno, +Academic,Acadêmico, +Achievement,Realização, +Student Report Generation Tool,Ferramenta de Geração de Relatórios de Alunos, +Include All Assessment Group,Incluir Todo o Grupo de Avaliação, +Show Marks,Mostrar Marcas, +Add letterhead,Adicionar papel timbrado, +Print Section,Seção de Impressão, +Total Parents Teacher Meeting,Reunião Total de Professores de Pais, +Attended by Parents,Assistido Pelos Pais, +Assessment Terms,Termos de Avaliação, +Student Sibling,Irmão do Aluno, +Studying in Same Institute,Estudar no Mesmo Instituto, +NO,Não, +YES,Sim, +Student Siblings,Irmãos do Aluno, +Topic Content,Conteúdo do Tópico, +Amazon MWS Settings,Configurações do Amazon Mws, +ERPNext Integrations,Integrações Erpnext, +Enable Amazon,Ativar a Amazon, +MWS Credentials,Credenciais Mws, +Seller ID,ID do Vendedor, +AWS Access Key ID,ID da Chave de Acesso da Aws, +MWS Auth Token,Token de Autenticação do Mws, +Market Place ID,ID do Market Place, +AE,AE, +AU,AU, +BR,BR, +CA,CA, +CN,CN, +DE,DE, +ES,ES, +FR,FR, +IN,IN, +JP,JP, +IT,IT, +MX,MX, +UK,UK, +US,US, +Customer Type,Tipo de Cliente, +Market Place Account Group,Grupo de Contas do Market Place, +After Date,Depois da Data, +Amazon will synch data updated after this date,A Amazon sincronizará os dados atualizados após essa data, +Sync Taxes and Charges,Sincronizar Impostos e Taxas, +Get financial breakup of Taxes and charges data by Amazon ,Obtenha a divisão financeira de impostos e encargos por dados da Amazon, +Sync Products,Produtos de Sincronização, +Always sync your products from Amazon MWS before synching the Orders details,Sempre sincronize seus produtos do Amazon MWS antes de sincronizar os detalhes dos pedidos, +Sync Orders,Sincronizar Pedidos, +Click this button to pull your Sales Order data from Amazon MWS.,Clique nesse botão para extrair os dados de sua ordem de venda do Amazon MWS., +Enable Scheduled Sync,Habilitar Sincronização Programada, +Check this to enable a scheduled Daily synchronization routine via scheduler,Marque isto para habilitar uma rotina de sincronização diária programada via agendador, +Max Retry Limit,Limite Máximo de Nova Tentativa, +Exotel Settings,Configurações do Exotel, +Account SID,Sid da Conta, +API Token,Token da Api, +GoCardless Mandate,Mandato Gocardless, +Mandate,Mandato, +GoCardless Customer,Cliente Gocardless, +GoCardless Settings,Configurações Gocardless, +Webhooks Secret,Webhooks Secret, +Plaid Settings,Configurações Plaid, +Synchronize all accounts every hour,Sincronize todas as contas a cada hora, +Plaid Client ID,ID do Cliente da Manta, +Plaid Secret,Segredo da Manta, +Plaid Environment,Ambiente Xadrez, +sandbox,sandbox, +development,desenvolvimento, +production,produção, +QuickBooks Migrator,Migrator de Quickbooks, +Application Settings,Configurações do Aplicativo, +Token Endpoint,Ponto Final do Token, +Scope,Escopo, +Authorization Settings,Configurações de Autorização, +Authorization Endpoint,Ponto Final da Autorização, +Authorization URL,URL de Autorização, +Quickbooks Company ID,ID da Empresa de Quickbooks, +Company Settings,Configurações da Empresa, +Default Shipping Account,Conta de Envio Padrão, +Default Warehouse,Armazém Padrão, +Default Cost Center,Centro de Custo Padrão, +Undeposited Funds Account,Conta de Fundos Não Depositados, +Shopify Log,Log do Shopify, +Request Data,Solicitar Dados, +Shopify Settings,Configurações do Shopify, +status html,status html, +Enable Shopify,Ativar o Shopify, +App Type,Tipo de Aplicativo, +Last Sync Datetime,Data e Hora da Última Sincronização, +Shop URL,URL da Loja, +eg: frappe.myshopify.com,eg: frappe.myshopify.com, +Shared secret,Segredo partilhado, +Webhooks Details,Webhooks Detalhes, +Webhooks,Webhooks, +Customer Settings,Configurações do Cliente, +Default Customer,Cliente Padrão, +Customer Group will set to selected group while syncing customers from Shopify,O Grupo de clientes será definido para o grupo selecionado durante a sincronização dos clientes do Shopify, +For Company,Para a Empresa, +Cash Account will used for Sales Invoice creation,Conta de caixa será usada para criação de fatura de vendas, +Update Price from Shopify To ERPNext Price List,Atualizar preço de Shopify para lista de preços ERPNext, +Default Warehouse to to create Sales Order and Delivery Note,Armazém padrão para criar ordem de venda e nota de remessa, +Sales Order Series,Série de Pedidos de Vendas, +Import Delivery Notes from Shopify on Shipment,Importar notas de entrega do Shopify no envio, +Delivery Note Series,Série de Notas de Entrega, +Import Sales Invoice from Shopify if Payment is marked,Importar fatura de vendas do Shopify se o pagamento estiver marcado, +Sales Invoice Series,Série de Faturas de Vendas, +Shopify Tax Account,Conta Fiscal do Shopify, +Shopify Tax/Shipping Title,Título do Imposto / Envio do Shopify, +ERPNext Account,Conta ERPNext, +Shopify Webhook Detail,Detalhe Shopify Webhook, +Webhook ID,ID da Webhook, +Tally Migration,Migração Tally, +Master Data,Dados Mestre, +"Data exported from Tally that consists of the Chart of Accounts, Customers, Suppliers, Addresses, Items and UOMs","Dados exportados do Tally que consistem no plano de contas, clientes, fornecedores, endereços, itens e UOMs", +Is Master Data Processed,Os Dados Mestre São Processados, +Is Master Data Imported,Os Dados Mestre São Importados?, +Tally Creditors Account,Conta de Credores Tally, +Creditors Account set in Tally,Conta de Credores Definida no Tally, +Tally Debtors Account,Conta de Devedores Tally, +Debtors Account set in Tally,Conta de Devedores Definida no Tally, +Tally Company,Tally Company, +Company Name as per Imported Tally Data,Nome da Empresa Conforme Dados Importados do Tally, +Default UOM,Uom Padrão, +UOM in case unspecified in imported data,UOM em caso não especificado nos dados importados, +ERPNext Company,Empresa Erpnext, +Your Company set in ERPNext,Sua Empresa Configurada no Erpnext, +Processed Files,Arquivos Processados, +Parties,Festas, +UOMs,Unidades de Medida, +Vouchers,Vouchers, +Round Off Account,Conta de Arredondamento, +Day Book Data,Dados do Livro de Dia, +Day Book Data exported from Tally that consists of all historic transactions,Dados do Day Book exportados do Tally que consistem em todas as transações históricas, +Is Day Book Data Processed,Os Dados do Livro Diário São Processados, +Is Day Book Data Imported,Os Dados do Livro Diário São Importados, +Woocommerce Settings,Configurações do Woocommerce, +Enable Sync,Ativar Sincronização, +Woocommerce Server URL,URL do Servidor de Woocommerce, +Secret,Segredo, +API consumer key,Chave do consumidor da API, +API consumer secret,Segredo do consumidor da API, +Tax Account,Conta Fiscal, +Freight and Forwarding Account,Conta de Frete e Encaminhamento, +Creation User,Usuário de Criação, +"The user that will be used to create Customers, Items and Sales Orders. This user should have the relevant permissions.","O usuário que será usado para criar clientes, itens e pedidos de vendas. Este usuário deve ter as permissões relevantes.", +"This warehouse will be used to create Sales Orders. The fallback warehouse is ""Stores"".",Este armazém será usado para criar pedidos de vendas. o armazém de fallback é "Lojas"., +"The fallback series is ""SO-WOO-"".",A série alternativa é "SO-WOO-"., +This company will be used to create Sales Orders.,Essa empresa será usada para criar pedidos de vendas., +Delivery After (Days),Entrega Após (dias), +This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Esse é o deslocamento padrão (dias) para a Data de entrega em pedidos de venda. o deslocamento de fallback é de 7 dias a partir da data de colocação do pedido., +"This is the default UOM used for items and Sales orders. The fallback UOM is ""Nos"".",Essa é a UOM padrão usada para itens e pedidos de venda. a UOM de fallback é "Nos"., +Endpoints,Endpoints, +Endpoint,Endpoint, +Antibiotic Name,Nome do Antibiótico, +Healthcare Administrator,Administrador de Serviço de Saúde, +Laboratory User,Usuário de Laboratório, +Is Inpatient,É paciente internado, +Default Duration (In Minutes),Duração Padrão (em Minutos), +Body Part,Parte do Corpo, +Body Part Link,Link da Parte do Corpo, +HLC-CPR-.YYYY.-,HLC-CPR-.YYYY.-, +Procedure Template,Modelo de Procedimento, +Procedure Prescription,Prescrição de Procedimento, +Service Unit,Unidade de Serviço, +Consumables,Consumíveis, +Consume Stock,Consumir Estoque, +Invoice Consumables Separately,Fatura de Consumíveis Separadamente, +Consumption Invoiced,Consumo Faturado, +Consumable Total Amount,Quantidade Total Consumível, +Consumption Details,Detalhes de Consumo, +Nursing User,Usuário de Enfermagem, +Clinical Procedure Item,Item de Procedimento Clínico, +Invoice Separately as Consumables,Fatura Separadamente Como Consumíveis, +Transfer Qty,Qtd de Transferência, +Actual Qty (at source/target),Qtde Real (na origem / destino), +Is Billable,É faturável, +Allow Stock Consumption,Permitir Consumo de Estoque, +Sample UOM,Amostra UDM, +Collection Details,Detalhes da Coleção, +Change In Item,Mudança no Item, +Codification Table,Tabela de Codificação, +Complaints,Reclamações, +Dosage Strength,Força de Dosagem, +Strength,Força, +Drug Prescription,Prescrição de Drogas, +Drug Name / Description,Nome / Descrição do Medicamento, +Dosage,Dosagem, +Dosage by Time Interval,Dosagem Por Intervalo de Tempo, +Interval,Intervalo, +Interval UOM,Uom Intervalo, +Hour,Hora, +Update Schedule,Programação de Atualização, +Exercise,Exercício, +Difficulty Level,Nível de Dificuldade, +Counts Target,Alvo de Contagens, +Counts Completed,Contagens Concluídas, +Assistance Level,Nível de Assistência, +Active Assist,Assistência Ativa, +Exercise Name,Nome do Exercício, +Body Parts,Partes do Corpo, +Exercise Instructions,Instruções de Exercício, +Exercise Video,Vídeo de Exercícios, +Exercise Steps,Etapas do Exercício, +Steps,Passos, +Steps Table,Tabela de Passos, +Exercise Type Step,Etapa de Tipo de Exercício, +Max number of visit,Número máximo de visitas, +Visited yet,Visitou Ainda, +Reference Appointments,Consultas de Referência, +Valid till,Válida até, +Fee Validity Reference,Referência de Validade da Taxa, +Basic Details,Detalhes Básicos, +HLC-PRAC-.YYYY.-,HLC-PRAC-.YYYY.-, +Mobile,Móvel, +Phone (R),Telefone (r), +Phone (Office),Telefone (escritório), +Employee and User Details,Detalhes do Funcionário e do Usuário, +Hospital,Hospital, +Appointments,Compromissos, +Practitioner Schedules,Horários do Praticante, +Charges,Cobranças, +Out Patient Consulting Charge,Cobrança de Consultoria de Paciente Externo, +Default Currency,Moeda Padrão, +Healthcare Schedule Time Slot,Slot de Tempo do Cronograma de Assistência Médica, +Parent Service Unit,Unidade de Serviço Dos Pais, +Service Unit Type,Tipo de Unidade de Serviço, +Allow Appointments,Permitir Compromissos, +Allow Overlap,Permitir Sobreposição, +Inpatient Occupancy,Ocupação de Paciente Internado, +Occupancy Status,Status de Ocupação, +Vacant,Vago, +Occupied,Ocupado, +Item Details,Detalhes do Item, +UOM Conversion in Hours,Conversão de UDM Em Horas, +Rate / UOM,Valor / Udm, +Change in Item,Mudança no Item, +Out Patient Settings,Configurações do Paciente, +Patient Name By,Nome do Paciente Por, +Patient Name,Nome do Paciente, +Link Customer to Patient,Ligar o Cliente Ao Paciente, +"If checked, a customer will be created, mapped to Patient.\nPatient Invoices will be created against this Customer. You can also select existing Customer while creating Patient.","Se marcado, um cliente será criado, mapeado para Paciente. as faturas do paciente serão criadas contra este Cliente. Você também pode selecionar o Cliente existente ao criar o Paciente.", +Default Medical Code Standard,Padrão do Código Médico Padrão, +Collect Fee for Patient Registration,Taxa de Recolha Para Registro de Pacientes, +Checking this will create new Patients with a Disabled status by default and will only be enabled after invoicing the Registration Fee.,Marcar isto criará novos Pacientes com o status Desabilitado por padrão e só será habilitado após o faturamento da Taxa de Registro., +Registration Fee,Taxa de Registro, +Automate Appointment Invoicing,Automatizar Faturamento de Agendamento, +Manage Appointment Invoice submit and cancel automatically for Patient Encounter,Gerenciar Compromisso Enviar fatura e cancelar automaticamente para Encontro do Paciente, +Enable Free Follow-ups,Habilitar Acompanhamentos Gratuitos, +Number of Patient Encounters in Valid Days,Número de Encontros Com Pacientes Em Dias Válidos, +The number of free follow ups (Patient Encounters in valid days) allowed,O número de acompanhamentos gratuitos (encontros com pacientes em dias válidos) permitidos, +Valid Number of Days,Número de Dias Válidos, +Time period (Valid number of days) for free consultations,Período de tempo (número válido de dias) para consultas gratuitas, +Default Healthcare Service Items,Itens de Serviço de Saúde Padrão, +"You can configure default Items for billing consultation charges, procedure consumption items and inpatient visits","Você pode configurar itens padrão para cobrança de despesas de consulta, itens de consumo de procedimento e visitas de pacientes", +Clinical Procedure Consumable Item,Item Consumível de Procedimento Clínico, +Default Accounts,Contas Padrão, +Default income accounts to be used if not set in Healthcare Practitioner to book Appointment charges.,Contas de renda padrão a serem usadas se não forem definidas no Healthcare Practitioner para reservar as despesas de Compromisso., +Default receivable accounts to be used to book Appointment charges.,Contas a receber padrão a serem usadas para reservar despesas de compromissos., +Out Patient SMS Alerts,Alertas de SMS Para Pacientes, +Patient Registration,Registro de Paciente, +Registration Message,Mensagem de Registro, +Confirmation Message,Mensagem de Confirmação, +Avoid Confirmation,Evite a Confirmação, +Do not confirm if appointment is created for the same day,Não confirme se o compromisso foi criado no mesmo dia, +Appointment Reminder,Lembrete de Compromisso, +Reminder Message,Mensagem de Lembrete, +Remind Before,Lembre-se Antes, +Laboratory Settings,Configurações de Laboratório, +Create Lab Test(s) on Sales Invoice Submission,Criar Teste (s) de Laboratório no Envio de Fatura de Vendas, +Checking this will create Lab Test(s) specified in the Sales Invoice on submission.,Marcar isso criará teste (s) de laboratório especificado (s) na fatura de vendas no envio., +Create Sample Collection document for Lab Test,Criar documento de coleta de amostra para teste de laboratório, +Checking this will create a Sample Collection document every time you create a Lab Test,Marcar isso criará um documento de coleta de amostra toda vez que você criar um teste de laboratório, +Employee name and designation in print,Nome do empregado e designação em impressão, +Check this if you want the Name and Designation of the Employee associated with the User who submits the document to be printed in the Lab Test Report.,Marque esta opção se desejar que o Nome e Designação do Funcionário associado ao Usuário que submete o documento sejam impressos no Relatório de Teste de Laboratório., +Do not print or email Lab Tests without Approval,Não imprima ou envie por e-mail testes de laboratório sem aprovação, +Checking this will restrict printing and emailing of Lab Test documents unless they have the status as Approved.,Marcar isso restringirá a impressão e o envio de documentos de teste de laboratório por e-mail a menos que tenham o status de aprovado., +Custom Signature in Print,Assinatura Personalizada na Impressão, +Laboratory SMS Alerts,Alertas SMS Laboratoriais, +Result Printed Message,Resultado da Mensagem Impressa, +Result Emailed Message,Mensagem Enviada Por Email de Resultado, +Check In,Check-in, +Check Out,Confira, +HLC-INP-.YYYY.-,HLC-INP-.YYYY.-, +A Positive,Um Positivo, +A Negative,Um Negativo, +AB Positive,Ab Positivo, +AB Negative,Ab Negativo, +B Positive,B Positivo, +B Negative,B Negativo, +O Positive,O Positivo, +O Negative,O Negativo, +Date of birth,Data de Nascimento, +Admission Scheduled,Admissão Agendada, +Discharge Scheduled,Descarga Agendada, +Discharged,Descarregado, +Admission Schedule Date,Data de Agendamento de Admissão, +Admitted Datetime,Datetime Admitido, +Expected Discharge,Descarga Esperada, +Discharge Date,Data de Quitação, +Lab Prescription,Prescrição de Laboratório, +Lab Test Name,Nome do Teste de Laboratório, +Test Created,Test Criado, +Submitted Date,Data Enviada, +Approved Date,Data Aprovada, +Sample ID,Identificação da Amostra, +Lab Technician,Técnico de Laboratório, +Report Preference,Prevenção de Relatório, +Test Name,Nome do Teste, +Test Template,Modelo de Teste, +Test Group,Grupo de Teste, +Custom Result,Resultado Personalizado, +LabTest Approver,Labtest Approver, +Add Test,Adicionar Teste, +Normal Range,Intervalo Normal, +Result Format,Formato de Resultado, +Single,Solteiro, +Compound,Composto, +Descriptive,Descritivo, +Grouped,Agrupados, +No Result,Nenhum Resultado, +This value is updated in the Default Sales Price List.,Esse valor é atualizado na Lista de Preços de Vendas Padrão., +Lab Routine,Rotina de Laboratório, +Result Value,Valor de Resultado, +Require Result Value,Exigir o Valor do Resultado, +Normal Test Template,Modelo de Teste Normal, +Patient Demographics,Demografia do Paciente, +HLC-PAT-.YYYY.-,HLC-PAT-.YYYY.-, +Middle Name (optional),Nome do Meio (opcional), +Inpatient Status,Status de Internação, +"If ""Link Customer to Patient"" is checked in Healthcare Settings and an existing Customer is not selected then, a Customer will be created for this Patient for recording transactions in Accounts module.","Se a opção "Vincular cliente ao paciente" estiver marcada nas configurações de saúde e um cliente existente não for selecionado, um cliente será criado para esse paciente para registrar transações no módulo Contas.", +Personal and Social History,História Pessoal e Social, +Marital Status,Estado Civil, +Married,Casado, +Divorced,Divorciado, +Widow,Viúva, +Patient Relation,Relação Com o Paciente, +"Allergies, Medical and Surgical History","Alergias, História Médica e Cirúrgica", +Allergies,Alergias, +Medication,Medicação, +Medical History,Histórico Médico, +Surgical History,História Cirúrgica, +Risk Factors,Fatores de Risco, +Occupational Hazards and Environmental Factors,Perigos Ocupacionais e Fatores Ambientais, +Other Risk Factors,Outros Fatores de Risco, +Patient Details,Detalhes do Paciente, +Additional information regarding the patient,Informações adicionais sobre o paciente, +HLC-APP-.YYYY.-,HLC-APP-.YYYY.-, +Patient Age,Idade do Paciente, +Get Prescribed Clinical Procedures,Obtenha Procedimentos Clínicos Prescritos, +Therapy,Terapia, +Get Prescribed Therapies,Obtenha Terapias Prescritas, +Appointment Datetime,Data e Hora do Compromisso, +Duration (In Minutes),Duração (em Minutos), +Reference Sales Invoice,Fatura de Venda de Referência, +More Info,Mais Informações, +Referring Practitioner,Referindo Praticante, +Reminded,Lembrado, +HLC-PA-.YYYY.-,HLC-PA-.YYYY.-, +Assessment Template,Modelo de Avaliação, +Assessment Datetime,Data da Avaliação, +Assessment Description,Descrição da Avaliação, +Assessment Sheet,Folha de Avaliação, +Total Score Obtained,Pontuação Total Obtida, +Scale Min,Escala Min, +Scale Max,Escala Máxima, +Patient Assessment Detail,Detalhe de Avaliação do Paciente, +Assessment Parameter,Parâmetro de Avaliação, +Patient Assessment Parameter,Parâmetro de Avaliação do Paciente, +Patient Assessment Sheet,Folha de Avaliação do Paciente, +Patient Assessment Template,Modelo de Avaliação do Paciente, +Assessment Parameters,Parâmetros de Avaliação, +Parameters,Parâmetros, +Assessment Scale,Escala de Avaliação, +Scale Minimum,Escala Mínima, +Scale Maximum,Escala Máxima, +HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-, +Encounter Date,Encontro Data, +Encounter Time,Hora do Encontro, +Encounter Impression,Encounter Impression, +Symptoms,Sintomas, +In print,Na impressão, +Medical Coding,Codificação Médica, +Procedures,Procedimentos, +Therapies,Terapias, +Review Details,Detalhes da Revisão, +Patient Encounter Diagnosis,Diagnóstico de Encontro Com Paciente, +Patient Encounter Symptom,Sintoma de Encontro Com Paciente, +HLC-PMR-.YYYY.-,HLC-PMR-.YYYY.-, +Attach Medical Record,Anexar Prontuário Médico, +Reference DocType,DocType de Referência, +Spouse,Cônjuge, +Family,Família, +Schedule Details,Detalhes da Programação, +Schedule Name,Nome da Programação, +Time Slots,Intervalos de Tempo, +Practitioner Service Unit Schedule,Programa de Unidade de Serviço do Praticante, +Procedure Name,Nome do Procedimento, +Appointment Booked,Nomeação Reservada, +Procedure Created,Procedimento Criado, +HLC-SC-.YYYY.-,HLC-SC-.YYYY.-, +Collected By,Coletado Por, +Particulars,Informações, +Result Component,Componente de Resultado, +HLC-THP-.YYYY.-,HLC-THP-.YYYY.-, +Therapy Plan Details,Detalhes do Plano de Terapia, +Total Sessions,Total de Sessões, +Total Sessions Completed,Total de Sessões Concluídas, +Therapy Plan Detail,Detalhe do Plano de Terapia, +No of Sessions,Nº de Sessões, +Sessions Completed,Sessões Concluídas, +Tele,Tele, +Exercises,Exercícios, +Therapy For,Terapia Para, +Add Exercises,Adicionar Exercícios, +Body Temperature,Temperatura Corporal, +Presence of a fever (temp > 38.5 °C/101.3 °F or sustained temp > 38 °C/100.4 °F),"Presença de febre (temperatura> 38,5 ° C / 101,3 ° F ou temperatura sustentada> 38 ° C / 100,4 ° F)", +Heart Rate / Pulse,Frequência Cardíaca / Pulso, +Adults' pulse rate is anywhere between 50 and 80 beats per minute.,A frequência de pulso dos adultos é entre 50 e 80 batimentos por minuto., +Respiratory rate,Frequência respiratória, +Normal reference range for an adult is 16–20 breaths/minute (RCP 2012),O intervalo de referência normal para um adulto é de 16-20 respirações / minuto (RCP 2012), +Tongue,Língua, +Coated,Revestido, +Very Coated,Muito Revestido, +Normal,Normal, +Furry,Peludo, +Cuts,Cortes, +Abdomen,Abdômen, +Bloated,Inchado, +Fluid,Fluido, +Constipated,Constipado, +Reflexes,Reflexos, +Hyper,Hyper, +Very Hyper,Muito Hiper, +One Sided,Um Lado, +Blood Pressure (systolic),Pressão Sanguínea (sistólica), +Blood Pressure (diastolic),Pressão Sanguínea (diastólica), +Blood Pressure,Pressão Sanguínea, +"Normal resting blood pressure in an adult is approximately 120 mmHg systolic, and 80 mmHg diastolic, abbreviated ""120/80 mmHg""","A pressão arterial normal em repouso em um adulto é de aproximadamente 120 mmHg sistólica e 80 mmHg diastólica, abreviada "120/80 mmHg"", +Nutrition Values,Valores Nutricionais, +Height (In Meter),Altura (em Metros), +Weight (In Kilogram),Peso (em Quilograma), +BMI,IMC, +Hotel Room,Quarto de Hotel, +Hotel Room Type,Tipo de Quarto do Hotel, +Capacity,Capacidade, +Extra Bed Capacity,Capacidade de Cama Extra, +Hotel Manager,Gerente do Hotel, +Hotel Room Amenity,Amenidade do Quarto do Hotel, +Billable,Faturável, +Hotel Room Package,Pacote de Quarto de Hotel, +Amenities,Facilidades, +Hotel Room Pricing,Preços do Quarto do Hotel, +Hotel Room Pricing Item,Item do Preço do Quarto do Hotel, +Hotel Room Pricing Package,Pacote de Preços de Quarto de Hotel, +Hotel Room Reservation,Reserva de Quarto de Hotel, +Guest Name,Nome do Convidado, +Late Checkin,Entrada Tardia, +Booked,Reservado, +Hotel Reservation User,Usuário de Reserva de Hotel, +Hotel Room Reservation Item,Item de Reserva de Quarto de Hotel, +Hotel Settings,Configurações do Hotel, +Default Taxes and Charges,Impostos e Encargos Padrão, +Default Invoice Naming Series,Série de Nomeação de Fatura Padrão, +Additional Salary,Salário Adicional, +HR,Rh, +HR-ADS-.YY.-.MM.-,HR-ADS-.YY.-. MM.-, +Salary Component,Componente Salarial, +Overwrite Salary Structure Amount,Sobrescrever Quantidade de Estrutura Salarial, +Deduct Full Tax on Selected Payroll Date,Deduzir o Imposto Total na Data da Folha de Pagamento Selecionada, +Payroll Date,Data da Folha de Pagamento, +Date on which this component is applied,Data em que este componente é aplicado, +Salary Slip,Contracheque, +Salary Component Type,Tipo de Componente Salarial, +HR User,Usuário do Rh, +Appointment Letter,Carta de Nomeação, +Job Applicant,Candidato À Vaga, +Applicant Name,Nome do Candidato, +Appointment Date,Data do Encontro, +Appointment Letter Template,Modelo de Carta de Nomeação, +Body,Corpo, +Closing Notes,Notas de Encerramento, +Appointment Letter content,Conteúdo da carta de nomeação, +Appraisal,Avaliação, +HR-APR-.YY.-.MM.,HR-APR-.YY.-.MM., +Appraisal Template,Modelo de Avaliação, +For Employee Name,Para Nome do Colaborador, +Goals,Metas, +Total Score (Out of 5),Pontuação Total (nota Máxima 5), +"Any other remarks, noteworthy effort that should go in the records.","Quaisquer outras observações, esforço digno de nota que deve constar nos registros.", +Appraisal Goal,Meta de Avaliação, +Key Responsibility Area,Área de responsabilidade principal, +Weightage (%),Peso (%), +Score (0-5),Pontuação (0-5), +Score Earned,Pontuação Obtida, +Appraisal Template Title,Título do Modelo de Avaliação, +Appraisal Template Goal,Meta do Modelo de Avaliação, +KRA,KRA, +Key Performance Area,Área de performance principal, +HR-ATT-.YYYY.-,HR-ATT-.YYYY.-, +On Leave,De Licença, +Work From Home,Trabalho a Partir de Casa, +Leave Application,Solicitação de Licenças, +Attendance Date,Data de Comparecimento, +Attendance Request,Solicitação de Participação, +Late Entry,Entrada Tardia, +Early Exit,Saída Antecipada, +Half Day Date,Meio Período da Data, +On Duty,Em Serviço, +Explanation,Explicação, +Compensatory Leave Request,Pedido de Licença Compensatória, +Leave Allocation,Alocação de Licenças, +Worked On Holiday,Trabalhou no Feriado, +Work From Date,Trabalho a Partir da Data, +Work End Date,Data de Término do Trabalho, +Email Sent To,Email Enviado Para, +Select Users,Selecione Usuários, +Send Emails At,Enviar Emails Em, +Reminder,Lembrete, +Daily Work Summary Group User,Usuário do Grupo Resumo do Trabalho Diário, +email,email, +Parent Department,Departamento Dos Pais, +Leave Block List,Lista de Bloqueio de Licença, +Days for which Holidays are blocked for this department.,Dias para que feriados são bloqueados para este departamento., +Leave Approver,Aprovador de Licenças, +Expense Approver,Aprovador de Despesas, +Department Approver,Aprovador do Departamento, +Approver,Aprovador, +Required Skills,Habilidades Necessárias, +Skills,Habilidades, +Designation Skill,Habilidade de Designação, +Skill,Habilidade, +Driver,Motorista, +HR-DRI-.YYYY.-,HR-DRI-.YYYY.-, +Suspended,Suspenso, +Transporter,Transportador, +Applicable for external driver,Aplicável para driver externo, +Cellphone Number,Número do Celular, +License Details,Detalhes da Licença, +License Number,Número de Licença, +Issuing Date,Data de Emissão, +Driving License Categories,Categorias de Licenças de Condução, +Driving License Category,Categoria de Licença de Condução, +Fleet Manager,Gerente de Frota, +Driver licence class,Classe de carteira de motorista, +HR-EMP-,Hr-emp-, +Employment Type,Tipo de Emprego, +Emergency Contact,Contato de Emergência, +Emergency Contact Name,Nome do Contato de Emergência, +Emergency Phone,Telefone de Emergência, +ERPNext User,Usuário do Erpnext, +"System User (login) ID. If set, it will become default for all HR forms.","Identificação do usuário no sistema (login). Se for marcado, ele vai se tornar padrão para todos os formulários de RH.", +Create User Permission,Criar Permissão de Usuário, +This will restrict user access to other employee records,Isso restringirá o acesso do usuário a outros registros de funcionários, +Joining Details,Unindo Detalhes, +Offer Date,Data da Oferta, +Confirmation Date,Data de Confirmação, +Contract End Date,Data Final do Contrato, +Notice (days),Aviso Prévio ( Dias), +Date Of Retirement,Data da Aposentadoria, +Department and Grade,Departamento e Grau, +Reports to,Relatórios Para, +Attendance and Leave Details,Detalhes de Participação e Licença, +Leave Policy,Política de Licença, +Attendance Device ID (Biometric/RF tag ID),ID do Dispositivo de Atendimento (id de Tag Biométrico / Rf), +Applicable Holiday List,Lista de Férias Aplicável, +Default Shift,Mudança Padrão, +Salary Details,Detalhes do Salário, +Salary Mode,Modo de Salário, +Bank A/C No.,Nº Cta. Bancária, +Health Insurance,Plano de Saúde, +Health Insurance Provider,Provedor de Seguro de Saúde, +Health Insurance No,Seguro de Saúde Não, +Prefered Email,Email Preferido, +Personal Email,Email Pessoal, +Permanent Address Is,Endereço Permanente É, +Rented,Alugado, +Owned,Pertencente, +Permanent Address,Endereço Permanente, +Prefered Contact Email,Contato de Email Preferido, +Company Email,Email da Empresa, +Provide Email Address registered in company,Forneça o Endereço de Email registado na empresa, +Current Address Is,Endereço Atual É, +Current Address,Endereço Atual, +Personal Bio,Bio Pessoal, +Bio / Cover Letter,Bio / Carta de Apresentação, +Short biography for website and other publications.,Breve biografia para o site e outras publicações., +Passport Number,Número do Passaporte, +Date of Issue,Data de Emissão, +Place of Issue,Local de Envio, +Widowed,Viúvo(a), +Family Background,Antecedentes Familiares, +"Here you can maintain family details like name and occupation of parent, spouse and children","Aqui você pode manter detalhes familiares como o nome e ocupação do cônjuge, pai e filhos", +Health Details,Detalhes Sobre a Saúde, +"Here you can maintain height, weight, allergies, medical concerns etc","Aqui você pode manter a altura, peso, alergias, restrições médicas, etc", +Educational Qualification,Qualificação Educacional, +Previous Work Experience,Experiência Anterior de Trabalho, +External Work History,Histórico Profissional no Exterior, +History In Company,Histórico na Empresa, +Internal Work History,História Trabalho Interno, +Resignation Letter Date,Data da Carta de Demissão, +Relieving Date,Data da Liberação, +Reason for Leaving,Motivo da Saída, +Leave Encashed?,Licenças Cobradas?, +Encashment Date,Data da Cobrança, +New Workplace,Novo Local de Trabalho, +HR-EAD-.YYYY.-,HR-EAD-.YYYY.-, +Returned Amount,Valor Devolvido, +Claimed,Reivindicado, +Advance Account,Conta de Adiantamentos, +Employee Attendance Tool,Ferramenta Para Lançamento de Ponto, +Unmarked Attendance,Presença Desmarcada, +Employees HTML,Colaboradores Html, +Marked Attendance,Presença Marcada, +Marked Attendance HTML,Presença Marcante Html, +Employee Benefit Application,Aplicação de Benefício do Empregado, +Max Benefits (Yearly),Benefícios Máximos (anual), +Remaining Benefits (Yearly),Benefícios Restantes (anualmente), +Payroll Period,Período da Folha de Pagamento, +Benefits Applied,Benefícios Aplicados, +Dispensed Amount (Pro-rated),Quantidade Dispensada (pro-rated), +Employee Benefit Application Detail,Detalhes do Aplicativo de Benefício do Funcionário, +Earning Component,Componente Ganho, +Pay Against Benefit Claim,Pagar Contra a Reivindicação de Benefícios, +Max Benefit Amount,Montante Máximo de Benefícios, +Employee Benefit Claim,Reivindicação de Benefícios do Empregado, +Claim Date,Data de Reivindicação, +Benefit Type and Amount,Tipo de Benefício e Montante, +Claim Benefit For,Reivindicar Benefício Para, +Max Amount Eligible,Montante Máximo Elegível, +Expense Proof,Prova de Despesas, +Employee Boarding Activity,Atividade de Embarque de Funcionários, +Activity Name,Nome da Atividade, +Task Weight,Peso da Tarefa, +Required for Employee Creation,Necessário Para a Criação de Funcionários, +Applicable in the case of Employee Onboarding,Aplicável no caso de Onboarding de Funcionários, +Employee Checkin,Check-in de Funcionários, +Log Type,Tipo de Registro, +OUT,Fora, +Location / Device ID,Localização / ID do Dispositivo, +Skip Auto Attendance,Ignorar a Participação Automática, +Shift Start,Mudança de Partida, +Shift End,Shift End, +Shift Actual Start,Mudança de Partida Real, +Shift Actual End,Mudar o Fim Real, +Employee Education,Escolaridade do Colaborador, +School/University,Escola / Universidade, +Graduate,Pós-graduação, +Post Graduate,Pós-graduação, +Under Graduate,Em Graduação, +Year of Passing,Ano de Passagem, +Class / Percentage,Classe / Percentual, +Major/Optional Subjects,Assuntos Principais / Opcionais, +Employee External Work History,Histórico de Trabalho Externo do Colaborador, +Total Experience,Experiência Total, +Default Leave Policy,Política de Licença Padrão, +Default Salary Structure,Estrutura Salarial Padrão, +Employee Group Table,Tabela de Grupo de Empregados, +ERPNext User ID,ID do Usuário do Erpnext, +Employee Health Insurance,Seguro de Saúde do Funcionário, +Health Insurance Name,Nome do Seguro de Saúde, +Employee Incentive,Incentivo Ao Funcionário, +Incentive Amount,Quantidade de Incentivo, +Employee Internal Work History,Histórico de Trabalho Interno do Colaborador, +Employee Onboarding,Empregado Onboarding, +Notify users by email,Notificar usuários por email, +Employee Onboarding Template,Modelo de Integração de Funcionários, +Activities,Actividades, +Employee Onboarding Activity,Atividade de Onboarding Dos Funcionários, +Employee Other Income,Outras Receitas do Empregado, +Employee Promotion,Promoção de Funcionários, +Promotion Date,Data de Promoção, +Employee Promotion Details,Detalhes da Promoção do Funcionário, +Employee Promotion Detail,Detalhe de Promoção do Funcionário, +Employee Property History,História da Propriedade do Empregado, +Employee Separation,Separação de Funcionários, +Employee Separation Template,Modelo de Separação de Funcionários, +Exit Interview Summary,Resumo da Entrevista de Saída, +Employee Skill,Habilidade Dos Funcionários, +Proficiency,Proficiência, +Evaluation Date,Data de Avaliação, +Employee Skill Map,Mapa de Habilidades Dos Funcionários, +Employee Skills,Habilidades Dos Funcionários, +Trainings,Treinamentos, +Employee Tax Exemption Category,Categoria de Isenção de Imposto do Empregado, +Max Exemption Amount,Quantidade Máxima de Isenção, +Employee Tax Exemption Declaration,Declaração de Isenção de Imposto do Empregado, +Declarations,Declarações, +Total Declared Amount,Valor Total Declarado, +Total Exemption Amount,Quantia Total de Isenção, +Employee Tax Exemption Declaration Category,Categoria de Declaração de Isenção de Imposto do Empregado, +Exemption Sub Category,Subcategoria de Isenção, +Exemption Category,Categoria de Isenção, +Maximum Exempted Amount,Quantidade Máxima Isenta, +Declared Amount,Valor Declarado, +Employee Tax Exemption Proof Submission,Submissão de Prova de Isenção de Imposto de Empregado, +Submission Date,Data de Submissão, +Tax Exemption Proofs,Provas de Isenção Fiscal, +Total Actual Amount,Valor Real Total, +Employee Tax Exemption Proof Submission Detail,Detalhe de Envio de Prova de Isenção de Imposto de Empregado, +Maximum Exemption Amount,Quantia Máxima de Isenção, +Type of Proof,Tipo de Prova, +Actual Amount,Montante Atual, +Employee Tax Exemption Sub Category,Sub-categoria de Isenção de Imposto do Empregado, +Tax Exemption Category,Categoria de Isenção Fiscal, +Employee Training,Treinamento de Funcionário, +Training Date,Data de Treinamento, +Employee Transfer,Transferência de Empregados, +Transfer Date,Data de Transferência, +Employee Transfer Details,Detalhes de Transferência de Funcionários, +Employee Transfer Detail,Detalhe de Transferência de Funcionários, +Re-allocate Leaves,Reatribuir Folhas, +Create New Employee Id,Criar Novo ID de Funcionário, +New Employee ID,ID do Novo Funcionário, +Employee Transfer Property,Propriedade de Transferência do Empregado, +HR-EXP-.YYYY.-,HR-EXP-.YYYY.-, +Expense Taxes and Charges,Impostos e Taxas de Despesas, +Total Sanctioned Amount,Valor Total Liberado, +Total Advance Amount,Valor Total do Adiantamento, +Total Claimed Amount,Quantia Total Reivindicada, +Total Amount Reimbursed,Quantia Total Reembolsada, +Vehicle Log,Log do Veículo, +Employees Email Id,Email dos Colaboradores, +More Details,Mais Detalhes, +Expense Claim Account,Conta de Reembolso de Despesas, +Expense Claim Advance,Adiantamento de Solicitação de Reembolso, +Unclaimed amount,Montante não reclamado, +Expense Claim Detail,Detalhe do Pedido de Reembolso de Despesas, +Expense Date,Data da Despesa, +Expense Claim Type,Tipo de Pedido de Reembolso de Despesas, +Holiday List Name,Nome da Lista de Feriados, +Total Holidays,Total de Feriados, +Add Weekly Holidays,Adicionar Feriados Semanais, +Weekly Off,Descanso Semanal, +Add to Holidays,Adicionar Aos Feriados, +Holidays,Feriados, +Clear Table,Limpar Tabela, +HR Settings,Configurações de Rh, +Employee Settings,Configurações de Colaboradores, +Retirement Age,Idade Para Aposentadoria, +Enter retirement age in years,Insira a idade da aposentadoria em anos, +Stop Birthday Reminders,Interromper Lembretes de Aniversários, +Expense Approver Mandatory In Expense Claim,Aprovador de Despesas Obrigatório na Declaração de Despesas, +Payroll Settings,Configurações da Folha de Pagamento, +Leave,Sair, +Max working hours against Timesheet,Máx. de horas de trabalho no Registo de Horas, +Include holidays in Total no. of Working Days,Incluir feriados no total de dias de trabalho, +"If checked, Total no. of Working Days will include holidays, and this will reduce the value of Salary Per Day","Se marcado, o total de dias de trabalho vai incluir férias, e isso vai reduzir o valor de salário por dia", +"If checked, hides and disables Rounded Total field in Salary Slips","Se marcado, oculta e desativa o campo Arredondado total em boletins de salários", +The fraction of daily wages to be paid for half-day attendance,A fração do salário diário a ser paga por meio período de atendimento, +Email Salary Slip to Employee,Enviar Contracheque Para Colaborador Via Email, +Emails salary slip to employee based on preferred email selected in Employee,Enviar contracheques para os colaboradores com base em email preferido selecionado no cadastro do colaborador, +Encrypt Salary Slips in Emails,Criptografar Slices Salariais Em Emails, +"The salary slip emailed to the employee will be password protected, the password will be generated based on the password policy.","O boleto enviado por e-mail ao funcionário será protegido por senha, a senha será gerada com base na política de senha.", +Password Policy,Política de Senha, +Example: SAL-{first_name}-{date_of_birth.year}
    This will generate a password like SAL-Jane-1972,Exemplo: SAL- {first_name} - {date_of_birth.year}
    Isto irá gerar uma senha como SAL-Jane-1972, +Leave Settings,Deixe as Configurações, +Leave Approval Notification Template,Deixar Modelo de Notificação de Aprovação, +Leave Status Notification Template,Deixe o Modelo de Notificação de Status, +Role Allowed to Create Backdated Leave Application,Função Permitida Para Criar Aplicativos de Licença Antigos, +Leave Approver Mandatory In Leave Application,Deixe o Aprovador Obrigatório no Pedido de Licença, +Show Leaves Of All Department Members In Calendar,Mostrar Folhas de Todos os Membros do Departamento no Calendário, +Auto Leave Encashment,Deixar Automaticamente o Carregamento, +Hiring Settings,Configurações de Contratação, +Check Vacancies On Job Offer Creation,Verifique as Vagas na Criação da Oferta de Emprego, +Identification Document Type,Tipo de Documento de Identificação, +Effective from,Efetivo de, +Allow Tax Exemption,Permitir Isenção de Impostos, +"If enabled, Tax Exemption Declaration will be considered for income tax calculation.","Se ativada, a Declaração de Isenção de Imposto será considerada para o cálculo do imposto de renda.", +Standard Tax Exemption Amount,Quantia Padrão de Isenção de Imposto, +Taxable Salary Slabs,Placas Salariais Tributáveis, +Taxes and Charges on Income Tax,Impostos e Encargos Sobre o Imposto de Renda, +Other Taxes and Charges,Outros Impostos e Taxas, +Income Tax Slab Other Charges,Laje de Imposto de Renda - Outros Encargos, +Min Taxable Income,Renda Mínima Tributável, +Max Taxable Income,Lucro Tributável Máximo, +Applicant for a Job,Candidato À Uma Vaga, +Accepted,Aceito, +Job Opening,Vaga de Trabalho, +Cover Letter,Carta de Apresentação, +Resume Attachment,Anexo Currículo, +Job Applicant Source,Fonte de Candidato a Emprego, +Applicant Email Address,Endereço de E-mail do Requerente, +Awaiting Response,Aguardando Resposta, +Job Offer Terms,Termos da Oferta de Emprego, +Select Terms and Conditions,Selecione os Termos e Condições, +Printing Details,Imprimir Detalhes, +Job Offer Term,Prazo de Oferta de Emprego, +Offer Term,Termos da Oferta, +Value / Description,Valor / Descrição, +Description of a Job Opening,Descrição de Uma Vaga de Emprego, +Job Title,Cargo, +Staffing Plan,Plano de Pessoal, +Planned number of Positions,Número planejado de posições, +"Job profile, qualifications required etc.","Perfil da vaga, qualificações exigidas, etc.", +HR-LAL-.YYYY.-,HR-LAL-.YYYY.-, +Allocation,Alocação, +New Leaves Allocated,Novas Licenças Alocadas, +Add unused leaves from previous allocations,Acrescente as licenças não utilizadas de atribuições anteriores, +Unused leaves,Folhas não utilizadas, +Total Leaves Allocated,Total de Licenças Alocadas, +Total Leaves Encashed,Total de Folhas Encastadas, +Leave Period,Período de Licença, +Carry Forwarded Leaves,Carry Folhas Encaminhadas, +Apply / Approve Leaves,Aplicar / Aprovar Leaves, +HR-LAP-.YYYY.-,HR-LAP-.YYYY.-, +Leave Balance Before Application,Saldo de Licenças Antes da Solicitação, +Total Leave Days,Total de Dias de Licença, +Leave Approver Name,Nome do Aprovador de Licenças, +Follow via Email,Receber Alterações Por Email, +Block Holidays on important days.,Bloco Feriados em dias importantes., +Leave Block List Name,Deixe o Nome Lista de Bloqueios, +Applies to Company,Aplica-se a Empresa, +"If not checked, the list will have to be added to each Department where it has to be applied.","Se não for controlada, a lista deverá ser adicionado a cada departamento onde tem de ser aplicado.", +Block Days,Bloco de Dias, +Stop users from making Leave Applications on following days.,Impedir que usuários solicitem licenças em dias seguintes, +Leave Block List Dates,Deixe as Datas Lista de Bloqueios, +Allow Users,Permitir Que os Usuários, +Allow the following users to approve Leave Applications for block days.,Permitir que os usuários a seguir para aprovar aplicações deixam para os dias de bloco., +Leave Block List Allowed,Deixe Lista de Bloqueios Admitidos, +Leave Block List Allow,Deixe Lista de Bloqueios Permitir, +Allow User,Permitir Que o Usuário, +Leave Block List Date,Deixe Data Lista de Bloqueios, +Block Date,Bloquear Data, +Leave Control Panel,Painel de Controle de Licenças, +Select Employees,Selecione Colaboradores, +Employment Type (optional),Tipo de Emprego (opcional), +Branch (optional),Filial (opcional), +Department (optional),Departamento (opcional), +Designation (optional),Designação (opcional), +Employee Grade (optional),Employee Grade (opcional), +Employee (optional),Empregado (opcional), +Allocate Leaves,Alocar Folhas, +Carry Forward,Encaminhar, +Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year,Por favor selecione Encaminhar se você também quer incluir o saldo de licenças do ano fiscal anterior neste ano fiscal, +New Leaves Allocated (In Days),Novas Licenças Alocadas (em Dias), +Allocate,Alocar, +Leave Balance,Deixar Equilíbrio, +Encashable days,Dias encapsulados, +Encashment Amount,Montante da Cobrança, +Leave Ledger Entry,Sair da Entrada do Razão, +Transaction Name,Nome da Transação, +Is Carry Forward,É encaminhado, +Is Expired,Está Expirado, +Is Leave Without Pay,É Licença não remunerada, +Holiday List for Optional Leave,Lista de Férias Para Licença Opcional, +Leave Allocations,Deixar Alocações, +Leave Policy Details,Deixar Detalhes da Política, +Leave Policy Detail,Deixar Detalhes da Política, +Annual Allocation,Alocação Anual, +Leave Type Name,Nome do Tipo de Licença, +Max Leaves Allowed,Max Folhas Permitidas, +Applicable After (Working Days),Aplicável Após (dias Úteis), +Maximum Continuous Days Applicable,Máximo de Dias Contínuos Aplicáveis, +Is Optional Leave,É licença opcional, +Allow Negative Balance,Permitir Saldo Negativo, +Include holidays within leaves as leaves,Incluir feriados dentro de licenças como licenças, +Is Compensatory,É Compensatório, +Maximum Carry Forwarded Leaves,Máximo de Folhas Encaminhadas Para Transporte, +Expire Carry Forwarded Leaves (Days),Expirar Transportar Folhas Encaminhadas (dias), +Calculated in days,Calculado em dias, +Encashment,Recheio, +Allow Encashment,Permitir Encashment, +Encashment Threshold Days,Dias Limite de Acumulação, +Earned Leave,Licença Ganhou, +Is Earned Leave,É uma licença ganhada, +Earned Leave Frequency,Freqüência de Licença Ganhada, +Rounding,Arredondamento, +Payroll Employee Detail,Detalhe do Empregado da Folha de Pagamento, +Payroll Frequency,Frequência de Pagamento, +Fortnightly,Quinzenal, +Bimonthly,Bimestralmente, +Employees,Colaboradores, +Number Of Employees,Número de Empregados, +Employee Details,Detalhes do Funcionário, +Validate Attendance,Validar Participação, +Salary Slip Based on Timesheet,Demonstrativo de Pagamento Baseado Em Controle de Tempo, +Select Payroll Period,Selecione Período de Pagamento, +Deduct Tax For Unclaimed Employee Benefits,Deduzir Imposto Para Benefícios de Empregados Não Reclamados, +Deduct Tax For Unsubmitted Tax Exemption Proof,Imposto de Dedução Para Comprovação de Isenção Fiscal Não Enviada, +Select Payment Account to make Bank Entry,Selecione a conta de pagamento para fazer o lançamento bancário, +Salary Slips Created,Slips Salariais Criados, +Salary Slips Submitted,Slips Salariais Enviados, +Payroll Periods,Períodos da Folha de Pagamento, +Payroll Period Date,Data do Período da Folha de Pagamento, +Purpose of Travel,Propósito da Viagem, +Retention Bonus,Bônus de Retenção, +Bonus Payment Date,Data de Pagamento do Bônus, +Bonus Amount,Valor do Bônus, +Abbr,Abrev, +Depends on Payment Days,Depende Dos Dias de Pagamento, +Is Tax Applicable,É tributável, +Variable Based On Taxable Salary,Variável Baseada no Salário Tributável, +Exempted from Income Tax,Isento de Imposto de Renda, +Round to the Nearest Integer,Arredondar Para o Número Inteiro Mais Próximo, +Statistical Component,Componente Estatística, +"If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ","Se selecionado, o valor especificado ou calculado neste componente não contribuirá para os ganhos ou deduções. no entanto, seu valor pode ser referenciado por outros componentes que podem ser adicionados ou deduzidos.", +Do Not Include in Total,Não Inclua no Total, +Flexible Benefits,Benefícios Flexíveis, +Is Flexible Benefit,É Benefício Flexível, +Max Benefit Amount (Yearly),Valor Máximo de Benefício (anual), +Only Tax Impact (Cannot Claim But Part of Taxable Income),Somente Impacto Fiscal (não É Possível Reivindicar Mas Parte do Lucro Real), +Create Separate Payment Entry Against Benefit Claim,Criar Entrada de Pagamento Separado Contra Sinistro de Benefício, +Condition and Formula,Condição e Fórmula, +Amount based on formula,Total Baseado na Fórmula, +Formula,Fórmula, +Salary Detail,Detalhes de Salário, +Component,Componente, +Do not include in total,Não inclua no total, +Default Amount,Quantidade Padrão, +Additional Amount,Quantia Adicional, +Tax on flexible benefit,Imposto sobre benefício flexível, +Tax on additional salary,Imposto sobre salário adicional, +Salary Structure,Estrutura Salarial, +Working Days,Dias Úteis, +Salary Slip Timesheet,Controle de Tempo do Demonstrativo de Pagamento, +Total Working Hours,Total de Horas de Trabalho, +Hour Rate,Valor Por Hora, +Bank Account No.,Nº Conta Bancária, +Earning & Deduction,Ganho & Dedução, +Earnings,Ganhos, +Deductions,Deduções, +Loan repayment,Pagamento do empréstimo, +Employee Loan,Empréstimo Para Colaboradores, +Total Principal Amount,Valor Total do Capital, +Total Interest Amount,Montante Total de Juros, +Total Loan Repayment,O Reembolso Total do Empréstimo, +net pay info,Informações de remuneração líquida, +Gross Pay - Total Deduction - Loan Repayment,Pagamento Bruto - Dedução Total - Reembolso do Empréstimo, +Total in words,Total por extenso, +Net Pay (in words) will be visible once you save the Salary Slip.,Pagamento líquido (por extenso) será visível quando você salvar a folha de pagamento., +Salary Component for timesheet based payroll.,Componente salarial para pagamento por hora., +Leave Encashment Amount Per Day,Deixar Montante de Cobrança Por Dia, +Max Benefits (Amount),Benefícios Máximos (quantidade), +Salary breakup based on Earning and Deduction.,Separação Salário com base em salário e dedução., +Total Earning,Total de Ganhos, +Salary Structure Assignment,Atribuição de Estrutura Salarial, +Shift Assignment,Atribuição de Turno, +Shift Type,Tipo de Deslocamento, +Shift Request,Pedido de Mudança, +Enable Auto Attendance,Ativar Atendimento Automático, +Mark attendance based on 'Employee Checkin' for Employees assigned to this shift.,Marcar a participação com base no "Employee Checkin" para os funcionários atribuídos a essa mudança., +Auto Attendance Settings,Configurações de Atendimento Automático, +Determine Check-in and Check-out,Determine o Check-in e o Check-out, +Alternating entries as IN and OUT during the same shift,Entradas alternadas como IN e OUT durante o mesmo turno, +Strictly based on Log Type in Employee Checkin,Estritamente baseado no tipo de registro no check-in de funcionários, +Working Hours Calculation Based On,Cálculo Das Horas de Trabalho Com Base Em, +First Check-in and Last Check-out,Primeiro Check-in e Último Check-out, +Every Valid Check-in and Check-out,Todos os Check-in e Check-out Válidos, +Begin check-in before shift start time (in minutes),Comece o check-in antes do horário de início do turno (em minutos), +The time before the shift start time during which Employee Check-in is considered for attendance.,O horário antes do horário de início do turno durante o qual o Check-in do funcionário é considerado para participação., +Allow check-out after shift end time (in minutes),Permitir o check-out após o término do turno (em minutos), +Time after the end of shift during which check-out is considered for attendance.,Tempo após o final do turno durante o qual o check-out é considerado para atendimento., +Working Hours Threshold for Half Day,Limite de Horas de Trabalho Para Meio Dia, +Working hours below which Half Day is marked. (Zero to disable),Horário de trabalho abaixo do qual meio dia é marcado. (Zero para desabilitar), +Working Hours Threshold for Absent,Limite de Horas de Trabalho Por Ausente, +Working hours below which Absent is marked. (Zero to disable),Horário de trabalho abaixo do qual a ausência está marcada. (Zero para desabilitar), +Process Attendance After,Participação no Processo Depois, +Attendance will be marked automatically only after this date.,A participação será marcada automaticamente somente após essa data., +Last Sync of Checkin,Última sincronização do checkin, +Last Known Successful Sync of Employee Checkin. Reset this only if you are sure that all Logs are synced from all the locations. Please don't modify this if you are unsure.,Última Sincronização Bem-sucedida Conhecida do Check-in de Funcionário. Redefina isso somente se tiver certeza de que todos os registros são sincronizados de todos os locais. Por favor não modifique isso se você não tiver certeza., +Grace Period Settings For Auto Attendance,Configurações do Período de Carência Para Atendimento Automático, +Enable Entry Grace Period,Ativar Período de Carência de Entrada, +Late Entry Grace Period,Período de Carência de Entrada Atrasada, +The time after the shift start time when check-in is considered as late (in minutes).,O horário após o horário de início do turno quando o check-in é considerado atrasado (em minutos)., +Enable Exit Grace Period,Ativar o Período de Carência de Saída, +Early Exit Grace Period,Período de Carência da Saída Antecipada, +The time before the shift end time when check-out is considered as early (in minutes).,O tempo antes do horário de término do turno quando o check-out é considerado antecipado (em minutos)., +Skill Name,Nome da Habilidade, +Staffing Plan Details,Detalhes do Plano de Pessoal, +Staffing Plan Detail,Detalhe do Plano de Pessoal, +Total Estimated Budget,Orçamento Total Estimado, +Vacancies,Vagas, +Estimated Cost Per Position,Custo Estimado Por Posição, +Total Estimated Cost,Custo Total Estimado, +Current Count,Contagem Atual, +Current Openings,Aberturas Atuais, +Number Of Positions,Número de Posições, +Taxable Salary Slab,Teto de Salário Tributável, +From Amount,De Montante, +To Amount,Para Quantidade, +Percent Deduction,Dedução Percentual, +Training Program,Programa de Treinamento, +Event Status,Status do Evento, +Has Certificate,Tem Certificado, +Seminar,Seminário, +Theory,Teoria, +Workshop,Workshop, +Conference,Conferência, +Exam,Exame, +Internet,Internet, +Self-Study,Auto Estudo, +Advance,Avançar, +Trainer Name,Nome do Instrutor, +Trainer Email,Email do Instrutor, +Attendees,Participantes, +Employee Emails,E-mails do Empregado, +Training Event Employee,Colaborador do Evento de Treinamento, +Invited,Convidado, +Feedback Submitted,Comentários Enviados, +Optional,Opcional, +Training Result Employee,Resultado do Treinamento do Colaborador, +Travel Itinerary,Itinerário de Viagem, +Travel From,Viajar De, +Travel To,Viajar Para, +Mode of Travel,Modo de Viagem, +Flight,Voar, +Train,Trem, +Taxi,Táxi, +Rented Car,Carro Alugado, +Meal Preference,Refeição Preferida, +Vegetarian,Vegetariano, +Non-Vegetarian,Não Vegetariana, +Gluten Free,Livre de Glúten, +Non Diary,Não Diário, +Travel Advance Required,Avanço de Viagem Necessário, +Departure Datetime,Data de Saída, +Arrival Datetime,Data de Chegada, +Lodging Required,Alojamento Requerido, +Preferred Area for Lodging,Área Preferida de Alojamento, +Check-in Date,Data de Check-in, +Check-out Date,Data de Check-out, +Travel Request,Pedido de Viagem, +Travel Type,Tipo de Viagem, +Domestic,Doméstico, +International,Internacional, +Travel Funding,Financiamento de Viagens, +Require Full Funding,Exigir Financiamento Total, +Fully Sponsored,Totalmente Patrocinado, +"Partially Sponsored, Require Partial Funding","Parcialmente Patrocinado, Requer Financiamento Parcial", +Copy of Invitation/Announcement,Cópia do Convite / Anúncio, +"Details of Sponsor (Name, Location)","Detalhes do Patrocinador (nome, Localização)", +Identification Document Number,Número do Documento de Identificação, +Any other details,Qualquer outro detalhe, +Costing Details,Detalhes do Custo, +Costing,Custo, +Event Details,Detalhes do Evento, +Name of Organizer,Nome do Organizador, +Address of Organizer,Endereço do Organizador, +Travel Request Costing,Custeio de Solicitação de Viagem, +Expense Type,Tipo de Despesa, +Sponsored Amount,Quantia Patrocinada, +Funded Amount,Valor Financiado, +Upload Attendance,Enviar o Ponto, +Attendance From Date,Data Inicial de Comparecimento, +Attendance To Date,Data Final de Comparecimento, +Get Template,Obter Modelo, +Import Attendance,Importação de Ponto, +Upload HTML,Upload Html, +Vehicle,Veículo, +License Plate,Placa do Veículo, +Odometer Value (Last),Quilometragem do Odômetro (última), +Acquisition Date,Data da Aquisição, +Chassis No,Nº do Chassi, +Vehicle Value,Valor do Veículo, +Insurance Details,Detalhes do Seguro, +Insurance Company,Companhia de Seguros, +Policy No,Nº da Apólice, +Additional Details,Detalhes Adicionais, +Fuel Type,Tipo de Combustível, +Petrol,Gasolina, +Diesel,Diesel, +Natural Gas,Gás Natural, +Electric,Elétrico, +Fuel UOM,Udm do Combustível, +Last Carbon Check,Última Inspeção de Emissão de Carbono, +Wheels,Rodas, +Doors,Portas, +HR-VLOG-.YYYY.-,HR-VLOG-.YYYY.-, +Odometer Reading,Leitura do Odômetro, +Current Odometer value ,Valor atual do odômetro, +last Odometer Value ,último valor do odômetro, +Refuelling Details,Detalhes de Abastecimento, +Invoice Ref,Nota Fiscal de Referência, +Service Details,Detalhes do Serviço, +Service Detail,Detalhes da Manutenção do Veículo, +Vehicle Service,Manutenção no Veículo, +Service Item,Item de Manutenção, +Brake Oil,Óleo de Freio, +Brake Pad,Pedal de Freio, +Clutch Plate,Disco de Embreagem, +Engine Oil,Óleo de Motor, +Oil Change,Troca de Óleo, +Inspection,Inspeção, +Mileage,Quilometragem, +Hub Tracked Item,Item Rastreado Por Hub, +Hub Node,Hub Node, +Image List,Lista de Imagens, +Item Manager,Gerente de Item, +Hub User,Usuário do Hub, +Hub Password,Senha do Hub, +Hub Users,Usuários do Hub, +Marketplace Settings,Configurações do Marketplace, +Disable Marketplace,Desativar Mercado, +Marketplace URL (to hide and update label),URL do Marketplace (para ocultar e atualizar o rótulo), +Registered,Registrado, +Sync in Progress,Sincronização Em Andamento, +Hub Seller Name,Nome do Vendedor do Hub, +Custom Data,Dados Personalizados, +Member,Membro, +Partially Disbursed,Parcialmente Desembolso, +Loan Closure Requested,Solicitação de Encerramento de Empréstimo, +Repay From Salary,Reembolsar a Partir de Salário, +Loan Details,Detalhes do Empréstimo, +Loan Type,Tipo de Empréstimo, +Loan Amount,Valor do Empréstimo, +Is Secured Loan,É Empréstimo Garantido, +Rate of Interest (%) / Year,Taxa de Juros (%) / Ano, +Disbursement Date,Data do Desembolso, +Disbursed Amount,Montante Desembolsado, +Is Term Loan,É Empréstimo a Prazo, +Repayment Method,Método de Reembolso, +Repay Fixed Amount per Period,Pagar Quantia Fixa Por Período, +Repay Over Number of Periods,Reembolsar Ao Longo Número de Períodos, +Repayment Period in Months,Período de Reembolso Em Meses, +Monthly Repayment Amount,Valor da Parcela Mensal, +Repayment Start Date,Data de Início do Reembolso, +Loan Security Details,Detalhes da Garantia do Empréstimo, +Maximum Loan Value,Valor Máximo do Empréstimo, +Account Info,Informações da Conta, +Loan Account,Conta de Empréstimo, +Interest Income Account,Conta Margem, +Penalty Income Account,Conta de Rendimentos de Penalidades, +Repayment Schedule,Agenda de Pagamentos, +Total Payable Amount,Total a Pagar, +Total Principal Paid,Total do Principal Pago, +Total Interest Payable,Interesse Total a Pagar, +Total Amount Paid,Valor Total Pago, +Loan Manager,Gerente de Empréstimos, +Loan Info,Informações do Empréstimo, +Rate of Interest,Taxa de Juros, +Proposed Pledges,Promessas Propostas, +Maximum Loan Amount,Valor Máximo de Empréstimo, +Repayment Info,Informações de Reembolso, +Total Payable Interest,Total de Juros a Pagar, +Against Loan ,Contra Empréstimo, +Loan Interest Accrual,Provisão Para Juros de Empréstimos, +Amounts,Montantes, +Pending Principal Amount,Montante Principal Pendente, +Payable Principal Amount,Montante Principal a Pagar, +Paid Principal Amount,Valor Principal Pago, +Paid Interest Amount,Montante de Juros Pagos, +Process Loan Interest Accrual,Processar Provisão de Juros de Empréstimo, +Repayment Schedule Name,Nome do Cronograma de Reembolso, +Regular Payment,Pagamento Frequente, +Loan Closure,Fechamento de Empréstimo, +Payment Details,Detalhes do Pagamento, +Interest Payable,Juros a Pagar, +Amount Paid,Montante Pago, +Principal Amount Paid,Montante Principal Pago, +Repayment Details,Detalhes de Reembolso, +Loan Repayment Detail,Detalhe de Reembolso de Empréstimo, +Loan Security Name,Nome da Garantia do Empréstimo, +Unit Of Measure,Unidade de Medida, +Loan Security Code,Código da Garantia do Empréstimo, +Loan Security Type,Tipo de Garantia de Empréstimo, +Haircut %,% de corte de cabelo, +Loan Details,Detalhes do Empréstimo, +Unpledged,Unpledged, +Pledged,Prometido, +Partially Pledged,Parcialmente Comprometido, +Securities,Valores Mobiliários, +Total Security Value,Valor Total de Garantias, +Loan Security Shortfall,Déficit na Garantia do Empréstimo, +Loan ,Empréstimo, +Shortfall Time,Tempo de Déficit, +America/New_York,America/New_york, +Shortfall Amount,Quantidade de Déficit, +Security Value ,Valor de Segurança, +Process Loan Security Shortfall,Processar Déficit na Garantia do Empréstimo, +Loan To Value Ratio,Relação Empréstimo / Valor, +Unpledge Time,Tempo de Liberação, +Loan Name,Nome do Empréstimo, +Rate of Interest (%) Yearly,Taxa de Juros (%) Anual, +Penalty Interest Rate (%) Per Day,Taxa de Juros de Penalidade (%) Por Dia, +Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,A taxa de juros de penalidade é cobrada diariamente sobre o valor dos juros pendentes em caso de atraso no pagamento, +Grace Period in Days,Período de Carência Em Dias, +No. of days from due date until which penalty won't be charged in case of delay in loan repayment,Número de dias a partir da data de vencimento até os quais a multa não será cobrada em caso de atraso no reembolso do empréstimo, +Pledge,Juramento, +Post Haircut Amount,Quantidade de Corte de Cabelo, +Process Type,Tipo de Processo, +Update Time,Tempo de Atualização, +Proposed Pledge,Promessa Proposta, +Total Payment,Pagamento Total, +Balance Loan Amount,Saldo do Empréstimo, +Is Accrued,É acumulado, +Salary Slip Loan,Empréstimo Salarial, +Loan Repayment Entry,Entrada de Reembolso de Empréstimo, +Sanctioned Loan Amount,Montante do Empréstimo Sancionado, +Sanctioned Amount Limit,Limite de Quantidade Sancionada, +Unpledge,Prometer, +Haircut,Corte de Cabelo, +MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-, +Generate Schedule,Gerar Agenda, +Schedules,Horários, +Maintenance Schedule Detail,Detalhe da Programação da Manutenção, +Scheduled Date,Data Agendada, +Actual Date,Data Real, +Maintenance Schedule Item,Ítem da Programação da Manutenção, +Random,Aleatório, +No of Visits,Nº de Visitas, +MAT-MVS-.YYYY.-,MAT-MVS-.YYYY.-, +Maintenance Date,Data da Manutenção, +Maintenance Time,Horário da Manutenção, +Completion Status,Status de Conclusão, +Partially Completed,Parcialmente Concluída, +Fully Completed,Totalmente Concluído, +Unscheduled,Sem Agendamento, +Breakdown,Pane, +Purposes,Finalidades, +Customer Feedback,Comentário do Cliente, +Maintenance Visit Purpose,Finalidade da Visita de Manutenção, +Work Done,Trabalho Feito, +Against Document No,Contra o Documento Nº, +Against Document Detail No,Contra o Nº do Documento Detalhado, +MFG-BLR-.YYYY.-,MFG-BLR-.YYYY.-, +Order Type,Tipo de Pedido, +Blanket Order Item,Item de Ordem de Cobertura, +Ordered Quantity,Quantidade Encomendada, +Item to be manufactured or repacked,Item a ser fabricado ou reembalado, +Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Quantidade do item obtido após a fabricação / reembalagem a partir de determinadas quantidades de matéria-prima, +Set rate of sub-assembly item based on BOM,Definir custo de semiacabado baseado na lista de materiais, +Allow Alternative Item,Permitir Item Alternativo, +Item UOM,Unidade de Medida do Item, +Conversion Rate,Taxa de Conversão, +Rate Of Materials Based On,Preço Dos Materiais Com Base Em, +With Operations,Com Operações, +Manage cost of operations,Gerenciar custo das operações, +Transfer Material Against,Transferir Material Contra, +Routing,Encaminhamento, +Materials,Materiais, +Quality Inspection Required,Inspeção de Qualidade Necessária, +Quality Inspection Template,Modelo de Inspeção de Qualidade, +Scrap,Sucata, +Scrap Items,Itens de Sucata, +Operating Cost,Custo de Operação, +Raw Material Cost,Custo de Matéria-prima, +Scrap Material Cost,Custo do Material Sucateado, +Operating Cost (Company Currency),Custo Operacional (moeda da Empresa), +Raw Material Cost (Company Currency),Custo da Matéria-prima (moeda da Empresa), +Scrap Material Cost(Company Currency),Custo de Material de Sucata (moeda da Empresa), +Total Cost,Custo Total, +Total Cost (Company Currency),Custo Total (moeda da Empresa), +Materials Required (Exploded),Materiais Necessários (lista Explodida), +Exploded Items,Itens Explodidos, +Show in Website,Mostrar no Site, +Item Image (if not slideshow),Imagem do Item (se não for slideshow), +Thumbnail,Miniatura, +Website Specifications,Especificações do Site, +Show Items,Mostrar Itens, +Show Operations,Mostrar Operações, +Website Description,Descrição do Site, +BOM Explosion Item,Item da Explosão da LDM, +Qty Consumed Per Unit,Qtde Consumida Por Unidade, +Include Item In Manufacturing,Incluir Item na Fabricação, +BOM Item,Item da LDM, +Item operation,Operação de item, +Rate & Amount,Taxa e Valor, +Basic Rate (Company Currency),Valor Base (moeda da Empresa), +Scrap %,Sucata %, +Original Item,Item Original, +BOM Operation,Operação da LDM, +Operation Time ,Tempo de Operação, +In minutes,Em Minutos, +Batch Size,Tamanho do Batch, +Base Hour Rate(Company Currency),Valor Por Hora Base (moeda da Empresa), +Operating Cost(Company Currency),Custo Operacional (moeda da Empresa), +BOM Scrap Item,Item de Sucata da LDM, +Basic Amount (Company Currency),Total Base (moeda da Empresa), +BOM Update Tool,Ferramenta de Atualização da Lista de Materiais, +"Replace a particular BOM in all other BOMs where it is used. It will replace the old BOM link, update cost and regenerate ""BOM Explosion Item"" table as per new BOM.\nIt also updates latest price in all the BOMs.","Substitua uma lista de materiais específica em todas as outras BOMs onde é usado. Ele irá substituir o antigo link da BOM, atualizar o custo e regenerar a tabela "BOM Explosion Item" conforme nova lista técnica. Ele também atualiza o preço mais recente em todas as listas de materiais.", +Replace BOM,Substituir Lista de Materiais, +Current BOM,LDM Atual, +The BOM which will be replaced,A LDM que será substituída, +The new BOM after replacement,A nova LDM após substituição, +Replace,Substituir, +Update latest price in all BOMs,Atualize o preço mais recente em todas as LDMs, +BOM Website Item,LDM do Item do Site, +BOM Website Operation,LDM da Operação do Site, +Operation Time,Tempo da Operação, +PO-JOB.#####,PO-JOB. #####, +Timing Detail,Detalhe da Temporização, +Time Logs,Tempo Logs, +Total Time in Mins,Tempo Total Em Minutos, +Operation ID,ID da Operação, +Transferred Qty,Qtde Transferida, +Job Started,Job Started, +Started Time,Hora de Início, +Current Time,Hora Atual, +Job Card Item,Item do Cartão de Emprego, +Job Card Time Log,Registro de Tempo do Cartão de Trabalho, +Time In Mins,Tempo Em Mins, +Completed Qty,Qtde Concluída, +Manufacturing Settings,Configurações de Fabricação, +Raw Materials Consumption,Consumo de Matérias-primas, +Allow Multiple Material Consumption,Permitir o Consumo de Vários Materiais, +Backflush Raw Materials Based On,Confirmação de Matérias-primas Baseada Em, +Material Transferred for Manufacture,Material Transferido Para Fabricação, +Capacity Planning,Planejamento de Capacidade, +Disable Capacity Planning,Desativar Planejamento de Capacidade, +Allow Overtime,Permitir Hora Extra, +Allow Production on Holidays,Permitir a Produção Em Feriados, +Capacity Planning For (Days),Planejamento de Capacidade Para (dias), +Default Warehouses for Production,Armazéns Padrão Para Produção, +Default Work In Progress Warehouse,Armazém Padrão de Trabalho Em Andamento, +Default Finished Goods Warehouse,Armazém de Produtos Acabados, +Default Scrap Warehouse,Depósito de Sucata Padrão, +Overproduction Percentage For Sales Order,Porcentagem de Superprodução Para Pedido de Venda, +Overproduction Percentage For Work Order,Porcentagem de Superprodução Para Ordem de Serviço, +Other Settings,Outras Definições, +Update BOM Cost Automatically,Atualize Automaticamente o Preço da Lista de Materiais, +Material Request Plan Item,Item do Plano de Solicitação de Material, +Material Request Type,Tipo de Requisição de Material, +Material Issue,Saída de Material, +Customer Provided,Cliente Fornecido, +Minimum Order Quantity,Quantidade Mínima de Pedido, +Default Workstation,Estação de Trabalho Padrão, +Production Plan,Plano de Produção, +MFG-PP-.YYYY.-,MFG-PP-.YYYY.-, +Get Items From,Obter Itens De, +Get Sales Orders,Obter Pedidos de Venda, +Material Request Detail,Detalhes do Pedido de Material, +Get Material Request,Obter Requisições de Material, +Material Requests,Requisições de Material, +Get Items For Work Order,Obter Itens Para Ordem de Trabalho, +Material Request Planning,Planejamento de Solicitação de Material, +Include Non Stock Items,Inclua Itens Sem Estoque, +Include Subcontracted Items,Incluir Itens Subcontratados, +Ignore Existing Projected Quantity,Ignorar Quantidade Projetada Existente, +"To know more about projected quantity, click here.","Para saber mais sobre a quantidade projetada, clique aqui.", +Download Required Materials,Download de Materiais Necessários, +Get Raw Materials For Production,Obtenha Matérias-primas Para a Produção, +Total Planned Qty,Qtd Total Planejado, +Total Produced Qty,Qtd Total Produzido, +Material Requested,Material Solicitado, +Production Plan Item,Item do Planejamento de Produção, +Make Work Order for Sub Assembly Items,Fazer Ordem de Trabalho Para Itens de Submontagem, +"If enabled, system will create the work order for the exploded items against which BOM is available.","Se ativado, o sistema criará a ordem de serviço para os itens explodidos em relação aos quais a lista técnica está disponível.", +Planned Start Date,Data Planejada de Início, +Quantity and Description,Quantidade e Descrição, +material_request_item,material_request_item, +Product Bundle Item,Item do Pacote de Produtos, +Production Plan Material Request,Requisição de Material do Planejamento de Produção, +Production Plan Sales Order,Pedido de Venda do Plano de Produção, +Sales Order Date,Data do Pedido de Venda, +Routing Name,Nome de Roteamento, +MFG-WO-.YYYY.-,MFG-WO-.YYYY.-, +Item To Manufacture,Item Para Fabricação, +Material Transferred for Manufacturing,Material Transferido Para Fabricação, +Manufactured Qty,Qtde Fabricada, +Use Multi-Level BOM,Utilize LDM Multinível, +Plan material for sub-assemblies,Material de Plano de sub-conjuntos, +Skip Material Transfer to WIP Warehouse,Pule a Transferência de Material Para o Wip Warehouse, +Check if material transfer entry is not required,Verifique se a entrada de transferência de material não é necessária, +Backflush Raw Materials From Work-in-Progress Warehouse,Backflush de Matérias-primas do Armazém de Trabalho Em Andamento, +Update Consumed Material Cost In Project,Atualizar Custo de Material Consumido no Projeto, +Warehouses,Armazéns, +This is a location where raw materials are available.,Este é um local onde as matérias-primas estão disponíveis., +Work-in-Progress Warehouse,Armazém de Trabalho Em Andamento, +This is a location where operations are executed.,Este é um local onde as operações são executadas., +This is a location where final product stored.,Este é um local onde o produto final é armazenado., +Scrap Warehouse,Armazém de Sucata, +This is a location where scraped materials are stored.,Este é um local onde os materiais raspados são armazenados., +Required Items,Itens Necessários, +Actual Start Date,Data de Início Real, +Planned End Date,Data Planejada de Término, +Actual End Date,Data Final Real, +Operation Cost,Custo da Operação, +Planned Operating Cost,Custo Operacional Planejado, +Actual Operating Cost,Custo Operacional Real, +Additional Operating Cost,Custo Operacional Adicional, +Total Operating Cost,Custo de Operacional Total, +Manufacture against Material Request,Fabricação Vinculada a uma Requisição de Material, +Work Order Item,Item de Ordem de Trabalho, +Available Qty at Source Warehouse,Qtd Disponível no Armazém de Origem, +Available Qty at WIP Warehouse,Qtd Disponível no Armazém de Trabalho Em Andamento, +Work Order Operation,Operação de Ordem de Trabalho, +Operation Description,Descrição da Operação, +Operation completed for how many finished goods?,Operação concluída para quantos produtos acabados?, +Work in Progress,Trabalho Em Andamento, +Estimated Time and Cost,Tempo Estimado e Custo, +Planned Start Time,Horário Planejado de Início, +Planned End Time,Horário Planejado de Término, +in Minutes,Em Minutos, +Actual Time and Cost,Tempo e Custo Real, +Actual Start Time,Hora Real de Início, +Actual End Time,Tempo Final Real, +Updated via 'Time Log',Atualizado Via 'time Log', +Actual Operation Time,Tempo Real da Operação, +in Minutes\nUpdated via 'Time Log',"Em Minutos\natualizado Através do ""registo de Tempo""", +(Hour Rate / 60) * Actual Operation Time,(Valor por Hora / 60) * Tempo de operação real, +Workstation Name,Nome da Estação de Trabalho, +Production Capacity,Capacidade de Produção, +Operating Costs,Custos Operacionais, +Electricity Cost,Custo de Energia Elétrica, +per hour,por hora, +Consumable Cost,Custo Dos Consumíveis, +Rent Cost,Custo do Aluguel, +Wages,Salário, +Wages per hour,Salário por hora, +Net Hour Rate,Valor Hora Líquido, +Workstation Working Hour,Hora de Trabalho da Estação de Trabalho, +Certification Application,Aplicativo de Certificação, +Name of Applicant,Nome do Requerente, +Certification Status,Status de Certificação, +Yet to appear,Ainda para aparecer, +Certified,Certificado, +Not Certified,Não Certificado, +USD,USD, +INR,EM R, +Certified Consultant,Consultor Certificado, +Name of Consultant,Nome do Consultor, +Certification Validity,Validade de Certificação, +Discuss ID,Discutir ID, +GitHub ID,ID do GitHub, +Non Profit Manager,Gerente Sem Fins Lucrativos, +Chapter Head,Chefe de Capítulo, +Meetup Embed HTML,Meetup Embed Html, +chapters/chapter_name\nleave blank automatically set after saving chapter.,capítulos / chapter_name deixa em branco definido automaticamente depois de salvar o capítulo., +Chapter Members,Membros do Capítulo, +Members,Membros, +Chapter Member,Membro do Capítulo, +Website URL,Endereço do Site, +Leave Reason,Motivo da Saída, +Donor Name,Nome do Doador, +Donor Type,Tipo de Doador, +Withdrawn,Retirado, +Grant Application Details ,Detalhes do Pedido de Concessão, +Grant Description,Descrição do Grant, +Requested Amount,Montante Requerido, +Has any past Grant Record,Já havia passado Grant Record, +Show on Website,Mostrar no Site, +Assessment Mark (Out of 10),Marca de Avaliação (fora de 10), +Assessment Manager,Gerente de Avaliação, +Email Notification Sent,Notificação Por Email Enviada, +NPO-MEM-.YYYY.-,NPO-MEM-.YYYY.-, +Membership Expiry Date,Data de Expiração da Associação, +Razorpay Details,Detalhes Razorpay, +Subscription ID,ID de Inscrição, +Customer ID,Identificação do Cliente, +Subscription Activated,Assinatura Ativada, +Subscription Start ,Início da Assinatura, +Subscription End,Fim da Assinatura, +Non Profit Member,Membro Sem Fins Lucrativos, +Membership Status,Status da Associação, +Member Since,Membro Desde, +Payment ID,ID de Pagamento, +Membership Settings,Configurações de Associação, +Enable RazorPay For Memberships,Habilitar Razorpay Para Assinaturas, +RazorPay Settings,Configurações Razorpay, +Billing Cycle,Ciclo de Faturamento, +Billing Frequency,Frequência de Cobrança, +"The number of billing cycles for which the customer should be charged. For example, if a customer is buying a 1-year membership that should be billed on a monthly basis, this value should be 12.","O número de ciclos de faturamento pelos quais o cliente deve ser cobrado. Por exemplo, se um cliente está comprando uma associação de 1 ano que deve ser cobrada mensalmente, esse valor deve ser 12.", +Razorpay Plan ID,ID do Plano Razorpay, +Volunteer Name,Nome do Voluntário, +Volunteer Type,Tipo de Voluntário, +Availability and Skills,Disponibilidade e Habilidades, +Availability,Disponibilidade, +Weekends,Finais de Semana, +Availability Timeslot,Calendário de Disponibilidade, +Morning,Manhã, +Afternoon,Tarde, +Evening,Noite, +Anytime,A Qualquer Momento, +Volunteer Skills,Habilidades Voluntárias, +Volunteer Skill,Habilidade Voluntária, +Homepage,Página Inicial, +Hero Section Based On,Seção de Herói Baseada Em, +Homepage Section,Seção da Página Inicial, +Hero Section,Seção Hero, +Tag Line,Slogan, +Company Tagline for website homepage,O Slogan da Empresa para página inicial do site, +Company Description for website homepage,A Descrição da Empresa para a página inicial do site, +Homepage Slideshow,Slideshow da Página Inicial, +"URL for ""All Products""","URL Para ""todos os Produtos""", +Products to be shown on website homepage,Produtos para serem mostrados na página inicial, +Homepage Featured Product,Produtos Em Destaque na Página Inicial, +route,rota, +Section Based On,Seção Baseada Em, +Section Cards,Seção Cartões, +Number of Columns,Numero de Colunas, +Number of columns for this section. 3 cards will be shown per row if you select 3 columns.,Número de colunas para esta seção. 3 cartões serão mostrados por linha se você selecionar 3 colunas., +Section HTML,Seção Html, +Use this field to render any custom HTML in the section.,Use este campo para renderizar qualquer HTML personalizado na seção., +Section Order,Ordem de Seção, +"Order in which sections should appear. 0 is first, 1 is second and so on.","Ordem em que seções devem aparecer. 0 é primeiro, 1 é o segundo e assim por diante.", +Homepage Section Card,Cartão de Seção da Página Inicial, +Subtitle,Subtítulo, +Products Settings,Configurações de Produtos, +Home Page is Products,Página Inicial É Produtos, +"If checked, the Home page will be the default Item Group for the website","Se for selecionado, a Página Inicial será o Grupo de Itens padrão do site", +Show Availability Status,Mostrar Status de Disponibilidade, +Product Page,Página do Produto, +Products per Page,Produtos Por Página, +Enable Field Filters,Ativar Filtros de Campo, +Item Fields,Campos de Item, +Enable Attribute Filters,Ativar Filtros de Atributo, +Attributes,Atributos, +Hide Variants,Ocultar Variantes, +Website Attribute,Atributo do Site, +Attribute,Atributo, +Website Filter Field,Campo de Filtro do Site, +Activity Cost,Custo da Atividade, +Billing Rate,Preço de Faturamento, +Costing Rate,Preço de Custo, +title,título, +Projects User,Usuário de Projetos, +Default Costing Rate,Preço de Custo Padrão, +Default Billing Rate,Preço de Faturamento Padrão, +Dependent Task,Tarefa Dependente, +Project Type,Tipo de Projeto, +% Complete Method,Método Para % Concluído, +Task Completion,Conclusão da Tarefa, +Task Progress,Progresso da Tarefa, +% Completed,% Concluído, +From Template,Do Modelo, +Project will be accessible on the website to these users,Projeto estará acessível no site para os usuários, +Copied From,Copiado De, +Start and End Dates,Datas de Início e Término, +Actual Time (in Hours),Tempo Real (em Horas), +Costing and Billing,Custos e Faturamento, +Total Costing Amount (via Timesheets),Montante Total de Custeio (via Timesheets), +Total Expense Claim (via Expense Claims),Reivindicação de Despesa Total (via Relatórios de Despesas), +Total Purchase Cost (via Purchase Invoice),Custo Total de Compra (via Fatura de Compra), +Total Sales Amount (via Sales Order),Valor Total Das Vendas (por Ordem do Cliente), +Total Billable Amount (via Timesheets),Valor Billable Total (via Timesheets), +Total Billed Amount (via Sales Invoices),Valor Total Faturado (através de Faturas de Vendas), +Total Consumed Material Cost (via Stock Entry),Custo Total de Material Consumido (via Entrada Em Estoque), +Gross Margin,Margem Bruta, +Gross Margin %,Margem Bruta %, +Monitor Progress,Monitorar o Progresso, +Collect Progress,Recolha Progresso, +Frequency To Collect Progress,Freqüência Para Coletar o Progresso, +Twice Daily,Duas Vezes Por Dia, +First Email,Primeiro Email, +Second Email,Segundo E-mail, +Time to send,Hora de enviar, +Day to Send,Dia Para Enviar, +Message will be sent to the users to get their status on the Project,A mensagem será enviada aos usuários para obter seu status no Projeto, +Projects Manager,Gerente de Projetos, +Project Template,Modelo de Projeto, +Project Template Task,Tarefa do Modelo de Projeto, +Begin On (Days),Comece Em (dias), +Duration (Days),Duração (dias), +Project Update,Atualização de Projeto, +Project User,Usuário do Projeto, +View attachments,Visualizar anexos, +Projects Settings,Configurações de Projetos, +Ignore Workstation Time Overlap,Ignorar a Sobreposição do Tempo da Estação de Trabalho, +Ignore User Time Overlap,Ignorar a Sobreposição do Tempo do Usuário, +Ignore Employee Time Overlap,Ignorar a Sobreposição do Tempo do Empregado, +Weight,Peso, +Parent Task,Tarefa Dos Pais, +Timeline,Timeline, +Expected Time (in hours),Tempo esperado (em horas), +% Progress,% de Progresso, +Is Milestone,É Milestone, +Task Description,Descrição da Tarefa, +Dependencies,Dependências, +Dependent Tasks,Tarefas Dependentes, +Depends on Tasks,Depende de Tarefas, +Actual Start Date (via Time Sheet),Data de Início Real (via Registro de Tempo), +Actual Time (in hours),Tempo Real (em horas), +Actual End Date (via Time Sheet),Data Final Real (via Registro de Tempo), +Total Costing Amount (via Time Sheet),Custo Total (via Registro de Tempo), +Total Expense Claim (via Expense Claim),Reivindicação Despesa Total (via Despesa Claim), +Total Billing Amount (via Time Sheet),Total Faturado (via Registro de Tempo), +Review Date,Data da Revisão, +Closing Date,Data de Encerramento, +Task Depends On,Tarefa Depende De, +Task Type,Tipo de Tarefa, +TS-.YYYY.-,TS-.YYYY.-, +Employee Detail,Detalhes do Colaborador, +Billing Details,Dados de Faturação, +Total Billable Hours,Total de Horas Trabalhadas, +Total Billed Hours,Horas Totais Faturadas, +Total Costing Amount,Valor Total Dos Custos, +Total Billable Amount,Valor Total Faturável, +Total Billed Amount,Valor Total Faturado, +% Amount Billed,Valor Faturado %, +Hrs,Hrs, +Costing Amount,Valor de Custo, +Corrective/Preventive,Corretivo / Preventivo, +Corrective,Corretivo, +Preventive,Preventivo, +Resolution,Solução, +Resolutions,Resoluções, +Quality Action Resolution,Resolução de Ação de Qualidade, +Quality Feedback Parameter,Parâmetro de Feedback de Qualidade, +Quality Feedback Template Parameter,Parâmetro de Modelo de Feedback de Qualidade, +Quality Goal,Objetivo de Qualidade, +Monitoring Frequency,Freqüência de Monitoramento, +Weekday,Dia da Semana, +Objectives,Objetivos, +Quality Goal Objective,Objetivo Objetivo de Qualidade, +Objective,Objetivo, +Agenda,Agenda, +Minutes,Minutos, +Quality Meeting Agenda,Agenda da Reunião de Qualidade, +Quality Meeting Minutes,Minutos da Reunião de Qualidade, +Minute,Minuto, +Parent Procedure,Procedimento Pai, +Processes,Processos, +Quality Procedure Process,Processo de Procedimento de Qualidade, +Process Description,Descrição do Processo, +Link existing Quality Procedure.,Vincule o Procedimento de Qualidade existente., +Additional Information,Informação Adicional, +Quality Review Objective,Objetivo de Revisão de Qualidade, +DATEV Settings,Configurações Datev, +Regional,Regional, +Consultant ID,ID do consultor, +GST HSN Code,Código GST HSN, +HSN Code,Código HSN, +GST Settings,Configurações de GST, +GST Summary,Resumo do GST, +GSTIN Email Sent On,E-mail do GSTIN enviado, +GST Accounts,Contas GST, +B2C Limit,Limite B2C, +Set Invoice Value for B2C. B2CL and B2CS calculated based on this invoice value.,Defina o valor da fatura para B2C. B2CL e B2CS calculados com base neste valor da fatura., +GSTR 3B Report,Relatório GSTR 3B, +January,Janeiro, +February,Fevereiro, +March,Março, +April,Abril, +May,Maio, +June,Junho, +July,Julho, +August,Agosto, +September,Setembro, +October,Outubro, +November,Novembro, +December,Dezembro, +JSON Output,Saída JSON, +Invoices with no Place Of Supply,Faturas sem lugar de suprimento, +Import Supplier Invoice,Fatura de Fornecedor de Importação, +Invoice Series,Série de Faturas, +Upload XML Invoices,Carregar Faturas Xml, +Zip File,Arquivo Zip, +Import Invoices,Faturas de Importação, +Click on Import Invoices button once the zip file has been attached to the document. Any errors related to processing will be shown in the Error Log.,Clique no botão Importar faturas quando o arquivo zip tiver sido anexado ao documento. Quaisquer erros relacionados ao processamento serão mostrados no log de erros., +Lower Deduction Certificate,Certificado de Menor Dedução, +Certificate Details,Detalhes do Certificado, +194A,194A, +194C,194C, +194D,194D, +194H,194H, +194I,194I, +194J,194J, +194LA,194LA, +194LBB,194LBB, +194LBC,194LBC, +Certificate No,Certificado Nº, +Deductee Details,Detalhes do Deductee, +PAN No,Pan No, +Validity Details,Detalhes de Validade, +Rate Of TDS As Per Certificate,Taxa de Tds Conforme Certificado, +Certificate Limit,Limite de Certificado, +Invoice Series Prefix,Prefixo da Série de Fatura, +Active Menu,Menu Ativo, +Restaurant Menu,Menu do Restaurante, +Price List (Auto created),Lista de preços (criada automaticamente), +Restaurant Manager,Gerente de Restaurante, +Restaurant Menu Item,Item do Menu do Restaurante, +Restaurant Order Entry,Entrada de Pedido de Restaurante, +Restaurant Table,Mesa de Restaurante, +Click Enter To Add,Clique em Enter para Adicionar, +Last Sales Invoice,Última Fatura de Vendas, +Current Order,Ordem Atual, +Restaurant Order Entry Item,Item de Entrada de Pedido de Restaurante, +Served,Servido, +Restaurant Reservation,Reserva de Restaurante, +Waitlisted,Colocado na Lista de Espera, +No Show,No Show, +No of People,Número de Pessoas, +Reservation Time,Tempo de Reserva, +Reservation End Time,Hora de Término da Reserva, +No of Seats,Número de Assentos, +Minimum Seating,Assentos Mínimos, +"Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment. ","Acompanhe as Campanhas de Vendas. Acompanhe os Leads, Orçamentos, Ordens de Venda, etc. das Campanhas para medir o Retorno do Investimento.", +SAL-CAM-.YYYY.-,SAL-CAM-.YYYY.-, +Campaign Schedules,Horários de Campanha, +Buyer of Goods and Services.,Comprador de Produtos e Serviços., +CUST-.YYYY.-,CUST-.YYYY.-, +Default Company Bank Account,Conta Bancária da Empresa Padrão, +From Lead,Do Lead, +Account Manager,Gerente de Contas, +Allow Sales Invoice Creation Without Sales Order,Permitir a Criação de Faturas de Vendas Sem Pedido de Vendas, +Allow Sales Invoice Creation Without Delivery Note,Permitir a Criação de Faturas de Vendas Sem Nota de Entrega, +Default Price List,Lista de Preços Padrão, +Primary Address and Contact Detail,Endereço Principal e Detalhes de Contato, +"Select, to make the customer searchable with these fields","Selecione, para tornar o cliente pesquisável com esses campos", +Customer Primary Contact,Contato Primário do Cliente, +"Reselect, if the chosen contact is edited after save","Reseleccione, se o contato escolhido for editado após salvar", +Customer Primary Address,Endereço Principal do Cliente, +"Reselect, if the chosen address is edited after save","Reseleccione, se o endereço escolhido for editado após salvar", +Primary Address,Endereço Primário, +Mention if non-standard receivable account,Mencione se a conta a receber não for a conta padrão, +Credit Limit and Payment Terms,Limite de Crédito e Termos de Pagamento, +Additional information regarding the customer.,Informações adicionais sobre o cliente., +Sales Partner and Commission,Parceiro de Vendas e Comissão, +Commission Rate,Percentual de Comissão, +Sales Team Details,Detalhes da Equipe de Vendas, +Customer POS id,ID de PDV do Cliente, +Customer Credit Limit,Limite de Crédito do Cliente, +Bypass Credit Limit Check at Sales Order,Controle do Limite de Crédito de Bypass na Ordem do Cliente, +Industry Type,Tipo de Indústria, +MAT-INS-.YYYY.-,MAT-INS-.YYYY.-, +Installation Date,Data de Instalação, +Installation Time,O Tempo de Instalação, +Installation Note Item,Item da Nota de Instalação, +Installed Qty,Qtde Instalada, +Lead Source,Origem do Lead, +Period Start Date,Data de Início do Período, +Period End Date,Data de Término do Período, +Cashier,Caixa, +Difference,Diferença, +Modes of Payment,Modos de Pagamento, +Linked Invoices,Faturas Vinculadas, +POS Closing Voucher Details,Detalhes do Voucher de Fechamento do PDV, +Collected Amount,Montante Recolhido, +Expected Amount,Quantidade Esperada, +POS Closing Voucher Invoices,Faturas de Vouchers de Fechamento de Ponto de Venda, +Quantity of Items,Quantidade de Itens, +"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item.\n\nNote: BOM = Bill of Materials","Agrega um grupo de **Itens** noutro **Item**. Isto é útil se estiver a agrupar certos **Itens** num pacote e manter o estoque dos **Itens ** embalados e não o **Item** agregado.\n\nO pacote de **Item** terá ""Item em Estoque"" como ""Não"" e ""É Item de Vendas"" como ""Sim"".\n\nPor exemplo: se está a vender Computadores e Mochilas separadamente e tem um preço especial se o cliente comprar ambos, então, o Computador + Mochila será um novo Item de Pacote de Produtos.\n\nObservação: LDM = Lista de Materiais", +Parent Item,Item Pai, +List items that form the package.,Lista de itens que compõem o pacote., +SAL-QTN-.YYYY.-,SAL-QTN-.YYYY.-, +Quotation To,Orçamento Para, +Rate at which customer's currency is converted to company's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base da empresa, +Rate at which Price list currency is converted to company's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base da empresa, +Additional Discount and Coupon Code,Código Adicional de Desconto e Cupom, +Referral Sales Partner,Parceiro de Vendas de Referência, +In Words will be visible once you save the Quotation.,Por extenso será visível quando você salvar o orçamento., +Term Details,Detalhes Dos Termos, +Quotation Item,Item do Orçamento, +Against Doctype,Contra o DocType, +Against Docname,Contra o Docname, +Additional Notes,Notas Adicionais, +SAL-ORD-.YYYY.-,SAL-ORD-.YYYY.-, +Skip Delivery Note,Ignorar Nota de Entrega, +In Words will be visible once you save the Sales Order.,Por extenso será visível quando você salvar o Pedido de Venda., +Track this Sales Order against any Project,Acompanhar este Pedido de Venda relacionado a qualquer projeto, +Billing and Delivery Status,Status do Faturamento e Entrega, +Not Delivered,Não Entregue, +Fully Delivered,Totalmente Entregue, +Partly Delivered,Parcialmente Entregue, +Not Applicable,Não Aplicável, +% Delivered,% Entregue, +% of materials delivered against this Sales Order,% do material entregue deste Pedido de Venda, +% of materials billed against this Sales Order,% do material faturado deste Pedido de Venda, +Not Billed,Não Faturado, +Fully Billed,Totalmente Faturado, +Partly Billed,Parcialmente Faturado, +Ensure Delivery Based on Produced Serial No,Garantir a Entrega Com Base no Número de Série Produzido, +Supplier delivers to Customer,O fornecedor entrega diretamente ao cliente, +Delivery Warehouse,Armazém de Entrega, +Planned Quantity,Quantidade Planejada, +For Production,Para Produção, +Work Order Qty,Quantidade de Ordem de Serviço, +Produced Quantity,Quantidade Produzida, +Used for Production Plan,Usado Para o Plano de Produção, +Sales Partner Type,Tipo de Parceiro de Vendas, +Contact No.,Nº Contato., +Contribution (%),Contribuição (%), +Contribution to Net Total,Contribuição Para o Total Líquido, +Selling Settings,Configurações de Vendas, +Settings for Selling Module,Configurações do Módulo de Vendas, +Customer Naming By,Nomeação de Cliente Por, +Campaign Naming By,Nomeação de Campanha Por, +Default Customer Group,Grupo de Clientes Padrão, +Default Territory,Território Padrão, +Close Opportunity After Days,Fechar Oportunidade Após Dias, +Default Quotation Validity Days,Dias de Validade de Cotação Padrão, +Sales Update Frequency,Frequência de Atualização de Vendas, +Each Transaction,Cada Transação, +SMS Center,Centro de SMS, +Send To,Enviar Para, +All Contact,Todo Contato, +All Customer Contact,Todo Contato do Cliente, +All Supplier Contact,Todos Contatos de Fornecedor, +All Sales Partner Contact,Todos Contatos de Parceiros de Vendas, +All Lead (Open),Todos Leads Em Aberto, +All Employee (Active),Todos Colaboradores (ativos), +All Sales Person,Todos Vendedores, +Create Receiver List,Criar Lista de Receptor, +Receiver List,Lista de Recebedores, +Messages greater than 160 characters will be split into multiple messages,Mensagens maiores do que 160 caracteres vão ser divididos em múltiplas mensagens, +Total Characters,Total de Personagens, +Total Message(s),Total de Mensagem(s), +Authorization Control,Controle de Autorização, +Authorization Rule,Regra de Autorização, +Average Discount,Desconto Médio, +Customerwise Discount,Desconto Referente Ao Cliente, +Itemwise Discount,Desconto Relativo Ao Item, +Customer or Item,Cliente Ou Item, +Customer / Item Name,Nome do Cliente/produto, +Authorized Value,Valor Autorizado, +Applicable To (Role),Aplicável Para (função), +Applicable To (Employee),Aplicável Para (colaborador), +Applicable To (User),Aplicável Para (usuário), +Applicable To (Designation),Aplicável Para (designação), +Approving Role (above authorized value),Função de Aprovador (para autorização de valor excedente), +Approving User (above authorized value),Usuário Habilitado para Aprovar (acima do valor autorizado), +Brand Defaults,Padrões de Marca, +Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.,Entidade Legal / Subsidiária com um Plano de Contas separado pertencente à Organização., +Change Abbreviation,Mudar Abreviação, +Parent Company,Empresa-mãe, +Default Values,Valores Padrão, +Default Holiday List,Lista Padrão de Feriados, +Default Selling Terms,Termos de Venda Padrão, +Default Buying Terms,Termos de Compra Padrão, +Create Chart Of Accounts Based On,Criar Plano de Contas Baseado Em, +Standard Template,Template Padrão, +Existing Company,Empresa Existente, +Chart Of Accounts Template,Modelo de Plano de Contas, +Existing Company ,Companhia Existente, +Date of Establishment,Data de Estabelecimento, +Sales Settings,Configurações de Vendas, +Monthly Sales Target,Meta de Vendas Mensais, +Sales Monthly History,Histórico Mensal de Vendas, +Transactions Annual History,Histórico Anual de Transações, +Total Monthly Sales,Total de Vendas Mensais, +Default Cash Account,Conta Caixa Padrão, +Default Receivable Account,Contas a Receber Padrão, +Round Off Cost Center,Centro de Custo de Arredondamento, +Discount Allowed Account,Conta Permitida Com Desconto, +Discount Received Account,Conta Recebida Com Desconto, +Exchange Gain / Loss Account,Conta de Ganho / Perda Com Câmbio, +Unrealized Exchange Gain/Loss Account,Conta de Ganho / Perda de Câmbio Não Realizada, +Allow Account Creation Against Child Company,Permitir Criação de Conta Contra Empresa-filha, +Default Payable Account,Contas a Pagar Padrão, +Default Employee Advance Account,Conta Padrão de Adiantamento À Colaboradores, +Default Cost of Goods Sold Account,Conta de Custo Padrão de Mercadorias Vendidas, +Default Income Account,Conta Padrão de Recebimento, +Default Deferred Revenue Account,Conta de Receita Diferida Padrão, +Default Deferred Expense Account,Conta de Despesas Diferidas Padrão, +Default Payroll Payable Account,Conta Padrão Para Folha de Pagamentos, +Default Expense Claim Payable Account,Conta Paga de Pedido de Despesa Padrão, +Stock Settings,Configurações de Estoque, +Enable Perpetual Inventory,Habilitar Inventário Perpétuo, +Default Inventory Account,Conta de Inventário Padrão, +Stock Adjustment Account,Conta de Ajuste, +Fixed Asset Depreciation Settings,Configurações de Depreciação do Ativo Imobilizado, +Series for Asset Depreciation Entry (Journal Entry),Série Para Lançamento de Depreciação de Ativos (lançamento no Livro Diário), +Gain/Loss Account on Asset Disposal,Conta de Ganho / Perda Com Descarte de Ativos, +Asset Depreciation Cost Center,Centro de Custo do Ativo Depreciado, +Budget Detail,Detalhe do Orçamento, +Exception Budget Approver Role,Função de Aprovação do Orçamento de Exceção, +Company Info,Informações da Empresa, +For reference only.,Apenas para referência., +Company Logo,Logotipo da Empresa, +Date of Incorporation,Data de Incorporação, +Date of Commencement,Data de Início, +Phone No,Nº de Telefone, +Company Description,Descrição da Empresa, +Registration Details,Detalhes de Registro, +Company registration numbers for your reference. Tax numbers etc.,Números de registro da empresa para sua referência. Exemplo: CNPJ IE etc, +Delete Company Transactions,Excluir Transações Companhia, +Currency Exchange,Câmbio, +Specify Exchange Rate to convert one currency into another,Especifique Taxa de Câmbio para converter uma moeda em outra, +From Currency,De Moeda, +To Currency,A Moeda, +For Buying,Para Comprar, +For Selling,À venda, +Customer Group Name,Nome do Grupo de Clientes, +Parent Customer Group,Grupo de Clientes Pai, +Only leaf nodes are allowed in transaction,Somente nós-folha são permitidos em transações, +Mention if non-standard receivable account applicable,Mencione se a conta a receber aplicável não for a conta padrão, +Credit Limits,Limites de Crédito, +Email Digest,Resumo Por Email, +Send regular summary reports via Email.,Enviar relatórios periódicos de síntese via Email., +Email Digest Settings,Configurações do Resumo Por Email, +How frequently?,Com que frequência?, +Next email will be sent on:,Próximo email será enviado em:, +Note: Email will not be sent to disabled users,Observação: Emails não serão enviado para usuários desabilitados, +Profit & Loss,Lucro e Perdas, +New Income,Novas Receitas, +New Expenses,Novas Despesas, +Annual Income,Receita Anual, +Annual Expenses,Despesas Anuais, +Bank Balance,Saldo Bancário, +Bank Credit Balance,Saldo de Crédito Bancário, +Receivables,Recebíveis, +Payables,Contas a Pagar, +Sales Orders to Bill,Ordens de Vendas Para Faturamento, +Purchase Orders to Bill,Pedidos de Compra Para Fatura, +New Sales Orders,Novos Pedidos de Venda, +New Purchase Orders,Novos Pedidos de Compra, +Sales Orders to Deliver,Ordens de Vendas Para Entregar, +Purchase Orders to Receive,Pedidos de Compra a Receber, +New Purchase Invoice,Nova Fatura de Compra, +New Quotations,Novas Cotações, +Open Quotations,Citações Abertas, +Open Issues,Incidentes Abertos, +Open Projects,Projetos Abertos, +Purchase Orders Items Overdue,Itens de Pedidos de Compra Em Atraso, +Upcoming Calendar Events,Próximos Eventos do Calendário, +Open To Do,Atribuições Em Aberto, +Add Quote,Adicionar Citar, +Global Defaults,Padrões Globais, +Default Company,Empresa Padrão, +Current Fiscal Year,Ano Fiscal Atual, +Default Distance Unit,Unidade de Distância Padrão, +Hide Currency Symbol,Ocultar Símbolo de Moeda, +Do not show any symbol like $ etc next to currencies.,Não mostrar nenhum símbolo como R$ etc ao lado de moedas., +"If disable, 'Rounded Total' field will not be visible in any transaction","Desativa campo ""total arredondado"" em qualquer tipo de transação", +Disable In Words,Desativar Por Extenso, +"If disable, 'In Words' field will not be visible in any transaction","Desativa campo ""por extenso"" em qualquer tipo de transação", +Item Classification,Classificação do Item, +General Settings,Configurações Gerais, +Item Group Name,Nome do Grupo de Itens, +Parent Item Group,Grupo de Item Pai, +Item Group Defaults,Padrões de Grupo de Itens, +Item Tax,Imposto do Item, +Check this if you want to show in website,Marque esta opção se você deseja mostrar no site, +Show this slideshow at the top of the page,Mostrar esta apresentação de slides no topo da página, +HTML / Banner that will show on the top of product list.,HTML / Faixa que vai ser mostrada no topo da lista de produtos., +Set prefix for numbering series on your transactions,Definir prefixo para séries de numeração em suas transações, +Setup Series,Configuração de Séries, +Select Transaction,Selecione a Transação, +Help HTML,Ajuda HTML, +Series List for this Transaction,Lista de séries para esta transação, +User must always select,O Usuário deve sempre selecionar, +Check this if you want to force the user to select a series before saving. There will be no default if you check this.,Marque esta opção se você deseja forçar o usuário a selecionar uma série antes de salvar. Não haverá nenhum padrão se você marcar isso., +Update Series,Atualizar Séries, +Change the starting / current sequence number of an existing series.,Alterar o número sequencial de início/atual de uma série existente., +Prefix,Prefixo, +Current Value,Valor Atual, +This is the number of the last created transaction with this prefix,Este é o número da última transação criada com este prefixo, +Update Series Number,Atualizar Números de Séries, +Quotation Lost Reason,Motivo da Perda do Orçamento, +A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.,Um distribuidor de terceiros / revendedor / comissão do agente / filial / revendedor que vende os produtos de empresas de uma comissão., +Sales Partner Name,Nome do Parceiro de Vendas, +Partner Type,Tipo de Parceiro, +Address & Contacts,Endereços e Contatos, +Address Desc,Descrição do Endereço, +Contact Desc,Descrição do Contato, +Sales Partner Target,Metas do Parceiro de Vendas, +Targets,Metas, +Show In Website,Mostrar no Site, +Referral Code,Código de Referencia, +To Track inbound purchase,Para rastrear compras de entrada, +Logo,Logotipo, +Partner website,Site Parceiro, +All Sales Transactions can be tagged against multiple **Sales Persons** so that you can set and monitor targets.,Todas as transações de vendas pode ser marcado contra várias pessoas das vendas ** ** para que você pode definir e monitorar as metas., +Name and Employee ID,Nome e ID do Colaborador, +Sales Person Name,Nome do Vendedor, +Parent Sales Person,Vendedor Pai, +Select company name first.,Selecione o nome da empresa por primeiro., +Sales Person Targets,Metas do Vendedor, +Set targets Item Group-wise for this Sales Person.,Estabelecer Metas para este Vendedor por Grupo de Itens, +Supplier Group Name,Nome do Grupo de Fornecedores, +Parent Supplier Group,Grupo de Fornecedores Pai, +Target Detail,Detalhe da Meta, +Target Qty,Meta de Qtde, +Target Amount,Valor da Meta, +Target Distribution,Distribuição de Metas, +"Standard Terms and Conditions that can be added to Sales and Purchases.\n\nExamples:\n\n1. Validity of the offer.\n1. Payment Terms (In Advance, On Credit, part advance etc).\n1. What is extra (or payable by the Customer).\n1. Safety / usage warning.\n1. Warranty if any.\n1. Returns Policy.\n1. Terms of shipping, if applicable.\n1. Ways of addressing disputes, indemnity, liability, etc.\n1. Address and Contact of your Company.","Termos e Condições Padrão que podem ser adicionados às Compras e Vendas.\n\n Exemplos: \n\n 1. Validade da oferta.\n 1. Condições de pagamento (Com Antecedência, no Crédito, parte com antecedência etc).\n 1. o que é adicional (ou a pagar pelo Cliente).\n 1. Aviso de segurança / utilização.\n 1. Garantia, se houver.\n 1. Política de Devolução.\n 1. Condições de entrega, caso seja aplicável.\n 1. Formas de abordar litígios, indemnização, responsabilidade, etc. \n 1. Endereço e Contacto da sua Empresa.", +Applicable Modules,Módulos Aplicáveis, +Terms and Conditions Help,Ajuda de Termos e Condições, +Classification of Customers by region,Classificação dos clientes por região, +Territory Name,Nome do Território, +Parent Territory,Território Pai, +Territory Manager,Gestor de Territórios, +For reference,Para referência, +Territory Targets,Metas do Território, +Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,Definir orçamentos para Grupos de Itens neste território. Você também pode incluir a sazonalidade defininda na Distribuição., +UOM Name,Nome da Unidade de Medida, +Check this to disallow fractions. (for Nos),Marque esta opção para não permitir frações. (Para n), +Website Item Group,Grupo de Itens do Site, +Cross Listing of Item in multiple groups,Listagem cruzada dos produtos que pertencem à vários grupos, +Default settings for Shopping Cart,As configurações padrão para Carrinho de Compras, +Enable Shopping Cart,Ativar Carrinho de Compras, +Display Settings,Configurações de Exibição, +Show Public Attachments,Mostrar Anexos Públicos, +Show Price,Mostrar Preço, +Show Stock Availability,Mostrar Disponibilidade de Estoque, +Show Contact Us Button,Mostrar Entre Em Contato Conosco, +Show Stock Quantity,Mostrar a Quantidade de Estoque, +Show Apply Coupon Code,Mostrar Aplicar Código de Cupom, +Allow items not in stock to be added to cart,Permitir que itens não em estoque sejam adicionados ao carrinho, +Prices will not be shown if Price List is not set,Os preços não serão mostrados se a lista de preços não estiver configurada, +Quotation Series,Séries de Orçamento, +Checkout Settings,Configurações de Vendas, +Enable Checkout,Ativar Caixa, +Payment Success Url,URL de Confirmação de Pagamento, +After payment completion redirect user to selected page.,Após a conclusão do pagamento redirecionar usuário para a página selecionada., +Batch Details,Detalhes do Lote, +Batch ID,ID do Lote, +image,imagem, +Parent Batch,Lote Pai, +Manufacturing Date,Data de Fabricação, +Batch Quantity,Quantidade de Lote, +Batch UOM,Lote UDM, +Source Document Type,Tipo de Documento de Origem, +Source Document Name,Nome do Documento de Origem, +Batch Description,Descrição do Lote, +Bin,Caixa, +Reserved Quantity,Quantidade Reservada, +Actual Quantity,Quantidade Real, +Requested Quantity,Quantidade Solicitada, +Reserved Qty for sub contract,Qtd reservada para subcontrato, +Moving Average Rate,Taxa da Média Móvel, +FCFS Rate,Taxa Fcfs, +Customs Tariff Number,Número de Tarifa Alfandegária, +Tariff Number,Número de Tarifas, +Delivery To,Entregar Para, +MAT-DN-.YYYY.-,MAT-DN-.YYYY.-, +Is Return,É Devolução, +Issue Credit Note,Emitir Nota de Crédito, +Return Against Delivery Note,Devolução Contra Guia de Remessa, +Customer's Purchase Order No,Nº do Pedido de Compra do Cliente, +Billing Address Name,Endereço de Faturamento, +Required only for sample item.,Necessário apenas para o item de amostra., +"If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.","Se você criou um modelo padrão de Impostos e Taxas de Vendas Modelo, selecione um e clique no botão abaixo.", +In Words will be visible once you save the Delivery Note.,Por extenso será visível quando você salvar a Guia de Remessa., +In Words (Export) will be visible once you save the Delivery Note.,Por extenso (Exportação) será visível quando você salvar a Guia de Remessa., +Transporter Info,Informações da Transportadora, +Driver Name,Nome do Motorista, +Track this Delivery Note against any Project,Acompanhar este Guia de Remessa contra qualquer projeto, +Inter Company Reference,Referência Entre Empresas, +Print Without Amount,Imprimir Sem Valores, +% Installed,Instalado %, +% of materials delivered against this Delivery Note,% do material entregue contra esta Guia de Remessa, +Installation Status,Status da Instalação, +Excise Page Number,Número de Página do Imposto, +Instructions,Instruções, +From Warehouse,Armazém de Origem, +Against Sales Order,Relacionado Ao Pedido de Venda, +Against Sales Order Item,Relacionado Ao Item do Pedido de Venda, +Against Sales Invoice,Contra a Fatura de Venda, +Against Sales Invoice Item,Contra o Item da Fatura de Venda, +Available Batch Qty at From Warehouse,Qtde Disponível do Lote no Armazém, +Available Qty at From Warehouse,Qtde Disponível no Armazém de Origem, +Delivery Settings,Configurações de Entrega, +Dispatch Settings,Configurações de Despacho, +Dispatch Notification Template,Modelo de Notificação de Despacho, +Dispatch Notification Attachment,Anexo de Notificação de Despacho, +Leave blank to use the standard Delivery Note format,Deixe em branco para usar o formato padrão de nota de entrega, +Send with Attachment,Enviar com anexo, +Delay between Delivery Stops,Atraso entre paradas de entrega, +Delivery Stop,Parada de Entrega, +Lock,Trancar, +Visited,Visitado, +Order Information,Informação do Pedido, +Contact Information,Informações de Contato, +Email sent to,Email Enviado para, +Dispatch Information,Informação de Despacho, +Estimated Arrival,Chegada Estimada, +MAT-DT-.YYYY.-,MAT-DT-.YYYY.-, +Initial Email Notification Sent,Notificação Inicial de E-mail Enviada, +Delivery Details,Detalhes da Entrega, +Driver Email,E-mail do Motorista, +Driver Address,Endereço do Driver, +Total Estimated Distance,Distância Total Estimada, +Distance UOM,Distância UDM, +Departure Time,Hora de Partida, +Delivery Stops,Paradas de Entrega, +Calculate Estimated Arrival Times,Calcule os Horários de Chegada Estimados, +Use Google Maps Direction API to calculate estimated arrival times,Use a API de direção do Google Maps para calcular os tempos estimados de chegada, +Optimize Route,Otimizar Rota, +Use Google Maps Direction API to optimize route,Use a API de direção do Google Maps para otimizar a rota, +In Transit,Em Trânsito, +Fulfillment User,Usuário de Cumprimento, +"A Product or a Service that is bought, sold or kept in stock.","Um produto ou um serviço que é comprado, vendido ou mantido em estoque.", +STO-ITEM-.YYYY.-,STO-ITEM-.YYYY.-, +Variant Of,Variante De, +"If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified","Se o item é uma variante de outro item, em seguida, descrição, imagem, preços, impostos etc será definido a partir do modelo, a menos que explicitamente especificado", +Is Item from Hub,É Item do Hub, +Default Unit of Measure,Unidade de Medida Padrão, +Maintain Stock,Manter Estoque, +Standard Selling Rate,Valor de Venda Padrão, +Auto Create Assets on Purchase,Criar Automaticamente Ativos na Compra, +Asset Naming Series,Série de Nomenclatura de Ativos, +Over Delivery/Receipt Allowance (%),Sobretaxa de Entrega / Recebimento (%), +Barcodes,Códigos de Barra, +Shelf Life In Days,Vida Útil Em Dias, +End of Life,Validade, +Default Material Request Type,Tipo de Requisição de Material Padrão, +Valuation Method,Método de Avaliação, +FIFO,FIFO, +Moving Average,Média Móvel, +Warranty Period (in days),Período de Garantia (em dias), +Auto re-order,Reposição Automática, +Reorder level based on Warehouse,Nível de reposição baseado no Armazén, +Will also apply for variants unless overrridden,Também se aplica a variantes a não ser que seja sobrescrito, +Units of Measure,Unidades de Medida, +Will also apply for variants,Também se aplica às variantes, +Serial Nos and Batches,Números de Série e Lotes, +Has Batch No,Tem Nº de Lote, +Automatically Create New Batch,Criar Novo Lote Automaticamente, +Batch Number Series,Série de Números Em Lote, +"Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions, then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item, leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings.","Exemplo: ABCD. #####. Se a série estiver configurada e o número de lote não for mencionado nas transações, o número de lote automático será criado com base nessa série. Se você sempre quiser mencionar explicitamente o Lote Não para este item, deixe em branco. Nota: esta configuração terá prioridade sobre o prefixo da série de nomeação em Configurações de estoque.", +Has Expiry Date,Tem Data de Expiração, +Retain Sample,Manter a Amostra, +Max Sample Quantity,Quantidade Máx. de Amostra, +Maximum sample quantity that can be retained,Quantidade máxima de amostras que pode ser mantida, +Has Serial No,Tem Nº de Série, +Serial Number Series,Séries de Nº de Série, +"Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Exemplo: ABCD ##### Se a série está configurada e o Nr. de Série não é mencionado nas transações, então será criado um número de série automático com base nesta série. Se sempre quis mencionar explicitamente os Números de Série para este item, deixe isto em branco.", +Variants,Variantes, +Has Variants,Tem Variantes, +"If this item has variants, then it cannot be selected in sales orders etc.","Se este item tem variantes, então ele não pode ser selecionado em pedidos de venda etc.", +Variant Based On,Variant Based On, +Item Attribute,Atributos do Item, +"Sales, Purchase, Accounting Defaults","Vendas, Compra, Padrões Contábeis", +Item Defaults,Padrões de Item, +"Purchase, Replenishment Details","Compra, Detalhes de Reabastecimento", +Is Purchase Item,É item de compra, +Default Purchase Unit of Measure,Unidade de Medida de Compra Padrão, +Minimum Order Qty,Pedido Mínimo, +Minimum quantity should be as per Stock UOM,A quantidade mínima deve ser de acordo com a UOM de estoque, +Average time taken by the supplier to deliver,Tempo médio necessário para entrega do fornecedor., +Is Customer Provided Item,Item Fornecido Pelo Cliente, +Delivered by Supplier (Drop Ship),Entregue Pelo Fornecedor (drop Ship), +Supplier Items,Itens do Fornecedor, +Foreign Trade Details,Detalhes Comércio Exterior, +Country of Origin,País de Origem, +Sales Details,Detalhes de Vendas, +Default Sales Unit of Measure,Unidade de Medida de Vendas Padrão, +Is Sales Item,É item de venda, +Max Discount (%),Desconto Máx. (%), +No of Months,Não de Meses, +Customer Items,Itens de Clientes, +Inspection Criteria,Critérios de Inspeção, +Inspection Required before Purchase,Inspeção Requerida antes da Compra, +Inspection Required before Delivery,Inspeção Requerida antes da Entrega, +Default BOM,LDM Padrão, +Supply Raw Materials for Purchase,Abastecimento de Matérias-primas Para a Compra, +If subcontracted to a vendor,Se subcontratada a um fornecedor, +Customer Code,Código do Cliente, +Default Item Manufacturer,Fabricante do Item Padrão, +Default Manufacturer Part No,Número da Peça do Fabricante Padrão, +Show in Website (Variant),Mostar no Site (variante), +Items with higher weightage will be shown higher,Os itens com maior weightage será mostrado maior, +Show a slideshow at the top of the page,Mostrar uma apresentação de slides no topo da página, +Website Image,Imagem do Site, +Website Warehouse,Armazém do Site, +"Show ""In Stock"" or ""Not in Stock"" based on stock available in this warehouse.","Mostrar ""Em Estoque"" ou ""Esgotado"" baseado no estoque disponível neste armazén.", +Website Item Groups,Grupos de Itens do Site, +List this Item in multiple groups on the website.,Listar este item em vários grupos no site., +Copy From Item Group,Copiar do Item do Grupo, +Website Content,Conteúdo do Site, +You can use any valid Bootstrap 4 markup in this field. It will be shown on your Item Page.,Você pode usar qualquer marcação válida do Bootstrap 4 nesse campo. Será mostrado na sua página de itens., +Total Projected Qty,Quantidade Total Projetada, +Hub Publishing Details,Detalhes da Publicação do Hub, +Publish in Hub,Publicar no Hub, +Publish Item to hub.erpnext.com,Publicar Item para hub.erpnext.com, +Hub Category to Publish,Categoria Hub Para Publicar, +Hub Warehouse,Hub Warehouse, +"Publish ""In Stock"" or ""Not in Stock"" on Hub based on stock available in this warehouse.",Publicar "Em estoque" ou "Não disponível" no Hub com base nas ações disponíveis neste armazém., +Synced With Hub,Sincronizado Com o Hub, +Item Alternative,Alternativa de Itens, +Alternative Item Code,Código de Item Alternativo, +Two-way,Em Dois Sentidos, +Alternative Item Name,Nome Alternativo do Item, +Attribute Name,Nome do Atributo, +Numeric Values,Valores Numéricos, +From Range,Da Faixa, +Increment,Incremento, +To Range,Para a Faixa, +Item Attribute Values,Valores Dos Atributos, +Item Attribute Value,Item Atributo Valor, +Attribute Value,Atributo Valor, +Abbreviation,Abreviatura, +"This will be appended to the Item Code of the variant. For example, if your abbreviation is ""SM"", and the item code is ""T-SHIRT"", the item code of the variant will be ""T-SHIRT-SM""","Isso vai ser anexado ao Código do item da variante. Por exemplo, se a sua abreviatura é ""SM"", e o código do item é ""t-shirt"", o código do item da variante será ""T-shirt-SM""", +Item Barcode,Código de Barras do Item, +Barcode Type,Tipo de Código de Barras, +EAN,EAN, +UPC-A,UPC-A, +Item Customer Detail,Detalhe do Cliente do Item, +"For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes","Para a comodidade dos clientes, estes códigos podem ser usados em formatos de impressão, como Notas Fiscais e Guias de Remessa", +Ref Code,Código de Ref., +Item Default,Item Padrão, +Purchase Defaults,Padrões de Compra, +Default Buying Cost Center,Centro de Custo Padrão de Compra, +Default Supplier,Fornecedor Padrão, +Default Expense Account,Conta Padrão de Despesa, +Sales Defaults,Padrões de Vendas, +Default Selling Cost Center,Centro de Custo Padrão de Vendas, +Item Manufacturer,Item Fabricante, +Item Price,Preço do Item, +Packing Unit,Unidade de Embalagem, +Quantity that must be bought or sold per UOM,Quantidade que deve ser comprada ou vendida por UOM, +Item Quality Inspection Parameter,Parâmetro de Inspeção de Qualidade do Item, +Acceptance Criteria,Critérios de Aceitação, +Item Reorder,Reposição de Item, +Check in (group),Entrada (grupo), +Request for,Solicitado Para, +Re-order Level,Nível de Reposição, +Re-order Qty,Qtde Para Reposição, +Item Supplier,Fornecedor do Item, +Item Variant,Item Variant, +Item Variant Attribute,Variant Item Atributo, +Do not update variants on save,Não atualize as variantes em salvar, +Fields will be copied over only at time of creation.,Os campos serão copiados apenas no momento da criação., +Allow Rename Attribute Value,Permitir Renomear o Valor do Atributo, +Rename Attribute Value in Item Attribute.,Renomeie o Valor do Atributo no Atributo do Item., +Copy Fields to Variant,Copiar Campos Para Variante, +Item Website Specification,Especificação do Site do Item, +Table for Item that will be shown in Web Site,Tabela para o item que será mostrado no Web Site, +Landed Cost Item,Custo de Desembarque do Item, +Receipt Document Type,Tipo de Documento de Recibo, +Receipt Document,Documento de Recibo, +Applicable Charges,Encargos Aplicáveis, +Purchase Receipt Item,Item do Recibo de Compra, +Landed Cost Purchase Receipt,Recibo de Compra do Custo de Desembarque, +Landed Cost Taxes and Charges,Impostos e Encargos Sobre Custos de Desembarque, +Landed Cost Voucher,Comprovante de Custos de Desembarque, +MAT-LCV-.YYYY.-,MAT-LCV-.YYYY.-, +Purchase Receipts,Recibos de Compra, +Purchase Receipt Items,Itens do Recibo de Compra, +Get Items From Purchase Receipts,Obter Itens de Recibos de Compra, +Distribute Charges Based On,Distribuir Encargos Baseado Em, +Landed Cost Help,Custo de Desembarque Ajuda, +Manufacturers used in Items,Fabricantes utilizados em Itens, +Limited to 12 characters,Limitados a 12 caracteres, +MAT-MR-.YYYY.-,MAT-MR-.YYYY.-, +Partially Ordered,Parcialmente Comprados, +Transferred,Transferido, +% Ordered,% Comprado, +Terms and Conditions Content,Conteúdo Dos Termos e Condições, +Quantity and Warehouse,Quantidade e Armazém, +Lead Time Date,Prazo de Entrega, +Min Order Qty,Pedido Mínimo, +Packed Item,Item do Pacote da Guia de Remessa, +To Warehouse (Optional),Para o Armazém (opcional), +Actual Batch Quantity,Quantidade Real do Lote, +Prevdoc DocType,Prevdoc DocType, +Parent Detail docname,Nome do documento do detalhe pai, +"Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.","Gerar lista de embalagem para os pacotes a serem entregues. Usado para identificar número do pacote, o conteúdo do pacote e seu peso.", +Indicates that the package is a part of this delivery (Only Draft),Indica que o pacote é uma parte desta entrega (Só Rascunho), +MAT-PAC-.YYYY.-,MAT-PAC-.YYYY.-, +From Package No.,Do Nº do Pacote, +Identification of the package for the delivery (for print),Identificação do pacote para a Entrega (para impressão), +To Package No.,Até Nº do Pacote, +If more than one package of the same type (for print),Se mais do que uma embalagem do mesmo tipo (para impressão), +Package Weight Details,Detalhes de Peso do Pacote, +The net weight of this package. (calculated automatically as sum of net weight of items),O peso líquido do pacote. (Calculado automaticamente como soma do peso líquido dos itens), +Net Weight UOM,Unidade de Medida do Peso Líquido, +Gross Weight,Peso Bruto, +The gross weight of the package. Usually net weight + packaging material weight. (for print),O peso bruto do pacote. Normalmente peso líquido + peso do material de embalagem. (para impressão), +Gross Weight UOM,Unidade de Medida do Peso Bruto, +Packing Slip Item,Item da Lista de Embalagem, +DN Detail,Detalhe DN, +STO-PICK-.YYYY.-,Sto-pick-.aaa.-, +Material Transfer for Manufacture,Transferência de Material Para Fabricação, +Qty of raw materials will be decided based on the qty of the Finished Goods Item,A quantidade de matérias-primas será decidida com base na quantidade do item de produtos acabados, +Parent Warehouse,Armazém Pai, +Items under this warehouse will be suggested,Itens sob este armazém serão sugeridos, +Get Item Locations,Obter Locais de Itens, +Item Locations,Localizações Dos Itens, +Pick List Item,Item da Lista de Seleção, +Picked Qty,Qtd Escolhido, +Price List Master,Cadastro da Lista de Preços, +Price List Name,Nome da Lista de Preços, +Price Not UOM Dependent,Preço Não Dependente da UDM, +Applicable for Countries,Aplicável Para os Países, +Price List Country,Preço da Lista País, +MAT-PRE-.YYYY.-,MAT-PRE-.YYYY.-, +Supplier Delivery Note,Nota de Entrega do Fornecedor, +Time at which materials were received,Horário em que os materiais foram recebidos, +Return Against Purchase Receipt,Devolução Contra Recibo de Compra, +Rate at which supplier's currency is converted to company's base currency,Taxa na qual a moeda do fornecedor é convertida para a moeda base da empresa, +Sets 'Accepted Warehouse' in each row of the items table.,Define ';Armazém Aceito'; em cada linha da tabela de itens., +Sets 'Rejected Warehouse' in each row of the items table.,Define ';Rejeitado Armazém'; em cada linha da tabela de itens., +Raw Materials Consumed,Matérias-primas Consumidas, +Get Current Stock,Obter Estoque Atual, +Consumed Items,Itens Consumidos, +Add / Edit Taxes and Charges,Adicionar / Editar Impostos e Encargos, +Auto Repeat Detail,Detalhe de Repetição Automática, +Transporter Details,Detalhes da Transportadora, +Vehicle Number,Placa do Veículo, +Vehicle Date,Data do Veículo, +Received and Accepted,Recebeu e Aceitou, +Accepted Quantity,Quantidade Aceita, +Rejected Quantity,Quantidade Rejeitada, +Accepted Qty as per Stock UOM,Qtd Aceita Conforme UDM de Estoque, +Sample Quantity,Quantidade da Amostra, +Rate and Amount,Preço e Total, +MAT-QA-.YYYY.-,MAT-QA-.YYYY.-, +Report Date,Data do Relatório, +Inspection Type,Tipo de Inspeção, +Item Serial No,Nº de Série do Item, +Sample Size,Tamanho da Amostra, +Inspected By,Inspecionado Por, +Readings,Leituras, +Quality Inspection Reading,Leitura da Inspeção de Qualidade, +Reading 1,Leitura 1, +Reading 2,Leitura 2, +Reading 3,Leitura 3, +Reading 4,Leitura 4, +Reading 5,Leitura 5, +Reading 6,Leitura 6, +Reading 7,Leitura 7, +Reading 8,Leitura 8, +Reading 9,Leitura 9, +Reading 10,Leitura 10, +Quality Inspection Template Name,Nome do Modelo de Inspeção de Qualidade, +Quick Stock Balance,Balanço Rápido de Estoque, +Available Quantity,Quantidade Disponível, +Distinct unit of an Item,Unidade distinta de um item, +Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Armazém só pode ser alterado através de entrada / entrega da nota / recibo de compra, +Purchase / Manufacture Details,Detalhes Compra / Fabricação, +Creation Document Type,Tipo de Criação do Documento, +Creation Document No,Número de Criação do Documento, +Creation Date,Data de Criação, +Creation Time,Horário de Criação, +Asset Details,Detalhes do Ativo, +Asset Status,Status do Ativo, +Delivery Document Type,Tipo do Documento de Entrega, +Delivery Document No,Nº do Documento de Entrega, +Delivery Time,Prazo de Entrega, +Invoice Details,Detalhes da Fatura, +Warranty / AMC Details,Garantia / Detalhes do Cam, +Warranty Expiry Date,Data de Validade da Garantia, +AMC Expiry Date,Data de Validade do Cam, +Under Warranty,Sob Garantia, +Out of Warranty,Fora de Garantia, +Under AMC,Sob Cam, +Out of AMC,Fora do Cam, +Warranty Period (Days),Período de Garantia (dias), +Serial No Details,Detalhes do Nº de Série, +MAT-STE-.YYYY.-,MAT-STE-.YYYY.-, +Stock Entry Type,Tipo de Entrada de Estoque, +Stock Entry (Outward GIT),Entrada de Estoque (git Externo), +Material Consumption for Manufacture,Consumo de Material Para Manufatura, +Repack,Reembalar, +Send to Subcontractor,Enviar Para Subcontratado, +Delivery Note No,Nº da Guia de Remessa, +Sales Invoice No,Nº da Nota Fiscal de Venda, +Purchase Receipt No,Nº do Recibo de Compra, +Inspection Required,Inspeção Obrigatória, +From BOM,Da LDM, +For Quantity,Para Quantidade, +As per Stock UOM,Em UDM do Estoque, +Including items for sub assemblies,Incluindo itens para subconjuntos, +Default Source Warehouse,Armazém de Origem Padrão, +Source Warehouse Address,Endereço do Depósito de Origem, +Default Target Warehouse,Armazém de Destino Padrão, +Target Warehouse Address,Endereço do Depósito de Destino, +Update Rate and Availability,Atualizar Valor e Disponibilidade, +Total Incoming Value,Valor Total Recebido, +Total Outgoing Value,Valor Total de Saída, +Total Value Difference (Out - In),Diferença do Valor Total (saída - Entrada), +Additional Costs,Custos Adicionais, +Total Additional Costs,Total de Custos Adicionais, +Customer or Supplier Details,Detalhes do Cliente Ou Fornecedor, +Per Transferred,Por Transferido, +Stock Entry Detail,Detalhe do Lançamento no Estoque, +Basic Rate (as per Stock UOM),Preço Unitário (de Acordo Com a UDM do Estoque), +Basic Amount,Valor Base, +Additional Cost,Custo Adicional, +Serial No / Batch,N º de Série / Lote, +BOM No. for a Finished Good Item,Nº da LDM Para Um Item Acabado, +Material Request used to make this Stock Entry,Requisição de Material usada para fazer esta Entrada de Material, +Subcontracted Item,Item Subcontratado, +Against Stock Entry,Contra Entrada de Estoque, +Stock Entry Child,Filho de Entrada de Estoque, +PO Supplied Item,Item Fornecido Po, +Reference Purchase Receipt,Recibo de Compra de Referência, +Stock Ledger Entry,Lançamento do Livro de Inventário, +Outgoing Rate,Taxa de Saída, +Actual Qty After Transaction,Qtde Real Após a Transação, +Stock Value Difference,Diferença de Valor do Estoque, +Stock Queue (FIFO),Fila do Estoque (peps), +Is Cancelled,É Cancelado, +Stock Reconciliation,Conciliação de Estoque, +This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.,Esta ferramenta ajuda você a atualizar ou corrigir a quantidade ea valorização das ações no sistema. Ele é geralmente usado para sincronizar os valores do sistema e que realmente existe em seus armazéns., +MAT-RECO-.YYYY.-,MAT-RECO-.YYYY.-, +Reconciliation JSON,Reconciliação Json, +Stock Reconciliation Item,Item da Conciliação de Estoque, +Before reconciliation,Antes da conciliação, +Current Serial No,Número de Série Atual, +Current Valuation Rate,Taxa Atual de Avaliação, +Current Amount,Valor Atual, +Quantity Difference,Diferença de Quantidade, +Amount Difference,Valor da Diferença, +Item Naming By,Nomeação de Item Por, +Default Item Group,Grupo de Itens Padrão, +Default Stock UOM,Unidade de Medida Padrão do Estoque, +Sample Retention Warehouse,Armazém de Retenção de Amostra, +Default Valuation Method,Método de Avaliação Padrão, +Show Barcode Field,Mostrar Campo Código de Barras, +Convert Item Description to Clean HTML,Converter a Descrição do Item Para Html Limpo, +Allow Negative Stock,Permitir Estoque Negativo, +Automatically Set Serial Nos based on FIFO,Número de Série automaticamente definido com base na FIFO, +Auto Material Request,Requisição de Material Automática, +Inter Warehouse Transfer Settings,Configurações de Transferência Entre Armazéns, +Freeze Stock Entries,Congelar Lançamentos no Estoque, +Stock Frozen Upto,Estoque Congelado Até, +Batch Identification,Identificação do Lote, +Use Naming Series,Usar a Série de Nomes, +Naming Series Prefix,Prefixo do Código de Documentos, +UOM Category,Categoria de UDM, +UOM Conversion Detail,Detalhe da Conversão de Unidade de Medida, +Variant Field,Campo Variante, +A logical Warehouse against which stock entries are made.,Um Depósito lógico contra o qual as entradas de estoque são feitas., +Warehouse Detail,Detalhes do Armazén, +Warehouse Name,Nome do Armazén, +Warehouse Contact Info,Informações de Contato do Armazén, +PIN,PIN, +ISS-.YYYY.-,ISS-.YYYY.-, +Raised By (Email),Levantadas Por (email), +Issue Type,Tipo de Problema, +Issue Split From,Divisão do Problema De, +Service Level,Nível de Serviço, +Response By,Resposta Por, +Response By Variance,Resposta Por Variação, +Ongoing,Em Progresso, +Resolution By,Resolução Por, +Resolution By Variance,Resolução Por Variação, +Service Level Agreement Creation,Criação de Acordo de Nível de Serviço, +First Responded On,Primeira Resposta Em, +Resolution Details,Detalhes da Solução, +Opening Date,Data de Abertura, +Opening Time,Horário de Abertura, +Resolution Date,Data da Solução, +Via Customer Portal,Através do Portal do Cliente, +Support Team,Equipe de Pós-vendas, +Issue Priority,Prioridade do Incidente, +Service Day,Dia do Serviço, +Workday,Dia de Trabalho, +Default Priority,Prioridade Padrão, +Priorities,Prioridades, +Support Hours,Horas de Suporte, +Support and Resolution,Suporte e Resolução, +Default Service Level Agreement,Contrato de Nível de Serviço Padrão, +Entity,Entidade, +Agreement Details,Detalhes do Contrato, +Response and Resolution Time,Resposta e Tempo de Resolução, +Service Level Priority,Prioridade de Nível de Serviço, +Resolution Time,Tempo de Resolução, +Support Search Source,Fonte de Pesquisa de Suporte, +Source Type,Tipo de Fonte, +Query Route String,String de Rota de Consulta, +Search Term Param Name,Termo de Pesquisa Param Name, +Response Options,Opções de Resposta, +Response Result Key Path,Caminho da Chave do Resultado da Resposta, +Post Route String,Cadeia de Rota de Postagem, +Post Route Key List,Lista de Chaves Pós-rota, +Post Title Key,Post Title Key, +Post Description Key,Chave de Descrição de Postagens, +Link Options,Opções de Link, +Source DocType,DocType de Origem, +Result Title Field,Campo de Título do Resultado, +Result Preview Field,Campo de Prévia do Resultado, +Result Route Field,Campo de Rota do Resultado, +Service Level Agreements,Acordos de Nível de Serviço, +Track Service Level Agreement,Acompanhar o Nível de Serviço, +Allow Resetting Service Level Agreement,Permitir Redefinição do Contrato de Nível de Serviço, +Close Issue After Days,Fechar Incidente Após Dias, +Auto close Issue after 7 days,Fechar atuomaticamente o incidente após 7 dias, +Support Portal,Portal de Suporte, +Get Started Sections,Seções Iniciais, +Show Latest Forum Posts,Mostrar as Últimas Mensagens do Fórum, +Forum Posts,Posts no Fórum, +Forum URL,URL do Fórum, +Get Latest Query,Obter Consulta Mais Recente, +Response Key List,Lista de Chaves de Resposta, +Post Route Key,Post Route Key, +Search APIs,Apis de Pesquisa, +SER-WRN-.YYYY.-,SER-WRN-.YYYY.-, +Issue Date,Data do Incidente, +Item and Warranty Details,Itens e Garantia Detalhes, +Warranty / AMC Status,Garantia / Status do Cam, +Resolved By,Resolvido Por, +Service Address,Endereço da Manutenção do Veículo, +If different than customer address,Se diferente do endereço do cliente, +Raised By,Levantadas Por, +From Company,Da Empresa, +Rename Tool,Ferramenta de Renomear, +Utilities,Utilitários, +Type of document to rename.,Tipo de documento a ser renomeado., +File to Rename,Arquivo Para Renomear, +"Attach .csv file with two columns, one for the old name and one for the new name","Anexar arquivo.csv com duas colunas, uma para o nome antigo e um para o novo nome", +Rename Log,Renomear Log, +SMS Log,Log de SMS, +Sender Name,Nome do Remetente, +Sent On,Enviado Em, +No of Requested SMS,Nº de SMS Pedidos, +Requested Numbers,Números Solicitadas, +No of Sent SMS,Nº de SMS Enviados, +Sent To,Enviado Para, +Absent Student Report,Relatório de Frequência do Aluno, +Assessment Plan Status,Status do Plano de Avaliação, +Asset Depreciation Ledger,Livro Razão de Depreciação de Ativos, +Asset Depreciations and Balances,Depreciação de Ativos e Saldos, +Available Stock for Packing Items,Estoque Disponível Para o Empacotamento de Itens, +Bank Clearance Summary,Resumo da Liquidação Bancária, +Bank Remittance,Remessa Bancária, +Batch Item Expiry Status,Status do Vencimento do Item do Lote, +Batch-Wise Balance History,Balanço Por Histórico de Lotes, +BOM Explorer,Bom Explorer, +BOM Search,Pesquisar LDM, +BOM Stock Calculated,Bom Estoque Calculado, +BOM Variance Report,Relatório de Variação da Lista Técnica, +Campaign Efficiency,Eficiência da Campanha, +Cash Flow,Fluxo de Caixa, +Completed Work Orders,Ordens de Trabalho Concluídas, +To Produce,Para Produzir, +Produced,Produzido, +Consolidated Financial Statement,Declaração Financeira Consolidada, +Course wise Assessment Report,Relatório de Avaliação do Curso, +Customer Acquisition and Loyalty,Aquisição de Clientes e Fidelização, +Customer Credit Balance,Saldo de Crédito do Cliente, +Customer Ledger Summary,Resumo do Ledger de Clientes, +Customer-wise Item Price,Preço de Item Ao Consumidor, +Customers Without Any Sales Transactions,Clientes Sem Qualquer Transação de Vendas, +Daily Timesheet Summary,Resumo Diário Dos Registros de Tempo, +Daily Work Summary Replies,Respostas de Resumo do Trabalho Diário, +DATEV,DATEV, +Delayed Item Report,Relatório de Item Atrasado, +Delayed Order Report,Relatório de Pedidos Atrasados, +Delivered Items To Be Billed,Itens Entregues Mas Não Faturados, +Delivery Note Trends,Tendência de Remessas, +Electronic Invoice Register,Registro de Fatura Eletrônica, +Employee Advance Summary,Resumo de Empregado, +Employee Billing Summary,Resumo de Cobrança de Funcionários, +Employee Birthday,Aniversário Dos Colaboradores, +Employee Information,Informações do Colaborador, +Employee Leave Balance,Saldo de Licenças do Colaborador, +Employee Leave Balance Summary,Resumo do Saldo de Empregados, +Employees working on a holiday,Colaboradores Trabalhando no Feriado, +Eway Bill,Conta de Saída, +Expiring Memberships,Membros Vencedores, +Fichier des Ecritures Comptables [FEC],Fichier Des Ecritures Comptables [fec], +Final Assessment Grades,Avaliação Final de Notas, +Fixed Asset Register,Registro de Ativo Fixo, +Gross and Net Profit Report,Relatório de Lucro Bruto e Líquido, +GST Itemised Purchase Register,Registo de compra por itens do GST, +GST Itemised Sales Register,Registro de vendas detalhado GST, +GST Purchase Register,Registro de Compra de GST, +GST Sales Register,GST Sales Register, +GSTR-1,GSTR-1, +GSTR-2,GSTR-2, +Hotel Room Occupancy,Ocupação do Quarto do Hotel, +HSN-wise-summary of outward supplies,HSN-wise-resumo de fontes externas, +Inactive Customers,Clientes Inativos, +Inactive Sales Items,Itens de Vendas Inativas, +IRS 1099,IRS 1099, +Issued Items Against Work Order,Itens Emitidos Contra Ordem de Serviço, +Projected Quantity as Source,Quantidade Projetada Como Fonte, +Item Balance (Simple),Balanço de Itens (simples), +Item Price Stock,Preço do Item Preço, +Item Prices,Preços de Itens, +Item Shortage Report,Relatório de Itens Em Falta no Estoque, +Item Variant Details,Item Variant Details, +Item-wise Price List Rate,Lista de Preços Por Item, +Item-wise Purchase History,Histórico de Compras Por Item, +Item-wise Purchase Register,Registro de Compras Por Item, +Item-wise Sales History,Histórico de Vendas Por Item, +Item-wise Sales Register,Registro de Vendas Por Item, +Items To Be Requested,Itens Para Requisitar, +Reserved,Reservado, +Itemwise Recommended Reorder Level,Níves de Reposição Recomendados Por Item, +Lead Details,Detalhes do Lead, +Lead Owner Efficiency,Eficiência do Proprietário de Leads, +Loan Repayment and Closure,Reembolso e Encerramento de Empréstimos, +Loan Security Status,Status da Garantia do Empréstimo, +Lost Opportunity,Oportunidade Perdida, +Maintenance Schedules,Horários de Manutenção, +Material Requests for which Supplier Quotations are not created,Itens Requisitados mas não Cotados, +Monthly Attendance Sheet,Folha de Ponto Mensal, +Open Work Orders,Abrir Ordens de Serviço, +Qty to Deliver,Qtde Para Entregar, +Patient Appointment Analytics,Análise de Consulta de Paciente, +Payment Period Based On Invoice Date,Prazo Médio de Pagamento Baseado na Emissão da Nota, +Pending SO Items For Purchase Request,Itens Pendentes da Ordem de Venda Por Solicitação de Compra, +Procurement Tracker,Procurement Tracker, +Product Bundle Balance,Saldo do Pacote de Produtos, +Production Analytics,Análise de Produção, +Profit and Loss Statement,Demonstrativo de Resultados, +Profitability Analysis,Análise de Lucratividade, +Project Billing Summary,Resumo de Cobrança do Projeto, +Project wise Stock Tracking,Rastreio de Estoque por Projeto, +Project wise Stock Tracking ,Controlo de Estoque por Projeto, +Prospects Engaged But Not Converted,Clientes Prospectados Mas Não Convertidos, +Purchase Analytics,Analítico de Compras, +Purchase Invoice Trends,Tendência de Faturas de Compra, +Qty to Receive,Qtde Para Receber, +Received Qty Amount,Quantidade de Quantidade Recebida, +Billed Qty,Quantidade Faturada, +Purchase Order Trends,Tendência de Pedidos de Compra, +Purchase Receipt Trends,Tendência de Recebimentos, +Purchase Register,Registro de Compras, +Quotation Trends,Tendência de Orçamentos, +Received Items To Be Billed,Itens Recebidos Mas Não Faturados, +Qty to Order,Qtde Para Encomendar, +Requested Items To Be Transferred,Items Solicitados Mas Não Transferidos, +Qty to Transfer,Qtde Para Transferir, +Salary Register,Registro de Salário, +Sales Analytics,Analítico de Vendas, +Sales Invoice Trends,Tendência de Faturamento de Vendas, +Sales Order Trends,Tendência de Pedidos de Venda, +Sales Partner Commission Summary,Resumo da Comissão do Parceiro de Vendas, +Sales Partner Target Variance based on Item Group,Desvio-alvo do parceiro de vendas com base no grupo de itens, +Sales Partner Transaction Summary,Resumo de Transação do Parceiro de Vendas, +Sales Partners Commission,Comissão Dos Parceiros de Vendas, +Invoiced Amount (Exclusive Tax),Valor Faturado (imposto Exclusivo), +Average Commission Rate,Percentual de Comissão Médio, +Sales Payment Summary,Resumo de Recebimento de Vendas, +Sales Person Commission Summary,Resumo da Comissão de Vendas, +Sales Person Target Variance Based On Item Group,Desvio de Meta de Pessoa de Vendas Com Base no Grupo de Itens, +Sales Person-wise Transaction Summary,Resumo de Vendas Por Vendedor, +Sales Register,Registro de Vendas, +Serial No Service Contract Expiry,Vencimento do Contrato de Serviço Com Nº de Série, +Serial No Status,Status do Nº de Série, +Serial No Warranty Expiry,Vencimento da Garantia Com Nº de Série, +Stock Ageing,Envelhecimento do Estoque, +Stock and Account Value Comparison,Comparação de Estoque e Valor da Conta, +Stock Projected Qty,Projeção de Estoque, +Student and Guardian Contact Details,Student And Guardian Detalhes de Contato, +Student Batch-Wise Attendance,Controle de Frequência Por Série de Alunos, +Student Fee Collection,Cobrança de Taxa do Aluno, +Student Monthly Attendance Sheet,Folha de Presença Mensal do Aluno, +Subcontracted Item To Be Received,Item Subcontratado a Ser Recebido, +Subcontracted Raw Materials To Be Transferred,Matérias-primas Subcontratadas a Serem Transferidas, +Supplier Ledger Summary,Resumo do Ledger de Fornecedores, +Supplier-Wise Sales Analytics,Análise de Vendas Por Fornecedor, +Support Hour Distribution,Distribuição de Horas de Suporte, +TDS Computation Summary,Resumo de Computação Tds, +TDS Payable Monthly,Tds a Pagar Mensalmente, +Territory Target Variance Based On Item Group,Desvio Alvo do Território Baseado no Grupo de Itens, +Territory-wise Sales,Vendas Por Território, +Total Stock Summary,Resumo de Estoque Total, +Trial Balance,Balancete, +Trial Balance (Simple),Balancete (simples), +Trial Balance for Party,Balancete Por Parceiro, +Unpaid Expense Claim,Reembolso de Despesas a Pagar, +Warehouse wise Item Balance Age and Value,Warehouse wise Item Equilíbrio Idade e Valor, +Work Order Stock Report,Relatório de Estoque de Ordem de Trabalho, +Work Orders in Progress,Ordens de Serviço Em Andamento, +Validation Error,Erro de Validação, +Automatically Process Deferred Accounting Entry,Processo Automático de Entrada Contábil Diferida, +Bank Clearance,Liquidação Bancária, +Bank Clearance Detail,Detalhe de Liquidação de Banco, +Update Cost Center Name / Number,Atualizar Nome / Número do Centro de Custo, +Journal Entry Template,Modelo de Entrada no Livro Diário, +Template Title,Título do Modelo, +Journal Entry Type,Tipo de Lançamento de Diário, +Journal Entry Template Account,Conta de Modelo de Lançamento Contábil, +Process Deferred Accounting,Processo de Contabilidade Diferida, +Manual entry cannot be created! Disable automatic entry for deferred accounting in accounts settings and try again,A entrada manual não pode ser criada! Desative a entrada automática para contabilidade diferida nas configurações de contas e tente novamente, +End date cannot be before start date,A data de término não pode ser anterior à data de início, +Total Counts Targeted,Total de Contagens Almejadas, +Total Counts Completed,Total de Contagens Concluídas, +Counts Targeted: {0},Contagens Direcionadas: {0}, +Payment Account is mandatory,A conta de pagamento é obrigatória, +"If checked, the full amount will be deducted from taxable income before calculating income tax without any declaration or proof submission.","Se marcada, o valor total será deduzido do lucro tributável antes do cálculo do imposto de renda, sem qualquer declaração ou apresentação de comprovante.", +Disbursement Details,Detalhes de Desembolso, +Material Request Warehouse,Armazém de Solicitação de Material, +Select warehouse for material requests,Selecione o armazém para pedidos de material, +Transfer Materials For Warehouse {0},Transferir Materiais Para Armazém {0}, +Production Plan Material Request Warehouse,Armazém de Solicitação de Material do Plano de Produção, +Sets 'Source Warehouse' in each row of the items table.,Define ';Source Warehouse'; em cada linha da tabela de itens., +Sets 'Target Warehouse' in each row of the items table.,Define ';Armazém de destino'; em cada linha da tabela de itens., +Show Cancelled Entries,Mostrar Entradas Canceladas, +Backdated Stock Entry,Entrada de Estoque Retroativa, +Row #{}: Currency of {} - {} doesn't matches company currency.,Linha # {}: Moeda de {} - {} não corresponde à moeda da empresa., +{} Assets created for {},{} Ativos criados para {}, +{0} Number {1} is already used in {2} {3},{0} Número {1} já é usado em {2} {3}, +Update Bank Clearance Dates,Atualizar Datas de Liquidação de Banco, +Healthcare Practitioner: ,Profissional de Saúde:, +Lab Test Conducted: ,Teste de Laboratório Realizado:, +Lab Test Event: ,Evento de Teste de Laboratório:, +Lab Test Result: ,Resultado do Teste de Laboratório:, +Clinical Procedure conducted: ,Procedimento clínico conduzido:, +Therapy Session Charges: {0},Custos da Sessão de Terapia: {0}, +Therapy: ,Terapia:, +Therapy Plan: ,Plano de Terapia:, +Total Counts Targeted: ,Total de Contagens Almejadas:, +Total Counts Completed: ,Total de Contagens Concluídas:, +Andaman and Nicobar Islands,Ilhas Andaman e Nicobar, +Andhra Pradesh,Andhra Pradesh, +Arunachal Pradesh,Arunachal Pradesh, +Assam,Assam, +Bihar,Bihar, +Chandigarh,Chandigarh, +Chhattisgarh,Chhattisgarh, +Dadra and Nagar Haveli,Dadra e Nagar Haveli, +Daman and Diu,Damão e Diu, +Delhi,Délhi, +Goa,Goa, +Gujarat,Gujarat, +Haryana,Haryana, +Himachal Pradesh,Himachal Pradesh, +Jammu and Kashmir,Jammu e Caxemira, +Jharkhand,Jharkhand, +Karnataka,Karnataka, +Kerala,Kerala, +Lakshadweep Islands,Ilhas Lakshadweep, +Madhya Pradesh,Madhya Pradesh, +Maharashtra,Maharashtra, +Manipur,Manipur, +Meghalaya,Meghalaya, +Mizoram,Mizoram, +Nagaland,Nagaland, +Odisha,Odisha, +Other Territory,Outro Território, +Pondicherry,Pondicherry, +Punjab,Punjab, +Rajasthan,Rajasthan, +Sikkim,Sikkim, +Tamil Nadu,Tamil Nadu, +Telangana,Telangana, +Tripura,Tripura, +Uttar Pradesh,Uttar Pradesh, +Uttarakhand,Uttarakhand, +West Bengal,Bengala Ocidental, +Is Mandatory,É mandatório, +Published on,Publicado Em, +Service Received But Not Billed,Serviço Recebido Mas Não Cobrado, +Deferred Accounting Settings,Configurações de Contabilidade Diferida, +Book Deferred Entries Based On,Entradas Diferidas do Livro Com Base Em, +Days,Dias, +Months,Meses, +Book Deferred Entries Via Journal Entry,Livro de Lançamentos Diferidos Via Lançamento de Diário, +Submit Journal Entries,Enviar Entradas de Diário, +If this is unchecked Journal Entries will be saved in a Draft state and will have to be submitted manually,Se esta opção estiver desmarcada as entradas de diário serão salvas em um estado de rascunho e terão que ser enviadas manualmente, +Enable Distributed Cost Center,Habilitar Centro de Custo Distribuído, +Distributed Cost Center,Centro de Custo Distribuído, +Dunning,Dunning, +DUNN-.MM.-.YY.-,DUNN-.MM.-. YY.-, +Overdue Days,Dias Vencidos, +Dunning Type,Tipo de Cobrança, +Dunning Fee,Taxa de Cobranca, +Dunning Amount,Quantia de Cobrança, +Resolved,Resolvido, +Unresolved,Não Resolvido, +Printing Setting,Configuração de Impressão, +Body Text,Texto de Corpo, +Closing Text,Texto de Fechamento, +Resolve,Resolver, +Dunning Letter Text,Texto Para Carta de Cobrança, +Is Default Language,É o idioma padrão, +Letter or Email Body Text,Carta Ou Texto do Corpo do Email, +Letter or Email Closing Text,Texto de Fechamento de Carta Ou E-mail, +Body and Closing Text Help,Ajuda do Corpo e do Texto de Fechamento, +Overdue Interval,Intervalo Vencido, +Dunning Letter,Carta de Cobrança, +"This section allows the user to set the Body and Closing text of the Dunning Letter for the Dunning Type based on language, which can be used in Print.","Esta seção permite que o usuário defina o Corpo e o texto de fechamento da Carta de Cobrança para o Tipo de Cobrança com base no idioma, que pode ser usado na Impressão.", +Reference Detail No,Detalhe de Referência Nº, +Custom Remarks,Observações Personalizadas, +Please select a Company first.,Selecione uma empresa primeiro., +"Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning","Linha # {0}: o tipo de documento de referência deve ser pedido de venda, fatura de venda, lançamento contábil manual ou cobrança", +POS Closing Entry,Entrada de fechamento de PDV, +POS Opening Entry,Entrada de abertura de PDV, +POS Transactions,Transações PDV, +POS Closing Entry Detail,Detalhe de entrada de fechamento de PDV, +Opening Amount,Quantidade de Abertura, +Closing Amount,Valor de Fechamento, +POS Closing Entry Taxes,Impostos de Entrada de Fechamento de PDV, +POS Invoice,Fatura PDV, +ACC-PSINV-.YYYY.-,ACC-PSINV-.YYYY.-, +Consolidated Sales Invoice,Fatura de Vendas Consolidada, +Return Against POS Invoice,Retorno Contra Fatura de PDV, +Consolidated,Consolidado, +POS Invoice Item,Item de Fatura de PDV, +POS Invoice Merge Log,Registro de Fusão de Faturas de PDV, +POS Invoices,Faturas PDV, +Consolidated Credit Note,Nota de Crédito Consolidada, +POS Invoice Reference,Referência de Fatura de PDV, +Set Posting Date,Definir Data de Postagem, +Opening Balance Details,Detalhes do Saldo Inicial, +POS Opening Entry Detail,Detalhe de Entrada de Abertura de PDV, +POS Payment Method,Método de Pagamento PDV, +Payment Methods,Métodos de Pagamento, +Process Statement Of Accounts,Extrato de Contas do Processo, +General Ledger Filters,Filtros de Contabilidade Geral, +Customers,Clientes, +Select Customers By,Selecionar Clientes Por, +Fetch Customers,Buscar Clientes, +Send To Primary Contact,Enviar Para Contato Principal, +Print Preferences,Preferências de Impressão, +Include Ageing Summary,Incluir Resumo de Envelhecimento, +Enable Auto Email,Habilitar Auto Email, +Filter Duration (Months),Duração do Filtro (meses), +CC To,Cc Para, +Help Text,Texto de Ajuda, +Emails Queued,Emails na Fila, +Process Statement Of Accounts Customer,Declaração de Processo de Contas do Cliente, +Billing Email,E-mail de Cobrança, +Primary Contact Email,Email do Contato Principal, +PSOA Cost Center,Centro de Custo Psoa, +PSOA Project,Projeto Psoa, +ACC-PINV-RET-.YYYY.-,ACC-PINV-RET-.YYYY.-, +Supplier GSTIN,Fornecedor Gstin, +Place of Supply,Local de Abastecimento, +Select Billing Address,Selecione o Endereço de Faturamento, +GST Details,Detalhes GST, +GST Category,Categoria GST, +Registered Regular,Regular Registrado, +Registered Composition,Composição Registrada, +Unregistered,Não Registrado, +SEZ,SEZ, +Overseas,No Exterior, +UIN Holders,Detentores de Uin, +With Payment of Tax,Com Pagamento de Imposto, +Without Payment of Tax,Sem Pagamento de Imposto, +Invoice Copy,Cópia de Fatura, +Original for Recipient,Original Para Destinatário, +Duplicate for Transporter,Duplicado Para Transportador, +Duplicate for Supplier,Duplicado Para Fornecedor, +Triplicate for Supplier,Triplicado Para Fornecedor, +Reverse Charge,Carga Reversa, +Y,Y, +N,N, +E-commerce GSTIN,E-commerce GSTIN, +Reason For Issuing document,Motivo de emissão do documento, +01-Sales Return,01-Devolução de vendas, +02-Post Sale Discount,02-Desconto pós venda, +03-Deficiency in services,03-Deficiência nos serviços, +04-Correction in Invoice,04-Correção na Nota Fiscal, +05-Change in POS,05-Mudança no POS, +06-Finalization of Provisional assessment,06-Finalização da Avaliação Provisória, +07-Others,07-Outros, +Eligibility For ITC,Elegibilidade para ITC, +Input Service Distributor,Distribuidor de Serviço de Entrada, +Import Of Service,Importação de Serviço, +Import Of Capital Goods,Importação de Bens de Capital, +Ineligible,Inelegível, +All Other ITC,Todos os outros ITC, +Availed ITC Integrated Tax,Imposto integrado ITC disponível, +Availed ITC Central Tax,Imposto Central ITC disponível, +Availed ITC State/UT Tax,Imposto ITC / UT disponível, +Availed ITC Cess,Taxa ITC Disponível, +Is Nil Rated or Exempted,É Nil Classificado ou Isento, +Is Non GST,Não é GST, +ACC-SINV-RET-.YYYY.-,ACC-SINV-RET-.YYYY.-, +E-Way Bill No.,E-way Bill No., +Is Consolidated,Está Consolidado, +Billing Address GSTIN,Endereço de Cobrança Gstin, +Customer GSTIN,Cliente GSTIN, +GST Transporter ID,ID do transportador GST, +Distance (in km),Distância (em Km), +Road,Estrada, +Air,Ar, +Rail,Rail, +Ship,Navio, +GST Vehicle Type,Tipo de veículo GST, +Over Dimensional Cargo (ODC),Carga Over Dimensional (ODC), +Consumer,Consumidor, +Deemed Export,Exportação Considerada, +Port Code,Código Portuário, + Shipping Bill Number, Número da Fatura de Remessa, +Shipping Bill Date,Data da Fatura de Remessa, +Subscription End Date,Data Final da Assinatura, +Follow Calendar Months,Siga os Meses do Calendário, +If this is checked subsequent new invoices will be created on calendar month and quarter start dates irrespective of current invoice start date,Se esta opção estiver marcada novas faturas subsequentes serão criadas nas datas de início do mês e do trimestre independentemente da data de início da fatura atual, +Generate New Invoices Past Due Date,Gerar Novas Faturas Vencidas, +New invoices will be generated as per schedule even if current invoices are unpaid or past due date,Novas faturas serão geradas de acordo com o cronograma mesmo se as faturas atuais não forem pagas ou vencidas, +Document Type ,Tipo de Documento, +Subscription Price Based On,Preço da Assinatura Com Base Em, +Fixed Rate,Taxa Fixa, +Based On Price List,Com Base na Lista de Preços, +Monthly Rate,Taxa Mensal, +Cancel Subscription After Grace Period,Cancelar Assinatura Após o Período de Carência, +Source State,Estado Fonte, +Is Inter State,É entre estados, +Purchase Details,Detalhes da Compra, +Depreciation Posting Date,Data de Lançamento de Depreciação, +"By default, the Supplier Name is set as per the Supplier Name entered. If you want Suppliers to be named by a ","Por padrão, o nome do fornecedor é definido de acordo com o nome do fornecedor inserido. Se você deseja que os fornecedores sejam nomeados por um", + choose the 'Naming Series' option., escolha a opção ';Naming Series';., +Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List.,Configure a Lista de Preços padrão ao criar uma nova transação de Compra. os preços dos itens serão obtidos desta lista de preços., +"If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice or Receipt without creating a Purchase Order first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Order' checkbox in the Supplier master.","Se esta opção estiver configurada como ';Sim';, o ERPNext impedirá que você crie uma fatura ou recibo de compra sem criar um pedido de compra primeiro. Esta configuração pode ser substituída por um fornecedor específico ativando a caixa de seleção ';Permitir criação de fatura de compra sem pedido de compra'; no mestre de fornecedores.", +"If this option is configured 'Yes', ERPNext will prevent you from creating a Purchase Invoice without creating a Purchase Receipt first. This configuration can be overridden for a particular supplier by enabling the 'Allow Purchase Invoice Creation Without Purchase Receipt' checkbox in the Supplier master.","Se esta opção estiver configurada como ';Sim';, o ERPNext impedirá que você crie uma fatura de compra sem criar um recibo de compra primeiro. Esta configuração pode ser substituída por um fornecedor específico ativando a caixa de seleção ';Permitir criação de fatura de compra sem recibo de compra'; no mestre de fornecedores.", +Quantity & Stock,Quantidade e Estoque, +Call Details,Detalhes da Chamada, +Authorised By,Autorizado Por, +Signee (Company),Signatário (empresa), +Signed By (Company),Assinado Por (empresa), +First Response Time,Tempo de Primeira Resposta, +Request For Quotation,Solicitação de Orçamento, +Opportunity Lost Reason Detail,Detalhe do Motivo da Oportunidade Perdida, +Access Token Secret,Segredo do Token de Acesso, +Add to Topics,Adicionar Aos Tópicos, +...Adding Article to Topics,... Adicionando Artigo aos Tópicos, +Add Article to Topics,Adicionar Artigo Aos Tópicos, +This article is already added to the existing topics,Este artigo já foi adicionado aos tópicos existentes, +Add to Programs,Adicionar a Programas, +Programs,Programas, +...Adding Course to Programs,... Adicionando Curso aos Programas, +Add Course to Programs,Adicionar Curso a Programas, +This course is already added to the existing programs,Este curso já está adicionado aos programas existentes, +Learning Management System Settings,Configurações do Sistema de Gerenciamento de Aprendizagem, +Enable Learning Management System,Habilitar Sistema de Gestão de Aprendizagem, +Learning Management System Title,Título do Sistema de Gestão de Aprendizagem, +...Adding Quiz to Topics,... Adicionando questionário aos tópicos, +Add Quiz to Topics,Adicionar Questionário a Tópicos, +This quiz is already added to the existing topics,Este questionário já foi adicionado aos tópicos existentes, +Enable Admission Application,Habilitar Solicitação de Admissão, +EDU-ATT-.YYYY.-,EDU-ATT-.YYYY.-, +Marking attendance,Marcando presença, +Add Guardians to Email Group,Adicionar Tutores Ao Grupo de E-mail, +Attendance Based On,Presença Com Base Em, +Check this to mark the student as present in case the student is not attending the institute to participate or represent the institute in any event.\n\n,Marque esta opção para marcar o aluno como presente caso o aluno não esteja frequentando o instituto para participar ou representar o instituto em qualquer evento., +Add to Courses,Adicionar Aos Cursos, +...Adding Topic to Courses,... Adicionando Tópico aos Cursos, +Add Topic to Courses,Adicionar Tópico Aos Cursos, +This topic is already added to the existing courses,Este tópico já foi adicionado aos cursos existentes, +"If Shopify does not have a customer in the order, then while syncing the orders, the system will consider the default customer for the order","Se o Shopify não tiver um cliente no pedido, enquanto sincroniza os pedidos, o sistema irá considerar o cliente padrão para o pedido", +The accounts are set by the system automatically but do confirm these defaults,As contas são definidas pelo sistema automaticamente mas confirmam esses padrões, +Default Round Off Account,Conta de Arredondamento Padrão, +Failed Import Log,Log de Importação Com Falha, +Fixed Error Log,Log de Erro Corrigido, +Company {0} already exists. Continuing will overwrite the Company and Chart of Accounts,A empresa {0} já existe. Continuar substituirá a Empresa e o Plano de Contas, +Meta Data,Meta Dados, +Unresolve,Não Resolver, +Create Document,Criar Documento, +Mark as unresolved,Marcar como não resolvido, +TaxJar Settings,Configurações de Taxjar, +Sandbox Mode,Modo Sandbox, +Enable Tax Calculation,Habilitar Cálculo de Impostos, +Create TaxJar Transaction,Criar Transação TaxJar, +Credentials,Credenciais, +Live API Key,Chave de API Ativa, +Sandbox API Key,Sandbox API Key, +Configuration,Configuração, +Tax Account Head,Chefe da Contabilidade Fiscal, +Shipping Account Head,Chefe da Contabilidade de Despacho, +Practitioner Name,Nome do Praticante, +Enter a name for the Clinical Procedure Template,Insira um nome para o modelo de procedimento clínico, +Set the Item Code which will be used for billing the Clinical Procedure.,Defina o código do item que será usado para cobrar o procedimento clínico., +Select an Item Group for the Clinical Procedure Item.,Selecione Um Grupo de Itens Para o Item de Procedimento Clínico., +Clinical Procedure Rate,Taxa de Procedimento Clínico, +Check this if the Clinical Procedure is billable and also set the rate.,Verifique se o Procedimento Clínico é faturável e defina também a taxa., +Check this if the Clinical Procedure utilises consumables. Click ,Verifique se o procedimento clínico utiliza consumíveis. Clique, + to know more, para saber mais, +"You can also set the Medical Department for the template. After saving the document, an Item will automatically be created for billing this Clinical Procedure. You can then use this template while creating Clinical Procedures for Patients. Templates save you from filling up redundant data every single time. You can also create templates for other operations like Lab Tests, Therapy Sessions, etc.","Você também pode definir o Departamento Médico para o modelo. Após salvar o documento, um Item será criado automaticamente para cobrança deste Procedimento Clínico. Você pode então usar este modelo ao criar procedimentos clínicos para pacientes. os modelos evitam que você preencha dados redundantes todas as vezes. Você também pode criar modelos para outras operações, como testes de laboratório, sessões de terapia, etc.", +Descriptive Test Result,Resultado de Teste Descritivo, +Allow Blank,Permitir Em Branco, +Descriptive Test Template,Modelo de Teste Descritivo, +"If you want to track Payroll and other HRMS operations for a Practitoner, create an Employee and link it here.","Se você deseja rastrear a folha de pagamento e outras operações de HRMS para um Practitoner, crie um Employee e vincule-o aqui.", +Set the Practitioner Schedule you just created. This will be used while booking appointments.,Defina a programação do profissional que acabou de criar. Isso será usado durante a reserva de compromissos., +Create a service item for Out Patient Consulting.,Crie um item de serviço para Consultoria Externa., +"If this Healthcare Practitioner works for the In-Patient Department, create a service item for Inpatient Visits.","Se este profissional de saúde trabalhar para o departamento de pacientes internados, crie um item de serviço para visitas de pacientes internados.", +Set the Out Patient Consulting Charge for this Practitioner.,Defina a Taxa de Consultoria Externa para este Médico., +"If this Healthcare Practitioner also works for the In-Patient Department, set the inpatient visit charge for this Practitioner.","Se este profissional de saúde também trabalhar para o departamento de pacientes internados, defina o custo da visita de internação para este médico.", +"If checked, a customer will be created for every Patient. Patient Invoices will be created against this Customer. You can also select existing Customer while creating a Patient. This field is checked by default.","Se marcado, um cliente será criado para cada paciente. as faturas do paciente serão criadas para este cliente. Você também pode selecionar um cliente existente ao criar um paciente. Este campo é marcado por padrão.", +Collect Registration Fee,Cobrar Taxa de Registro, +"If your Healthcare facility bills registrations of Patients, you can check this and set the Registration Fee in the field below. Checking this will create new Patients with a Disabled status by default and will only be enabled after invoicing the Registration Fee.","Se a sua unidade de saúde cobra os registros dos pacientes, você pode verificar isso e definir a taxa de registro no campo abaixo. Marcar isto criará novos Pacientes com o status Desabilitado por padrão e só será habilitado após o faturamento da Taxa de Registro.", +Checking this will automatically create a Sales Invoice whenever an appointment is booked for a Patient.,Marcar isto irá criar automaticamente uma fatura de vendas sempre que um compromisso for agendado para um paciente., +Healthcare Service Items,Itens de Serviços de Saúde, +"You can create a service item for Inpatient Visit Charge and set it here. Similarly, you can set up other Healthcare Service Items for billing in this section. Click ","Você pode criar um item de serviço para Taxa de visita de paciente internado e configurá-lo aqui. da mesma forma, você pode configurar outros itens de serviço de saúde para cobrança nesta seção. Clique", +Set up default Accounts for the Healthcare Facility,Configurar contas padrão para o estabelecimento de saúde, +"If you wish to override default accounts settings and configure the Income and Receivable accounts for Healthcare, you can do so here.","Se desejar substituir as configurações de contas padrão e configurar as contas de receita e a receber para saúde, você pode fazer isso aqui.", +Out Patient SMS alerts,Alertas de SMS de paciente externo, +"If you want to send SMS alert on Patient Registration, you can enable this option. Similary, you can set up Out Patient SMS alerts for other functionalities in this section. Click ","Se você deseja enviar um alerta por SMS no Registro do Paciente, pode ativar esta opção. da mesma forma, você pode configurar alertas SMS de paciente externo para outras funcionalidades nesta seção. Clique", +Admission Order Details,Detalhes do Pedido de Admissão, +Admission Ordered For,Admissão Solicitada Para, +Expected Length of Stay,Tempo Esperado de Estadia, +Admission Service Unit Type,Tipo de Unidade de Serviço de Admissão, +Healthcare Practitioner (Primary),Médico de Saúde (primário), +Healthcare Practitioner (Secondary),Profissional de Saúde (secundário), +Admission Instruction,Instrução de Admissão, +Chief Complaint,Queixa Principal, +Medications,Remédios, +Investigations,Investigações, +Discharge Detials,Detials de Descarga, +Discharge Ordered Date,Data do Pedido de Alta, +Discharge Instructions,Instruções de Alta, +Follow Up Date,Data de Acompanhamento, +Discharge Notes,Notas de Descarga, +Processing Inpatient Discharge,Processando Alta Hospitalar, +Processing Patient Admission,Processando Admissão de Paciente, +Check-in time cannot be greater than the current time,O horário de check-in não pode ser maior que o horário atual, +Process Transfer,Transferência de Processo, +HLC-LAB-.YYYY.-,HLC-LAB-.YYYY.-, +Expected Result Date,Data de Resultado Esperada, +Expected Result Time,Tempo de Resultado Esperado, +Printed on,Impresso Em, +Requesting Practitioner,Médico Solicitante, +Requesting Department,Departamento Solicitante, +Employee (Lab Technician),Funcionário (técnico de Laboratório), +Lab Technician Name,Nome do Técnico de Laboratório, +Lab Technician Designation,Designação de Técnico de Laboratório, +Compound Test Result,Resultado do Teste Composto, +Organism Test Result,Resultado do Teste de Organismo, +Sensitivity Test Result,Resultado do Teste de Sensibilidade, +Worksheet Print,Impressão de Planilha, +Worksheet Instructions,Instruções da Planilha, +Result Legend Print,Impressão da Legenda do Resultado, +Print Position,Posição de Impressão, +Bottom,Inferior, +Top,Topo, +Both,Ambos, +Result Legend,Legenda do Resultado, +Lab Tests,Testes de Laboratório, +No Lab Tests found for the Patient {0},Nenhum teste de laboratório encontrado para o paciente {0}, +"Did not send SMS, missing patient mobile number or message content.","Não enviou SMS, falta o número do celular do paciente ou conteúdo da mensagem.", +No Lab Tests created,Nenhum teste de laboratório criado, +Creating Lab Tests...,Criando Testes de Laboratório..., +Lab Test Group Template,Modelo de Grupo de Teste de Laboratório, +Add New Line,Adicionar Nova Linha, +Secondary UOM,UOM secundário, +"Single: Results which require only a single input.\n
    \nCompound: Results which require multiple event inputs.\n
    \nDescriptive: Tests which have multiple result components with manual result entry.\n
    \nGrouped: Test templates which are a group of other test templates.\n
    \nNo Result: Tests with no results, can be ordered and billed but no Lab Test will be created. e.g.. Sub Tests for Grouped results","Único : Resultados que requerem apenas uma única entrada.
    Composto : Resultados que requerem várias entradas de eventos.
    Descritivo : testes que possuem vários componentes de resultado com entrada manual de resultados.
    Agrupados : modelos de teste que são um grupo de outros modelos de teste.
    Sem resultado : testes sem resultados podem ser solicitados e cobrados, mas nenhum teste de laboratório será criado. por exemplo. Subtestes para resultados agrupados", +"If unchecked, the item will not be available in Sales Invoices for billing but can be used in group test creation. ","Se desmarcado, o item não estará disponível em Faturas de Vendas para faturamento, mas pode ser usado na criação de teste de grupo.", +Description ,Descrição, +Descriptive Test,Teste Descritivo, +Group Tests,Testes de Grupo, +Instructions to be printed on the worksheet,Instruções a serem impressas na planilha, +"Information to help easily interpret the test report, will be printed as part of the Lab Test result.",As informações para ajudar a interpretar facilmente o relatório do teste serão impressas como parte do resultado do teste de laboratório., +Normal Test Result,Resultado de Teste Normal, +Secondary UOM Result,Resultado UOM Secundário, +Italic,Itálico, +Underline,Sublinhado, +Organism,Organismo, +Organism Test Item,Item de Teste de Organismo, +Colony Population,População da Colônia, +Colony UOM,Colônia UOM, +Tobacco Consumption (Past),Consumo de Tabaco (passado), +Tobacco Consumption (Present),Consumo de Tabaco (presente), +Alcohol Consumption (Past),Consumo de Álcool (passado), +Alcohol Consumption (Present),Consumo de Álcool (presente), +Billing Item,Item de Cobrança, +Medical Codes,Códigos Médicos, +Clinical Procedures,Procedimentos Clínicos, +Order Admission,Admissão de Pedido, +Scheduling Patient Admission,Agendamento de Admissão de Paciente, +Order Discharge,Descarga de Pedido, +Sample Details,Detalhes da Amostra, +Collected On,Recolhido Em, +No. of prints,Nº de impressões, +Number of prints required for labelling the samples,Número de impressões necessárias para rotular as amostras, +HLC-VTS-.YYYY.-,HLC-VTS-.YYYY.-, +In Time,Em Tempo, +Out Time,Out Time, +Payroll Cost Center,Centro de Custo de Folha de Pagamento, +Approvers,Aprovadores, +The first Approver in the list will be set as the default Approver.,O primeiro aprovador da lista será definido como o aprovador padrão., +Shift Request Approver,Aprovador de Solicitação de Turno, +PAN Number,Número PAN, +Provident Fund Account,Conta do Fundo de Previdência, +MICR Code,Código MICR, +Repay unclaimed amount from salary,Reembolsar quantia não reclamada do salário, +Deduction from salary,Dedução do salário, +Expired Leaves,Folhas Vencidas, +Reference No,Nº de Referência, +Haircut percentage is the percentage difference between market value of the Loan Security and the value ascribed to that Loan Security when used as collateral for that loan.,A porcentagem de haircut é a diferença percentual entre o valor de mercado da Garantia de Empréstimo e o valor atribuído a essa Garantia de Empréstimo quando usado como colateral para aquele empréstimo., +Loan To Value Ratio expresses the ratio of the loan amount to the value of the security pledged. A loan security shortfall will be triggered if this falls below the specified value for any loan ,A relação entre o valor do empréstimo e a garantia do empréstimo expressa a relação entre o valor do empréstimo e o valor da garantia oferecida. Um déficit de garantia de empréstimo será acionado se cair abaixo do valor especificado para qualquer empréstimo, +If this is not checked the loan by default will be considered as a Demand Loan,Se esta opção não for marcada o empréstimo por padrão será considerado um empréstimo à vista, +This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Esta conta é usada para registrar reembolsos de empréstimos do mutuário e também desembolsar empréstimos para o mutuário, +This account is capital account which is used to allocate capital for loan disbursal account ,Esta conta é a conta de capital que é usada para alocar capital para a conta de desembolso do empréstimo, +This account will be used for booking loan interest accruals,Esta conta será usada para reservar acréscimos de juros de empréstimos, +This account will be used for booking penalties levied due to delayed repayments,Esta conta será usada para multas de reserva cobradas devido a atrasos nos pagamentos, +Variant BOM,Bom Variante, +Template Item,Item de Modelo, +Select template item,Selecione o item do modelo, +Select variant item code for the template item {0},Selecione o código do item variante para o item modelo {0}, +Downtime Entry,Entrada de Tempo de Inatividade, +DT-,DT-, +Workstation / Machine,Estação de Trabalho / Máquina, +Operator,Operador, +In Mins,Em Mins, +Downtime Reason,Motivo de Inatividade, +Stop Reason,Razão de Parada, +Excessive machine set up time,Tempo excessivo de configuração da máquina, +Unplanned machine maintenance,Manutenção não planejada da máquina, +On-machine press checks,Verificações de impressão na máquina, +Machine operator errors,Erros do operador da máquina, +Machine malfunction,Mau funcionamento da máquina, +Electricity down,Corte de eletricidade, +Operation Row Number,Número da Linha de Operação, +Operation {0} added multiple times in the work order {1},Operação {0} adicionada várias vezes na ordem de serviço {1}, +"If ticked, multiple materials can be used for a single Work Order. This is useful if one or more time consuming products are being manufactured.","Se marcado, vários materiais podem ser usados para uma única Ordem de Serviço. Isso é útil se um ou mais produtos demorados estiverem sendo fabricados.", +Backflush Raw Materials,Matérias-primas de Backflush, +"The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing.

    When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field.","A entrada de estoque do tipo ';Fabricação'; é conhecida como backflush. a matéria-prima consumida na fabricação de produtos acabados é conhecida como backflushing.

    Ao criar a entrada de produção, os itens de matéria-prima são backflushing com base na lista técnica do item de produção. Se você deseja que os itens de matéria-prima sejam submetidos a backflush com base na entrada de transferência de material feita para aquela ordem de serviço, então você pode defini-la neste campo.", +Work In Progress Warehouse,Armazém de Trabalho Em Andamento, +This Warehouse will be auto-updated in the Work In Progress Warehouse field of Work Orders.,Este armazém será atualizado automaticamente no campo Armazém de trabalho em andamento das ordens de serviço., +Finished Goods Warehouse,Armazém de Produtos Acabados, +This Warehouse will be auto-updated in the Target Warehouse field of Work Order.,Este armazém será atualizado automaticamente no campo Armazém de destino da Ordem de Serviço., +"If ticked, the BOM cost will be automatically updated based on Valuation Rate / Price List Rate / last purchase rate of raw materials.","Se marcado, o custo de BOM será atualizado automaticamente com base na Taxa de avaliação / Taxa de lista de preços / última taxa de compra de matérias-primas.", +Source Warehouses (Optional),Armazéns de Origem (opcional), +"System will pickup the materials from the selected warehouses. If not specified, system will create material request for purchase.","O sistema coletará os materiais dos depósitos selecionados. Se não for especificado, o sistema criará uma solicitação de material para compra.", +Lead Time,Tempo de Espera, +PAN Details,Detalhes do PAN, +Create Customer,Criar Cliente, +Invoicing,Faturamento, +Enable Auto Invoicing,Ativar Faturamento Automático, +Send Membership Acknowledgement,Enviar Reconhecimento de Sócio, +Send Invoice with Email,Enviar fatura com e-mail, +Membership Print Format,Formato de Impressão de Membros, +Invoice Print Format,Formato de Impressão da Fatura, +Revoke ,Revogar<key></key>, +You can learn more about memberships in the manual. ,Você pode aprender mais sobre associações no manual., +ERPNext Docs,Erpnext Docs, +Regenerate Webhook Secret,Gerar Segredo do Webhook Novamente, +Generate Webhook Secret,Gerar Segredo do Webhook, +Copy Webhook URL,Copiar URL do Webhook, +Linked Item,Item Vinculado, +Is Recurring,É recorrente, +HRA Exemption,Isenção HRA, +Monthly House Rent,Aluguel Mensal de Casa, +Rented in Metro City,Alugado Em Metro City, +HRA as per Salary Structure,Hra de Acordo Com a Estrutura Salarial, +Annual HRA Exemption,Isenção Anual HRA, +Monthly HRA Exemption,Isenção HRA Mensal, +House Rent Payment Amount,Valor do Pagamento do Aluguel da Casa, +Rented From Date,Alugado a Partir da Data, +Rented To Date,Alugado Até a Data, +Monthly Eligible Amount,Quantia Elegível Mensal, +Total Eligible HRA Exemption,Isenção de HRA elegível total, +Validating Employee Attendance...,Validando a Participação do Funcionário..., +Submitting Salary Slips and creating Journal Entry...,Enviando comprovantes de salário e criando lançamentos contábeis..., +Calculate Payroll Working Days Based On,Calcular os Dias Úteis da Folha de Pagamento Com Base Em, +Consider Unmarked Attendance As,Considerar Presença Não Marcada Como, +Fraction of Daily Salary for Half Day,Fração do Salário Diário Por Meio Dia, +Component Type,Tipo de Componente, +Provident Fund,Fundo de Previdência, +Additional Provident Fund,Fundo de Previdência Adicional, +Provident Fund Loan,Empréstimo de Fundo de Previdência, +Professional Tax,Imposto Profissional, +Is Income Tax Component,É componente de imposto de renda, +Component properties and references ,Propriedades e referências do componente, +Additional Salary ,Salário Adicional, +Unmarked days,Dias não marcados, +Absent Days,Dias Ausentes, +Conditions and Formula variable and example,Condições e variável de fórmula e exemplo, +Feedback By,Feedback De, +Manufacturing Section,Seção de Manufatura, +"By default, the Customer Name is set as per the Full Name entered. If you want Customers to be named by a ","Por padrão, o Nome do cliente é definido de acordo com o Nome completo inserido. Se você deseja que os clientes sejam nomeados por um", +Configure the default Price List when creating a new Sales transaction. Item prices will be fetched from this Price List.,Configure a Lista de preços padrão ao criar uma nova transação de vendas. os preços dos itens serão obtidos desta lista de preços., +"If this option is configured 'Yes', ERPNext will prevent you from creating a Sales Invoice or Delivery Note without creating a Sales Order first. This configuration can be overridden for a particular Customer by enabling the 'Allow Sales Invoice Creation Without Sales Order' checkbox in the Customer master.","Se esta opção estiver configurada ';Sim';, o ERPNext impedirá que você crie uma fatura de venda ou nota de entrega sem criar um pedido de venda primeiro. Essa configuração pode ser substituída para um determinado cliente, ativando a caixa de seleção ';Permitir criação de fatura de vendas sem pedido de venda'; no mestre de clientes.", +"If this option is configured 'Yes', ERPNext will prevent you from creating a Sales Invoice without creating a Delivery Note first. This configuration can be overridden for a particular Customer by enabling the 'Allow Sales Invoice Creation Without Delivery Note' checkbox in the Customer master.","Se esta opção estiver configurada como ';Sim';, o ERPNext impedirá que você crie uma fatura de venda sem criar uma nota de entrega primeiro. Esta configuração pode ser substituída para um determinado cliente, habilitando a caixa de seleção ';Permitir criação de fatura de vendas sem nota de entrega'; no mestre do cliente.", +Default Warehouse for Sales Return,Armazém Padrão Para Devolução de Vendas, +Default In Transit Warehouse,Padrão no Armazém de Trânsito, +Enable Perpetual Inventory For Non Stock Items,Habilitar Estoque Permanente Para Itens Fora de Estoque, +HRA Settings,Configurações HRA, +Basic Component,Componente Básico, +HRA Component,Componente HRA, +Arrear Component,Arrear Component, +Please enter the company name to confirm,Insira o nome da empresa para confirmar, +Quotation Lost Reason Detail,Detalhe do Motivo da Perda da Cotação, +Enable Variants,Habilitar Variantes, +Save Quotations as Draft,Salvar Citações Como Rascunho, +MAT-DN-RET-.YYYY.-,MAT-DN-RET-.YYYY.-, +Please Select a Customer,Selecione Um Cliente, +Against Delivery Note Item,Contra Item de Nota de Entrega, +Is Non GST ,Não é GST, +Image Description,Descrição da Imagem, +Transfer Status,Status de Transferência, +MAT-PR-RET-.YYYY.-,MAT-PR-RET-.YYYY.-, +Track this Purchase Receipt against any Project,Rastreie este recibo de compra em qualquer projeto, +Please Select a Supplier,Selecione Um Fornecedor, +Add to Transit,Adicionar Ao Trânsito, +Set Basic Rate Manually,Definir Taxa Básica Manualmente, +"By default, the Item Name is set as per the Item Code entered. If you want Items to be named by a ","Por padrão, o nome do item é definido de acordo com o código do item inserido. Se você deseja que os itens sejam nomeados por um", +Set a Default Warehouse for Inventory Transactions. This will be fetched into the Default Warehouse in the Item master.,Definir um depósito padrão para transações de estoque. Isso será obtido no depósito padrão no mestre de itens., +"This will allow stock items to be displayed in negative values. Using this option depends on your use case. With this option unchecked, the system warns before obstructing a transaction that is causing negative stock.","Isso permitirá que os itens de estoque sejam exibidos em valores negativos. o uso desta opção depende do seu caso de uso. Com esta opção desmarcada, o sistema avisa antes de obstruir uma transação que está causando estoque negativo.", +Choose between FIFO and Moving Average Valuation Methods. Click ,Escolha entre os métodos de avaliação FIFO e média móvel. Clique, + to know more about them., para saber mais sobre eles., +Show 'Scan Barcode' field above every child table to insert Items with ease.,Mostre o campo ';Scan Barcode'; acima de cada tabela filha para inserir itens com facilidade., +"Serial numbers for stock will be set automatically based on the Items entered based on first in first out in transactions like Purchase/Sales Invoices, Delivery Notes, etc.","Os números de série para estoque serão definidos automaticamente com base nos itens inseridos com base no primeiro a entrar em primeiro a sair em transações como compras / faturas de vendas, notas de entrega, etc.", +"If blank, parent Warehouse Account or company default will be considered in transactions","Se estiver em branco, a conta pai do armazém ou o padrão da empresa serão considerados nas transações", +Service Level Agreement Details,Detalhes do Acordo de Nível de Serviço, +Service Level Agreement Status,Status do Acordo de Nível de Serviço, +On Hold Since,Em Espera Desde, +Total Hold Time,Tempo de Espera Total, +Response Details,Detalhes da Resposta, +Average Response Time,Tempo Médio de Resposta, +User Resolution Time,Tempo de Resolução do Usuário, +SLA is on hold since {0},SLA está em espera desde {0}, +Pause SLA On Status,Pausar Sla no Status, +Pause SLA On,Pausar Sla Em, +Greetings Section,Seção de Saudações, +Greeting Title,Título de Saudação, +Greeting Subtitle,Subtítulo de Saudação, +Youtube ID,ID do Youtube, +Youtube Statistics,Estatísticas do Youtube, +Views,Visualizações, +Dislikes,Não Gosta, +Video Settings,Configurações de Vídeo, +Enable YouTube Tracking,Ativar Rastreamento do Youtube, +30 mins,30 minutos, +1 hr,1 hora, +6 hrs,6 horas, +Patient Progress,Progresso do Paciente, +Targetted,Direcionado, +Score Obtained,Pontuação Obtida, +Sessions,Sessões, +Average Score,Pontuação Média, +Select Assessment Template,Selecione o Modelo de Avaliação, + out of , de, +Select Assessment Parameter,Selecione o Parâmetro de Avaliação, +Gender: ,Gênero:, +Contact: ,Contato:, +Total Therapy Sessions: ,Sessões de Terapia Total:, +Monthly Therapy Sessions: ,Sessões Mensais de Terapia:, +Patient Profile,Perfil do Paciente, +Point Of Sale,Ponto de Vendas, +Email sent successfully.,E-mail enviado com sucesso., +Search by invoice id or customer name,Pesquise por identificação da fatura ou nome do cliente, +Invoice Status,Status da Fatura, +Filter by invoice status,Filtrar por status de fatura, +Select item group,Selecione o grupo de itens, +No items found. Scan barcode again.,Nenhum item encontrado. Leia o código de barras novamente., +"Search by customer name, phone, email.","Pesquise por nome do cliente, telefone, e-mail.", +Enter discount percentage.,Insira a porcentagem de desconto., +Discount cannot be greater than 100%,O desconto não pode ser maior que 100%, +Enter customer's email,Insira o e-mail do cliente, +Enter customer's phone number,Insira o número de telefone do cliente, +Customer contact updated successfully.,Contato do cliente atualizado com sucesso., +Item will be removed since no serial / batch no selected.,O item será removido uma vez que nenhuma série / lote não foi selecionado., +Discount (%),Desconto (%), +You cannot submit the order without payment.,Você não pode enviar o pedido sem pagamento., +You cannot submit empty order.,Você não pode enviar um pedido vazio., +To Be Paid,Ser Pago, +Create POS Opening Entry,Criar Entrada de Abertura de PDV, +Please add Mode of payments and opening balance details.,Adicione o modo de pagamento e os detalhes do saldo inicial., +Toggle Recent Orders,Alternar Pedidos Recentes, +Save as Draft,Salvar Como Rascunho, +You must add atleast one item to save it as draft.,Você deve adicionar pelo menos um item para salvá-lo como rascunho., +There was an error saving the document.,Ocorreu um erro ao salvar o documento., +You must select a customer before adding an item.,Você deve selecionar um cliente antes de adicionar um item., +Please Select a Company,Por Favor Selecione Uma Empresa, +Active Leads,Leads Ativos, +Please Select a Company.,Selecione Uma Empresa., +BOM Operations Time,Tempo de operações BOM, +BOM ID,BOM ID, +BOM Item Code,Código de item BOM, +Time (In Mins),Tempo (em Minutos), +Sub-assembly BOM Count,Contagem de BOM de submontagem, +View Type,Tipo de Vista, +Total Delivered Amount,Quantidade Total Entregue, +Downtime Analysis,Análise de Tempo de Inatividade, +Machine,Máquina, +Downtime (In Hours),Tempo de Inatividade (em Horas), +Employee Analytics,Análise de Funcionários, +"""From date"" can not be greater than or equal to ""To date""","Desde a data" não pode ser maior ou igual a "Até a data", +Exponential Smoothing Forecasting,Previsão de Suavização Exponencial, +First Response Time for Issues,Tempo de Primeira Resposta em Incidentes, +First Response Time for Opportunity,Tempo de Primeira Resposta em Oportunidades, +Depreciatied Amount,Valor Depreciado, +Period Based On,Período Baseado Em, +Date Based On,Data Com Base Em, +{0} and {1} are mandatory,{0} e {1} são obrigatórios, +Consider Accounting Dimensions,Considere as Dimensões Contábeis, +Income Tax Deductions,Deduções de Imposto de Renda, +Income Tax Component,Componente de Imposto de Renda, +Income Tax Amount,Valor do Imposto de Renda, +Reserved Quantity for Production,Quantidade Reservada Para Produção, +Projected Quantity,Quantidade Projetada, + Total Sales Amount, Valor Total de Vendas, +Job Card Summary,Resumo do Cartão de Trabalho, +Id,ID, +Time Required (In Mins),Tempo Necessário (em Minutos), +From Posting Date,Da Data de Postagem, +To Posting Date,Para Data de Postagem, +No records found,Nenhum registro foi encontrado, +Customer/Lead Name,Nome do Cliente/Lead, +Unmarked Days,Dias Não Marcados, +Jan,Jan, +Feb,Fev, +Mar,Mar, +Apr,Abr, +Aug,Ago, +Sep,Set, +Oct,Out, +Nov,Nov, +Dec,Dez, +Summarized View,Visão Resumida, +Production Planning Report,Relatório de Planejamento de Produção, +Order Qty,Quantidade do Pedido, +Raw Material Code,Código de Matéria Prima, +Raw Material Name,Nome da Matéria Prima, +Allotted Qty,Qtd Atribuída, +Expected Arrival Date,Data Esperada de Chegada, +Arrival Quantity,Quantidade de Chegada, +Raw Material Warehouse,Armazém de Matéria-prima, +Order By,Ordenar Por, +Include Sub-assembly Raw Materials,Incluir Matérias-primas de Submontagem, +Professional Tax Deductions,Deduções Fiscais Profissionais, +Program wise Fee Collection,Cobrança de taxas do programa inteligente, +Fees Collected,Taxas Cobradas, +Project Summary,Resumo do Projeto, +Total Tasks,Total de Tarefas, +Tasks Completed,Tarefas Concluídas, +Tasks Overdue,Tarefas Em Atraso, +Completion,Conclusão, +Provident Fund Deductions,Deduções do Fundo de Previdência, +Purchase Order Analysis,Análise de Pedido de Compra, +From and To Dates are required.,As datas de início e fim são obrigatórias., +To Date cannot be before From Date.,A data de término não pode ser anterior à data de início., +Qty to Bill,Qtd Para Bill, +Group by Purchase Order,Agrupar Por Ordem de Compra, + Purchase Value, Valor de Compra, +Total Received Amount,Valor Total Recebido, +Quality Inspection Summary,Resumo de Inspeção de Qualidade, + Quoted Amount, Quantia Cotada, +Lead Time (Days),Prazo de Entrega (dias), +Include Expired,Incluir Expirado, +Recruitment Analytics,Análise de Recrutamento, +Applicant name,Nome do candidato, +Job Offer status,Status da oferta de emprego, +On Date,Na Data, +Requested Items to Order and Receive,Itens Solicitados Para Solicitar e Receber, +Salary Payments Based On Payment Mode,Pagamentos de Salários Com Base no Modo de Pagamento, +Salary Payments via ECS,Pagamentos de Salários Via Ecs, +Account No,Não da Conta, +IFSC,IFSC, +MICR,MICR, +Sales Order Analysis,Análise de Pedidos de Vendas, +Amount Delivered,Quantidade Entregue, +Delay (in Days),Atraso (em Dias), +Group by Sales Order,Agrupar Por Pedido de Venda, + Sales Value, Valor de Venda, +Stock Qty vs Serial No Count,Quantidade Em Estoque Vs Série Sem Contagem, +Serial No Count,Série Sem Contagem, +Work Order Summary,Resumo da Ordem de Serviço, +Produce Qty,Quantidade de Produção, +Lead Time (in mins),Tempo de espera (em minutos), +Charts Based On,Gráficos Baseados Em, +YouTube Interactions,Interações no Youtube, +Published Date,Data de Publicação, +Barnch,Barnch, +Select a Company,Selecione Uma Empresa, +Opportunity {0} created,Oportunidade {0} criada, +Kindly select the company first,Selecione primeiro a empresa, +Please enter From Date and To Date to generate JSON,Insira a data inicial e a data final para gerar JSON, +PF Account,Conta PF, +PF Amount,Quantidade PF, +Additional PF,PF adicional, +PF Loan,Empréstimo PF, +Download DATEV File,Baixar arquivo DATEV, +Numero has not set in the XML file,Numero não foi definido no arquivo XML, +Inward Supplies(liable to reverse charge),Suprimentos internos (passíveis de cobrança reversa), +This is based on the course schedules of this Instructor,Isso é baseado nas programações do curso deste instrutor, +Course and Assessment,Curso e Avaliação, +Course {0} has been added to all the selected programs successfully.,O curso {0} foi adicionado a todos os programas selecionados com sucesso., +Programs updated,Programas atualizados, +Program and Course,Programa e Curso, +{0} or {1} is mandatory,{0} ou {1} é obrigatório, +Mandatory Fields,Campos Obrigatórios, +Student {0}: {1} does not belong to Student Group {2},Aluno {0}: {1} não pertence ao Grupo de Alunos {2}, +Student Attendance record {0} already exists against the Student {1},O registro de frequência do aluno {0} já existe para o aluno {1}, +Duplicate Entry,Duplicar Lançamento, +Course and Fee,Curso e Taxa, +Not eligible for the admission in this program as per Date Of Birth,Não elegível para a admissão neste programa de acordo com a data de nascimento, +Topic {0} has been added to all the selected courses successfully.,O tópico {0} foi adicionado a todos os cursos selecionados com sucesso., +Courses updated,Cursos atualizados, +{0} {1} has been added to all the selected topics successfully.,{0} {1} foi adicionado a todos os tópicos selecionados com sucesso., +Topics updated,Tópicos atualizados, +Academic Term and Program,Termo Acadêmico e Programa, +Please remove this item and try to submit again or update the posting time.,Remova este item e tente enviar novamente ou atualizar o tempo de postagem., +Failed to Authenticate the API key.,Falha ao autenticar a chave API., +Invalid Credentials,Credenciais Inválidas, +URL can only be a string,URL só pode ser uma string, +"Here is your webhook secret, this will be shown to you only once.",Este é o seu segredo do webhook; ele será mostrado a você apenas uma vez., +The payment for this membership is not paid. To generate invoice fill the payment details,O pagamento por esta adesão não é pago. Para gerar fatura preencha os dados de pagamento, +An invoice is already linked to this document,Uma fatura já está vinculada a este documento, +No customer linked to member {},Nenhum cliente vinculado ao membro {}, +You need to set Debit Account in Membership Settings,Você precisa definir a conta de débito nas configurações de associação, +You need to set Default Company for invoicing in Membership Settings,Você precisa definir a Empresa Padrão para faturamento nas Configurações de Associação, +You need to enable Send Acknowledge Email in Membership Settings,Você precisa habilitar Enviar e-mail de reconhecimento nas configurações de associação, +Error creating membership entry for {0},Erro ao criar entrada de associação para {0}, +A customer is already linked to this Member,Um cliente já está vinculado a este membro, +End Date must not be lesser than Start Date,A data de término não deve ser inferior à data de início, +Employee {0} already has Active Shift {1}: {2},O funcionário {0} já tem turno ativo {1}: {2}, + from {0}, de {0}, + to {0}, para {0}, +Please select Employee first.,Selecione Funcionário primeiro., +Please set {0} for the Employee or for Department: {1},Defina {0} Para Funcionário Ou Departamento: {1}, +To Date should be greater than From Date,Até a data deve ser maior que a data inicial, +Employee Onboarding: {0} is already for Job Applicant: {1},Integração de funcionário: {0} já é para Candidato a uma vaga: {1}, +Job Offer: {0} is already for Job Applicant: {1},Oferta de emprego: {0} já é para Candidato a emprego: {1}, +Only Shift Request with status 'Approved' and 'Rejected' can be submitted,Somente a solicitação de turno com o status ';Aprovado'; e ';Rejeitado'; pode ser enviada, +Shift Assignment: {0} created for Employee: {1},Atribuição de turno: {0} criado para funcionário: {1}, +You can not request for your Default Shift: {0},Você não pode solicitar seu turno padrão: {0}, +Only Approvers can Approve this Request.,Somente os aprovadores podem aprovar esta solicitação., +Asset Value Analytics,Análise do Valor do Ativo, +Category-wise Asset Value,Valor do Ativo Por Categoria, +Total Assets,Total de Ativos, +New Assets (This Year),Novos Ativos (este Ano), +Row #{}: Depreciation Posting Date should not be equal to Available for Use Date.,Linha # {}: a data de lançamento da depreciação não deve ser igual à data disponível para uso., +Incorrect Date,Data Incorreta, +Invalid Gross Purchase Amount,Valor Bruto de Compra Inválido, +There are active maintenance or repairs against the asset. You must complete all of them before cancelling the asset.,Há manutenção ou reparos ativos no ativo. Você deve concluir todos eles antes de cancelar o ativo., +% Complete,% Completo, +Back to Course,De Volta Ao Curso, +Finish Topic,Terminar Tópico, +Mins,Mins, +by,Por, +Back to,De Volta A, +Enrolling...,Inscrevendo..., +You have successfully enrolled for the program ,Você se inscreveu com sucesso no programa, +Enrolled,Inscrito, +Watch Intro,Assistir À Introdução, +We're here to help!,Nós estamos aqui para ajudar!, +Frequently Read Articles,Leia Artigos Com Frequência, +Please set a default company address,Defina um endereço padrão da empresa, +{0} is not a valid state! Check for typos or enter the ISO code for your state.,{0} não é um estado válido! Verifique se há erros de digitação ou insira o código ISO do seu estado., +Error occured while parsing Chart of Accounts: Please make sure that no two accounts have the same name,Ocorreu um erro ao analisar o plano de contas: certifique-se de que não há duas contas com o mesmo nome, +Plaid invalid request error,Erro de solicitação inválida de xadrez, +Please check your Plaid client ID and secret values,Verifique o seu ID de cliente Plaid e os valores secretos, +Bank transaction creation error,Erro de criação de transação bancária, +Unit of Measurement,Unidade de Medida, +Fiscal Year {0} Does Not Exist,Ano Fiscal {0} Não Existe, +Row # {0}: Returned Item {1} does not exist in {2} {3},Linha # {0}: o item devolvido {1} não existe em {2} {3}, +Valuation type charges can not be marked as Inclusive,Encargos de tipo de avaliação não podem ser marcados como inclusivos, +You do not have permissions to {} items in a {}.,Você não tem permissão para {} itens em um {}., +Insufficient Permissions,Permissões Insuficientes, +You are not allowed to update as per the conditions set in {} Workflow.,Você não tem permissão para atualizar de acordo com as condições definidas no {} Workflow., +Expense Account Missing,Conta de Despesas Ausente, +{0} is not a valid Value for Attribute {1} of Item {2}.,{0} não é um valor válido para o atributo {1} do item {2}., +Invalid Value,Valor Inválido, +The value {0} is already assigned to an existing Item {1}.,O valor {0} já está atribuído a um item existente {1}., +"To still proceed with editing this Attribute Value, enable {0} in Item Variant Settings.","Para continuar editando este valor de atributo, habilite {0} em Configurações de variante de item.", +Edit Not Allowed,Editar Não Permitido, +Row #{0}: Item {1} is already fully received in Purchase Order {2},Linha # {0}: o item {1} já foi totalmente recebido no pedido de compra {2}, +You cannot create or cancel any accounting entries with in the closed Accounting Period {0},Você não pode criar ou cancelar qualquer lançamento contábil no período contábil fechado {0}, +POS Invoice should have {} field checked.,A fatura de PDV deve ter o campo {} marcado., +Invalid Item,Artigo Inválido, +Row #{}: You cannot add postive quantities in a return invoice. Please remove item {} to complete the return.,Linha # {}: você não pode adicionar quantidades positivas em uma nota fiscal de devolução. Remova o item {} para concluir a devolução., +The selected change account {} doesn't belongs to Company {}.,A conta de alteração selecionada {} não pertence à Empresa {}., +Atleast one invoice has to be selected.,Pelo menos uma fatura deve ser selecionada., +Payment methods are mandatory. Please add at least one payment method.,Os métodos de pagamento são obrigatórios. Adicione pelo menos um método de pagamento., +Please select a default mode of payment,Selecione um modo de pagamento padrão, +You can only select one mode of payment as default,Você só pode selecionar um modo de pagamento como padrão, +Missing Account,Conta Em Falta, +Customers not selected.,Clientes não selecionados., +Statement of Accounts,Extrato de Contas, +Ageing Report Based On ,Relatório de Envelhecimento Baseado Em, +Please enter distributed cost center,Insira o centro de custo distribuído, +Total percentage allocation for distributed cost center should be equal to 100,A alocação percentual total para o centro de custo distribuído deve ser igual a 100, +Cannot enable Distributed Cost Center for a Cost Center already allocated in another Distributed Cost Center,Não é possível habilitar Centro de Custo Distribuído para um Centro de Custo já alocado em outro Centro de Custo Distribuído, +Parent Cost Center cannot be added in Distributed Cost Center,Centro de custo pai não pode ser adicionado ao centro de custo distribuído, +A Distributed Cost Center cannot be added in the Distributed Cost Center allocation table.,Um centro de custo distribuído não pode ser adicionado à tabela de alocação de centro de custo distribuído., +Cost Center with enabled distributed cost center can not be converted to group,Centro de custo com centro de custo distribuído habilitado não pode ser convertido em grupo, +Cost Center Already Allocated in a Distributed Cost Center cannot be converted to group,Centro de custo já alocado em um centro de custo distribuído não pode ser convertido em grupo, +Trial Period Start date cannot be after Subscription Start Date,A data de início do período de teste não pode ser posterior à data de início da assinatura, +Subscription End Date must be after {0} as per the subscription plan,A data de término da assinatura deve ser posterior a {0} de acordo com o plano de assinatura, +Subscription End Date is mandatory to follow calendar months,A data de término da assinatura é obrigatória para seguir os meses do calendário, +Row #{}: POS Invoice {} is not against customer {},Linha nº {}: Fatura de PDV {} não é contra o cliente {}, +Row #{}: POS Invoice {} is not submitted yet,Linha nº {}: Fatura de PDV {} ainda não foi enviada, +Row #{}: POS Invoice {} has been {},Linha nº {}: a fatura de PDV {} foi {}, +No Supplier found for Inter Company Transactions which represents company {0},Nenhum fornecedor encontrado para transações entre empresas que representam a empresa {0}, +No Customer found for Inter Company Transactions which represents company {0},Nenhum cliente encontrado para transações entre empresas que representam a empresa {0}, +Invalid Period,Período Inválido, +Selected POS Opening Entry should be open.,A entrada de abertura de PDV selecionada deve estar aberta., +Invalid Opening Entry,Entrada de Abertura Inválida, +Please set a Company,Defina Uma Empresa, +"Sorry, this coupon code's validity has not started",A validade deste código de cupom não começou, +"Sorry, this coupon code's validity has expired",A validade deste código de cupom expirou, +"Sorry, this coupon code is no longer valid","Desculpe, este código de cupom não é mais válido", +For the 'Apply Rule On Other' condition the field {0} is mandatory,"Para a condição ';Aplicar regra em outra';, o campo {0} é obrigatório", +{1} Not in Stock,{1} Fora de estoque, +Only {0} in Stock for item {1},Apenas {0} em estoque para o item {1}, +Please enter a coupon code,Insira um código de cupom, +Please enter a valid coupon code,Por favor insira um código de cupom válido, +Invalid Child Procedure,Procedimento de Criança Inválido, +Import Italian Supplier Invoice.,Importar Fatura de Fornecedor Italiano., +"Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}.","Taxa de avaliação para o item {0}, é necessária para fazer lançamentos contábeis para {1} {2}.", + Here are the options to proceed:, Aqui estão as opções para prosseguir:, +"If the item is transacting as a Zero Valuation Rate item in this entry, please enable 'Allow Zero Valuation Rate' in the {0} Item table.","Se o item estiver sendo negociado como um item de Taxa de avaliação zero nesta entrada, ative ';Permitir taxa de avaliação zero'; na {0} tabela de itens.", +"If not, you can Cancel / Submit this entry ","Caso contrário, você pode cancelar / enviar esta entrada", + performing either one below:, realizando um dos seguintes:, +Create an incoming stock transaction for the Item.,Crie uma transação de estoque de entrada para o item., +Mention Valuation Rate in the Item master.,Mencione a taxa de avaliação no cadastro de itens., +Valuation Rate Missing,Taxa de Avaliação Ausente, +Serial Nos Required,Números de Série Necessários, +Quantity Mismatch,Quantidade Incompatível, +"Please Restock Items and Update the Pick List to continue. To discontinue, cancel the Pick List.","Reabasteça os itens e atualize a lista de seleção para continuar. Para descontinuar, cancele a lista de seleção.", +Out of Stock,Fora de Estoque, +{0} units of Item {1} is not available.,{0} unidades do item {1} não está disponível., +Item for row {0} does not match Material Request,O item para a linha {0} não corresponde ao pedido de material, +Warehouse for row {0} does not match Material Request,O armazém para a linha {0} não corresponde ao pedido de material, +Accounting Entry for Service,Lançamento Contábil Para Serviço, +All items have already been Invoiced/Returned,Todos os itens já foram faturados / devolvidos, +All these items have already been Invoiced/Returned,Todos esses itens já foram faturados / devolvidos, +Stock Reconciliations,Reconciliações de Estoque, +Merge not allowed,Mesclar não permitido, +The following deleted attributes exist in Variants but not in the Template. You can either delete the Variants or keep the attribute(s) in template.,Os seguintes atributos excluídos existem em variantes mas não no modelo. Você pode excluir as variantes ou manter o (s) atributo (s) no modelo., +Variant Items,Itens Variantes, +Variant Attribute Error,Erro de Atributo Variante, +The serial no {0} does not belong to item {1},O número de série {0} não pertence ao item {1}, +There is no batch found against the {0}: {1},Nenhum lote encontrado em {0}: {1}, +Completed Operation,Operação Concluída, +Work Order Analysis,Análise de Ordem de Trabalho, +Quality Inspection Analysis,Análise de Inspeção de Qualidade, +Pending Work Order,Ordem de Serviço Pendente, +Last Month Downtime Analysis,Análise de Tempo de Inatividade no Último Mês, +Work Order Qty Analysis,Análise de Quantidade de Ordem de Serviço, +Job Card Analysis,Análise de Carteira de Trabalho, +Monthly Total Work Orders,Total Mensal de Ordens de Serviço, +Monthly Completed Work Orders,Ordens de Serviço Concluídas Mensalmente, +Ongoing Job Cards,Cartões de Trabalho Contínuo, +Monthly Quality Inspections,Inspeções Mensais de Qualidade, +(Forecast),(Previsão), +Total Demand (Past Data),Demanda Total (dados Anteriores), +Total Forecast (Past Data),Previsão Total (dados Anteriores), +Total Forecast (Future Data),Previsão Total (dados Futuros), +Based On Document,Com Base no Documento, +Based On Data ( in years ),Com base em dados (em anos), +Smoothing Constant,Constante de Suavização, +Please fill the Sales Orders table,Por favor preencha a tabela de Pedidos de Vendas, +Sales Orders Required,Pedidos de Vendas Necessários, +Please fill the Material Requests table,Preencha a tabela de Solicitações de Materiais, +Material Requests Required,Solicitações de Materiais Necessárias, +Items to Manufacture are required to pull the Raw Materials associated with it.,Os itens a fabricar são necessários para extrair as matérias-primas associadas a eles., +Items Required,Itens Necessários, +Operation {0} does not belong to the work order {1},A operação {0} não pertence à ordem de serviço {1}, +Print UOM after Quantity,Imprimir UOM após a quantidade, +Set default {0} account for perpetual inventory for non stock items,Definir conta {0} padrão para estoque permanente para itens fora de estoque, +Loan Security {0} added multiple times,Garantia de Empréstimo {0} adicionada várias vezes, +Loan Securities with different LTV ratio cannot be pledged against one loan,Garantia de Empréstimo com taxa de LTV diferente não podem ser garantidos por um empréstimo, +Qty or Amount is mandatory for loan security!,Qty or Amount é obrigatório para garantia de empréstimo!, +Only submittted unpledge requests can be approved,Somente solicitações de cancelamento de garantia enviadas podem ser aprovadas, +Interest Amount or Principal Amount is mandatory,O valor dos juros ou o valor do principal são obrigatórios, +Disbursed Amount cannot be greater than {0},O valor desembolsado não pode ser maior que {0}, +Row {0}: Loan Security {1} added multiple times,Linha {0}: Garantia de empréstimo {1} adicionada várias vezes, +Row #{0}: Child Item should not be a Product Bundle. Please remove Item {1} and Save,Linha # {0}: o item filho não deve ser um pacote de produtos. Remova o item {1} e salve, +Credit limit reached for customer {0},Limite de crédito atingido para o cliente {0}, +Could not auto create Customer due to the following missing mandatory field(s):,Não foi possível criar automaticamente o cliente devido aos seguintes campos obrigatórios ausentes:, +Please create Customer from Lead {0}.,Crie um Cliente a partir do Lead {0}., +Mandatory Missing,Ausente Obrigatória, +Please set Payroll based on in Payroll settings,Defina a folha de pagamento com base nas configurações da folha de pagamento, +Additional Salary: {0} already exist for Salary Component: {1} for period {2} and {3},Salário adicional: {0} já existe para o componente salarial: {1} para o período {2} e {3}, +From Date can not be greater than To Date.,A data inicial não pode ser posterior à data final., +Payroll date can not be less than employee's joining date.,A data da folha de pagamento não pode ser inferior à data de entrada do funcionário., +From date can not be less than employee's joining date.,A data inicial não pode ser inferior à data de entrada do funcionário., +To date can not be greater than employee's relieving date.,Até o momento não pode ser posterior à data de dispensa do funcionário., +Payroll date can not be greater than employee's relieving date.,A data da folha de pagamento não pode ser posterior à data de dispensa do funcionário., +Row #{0}: Please enter the result value for {1},Linha # {0}: Insira o valor do resultado para {1}, +Mandatory Results,Resultados Obrigatórios, +Sales Invoice or Patient Encounter is required to create Lab Tests,A fatura de vendas ou o encontro com o paciente são necessários para criar testes de laboratório, +Insufficient Data,Dados Insuficientes, +Lab Test(s) {0} created successfully,Teste (s) de laboratório {0} criado com sucesso, +Test :,Teste :, +Sample Collection {0} has been created,A coleção de amostra {0} foi criada, +Normal Range: ,Intervalo Normal:, +Row #{0}: Check Out datetime cannot be less than Check In datetime,Linha # {0}: a data e hora de check-out não pode ser menor que a data e hora de check-in, +"Missing required details, did not create Inpatient Record","Detalhes obrigatórios ausentes, registro de paciente não criado", +Unbilled Invoices,Faturas Não Faturadas, +Standard Selling Rate should be greater than zero.,A taxa de venda padrão deve ser maior que zero., +Conversion Factor is mandatory,Fator de conversão é obrigatório, +Row #{0}: Conversion Factor is mandatory,Linha nº {0}: Fator de conversão é obrigatório, +Sample Quantity cannot be negative or 0,Quantidade de amostra não pode ser negativa ou 0, +Invalid Quantity,Quantidade Inválida, +"Please set defaults for Customer Group, Territory and Selling Price List in Selling Settings","Defina os padrões para Grupo de clientes, Território e Lista de preços de venda nas configurações de venda", +{0} on {1},{0} em {1}, +{0} with {1},{0} com {1}, +Appointment Confirmation Message Not Sent,Mensagem de Confirmação de Compromisso Não Enviada, +"SMS not sent, please check SMS Settings","SMS não enviado, verifique as configurações de SMS", +Healthcare Service Unit Type cannot have both {0} and {1},Tipo de unidade de serviço de saúde não pode ter {0} e {1}, +Healthcare Service Unit Type must allow atleast one among {0} and {1},O tipo de unidade de serviço de saúde deve permitir pelo menos um entre {0} e {1}, +Set Response Time and Resolution Time for Priority {0} in row {1}.,Defina o Tempo de Resposta e o Tempo de Resolução Para a Prioridade {0} na Linha {1}., +Response Time for {0} priority in row {1} can't be greater than Resolution Time.,O tempo de resposta para {0} prioridade na linha {1} não pode ser maior que o tempo de resolução., +{0} is not enabled in {1},{0} não está habilitado em {1}, +Group by Material Request,Agrupar Por Solicitação de Material, +Email Sent to Supplier {0},Email Enviado Ao Fornecedor {0}, +"The Access to Request for Quotation From Portal is Disabled. To Allow Access, Enable it in Portal Settings.","O Acesso À Solicitação de Cotação do Portal Está Desabilitado. Para Permitir o Acesso, Habilite-o Nas Configurações do Portal.", +Supplier Quotation {0} Created,Orçamento do Fornecedor {0} Criado, +Valid till Date cannot be before Transaction Date,Válido até a data não pode ser anterior à data da transação, +Unlink Advance Payment on Cancellation of Order,Desvincular o Pagamento Adiantado no Cancelamento do Pedido, +"Simple Python Expression, Example: territory != 'All Territories'","Expressão Python simples, exemplo: território! = ';Todos os territórios';", +Sales Contributions and Incentives,Contribuições de Vendas e Incentivos, +Sourced by Supplier,Fornecido Pelo Fornecedor, +Total weightage assigned should be 100%.
    It is {0},O peso total atribuído deve ser 100%.
    É {0}, +Account {0} exists in parent company {1}.,A conta {0} existe na empresa-mãe {1}., +"To overrule this, enable '{0}' in company {1}","Para anular isso, ative ';{0}'; na empresa {1}", +Invalid condition expression,Expressão de condição inválida, +Please Select a Company First,Selecione Uma Empresa Primeiro, +Please Select Both Company and Party Type First,Selecione o Tipo de Empresa e de Parceiro Primeiro, +Provide the invoice portion in percent,Fornece a parte da fatura em porcentagem, +Give number of days according to prior selection,Dê o número de dias de acordo com a seleção anterior, +Email Details,Detalhes de Email, +"Select a greeting for the receiver. E.g. Mr., Ms., etc.","Selecione uma saudação para o destinatário. Por exemplo, Sr., Sra., Etc.", +Preview Email,Pré-visualizar Email, +Please select a Supplier,Selecione um fornecedor, +Supplier Lead Time (days),Prazo de Entrega do Fornecedor (dias), +"Home, Work, etc.","Casa, Trabalho, etc.", +Exit Interview Held On,Entrevista de Saída Realizada Em, +Condition and formula,Condição e fórmula, +Sets 'Target Warehouse' in each row of the Items table.,Define ';Armazém de destino'; em cada linha da tabela de itens., +Sets 'Source Warehouse' in each row of the Items table.,Define ';Source Warehouse'; em cada linha da tabela de itens., +POS Register,Registro de PDV, +"Can not filter based on POS Profile, if grouped by POS Profile","Não é possível filtrar com base no Perfil de POS, se agrupado por Perfil de POS", +"Can not filter based on Customer, if grouped by Customer","Não é possível filtrar com base no cliente, se agrupado por cliente", +"Can not filter based on Cashier, if grouped by Cashier","Não é possível filtrar com base no Caixa, se agrupado por Caixa", +Payment Method,Forma de Pagamento, +"Can not filter based on Payment Method, if grouped by Payment Method","Não é possível filtrar com base na forma de pagamento, se agrupado por forma de pagamento", +Supplier Quotation Comparison,Comparação de Cotação de Fornecedor, +Price per Unit (Stock UOM),Preço Por Unidade (uom de Estoque), +Group by Supplier,Grupo Por Fornecedor, +Group by Item,Agrupar Por Item, +Remember to set {field_label}. It is required by {regulation}.,Lembre-se de definir {field_label}. É exigido por {regulamento}., +Enrollment Date cannot be before the Start Date of the Academic Year {0},A data de inscrição não pode ser anterior à data de início do ano letivo {0}, +Enrollment Date cannot be after the End Date of the Academic Term {0},A data de inscrição não pode ser posterior à data de término do período acadêmico {0}, +Enrollment Date cannot be before the Start Date of the Academic Term {0},A data de inscrição não pode ser anterior à data de início do período acadêmico {0}, +Future Posting Not Allowed,Postagem Futura Não Permitida, +"To enable Capital Work in Progress Accounting, ","Para habilitar a Contabilidade de Trabalho Capital em Andamento,", +you must select Capital Work in Progress Account in accounts table,você deve selecionar a conta Capital Work in Progress na tabela de contas, +You can also set default CWIP account in Company {},Você também pode definir uma conta CWIP padrão na Empresa {}, +The Request for Quotation can be accessed by clicking on the following button,O Pedido de Cotação pode ser acessado clicando no seguinte botão, +Regards,Saudações, +Please click on the following button to set your new password,Clique no botão a seguir para definir sua nova senha, +Update Password,Atualizar Senha, +Row #{}: Selling rate for item {} is lower than its {}. Selling {} should be atleast {},Linha nº {}: a taxa de venda do item {} é menor do que {}. a venda {} deve ser pelo menos {}, +You can alternatively disable selling price validation in {} to bypass this validation.,Como alternativa você pode desativar a validação do preço de venda em {} para ignorar esta validação., +Invalid Selling Price,Preço de Venda Inválido, +Address needs to be linked to a Company. Please add a row for Company in the Links table.,O endereço precisa estar vinculado a uma empresa. Adicione uma linha para Empresa na tabela de Links., +Company Not Linked,Empresa Não Vinculada, +Import Chart of Accounts from CSV / Excel files,Importar Plano de Contas de arquivos CSV / Excel, +Completed Qty cannot be greater than 'Qty to Manufacture',Qtd concluída não pode ser maior que ';Qty to Manufacture';, +"Row {0}: For Supplier {1}, Email Address is Required to send an email","Linha {0}: Para o fornecedor {1}, o endereço de e-mail é obrigatório para enviar um e-mail", +"If enabled, the system will post accounting entries for inventory automatically","Se ativado, o sistema lançará lançamentos contábeis para estoque automaticamente", +Accounts Frozen Till Date,Contas Congeladas Até a Data, +Accounting entries are frozen up to this date. Nobody can create or modify entries except users with the role specified below,Os lançamentos contábeis estão congelados até esta data. Ninguém pode criar ou modificar entradas exceto usuários com a função especificada abaixo, +Role Allowed to Set Frozen Accounts and Edit Frozen Entries,Função Permitida Para Definir Contas Congeladas e Editar Entradas Congeladas, +Address used to determine Tax Category in transactions,Endereço usado para determinar a categoria de imposto nas transações, +"The percentage you are allowed to bill more against the amount ordered. For example, if the order value is $100 for an item and tolerance is set as 10%, then you are allowed to bill up to $110 ","A porcentagem que você tem permissão para cobrar mais em relação ao valor pedido. Por exemplo, se o valor do pedido for $ 100 para um item e a tolerância for definida como 10%, você poderá cobrar até $ 110", +This role is allowed to submit transactions that exceed credit limits,Esta função tem permissão para enviar transações que excedam os limites de crédito, +"If ""Months"" is selected, a fixed amount will be booked as deferred revenue or expense for each month irrespective of the number of days in a month. It will be prorated if deferred revenue or expense is not booked for an entire month","Se "Meses" for selecionado, um valor fixo será registrado como receita ou despesa diferida para cada mês, independentemente do número de dias em um mês. Será rateado se a receita ou despesa diferida não for registrada para um mês inteiro", +"If this is unchecked, direct GL entries will be created to book deferred revenue or expense","Se esta opção estiver desmarcada, as entradas contábeis diretas serão criadas para registrar receitas ou despesas diferidas", +Show Inclusive Tax in Print,Mostrar Imposto Incluso na Impressão, +Only select this if you have set up the Cash Flow Mapper documents,Selecione esta opção apenas se você configurou os documentos do Mapeador de Fluxo de Caixa, +Payment Channel,Canal de Pagamento, +Is Purchase Order Required for Purchase Invoice & Receipt Creation?,A Ordem de Compra É Necessária Para a Criação da Fatura e do Recibo de Compra?, +Is Purchase Receipt Required for Purchase Invoice Creation?,O Recibo de Compra É Necessário Para a Criação da Fatura de Compra?, +Maintain Same Rate Throughout the Purchase Cycle,Manter a Mesma Taxa Ao Longo do Ciclo de Compra, +Allow Item To Be Added Multiple Times in a Transaction,Permitir Item a Ser Adicionado Várias Vezes Em Uma Transação, +Suppliers,Fornecedores, +Send Emails to Suppliers,Envie E-mails Para Fornecedores, +Select a Supplier,Selecione Um Fornecedor, +Cannot mark attendance for future dates.,Não é possível marcar presença para datas futuras., +Do you want to update attendance?
    Present: {0}
    Absent: {1},Quer atualizar a frequência?
    Presente: {0}
    Ausente: {1}, +Mpesa Settings,Configurações Mpesa, +Initiator Name,Nome do Iniciador, +Till Number,Número Até, +Sandbox,Sandbox, + Online PassKey, Senha Online, +Security Credential,Credencial de Segurança, +Get Account Balance,Obter Saldo da Conta, +Please set the initiator name and the security credential,Defina o nome do iniciador e a credencial de segurança, +Inpatient Medication Entry,Entrada de Medicação Para Paciente Interno, +HLC-IME-.YYYY.-,HLC-IME-.YYYY.-, +Item Code (Drug),Código do Item (droga), +Medication Orders,Pedidos de Medicação, +Get Pending Medication Orders,Obtenha Pedidos de Medicação Pendentes, +Inpatient Medication Orders,Pedidos de Medicação Para Pacientes Internados, +Medication Warehouse,Armazém de Medicamentos, +Warehouse from where medication stock should be consumed,Armazém de onde o estoque de medicamentos deve ser consumido, +Fetching Pending Medication Orders,Buscando Pedidos de Medicação Pendentes, +Inpatient Medication Entry Detail,Detalhe de Entrada de Medicação Para Paciente Interno, +Medication Details,Detalhes de Medicação, +Drug Code,Código de Drogas, +Drug Name,Nome do Medicamento, +Against Inpatient Medication Order,Contra Ordem de Medicação Para Paciente Interno, +Against Inpatient Medication Order Entry,Contra a Entrada de Pedido de Medicamento Para Paciente Interno, +Inpatient Medication Order,Pedido de Medicação Para Paciente Internado, +HLC-IMO-.YYYY.-,HLC-IMO-.YYYY.-, +Total Orders,Pedidos Totais, +Completed Orders,Pedidos Concluídos, +Add Medication Orders,Adicionar Pedidos de Medicação, +Adding Order Entries,Adicionar Entradas de Pedidos, +{0} medication orders completed,{0} pedidos de medicamentos concluídos, +{0} medication order completed,{0} pedido de medicamento concluído, +Inpatient Medication Order Entry,Entrada de Pedido de Medicação Para Paciente Interno, +Is Order Completed,O Pedido Foi Concluído, +Employee Records to Be Created By,Registro do Colaborador a Ser Criado Por, +Employee records are created using the selected field,Os registros de funcionários são criados usando o campo selecionado, +Don't send employee birthday reminders,Não envie aos colaboradores lembretes de aniversários, +Restrict Backdated Leave Applications,Restringir Pedidos de Licença Retroativos, +Sequence ID,ID de Sequência, +Sequence Id,ID de Sequência, +Allow multiple material consumptions against a Work Order,Permitir vários consumos de material em uma Ordem de Serviço, +Plan time logs outside Workstation working hours,Planeje registros de tempo fora do horário de trabalho da estação de trabalho, +Plan operations X days in advance,Planeje as operações com X dias de antecedência, +Time Between Operations (Mins),Tempo Entre as Operações (minutos), +Default: 10 mins,Padrão: 10 minutos, +Overproduction for Sales and Work Order,Superprodução Para Vendas e Ordem de Serviço, +"Update BOM cost automatically via scheduler, based on the latest Valuation Rate/Price List Rate/Last Purchase Rate of raw materials","Atualizar o custo do BOM automaticamente por meio do programador, com base na última taxa de avaliação / taxa de lista de preços / taxa da última compra de matérias-primas", +Purchase Order already created for all Sales Order items,Pedido de compra já criado para todos os itens do pedido de venda, +Select Items,Selecione Itens, +Against Default Supplier,Contra Fornecedor Padrão, +Auto close Opportunity after the no. of days mentioned above,Oportunidade de fechamento automático após o nº dos dias mencionados acima, +Is Sales Order Required for Sales Invoice & Delivery Note Creation?,O Pedido de Vendas É Necessário Para a Criação da Fatura de Vendas e da Nota de Entrega?, +Is Delivery Note Required for Sales Invoice Creation?,A Nota de Entrega É Necessária Para a Criação da Fatura de Vendas?, +How often should Project and Company be updated based on Sales Transactions?,Com que frequência o Projeto e a Empresa devem ser atualizados com base nas Transações de Vendas?, +Allow User to Edit Price List Rate in Transactions,Permitir Ao Usuário Editar Preço da Lista de Preços Em Transações, +Allow Item to Be Added Multiple Times in a Transaction,Permitir Item a Ser Adicionado Várias Vezes Em Uma Transação, +Allow Multiple Sales Orders Against a Customer's Purchase Order,Permitir Vários Pedidos de Venda Relacionados Ao Pedido de Compra do Cliente, +Validate Selling Price for Item Against Purchase Rate or Valuation Rate,Validar Preço de Venda Para o Item de Acordo Com o Valor de Compra Ou Taxa de Avaliação, +Hide Customer's Tax ID from Sales Transactions,Esconder CPF/CNPJ em transações de vendas, +"The percentage you are allowed to receive or deliver more against the quantity ordered. For example, if you have ordered 100 units, and your Allowance is 10%, then you are allowed to receive 110 units.","A porcentagem que você tem permissão para receber ou entregar mais em relação à quantidade pedida. Por exemplo, se você encomendou 100 unidades e seu subsídio é de 10%, então você tem permissão para receber 110 unidades.", +Action If Quality Inspection Is Not Submitted,Ação Se a Inspeção de Qualidade Não For Enviada, +Auto Insert Price List Rate If Missing,Taxa de Lista de Preços de Inserção Automática Se Ausente, +Automatically Set Serial Nos Based on FIFO,Número de Série Automaticamente Definido Com Base na Fifo, +Set Qty in Transactions Based on Serial No Input,Definir a Quantidade Em Transações Com Base Em Série Sem Entrada, +Raise Material Request When Stock Reaches Re-order Level,Criar Requisição de Material Quando o Estoque Atingir o Nível Mínimo, +Notify by Email on Creation of Automatic Material Request,Notificar Por Email a Criação de Requisição de Material Automática, +Allow Material Transfer from Delivery Note to Sales Invoice,Permitir transferência de material da nota de entrega para a fatura de vendas, +Allow Material Transfer from Purchase Receipt to Purchase Invoice,Permitir transferência de material do recibo de compra para a fatura de compra, +Freeze Stocks Older Than (Days),Congelar Estoques Anteriores a (dias), +Role Allowed to Edit Frozen Stock,Função Autorizada Para Editar Estoque Congelado, +The unallocated amount of Payment Entry {0} is greater than the Bank Transaction's unallocated amount,O valor não alocado da Entrada de pagamento {0} é maior do que o valor não alocado da transação bancária, +Payment Received,Pagamento Recebido, +Attendance cannot be marked outside of Academic Year {0},A frequência não pode ser marcada fora do ano letivo {0}, +Student is already enrolled via Course Enrollment {0},O aluno já está matriculado por meio da inscrição no curso {0}, +Attendance cannot be marked for future dates.,A participação não pode ser marcada para datas futuras., +Please add programs to enable admission application.,Adicione programas para habilitar o pedido de admissão., +The following employees are currently still reporting to {0}:,Os seguintes funcionários ainda estão subordinados a {0}:, +Please make sure the employees above report to another Active employee.,Certifique-se de que os funcionários acima se reportem a outro funcionário ativo., +Cannot Relieve Employee,Não Pode Dispensar o Funcionário, +Please enter {0},Insira {0}, +Please select another payment method. Mpesa does not support transactions in currency '{0}',Selecione outro método de pagamento. Mpesa não suporta transações na moeda ';{0}';, +Transaction Error,Erro de Transação, +Mpesa Express Transaction Error,Erro de Transação do Mpesa Express, +"Issue detected with Mpesa configuration, check the error logs for more details","Problema detectado com a configuração do Mpesa, verifique os logs de erro para obter mais detalhes", +Mpesa Express Error,Erro Mpesa Express, +Account Balance Processing Error,Erro de Processamento do Saldo da Conta, +Please check your configuration and try again,Por favor verifique a sua configuração e tente novamente, +Mpesa Account Balance Processing Error,Erro de Processamento de Saldo da Conta Mpesa, +Balance Details,Detalhes do Saldo, +Current Balance,Saldo Atual, +Available Balance,Saldo Disponível, +Reserved Balance,Saldo Reservado, +Uncleared Balance,Saldo Não Compensado, +Payment related to {0} is not completed,O pagamento relacionado a {0} não foi concluído, +Row #{}: Item Code: {} is not available under warehouse {}.,Linha # {}: Código do item: {} não está disponível no depósito {}., +Row #{}: Stock quantity not enough for Item Code: {} under warehouse {}. Available quantity {}.,Linha nº {}: Quantidade em estoque insuficiente para o código do item: {} sob o depósito {}. Quantidade disponível {}., +Row #{}: Please select a serial no and batch against item: {} or remove it to complete transaction.,Linha # {}: selecione um número de série e lote para o item: {} ou remova-o para concluir a transação., +Row #{}: No serial number selected against item: {}. Please select one or remove it to complete transaction.,Linha # {}: Nenhum número de série selecionado para o item: {}. Selecione um ou remova-o para concluir a transação., +Row #{}: No batch selected against item: {}. Please select a batch or remove it to complete transaction.,Linha # {}: Nenhum lote selecionado para o item: {}. Selecione um lote ou remova-o para concluir a transação., +Payment amount cannot be less than or equal to 0,O valor do pagamento não pode ser menor ou igual a 0, +Please enter the phone number first,Por favor insira o número de telefone primeiro, +Row #{}: {} {} does not exist.,Linha # {}: {} {} não existe., +Row #{0}: {1} is required to create the Opening {2} Invoices,Linha # {0}: {1} é necessário para criar as {2} faturas de abertura, +You had {} errors while creating opening invoices. Check {} for more details,Você teve {} erros ao criar faturas de abertura. Verifique {} para obter mais detalhes, +Error Occured,Ocorreu Um Erro, +Opening Invoice Creation In Progress,Criação de Fatura Em Andamento, +Creating {} out of {} {},Criando {} de {} {}, +(Serial No: {0}) cannot be consumed as it's reserverd to fullfill Sales Order {1}.,(Nº de série: {0}) não pode ser consumido porque está reservado para cumprir o pedido de venda {1}., +Item {0} {1},Artigo {0} {1}, +Last Stock Transaction for item {0} under warehouse {1} was on {2}.,A última transação de estoque para o item {0} em depósito {1} foi em {2}., +Stock Transactions for Item {0} under warehouse {1} cannot be posted before this time.,As transações de estoque para o item {0} em depósito {1} não podem ser lançadas antes dessa hora., +Posting future stock transactions are not allowed due to Immutable Ledger,O lançamento de futuras transações de estoque não é permitido devido ao Immutable Ledger, +A BOM with name {0} already exists for item {1}.,Já existe um BOM com o nome {0} para o item {1}., +{0}{1} Did you rename the item? Please contact Administrator / Tech support,{0} {1} Você renomeou o item? Entre em contato com o administrador / suporte técnico, +At row #{0}: the sequence id {1} cannot be less than previous row sequence id {2},Na linha nº {0}: o id de sequência {1} não pode ser menor que o id de sequência da linha anterior {2}, +The {0} ({1}) must be equal to {2} ({3}),O {0} ({1}) deve ser igual a {2} ({3}), +"{0}, complete the operation {1} before the operation {2}.","{0}, conclua a operação {1} antes da operação {2}.", +Cannot ensure delivery by Serial No as Item {0} is added with and without Ensure Delivery by Serial No.,Não é possível garantir a entrega por número de série porque o item {0} é adicionado com e sem Garantir entrega por número de série, +Item {0} has no Serial No. Only serilialized items can have delivery based on Serial No,O item {0} não tem número de série. Apenas itens serilializados podem ter entrega com base no número de série, +No active BOM found for item {0}. Delivery by Serial No cannot be ensured,Nenhum BOM ativo encontrado para o item {0}. a entrega por número de série não pode ser garantida, +No pending medication orders found for selected criteria,Nenhum pedido de medicamento pendente encontrado para os critérios selecionados, +From Date cannot be after the current date.,A data de início não pode ser posterior à data atual., +To Date cannot be after the current date.,A data de término não pode ser posterior à data atual., +From Time cannot be after the current time.,A hora inicial não pode ser posterior à hora atual., +To Time cannot be after the current time.,A hora final não pode ser posterior à hora atual., +Stock Entry {0} created and ,Entrada de estoque {0} criada e, +Inpatient Medication Orders updated successfully,Pedidos de medicação para pacientes internados atualizados com sucesso, +Row {0}: Cannot create Inpatient Medication Entry against cancelled Inpatient Medication Order {1},Linha {0}: Não é possível criar uma Inscrição de Medicação para Paciente Interno em relação ao Pedido de Medicação para Paciente Interno cancelado {1}, +Row {0}: This Medication Order is already marked as completed,Linha {0}: Este pedido de medicação já está marcado como concluído, +Quantity not available for {0} in warehouse {1},Quantidade não disponível para {0} no armazém {1}, +Please enable Allow Negative Stock in Stock Settings or create Stock Entry to proceed.,Ative Permitir estoque negativo nas configurações de estoque ou crie a entrada de estoque para continuar., +No Inpatient Record found against patient {0},Nenhum registro de paciente interno encontrado para o paciente {0}, +An Inpatient Medication Order {0} against Patient Encounter {1} already exists.,Já existe um Pedido de Medicação para Paciente Interno {0} contra o Encontro do Paciente {1}., +Allow In Returns,Permitir Devoluções, +Hide Unavailable Items,Ocultar Itens Indisponíveis, +Apply Discount on Discounted Rate,Aplicar Desconto na Taxa Com Desconto, +Therapy Plan Template,Modelo de Plano de Terapia, +Fetching Template Details,Buscando Detalhes do Modelo, +Linked Item Details,Detalhes do Item Vinculado, +Therapy Types,Tipos de Terapia, +Therapy Plan Template Detail,Detalhe do Modelo do Plano de Terapia, +Non Conformance,Não Conformidade, +Process Owner,Proprietário do Processo, +Corrective Action,Ação Corretiva, +Preventive Action,Ação Preventiva, +Problem,Problema, +Responsible,Responsável, +Completion By,Conclusão Por, +Process Owner Full Name,Nome Completo do Proprietário do Processo, +Right Index,Índice certo, +Left Index,Índice Esquerdo, +Sub Procedure,Subprocedimento, +Passed,Passado, +Print Receipt,Imprimir Recibo, +Edit Receipt,Editar Recibo, +Focus on search input,Foco na entrada de pesquisa, +Focus on Item Group filter,Foco no filtro de grupo de itens, +Checkout Order / Submit Order / New Order,Finalizar Pedido / Enviar Pedido / Novo Pedido, +Add Order Discount,Adicionar Desconto de Pedido, +Item Code: {0} is not available under warehouse {1}.,Código do item: {0} não está disponível no depósito {1}., +Serial numbers unavailable for Item {0} under warehouse {1}. Please try changing warehouse.,Números de série indisponíveis para o item {0} em depósito {1}. Por favor tente mudar o warehouse., +Fetched only {0} available serial numbers.,Buscou apenas {0} números de série disponíveis., +Switch Between Payment Modes,Alternar Entre os Modos de Pagamento, +Enter {0} amount.,Insira o valor de {0}., +You don't have enough points to redeem.,Você não tem pontos suficientes para resgatar., +You can redeem upto {0}.,Você pode resgatar até {0}., +Enter amount to be redeemed.,Insira o valor a ser resgatado., +You cannot redeem more than {0}.,Você não pode resgatar mais de {0}., +Open Form View,Abra a Visualização do Formulário, +POS invoice {0} created succesfully,Fatura de PDV {0} criada com sucesso, +Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2}.,Quantidade em estoque insuficiente para o código do item: {0} sob o depósito {1}. Quantidade disponível {2}., +Serial No: {0} has already been transacted into another POS Invoice.,Número de série: {0} já foi transacionado para outra fatura de PDV., +Balance Serial No,Número de Série do Saldo, +Warehouse: {0} does not belong to {1},Armazém: {0} não pertence a {1}, +Please select batches for batched item {0},Selecione os lotes para o item em lote {0}, +Please select quantity on row {0},Selecione a quantidade na linha {0}, +Please enter serial numbers for serialized item {0},Insira os números de série para o item serializado {0}, +Batch {0} already selected.,Lote {0} já selecionado., +Please select a warehouse to get available quantities,Selecione um armazém para obter as quantidades disponíveis, +"For transfer from source, selected quantity cannot be greater than available quantity","Para transferência da origem, a quantidade selecionada não pode ser maior que a quantidade disponível", +Cannot find Item with this Barcode,Não é possível encontrar o item com este código de barras, +{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2},{0} é obrigatório. Talvez o registro de câmbio não tenha sido criado para {1} a {2}, +{} has submitted assets linked to it. You need to cancel the assets to create purchase return.,{} enviou ativos vinculados a ele. Você precisa cancelar os ativos para criar o retorno de compra., +Cannot cancel this document as it is linked with submitted asset {0}. Please cancel it to continue.,Não é possível cancelar este documento pois está vinculado ao ativo enviado {0}. Cancele para continuar., +Row #{}: Serial No. {} has already been transacted into another POS Invoice. Please select valid serial no.,Linha # {}: Número de série {} já foi transacionado para outra fatura de PDV. Selecione o número de série válido., +Row #{}: Serial Nos. {} has already been transacted into another POS Invoice. Please select valid serial no.,Linha nº {}: Nºs de série {} já foi transacionado para outra fatura de PDV. Selecione o número de série válido., +Item Unavailable,Artigo Indisponível, +Row #{}: Serial No {} cannot be returned since it was not transacted in original invoice {},Linha nº {}: Número de série {} não pode ser devolvido pois não foi negociado na fatura original {}, +Please set default Cash or Bank account in Mode of Payment {},Defina dinheiro ou conta bancária padrão no modo de pagamento {}, +Please set default Cash or Bank account in Mode of Payments {},Defina dinheiro ou conta bancária padrão no modo de pagamentos {}, +Please ensure {} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account.,Certifique-se de que a conta {} seja uma conta de balanço. Você pode alterar a conta-mãe para uma conta de balanço ou selecionar uma conta diferente., +Please ensure {} account is a Payable account. Change the account type to Payable or select a different account.,Certifique-se de que a {} conta seja uma conta a pagar. Altere o tipo de conta para Pagável ou selecione uma conta diferente., +Row {}: Expense Head changed to {} ,Linha {}: Cabeçalho de Despesas alterado para {}, +because account {} is not linked to warehouse {} ,porque a conta {} não está vinculada ao depósito {}, +or it is not the default inventory account,ou não é a conta de estoque padrão, +Expense Head Changed,Cabeça de Despesas Alterada, +because expense is booked against this account in Purchase Receipt {},porque a despesa é registrada nesta conta no recibo de compra {}, +as no Purchase Receipt is created against Item {}. ,visto que nenhum recibo de compra é criado para o item {}., +This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice,Isso é feito para lidar com a contabilidade de casos em que o recibo de compra é criado após a fatura de compra, +Purchase Order Required for item {},Pedido de compra necessário para o item {}, +To submit the invoice without purchase order please set {} ,Para enviar a fatura sem pedido de compra defina {}, +as {} in {},Como Em {}, +Mandatory Purchase Order,Ordem de Compra Obrigatória, +Purchase Receipt Required for item {},Recibo de compra necessário para o item {}, +To submit the invoice without purchase receipt please set {} ,Para enviar a fatura sem recibo de compra defina {}, +Mandatory Purchase Receipt,Recibo de Compra Obrigatório, +POS Profile {} does not belongs to company {},Perfil de PDV {} não pertence à empresa {}, +User {} is disabled. Please select valid user/cashier,O usuário {} está desativado. Selecione um usuário / caixa válido, +Row #{}: Original Invoice {} of return invoice {} is {}. ,Linha nº {}: a fatura original {} da fatura de devolução {} é {}., +Original invoice should be consolidated before or along with the return invoice.,A fatura original deve ser consolidada antes ou junto com a fatura de devolução., +You can add original invoice {} manually to proceed.,Você pode adicionar a fatura original {} manualmente para prosseguir., +Please ensure {} account is a Balance Sheet account. ,Certifique-se de que a conta {} seja uma conta de balanço., +You can change the parent account to a Balance Sheet account or select a different account.,Você pode alterar a conta-mãe para uma conta de balanço ou selecionar uma conta diferente., +Please ensure {} account is a Receivable account. ,Certifique-se de que a conta {} seja uma conta a receber., +Change the account type to Receivable or select a different account.,Altere o tipo de conta para Recebível ou selecione uma conta diferente., +{} can't be cancelled since the Loyalty Points earned has been redeemed. First cancel the {} No {},{} não pode ser cancelado porque os pontos de fidelidade ganhos foram resgatados. Primeiro cancele o {} Não {}, +already exists,já existe, +POS Closing Entry {} against {} between selected period,POS fechando entrada {} contra {} entre o período selecionado, +POS Invoice is {},A fatura de PDV é {}, +POS Profile doesn't matches {},Perfil de PDV não corresponde a {}, +POS Invoice is not {},A fatura de PDV não é {}, +POS Invoice isn't created by user {},A fatura de PDV não foi criada pelo usuário {}, +Row #{}: {},Linha #{}: {}, +Invalid POS Invoices,Faturas de PDV inválidas, +Please add the account to root level Company - {},Adicione a conta ao nível raiz Empresa - {}, +"While creating account for Child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA","Ao criar uma conta para Empresa-filha {0}, conta-mãe {1} não encontrada. Por favor, crie a conta principal no COA correspondente", +Account Not Found,Conta Não Encontrada, +"While creating account for Child Company {0}, parent account {1} found as a ledger account.","Ao criar uma conta para Empresa filha {0}, conta pai {1} encontrada como uma conta contábil.", +Please convert the parent account in corresponding child company to a group account.,Converta a conta-mãe da empresa-filha correspondente em uma conta de grupo., +Invalid Parent Account,Conta Pai Inválida, +"Renaming it is only allowed via parent company {0}, to avoid mismatch.","Renomear só é permitido por meio da empresa-mãe {0}, para evitar incompatibilidade.", +"If you {0} {1} quantities of the item {2}, the scheme {3} will be applied on the item.","Se você {0} {1} quantidades do item {2}, o esquema {3} será aplicado ao item.", +"If you {0} {1} worth item {2}, the scheme {3} will be applied on the item.","Se você {0} {1} vale um item {2}, o esquema {3} será aplicado ao item.", +"As the field {0} is enabled, the field {1} is mandatory.","Como o campo {0} está habilitado, o campo {1} é obrigatório.", +"As the field {0} is enabled, the value of the field {1} should be more than 1.","Como o campo {0} está habilitado, o valor do campo {1} deve ser maior que 1.", +Cannot deliver Serial No {0} of item {1} as it is reserved to fullfill Sales Order {2},Não é possível entregar o número de série {0} do item {1} porque está reservado para atender ao pedido de venda {2}, +"Sales Order {0} has reservation for the item {1}, you can only deliver reserved {1} against {0}.","O pedido de venda {0} tem reserva para o item {1}, você só pode entregar o {1} reservado para {0}.", +{0} Serial No {1} cannot be delivered,{0} Número de série {1} não pode ser entregue, +Row {0}: Subcontracted Item is mandatory for the raw material {1},Linha {0}: Item subcontratado é obrigatório para a matéria-prima {1}, +"As there are sufficient raw materials, Material Request is not required for Warehouse {0}.","Como há matéria-prima suficiente, a Solicitação de Material não é necessária para o Armazém {0}.", +" If you still want to proceed, please enable {0}."," Se você ainda deseja continuar, ative {0}.", +The item referenced by {0} - {1} is already invoiced,O item referenciado por {0} - {1} já foi faturado, +Therapy Session overlaps with {0},A sessão de terapia se sobrepõe a {0}, +Therapy Sessions Overlapping,Sobreposição de Sessões de Terapia, +Therapy Plans,Planos de Terapia, +"Item Code, warehouse, quantity are required on row {0}","Código do item, armazém, quantidade são necessários na linha {0}", +Get Items from Material Requests against this Supplier,Obtenha itens de solicitações de materiais contra este fornecedor, +Enable European Access,Habilitar Acesso Europeu, +Creating Purchase Order ...,Criando Pedido de Compra..., +"Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only.","Selecione um fornecedor dos fornecedores padrão dos itens abaixo. na seleção, um pedido de compra será feito apenas para itens pertencentes ao fornecedor selecionado.", +Row #{}: You must select {} serial numbers for item {}.,Linha {}: você deve selecionar {} números de série para o item {}., diff --git a/erpnext/translations/pt_br.csv b/erpnext/translations/pt_br.csv deleted file mode 100644 index cda5ee85f9..0000000000 --- a/erpnext/translations/pt_br.csv +++ /dev/null @@ -1,3035 +0,0 @@ -"""Customer Provided Item"" cannot be Purchase Item also","""Item Fornecido Pelo Cliente"" não pode ser Item de Compra", -"""Customer Provided Item"" cannot have Valuation Rate","""Item Fornecido Pelo Cliente"" não pode ter Taxa de Avaliação", -"""Is Fixed Asset"" cannot be unchecked, as Asset record exists against the item","""É Ativo Fixo"" não pode ser desmarcado se já existe um registro de Ativo relacionado ao item", -'Based On' and 'Group By' can not be same,'Baseado em' e ' Agrupar por' não podem ser o mesmo, -'Days Since Last Order' must be greater than or equal to zero,'Dias desde a última Ordem' deve ser maior ou igual a zero, -'Entries' cannot be empty,'Entradas' não pode estar vazio, -'From Date' is required,Informe a 'Data Inicial', -'From Date' must be after 'To Date',A 'Data Final' deve ser posterior a 'Data Inicial', -'Has Serial No' can not be 'Yes' for non-stock item,'Tem Número Serial' não pode ser confirmado para itens sem controle de estoque, -'Opening','Abrindo', -'To Case No.' cannot be less than 'From Case No.','Número do Caso Final' não pode ser menor que o 'Número do Caso Inicial', -'To Date' is required,'Data Final' é necessária, -'Total','Total', -'Update Stock' can not be checked because items are not delivered via {0},"""Atualização do Estoque 'não pode ser verificado porque os itens não são entregues via {0}", -'Update Stock' cannot be checked for fixed asset sale,"""Atualizar Estoque"" não pode ser selecionado para venda de ativo fixo", -90-Above,Acima de 90, -A Customer Group exists with same name please change the Customer name or rename the Customer Group,"Existe um grupo de clientes com o mesmo nome, por favor modifique o nome do cliente ou renomeie o grupo de clientes", -API Key,Chave da API, -Abbr can not be blank or space,Abbr não pode estar em branco ou espaço, -Abbreviation already used for another company,Abreviatura já utilizado para outra empresa, -Abbreviation cannot have more than 5 characters,Abreviatura não pode ter mais de 5 caracteres, -Abbreviation is mandatory,Abreviatura é obrigatória, -About your company,Sobre sua empresa, -Accepted + Rejected Qty must be equal to Received quantity for Item {0},A qtde Aceita + Rejeitada deve ser igual a quantidade recebida para o item {0}, -Access Token,Token de Acesso, -Account Pay Only,Conta somente para pagamento, -Account Type,Tipo de conta, -Account Type for {0} must be {1},O tipo da conta {0} deve ser {1}, -"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","O saldo já está em crédito, você não tem a permissão para definir 'saldo deve ser' como 'débito'", -"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","O saldo já está em débito, você não tem permissão para definir 'saldo deve ser' como 'crédito'", -Account with child nodes cannot be converted to ledger,Contas com nós filhos não podem ser convertidas em um livro-razão, -Account with child nodes cannot be set as ledger,Conta com nós filho não pode ser definido como contabilidade, -Account with existing transaction can not be converted to group.,Contas com a transações existentes não pode ser convertidas em um grupo., -Account with existing transaction can not be deleted,Contas com transações existentes não pode ser excluídas, -Account with existing transaction cannot be converted to ledger,Contas com transações existentes não pode ser convertidas em livro-razão, -Account {0} does not belong to company: {1},A Conta {0} não pertence à Empresa: {1}, -Account {0} does not belongs to company {1},Conta {0} não pertence à empresa {1}, -Account {0} does not exist,A Conta {0} não existe, -Account {0} does not exists,Conta {0} não existe, -Account {0} is frozen,A Conta {0} está congelada, -Account {0} is invalid. Account Currency must be {1},Conta {0} é inválido. Conta de moeda deve ser {1}, -Account {0}: Parent account {1} can not be a ledger,Conta {0}: A Conta Superior {1} não pode ser um livro-razão, -Account {0}: Parent account {1} does not belong to company: {2},Conta {0}: A Conta Superior {1} não pertence à empresa: {2}, -Account {0}: Parent account {1} does not exist,Conta {0}: A Conta Superior {1} não existe, -Account {0}: You can not assign itself as parent account,Conta {0}: Você não pode definir a própria conta como uma conta superior, -Account: {0} can only be updated via Stock Transactions,Conta: {0} só pode ser atualizado via transações de ações, -Account: {0} with currency: {1} can not be selected,A Conta: {0} com moeda: {1} não pode ser selecionada, -Accountant,Contador, -Accounting Entry for Stock,Lançamento Contábil de Estoque, -Accounting Entry for {0}: {1} can only be made in currency: {2},Contabilidade de entrada para {0}: {1} só pode ser feito em moeda: {2}, -Accounting Ledger,Registro Contábil, -Accounting journal entries.,Lançamentos no livro Diário., -Accounts Manager,Gerente de Contas, -Accounts Payable Summary,Resumo do Contas a Pagar, -Accounts Receivable Summary,Resumo do Contas a Receber, -Accounts User,Usuário de Contas, -Accounts table cannot be blank.,Tabela de Contas não pode estar vazia., -Accumulated Depreciation Amount,Total de Depreciação Acumulada, -Activity Cost exists for Employee {0} against Activity Type - {1},Já existe um custo da atividade para o colaborador {0} relacionado ao tipo de atividade - {1}, -Activity Cost per Employee,Custo da Atividade por Colaborador, -Actual Qty,Qtde Real, -Actual Qty is mandatory,Qtde Real é obrigatória, -Actual Qty: Quantity available in the warehouse.,Qtde real: a quantidade disponível em armazém., -Actual qty in stock,Quantidade real em estoque, -Actual type tax cannot be included in Item rate in row {0},Tipo de imposto real não pode ser incluído na tarifa do item na linha {0}, -Add / Edit Prices,Adicionar / Editar preços, -Add Customers,Adicionar Clientes, -Add Employees,Adicionar Colaboradores, -Add Item,Adicionar item, -Add Serial No,Adicionar Serial No, -Add Timesheets,Adicionar Registo de Tempo, -Add the rest of your organization as your users. You can also add invite Customers to your portal by adding them from Contacts,Adicione o resto de sua organização como seus usuários. Você também pode adicionar clientes convidados ao seu portal adicionando-os de Contatos, -Add/Remove Recipients,Adicionar / Remover Destinatários, -Address Line 2,Complemento, -Administrative Officer,Escritório Administrativo, -Advance Amount,Valor Adiantado, -Advance amount cannot be greater than {0} {1},O valor do adiantamento não pode ser maior do que {0} {1}, -Aerospace,Aeroespacial, -Against,Contra, -Against Account,Contra à Conta, -Against Journal Entry {0} does not have any unmatched {1} entry,Contra Journal Entry {0} não tem qualquer {1} entrada incomparável, -Against Journal Entry {0} is already adjusted against some other voucher,Contra Journal Entry {0} já é ajustado contra algum outro comprovante, -Against Supplier Invoice {0} dated {1},Relacionado à nota fiscal do fornecedor nº {0} emitida em {1}, -Against Voucher,Contra o Comprovante, -Against Voucher Type,Contra o Tipo de Comprovante, -Ageing Based On,Envelhecimento Baseado em, -Ageing Range 1,Faixa Envelhecimento 1, -Ageing Range 2,Faixa Envelhecimento 2, -Ageing Range 3,Faixa de Envelhecimento 3, -All BOMs,Todas as LDMs, -All Contacts.,Todos os Contatos., -All Day,O dia todo, -All Jobs,Todos as Tarefas, -All Student Admissions,Todas Admissões de Alunos, -All items have already been transferred for this Work Order.,Todos os itens já foram transferidos para esta Ordem de Trabalho., -All the mandatory Task for employee creation hasn't been done yet.,Todas as Tarefas obrigatórias para criação de colaboradores ainda não foram concluídas., -Allocated Amount,Quantidade atribuída, -Allocated Leaves,Licenças Alocadas, -Allocating leaves...,Alocando licenças..., -Amended From,Corrigido a partir de, -Amount,Total, -Amount to Bill,Valor a ser Faturado, -Amount {0} {1} {2} {3},Total {0} {1} {2} {3}, -Amt,Total, -"An Item Group exists with same name, please change the item name or rename the item group","Um grupo de itens existe com o mesmo nome, por favor, mude o nome do item ou mude o nome do grupo de itens", -"An item exists with same name ({0}), please change the item group name or rename the item","Um item existe com o mesmo nome ( {0}) , por favor, altere o nome do grupo de itens ou renomeie o item", -Annual Billing: {0},Faturamento Anual: {0}, -Another Period Closing Entry {0} has been made after {1},Outra entrada no Período de Encerramento {0} foi feita após {1}, -Another Sales Person {0} exists with the same Employee id,Outro Vendedor {0} existe com o mesmo ID de Colaborador, -Applicable For,Aplicável, -Application of Funds (Assets),Aplicação de Recursos (Ativos), -Application period cannot be outside leave allocation period,Período de aplicação não pode estar fora do período de atribuição de licença, -Apply Now,Aplique agora, -Appointment Confirmation,Confirmação de Compromisso, -Appraisal {0} created for Employee {1} in the given date range,Avaliação {0} criada para o Colaborador {1} no intervalo de datas informado, -Approval Status,Estado da Aprovação, -Approval Status must be 'Approved' or 'Rejected',"Status de Aprovação deve ser ""Aprovado"" ou ""Rejeitado""", -Approving Role cannot be same as role the rule is Applicable To,Perfil Aprovandor não pode ser o mesmo Perfil da regra é aplicável a, -Approving User cannot be same as user the rule is Applicable To,Usuário Aprovador não pode ser o mesmo usuário da regra: é aplicável a, -Arrear,Atrasado, -As On Date,Como na Data, -Asset Category,Categoria de Ativos, -Asset Movement,Movimentação de Ativos, -Asset Movement record {0} created,Registro de Movimentação de Ativos {0} criado, -"Asset cannot be cancelled, as it is already {0}","Activo não podem ser canceladas, como já é {0}", -"Asset {0} cannot be scrapped, as it is already {1}","Activo {0} não pode ser descartado, uma vez que já é {1}", -Asset {0} must be submitted,O Ativo {0} deve ser enviado, -Assign Salary Structure,Atribuir Estrutura Salarial, -Assign To,Atribuir a, -Assign to Employees,Atribuir a Colaboradores, -Assigning Structures...,Atribuir Estruturas..., -Associate,Associado, -Atleast one item should be entered with negative quantity in return document,Pelo menos um item deve ser inserido com quantidade negativa no documento de devolução, -Atleast one of the Selling or Buying must be selected,Pelo menos um dos Vendedores ou Compradores deve ser selecionado, -Atleast one warehouse is mandatory,Pelo menos um armazém é obrigatório, -Attach Logo,Anexar Logo, -Attachment,Anexos, -Attendance,Comparecimento, -Attendance From Date and Attendance To Date is mandatory,Data de Início do Comparecimento e Data Final de Comparecimento é obrigatória, -Attendance can not be marked for future dates,Comparecimento não pode ser marcado para datas futuras, -Attendance date can not be less than employee's joining date,Data de presença não pode ser inferior à data de admissão do colaborador, -Attendance for employee {0} is already marked,Comparecimento para o colaborador {0} já está marcado, -Attendance for employee {0} is already marked for this day,Presença para o colaborador {0} já está registrada para este dia, -Attribute table is mandatory,A tabela de atributos é obrigatório, -Attribute {0} selected multiple times in Attributes Table,Atributo {0} selecionada várias vezes na tabela de atributos, -Auto Material Requests Generated,Requisições de Material Geradas Automaticamente, -Automotive,Automotivo, -Available Leaves,Licenças Disponíveis, -Available Qty,Qtde Disponível, -Avg Daily Outgoing,Média Diária de Saída, -Avg. Buying Price List Rate,Valor médio de lista de preços de compra, -Avg. Selling Price List Rate,Valor médio na lista de preços de venda, -Avg. Selling Rate,Valor Médio de Venda, -BOM Browser,Navegador de LDM, -BOM No,Nº da LDM, -BOM Rate,Valor na LDM, -BOM Stock Report,Relatório de Estoque por LDM, -BOM and Manufacturing Quantity are required,A LDM e a Quantidade para Fabricação são necessários, -BOM does not contain any stock item,LDM não contém nenhum item de estoque, -BOM {0} does not belong to Item {1},A LDM {0} não pertencem ao Item {1}, -BOM {0} must be active,LDM {0} deve ser ativa, -BOM {0} must be submitted,LDM {0} deve ser enviada, -Balance,Balanço, -Balance Qty,Qtde Balanço, -Balance Value,Valor Patrimonial, -Balance for Account {0} must always be {1},Saldo da Conta {0} deve ser sempre {1}, -Bank Draft,Cheque Administrativo, -Bank Entries,Lançamentos do Banco, -Bank Overdraft Account,Conta Bancária Garantida, -Bank Reconciliation,Conciliação bancária, -Bank Reconciliation Statement,Extrato Bancário Conciliado, -Bank Statement balance as per General Ledger,Extrato bancário de acordo com o livro razão, -Bank account cannot be named as {0},A conta bancária não pode ser nomeada como {0}, -Banking,Bancário, -Banking and Payments,Bancos e Pagamentos, -Barcode {0} already used in Item {1},Código de barras {0} já utilizado em item {1}, -Based On,Baseado em, -Batch Inventory,Inventário por Lote, -Batch No,Nº do Lote, -Batch number is mandatory for Item {0},Número do lote é obrigatória para item {0}, -Batch {0} of Item {1} has expired.,Lote {0} de {1} item expirou., -Bill Date,Data de Faturamento, -Bill No,Nota nº, -Billed Amount,Total Faturado, -Billing,Faturamento, -Billing Address,Endereço de Faturamento, -Billing Amount,Total para Faturamento, -Billing Status,Status do Faturamento, -Bills raised by Suppliers.,Faturas emitidas por Fornecedores., -Bills raised to Customers.,Faturas emitidas para Clientes., -Boms,LDMs, -Both Warehouse must belong to same Company,Ambos Armazéns devem pertencer a mesma empresa, -Branch,Ramo, -Broadcasting,Radio-difusão, -Brokerage,Corretagem, -Browse BOM,Navegar LDM, -Budget Variance Report,Relatório de Variação de Orçamento, -Budget cannot be assigned against Group Account {0},Orçamento não pode ser atribuído contra a conta de grupo {0}, -"Budget cannot be assigned against {0}, as it's not an Income or Expense account","Orçamento não pode ser atribuído contra {0}, pois não é uma conta de renda ou despesa", -Buildings,Edifícios, -Bundle items at time of sale.,Empacotar itens no momento da venda., -Business Development Manager,Gerente de Desenvolvimento de Negócios, -Buying,Compras, -Buying Amount,Valor de Compra, -"Buying must be checked, if Applicable For is selected as {0}","Compra deve ser verificada, se for caso disso nos items selecionados como {0}", -C-Form records,Registros C-Form, -C-form is not applicable for Invoice: {0},C-forma não é aplicável para a fatura: {0}, -Calculated Bank Statement balance,Saldo calculado do extrato bancário, -Calls,chamadas, -Can be approved by {0},Pode ser aprovado pelo {0}, -"Can not filter based on Account, if grouped by Account","Não é possível filtrar com base em conta , se agrupados por Conta", -"Can not filter based on Voucher No, if grouped by Voucher","Não é possível filtrar com base no Comprovante Não, se agrupados por voucher", -Can only make payment against unbilled {0},Só pode fazer o pagamento contra a faturar {0}, -Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',Pode se referir linha apenas se o tipo de acusação é 'On Anterior Valor Row ' ou ' Previous Row Total', -Cancel Material Visit {0} before cancelling this Warranty Claim,Anular Material de Visita {0} antes de cancelar esta solicitação de garantia, -Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancelar Materiais Visitas {0} antes de cancelar este Manutenção Visita, -"Cannot Submit, Employees left to mark attendance","Não é possível enviar, colaboradores inativos para marcar presença", -Cannot cancel because submitted Stock Entry {0} exists,Não pode cancelar por causa da entrada submetido {0} existe, -Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.,Não é possível alterar o Ano Fiscal Data de Início e Data de Fim Ano Fiscal uma vez que o Ano Fiscal é salvo., -"Cannot change company's default currency, because there are existing transactions. Transactions must be cancelled to change the default currency.","Não é possível alterar a moeda padrão da empresa, porque existem operações existentes. Transações devem ser canceladas para alterar a moeda padrão.", -Cannot change status as student {0} is linked with student application {1},Não é possível alterar o status pois o aluno {0} está relacionado à candidatura à vaga de estudo {1}, -Cannot convert Cost Center to ledger as it has child nodes,"Não é possível converter Centro de Custo de contabilidade , uma vez que tem nós filhos", -Cannot covert to Group because Account Type is selected.,"Não é possível converter para o Grupo, pois o tipo de conta é selecionado.", -Cannot create Retention Bonus for left Employees,Não é possível criar bônus de retenção para colaboradores inativos, -Cannot create a Delivery Trip from Draft documents.,Você não pode criar uma Viagem de Entrega para documentos em rascunho., -Cannot deactivate or cancel BOM as it is linked with other BOMs,Não é possível desativar ou cancelar BOM vez que está associada com outras BOMs, -"Cannot declare as lost, because Quotation has been made.","Não se pode declarar como perdido , porque foi realizado um Orçamento.", -Cannot deduct when category is for 'Valuation' or 'Valuation and Total',Não pode deduzir quando é para categoria ' Avaliação ' ou ' Avaliação e Total', -"Cannot delete Serial No {0}, as it is used in stock transactions","Não é possível excluir Serial No {0}, como ele é usado em transações de ações", -Cannot enroll more than {0} students for this student group.,Não é possível inscrever mais de {0} alunos neste grupo de alunos., -Cannot produce more Item {0} than Sales Order quantity {1},Não é possível produzir mais item {0} do que a quantidade no Pedido de Venda {1}, -Cannot promote Employee with status Left,Não é possível promover colaboradores com status inativo, -Cannot refer row number greater than or equal to current row number for this Charge type,Não é possível consultar número da linha superior ou igual ao número da linha atual para este tipo de carga, -Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row,"Não é possível selecionar o tipo de carga como "" Valor Em linha anterior ' ou ' On Anterior Row Total ' para a primeira linha", -Cannot set as Lost as Sales Order is made.,Não é possível definir como Perdido uma vez que foi feito um Pedido de Venda, -Cannot set authorization on basis of Discount for {0},Não é possível definir a autorização com base em desconto para {0}, -Cannot transfer Employee with status Left,Não é possível transferir o colaborador com status inativo, -Cannot {0} {1} {2} without any negative outstanding invoice,Não é possível {0} {1} {2} sem qualquer fatura pendente, -Capital Equipments,Bens de Capital, -Cart is Empty,Seu carrinho está vazio, -Case No(s) already in use. Try from Case No {0},Processo n º (s) já está em uso . Tente de Processo n {0}, -Cash,Dinheiro, -Cash Flow Statement,Demonstrativo de Fluxo de Caixa, -Cash In Hand,Dinheiro na Mão, -Cash or Bank Account is mandatory for making payment entry,Dinheiro ou conta bancária é obrigatória para a tomada de entrada de pagamento, -Casual Leave,Licença Casual, -Change Amount,Troco, -Charge of type 'Actual' in row {0} cannot be included in Item Rate,Charge do tipo ' real ' na linha {0} não pode ser incluído no item Taxa, -Charges are updated in Purchase Receipt against each item,Encargos são atualizados em Recibo de compra para cada item, -"Charges will be distributed proportionately based on item qty or amount, as per your selection","Encargos serão distribuídos proporcionalmente com base na qtde de itens ou valor, conforme sua seleção", -Chart of Cost Centers,Plano de Centros de Custo, -Check all,Marcar todos, -Checkout,Finalizar Compra, -Chemical,Químico, -Cheques and Deposits incorrectly cleared,Cheques e depósitos apagados incorretamente, -City/Town,Cidade / Município, -Clear filters,Remover Filtros, -Clearance Date,Data de Liberação, -Clearance Date not mentioned,Apuramento data não mencionada, -Close Balance Sheet and book Profit or Loss.,Fechar Balanço e livro ou perda ., -Closed order cannot be cancelled. Unclose to cancel.,ordem fechada não pode ser cancelada. Unclose para cancelar., -Closing (Cr),Fechamento (Cr), -Closing (Dr),Fechamento (Dr), -Closing Account {0} must be of type Liability / Equity,Fechando Conta {0} deve ser do tipo de responsabilidade / Patrimônio Líquido, -Commission rate cannot be greater than 100,Percentual de comissão não pode ser maior do que 100, -Community Forum,Forum da Comunidade, -Company (not Customer or Supplier) master.,"Cadastro da Empresa (a própria companhia, não se refere ao cliente, nem ao fornecedor)", -Company Abbreviation,Sigla da Empresa, -Company Name cannot be Company,Nome da empresa não pode ser empresa, -Compensatory Off,Saída Compensatória, -Confirmed orders from Customers.,Pedidos confirmados de clientes., -Consumed Amount,Quantidade Consumida, -Consumed Qty,Qtde Consumida, -Consumer Products,Produtos para o Consumidor, -Contact,Contato, -Contact Details,Detalhes do Contato, -Contact Number,Telefone para Contato, -Contract End Date must be greater than Date of Joining,Data de Encerramento do Contrato deve ser maior que Data de Inicio, -Contribution %,Contribuição%, -Contribution Amount,Contribuição Total, -Conversion factor for default Unit of Measure must be 1 in row {0},Fator de conversão de unidade de medida padrão deve ser 1 na linha {0}, -Convert to Group,Converter em Grupo, -Convert to Non-Group,Converter para Não-Grupo, -Cost Center is required in row {0} in Taxes table for type {1},Centro de Custo é necessária na linha {0} no Imposto de mesa para o tipo {1}, -Cost Center with existing transactions can not be converted to group,Centro de custo com as operações existentes não podem ser convertidos em grupo, -Cost Center with existing transactions can not be converted to ledger,Centro de custo com as operações existentes não podem ser convertidos em registro, -Cost of Delivered Items,Custo de Produtos Entregues, -Cost of Issued Items,Custo dos Produtos Enviados, -Cost of New Purchase,Custo da Nova Compra, -Cost of Purchased Items,Custo de Produtos Comprados, -Cost of Scrapped Asset,Custo do Ativo Sucateado, -Cost of various activities,Custo das diferentes actividades, -"Could not update stock, invoice contains drop shipping item.","Não foi possível atualizar estoque, fatura contém gota artigo do transporte.", -Country wise default Address Templates,Modelos de Endereços Padronizados por País, -Course Schedule,Agenda do Curso, -Create Delivery Trip,Criar Viagem de Entrega, -Create Employee Records,Criar registros de colaboradores, -"Create Employee records to manage leaves, expense claims and payroll","Criar registos de colaboradores para gerir faltas, declarações de despesas e folha de salários", -Create Purchase Orders,Criar Pedidos de Compra, -Create Quotation,Criar Orçamento, -Create Salary Slip,Criar Folha de Pagamento, -Create Student Groups,Criar Grupos de Alunos, -Create User,Criar Usuário, -Create Users,Criar Usuários, -"Create and manage daily, weekly and monthly email digests.","Cria e configura as regras de recebimento de emails, como diário, semanal ou mensal.", -Create customer quotes,Criar orçamentos de clientes, -Create rules to restrict transactions based on values.,Criar regras para restringir operações com base em valores., -Creating {0} Invoice,Criando Fatura de {0}, -Credit Balance,Saldo Credor, -Credit Note Issued,Nota de Crédito Emitida, -Currency can not be changed after making entries using some other currency,Moeda não pode ser alterada depois de fazer entradas usando alguma outra moeda, -Currency exchange rate master.,Cadastro de Taxa de Câmbio, -Currency is required for Price List {0},É necessário informar a Moeda na Lista de Preço {0}, -Currency of the Closing Account must be {0},Moeda da Conta de encerramento deve ser {0}, -Current Assets,Ativo Circulante, -Current BOM and New BOM can not be same,A LDM Atual e a Nova LDM não podem ser as mesmas, -Current Job Openings,Vagas Disponíveis Atualmente, -Current Liabilities,Passivo Circulante, -Current Qty,Qtde atual, -Custom HTML,HTML Personalizado, -Customer Addresses And Contacts,Endereços e Contatos do Cliente, -Customer Database.,Banco de Dados de Clientes, -Customer Service,Atendimento ao Cliente, -Customer is required,O Cliente é obrigatório, -Customer required for 'Customerwise Discount',Necessário para ' Customerwise Discount ' Cliente, -Customer {0} does not belong to project {1},Cliente {0} não pertence ao projeto {1}, -Customer {0} is created.,O cliente {0} foi criado., -Customers in Queue,Clientes na Fila, -Daily Work Summary,Resumo de Trabalho Diário, -Data Import and Export,Importação e Exportação de Dados, -Database of potential customers.,Banco de dados de clientes potenciais., -Date Format,Formato da data, -Date Of Retirement must be greater than Date of Joining,Data da aposentadoria deve ser maior que Data de Contratação, -Date is repeated,Data é repetida, -Date of Birth cannot be greater than today.,Data de nascimento não pode ser maior do que hoje., -Date of Joining,Data da Contratação, -Date of Joining must be greater than Date of Birth,Data de Contratação deve ser maior do que a Data de Nascimento, -Debit To is required,Para Débito é necessária, -Debit and Credit not equal for {0} #{1}. Difference is {2}.,O Débito e Crédito não são iguais para {0} # {1}. A diferença é de {2}., -Default Activity Cost exists for Activity Type - {0},Existe Atividade Custo Padrão para o Tipo de Atividade - {0}, -Default BOM ({0}) must be active for this item or its template,LDM Padrão ({0}) precisa estar ativo para este item ou o seu modelo, -Default Letter Head,Cabeçalho Padrão, -Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.,Unidade de medida padrão para item {0} não pode ser alterado diretamente porque você já fez alguma transação (s) com outra Unidade de Medida. Você precisará criar um novo item para usar uma Unidade de Medida padrão diferente., -Default Unit of Measure for Variant '{0}' must be same as in Template '{1}',A unidade de medida padrão para a variante '{0}' deve ser o mesmo que no modelo '{1}', -Default settings for buying transactions.,As configurações padrão para a compra de transações., -Default settings for selling transactions.,Configuração padrão para transações de vendas., -Define Project type.,Defina tipo de projeto., -Define budget for a financial year.,Defina orçamento para um ano fiscal., -Define various loan types,Defina vários tipos de empréstimos, -Delay in payment (Days),Atraso no Pagamento (Dias), -Delete all the Transactions for this Company,Apagar todas as transações para esta empresa, -Delivered Amount,Quantia entregue, -Delivered Qty,Qtde Entregue, -Delivery Notes {0} must be cancelled before cancelling this Sales Order,A Guia de Remessa {0} deve ser cancelada antes de cancelar este Pedido de Venda, -Delivery Status,Status da Entrega, -Delivery Trip,Viagem de Entrega, -Delivery warehouse required for stock item {0},Armazén de entrega necessário para item do estoque {0}, -Department Stores,Lojas de Departamento, -Depreciation Amount,Valor de Depreciação, -Depreciation Amount during the period,Total de Depreciação durante o período, -Depreciation Date,Data da Depreciação, -Depreciation Entry,Lançamento de Depreciação, -Details,Detalhes, -Details of the operations carried out.,Os detalhes das operações realizadas., -Did not find any item called {0},Não havia nenhuma item chamado {0}, -Difference Account,Conta Diferença, -"Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry","Conta diferença deve ser uma conta de tipo ativo / passivo, uma vez que este da reconciliação é uma entrada de Abertura", -Difference Amount,Total da diferença, -Difference Amount must be zero,O Valor da Diferença deve ser zero, -Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM.,UDM diferente para itens gerará um Peso Líquido (Total ) incorreto. Certifique-se de que o peso líquido de cada item está na mesma UDM., -Direct Income,Receita Direta, -Disabled template must not be default template,O modelo desativado não pode ser o modelo padrão, -Discount Percentage can be applied either against a Price List or for all Price List.,Percentual de desconto pode ser aplicado contra uma lista de preços ou para todos Lista de Preços., -Discount must be less than 100,Desconto deve ser inferior a 100, -Do you really want to restore this scrapped asset?,Você realmente deseja restaurar este ativo descartado?, -Do you really want to scrap this asset?,Você realmente quer se desfazer deste ativo?, -Doc Name,Nome do Documento, -Doc Type,Tipo do Documento, -Document Name,Nome do documento, -Drop Ship,Drop Ship, -Due / Reference Date cannot be after {0},Vencimento / Data de Referência não pode ser depois de {0}, -Due Date cannot be before Posting / Supplier Invoice Date,A Data de Vencimento não pode ser anterior à Data do Recibo / Postagem, -Due Date is mandatory,A data de vencimento é obrigatória, -Duplicate Entry. Please check Authorization Rule {0},"Duplicar entrada . Por favor, verifique Regra de Autorização {0}", -Duplicate Serial No entered for Item {0},Duplicar Serial Não entrou para item {0}, -Duplicate entry,Duplicar lançamento, -Duties and Taxes,Impostos e Contribuições, -ERPNext Demo,Demo do ERPNext, -Earliest,Mais antigas, -Earnest Money,Sinal/Garantia em Dinheiro, -Earning,Ganho, -Either location or employee must be required,Qualquer local ou colaborador é obrigatório, -Either target qty or target amount is mandatory,Meta de qtde ou valor da meta são obrigatórios, -Either target qty or target amount is mandatory.,Meta de qtde ou valor da meta são obrigatórios., -Electrical,elétrico, -Electronics,eletrônica, -Email Digest: ,Resumo por Email:, -Email Sent,Email enviado, -Employee,Colaborador, -Employee Advances,Adiantamentos do Colaborador, -Employee Benefits,Benefícios a Colaboradores, -Employee Grade,Classe de Colaborador, -Employee Lifecycle,Ciclo de Vida do Colaborador, -Employee Name,Nome do Colaborador, -Employee Promotion cannot be submitted before Promotion Date ,A promoção de colaboradores não pode ser enviada antes da data da promoção, -Employee Referral,Referência do Colaborador, -Employee Transfer cannot be submitted before Transfer Date ,Transferência de Colaboradores não pode ser submetida antes da Data de Transferência, -Employee cannot report to himself.,Colaborador não pode denunciar a si mesmo., -Employee relieved on {0} must be set as 'Left',Colaborador dispensado em {0} deve ser definido como 'Desligamento', -Employee {0} already submited an apllication {1} for the payroll period {2},O colaborador {0} já enviou uma aplicação {1} para o período da folha de pagamento {2}, -Employee {0} has already applied for {1} between {2} and {3} : ,O colaborador {0} já aplicou {1} entre {2} e {3}:, -Employee {0} has no maximum benefit amount,Colaborador {0} não tem valor de benefício máximo, -Employee {0} is not active or does not exist,Colaborador {0} não está ativo ou não existe, -Employee {0} is on Leave on {1},Colaborador {0} está de licença em {1}, -Employee {0} of grade {1} have no default leave policy,Colaborador {0} da classe {1} não tem política de licença padrão, -Employee {0} on Half day on {1},Colaborador {0} em meio período em {1}, -Enable,Permitir, -Enable / disable currencies.,Ativar / Desativar moedas., -Enabled,Habilitado, -End Date,Data Final, -End Year,Ano Final, -End Year cannot be before Start Year,O ano final não pode ser antes do ano de início, -Enough Parts to Build,Peças suficientes para construir, -Entertainment & Leisure,Entretenimento & Lazer, -Entertainment Expenses,Despesas com Entretenimento, -Equity,Patrimônio Líquido, -Error Log,Log de Erro, -Error: Not a valid id?,Erro: Não é um ID válido?, -"Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:","Mesmo se houver várias regras de preços com maior prioridade, então seguintes prioridades internas são aplicadas:", -Exchange Gain/Loss,Ganho/Perda com Câmbio, -Exchange Rate must be same as {0} {1} ({2}),Taxa de câmbio deve ser o mesmo que {0} {1} ({2}), -Excise Invoice,Guia de Recolhimento de Tributos, -Executive Search,Executive Search, -Expected Delivery Date,Data Prevista de Entrega, -Expected End Date,Data Prevista de Término, -Expected Start Date,Data Prevista de Início, -Expense / Difference account ({0}) must be a 'Profit or Loss' account,Despesa conta / Diferença ({0}) deve ser um 'resultados' conta, -Expense Claim,Pedido de Reembolso de Despesas, -Expense Claim for Vehicle Log {0},Reembolso de Despesa para o Log do Veículo {0}, -Expense Claims,Relatórios de Despesas, -Expense account is mandatory for item {0},Conta de despesa é obrigatória para item {0}, -Expenses Included In Valuation,Despesas Incluídas na Avaliação, -Expiry (In Days),Vencimento (em dias), -Extra Large,Extra Grande, -Extra Small,Muito Pequeno, -Fee Records Created - {0},Registos de Taxas Criados - {0}, -Fees,Taxas, -Fetch exploded BOM (including sub-assemblies),Buscar LDM explodida (incluindo sub-conjuntos ), -Fieldname,Nome do Campo, -Fill the form and save it,Preencha o formulário e salve, -Filter Employees By (Optional),Filtrar Colaboradores por (opcional), -Financial / accounting year.,Ano Financeiro / Exercício., -Financial Statements,Relatórios Financeiros, -Finish,Finalizar, -Finished Item {0} must be entered for Manufacture type entry,O Item finalizado {0} deve ser digitado para a o lançamento de tipo de fabricação, -Fiscal Year,Exercício Fiscal, -Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0},Ano Fiscal Data de Início e Término do Exercício Social Data já estão definidos no ano fiscal de {0}, -Fiscal Year {0} does not exist,Ano Fiscal {0} não existe, -Fiscal Year {0} is required,Ano Fiscal {0} é necessário, -Fixed Asset,Ativo Imobilizado, -Following Material Requests have been raised automatically based on Item's re-order level,As seguintes Requisições de Material foram criadas automaticamente com base no nível de reposição do item, -Food,Alimentos, -"Food, Beverage & Tobacco","Alimentos, Bebidas e Fumo", -"For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.","Para os itens do ""pacote de produtos"", o armazém, número serial e número do lote serão considerados a partir da ""Lista de Embalagem"". Se o armazém e o número do lote são as mesmas para todos os itens do pacote de produtos, esses valores podem ser inseridos na tabela do item principal, os valores serão copiados para a ""Lista de Embalagem"".", -For Employee,Para o Colaborador, -For Quantity (Manufactured Qty) is mandatory,Para Quantidade (qtde fabricada) é obrigatório, -For Supplier,Para Fornecedor, -For Warehouse,Para Armazén, -For Warehouse is required before Submit,Armazén de destino necessário antes de enviar, -"For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included","Para linha {0} em {1}. Para incluir {2} na taxa de Item, linhas {3} também devem ser incluídos", -"For {0}, only credit accounts can be linked against another debit entry","Por {0}, apenas as contas de crédito pode ser ligado contra outro lançamento de débito", -"For {0}, only debit accounts can be linked against another credit entry","Por {0}, apenas as contas de débito pode ser ligado contra outra entrada crédito", -Freight and Forwarding Charges,Frete e Encargos de Envio, -From Currency and To Currency cannot be same,De Moeda e Para Moeda não pode ser o mesmo, -From Date cannot be greater than To Date,A partir de data não pode ser maior que a Data, -From Date must be before To Date,A data inicial deve ser anterior a data final, -From Date should be within the Fiscal Year. Assuming From Date = {0},A partir de data deve estar dentro do ano fiscal. Assumindo De Date = {0}, -From Date {0} cannot be after employee's relieving Date {1},A partir da data {0} não pode ser após a data de desligamento do colaborador {1}, -From Date {0} cannot be before employee's joining Date {1},A partir da data {0} não pode ser anterior à data de admissão do colaborador {1}, -From Datetime,A partir da data e hora, -From Delivery Note,De Nota de Entrega, -From Range has to be less than To Range,De Gama tem de ser inferior à gama, -From Time,Do Horário, -From and To dates required,De e datas necessárias, -From date can not be less than employee's joining date,A partir da data não pode ser menor do que a data de ingresso do colaborador, -From value must be less than to value in row {0},Do valor deve ser menor do que o valor na linha {0}, -From {0} | {1} {2},A partir de {0} | {1} {2}, -Fuel Price,Preço do Combustível, -Fuel Qty,Qtde de Combustível, -Fulfillment,Realização, -Fully Depreciated,Depreciados Totalmente, -"Further accounts can be made under Groups, but entries can be made against non-Groups","Outras contas podem ser feitas em Grupos, mas as entradas podem ser feitas contra os Não-Grupos", -Further cost centers can be made under Groups but entries can be made against non-Groups,"Mais centros de custo podem ser feitos em grupos, mas as entradas podem ser feitas contra os Não-Grupos", -Further nodes can be only created under 'Group' type nodes,"Outros nós só podem ser criados dentro dos nós do tipo ""grupo""", -Gain/Loss on Asset Disposal,Ganho/Perda no Descarte de Ativo, -Gantt chart of all tasks.,Gráfico de Gantt de todas as tarefas., -General Ledger,Livro Razão, -Get Employees,Obter Colaboradores, -Get Items from Product Bundle,Obter Itens do Pacote de Produtos, -Get Updates,Receber notícias, -Global settings for all manufacturing processes.,Configurações Globais para todos os processos de fabricação., -Go to the Desktop and start using ERPNext,Vá para o ambiente de trabalho e começar a usar ERPNext, -Goals cannot be empty,Objetivos não podem estar em branco, -Grant Leaves,Conceder Licenças, -Gross Profit %,Lucro Bruto %, -Gross Profit / Loss,Lucro / Prejuízo Bruto, -Gross Purchase Amount,Valor Bruto de Compra, -Gross Purchase Amount is mandatory,Valor Bruto de Compra é obrigatório, -Group by Voucher,Agrupar por Comprovante, -Group to Non-Group,Grupo para Não-Grupo, -Guardian1 Mobile No,Número do Celular do Guardian1, -Guardian2 Mobile No,Número do Celular do Guardian2, -HR Manager,Gerente de RH, -Half Day,Meio Período, -Half Yearly,Semestral, -Hardware,Ferramentas, -Health Care,Plano de Saúde, -Healthcare,Serviço de Saúde, -Healthcare (beta),Serviço de Saúde (beta), -Healthcare Settings,Configurações de Serviço de Saúde, -High,Alta, -Hold,Segurar, -Holiday,Feriado, -How Pricing Rule is applied?,Como regra de preços é aplicada?, -"If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.","Se várias regras de preços continuam a prevalecer, os usuários são convidados a definir a prioridade manualmente para resolver o conflito.", -"If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.","Se duas ou mais regras de preços são encontrados com base nas condições acima, a prioridade é aplicada. Prioridade é um número entre 0 a 20, enquanto o valor padrão é zero (em branco). Número maior significa que ele terá prioridade se houver várias regras de preços com as mesmas condições.", -"If you have any questions, please get back to us.","Se você tem alguma pergunta, por favor nos contate.", -Image View,Ver Imagem, -Import Log,Log de Importação, -In Qty,Qtde Entrada, -In Stock Qty,Quantidade no Estoque, -In Stock: ,No Estoque:, -In Value,Valor Entrada, -Income,Receita, -Income Account,Conta de Receitas, -Income Tax,Imposto de Renda, -Incoming Rate,Valor de Entrada, -Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction.,Número incorreto de General Ledger Entries encontrado. Talvez você tenha selecionado uma conta de errado na transação., -Increment cannot be 0,Incremento não pode ser 0, -Increment for Attribute {0} cannot be 0,Atributo incremento para {0} não pode ser 0, -Indirect Income,Receita Indireta, -Individual,Pessoa Física, -Initiated,Iniciada, -Inpatient Record,Registro de Internação, -Insert,Insert, -Installation date cannot be before delivery date for Item {0},Data de instalação não pode ser anterior à data de entrega de item {0}, -Insufficient Stock,Estoque Insuficiente, -Insurance Start date should be less than Insurance End date,A data de início da cobertura do seguro deve ser inferior a data de término da cobertura, -Intern,internar, -Internet Publishing,Publishing Internet, -Invalid Blanket Order for the selected Customer and Item,Pedido Limitado inválido para o cliente e item selecionados, -Invalid quantity specified for item {0}. Quantity should be greater than 0.,Quantidade inválido especificado para o item {0} . Quantidade deve ser maior do que 0 ., -Investment Banking,Investimento Bancário, -Invoice Posting Date,Data do Lançamento da Fatura, -Invoiced,Faturado, -Invoiced Amount,Valor Faturado, -Is Active,É Ativo, -Is Existing Asset,É Ativo Existente, -Issue Material,Saída de Material, -Issues,Incidentes, -It is needed to fetch Item Details.,Isto é necessário para buscar detalhes de itens, -Item 1,Número 1, -Item 2,Número 2, -Item 5,O item 5, -Item Code cannot be changed for Serial No.,Código do item não pode ser alterado para o nº de série., -Item Code required at Row No {0},Código do item exigido na Linha Nº {0}, -Item Group,Grupo de Itens, -Item Group Tree,Árvore de Grupos do Item, -Item Group not mentioned in item master for item {0},Grupo item não mencionado no mestre de item para item {0}, -Item Price added for {0} in Price List {1},Item Preço adicionada para {0} na lista de preços {1}, -Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,Item Imposto Row {0} deve ter em conta tipo de imposto ou de renda ou de despesa ou carregável, -Item Variant {0} already exists with same attributes,Variant item {0} já existe com mesmos atributos, -Item Variants,Variantes dos Itens, -Item has variants.,Item tem variantes., -Item must be added using 'Get Items from Purchase Receipts' button,"O artigo deve ser adicionado usando ""Obter itens de recibos de compra 'botão", -Item valuation rate is recalculated considering landed cost voucher amount,A taxa de avaliação é recalculada considerando o valor do comprovante do custo total do item no destino (CIF), -Item variant {0} exists with same attributes,Variante item {0} existe com os mesmos atributos, -Item {0} does not exist,Item {0} não existe, -Item {0} does not exist in the system or has expired,Item {0} não existe no sistema ou expirou, -Item {0} has already been returned,Item {0} já foi devolvido, -Item {0} has been disabled,Item {0} foi desativado, -Item {0} has reached its end of life on {1},Item {0} chegou ao fim da vida em {1}, -Item {0} ignored since it is not a stock item,Item {0} ignorado uma vez que não é um item de estoque, -"Item {0} is a template, please select one of its variants","Item {0} é um modelo, por favor selecione uma de suas variantes", -Item {0} is cancelled,Item {0} é cancelada, -Item {0} is disabled,Item {0} está desativado, -Item {0} is not a serialized Item,Item {0} não é um item serializado, -Item {0} is not a stock Item,Item {0} não é um item de estoque, -Item {0} is not active or end of life has been reached,Item {0} não está ativo ou fim de vida útil foi atingido, -Item {0} is not setup for Serial Nos. Check Item master,"Item {0} não está configurado para nºs de série mestre, verifique o cadastro do item", -Item {0} is not setup for Serial Nos. Column must be blank,Item {0} não está configurado para Serial Coluna N º s deve estar em branco, -Item {0} must be a Sub-contracted Item,Item {0} deve ser um item do sub- contratados, -Item {0} must be a non-stock item,Item {0} deve ser um item não inventariado, -Item {0} must be a stock Item,Item {0} deve ser um item de estoque, -Item {0} not found,Item {0} não foi encontrado, -Item {0} not found in 'Raw Materials Supplied' table in Purchase Order {1},"Item {0} não encontrado em 'matérias-primas fornecidas"" na tabela Pedido de Compra {1}", -Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item).,Item {0}: Qtde pedida {1} não pode ser inferior a qtde mínima de pedido {2} (definido no cadastro do Item)., -Item: {0} does not exist in the system,Item: {0} não existe no sistema, -Job Description,Descrição da Vaga, -Jobs,Tarefas, -Join,Junte-se, -Journal Entries {0} are un-linked,Lançamentos no Livro Diário {0} são desvinculados, -Journal Entry,Lançamento no Livro Diário, -Journal Entry {0} does not have account {1} or already matched against other voucher,Lançamento no Livro Diário {0} não tem conta {1} ou já conciliado com outro comprovante, -Kanban Board,Painel Kanban, -Label,Etiqueta, -Last Communication,Último Contato, -Last Communication Date,Data do Último Contato, -Last Order Amount,Valor do último pedido, -Last Purchase Rate,Valor da Última Compra, -Latest,Mais recentes, -Latest price updated in all BOMs,Preço mais recente atualizado em todas as LDMs, -Lead,Lead, -Lead Count,Contagem de Leads, -Lead Owner,Proprietário do Lead, -Lead Owner cannot be same as the Lead,O Dono do Lead não pode ser o mesmo que o próprio Lead, -Lead Time Days,Prazo de Entrega (em dias), -Lead to Quotation,Fazer um Orçamento, -Leave Blocked,Licenças Bloqueadas, -Leave Encashment,Pagamento da Saída, -Leave Type,Tipo de Afastamento, -Leave Type {0} cannot be carry-forwarded,Deixe tipo {0} não pode ser encaminhado carry-, -Leave Without Pay,Licença não remunerada, -"Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","A licença não pode ser alocado antes de {0}, uma vez que o saldo de licenças foi carregado para futuras alocações de licença {1}", -"Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","A licença não pode ser aplicada / cancelada antes de {0}, uma vez que o saldo de licenças foi carregado para futuras solicitações de licença {1}", -Leave of type {0} cannot be longer than {1},Deixar do tipo {0} não pode ser maior que {1}, -Leaves Allocated Successfully for {0},Licenças atribuídas com sucesso para {0}, -Leaves has been granted sucessfully,Licenças foram concedidas com sucesso, -Leaves must be allocated in multiples of 0.5,"Licenças devem ser alocadas em múltiplos de 0,5", -Leaves per Year,Licenças por ano, -Ledger,Livro Razão, -Legal,Legal, -Letter Head,Timbrado, -Letter Heads for print templates.,Cabeçalhos para modelos de impressão., -Liability,Passivo, -Loan Repayment,Pagamento do empréstimo, -Logs for maintaining sms delivery status,Logs para a manutenção de status de entrega sms, -Low,Baixa, -Lower Income,Baixa Renda, -Loyalty Amount,Pontuação no Programa de Fidelidade, -Loyalty Point Entry,Lançamento de Pontuação no Programa de Fidelidade, -Loyalty Program,Programa de Fidelidade, -Maintenance Manager,Gerente de Manutenção, -Maintenance Schedule,Programação da Manutenção, -Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',"Programação de manutenção não é gerada para todos os itens. Por favor, clique em ""Gerar Agenda""", -Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,Programação de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda, -Maintenance User,Usuário da Manutenção, -Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Visita de Manutenção {0} deve ser cancelada antes de cancelar este Pedido de Venda, -Maintenance start date can not be before delivery date for Serial No {0},Manutenção data de início não pode ser anterior à data de entrega para Serial Não {0}, -Make,Fazer, -Make Payment,Fazer Pagamento, -Making Stock Entries,Fazendo Lançamentos no Estoque, -Manage Customer Group Tree.,Gerenciar grupos de clientes, -Manage Sales Partners.,Gerenciar parceiros de vendas., -Manage Sales Person Tree.,Gerenciar vendedores, -Manage Territory Tree.,Gerenciar territórios, -Manage your orders,Gerir seus pedidos, -Manager,Gerente, -Managing Projects,Gerenciamento de Projetos, -Managing Subcontracting,Gerenciando Subcontratação, -Manufacture,Fabricação, -Manufacturer Part Number,Número de Peça do Fabricante, -Manufacturing,Fabricação, -Manufacturing Quantity is mandatory,Quantidade de Fabricação é obrigatória, -Mark Absent,Marcar Ausente, -Mark Attendance,Marcar Presença, -Mark Half Day,Marcar Meio Período, -Marketing,marketing, -Marketing Expenses,Despesas com Marketing, -Masters,Cadastros, -Match Payments with Invoices,Conciliação de Pagamentos, -Match non-linked Invoices and Payments.,Combinar Faturas e Pagamentos não relacionados., -Material Consumption is not set in Manufacturing Settings.,O Consumo de Material não está configurado nas Configurações de Fabricação., -Material Receipt,Entrada de Material, -Material Request,Requisição de Material, -Material Request Date,Data da Requisição de Material, -Material Request of maximum {0} can be made for Item {1} against Sales Order {2},Requisição de Material de no máximo {0} pode ser feita para item {1} relacionado à ordem de venda {2}, -Material Request to Purchase Order,Requisição de Material para Pedido de Compra, -Material Request {0} is cancelled or stopped,Requisição de Material {0} é cancelada ou parada, -Material to Supplier,Material a Fornecedor, -Max discount allowed for item: {0} is {1}%,Max desconto permitido para o item: {0} é {1}%, -Max: {0},Max: {0}, -Maximum benefit amount of employee {0} exceeds {1},O valor máximo de benefício do colaborador {0} excede {1}, -Medical,Médico, -Medium,Média, -"Merging is only possible if following properties are same in both records. Is Group, Root Type, Company","A fusão só é possível se seguintes propriedades são as mesmas em ambos os registros. É Group, tipo de raiz, Company", -Middle Income,Média Renda, -Min Qty can not be greater than Max Qty,Qtde mínima não pode ser maior do que qtde máxima, -Minimum Lead Age (Days),Tempo de Cadastro Mínimo do Lead (dias), -Missing Currency Exchange Rates for {0},Faltando taxas de câmbio para {0}, -More Information,Mais Informações, -Motion Picture & Video,Motion Picture & Video, -Multi Currency,Multi moeda, -Multiple Item prices.,Vários preços do item., -"Multiple Price Rules exists with same criteria, please resolve conflict by assigning priority. Price Rules: {0}","Várias regras de preços existe com os mesmos critérios, por favor, resolver o conflito através da atribuição de prioridade. Regras Preço: {0}", -Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year,"Vários anos fiscais existem para a data {0}. Por favor, defina empresa no ano fiscal", -Name of new Account. Note: Please don't create accounts for Customers and Suppliers,"Nome da nova conta. Nota: Por favor, não criar contas para Clientes e Fornecedores", -Name or Email is mandatory,Nome ou email é obrigatório, -Negative Quantity is not allowed,Negativo Quantidade não é permitido, -Negative Valuation Rate is not allowed,Taxa de Avaliação negativa não é permitida, -Net Change in Cash,Variação Líquida em Dinheiro, -Net Change in Equity,Mudança no Patrimônio Líquido, -Net Change in Fixed Asset,Variação Líquida do Ativo Imobilizado, -Net Pay,Pagamento Líquido, -Net pay cannot be negative,Salário líquido não pode ser negativo, -New Account Name,Nome da Nova Conta, -New Company,Criar Empresa, -New Cost Center Name,Novo Centro de Custo Nome, -New Customer Revenue,Receita com novos clientes, -New Customers,Clientes Novos, -New Employee,Novo Colaborador, -New Quality Procedure,Novo Procedimento de Qualidade, -New Sales Person Name,Nome do Novo Vendedor, -New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt,"New Serial Não, não pode ter Warehouse. Warehouse deve ser definida pelo Banco de entrada ou Recibo de compra", -New Warehouse Name,Nome do Novo Armazén, -New credit limit is less than current outstanding amount for the customer. Credit limit has to be atleast {0},Novo limite de crédito é inferior ao saldo devedor atual do cliente. O limite de crédito deve ser de pelo menos {0}, -New task,Nova Tarefa, -Newspaper Publishers,Editor de Newsletter, -Next,Próximo, -Next Contact By cannot be same as the Lead Email Address,O responsável pelo Próximo Contato não pode ser o mesmo que o Endereço de Email do Lead, -Next Contact Date cannot be in the past,A Próxima Data de Contato não pode ocorrer no passado, -No Item with Barcode {0},Nenhum artigo com código de barras {0}, -No Item with Serial No {0},Nenhum Item com Nº de Série {0}, -No Items to pack,Nenhum item para embalar, -No Items with Bill of Materials to Manufacture,Não há itens com Lista de Materiais para Fabricação, -No Permission,Nenhuma permissão, -No Salary Structure assigned for Employee {0} on given date {1},Nenhuma estrutura salarial atribuída para o colaborador {0} em determinada data {1}, -No Student Groups created.,Não foi criado nenhum grupo de alunos., -No Work Orders created,Nenhuma Ordem de Trabalho criada, -No accounting entries for the following warehouses,Nenhuma entrada de contabilidade para os seguintes armazéns, -No active or default Salary Structure found for employee {0} for the given dates,Não foi encontrada nenhuma Estrutura Salarial padrão ativa para o colaborador {0} ou para as datas indicadas, -No description given,Nenhuma descrição informada, -No employees for the mentioned criteria,Nenhum colaborador pelos critérios mencionados, -No more updates,Nenhum update, -No record found,Nenhum registro encontrado, -No records found in the Invoice table,Nenhum registro encontrado na tabela de fatura, -No records found in the Payment table,Nenhum registro encontrado na tabela de pagamento, -No time sheets,Não há registros de tempo, -Non-Group to Group,Não-Grupo para Grupo, -None of the items have any change in quantity or value.,Nenhum dos itens tiver qualquer mudança na quantidade ou valor., -Nos,Nos, -Not Available,não disponível, -Not active,Inativo, -Not allowed to update stock transactions older than {0},Não é permitido atualizar transações com movimentos mais antigos do que {0} dias, -Not authorized to edit frozen Account {0},Não autorizado para editar conta congelada {0}, -Not authroized since {0} exceeds limits,Não authroized desde {0} excede os limites, -Not permitted for {0},Não permitido para {0}, -Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),Observação: Devido / Data de referência excede dias de crédito de cliente permitido por {0} dia(s), -Note: Item {0} entered multiple times,Observação: O Item {0} foi inserido mais de uma vez, -Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,Nota: Entrada pagamento não será criado desde 'Cash ou conta bancária ' não foi especificado, -Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0,Nota : O sistema não irá verificar o excesso de entrega e sobre- reserva para item {0} como quantidade ou valor é 0, -Note: There is not enough leave balance for Leave Type {0},Nota: Não é suficiente equilíbrio pela licença Tipo {0}, -Note: This Cost Center is a Group. Cannot make accounting entries against groups.,Nota: Este Centro de Custo é um grupo . Não pode fazer lançamentos contábeis contra grupos ., -Note: {0},Observação: {0}, -Notice Period,Período de Aviso Prévio, -Number of Order,Número de pedidos, -Odometer,Odômetro, -Office Maintenance Expenses,Despesas com Manutenção de Escritório, -Office Rent,Aluguel do Escritório, -Only Leave Applications with status 'Approved' and 'Rejected' can be submitted,"Somente pedidos de licença com o status ""Aprovado"" ou ""Rejeitado"" podem ser enviados", -Open BOM {0},Abrir LDM {0}, -Open Item {0},Abrir Item {0}, -Opening,Abertura, -Opening (Cr),Abertura (Cr), -Opening (Dr),Abertura (Dr), -Opening Accounting Balance,Saldo de Abertura da Conta, -Opening Balance Equity,Saldo de Abertura do Patrimônio Líquido, -Opening Date and Closing Date should be within same Fiscal Year,Abertura Data e Data de Fechamento deve estar dentro mesmo ano fiscal, -Opening Date should be before Closing Date,Data de Abertura deve ser antes da Data de Fechamento, -Opening Qty,Qtde Abertura, -Opening Stock,Abertura de Estoque, -Opening Stock Balance,Saldo de Abertura do Estoque, -Opening Value,Valor de Abertura, -Operation Time must be greater than 0 for Operation {0},Tempo de Operação deve ser maior que 0 para a operação {0}, -"Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Operação {0} mais do que as horas de trabalho disponíveis na estação de trabalho {1}, quebrar a operação em várias operações", -Opp Count,Nº de Oportunidades, -Opp/Lead %,Oportunidade / Lead %, -Opportunities by lead source,Oportunidades por origem do lead, -"Optional. Sets company's default currency, if not specified.","Opcional. Define moeda padrão da empresa, se não for especificado.", -Optional. This setting will be used to filter in various transactions.,Opcional . Esta configuração será usada para filtrar em várias transações., -Order/Quot %,Pedido / Orçamentos %, -Ordered Qty,Qtde Encomendada, -"Ordered Qty: Quantity ordered for purchase, but not received.","Ordenada Qtde: Quantidade pedida para a compra , mas não recebeu .", -Orders released for production.,Ordens liberadas para produção., -Other Reports,Relatórios Adicionais, -Out Qty,Qtde Saída, -Out Value,Valor Saída, -Outgoing,De Saída, -Outstanding,Saldo devedor, -Outstanding Amount,Valor Devido, -Outstanding Amt,Valor Devido, -Outstanding Cheques and Deposits to clear,Cheques em circulação e depósitos para apagar, -Outstanding for {0} cannot be less than zero ({1}),Excelente para {0} não pode ser inferior a zero ( {1}), -Overdue,Atrasado, -Overlapping conditions found between:,Condições sobreposição encontradas entre :, -Owner,Proprietário, -POS,PDV, -POS Profile,Perfil do PDV, -POS Profile is required to use Point-of-Sale,Perfil do PDV é necessário para usar o ponto de venda, -POS Profile required to make POS Entry,Perfil do PDV necessário para fazer entrada no PDV, -POS Settings,Configurações do PDV, -Packed quantity must equal quantity for Item {0} in row {1},Embalado quantidade deve ser igual a quantidade de item {0} na linha {1}, -Packing Slip,Lista de Embalagem, -Packing Slip(s) cancelled,Lista(s) de embalagem cancelada(s), -Paid Amount,Valor Pago, -Paid Amount cannot be greater than total negative outstanding amount {0},O valor pago não pode ser superior ao saldo devedor {0}, -Paid amount + Write Off Amount can not be greater than Grand Total,Valor pago + Valor do abatimento não pode ser maior do que o total geral, -Parent Item {0} must not be a Stock Item,Pai item {0} não deve ser um item da, -Part-time,De meio expediente, -Partially Depreciated,parcialmente depreciados, -Party,Parceiro, -Party Name,Nome do Parceiro, -Party Type,Tipo de Parceiro, -Party Type is mandatory,Tipo de Parceiro é um campo obrigatório, -Party is mandatory,Parceiro é um campo obrigatório, -Patient Encounter,Consulta do Paciente, -Payable Account,Conta para Pagamento, -Payment Days,Datas de Pagamento, -Payment Due Date,Data de Vencimento, -Payment Entries {0} are un-linked,Os Registos de Pagamento {0} não estão relacionados, -Payment Entry,Pagamentos, -Payment Entry already exists,Pagamento já existe, -Payment Entry has been modified after you pulled it. Please pull it again.,"Entrada de pagamento foi modificado depois que você puxou-o. Por favor, puxe-o novamente.", -Payment Entry is already created,Entrada de pagamento já foi criada, -Payment Gateway,Gateway de pagamento, -Payment Mode,Forma de Pagamento, -Payment Receipt Note,O pagamento Recibo Nota, -Payment Request,Pedido de Pagamento, -Payment Terms,Termos de Pagamento, -Payment Terms Template,Modelo de Termos de Pagamento, -Payment against {0} {1} cannot be greater than Outstanding Amount {2},O pagamento relacionado {0} {1} não pode ser maior do que o saldo devedor {2}, -Payroll Payable,Folha de pagamento a pagar, -Payslip,Holerite, -Pending Amount,Total pendente, -Pending Leaves,Licenças pendentes, -Pending Qty,Pendente Qtde, -Percentage Allocation should be equal to 100%,Percentual de alocação deve ser igual a 100%, -Period Closing Entry,Lançamento de Encerramento do Período, -Period Closing Voucher,Comprovante de Encerramento do Período, -Personal Details,Detalhes pessoais, -Piecework,trabalho por peça, -Pincode,CEP, -Place Order,Fazer pedido, -Planned Qty,Qtde Planejada, -Planning,Planejamento, -Plants and Machineries,Instalações e Maquinários, -Please check Multi Currency option to allow accounts with other currency,"Por favor, verifique multi opção de moeda para permitir que contas com outra moeda", -Please click on 'Generate Schedule',"Por favor, clique em ""Gerar Agenda""", -Please click on 'Generate Schedule' to fetch Serial No added for Item {0},"Por favor, clique em ""Gerar Cronograma"" para buscar Serial Sem adição de item {0}", -Please click on 'Generate Schedule' to get schedule,"Por favor, clique em ""Gerar Agenda"" para obter cronograma", -Please enable pop-ups,Por favor habilite os pop-ups, -Please enter 'Is Subcontracted' as Yes or No,"Por favor, digite ' é subcontratado ""como Sim ou Não", -Please enter Approving Role or Approving User,"Por favor, indique Função Aprovadora ou Usuário Aprovador", -Please enter Cost Center,"Por favor, indique Centro de Custo", -Please enter Employee Id of this sales person,Digite o ID de Colaborador deste Vendedor, -Please enter Expense Account,Por favor insira Conta Despesa, -Please enter Item Code to get batch no,"Por favor, insira o Código Item para obter lotes não", -Please enter Item first,"Por favor, indique primeiro item", -Please enter Maintaince Details first,"Por favor, indique Maintaince Detalhes primeiro", -Please enter Planned Qty for Item {0} at row {1},"Por favor, indique a qtde planejada para o item {0} na linha {1}", -Please enter Production Item first,"Por favor, indique item Produção primeiro", -Please enter Purchase Receipt first,Digite Recibo de compra primeiro, -Please enter Receipt Document,Por favor insira o Documento de Recibo, -Please enter Reference date,"Por favor, indique data de referência", -Please enter Write Off Account,"Por favor, indique a conta de abatimento", -Please enter atleast 1 invoice in the table,"Por favor, indique pelo menos uma fatura na tabela", -Please enter company first,Por favor insira primeira empresa, -Please enter default currency in Company Master,"Por favor, indique moeda padrão ino cadastro da empresa", -Please enter message before sending,Por favor introduza a mensagem antes de enviá-, -Please enter parent cost center,Por favor entre o centro de custo pai, -Please enter quantity for Item {0},"Por favor, indique a quantidade de item {0}", -Please enter relieving date.,"Por favor, indique data da liberação.", -Please enter valid Financial Year Start and End Dates,"Por favor, indique datas inicial e final válidas do Ano Financeiro", -Please enter {0} first,"Por favor, indique {0} primeiro", -Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.,"Por favor, certifique-se de que você realmente quer apagar todas as operações para esta empresa. Os seus dados mestre vai permanecer como está. Essa ação não pode ser desfeita.", -Please mention Round Off Account in Company,"Por favor, mencione completam Conta in Company", -Please mention Round Off Cost Center in Company,"Por favor, mencione completam centro de custo na empresa", -Please mention no of visits required,O número de visitas é obrigatório, -Please pull items from Delivery Note,"Por favor, puxar itens de entrega Nota", -Please remove this Invoice {0} from C-Form {1},"Por favor, remova esta Invoice {0} a partir de C-Form {1}", -"Please select Allocated Amount, Invoice Type and Invoice Number in atleast one row","Por favor, selecione montante atribuído, tipo de fatura e número da fatura em pelo menos uma fileira", -Please select Apply Discount On,"Por favor, selecione Aplicar Discount On", -Please select BOM for Item in Row {0},"Por favor, selecione LDM para o Item na linha {0}", -Please select Category first,Por favor selecione a Categoria primeiro, -Please select Charge Type first,Por favor selecione o Tipo de Encargo primeiro, -Please select Company,"Por favor, selecione Empresa", -Please select Company first,"Por favor, selecione Empresa primeiro", -Please select Employee,Selecione Colaborador, -Please select Existing Company for creating Chart of Accounts,"Por favor, selecione empresa já existente para a criação de Plano de Contas", -"Please select Item where ""Is Stock Item"" is ""No"" and ""Is Sales Item"" is ""Yes"" and there is no other Product Bundle","Por favor, selecione o item em que "é o estoque item" é "Não" e "é o item Vendas" é "Sim" e não há nenhum outro pacote de produtos", -Please select Party Type first,"Por favor, selecione o Tipo de Parceiro primeiro", -Please select Posting Date before selecting Party,"Por favor, selecione data de lançamento antes de selecionar o Parceiro", -Please select Posting Date first,"Por favor, selecione Data de lançamento primeiro", -Please select Price List,"Por favor, selecione Lista de Preço", -Please select Start Date and End Date for Item {0},Por favor selecione a Data de início e a Data de Término do Item {0}, -Please select a Company,"Por favor, selecione uma empresa", -Please select a csv file,"Por favor, selecione um arquivo csv", -Please select a value for {0} quotation_to {1},Por favor selecione um valor para {0} orçamento_para {1}, -Please select correct account,"Por favor, selecione conta correta", -Please select item code,Por favor selecione o código do item, -Please select month and year,Selecione mês e ano, -Please select prefix first,Por favor selecione o prefixo primeiro, -Please select the document type first,"Por favor, selecione o tipo de documento primeiro", -Please select weekly off day,Por favor selecione dia de folga semanal, -Please select {0},Por favor selecione {0}, -Please select {0} first,Por favor selecione {0} primeiro, -Please set 'Apply Additional Discount On',"Por favor, defina "Aplicar desconto adicional em '", -Please set 'Asset Depreciation Cost Center' in Company {0},"Por favor, defina "de ativos Centro de Custo Depreciação 'in Company {0}", -Please set Depreciation related Accounts in Asset Category {0} or Company {1},"Por favor, defina as contas relacionadas com depreciação de ativos em Categoria {0} ou Empresa {1}", -Please set User ID field in an Employee record to set Employee Role,"Por favor, defina o campo ID do usuário no cadastro do colaborador para definir a função Colaborador", -Please set a default Holiday List for Employee {0} or Company {1},"Por favor, defina uma Lista de Feriados padrão para o(a) Colaboador(a) {0} ou para a Empresa {1}", -Please set default Cash or Bank account in Mode of Payment {0},Defina Caixa padrão ou conta bancária no Modo de pagamento {0}, -Please set default {0} in Company {1},Por favor configure um(a) {0} padrão na empresa {1}, -Please set filter based on Item or Warehouse,"Por favor, defina o filtro com base em artigo ou Armazém", -Please set leave policy for employee {0} in Employee / Grade record,"Por favor, defina a política de licença para o colaborador {0} no cadastro do colaborador / classe", -Please set recurring after saving,"Por favor, defina recorrentes depois de salvar", -Please set the Date Of Joining for employee {0},Defina a data de início da sessão para o colaborador {0}, -Please specify Company,"Por favor, especifique Empresa", -Please specify Company to proceed,"Por favor, especifique a Empresa para prosseguir", -Please specify a valid 'From Case No.',"Por favor, especifique um válido 'De Caso No.'", -Please specify a valid Row ID for row {0} in table {1},"Por favor, especifique um ID válido para Row linha {0} na tabela {1}", -Please specify at least one attribute in the Attributes table,Especifique pelo menos um atributo na tabela de atributos, -Please specify currency in Company,"Por favor, especifique moeda in Company", -Please specify either Quantity or Valuation Rate or both,"Por favor especifique a Quantidade, Taxa de Avaliação ou ambos", -Please specify from/to range,"Por favor, especifique de / para variar", -Please supply the specified items at the best possible rates,"Por favor, informe os melhores valores e condições possíveis para os itens especificados", -Point of Sale,Ponto de Vendas, -Point-of-Sale,Ponto de Vendas, -Point-of-Sale Profile,Perfil do Ponto de Vendas, -Portal Settings,Configurações do Portal, -Possible Supplier,Possível Fornecedor, -Posting Date,Data da Postagem, -Posting Time,Horário da Postagem, -Posting date and posting time is mandatory,Data e horário da postagem são obrigatórios, -Posting timestamp must be after {0},Postando timestamp deve ser posterior a {0}, -Potential opportunities for selling.,Oportunidades potenciais para a venda., -Pre Sales,Pré Venda, -Previous Financial Year is not closed,O Ano Financeiro Anterior não está fechado, -Price List Currency not selected,Lista de Preço Moeda não selecionado, -Price List Rate,Preço na Lista de Preços, -Price List master.,Cadastro da Lista de Preços., -Price List must be applicable for Buying or Selling,Lista de Preço deve ser aplicável para comprar ou vender, -Price List {0} is disabled or does not exist,Lista de Preços {0} está desativada ou não existe, -Pricing,Precificação, -Pricing Rule,Regra de Preços, -"Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.","Regra de Preços é o primeiro selecionado com base em ""Aplicar On 'campo, que pode ser Item, item de grupo ou Marca.", -"Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.","Regra de preços é feita para substituir Lista de Preços / define percentual de desconto, com base em alguns critérios.", -Pricing Rules are further filtered based on quantity.,As regras de tarifação são ainda filtrados com base na quantidade., -Principal Amount,Valor Principal, -Print Settings,Configurações de Impressão, -Private Equity,Patrimônio Líquido, -Privilege Leave,Licença Privilégio, -Probation,Provação, -Probationary Period,Período Probatório, -Procurement,Cotação, -Production Item,Bem de Produção, -Profit and Loss,Lucro e Perdas, -Project Collaboration Invitation,Convite para Colaboração em Projeto, -Project Id,Id Projeto, -Project Manager,Gerente de Projetos, -Project Status,Status do Projeto, -Project master.,Cadastro de Projeto., -Project-wise data is not available for Quotation,Dados do baseados em projeto não estão disponíveis para Orçamentos, -Proposal Writing,Proposta Redação, -Provisional Profit / Loss (Credit),Provisão Lucro / Prejuízo (Crédito), -Publish Items on Website,Publicar Itens no site, -Publishing,Publishing, -Purchase,Compras, -Purchase Amount,Valor de Compra, -Purchase Date,Data da Compra, -Purchase Invoice {0} is already submitted,A Fatura de Compra {0} já foi enviada, -Purchase Manager,Gerente de Compras, -Purchase Master Manager,Gerente de Cadastros de Compras, -Purchase Order,Pedido de Compra, -Purchase Order number required for Item {0},Número do Pedido de Compra necessário para o item {0}, -Purchase Order to Payment,Pedido de Compra para Pagamento, -Purchase Order {0} is not submitted,Pedido de Compra {0} não é enviado, -Purchase Orders given to Suppliers.,Pedidos de Compra dados a fornecedores., -Purchase Price List,Preço de Compra Lista, -Purchase Receipt {0} is not submitted,Recibo de compra {0} não é enviado, -Purchase Tax Template,Modelo de Impostos sobre a compra, -Purchase User,Usuário de Compras, -Purchasing,Requisições, -Purpose must be one of {0},Objetivo deve ser um dos {0}, -Qty,Qtde, -Qty To Manufacture,Qtde para Fabricar, -Qty for {0},Qtde para {0}, -Quality,QCคุณภาพ, -Quality Goal.,Objetivos de Qualidade., -Quality Inspection,Inspeção de Qualidade, -Quality Inspection: {0} is not submitted for the item: {1} in row {2},Inspeção de Qualidade: {0} não foi submetida para o item: {1} na linha {2}, -Quality Meeting,Encontro da Qualidade, -Quality Procedure.,Procedimento de Qualidade., -Quantity for Item {0} must be less than {1},Quantidade de item {0} deve ser inferior a {1}, -Quantity in row {0} ({1}) must be same as manufactured quantity {2},A quantidade na linha {0} ( {1} ) deve ser a mesma que a quantidade fabricada {2}, -Quantity must not be more than {0},Quantidade não deve ser mais do que {0}, -Quantity required for Item {0} in row {1},Quantidade necessária para item {0} na linha {1}, -Quantity should be greater than 0,Quantidade deve ser maior do que 0, -Quantity to Manufacture must be greater than 0.,Quantidade de Fabricação deve ser maior que 0., -Quantity to Produce,Quantidade para Produzir, -Quantity to Produce can not be less than Zero,Quantidade para Produzir não pode ser menor do que Zero, -Quick Journal Entry,Lançamento no Livro Diário Rápido, -Quot Count,Contagem de Orçamentos, -Quot/Lead %,Orçamento / Lead %, -Quotation,Orçamento, -Quotation {0} is cancelled,O Orçamento {0} está cancelado, -Quotation {0} not of type {1},O Orçamento {0} não é do tipo {1}, -Quotations,Orçamentos, -Quotations received from Suppliers.,Orçamentos recebidos de fornecedores., -Quotations: ,Orçamentos:, -Quotes to Leads or Customers.,Cotações para Leads ou Clientes., -Range,Alcance, -Rating,Rating, -Raw Materials,Matéria-prima, -Raw Materials cannot be blank.,Matérias-primas não pode ficar em branco., -Re-open,Abrir Novamente, -Read the ERPNext Manual,Leia o manual de ERPNext, -Receipt document must be submitted,O Documento de Recibo precisa ser enviado, -Receivable Account,Contas a Receber, -Received On,Recebeu em, -Receiver List is empty. Please create Receiver List,"Lista Receiver está vazio. Por favor, crie Lista Receiver", -Ref,Referência, -Reference #{0} dated {1},Referência #{0} datado de {1}, -Reference No & Reference Date is required for {0},Número de referência e Referência Data é necessário para {0}, -Reference No is mandatory if you entered Reference Date,Referência Não é obrigatório se você entrou Data de Referência, -Reference Owner,Proprietário da Referência, -Refresh Token,Token de Atualização, -Register,Registro, -Related,Relacionados, -Remaining,Remanescente, -Remove item if charges is not applicable to that item,"Remover item, se as cargas não é aplicável a esse elemento", -Reorder Level,Estoque Mínimo, -Reorder Qty,Qtde para Reposição, -Repeat Customer Revenue,Receita Clientes Repetidos, -Repeat Customers,Clientes Repetidos, -Replace BOM and update latest price in all BOMs,Substitua a LDM e atualize o preço mais recente em todas as LDMs, -Replied,Respondido, -Report Builder,Criar/Editar Relatório, -Report Type is mandatory,Tipo de Relatório é obrigatório, -Reqd By Date,Entrega Esperada em, -Request for Quotation,Solicitação de Orçamento, -Request for Quotations,Solicitação de Orçamento, -Request for purchase.,Solicitação de Compra., -Request for quotation.,Solicitação de orçamento., -Requested Qty,Qtde Solicitada, -"Requested Qty: Quantity requested for purchase, but not ordered.","Solicitado Qtde: Quantidade solicitada para a compra , mas não ordenado.", -Requesting payment against {0} {1} for amount {2},Esta é uma solicitação de pagamento relacionada à {0} {1} no valor de {2}, -Required On,Obrigatório On, -Required Qty,Qtde Requerida, -Researcher,Pesquisador, -Resend Payment Email,Reenviar email de pagamento, -Reserved Qty,Qtde Reservada, -Reserved Qty for Production,Qtde Reservada para Produção, -Reserved Qty for Production: Raw materials quantity to make manufacturing items.,Quantidade Reservada para Produção: quantidade de matérias-primas para a fabricar itens., -"Reserved Qty: Quantity ordered for sale, but not delivered.","Reservados Qtde: Quantidade pedida para venda, mas não entregue.", -Reserved for manufacturing,Reservado para fabricação, -Rest Of The World,Resto do Mundo, -Retail,Varejo, -Retail & Wholesale,Varejo e Atacado, -Retail Operations,Operações de Varejo, -Return,Devolução, -Return / Credit Note,Devolução / Nota de Crédito, -Return / Debit Note,Devolução / Nota de Débito, -Root Type,Tipo de Raiz, -Root Type is mandatory,Tipo de Raiz é obrigatório, -Root cannot be edited.,Root não pode ser editado., -Root cannot have a parent cost center,Root não pode ter um centro de custos pai, -Round Off,Arredondamento, -Row # {0}: Batch No must be same as {1} {2},Linha # {0}: Nº do Lote deve ser o mesmo que {1} {2}, -Row # {0}: Cannot return more than {1} for Item {2},Linha # {0}: Não é possível retornar mais de {1} para o item {2}, -Row # {0}: Serial No is mandatory,Linha # {0}: O número de série é obrigatório, -Row # {0}: Serial No {1} does not match with {2} {3},Row # {0}: Número de ordem {1} não coincide com {2} {3}, -"Row #{0}: Asset {1} cannot be submitted, it is already {2}","Linha # {0}: Ativo {1} não pode ser enviado, já é {2}", -Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Linha # {0}: Não é permitido mudar de fornecedor quando o Pedido de Compra já existe, -Row #{0}: Please set reorder quantity,"Linha # {0}: Por favor, defina a quantidade de reposição", -Row #{0}: Please specify Serial No for Item {1},Linha # {0}: Favor especificar Sem Serial para item {1}, -Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ,Linha # {0}: O Valor deve ser o mesmo da {1}: {2} ({3} / {4}), -"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry","Linha #{0}: O Tipo de Documento de Referência deve ser um Pedido de Compra, uma Nota Fiscal de Compra ou um Lançamento Contábil", -Row #{0}: Rejected Qty can not be entered in Purchase Return,Linha # {0}: Qtde rejeitada não pode ser lançada na devolução da compra, -Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Linha # {0}: Armazén Rejeitado é obrigatório para o item rejeitado {1}, -Row #{0}: Set Supplier for item {1},Linha # {0}: Defina o fornecedor para o item {1}, -Row #{0}: Timings conflicts with row {1},Linha # {0}: conflitos Timings com linha {1}, -Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},Linha {0}: Valor não pode ser superior ao valor pendente relacionado ao Reembolso de Despesas {1}. O valor pendente é {2}, -Row {0}: Advance against Customer must be credit,Row {0}: Avanço contra o Cliente deve estar de crédito, -Row {0}: Advance against Supplier must be debit,Linha {0}: Adiantamento relacionado com o fornecedor deve ser um débito, -Row {0}: Allocated amount {1} must be less than or equals to invoice outstanding amount {2},Linha {0}: Valor alocado {1} deve ser menor ou igual ao saldo devedor {2} da nota, -Row {0}: An Reorder entry already exists for this warehouse {1},Linha {0}: Uma entrada de reposição já existe para este armazém {1}, -Row {0}: Bill of Materials not found for the Item {1},Linha {0}: Lista de MAteriais não encontrada para o item {1}, -Row {0}: Conversion Factor is mandatory,Linha {0}: Fator de Conversão é obrigatório, -Row {0}: Credit entry can not be linked with a {1},Linha {0}: Lançamento de crédito não pode ser relacionado a uma {1}, -Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2},Linha {0}: Moeda da LDM # {1} deve ser igual à moeda selecionada {2}, -Row {0}: Debit entry can not be linked with a {1},Linha {0}: Lançamento de débito não pode ser relacionado a uma {1}, -Row {0}: Exchange Rate is mandatory,Linha {0}: Taxa de Câmbio é obrigatória, -Row {0}: Hours value must be greater than zero.,Linha {0}: Horas deve ser um valor maior que zero, -Row {0}: Party / Account does not match with {1} / {2} in {3} {4},Linha {0}: Parceiro / Conta não coincidem com {1} / {2} em {3} {4}, -Row {0}: Party Type and Party is required for Receivable / Payable account {1},Linha {0}: Tipo de Parceiro e Parceiro são necessários para receber / pagar contas {1}, -Row {0}: Payment against Sales/Purchase Order should always be marked as advance,Linha {0}: O pagamento relacionado a Pedidos de Compra/Venda deve ser sempre marcado como adiantamento, -Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.,"Linha {0}: Por favor, selecione 'É Adiantamento' se este é um lançamento de adiantamento relacionado à conta {1}.", -Row {0}: Qty is mandatory,Linha {0}: Qtde é obrigatória, -Row {0}: UOM Conversion Factor is mandatory,Linha {0}: Fator de Conversão da Unidade de Medida é obrigatório, -Row {0}: {1} {2} does not match with {3},Linha {0}: {1} {2} não corresponde com {3}, -Row {0}:Start Date must be before End Date,Linha {0}: Data de início deve ser anterior a data de término, -Rules for adding shipping costs.,Regras para adicionar os custos de envio ., -Rules for applying pricing and discount.,Regras para aplicação de preços e de desconto., -S.O. No.,Número da Ordem de Venda, -SO Qty,Qtde na OV, -Safety Stock,Estoque de Segurança, -Salary Slip ID,ID da folha de pagamento, -Salary Slip of employee {0} already created for this period,Contracheque do colaborador {0} já criado para este período, -Salary Slip of employee {0} already created for time sheet {1},Contracheque do colaborador {0} já criado para o registro de tempo {1}, -Salary Structure Missing,Estrutura salarial ausente, -Sales Funnel,Funil de Vendas, -Sales Invoice,Fatura de Venda, -Sales Invoice {0} must be cancelled before cancelling this Sales Order,A Fatura de Venda {0} deve ser cancelada antes de cancelar este Pedido de Venda, -Sales Manager,Gerente de Vendas, -Sales Master Manager,Gerente de Cadastros de Vendas, -Sales Order,Pedido de Venda, -Sales Order Item,Item do Pedido de Venda, -Sales Order required for Item {0},Pedido de Venda necessário para o item {0}, -Sales Order to Payment,Pedido de Venda para Pagamento, -Sales Order {0} is not submitted,Pedido de Venda {0} não foi enviado, -Sales Order {0} is not valid,Pedido de Venda {0} não é válido, -Sales Order {0} is {1},Pedido de Venda {0} é {1}, -Sales Orders,Pedidos de Venda, -Sales Pipeline,Pipeline de Vendas, -Sales Return,Devolução de Vendas, -Sales Tax Template,Modelo de Impostos sobre Vendas, -Sales Team,Equipe de Vendas, -Sales User,Usuário de Vendas, -Sales campaigns.,Campanhas de vendas ., -Same Company is entered more than once,Mesma empresa está inscrita mais de uma vez, -Same supplier has been entered multiple times,Mesmo fornecedor foi inserido várias vezes, -Sanctioned,Liberada, -Sanctioned Amount,Valor Liberado, -Sanctioned Amount cannot be greater than Claim Amount in Row {0}.,Montante Liberado não pode ser maior do que no Pedido de Reembolso na linha {0}., -Scan Barcode,Ler Código de Barras, -Schedule,Agendar, -Schedule Date,Data Agendada, -Scheduled,Agendado, -Score must be less than or equal to 5,Pontuação deve ser inferior ou igual a 5, -Scrapped,Sucateada, -Search Sub Assemblies,Pesquisa Subconjuntos, -Select,Selecionar, -Select BOM,Selecionar LDM, -Select BOM and Qty for Production,Selecionar LDM e quantidade para produção, -Select Company...,Selecione a Empresa..., -Select DocType,Selecione o DocType, -Select Fiscal Year...,Selecione o Ano Fiscal ..., -Select Items to Manufacture,Selecionar Itens para Produzir, -Select Possible Supplier,Selecione Possível Fornecedor, -Select Warehouse...,Selecione Armazém..., -Select an employee to get the employee advance.,Selecione um funcionário para obter o adiantamento do colaborador., -Select change amount account,Selecione a conta de troco, -Select the nature of your business.,Selecione a natureza do seu negócio., -Selling Amount,Valor de Venda, -"Selling must be checked, if Applicable For is selected as {0}","Venda deve ser verificada, se for caso disso for selecionado como {0}", -Send SMS,Envie SMS, -Send mass SMS to your contacts,Enviar SMS em massa para seus contatos, -Serial No and Batch,Número de Série e Lote, -Serial No is mandatory for Item {0},Número de séries é obrigatório para item {0}, -Serial No {0} does not belong to Delivery Note {1},Serial Não {0} não pertence a entrega Nota {1}, -Serial No {0} does not belong to Item {1},Serial Não {0} não pertence ao item {1}, -Serial No {0} does not belong to Warehouse {1},Serial Não {0} não pertence ao Armazém {1}, -Serial No {0} does not belong to any Warehouse,O Nº de Série {0} não pertence a nenhum Armazén, -Serial No {0} does not exist,Nº de Série {0} não existe, -Serial No {0} has already been received,Nº de Série {0} já foi recebido, -Serial No {0} is under maintenance contract upto {1},Nº de Série {0} está sob contrato de manutenção até {1}, -Serial No {0} is under warranty upto {1},Nº de Série {0} está na garantia até {1}, -Serial No {0} not found,Serial No {0} não foi encontrado, -Serial No {0} not in stock,Nº de Série {0} esgotado, -Serial No {0} quantity {1} cannot be a fraction,Serial Não {0} {1} quantidade não pode ser uma fração, -Serial Nos Required for Serialized Item {0},Nº de Série Obrigatório para o Item Serializado {0}, -Serial number {0} entered more than once,Número de série {0} entrou mais de uma vez, -Serialized Inventory,Inventário por Nº de Série, -Series is mandatory,Série é obrigatório, -Service,Manutenção do Veículo, -Service Expense,Despesa com Manutenção de Veículos, -"Set Default Values like Company, Currency, Current Fiscal Year, etc.","Defina valores padrão , como empresa, moeda, ano fiscal atual , etc", -Set Tax Rule for shopping cart,Conjunto de regras de imposto por carrinho de compras, -Set as Default,Definir como padrão, -Set as Lost,Definir como Perdido, -"Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}","Configurando eventos para {0}, uma vez que o colaborador relacionado aos vendedores abaixo não tem um ID do usuário {1}", -Setting up Email,Configurando Email, -Setting up Email Account,Configurando Conta de Email, -Setting up Employees,Configurando Colaboradores, -Setting up Taxes,Configurando Impostos, -"Settings for online shopping cart such as shipping rules, price list etc.","Configurações do carrinho de compras on-line, tais como regras de navegação, lista de preços etc.", -Settings for website homepage,Configurações para página inicial do site, -Setup Gateway accounts.,Configuração contas Gateway., -Setup SMS gateway settings,Configurações de gateway SMS Setup, -Setup cheque dimensions for printing,Configurar dimensões do cheque para impressão, -Setup default values for POS Invoices,Configurar valores padrão para faturas do PDV, -Setup mode of POS (Online / Offline),Modo de Configuração do PDV (Online / Offline), -Share Balance,Balanço de ações, -Shipments,Entregas, -Shipping,Expedição, -Shipping Address,Endereço para Entrega, -Shopping Cart Settings,Configurações do Carrinho de Compras, -Shortage Qty,Qtde em Falta, -Show Employee,Mostrar Colaborador, -Show Open,Mostrar aberta, -Show Salary Slip,Mostrar Contracheque, -Show closed,Mostrar fechados, -Show zero values,Mostrar valores zerados, -Sick Leave,Licença Médica, -Single unit of an Item.,Unidade única de um item., -"Skipping Leave Allocation for the following employees, as Leave Allocation records already exists against them. {0}","Ignorar a atribuição de licenças para os colaboradores a seguir, já que os registros de alocação de licenças já existem contra eles. {0}", -"Skipping Salary Structure Assignment for the following employees, as Salary Structure Assignment records already exists against them. {0}","Ignorando a atribuição de estrutura salarial para os seguintes colaboradores, uma vez que já existe estrutura salarial associada a eles. {0}", -Slideshow,Apresentação de Slides, -Soap & Detergent,Soap & detergente, -Software Developer,Software Developer, -Something went wrong!,Algo deu errado!, -"Sorry, Serial Nos cannot be merged","Desculpe, os números de ordem não podem ser mescladas", -Source,Origem, -Source Warehouse,Armazém de origem, -Source and target warehouse must be different,O armazén de origem e o armazém de destino devem ser diferentes um do outro, -Source of Funds (Liabilities),Fonte de Recursos (Passivos), -Source warehouse is mandatory for row {0},O armazén de origem é obrigatório para a linha {0}, -Specified BOM {0} does not exist for Item {1},A LDM {0} especificada não existe para o Item {1}, -Sports,Esportes, -Standard Selling,Venda padrão, -Standard contract terms for Sales or Purchase.,Termos do contrato padrão para vendas ou compra., -Start date should be less than end date for Item {0},Data de início deve ser inferior a data final para o item {0}, -Statement of Account,Extrato da conta, -Status must be one of {0},Status deve ser um dos {0}, -Stock,Estoque, -Stock Adjustment,Ajuste do estoque, -Stock Analytics,Análise do Estoque, -Stock Assets,Ativos Estoque, -Stock Balance,Balanço de Estoque, -Stock Entry,Lançamento no Estoque, -Stock Entry {0} created,Lançamento de Estoque {0} criado, -Stock Entry {0} is not submitted,Lançamento no Estoque {0} não é enviado, -Stock Expenses,Despesas com Estoque, -Stock Items,Itens de estoque, -Stock Ledger,Livro de Inventário, -Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts,Banco de Ledger Entradas e GL As entradas são reenviados para os recibos de compra selecionados, -Stock Levels,Níveis de Estoque, -Stock Liabilities,Passivo Estoque, -Stock Options,Opções de Compra, -Stock Qty,Quantidade em estoque, -Stock Received But Not Billed,"Itens Recebidos, mas não Faturados", -Stock Reports,Relatórios de Estoque, -Stock Summary,Resumo do Estoque, -Stock Transactions,Transações de Estoque, -Stock UOM,Unidade de Medida do Estoque, -Stock Value,Valor do Estoque, -Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3},Da balança em Batch {0} se tornará negativo {1} para item {2} no Armazém {3}, -Stock cannot be updated against Delivery Note {0},Banco não pode ser atualizado contra nota de entrega {0}, -Stock cannot be updated against Purchase Receipt {0},O estoque não pode ser atualizado em relação ao Recibo de Compra {0}, -Stock cannot exist for Item {0} since has variants,Stock não pode existir por item {0} já que tem variantes, -Stock transactions before {0} are frozen,Transações com ações antes {0} são congelados, -Stop,Parar, -Structures have been assigned successfully,As estruturas foram atribuídas com sucesso, -Student,Aluno, -Student Admissions,Admissões de Alunos, -Student Attendance,Frequência do Aluno, -Student Email ID,Email do Aluno, -Student Group,Grupo de Alunos, -Student ID,ID do Aluno, -Student Mobile No.,Celular do Aluno, -Student is already enrolled.,Aluno já está inscrito., -Sub Assemblies,Subconjuntos, -Sub-contracting,Subcontratação, -Submit,Enviar, -Submit Salary Slip,Enviar Folha de Pagamentos, -Submit this to create the Employee record,Envie para criar o registro do colaborador, -Subscription,Assinatura, -Successfully Reconciled,Reconciliados com sucesso, -Successfully deleted all transactions related to this company!,Todas as transações relacionadas a esta empresa foram excluídas com sucesso!, -Sum of points for all goals should be 100. It is {0},Soma de pontos para todos os objetivos deve inteirar 100. (valor atual: {0}), -Suplier,Fornecedor, -Supplier Id,ID do Fornecedor, -Supplier Invoice Date cannot be greater than Posting Date,A data da nota fiscal do fornecedor não pode ser maior do que data do lançamento, -Supplier Invoice No,Nº da nota fiscal de compra, -Supplier Invoice No exists in Purchase Invoice {0},Nº da Nota Fiscal do Fornecedor já existe naFatura de Compra {0}, -Supplier Part No,Nº da Peça no Fornecedor, -Supplier Quotation,Orçamento de Fornecedor, -Supplier Scorecard,Scorecard do Fornecedor, -Supplier Warehouse mandatory for sub-contracted Purchase Receipt,Fornecedor Armazém obrigatório para sub- contratados Recibo de compra, -Supplier database.,Banco de dados do fornecedor., -Support,Pós-Vendas, -Support Analytics,Análise de Pós-Vendas, -Support Settings,Configurações do Pós Vendas, -Support queries from customers.,Suporte às perguntas de clientes., -System Manager,Administrador do Sistema, -Target,Meta, -Target On,Meta em, -Target Warehouse,Armazén de Destino, -Target warehouse is mandatory for row {0},Destino do Warehouse é obrigatória para a linha {0}, -Tax ID,CPF/CNPJ, -Tax Id: ,CPF/CNPJ:, -Tax Rate,Alíquota do Imposto, -Tax Rule Conflicts with {0},Conflitos regra fiscal com {0}, -Tax Rule for transactions.,Regra de imposto para transações., -Tax Template is mandatory.,Modelo de impostos é obrigatório., -Tax template for selling transactions.,Modelo impostos para transações de venda., -Team Updates,Updates da Equipe, -Telephone Expenses,Despesas com Telefone, -Terms and Conditions Template,Modelo de Termos e Condições, -Thank you for your business!,Obrigado pela compra!, -The Item {0} cannot have Batch,O item {0} não pode ter Batch, -The day(s) on which you are applying for leave are holidays. You need not apply for leave.,No dia (s) em que você está se candidatando a licença são feriados. Você não precisa solicitar uma licença., -The name of the institute for which you are setting up this system.,O nome da intituição para a qual o sistema será instalado., -The name of your company for which you are setting up this system.,O nome da sua empresa para a qual você está configurando o sistema., -The selected item cannot have Batch,O item selecionado não pode ter Batch, -"Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc.","Então Preços Regras são filtradas com base no Cliente, Grupo de Clientes, Território, fornecedor, fornecedor Tipo, Campanha, Parceiro de vendas etc", -There are more holidays than working days this month.,Há mais feriados do que dias úteis do mês., -There can only be 1 Account per Company in {0} {1},Pode haver apenas uma conta por empresa em {0} {1}, -"There can only be one Shipping Rule Condition with 0 or blank value for ""To Value""","Só pode haver uma regra de envio Condição com 0 ou valor em branco para "" To Valor """, -There is nothing to edit.,Não há nada a ser editado., -There were errors.,Ocorreram erros., -This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set,Este artigo é um modelo e não podem ser usados em transações. Atributos item será copiado para as variantes a menos 'No Copy' é definido, -This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?,Este documento está fora do limite no(a) {0} de {1} para o item {4}. Você está fazendo outro(a) {3} relacionado(a) a(o) mesmo(a) {2}?, -This is a root account and cannot be edited.,Esta é uma conta de root e não pode ser editada., -This is a root customer group and cannot be edited.,Este é um grupo de clientes de raiz e não pode ser editada., -This is a root item group and cannot be edited.,Este é um grupo de itens de raiz e não pode ser editada., -This is a root sales person and cannot be edited.,Esta é uma pessoa de vendas de raiz e não pode ser editado., -This is a root territory and cannot be edited.,Este é um território de raiz e não pode ser editada., -This is an example website auto-generated from ERPNext,Este é um exemplo website auto- gerada a partir ERPNext, -This is based on stock movement. See {0} for details,Isto é baseado no movimento de estoque. Veja o {0} para maiores detalhes, -This is based on the Time Sheets created against this project,Isto é baseado nos Registros de Tempo relacionados a este Projeto, -This is based on the attendance of this Employee,Isto é baseado na frequência deste Colaborador, -This is based on the attendance of this Student,Isto é baseado na frequência do aluno, -This is based on transactions against this Customer. See timeline below for details,Isto é baseado nas transações envolvendo este Cliente. Veja a linha do tempo abaixo para maiores detalhes, -This is based on transactions against this Supplier. See timeline below for details,Isto é baseado nas transações envolvendo este Fornecedor. Veja a linha do tempo abaixo para maiores detalhes, -Time Sheet for manufacturing.,Registro de Tempo para fabricação, -Time Tracking,Controle de Tempo, -Timesheet,Registro de Tempo, -Timesheet for tasks.,Registros de Tempo para tarefas., -Timesheet {0} is already completed or cancelled,O Registro de Tempo {0} está finalizado ou cancelado, -Timesheets,Registros de Tempo, -To Bill,Para Faturar, -To Date,Até a Data, -To Date cannot be before From Date,Até o momento não pode ser antes a partir da data, -To Date should be within the Fiscal Year. Assuming To Date = {0},Para data deve ser dentro do exercício social. Assumindo Para Date = {0}, -To Datetime,Até a Data e Hora, -To Deliver,Para Entregar, -To Deliver and Bill,Para Entregar e Faturar, -To Receive,Receber, -To Warehouse,Para o Armazén, -To date can not greater than employee's relieving date,Até à data não pode maior do que a data de desligamento do colaborador, -"To filter based on Party, select Party Type first","Para filtrar baseado em Parceiro, selecione o Tipo de Sujeito primeiro", -"To get the best out of ERPNext, we recommend that you take some time and watch these help videos.","Para tirar o melhor proveito do ERPNext, recomendamos que você dedique algum tempo para assistir a esses vídeos de ajuda.", -"To include tax in row {0} in Item rate, taxes in rows {1} must also be included","Para incluir impostos na linha {0} na taxa de Item, os impostos em linhas {1} também deve ser incluída", -"To merge, following properties must be same for both items","Para mesclar , seguintes propriedades devem ser os mesmos para ambos os itens", -"To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.","Para não aplicar regra de preços em uma transação particular, todas as regras de preços aplicáveis devem ser desativados.", -"To set this Fiscal Year as Default, click on 'Set as Default'","Para definir esse Ano Fiscal como padrão , clique em ' Definir como padrão '", -Total Absent,Total de faltas, -Total Achieved,Total de Alcançados, -Total Actual,Total Atual, -Total Allocated Leaves,Total de Licenças Alocadas, -Total Commission,Total da Comissão, -Total Debit must be equal to Total Credit. The difference is {0},Débito total deve ser igual ao total de crédito., -Total Deduction,Dedução total, -Total Invoiced Amount,Valor Total Faturado, -Total Leaves,Total de licenças, -Total Order Considered,Total considerado em pedidos, -Total Outstanding Amount,Saldo devedor total, -Total Paid Amount,Valor total pago, -Total Present,Total Presente, -Total Qty,Quantidade total, -Total Revenue,Receita total, -Total Target,Meta Total, -Total Tax,Total de Impostos, -Total Unpaid: {0},Total a Pagar: {0}, -Total Variance,Variância total, -Total Weightage of all Assessment Criteria must be 100%,O peso total de todos os Critérios de Avaliação deve ser 100%, -Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2}),Avanço total ({0}) contra Pedido {1} não pode ser maior do que o total geral ({2}), -Total advance amount cannot be greater than total sanctioned amount,O montante do adiantamento total não pode ser maior do que o montante liberado total, -Total allocated leaves are more days than maximum allocation of {0} leave type for employee {1} in the period,O total de licenças alocadas é mais dias do que a alocação máxima de {0} tipo de licença para o funcionário {1} no período, -Total allocated leaves are more than days in the period,Total de licenças alocadas é maior do que número de dias no período, -Total allocated percentage for sales team should be 100,Porcentagem total alocado para a equipe de vendas deve ser de 100, -Total cannot be zero,Total não pode ser zero, -Total hours: {0},Total de horas: {0}, -Total leaves allocated is mandatory for Leave Type {0},Total de Licenças Alocadas é mandatório para Tipo de Licença {0}, -Total(Amt),Total (Quantia), -Total(Qty),Total (Qtde), -Training,Treinamento, -Training Event,Evento de Treinamento, -Training Feedback,Feedback do Treinamento, -Training Result,Resultado do Treinamento, -Transaction currency must be same as Payment Gateway currency,Moeda de transação deve ser o mesmo da moeda gateway de pagamento, -Transaction reference no {0} dated {1},Referência da transação nº {0} em {1}, -Transactions can only be deleted by the creator of the Company,Transações só podem ser excluídos pelo criador da Companhia, -Travel,Viagem, -Travel Expenses,Despesas com viagem, -Tree Type,Tipo de árvore, -Tree of Bill of Materials,Árvore da Lista de Materiais, -Tree of Item Groups.,Árvore de Grupos de itens ., -Tree of financial Cost Centers.,Árvore de Centros de Custo., -Tree of financial accounts.,Árvore de contas financeiras., -Types of activities for Time Logs,Tipos de Atividades para Registros de Tempo, -UOM,UDM, -UOM Conversion factor is required in row {0},Fator de Conversão da Unidade de Medida é necessário na linha {0}, -UOM coversion factor required for UOM: {0} in Item: {1},Fator de Conversão de Unidade de Medida é necessário para Unidade de Medida: {0} no Item: {1}, -Unclosed Fiscal Years Profit / Loss (Credit),Lucro / Prejuízo (Crédito) de Anos Fiscais não Encerrados, -Unit of Measure {0} has been entered more than once in Conversion Factor Table,Unidade de Medida {0} foi inserida mais de uma vez na Tabela de Conversão de Fator, -Unpaid,A Pagar, -Unsecured Loans,Empréstimos não Garantidos, -Unsubscribe from this Email Digest,Cancelar a inscrição neste Resumo por Email, -Unsubscribed,Inscrição Cancelada, -Unverified Webhook Data,Dados não-confirmados do Webhook, -Update Cost,Atualize o custo, -Update Print Format,Atualizar Formato de Impressão, -Update bank payment dates with journals.,Atualizar datas de pagamento bancário com livro Diário., -Upload your letter head and logo. (you can edit them later).,Publique sua cabeça letra e logotipo. (Você pode editá-las mais tarde)., -Upper Income,Alta Renda, -Used Leaves,Licenças Usadas, -User ID,ID de Usuário, -User ID not set for Employee {0},ID de usuário não definida para Colaborador {0}, -User Remark,Observação do Usuário, -User {0} does not exist,Usuário {0} não existe, -User {0} is already assigned to Employee {1},Usuário {0} já está atribuído ao Colaborador {1}, -Users,Usuários, -Utility Expenses,Despesas com Serviços Públicos, -Valid Till,Válido até, -Valuation Rate is mandatory if Opening Stock entered,A Taxa de Avaliação é obrigatória se o Estoque Inicial for inserido, -Valuation type charges can not marked as Inclusive,Encargos tipo de avaliação não pode marcado como Inclusive, -Value Or Qty,Valor ou Qtde, -Vehicle Expenses,Despesas com Veículos, -Vehicle No,Placa do Veículo, -View Leads,Veja os Leads, -View Ledger,Ver Livro Razão, -View Now,Ver Agora, -Visit report for maintenance call.,Relatório da visita da chamada de manutenção., -Vital Signs,Sinais Vitais, -Voucher #,Comprovante #, -Voucher No,Nº do Comprovante, -Voucher Type,Tipo de Comprovante, -WIP Warehouse,Armazén de Trabalho em Andamento, -Walk In,Vitrine, -Warehouse can not be deleted as stock ledger entry exists for this warehouse.,Armazém não pode ser excluído pois existe entrada de material para este armazém., -Warehouse cannot be changed for Serial No.,Armazém não pode ser alterado para nº serial., -Warehouse is mandatory,Armazém é obrigatório, -Warehouse is mandatory for stock Item {0} in row {1},Armazém é obrigatória para stock o item {0} na linha {1}, -Warehouse not found in the system,Armazén não foi encontrado no sistema, -Warehouse required for stock Item {0},Armazém necessário para o ítem do estoque {0}, -Warehouse {0} can not be deleted as quantity exists for Item {1},Armazém {0} não pode ser excluído pois existe quantidade para item {1}, -Warehouse {0} does not belong to company {1},Armazém {0} não pertence à empresa {1}, -Warehouse {0} does not exist,Armazém {0} não existe, -Warehouses with child nodes cannot be converted to ledger,Os armazéns com subgrupos não podem ser convertidos para livro razão, -Warehouses with existing transaction can not be converted to ledger.,Os Armazéns com transação existente não podem ser convertidos em livro razão., -Warning: Another {0} # {1} exists against stock entry {2},Aviso: Outra {0} # {1} existe contra entrada de material {2}, -Warning: Leave application contains following block dates,Aviso: pedido de férias contém as datas de intervalos, -Warning: Material Requested Qty is less than Minimum Order Qty,Aviso: A quantidade de material solicitado é menor do que o Pedido Mínimo, -Warning: Sales Order {0} already exists against Customer's Purchase Order {1},Aviso: Pedido de Venda {0} já existe relacionado ao Pedido de Compra do Cliente {1}, -Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Aviso : O sistema não irá verificar superfaturamento uma vez que o valor para o item {0} em {1} é zero, -Warranty Claim against Serial No.,Reclamação de Garantia contra nº de Série, -Website Image should be a public file or website URL,Site de imagem deve ser um arquivo público ou URL do site, -Website Image {0} attached to Item {1} cannot be found,Site Imagem {0} anexada ao Item {1} não pode ser encontrado, -Website Manager,Administrador do Site, -Website Settings,Configurações do Site, -Weekly,Semanalmente, -"Weight is mentioned,\nPlease mention ""Weight UOM"" too","Peso é mencionado, \n Também mencione ""Unidade de Medida de Peso""", -Welcome email sent,Email de Boas Vindas enviado, -Welcome to ERPNext,Bem vindo ao ERPNext, -What does it do?,O que isto faz ?, -Where manufacturing operations are carried.,Onde as operações de fabricação são realizadas., -Wire Transfer,por Transferência Bancária, -Work Order,Ordem de Trabalho, -Work Orders Created: {0},Ordens de Trabalho Criadas: {0}, -Work-in-Progress Warehouse is required before Submit,Armazén de Trabalho em Andamento é necessário antes de Enviar, -Workflow,Fluxo de Trabalho, -Working,Trabalhando, -Workstation,Estação de Trabalho, -Workstation is closed on the following dates as per Holiday List: {0},"Workstation é fechado nas seguintes datas, conforme lista do feriado: {0}", -Year start date or end date is overlapping with {0}. To avoid please set company,Ano data de início ou data de término é a sobreposição com {0}. Para evitar defina empresa, -You are not authorized to add or update entries before {0},Você não está autorizado para adicionar ou atualizar entradas antes de {0}, -You are not authorized to approve leaves on Block Dates,Você não está autorizado a aprovar licenças em datas bloqueadas, -You are not authorized to set Frozen value,Você não está autorizado para definir o valor congelado, -You can not change rate if BOM mentioned agianst any item,Você não pode alterar a taxa se a LDM é mencionada em algum item, -You can not enter current voucher in 'Against Journal Entry' column,Você não pode lançar o comprovante atual na coluna 'Contra Entrada do Livro Diário', -You cannot credit and debit same account at the same time,Você não pode ter débito e crédito na mesma conta, -You have been invited to collaborate on the project: {0},Você foi convidado para colaborar com o projeto: {0}, -You have entered duplicate items. Please rectify and try again.,"Você digitou itens duplicados . Por favor, corrigir e tentar novamente.", -ZIP Code,CEP, -[{0}](#Form/Item/{0}) is out of stock,Não há [{0}] ({0}) em estoque., -`Freeze Stocks Older Than` should be smaller than %d days.,'Congelar Estoque anterior a' deve ser menor que %d dias., -disabled user,usuário desativado, -"e.g. ""Build tools for builders""","ex: ""Desenvolve ferramentas para construtores """, -old_parent,old_parent, -{0} '{1}' is disabled,{0} '{1}' está desativado, -{0} '{1}' not in Fiscal Year {2},{0} '{1}' não localizado no Ano Fiscal {2}, -{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3},{0} ({1}) não pode ser maior que a quantidade planejada ({2}) na Ordem de Trabalho {3}, -{0} Budget for Account {1} against {2} {3} is {4}. It will exceed by {5},{0} Orçamento para a Conta {1} contra o {2} {3} é {4}. Ele irá exceder em {5}, -{0} Digest,{0} Boletim, -{0} Serial Numbers required for Item {1}. You have provided {2}.,{0} número de série é necessário para item {1}. Você forneceu {2}., -{0} against Bill {1} dated {2},{0} contra duplicata {1} na data {2}, -{0} against Purchase Order {1},{0} relacionado ao Pedido de Compra {1}, -{0} against Sales Invoice {1},{0} contra Fatura de Venda {1}, -{0} against Sales Order {1},{0} contra o Pedido de Venda {1}, -{0} already allocated for Employee {1} for period {2} to {3},{0} já está alocado para o Colaborador {1} para o período de {2} até {3}, -{0} asset cannot be transferred,{0} ativo não pode ser transferido, -{0} created,{0} criou, -"{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, os Pedidos de Compra para este fornecedor devem ser emitidos com cautela.", -"{0} currently has a {1} Supplier Scorecard standing, and RFQs to this supplier should be issued with caution.","{0} já possui um {1} Scorecard de Fornecedor em aberto, portanto, as Cotações para este fornecedor devem ser emitidas com cautela.", -{0} entered twice in Item Tax,{0} entrou duas vezes no Imposto do Item, -{0} has been submitted successfully,{0} foi submetido com sucesso, -{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}.,{0} é obrigatório. Talvez o valor de câmbio não exista de {1} para {2}., -{0} is not a stock Item,{0} não é um item de estoque, -{0} is now the default Fiscal Year. Please refresh your browser for the change to take effect.,"{0} é agora o Ano Fiscal padrão. Por favor, atualize seu navegador para que a alteração tenha efeito.", -{0} items in progress,{0} itens em andamento, -{0} must appear only once,{0} deve aparecer apenas uma vez, -{0} payment entries can not be filtered by {1},{0} entradas de pagamento não podem ser filtrados por {1}, -{0} units of [{1}](#Form/Item/{1}) found in [{2}](#Form/Warehouse/{2}),{0} unidades de [{1}] (# Form / Item / {1}) foram encontrados em [{2}] (# Form / Armazém / {2}), -{0} valid serial nos for Item {1},{0} números de série válidos para o item {1}, -{0} {1} has been modified. Please refresh.,"{0} {1} foi modificado. Por favor, atualize.", -{0} {1} has not been submitted so the action cannot be completed,{0} {1} não foi enviado então a ação não pode ser concluída, -"{0} {1} is associated with {2}, but Party Account is {3}","{0} {1} está associado a {2}, mas a Conta do Partido é {3}", -{0} {1} is cancelled or closed,{0} {1} está cancelado(a) ou fechado(a), -{0} {1} is cancelled or stopped,{0} {1} está cancelado ou parado, -{0} {1} is cancelled so the action cannot be completed,{0} {1} é cancelado então a ação não pode ser concluída, -{0} {1} is closed,{0} {1} esta fechado(a), -{0} {1} is frozen,{0} {1} está congelado, -{0} {1} is not active,{0} {1} não está ativo, -{0} {1} is not associated with {2} {3},{0} {1} não está associado com {2} {3}, -{0} {1} not in any active Fiscal Year.,{0} {1} não está em nenhum ano fiscal ativo., -{0} {1} status is {2},O status {0} {1} é {2}, -{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Conta {2} não pertence à empresa {3}, -{0} {1}: Account {2} is inactive,{0} {1}: Conta {2} está inativa, -{0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: Entradas contabeis para {2} só pode ser feito em moeda: {3}, -{0} {1}: Cost Center is mandatory for Item {2},{0} {1}: Centro de Custo é obrigatória para item {2}, -{0} {1}: Cost Center is required for 'Profit and Loss' account {2}. Please set up a default Cost Center for the Company.,"{0} {1}: Centro de Custo é necessário para a conta de ""Lucros e Perdas"" {2}. Por favor, crie um Centro de Custo padrão para a Empresa.", -{0} {1}: Customer is required against Receivable account {2},{0} {1}: Um cliente é necessário contra contas a receber {2}, -{0} {1}: Either debit or credit amount is required for {2},{0} {1}: Um valor de débito ou crédito é necessário para {2}, -{0} {1}: Supplier is required against Payable account {2},{0} {1}: Fornecedor é necessário contra Conta a Pagar {2}, -"{0}: Employee email not found, hence email not sent","{0}: Email do colaborador não encontrado, portanto o email não foi enviado", -{0}: From {0} of type {1},{0}: A partir de {0} do tipo {1}, -{0}: From {1},{0}: A partir de {1}, -{0}: {1} not found in Invoice Details table,{0}: {1} não foi encontrado na tabela Detalhes da Fatura, -Assigned To,Atribuído a, -Chat,Chat, -Day of Week,Dia da Semana, -"Dear System Manager,","Caro Administrador de Sistemas,", -Default Value,Valor padrão, -Email Group,Grupo de Emails, -Email Settings,Configurações de Email, -Email not sent to {0} (unsubscribed / disabled),Email não enviado para {0} (inscrição cancelada / desativado), -Fieldtype,FieldType, -Help Articles,Artigo de Ajuda, -Images,Imagens, -Language,Idioma, -Likes,Likes, -Merge with existing,Mesclar com existente, -Parent,Parente, -Passive,Sem movimento, -Percent,Por cento, -Plant,Fábrica, -Post,Postar, -Postal Code,CEP, -Read Only,Somente Leitura, -There were errors while sending email. Please try again.,"Ocorreram erros durante o envio de email. Por favor, tente novamente.", -Values Changed,Valores Alterados, -Change,Alteração, -Contact Email,Email do Contato, -From Date,A Partir da Data, -Naming Series,Código dos Documentos, -Print Heading,Cabeçalho de Impressão, -Add / Manage Email Accounts.,Adicionar / Gerenciar contas de email., -Add Child,Adicionar sub-item, -Address Line 1,Endereço, -Browse,Procurar, -Cannot find a matching Item. Please select some other value for {0}.,"Não consegue encontrar um item correspondente. Por favor, selecione algum outro valor para {0}.", -Close,fechar, -Compact Item Print,Imprimir item no formato compacto, -Date Range,Intervalo entre datas, -Delete,Excluir, -Download Template,Baixar Modelo, -Email,Enviar e-mail, -End Time,Horário de Término, -Enter Value,Digite o Valor, -Export not allowed. You need {0} role to export.,Exportação não é permitido. Você precisa da função {0} para exportar., -File Manager,Gestor de Arquivos, -Goal,Meta, -Group Node,Grupo de Nós, -Help Article,Artigo de Ajuda, -Invite as User,Convidar como Usuário, -Loading...,Carregando..., -Make Journal Entry,Fazer Lançamento no Livro Diário, -Make Purchase Invoice,Criar fatura de compra, -Master,Cadastro, -Missing Values Required,Faltando informações obrigatórias, -Mobile No,Telefone Celular, -Mobile Number,Telefone Celular, -Open,Aberto, -Pause,pausar, -Quarterly,Trimestralmente, -Queued,Enfileiradas, -Quick Entry,Entrada Rápida, -Refreshing,Atualizando, -Rename,Renomear, -Report this Item,Reportar este item, -Reset,Restaurar, -Room,Sala, -Search results for,Pesquisar resultados para, -Select All,Selecionar Tudo, -Sending,Transmitindo, -Server Error,Erro de Servidor, -Set,Definir, -Setup,Configuração, -Shift Management,Gerenciamento de Turno, -Start,Iniciar, -Start Time,Horário de Início, -Supplier Addresses And Contacts,Endereços e Contatos de Fornecedores, -User {0} is disabled,Usuário {0} está desativado, -Users and Permissions,Usuários e Permissões, -View,Ver, -Your rating:,Seu rating:, -{0} Name,{0} Nome, -Left,Saiu, -Not Found,Não encontrado, -Refresh,Atualizar, -In Stock,Em Estoque, -Mode Of Payment,Forma de Pagamento, -Not in Stock,Esgotado, -To date cannot be before From date,Até o momento não pode ser antes a partir da data, -Write Off,Abatimento, -{0} Created,{0} criou, -Email Id,Email ID, -User Id,ID de Usuário, -Chart of Accounts,Plano de Contas, -Customer database.,Banco de Dados de Clientes, -Days Since Last order,Dias desde a última compra, -End date can not be less than start date,Data final não pode ser inferior a data de início, -From date cannot be greater than To date,A partir de data não pode ser maior que a Data, -Group by,Agrupar por, -In stock,Em Estoque, -No employee found,Nenhum colaborador encontrado, -No students found,Nenhum Aluno Encontrado, -Not in stock,Esgotado, -Open Issues ,Incidentes Abertos, -Open To Do ,Atribuições em aberto, -Operation Id,ID da Operação, -Partially ordered,Parcialmente Comprados, -Please select company first,"Por favor, selecione Empresa primeiro", -Projected qty,Qtde Projetada, -Serial No {0} Created,Nº de Série {0} criado, -Tax Id,CPF/CNPJ, -To Time,Até o Horário, -To date cannot be before from date,Até o momento não pode ser antes a partir da data, -Upcoming Calendar Events ,Próximos Eventos do Calendário, -Value or Qty,Valor ou Qtde, -Write off,Abatimento, -to,Para, -Purchase Order Required,Pedido de Compra Obrigatório, -Purchase Receipt Required,Recibo de Compra Obrigatório, -Verified By,Verificado por, -Maintain Same Rate Throughout Sales Cycle,Manter o mesmo preço durante todo o ciclo de vendas, -Must be Whole Number,Deve ser Número inteiro, -Leaves Allocated,Licenças Alocadas, -Leaves Expired,Licenças Expiradas, -GL Entry,Lançamento GL, -Work Orders,Ordens de Trabalho, -Qty to Manufacture,Qtde para Fabricar, -Heads (or groups) against which Accounting Entries are made and balances are maintained.,Heads (ou grupos) contra o qual as entradas de Contabilidade são feitas e os saldos são mantidos., -Parent Account,Conta Superior, -Setting Account Type helps in selecting this Account in transactions.,Definir o Tipo de Conta ajuda na seleção desta Conta nas transações., -Chargeable,Taxável, -Rate at which this tax is applied,Taxa em que este imposto é aplicado, -Frozen,Congelado, -"If the account is frozen, entries are allowed to restricted users.","Se a conta for congelada, os lançamentos só serão permitidos aos usuários restritos.", -Balance must be,O Saldo deve ser, -Old Parent,Pai Velho, -Accounts Settings,Configurações de Contas, -Settings for Accounts,Configurações para Contas, -Make Accounting Entry For Every Stock Movement,Fazer lançamento contábil para cada movimento de estoque, -Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,Os usuários com esta função são autorizados a estabelecer contas congeladas e criar / modificar lançamentos contábeis contra contas congeladas, -Credit Controller,Controlador de crédito, -Check Supplier Invoice Number Uniqueness,Verificar unicidade de número de nota fiscal do fornecedor, -Make Payment via Journal Entry,Fazer o Pagamento via Lançamento no Livro Diário, -Book Asset Depreciation Entry Automatically,Lançar Depreciação de Ativos no Livro Automaticamente, -Allow Stale Exchange Rates,Permitir taxas de câmbio defasadas, -Address and Contact,Endereço e Contato, -Contact HTML,Contato HTML, -Account Details,Detalhes da Conta, -Bank Guarantee,Garantia Bancária, -Include Reconciled Entries,Incluir entradas reconciliadas, -Get Payment Entries,Obter Lançamentos de Pagamentos, -Payment Entries,Lançamentos de Pagamentos, -Update Clearance Date,Atualizar Data Liquidação, -Bank Reconciliation Detail,Detalhe da conciliação bancária, -Cheque Number,Número do cheque, -Statement Header Mapping,Mapeamento do cabeçalho de demonstrativos, -Statement Headers,Cabeçalhos de demonstrativos, -Invoice Date,Data do Faturamento, -Unallocated Amount,Total não alocado, -Warn,Avisar, -Budget Amount,Valor do Orçamento, -C-Form,Formulário-C, -C-Form No,Nº do Formulário-C, -Received Date,Data de Recebimento, -C-Form Invoice Detail,Detalhe Fatura do Formulário-C, -Invoice No,Nota nº, -Cheque Print Template,Template para Impressão de Cheques, -Cheque Size,Tamanho da Folha de Cheque, -Scanned Cheque,Cheque Escaneado, -Date Settings,Configurações de Data, -Payer Settings,Configurações do Pagador, -Amount In Figure,Total em Espécie, -Track separate Income and Expense for product verticals or divisions.,Acompanhe resultados separada e despesa para verticais de produtos ou divisões., -Parent Cost Center,Centro de Custo pai, -lft,LFT, -**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.,O **Ano Fiscal** representa um exercício financeiro. Todos os lançamentos contábeis e outras transações principais são rastreadas contra o **Ano Fiscal**., -Year Name,Nome do ano, -"For e.g. 2012, 2012-13","Para por exemplo 2012, 2012-13", -Year Start Date,Data do início do ano, -Year End Date,Data final do ano, -Auto Created,Criado automaticamente, -Stock User,Usuário de Estoque, -Fiscal Year Company,Ano Fiscal Empresa, -Debit Amount,Total do Débito, -Credit Amount,Total de Crédito, -Debit Amount in Account Currency,Débito em moeda da conta, -Credit Amount in Account Currency,Crédito em moeda da conta, -Voucher Detail No,Nº do Detalhe do Comprovante, -Is Opening,É Abertura, -Is Advance,É Adiantamento, -Entry Type,Tipo de Lançamento, -Bank Entry,Lançamento Bancário, -Cash Entry,Entrada de Caixa, -Credit Card Entry,Lançamento de Cartão de Crédito, -Contra Entry,Contrapartida de Entrada, -Excise Entry,Lançamento de Impostos, -Write Off Entry,Lançamento de Abatimento, -Opening Entry,Lançamento de Abertura, -Accounting Entries,Lançamentos contábeis, -Total Debit,Débito total, -Total Credit,Crédito total, -Difference (Dr - Cr),Diferença ( Dr - Cr), -Make Difference Entry,Criar Lançamento de Contrapartida, -Total Amount in Words,Valor total por extenso, -Write Off Based On,Abater baseado em, -Get Outstanding Invoices,Obter notas pendentes, -Printing Settings,Configurações de impressão, -Pay To / Recd From,Pagar Para / Recebido De, -Subscription Section,Seção de assinatura, -Journal Entry Account,Conta de Lançamento no Livro Diário, -Account Balance,Saldo da conta, -Party Balance,Saldo do Parceiro, -If Income or Expense,Se é Receita ou Despesa, -Exchange Rate,Taxa de Câmbio, -Debit in Company Currency,Débito em moeda da empresa, -Credit in Company Currency,Crédito em moeda da empresa, -Employee Advance,Adiantamento à Colaboradores, -Mode of Payment Account,Modo de pagamento da conta, -Distribution Name,Nome da distribuição, -Name of the Monthly Distribution,Nome da distribuição mensal, -Monthly Distribution Percentages,Percentagens distribuição mensal, -Monthly Distribution Percentage,Distribuição percentual mensal, -Percentage Allocation,Alocação Percentual, -Party Account,Conta do Parceiro, -Account Paid From,Conta de Origem do Pagamento, -Account Paid To,Recebido na Conta, -Paid Amount (Company Currency),Valor pago (moeda da empresa), -Received Amount,Total recebido, -Received Amount (Company Currency),Total recebido (moeda da empresa), -Total Allocated Amount,Total Alocado, -Total Allocated Amount (Company Currency),Total alocado (moeda da empresa), -Set Exchange Gain / Loss,Definir Perda/Ganho com Câmbio, -Difference Amount (Company Currency),Total da diferença (moeda da empresa), -Write Off Difference Amount,Valor da diferença do abatimento, -Deductions or Loss,Dedução ou Perda, -Payment Deductions or Loss,Deduções ou perdas de pagamento, -Allocated,Alocado, -Payment Gateway Account,Integração com API's de Meios de Pagamento, -Default Payment Request Message,Mensagem Padrão de Pedido de Pagamento, -Receivable / Payable Account,Conta de Recebimento/Pagamento, -Bank / Cash Account,Banco / Conta Caixa, -From Invoice Date,A Partir da Data de Faturamento, -To Invoice Date,Até a Data de Faturamento, -Minimum Invoice Amount,Valor Mínimo da Fatura, -Maximum Invoice Amount,Valor Máximo da Fatura, -Get Unreconciled Entries,Obter Lançamentos não Conciliados, -Unreconciled Payment Details,Detalhes do Pagamento não Conciliado, -Invoice/Journal Entry Details,Detalhes da Fatura/Lançamento no Livro Diário, -Payment Reconciliation Invoice,Fatura da Conciliação de Pagamento, -Invoice Number,Número da Nota Fiscal, -Payment Reconciliation Payment,Pagamento da Conciliação de Pagamento, -Allocated amount,Quantidade atribuída, -Amount in customer's currency,Total em moeda do cliente, -Transaction Currency,Moeda de transação, -Make Sales Invoice,Fazer Fatura de Venda, -Mute Email,Mudo Email, -payment_url,payment_url, -Payment Terms Template Detail,Detalhes do Modelo de Termos de Pagamento, -Closing Fiscal Year,Encerramento do Exercício Fiscal, -Closing Account Head,Conta de Fechamento, -"The account head under Liability or Equity, in which Profit/Loss will be booked","Conta sob Passivo ou Capital Próprio, no qual o Lucro / Prejuízo será escrito", -POS Customer Group,Grupo de Cliente PDV, -POS Item Group,Grupo de Itens PDV, -Update Stock,Atualizar Estoque, -Ignore Pricing Rule,Ignorar regra de preços, -Sales Invoice Payment,Pagamento da Fatura de Venda, -Write Off Account,Conta de Abatimentos, -Write Off Cost Center,Centro de custo do abatimento, -Account for Change Amount,Conta para troco, -Apply Discount On,Aplicar Discount On, -POS Profile User,Perfil de Usuário do PDV, -Apply On,Aplicar em, -Min Qty,Qtde Mínima, -Max Qty,Qtde Máxima, -Margin Type,Tipo da Margem, -Margin Rate or Amount,Percentual ou Valor de Margem, -Discount Amount,Valor do Desconto, -For Price List,Para Lista de Preço, -Pricing Rule Help,Regra Preços Ajuda, -Is Paid,Está pago, -Is Return (Debit Note),É devolução (nota de débito), -Apply Tax Withholding Amount,Aplicar retenção fiscal, -Supplier Invoice Date,Data de emissão da nota fiscal de compra, -Return Against Purchase Invoice,Devolução Relacionada à Fatura de Compra, -Select Supplier Address,Selecione um Endereço do Fornecedor, -Contact Person,Pessoa de Contato, -Select Shipping Address,Selecione um Endereço de Entrega, -Currency and Price List,Moeda e Preço, -Rejected Warehouse,Armazén de Itens Rejeitados, -Warehouse where you are maintaining stock of rejected items,Armazén onde você está mantendo estoque de itens rejeitados, -Supplier Warehouse,Armazén do Fornecedor, -Supplied Items,Itens fornecidos, -Total (Company Currency),Total (moeda da empresa), -Net Total (Company Currency),Total Líquido (moeda da empresa), -Purchase Taxes and Charges Template,Modelo de Encargos e Impostos sobre Compras, -Purchase Taxes and Charges,Impostos e Encargos sobre Compras, -Taxes and Charges Added (Company Currency),Impostos e taxas acrescidos (moeda da empresa), -Taxes and Charges Deducted (Company Currency),Impostos e taxas deduzidos (moeda da empresa), -Total Taxes and Charges (Company Currency),Total de impostos e taxas (moeda da empresa), -Total Taxes and Charges,Total de Impostos e Encargos, -Apply Additional Discount On,Aplicar Desconto Adicional em, -Additional Discount Amount (Company Currency),Total do desconto adicional (moeda da empresa), -Grand Total (Company Currency),Total geral (moeda da empresa), -Rounded Total (Company Currency),Total arredondado (moeda da empresa), -In Words (Company Currency),Por extenso (moeda da empresa), -Total Advance,Total Pago Adiantado, -Disable Rounded Total,Desativar total arredondado, -Cash/Bank Account,Conta do Caixa/Banco, -Write Off Amount (Company Currency),Valor abatido (moeda da empresa), -Get Advances Paid,Obter adiantamentos pagos, -Terms,Condições, -Terms and Conditions1,Termos e Condições, -Credit To,Crédito para, -Party Account Currency,Moeda do Parceiro, -Against Expense Account,Contra a Conta de Despesas, -Start date of current invoice's period,Data de início do período de fatura atual, -End date of current invoice's period,Data final do período de fatura atual, -Purchase Invoice Advance,Adiantamento da Fatura de Compra, -Purchase Invoice Item,Item da Fatura de Compra, -Received Qty,Qtde Recebida, -Rejected Qty,Qtde Rejeitada, -UOM Conversion Factor,Fator de Conversão da Unidade de Medida, -Discount on Price List Rate (%),% de Desconto sobre o Preço da Lista de Preços, -Price List Rate (Company Currency),Preço da Lista de Preços (moeda da empresa), -Rate (Company Currency),Preço (moeda da empresa), -Amount (Company Currency),Total (moeda da empresa), -Net Rate (Company Currency),Preço líquido (moeda da empresa), -Net Amount (Company Currency),Valor Líquido (moeda da empresa), -Landed Cost Voucher Amount,Comprovante de Custo do Desembarque, -Raw Materials Supplied Cost,Custo de fornecimento de Matérias-primas, -Accepted Warehouse,Armazén Aceito, -Serial No,Nº de Série, -Rejected Serial No,Nº de Série Rejeitado, -Expense Head,Conta de despesas, -Is Fixed Asset,É Ativo Imobilizado, -Enable Deferred Expense,Ativar Despesa diferida, -Allow Zero Valuation Rate,Permitir Taxa de Avaliação Zero, -Item Tax Rate,Alíquota do Imposto do Item, -Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges,Detalhe da tabela de imposto obtido a partir do cadastro do item como texto e armazenado neste campo. Usado para Tributos e Encargos, -Purchase Order Item,Item do Pedido de Compra, -Weight Per Unit,Peso Unitário, -Weight UOM,UDM de Peso, -Page Break,Quebra de Página, -Consider Tax or Charge for,Considere Imposto ou Encargo para, -Valuation and Total,Valorização e Total, -Add or Deduct,Adicionar ou Reduzir, -On Previous Row Amount,No Valor da Linha Anterior, -Reference Row #,Referência Linha #, -Is this Tax included in Basic Rate?,Este Imposto Está Incluído na Base de Cálculo?, -"If checked, the tax amount will be considered as already included in the Print Rate / Print Amount","Se marcado, o valor do imposto será considerado como já incluído na Impressão de Taxa / Impressão do Valor", -Account Head,Conta, -Tax Amount After Discount Amount,Total de Impostos Depois Montante do Desconto, -"Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.","Template fiscal padrão que pode ser aplicado a todas as operações de compra. Este modelo pode conter a lista de cabeças de impostos e também outros chefes de despesas como ""Frete"", ""Seguro"", ""Manutenção"" etc. \n\n #### Nota \n\n A taxa de imposto que você definir aqui será a taxa normal do IVA para todos os itens ** **. Se houver itens ** ** que têm taxas diferentes, eles devem ser adicionados no ** Imposto item ** tabela no item ** ** mestre.\n\n #### Descrição das Colunas \n\n 1. Tipo de Cálculo: \n - Isto pode ser em ** Total Líquida ** (que é a soma da quantidade de base).\n - ** Na linha anterior Total / Valor ** (para os impostos cumulativos ou encargos). Se você selecionar essa opção, o imposto será aplicado como uma percentagem da linha anterior (na tabela de impostos) ou montante total.\n - ** ** Real (como indicado).\n 2. Chefe da conta: A contabilidade conta em que este imposto será reservado \n 3. Centro de Custo: Se o imposto / taxa é uma renda (como o transporte) ou despesa que precisa ser reservado contra um centro de custo.\n 4. Descrição: Descrição do imposto (que será impresso em facturas / aspas).\n 5. Classificação: Taxa de imposto.\n 6. Valor: Valor das taxas.\n 7. Total: Total acumulado até este ponto.\n 8. Digite Row: Se baseado em ""Anterior Row Total"", você pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior).\n 9. Considere imposto ou encargo para: Nesta seção, você pode especificar se o imposto / taxa é apenas para avaliação (não uma parte do total) ou apenas para total (não agrega valor ao item) ou para ambos.\n 10. Adicionar ou deduzir: Se você quer adicionar ou deduzir o imposto.", -Salary Component Account,Conta do Componente Salárial, -Include Payment (POS),Incluir pagamento (PDV), -Offline POS Name,Nome do POS Offline, -Is Return (Credit Note),É devolução (nota de crédito), -Return Against Sales Invoice,Devolução contra Fatura de Venda, -Customer's Purchase Order,Pedido de Compra do Cliente, -Customer's Purchase Order Date,Data do Pedido de Compra do Cliente, -Customer Address,Endereço do Cliente, -Shipping Address Name,Endereço de Entrega, -Rate at which Customer Currency is converted to customer's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base do cliente, -Rate at which Price list currency is converted to customer's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base do cliente, -Set Source Warehouse,Definir Armazém de Origem, -Packing List,Lista de Embalagem, -Packed Items,Pacotes de Itens, -Product Bundle Help,Pacote de Produtos Ajuda, -Time Sheet List,Lista de Registros de Tempo, -Time Sheets,Registros de Tempo, -Total Billing Amount,Valor Total do Faturamento, -Sales Taxes and Charges Template,Modelo de Encargos e Impostos sobre Vendas, -Sales Taxes and Charges,Impostos e Taxas sobre Vendas, -In Words will be visible once you save the Sales Invoice.,Por extenso será visível quando você salvar a Fatura de Venda., -Allocate Advances Automatically (FIFO),Alocar adiantamentos automaticamente (FIFO), -Get Advances Received,Obter adiantamentos recebidos, -Base Change Amount (Company Currency),Troco (moeda da empresa), -Write Off Outstanding Amount,Abater saldo devedor, -Terms and Conditions Details,Detalhes dos Termos e Condições, -Accounting Details,Detalhes da Contabilidade, -Is Opening Entry,É Lançamento de Abertura, -C-Form Applicable,Formulário-C Aplicável, -Commission Rate (%),Percentual de Comissão (%), -Sales Team1,Equipe de Vendas 1, -Against Income Account,Contra a Conta de Recebimentos, -Sales Invoice Advance,Adiantamento da Fatura de Venda, -Advance amount,Valor Adiantado, -Sales Invoice Item,Item da Fatura de Venda, -Qty as per Stock UOM,Qtde por UDM do Estoque, -Delivered By Supplier,Proferido por Fornecedor, -Stock Details,Detalhes do Estoque, -Customer Warehouse (Optional),Armazén do Cliente (Opcional), -Available Batch Qty at Warehouse,Qtde Disponível do Lote no Armazén, -Available Qty at Warehouse,Qtde Disponível no Estoque, -Base Amount (Company Currency),Valor Base (moeda da empresa), -Sales Invoice Timesheet,Registro de Tempo da Fatura de Venda, -Time Sheet,Registro de Tempo, -Billing Hours,Horas Faturadas, -Timesheet Detail,Detalhes do Registro de Tempo, -Tax Amount After Discount Amount (Company Currency),Valor do imposto após desconto (moeda da empresa), -Item Wise Tax Detail,Detalhes do Imposto Vinculados ao Item, -Parenttype,Parenttype, -"Standard tax template that can be applied to all Sales Transactions. This template can contain list of tax heads and also other expense / income heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Template fiscal padrão que pode ser aplicada a todas as transações de vendas. Este modelo pode conter a lista de cabeças de impostos e também outros chefes despesa / receita como ""Frete"", ""Seguro"", ""Manutenção"" etc. \n\n #### Nota \n\n a taxa de imposto definir aqui será a taxa normal do IVA para todos os itens ** **. Se houver itens ** ** que têm taxas diferentes, eles devem ser adicionados no ** Imposto item ** tabela no item ** ** mestre.\n\n #### Descrição das Colunas \n\n 1. Tipo de Cálculo: \n - Isto pode ser em ** Total Líquida ** (que é a soma da quantidade de base).\n - ** Na linha anterior Total / Valor ** (para os impostos cumulativos ou encargos). Se você selecionar essa opção, o imposto será aplicado como uma percentagem da linha anterior (na tabela de impostos) ou montante total.\n - ** ** Real (como indicado).\n 2. Chefe da conta: A contabilidade conta em que este imposto será reservado \n 3. Centro de Custo: Se o imposto / taxa é uma renda (como o transporte) ou despesa que precisa ser reservado contra um centro de custo.\n 4. Descrição: Descrição do imposto (que será impresso em facturas / aspas).\n 5. Classificação: Taxa de imposto.\n 6. Valor: Valor das taxas.\n 7. Total: Total acumulado até este ponto.\n 8. Digite Row: Se baseado em ""Anterior Row Total"", você pode selecionar o número da linha que será tomado como base para este cálculo (o padrão é a linha anterior).\n 9. É este imposto incluído na Taxa Básica ?: Se você verificar isso, significa que este imposto não será exibido abaixo da tabela de item, mas será incluída na taxa básica em sua tabela item principal. Isso é útil quando você quer dar um preço fixo (incluindo todos os impostos) dos preços para os clientes.", -Specify conditions to calculate shipping amount,Especificar condições para calcular valor de frete, -Shipping Rule Label,Rótulo da Regra de Envio, -example: Next Day Shipping,exemplo: envio no dia seguinte, -Calculate Based On,Calcule Baseado em, -Shipping Amount,Valor do Transporte, -Shipping Rule Conditions,Regra Condições de envio, -Shipping Rule Condition,Regra Condições de envio, -A condition for a Shipping Rule,A condição para uma regra de Remessa, -From Value,De Valor, -To Value,Para o Valor, -Shipping Rule Country,Regra envio País, -Additional DIscount Percentage,Percentual de Desconto Adicional, -Additional DIscount Amount,Total do Desconto Adicional, -Subscription Settings,Configurações de Assinatura, -Tax Rule,Regras de Aplicação de Impostos, -Use for Shopping Cart,Use para Compras, -Billing City,Cidade de Faturamento, -Billing County,País de Faturamento, -Billing State,Estado de Faturamento, -Billing Country,País de Faturamento, -Shipping County,Condado de Entrega, -Row Spacing UOM,Espaçamento de linhas UDM, -Loam,Barro, -Clay Loam,Barro de Argila, -Weather Parameter,Parâmetro do Clima, -Journal Entry for Scrap,Lançamento no Livro Diário para Sucata, -Straight Line,Linha reta, -Double Declining Balance,Equilíbrio decrescente duplo, -Value After Depreciation,Valor após Depreciação, -Total Number of Depreciations,Número Total de Depreciações, -Frequency of Depreciation (Months),Frequência das Depreciações (meses), -Depreciation Schedule,Tabela de Depreciação, -Depreciation Schedules,Tabelas de Depreciação, -Quality Manager,Gerente de Qualidade, -Asset Category Name,Ativo Categoria Nome, -Asset Category Account,Ativo Categoria Conta, -Fixed Asset Account,Conta do Ativo Imobilizado, -Depreciation Expense Account,Conta de Depreciação, -Expected Value After Useful Life,Valor Esperado Após Sua Vida Útil, -Manufacturing User,Usuário de Fabricação, -Maintenance Status,Status da Manutenção, -2 Yearly,2 Anos, -Purpose,Finalidade, -Stock Manager,Gerente de Estoque, -From Employee,Do Colaborador, -To Employee,Para Colaborador, -Manufacturing Manager,Gerente de Fabricação, -Make Depreciation Entry,Fazer Lançamento de Depreciação, -Tree Details,Detalhes da árvore, -Buying Settings,Configurações de Compras, -Settings for Buying Module,Configurações para o Módulo de Compras, -Supplier Naming By,Nomeação do Fornecedor por, -Default Buying Price List,Lista de preço de compra padrão, -Get Items from Open Material Requests,Obter Itens de Requisições de Material Abertas, -Required By,Entrega em, -Order Confirmation No,Nº de Confirmação do Pedido, -Customer Mobile No,Celular do Cliente, -Customer Contact Email,Cliente Fale Email, -Set Target Warehouse,Definir Armazém de Destino, -Supply Raw Materials,Abastecimento de Matérias-primas, -In Words will be visible once you save the Purchase Order.,Por extenso será visível quando você salvar o Pedido de Compra., -% Billed,Faturado %, -% Received,Recebido %, -Ref SQ,Ref SQ, -Supplier Part Number,Número da Peça do Fornecedor, -Billed Amt,Valor Faturado, -To be delivered to customer,Para ser entregue ao cliente, -Material Request Item,Item da Requisição de Material, -Supplier Quotation Item,Item do Orçamento de Fornecedor, -Blanket Order,Pedido Limitado, -Blanket Order Rate,Preço do pedido limitado, -Returned Qty,Qtde Devolvida, -Purchase Order Item Supplied,Item Fornecido do Pedido de Compra, -BOM Detail No,Nº do detalhe da LDM, -Stock Uom,Unidade de Medida do Estoque, -Raw Material Item Code,Código de Item de Matérias-primas, -Supplied Qty,Qtde fornecida, -Purchase Receipt Item Supplied,Item do Recibo de Compra Fornecido, -Current Stock,Estoque Atual, -Request for Quotation Item,Solicitação de Orçamento do Item, -Required Date,Para o Dia, -Request for Quotation Supplier,Solicitação de Orçamento para Fornecedor, -Supplier of Goods or Services.,Fornecedor de bens ou serviços., -Represents Company,Representa a Empresa, -Warn RFQs,Alertar em Solicitações de Orçamentos, -Warn POs,Avisar em Pedidos de Compra, -Prevent RFQs,Evitar Orçamentos, -Prevent POs,Evitar Pedidos de Compra, -Billing Currency,Moeda de Faturamento, -Supplier Details,Detalhes do Fornecedor, -Statutory info and other general information about your Supplier,Informações contratuais e outras informações gerais sobre o seu fornecedor, -Is Subcontracted,É subcontratada, -Lead Time in days,Prazo de Entrega (em dias), -Warn for new Request for Quotations,Avisar ao criar novas solicitações de orçamentos, -Warn for new Purchase Orders,Avisar em Novos Pedidos de Compra, -Notify Employee,Notificar Colaborador, -Warn Purchase Orders,Avisar em Pedidos de Compra, -Prevent Purchase Orders,Evitar Pedidos de Compra, -Employee ,Colaborador, -Supplier Scorecard Standing,Scorecard do Fornecedor Ativo, -Contact Name,Nome do Contato, -Lead Name,Nome do Lead, -Communication Medium,Meio de comunicação, -Customer Details,Detalhes do Cliente, -From Time ,Do Horário, -Signee Details,Detalhes do Signatário, -Signee,Signatário, -Lead is an Organization,Cliente em Potencial é uma Empresa, -Do Not Contact,Não entre em contato, -Next Contact By,Próximo Contato Por, -Next Contact Date,Data do Próximo Contato, -Address & Contact,Endereço e Contato, -Mobile No.,Telefone Celular, -Lead Type,Tipo de Lead, -Channel Partner,Canal de Parceria, -Market Segment,Segmento de Renda, -Industry,Indústria, -Product Enquiry,Consulta de Produto, -Request for Information,Solicitação de Informação, -Potential Sales Deal,Promoção de Vendas Potenciais, -Opportunity From,Oportunidade de, -Customer / Lead Name,Nome do Cliente/Lead, -Lost Reason,Motivo da Perda, -Contact Info,Informações para Contato, -Customer / Lead Address,Endereço do Cliente/Lead, -Contact Mobile No,Celular do Contato, -Enter name of campaign if source of enquiry is campaign,Digite o nome da campanha se o motivo da consulta foi uma campanha., -Opportunity Date,Data da Oportunidade, -Opportunity Item,Item da Oportunidade, -Term Name,Nome do Período Letivo, -Term Start Date,Data de Início do Ano Letivo, -Term End Date,Data de Término do Período Letivo, -Academics User,Usuário Acadêmico, -Grading Scale,Escala de avaliação, -Supervisor Name,Nome do supervisor, -Maximum Score,Nota Máxima, -Total Score,Nota Total, -Grade,Nota de Avaliação, -Default Grading Scale,Escala de avaliação padrão, -Course Scheduling Tool,Ferramenta de Agendamento de Cursos, -To TIme,Até o Horário, -Topic,Tópico, -Topic Name,Nome do tópico, -Employee Number,Número do Colaborador, -Fee Category,Categoria de Taxas, -Fee Component,Componente da Taxa, -Fees Category,Categoria de Taxas, -Fee Schedule,Cronograma de Taxas, -Fee Structure,Estrutura da Taxa, -In Process,Em Processo, -Student Category,Categoria do Aluno, -Student Batch,Série de Alunos, -Grading Scale Name,Nome escala de avaliação, -Grading Scale Intervals,Intervalos da escala de avaliação, -Grading Scale Interval,Intervalo da escala de avaliação, -Grade Code,Código de Nota de Avaliação, -Threshold,Média, -Grade Description,Descrição da Nota de Avaliação, -Guardian Of ,Responsável por, -Students,Alunos, -Guardian Interests,Interesses do Responsável, -Other details,Outros detalhes, -Program Enrollment Fee,Taxa de Inscrição no Programa, -Get Students From,Obter Alunos de, -Student Applicant,Inscrição do Aluno, -Get Students,Obter Alunos, -Enroll Students,Matricular Alunos, -Program Enrollment Tool Student,Ferramenta de Inscrição de Alunos no Programa, -Student Batch Name,Nome da Série de Alunos, -Program Fee,Taxa do Programa, -Room Number,Número da Sala, -Seating Capacity,Número de Assentos, -Student Mobile Number,Número de Celular do Aluno, -Guardian Details,Detalhes do Responsável, -Exit,Saída, -Student Admission,Admissão do Aluno, -Publish on website,Publicar no site, -Naming Series (for Student Applicant),Código dos Documentos (para condidato à vaga de estudo), -Student Attendance Tool,Ferramenta de Presença dos Alunos, -Students HTML,Alunos HTML, -Student Group Name,Nome do Grupo de Alunos, -Student Group Creation Tool,Ferramenta de Criação de Grupos de Alunos, -Student Group Creation Tool Course,Ferramenta de Criação de Grupo de Alunos, -Course Code,Código do Curso, -Student Group Student,Aluno Grupo de Alunos, -Student Guardian,Responsável pelo Aluno, -Student Leave Application,Pedido de Licença do Aluno, -Mark as Present,Marcar como presente, -Student Log,Log do Aluno, -Academic,Acadêmico, -Student Sibling,Irmão do Aluno, -Student Siblings,Irmãos do Aluno, -UOMs,Unidades de Medida, -Round Off Account,Conta de Arredondamento, -Healthcare Administrator,Administrador de Serviço de Saúde, -Actual Qty (at source/target),Qtde Real (na origem / destino), -Item Details,Detalhes do Item, -Rate / UOM,Valor / UDM, -Avoid Confirmation,Não Confirmar, -Employee name and designation in print,Nome do colaborador e designação em impressão, -LabTest Approver,Aprovador de Teste de Laboratório, -Single,Solteiro, -Married,Casado, -Late Checkin,Late Checkin, -Salary Slip,Contracheque, -HR User,Usuário do RH, -Job Applicant,Candidato à Vaga, -For Employee Name,Para Nome do Colaborador, -Goals,Metas, -Total Score (Out of 5),Pontuação Total (nota máxima 5), -"Any other remarks, noteworthy effort that should go in the records.","Quaisquer outras observações, esforço digno de nota que deve constar nos registros.", -Appraisal Goal,Meta de Avaliação, -Key Responsibility Area,Área de responsabilidade principal, -Score (0-5),Pontuação (0-5), -Score Earned,Pontuação Obtida, -Appraisal Template Goal,Meta do Modelo de Avaliação, -KRA,APR, -Key Performance Area,Área de performance principal, -On Leave,De Licença, -Leave Application,Solicitação de Licenças, -Attendance Date,Data de Comparecimento, -Attendance Request,Solicitação de Marcação de Ponto, -Half Day Date,Meio Período da Data, -Leave Allocation,Alocação de Licenças, -Send Emails At,Enviar Emails em, -Leave Block List,Lista de Bloqueio de Licença, -Days for which Holidays are blocked for this department.,Dias para que feriados são bloqueados para este departamento., -Cellphone Number,Número do celular, -Fleet Manager,Gerente de Frota, -Employment Type,Tipo de Emprego, -Emergency Contact,Contato de emergência, -"System User (login) ID. If set, it will become default for all HR forms.","Identificação do usuário no sistema (login). Se for marcado, ele vai se tornar padrão para todos os formulários de RH.", -This will restrict user access to other employee records,Isso restringirá o acesso do usuário a outros registros de colaboradores, -Offer Date,Data da Oferta, -Contract End Date,Data Final do Contrato, -Notice (days),Aviso Prévio ( dias), -Date Of Retirement,Data da aposentadoria, -Leave Policy,Política de Licença, -Applicable Holiday List,Lista de Férias Aplicável, -Salary Mode,Modo de Salário, -Bank A/C No.,Nº Cta. Bancária, -Permanent Address Is,Endereço permanente é, -Permanent Address,Endereço permanente, -Current Address Is,Endereço atual é, -Short biography for website and other publications.,Breve biografia para o site e outras publicações., -Passport Number,Número do Passaporte, -Place of Issue,Local de Envio, -Widowed,Viúvo(a), -Family Background,Antecedentes familiares, -"Here you can maintain family details like name and occupation of parent, spouse and children","Aqui você pode manter detalhes familiares como o nome e ocupação do cônjuge, pai e filhos", -Health Details,Detalhes sobre a Saúde, -"Here you can maintain height, weight, allergies, medical concerns etc","Aqui você pode manter a altura, peso, alergias, restrições médicas, etc", -Previous Work Experience,Experiência anterior de trabalho, -External Work History,Histórico Profissional no Exterior, -History In Company,Histórico na Empresa, -Internal Work History,História Trabalho Interno, -Resignation Letter Date,Data da Carta de Demissão, -Relieving Date,Data da Liberação, -Reason for Leaving,Motivo da saída, -Leave Encashed?,Licenças Cobradas?, -Encashment Date,Data da cobrança, -Advance Account,Conta de Adiantamentos, -Employee Attendance Tool,Ferramenta para Lançamento de Ponto, -Unmarked Attendance,Presença Desmarcada, -Employees HTML,Colaboradores HTML, -Marked Attendance HTML,Presença marcante HTML, -Employee Benefit Application,Aplicação de Benefício ao Colaborador, -Payroll Period,Período da Folha de Pagamento, -Employee Benefit Application Detail,Detalhes da aplicação de benefício do colaborador, -Employee Benefit Claim,Reivindicação de benefícios do colaborador, -Employee Boarding Activity,Atividade de integração de colaboradores, -Required for Employee Creation,Necessário para a criação de colaboradores, -Applicable in the case of Employee Onboarding,Aplicável no caso de Integração de Colaboradores, -Employee Education,Escolaridade do Colaborador, -School/University,Escola / Universidade, -Graduate,Pós-graduação, -Under Graduate,Em Graduação, -Year of Passing,Ano de passagem, -Class / Percentage,Classe / Percentual, -Major/Optional Subjects,Assuntos Principais / Opcionais, -Employee External Work History,Histórico de Trabalho Externo do Colaborador, -Employee Health Insurance,Seguro de Saúde do Colaborador, -Employee Incentive,Incentivo ao Colaborador, -Employee Internal Work History,Histórico de Trabalho Interno do Colaborador, -Employee Onboarding,Integração de Colaborador, -Employee Onboarding Template,Modelo de Integração de Colaboradores, -Activities,Atividades, -Employee Onboarding Activity,Atividade de Integração dos Colaboradores, -Employee Promotion,Promoção de Colaboradores, -Employee Promotion Details,Detalhes da promoção do colaborador, -Employee Promotion Detail,Detalhe de Promoção do Colaborador, -Employee Property History,História da propriedade do colaborador, -Employee Separation,Separação de colaboradores, -Employee Separation Template,Modelo de Separação de Colaboradores, -Employee Tax Exemption Category,Categoria de Isenção de Imposto do Colaborador, -Employee Tax Exemption Declaration,Declaração de Isenção de Imposto do Colaborador, -Employee Tax Exemption Declaration Category,Categoria de Declaração de Isenção de Imposto do Colaborador, -Employee Tax Exemption Proof Submission,Submissão de Prova de Isenção de Impostos do Colaborador, -Employee Tax Exemption Proof Submission Detail,Detalhe de envio de prova de isenção de imposto do colaborador, -Employee Tax Exemption Sub Category,Sub-categoria de Isenção de Imposto do Colaborador, -Employee Transfer,Transferência de Colaboradores, -Employee Transfer Details,Detalhes de transferência de colaboradores, -Employee Transfer Detail,Detalhe de transferência de colaboradores, -Re-allocate Leaves,Reatribuir Licenças, -Create New Employee Id,Criar novo ID de colaborador, -New Employee ID,ID do novo colaborador, -Employee Transfer Property,Propriedade de transferência do colaborador, -Total Sanctioned Amount,Valor Total Liberado, -Total Advance Amount,Valor Total do Adiantamento, -Total Claimed Amount,Quantia Total Reivindicada, -Total Amount Reimbursed,Quantia total reembolsada, -Vehicle Log,Log do Veículo, -Employees Email Id,Endereços de Email dos Colaboradores, -Expense Claim Advance,Adiantamento de Solicitação de Reembolso, -Expense Claim Detail,Detalhe do Pedido de Reembolso de Despesas, -Expense Date,Data da despesa, -Expense Claim Type,Tipo de Pedido de Reembolso de Despesas, -Holiday List Name,Nome da Lista de Feriados, -Weekly Off,Descanso semanal, -Holidays,Feriados, -HR Settings,Configurações de RH, -Employee Settings,Configurações de Colaboradores, -Retirement Age,Idade para Aposentadoria, -Enter retirement age in years,Insira a idade da aposentadoria em anos, -Stop Birthday Reminders,Interromper lembretes de aniversários, -Payroll Settings,Configurações da Folha de Pagamento, -Include holidays in Total no. of Working Days,Incluir feriados no total de dias de trabalho, -"If checked, Total no. of Working Days will include holidays, and this will reduce the value of Salary Per Day","Se marcado, o total de dias de trabalho vai incluir férias, e isso vai reduzir o valor de salário por dia", -Email Salary Slip to Employee,Enviar contracheque para colaborador via email, -Emails salary slip to employee based on preferred email selected in Employee,Enviar contracheques para os colaboradores com base em email preferido selecionado no cadastro do colaborador, -Show Leaves Of All Department Members In Calendar,Mostrar licenças de todos os membros do departamento no calendário, -Applicant for a Job,Candidato à uma Vaga, -Accepted,Aceito, -Job Opening,Vaga de Trabalho, -Cover Letter,Carta de apresentação, -Resume Attachment,Anexo currículo, -Awaiting Response,Aguardando Resposta, -Printing Details,Imprimir detalhes, -Offer Term,Termos da Oferta, -Description of a Job Opening,Descrição de uma vaga de emprego, -Job Title,Cargo, -Staffing Plan,Planejamento de Escala de Colaboradores, -"Job profile, qualifications required etc.","Perfil da vaga, qualificações exigidas, etc.", -New Leaves Allocated,Novas Licenças alocadas, -Add unused leaves from previous allocations,Acrescente as licenças não utilizadas de atribuições anteriores, -Unused leaves,Licenças não utilizadas, -Total Leaves Allocated,Total de licenças alocadas, -Total Leaves Encashed,Total de Licenças Pagas, -Leave Period,Período de Licença, -Carry Forwarded Leaves,Encaminhar Licenças, -Leave Balance Before Application,Saldo de Licenças Antes da Solicitação, -Total Leave Days,Total de dias de licença, -Leave Approver Name,Nome do Aprovador de Licenças, -Follow via Email,Receber alterações por Email, -Block Holidays on important days.,Bloco Feriados em dias importantes., -Leave Block List Name,Nome da Lista de Bloqueio de Licenças, -Applies to Company,Aplica-se a Empresa, -"If not checked, the list will have to be added to each Department where it has to be applied.","Se não for controlada, a lista deverá ser adicionado a cada departamento onde tem de ser aplicado.", -Block Days,Bloco de Dias, -Stop users from making Leave Applications on following days.,Impedir que usuários solicitem licenças em dias seguintes, -Leave Block List Dates,Datas da Lista de Bloqueio de Licenças, -Allow Users,Permitir que os usuários, -Allow the following users to approve Leave Applications for block days.,Permitir que os usuários a seguir para aprovar aplicações deixam para os dias de bloco., -Leave Block List Allowed,Permitidos na Lista de Bloqueio de Licenças, -Leave Block List Allow,Permitir na Lista de Bloqueio de Licenças, -Allow User,Permitir que o usuário, -Leave Block List Date,Data da Lista de Bloqueio de Licenças, -Leave Control Panel,Painel de Controle de Licenças, -Select Employees,Selecione Colaboradores, -Allocate Leaves,Alocar Licenças, -Carry Forward,Encaminhar, -Please select Carry Forward if you also want to include previous fiscal year's balance leaves to this fiscal year,Por favor selecione Encaminhar se você também quer incluir o saldo de licenças do ano fiscal anterior neste ano fiscal, -New Leaves Allocated (In Days),Novas Licenças alocadas (em dias), -Allocate,Alocar, -Is Carry Forward,É encaminhado, -Is Leave Without Pay,É Licença não remunerada, -Leave Allocations,Alocações de Licença, -Leave Type Name,Nome do Tipo de Licença, -Max Leaves Allowed,Max Licenças Permitidas, -Allow Negative Balance,Permitir saldo negativo, -Include holidays within leaves as leaves,Incluir feriados dentro de licenças como licenças, -Earned Leave,Licença Prêmio, -Is Earned Leave,É uma licença prêmio, -Earned Leave Frequency,Frequência de Licença Prêmio, -Payroll Employee Detail,Detalhe do colaborador da folha de pagamento, -Bimonthly,Bimestralmente, -Employees,Colaboradores, -Number Of Employees,Número de Colaboradores, -Employee Details,Detalhes do Funcionário, -Salary Slip Based on Timesheet,Demonstrativo de pagamento baseado em controle de tempo, -Select Payroll Period,Selecione Período de Pagamento, -Deduct Tax For Unclaimed Employee Benefits,Deduzir Imposto Para Benefícios de Colaboradores Não Reclamados, -Select Payment Account to make Bank Entry,Selecione a conta de pagamento para fazer o lançamento bancário, -Salary Slips Submitted,Slips Salariais Enviados, -Retention Bonus,Bônus de Retenção, -Amount based on formula,Total Baseado na Fórmula, -Salary Detail,Detalhes de Salário, -Default Amount,Quantidade Padrão, -Working Days,Dias úteis, -Salary Slip Timesheet,Controle de Tempo do Demonstrativo de Pagamento, -Hour Rate,Valor por Hora, -Bank Account No.,Nº Conta Bancária, -Earning & Deduction,Ganho & Dedução, -Earnings,Ganhos, -Employee Loan,Empréstimo para Colaboradores, -net pay info,Informações de remuneração líquida, -Net Pay (in words) will be visible once you save the Salary Slip.,Pagamento líquido (por extenso) será visível quando você salvar a folha de pagamento., -Salary Component for timesheet based payroll.,Componente salarial para pagamento por hora., -Salary breakup based on Earning and Deduction.,Separação Salário com base em salário e dedução., -Total Earning,Total de ganhos, -Salary Structure Assignment,Atribuição de Estrutura Salarial, -Shift Assignment,Atribuição de Turno, -Shift Type,Tipo de Turno, -Shift Request,Pedido de Mudança de Turno, -Event Status,Status do Evento, -Trainer Name,Nome do Instrutor, -Trainer Email,Email do Instrutor, -Employee Emails,E-mails do colaborador, -Training Event Employee,Colaborador do Evento de Treinamento, -Feedback Submitted,Feedback Enviado, -Training Result Employee,Resultado do Treinamento do Colaborador, -Travel Advance Required,Adiantamento de viagem necessário, -Travel Request,Pedido de Viagem, -Costing,Custo, -Upload Attendance,Enviar o Ponto, -Attendance From Date,Data Inicial de Comparecimento, -Attendance To Date,Data Final de Comparecimento, -Import Attendance,Importação de Ponto, -Upload HTML,Upload HTML, -License Plate,Placa do Veículo, -Odometer Value (Last),Quilometragem do Odômetro (última), -Acquisition Date,Data da Aquisição, -Chassis No,Nº do Chassi, -Insurance Details,Detalhes do Seguro, -Policy No,Nº da Apólice, -Additional Details,Detalhes Adicionais, -Fuel Type,Tipo de Combustível, -Diesel,Diesel, -Fuel UOM,UDM do Combustível, -Last Carbon Check,Última Inspeção de Emissão de Carbono, -Odometer Reading,Leitura do Odômetro, -Refuelling Details,Detalhes de Abastecimento, -Invoice Ref,Nota Fiscal de Referência, -Service Detail,Detalhes da Manutenção do Veículo, -Vehicle Service,Manutenção no Veículo, -Service Item,Item de Manutenção, -Brake Oil,Óleo de Freio, -Brake Pad,Pedal de Freio, -Clutch Plate,Disco de Embreagem, -Oil Change,Troca de Óleo, -Hub Node,Hub Node, -Item Manager,Gerente de Item, -Loan Details,Detalhes do Empréstimo, -Loan Type,Tipo de Empréstimo, -Loan Amount,Valor do Empréstimo, -Rate of Interest (%) / Year,Taxa de Juros (%) / Ano, -Disbursement Date,Data do Desembolso, -Monthly Repayment Amount,Valor da Parcela Mensal, -Repayment Schedule,Agenda de Pagamentos, -Total Payable Amount,Total a Pagar, -Loan Info,Informações do Empréstimo, -Rate of Interest,Taxa de Juros, -Maximum Loan Amount,Valor Máximo de Empréstimo, -Total Payable Interest,Total de Juros a Pagar, -Amount Paid,Valor pago, -Loan Name,Nome do Empréstimo, -Rate of Interest (%) Yearly,Taxa de Juros (%) Anual, -Total Payment,Pagamento Total, -Balance Loan Amount,Saldo do Empréstimo, -Generate Schedule,Gerar Agenda, -Maintenance Schedule Detail,Detalhe da Programação da Manutenção, -Scheduled Date,Data Agendada, -Maintenance Schedule Item,Ítem da Programação da Manutenção, -Maintenance Date,Data da Manutenção, -Maintenance Time,Horário da Manutenção, -Completion Status,Status de Conclusão, -Partially Completed,Parcialmente Concluída, -Unscheduled,Sem Agendamento, -Breakdown,Pane, -Purposes,Finalidades, -Customer Feedback,Comentário do Cliente, -Maintenance Visit Purpose,Finalidade da Visita de Manutenção, -Work Done,Trabalho Feito, -Against Document No,Contra o Documento Nº, -Against Document Detail No,Contra o Nº do Documento Detalhado, -Blanket Order Item,Item do pedido limitado, -Ordered Quantity,Quantidade Encomendada, -Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Quantidade do item obtido após a fabricação / reembalagem a partir de determinadas quantidades de matéria-prima, -Set rate of sub-assembly item based on BOM,Definir custo de semiacabado baseado na lista de materiais, -Item UOM,Unidade de Medida do Item, -Rate Of Materials Based On,Preço dos materiais com base em, -Manage cost of operations,Gerenciar custo das operações, -Operating Cost,Custo de Operação, -Raw Material Cost,Custo de Matéria-prima, -Scrap Material Cost,Custo do Material Sucateado, -Operating Cost (Company Currency),Custo operacional (moeda da empresa), -Scrap Material Cost(Company Currency),Custo de material de sucata (moeda da empresa), -Total Cost,Custo total, -Materials Required (Exploded),Materiais necessários (lista explodida), -Item Image (if not slideshow),Imagem do Item (se não for slideshow), -Website Specifications,Especificações do Site, -Show Items,Mostrar Itens, -Website Description,Descrição do Site, -BOM Explosion Item,Item da Explosão da LDM, -Qty Consumed Per Unit,Qtde Consumida por Unidade, -Include Item In Manufacturing,Incluir Item na Fabricação, -Basic Rate (Company Currency),Valor Base (moeda da empresa), -BOM Operation,Operação da LDM, -Base Hour Rate(Company Currency),Valor por Hora Base (moeda da empresa), -Operating Cost(Company Currency),Custo operacional (moeda da empresa), -Basic Amount (Company Currency),Total Base (moeda da empresa), -BOM Update Tool,Ferramenta de atualização da Lista de Materiais, -Replace BOM,Substituir lista de materiais, -Current BOM,LDM atual, -The new BOM after replacement,A nova LDM após substituição, -Update latest price in all BOMs,Atualize o preço mais recente em todas as LDMs, -BOM Website Item,LDM do Item do Site, -BOM Website Operation,LDM da Operação do Site, -Operation Time,Tempo da Operação, -Time Logs,Registros de Tempo, -Transferred Qty,Qtde Transferida, -Completed Qty,Qtde Concluída, -Manufacturing Settings,Configurações de Fabricação, -Backflush Raw Materials Based On,Confirmação de matérias-primas baseada em, -Material Transferred for Manufacture,Material Transferido para Fabricação, -Capacity Planning,Planejamento de capacidade, -Allow Overtime,Permitir Hora Extra, -Allow Production on Holidays,Permitir a Produção em Feriados, -Capacity Planning For (Days),Planejamento de capacidade para (Dias), -Default Work In Progress Warehouse,Armazén Padrão de Trabalho em Andamento, -Default Finished Goods Warehouse,Armazén de Produtos Acabados, -Other Settings,Outros Ajustes, -Update BOM Cost Automatically,Atualize automaticamente o preço da lista de materiais, -Material Request Type,Tipo de Requisição de Material, -Default Workstation,Estação de Trabalho Padrão, -Production Plan,Plano de Produção, -Get Sales Orders,Obter Pedidos de Venda, -Get Material Request,Obter Requisições de Material, -Material Requests,Requisições de Material, -Production Plan Item,Item do Planejamento de Produção, -Planned Start Date,Data Planejada de Início, -material_request_item,material_request_item, -Product Bundle Item,Item do Pacote de Produtos, -Production Plan Material Request,Requisição de Material do Planejamento de Produção, -Production Plan Sales Order,Pedido de Venda do Plano de Produção, -Sales Order Date,Data do Pedido de Venda, -Item To Manufacture,Item para Fabricação, -Material Transferred for Manufacturing,Material Transferido para Fabricação, -Manufactured Qty,Qtde Fabricada, -Use Multi-Level BOM,Utilize LDM Multinível, -Plan material for sub-assemblies,Material de Plano de sub-conjuntos, -Work-in-Progress Warehouse,Armazén de Trabalho em Andamento, -Required Items,Itens Necessários, -Actual Start Date,Data de Início Real, -Planned End Date,Data Planejada de Término, -Actual End Date,Data Final Real, -Operation Cost,Custo da Operação, -Planned Operating Cost,Custo Operacional Planejado, -Actual Operating Cost,Custo Operacional Real, -Additional Operating Cost,Custo Operacional Adicional, -Total Operating Cost,Custo de Operacional Total, -Manufacture against Material Request,Fabricação Vinculada a uma Requisição de Material, -Available Qty at Source Warehouse,Qtd disponível no Armazén de Origem, -Available Qty at WIP Warehouse,Qtd disponível no Armazén de Trabalho em Andamento, -Estimated Time and Cost,Tempo estimado e Custo, -Planned Start Time,Horário Planejado de Início, -Planned End Time,Horário Planejado de Término, -in Minutes,Em Minutos, -Actual Time and Cost,Tempo e Custo Real, -Actual Start Time,Hora Real de Início, -Actual End Time,Tempo Final Real, -Updated via 'Time Log',Atualizado via 'Time Log', -Actual Operation Time,Tempo Real da Operação, -in Minutes\nUpdated via 'Time Log',em Minutos \n Atualizado via 'Registro de Tempo', -(Hour Rate / 60) * Actual Operation Time,(Valor por Hora / 60) * Tempo de operação real, -Workstation Name,Nome da Estação de Trabalho, -Operating Costs,Custos Operacionais, -Electricity Cost,Custo de Energia Elétrica, -Consumable Cost,Custo dos Consumíveis, -Rent Cost,Custo do Aluguel, -Wages,Salário, -Wages per hour,Salário por hora, -Net Hour Rate,Valor Hora Líquido, -Workstation Working Hour,Hora de Trabalho da Estação de Trabalho, -Website URL,Endereço do Site, -Leave Reason,Motivo da Saída, -Has any past Grant Record,Possui histórico de donativos, -Tag Line,Slogan, -Company Tagline for website homepage,O Slogan da Empresa para página inicial do site, -Company Description for website homepage,A Descrição da Empresa para a página inicial do site, -Products to be shown on website homepage,Produtos para serem mostrados na página inicial, -Homepage Featured Product,Produtos em Destaque na Página Inicial, -Products Settings,Configurações de Produtos, -Home Page is Products,Página Inicial é Produtos, -"If checked, the Home page will be the default Item Group for the website","Se for selecionado, a Página Inicial será o Grupo de Itens padrão do site", -Billing Rate,Preço de Faturamento, -Costing Rate,Preço de Custo, -Projects User,Usuário de Projetos, -Default Costing Rate,Preço de Custo Padrão, -Default Billing Rate,Preço de Faturamento Padrão, -% Complete Method,Método para % Concluído, -Project will be accessible on the website to these users,Projeto estará acessível no site para os usuários, -Start and End Dates,Datas de início e término, -Costing and Billing,Custos e Faturamento, -Total Expense Claim (via Expense Claims),Reivindicação de Despesa Total (via relatórios de despesas), -Total Purchase Cost (via Purchase Invoice),Custo Total de Compra (via Fatura de Compra), -Project User,Usuário do Projeto, -Ignore Employee Time Overlap,Ignorar a sobreposição do tempo do colaborador, -Expected Time (in hours),Tempo esperado (em horas), -Actual Start Date (via Time Sheet),Data de Início Real (via Registro de Tempo), -Actual Time (in hours),Tempo Real (em horas), -Actual End Date (via Time Sheet),Data Final Real (via Registro de Tempo), -Total Costing Amount (via Time Sheet),Custo Total (via Registro de Tempo), -Total Expense Claim (via Expense Claim),Reivindicação Despesa Total (via Despesa Claim), -Total Billing Amount (via Time Sheet),Total Faturado (via Registro de Tempo), -Review Date,Data da Revisão, -Task Depends On,Tarefa depende de, -Employee Detail,Detalhes do Colaborador, -Billing Details,Dados de Faturamento, -% Amount Billed,Valor Faturado %, -Costing Amount,Valor de Custo, -Resolution,Solução, -Waitlisted,Colocado na lista de espera, -No of People,Número de pessoas, -No of Seats,Número de assentos, -"Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment. ","Mantenha o controle de campanhas de vendas. Mantenha o controle de Leads, Orçamentos, Pedidos de Venda, de Campanhas e etc, para medir retorno sobre o investimento.", -From Lead,Do Lead, -Mention if non-standard receivable account,Mencione se a conta a receber não for a conta padrão, -Credit Limit and Payment Terms,Limite de Crédito e Termos de Pagamento, -Additional information regarding the customer.,Informações adicionais sobre o cliente., -Sales Partner and Commission,Parceiro de Vendas e Comissão, -Commission Rate,Percentual de Comissão, -Sales Team Details,Detalhes da Equipe de Vendas, -Industry Type,Tipo de Indústria, -Installation Time,O tempo de Instalação, -Installation Note Item,Item da Nota de Instalação, -Installed Qty,Qtde Instalada, -Lead Source,Origem do Lead, -"Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item.\n\nNote: BOM = Bill of Materials","Grupo agregado de Itens ** ** em outro item ** **. Isso é útil se você está empacotando um certo Itens ** ** em um pacote e você manter o estoque dos itens embalados ** ** e não o agregado ** ** item. O pacote ** ** item terá "é Stock item" como "Não" e "é o item Vendas" como "Sim". Por exemplo: Se você está vendendo Laptops e Mochilas separadamente e têm um preço especial se o cliente compra ambos, então o Laptop Backpack + será um novo item Bundle produto. Nota: BOM = Bill of Materials", -Parent Item,Item Pai, -List items that form the package.,Lista de itens que compõem o pacote., -Quotation To,Orçamento para, -Rate at which customer's currency is converted to company's base currency,Taxa na qual a moeda do cliente é convertida para a moeda base da empresa, -Rate at which Price list currency is converted to company's base currency,Taxa na qual a moeda da lista de preços é convertida para a moeda base da empresa, -In Words will be visible once you save the Quotation.,Por extenso será visível quando você salvar o orçamento., -Term Details,Detalhes dos Termos, -Quotation Item,Item do Orçamento, -Against Doctype,Contra o Doctype, -Against Docname,Contra o Docname, -In Words will be visible once you save the Sales Order.,Por extenso será visível quando você salvar o Pedido de Venda., -Track this Sales Order against any Project,Acompanhar este Pedido de Venda relacionado a qualquer projeto, -Billing and Delivery Status,Status do Faturamento e Entrega, -% of materials delivered against this Sales Order,% do material entregue deste Pedido de Venda, -% of materials billed against this Sales Order,% do material faturado deste Pedido de Venda, -Supplier delivers to Customer,O fornecedor entrega diretamente ao cliente, -Delivery Warehouse,Armazén de Entrega, -Planned Quantity,Quantidade Planejada, -For Production,Para Produção, -Work Order Qty,Quantidade na ordem de trabalho, -Used for Production Plan,Usado para o Plano de Produção, -Contact No.,Nº Contato., -Selling Settings,Configurações de Vendas, -Settings for Selling Module,Configurações do Módulo de Vendas, -Customer Naming By,Nomeação de Cliente por, -Campaign Naming By,Nomeação de Campanha por, -Default Customer Group,Grupo de Clientes padrão, -Default Territory,Território padrão, -Close Opportunity After Days,Fechar Oportunidade Após Dias, -All Contact,Todo o Contato, -All Customer Contact,Todo o Contato do Cliente, -All Supplier Contact,Todos os Contatos de Fornecedor, -All Sales Partner Contact,Todos os Contatos de Parceiros de Vendas, -All Lead (Open),Todos os Leads em Aberto, -All Employee (Active),Todos os Colaboradores (Ativos), -Create Receiver List,Criar Lista de Receptor, -Receiver List,Lista de recebedores, -Messages greater than 160 characters will be split into multiple messages,Mensagens maiores do que 160 caracteres vão ser divididos em múltiplas mensagens, -Total Characters,Total de Personagens, -Total Message(s),Total de mensagem(s), -Authorization Control,Controle de autorização, -Customerwise Discount,Desconto referente ao Cliente, -Itemwise Discount,Desconto relativo ao Item, -Customer / Item Name,Nome do Cliente/Produto, -Applicable To (Role),Aplicável Para (Função), -Applicable To (Employee),Aplicável para (Colaborador), -Applicable To (User),Aplicável Para (Usuário), -Applicable To (Designation),Aplicável Para (Designação), -Approving Role (above authorized value),Função de Aprovador (para autorização de valor excedente), -Approving User (above authorized value),Usuário Habilitado para Aprovar (acima do valor autorizado), -Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.,Entidade Legal / Subsidiária com um gráfico separado de Contas pertencente à Organização., -Change Abbreviation,Mudar abreviação, -Default Holiday List,Lista Padrão de Feriados, -Create Chart Of Accounts Based On,Criar plano de contas baseado em, -Standard Template,Template Padrão, -Existing Company ,Empresa Existente, -Monthly Sales Target,Meta de Vendas Mensais, -Round Off Cost Center,Centro de Custo de Arredondamento, -Exchange Gain / Loss Account,Conta de Ganho / Perda com Câmbio, -Default Payable Account,Contas a Pagar Padrão, -Default Employee Advance Account,Conta Padrão de Adiantamento à Colaboradores, -Default Cost of Goods Sold Account,Conta de Custo Padrão de Mercadorias Vendidas, -Default Income Account,Conta Padrão de Recebimento, -Default Payroll Payable Account,Conta Padrão para Folha de Pagamentos, -Stock Settings,Configurações de Estoque, -Default Inventory Account,Conta de Inventário Padrão, -Stock Adjustment Account,Conta de Ajuste, -Fixed Asset Depreciation Settings,Configurações de Depreciação do Ativo Imobilizado, -Series for Asset Depreciation Entry (Journal Entry),Série para lançamento de Depreciação de Ativos (Lançamento no Livro Diário), -Gain/Loss Account on Asset Disposal,Conta de Ganho / Perda com Descarte de Ativos, -Asset Depreciation Cost Center,Centro de Custo do Ativo Depreciado, -Budget Detail,Detalhe do Orçamento, -For reference only.,Apenas para referência., -Registration Details,Detalhes de Registro, -Company registration numbers for your reference. Tax numbers etc.,"Números de registro da empresa para sua referência. Exemplo: CNPJ, IE, etc", -Delete Company Transactions,Excluir Transações Companhia, -Currency Exchange,Câmbio, -Specify Exchange Rate to convert one currency into another,Especifique Taxa de Câmbio para converter uma moeda em outra, -Parent Customer Group,Grupo de Clientes pai, -Only leaf nodes are allowed in transaction,Somente nós-folha são permitidos em transações, -Mention if non-standard receivable account applicable,Mencione se a conta a receber aplicável não for a conta padrão, -Email Digest,Resumo por Email, -Send regular summary reports via Email.,Enviar relatórios periódicos de síntese via Email., -Email Digest Settings,Configurações do Resumo por Email, -Next email will be sent on:,Próximo email será enviado em:, -Note: Email will not be sent to disabled users,Observação: Emails não serão enviado para usuários desabilitados, -Profit & Loss,Lucro e Perdas, -New Income,Novas Receitas, -Annual Income,Receita Anual, -Annual Expenses,Despesas Anuais, -Receivables,Recebíveis, -Payables,Contas a Pagar, -New Sales Orders,Novos Pedidos de Venda, -New Purchase Orders,Novos Pedidos de Compra, -Add Quote,Adicionar Citar, -Global Defaults,Padrões Globais, -Do not show any symbol like $ etc next to currencies.,Não mostrar nenhum símbolo como R$ etc ao lado de moedas., -"If disable, 'Rounded Total' field will not be visible in any transaction","Desativa campo ""total arredondado"" em qualquer tipo de transação", -Disable In Words,Desativar por extenso, -"If disable, 'In Words' field will not be visible in any transaction","Desativa campo ""por extenso"" em qualquer tipo de transação", -General Settings,Configurações Gerais, -Item Group Name,Nome do Grupo de Itens, -Parent Item Group,Grupo de item pai, -Check this if you want to show in website,Marque esta opção se você deseja mostrar no site, -Show this slideshow at the top of the page,Mostrar esta apresentação de slides no topo da página, -HTML / Banner that will show on the top of product list.,HTML / Faixa que vai ser mostrada no topo da lista de produtos., -Set prefix for numbering series on your transactions,Definir prefixo para séries de numeração em suas transações, -Setup Series,Configuração de Séries, -Select Transaction,Selecione a Transação, -Help HTML,Ajuda HTML, -Series List for this Transaction,Lista de séries para esta transação, -User must always select,O Usuário deve sempre selecionar, -Check this if you want to force the user to select a series before saving. There will be no default if you check this.,Marque esta opção se você deseja forçar o usuário a selecionar uma série antes de salvar. Não haverá nenhum padrão se você marcar isso., -Change the starting / current sequence number of an existing series.,Alterar o número sequencial de início/atual de uma série existente., -This is the number of the last created transaction with this prefix,Este é o número da última transação criada com este prefixo, -Update Series Number,Atualizar Números de Séries, -Quotation Lost Reason,Motivo da perda do Orçamento, -A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.,Um distribuidor de terceiros / revendedor / comissão do agente / filial / revendedor que vende os produtos de empresas de uma comissão., -Sales Partner Name,Nome do Parceiro de Vendas, -Partner Type,Tipo de parceiro, -Address & Contacts,Endereços e Contatos, -Address Desc,Descrição do Endereço, -Contact Desc,Descrição do Contato, -Sales Partner Target,Metas do Parceiro de Vendas, -Show In Website,Mostrar no Site, -Logo,Logotipo, -Partner website,Site Parceiro, -All Sales Transactions can be tagged against multiple **Sales Persons** so that you can set and monitor targets.,Todas as transações de vendas pode ser marcado contra várias pessoas das vendas ** ** para que você pode definir e monitorar as metas., -Name and Employee ID,Nome e ID do Colaborador, -Sales Person Name,Nome do Vendedor, -Parent Sales Person,Vendedor pai, -Select company name first.,Selecione o nome da empresa por primeiro., -Sales Person Targets,Metas do Vendedor, -Set targets Item Group-wise for this Sales Person.,Estabelecer Metas para este Vendedor por Grupo de Itens, -Target Detail,Detalhe da meta, -Target Qty,Meta de Qtde, -Target Amount,Valor da Meta, -Target Distribution,Distribuição de metas, -"Standard Terms and Conditions that can be added to Sales and Purchases.\n\nExamples:\n\n1. Validity of the offer.\n1. Payment Terms (In Advance, On Credit, part advance etc).\n1. What is extra (or payable by the Customer).\n1. Safety / usage warning.\n1. Warranty if any.\n1. Returns Policy.\n1. Terms of shipping, if applicable.\n1. Ways of addressing disputes, indemnity, liability, etc.\n1. Address and Contact of your Company.","Termos e Condições Padrão que podem ser adicionados para compras e vendas.\n\n Exemplos: \n\n 1. Validade da oferta.\n 1. Condições de pagamento (com antecedência, sobre o crédito, parte antecedência etc).\n 1. O que é muito (ou a pagar pelo cliente).\n 1. Aviso de segurança / utilização.\n 1. Garantia, se houver.\n 1. Política de Devolução.\n 1. Condições de entrega, se aplicável.\n 1. Formas de disputas de endereçamento, indenização, responsabilidade, etc. \n 1. Endereço e de contato da sua empresa.", -Classification of Customers by region,Classificação dos clientes por região, -Territory Name,Nome do Território, -Parent Territory,Território pai, -Territory Manager,Gestor de Territórios, -Territory Targets,Metas do Território, -Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,"Definir orçamentos para Grupos de Itens neste território. Você também pode incluir a sazonalidade, defininda na Distribuição.", -UOM Name,Nome da Unidade de Medida, -Check this to disallow fractions. (for Nos),Marque esta opção para não permitir frações. (Para n), -Website Item Group,Grupo de Itens do Site, -Cross Listing of Item in multiple groups,Listagem cruzada dos produtos que pertencem à vários grupos, -Default settings for Shopping Cart,As configurações padrão para Carrinho de Compras, -Prices will not be shown if Price List is not set,Os preços não serão mostrados se a lista de preços não estiver configurada, -Quotation Series,Séries de Orçamento, -Checkout Settings,Configurações de Vendas, -Enable Checkout,Ativar Caixa, -Payment Success Url,URL de Confirmação de Pagamento, -After payment completion redirect user to selected page.,Após a conclusão do pagamento redirecionar usuário para a página selecionada., -Manufacturing Date,Data de Fabricação, -Actual Quantity,Quantidade Real, -Moving Average Rate,Taxa da Média Móvel, -FCFS Rate,Taxa FCFS, -Delivery To,Entregar Para, -Is Return,É Devolução, -Return Against Delivery Note,Devolução contra Guia de Remessa, -Customer's Purchase Order No,Nº do Pedido de Compra do Cliente, -Billing Address Name,Endereço de Faturamento, -Required only for sample item.,Necessário apenas para o item de amostra., -"If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.","Se você criou um modelo padrão de Impostos e Taxas de Vendas Modelo, selecione um e clique no botão abaixo.", -In Words will be visible once you save the Delivery Note.,Por extenso será visível quando você salvar a Guia de Remessa., -In Words (Export) will be visible once you save the Delivery Note.,Por extenso (Exportação) será visível quando você salvar a Guia de Remessa., -Transporter Info,Informações da Transportadora, -Track this Delivery Note against any Project,Acompanhar este Guia de Remessa contra qualquer projeto, -Print Without Amount,Imprimir sem valores, -% Installed,Instalado %, -% of materials delivered against this Delivery Note,% do material entregue contra esta Guia de Remessa, -Installation Status,Status da Instalação, -Excise Page Number,Número de página do imposto, -From Warehouse,Armazén de Origem, -Against Sales Order,Relacionado ao Pedido de Venda, -Against Sales Order Item,Relacionado ao Item do Pedido de Venda, -Against Sales Invoice,Contra a Fatura de Venda, -Against Sales Invoice Item,Contra o Item da Fatura de Venda, -Available Batch Qty at From Warehouse,Qtde Disponível do Lote no Armazém, -Available Qty at From Warehouse,Qtde disponível no armazén de origem, -Email sent to,Email Enviado para, -Delivery Details,Detalhes da entrega, -"A Product or a Service that is bought, sold or kept in stock.","Um produto ou um serviço que é comprado, vendido ou mantido em estoque.", -"If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified","Se o item é uma variante de outro item, em seguida, descrição, imagem, preços, impostos etc será definido a partir do modelo, a menos que explicitamente especificado", -Maintain Stock,Manter Estoque, -Standard Selling Rate,Valor de venda padrão, -End of Life,Validade, -Default Material Request Type,Tipo de Requisição de Material Padrão, -Auto re-order,Reposição Automática, -Reorder level based on Warehouse,Nível de reposição baseado no Armazén, -Will also apply for variants unless overrridden,Também se aplica a variantes a não ser que seja sobrescrito, -Units of Measure,Unidades de Medida, -Will also apply for variants,Também se aplica às variantes, -Has Batch No,Tem nº de Lote, -Has Serial No,Tem nº de Série, -Serial Number Series,Séries de Nº de Série, -"Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.","Exemplo:. ABCD ##### \n Se série é ajustada e número de série não é mencionado em transações, número de série, em seguida automática será criado com base nesta série. Se você sempre quis mencionar explicitamente Serial Nos para este item. deixe em branco.", -"If this item has variants, then it cannot be selected in sales orders etc.","Se este item tem variantes, então ele não pode ser selecionado em pedidos de venda etc.", -Item Attribute,Atributos do Item, -Is Purchase Item,É Item de Compra, -Minimum Order Qty,Pedido Mínimo, -Average time taken by the supplier to deliver,Tempo médio necessário para entrega do fornecedor., -Is Customer Provided Item,É Item Fornecido Pelo Cliente, -Delivered by Supplier (Drop Ship),Entregue pelo Fornecedor (Drop Ship), -Supplier Items,Itens do Fornecedor, -Sales Details,Detalhes de Vendas, -Is Sales Item,É item de venda, -Customer Items,Itens de clientes, -Supply Raw Materials for Purchase,Abastecimento de Matérias-primas para a Compra, -If subcontracted to a vendor,Se subcontratada a um fornecedor, -Customer Code,Código do Cliente, -Show in Website (Variant),Mostar no Site (variante), -Items with higher weightage will be shown higher,Os itens com maior weightage será mostrado maior, -Show a slideshow at the top of the page,Mostrar uma apresentação de slides no topo da página, -Website Warehouse,Armazém do Site, -"Show ""In Stock"" or ""Not in Stock"" based on stock available in this warehouse.","Mostrar ""Em Estoque"" ou ""Esgotado"" baseado no estoque disponível neste armazén.", -Website Item Groups,Grupos de Itens do Site, -List this Item in multiple groups on the website.,Listar este item em vários grupos no site., -Copy From Item Group,Copiar do item do grupo, -Total Projected Qty,Quantidade Total Projetada, -Publish in Hub,Publicar no Hub, -Publish Item to hub.erpnext.com,Publicar Item para hub.erpnext.com, -Synced With Hub,Sincronizado com o Hub, -Attribute Name,Nome do atributo, -From Range,Da Faixa, -Increment,Incremento, -To Range,Para a Faixa, -Item Attribute Values,Valores dos Atributos, -Item Attribute Value,Item Atributo Valor, -Attribute Value,Atributo Valor, -"This will be appended to the Item Code of the variant. For example, if your abbreviation is ""SM"", and the item code is ""T-SHIRT"", the item code of the variant will be ""T-SHIRT-SM""","Isso vai ser anexado ao Código do item da variante. Por exemplo, se a sua abreviatura é ""SM"", e o código do item é ""t-shirt"", o código do item da variante será ""T-shirt-SM""", -Item Barcode,Código de barras do Item, -Item Customer Detail,Detalhe do Cliente do Item, -"For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes","Para a comodidade dos clientes, estes códigos podem ser usados em formatos de impressão, como Notas Fiscais e Guias de Remessa", -Default Buying Cost Center,Centro de Custo Padrão de Compra, -Default Expense Account,Conta Padrão de Despesa, -Default Selling Cost Center,Centro de Custo Padrão de Vendas, -Item Price,Preço do Item, -Item Reorder,Reposição de Item, -Check in (group),Entrada (grupo), -Request for,Solicitado para, -Re-order Level,Nível de Reposição, -Re-order Qty,Qtde para Reposição, -Item Variant,Item Variant, -Item Variant Attribute,Variant item Atributo, -Item Website Specification,Especificação do Site do Item, -Table for Item that will be shown in Web Site,Tabela para o item que será mostrado no Web Site, -Landed Cost Item,Custo de Desembarque do Item, -Receipt Document Type,Tipo de Documento de Recibo, -Receipt Document,Documento de Recibo, -Applicable Charges,Encargos aplicáveis, -Purchase Receipt Item,Item do Recibo de Compra, -Landed Cost Purchase Receipt,Recibo de Compra do Custo de Desembarque, -Landed Cost Taxes and Charges,Impostos e Encargos sobre custos de desembarque, -Landed Cost Voucher,Comprovante de Custos de Desembarque, -Purchase Receipts,Recibos de compra, -Purchase Receipt Items,Itens do Recibo de Compra, -Distribute Charges Based On,Distribuir encargos baseado em, -Landed Cost Help,Custo de Desembarque Ajuda, -Manufacturers used in Items,Fabricantes utilizados em Itens, -Limited to 12 characters,Limitados a 12 caracteres, -% Ordered,% Comprado, -Terms and Conditions Content,Conteúdo dos Termos e Condições, -Lead Time Date,Prazo de Entrega, -Min Order Qty,Pedido Mínimo, -Packed Item,Item do Pacote da Guia de Remessa, -To Warehouse (Optional),Para o Armazén (Opcional), -Parent Detail docname,Nome do documento do detalhe pai, -"Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.","Gerar lista de embalagem para os pacotes a serem entregues. Usado para identificar número do pacote, o conteúdo do pacote e seu peso.", -Indicates that the package is a part of this delivery (Only Draft),Indica que o pacote é uma parte desta entrega (Só Rascunho), -From Package No.,Do nº do pacote, -Identification of the package for the delivery (for print),Identificação do pacote para a Entrega (para impressão), -To Package No.,Até nº do pacote, -If more than one package of the same type (for print),Se mais do que uma embalagem do mesmo tipo (para impressão), -Package Weight Details,Detalhes de Peso do Pacote, -The net weight of this package. (calculated automatically as sum of net weight of items),O peso líquido do pacote. (Calculado automaticamente como soma do peso líquido dos itens), -Net Weight UOM,Unidade de Medida do Peso Líquido, -The gross weight of the package. Usually net weight + packaging material weight. (for print),O peso bruto do pacote. Normalmente peso líquido + peso do material de embalagem. (para impressão), -Gross Weight UOM,Unidade de Medida do Peso Bruto, -Packing Slip Item,Item da Lista de Embalagem, -DN Detail,Detalhe DN, -Material Transfer for Manufacture,Transferência de Material para Fabricação, -Parent Warehouse,Armazén Pai, -Price List Master,Cadastro da Lista de Preços, -Applicable for Countries,Aplicável para os Países, -Price List Country,Preço da lista País, -Time at which materials were received,Horário em que os materiais foram recebidos, -Return Against Purchase Receipt,Devolução contra Recibo de Compra, -Rate at which supplier's currency is converted to company's base currency,Taxa na qual a moeda do fornecedor é convertida para a moeda base da empresa, -Get Current Stock,Obter Estoque Atual, -Add / Edit Taxes and Charges,Adicionar / Editar Impostos e Encargos, -Transporter Details,Detalhes da Transportadora, -Vehicle Number,Placa do Veículo, -Vehicle Date,Data do Veículo, -Received and Accepted,Recebeu e aceitou, -Accepted Quantity,Quantidade Aceita, -Rate and Amount,Preço e Total, -Report Date,Data do Relatório, -Item Serial No,Nº de série do Item, -Inspected By,Inspecionado por, -Quality Inspection Reading,Leitura da Inspeção de Qualidade, -Distinct unit of an Item,Unidade distinta de um item, -Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Armazém só pode ser alterado através de entrada / entrega da nota / recibo de compra, -Purchase / Manufacture Details,Detalhes Compra / Fabricação, -Creation Document Type,Tipo de Criação do Documento, -Creation Document No,Número de Criação do Documento, -Creation Time,Horário de Criação, -Delivery Document Type,Tipo do Documento de Entrega, -Delivery Document No,Nº do Documento de Entrega, -Warranty / AMC Details,Garantia / Detalhes do CAM, -AMC Expiry Date,Data de Validade do CAM, -Out of Warranty,Fora de Garantia, -Under AMC,Sob CAM, -Out of AMC,Fora do CAM, -Serial No Details,Detalhes do Nº de Série, -Delivery Note No,Nº da Guia de Remessa, -Sales Invoice No,Nº da Nota Fiscal de Venda, -Purchase Receipt No,Nº do Recibo de Compra, -For Quantity,Para Quantidade, -As per Stock UOM,Como UDM do Estoque, -Including items for sub assemblies,Incluindo itens para subconjuntos, -Default Source Warehouse,Armazén de Origem Padrão, -Default Target Warehouse,Armazén de Destino Padrão, -Update Rate and Availability,Atualizar Valor e Disponibilidade, -Total Incoming Value,Valor Total Recebido, -Total Value Difference (Out - In),Diferença do Valor Total (Saída - Entrada), -Additional Costs,Custos adicionais, -Customer or Supplier Details,Detalhes do Cliente ou Fornecedor, -Stock Entry Detail,Detalhe do Lançamento no Estoque, -Basic Rate (as per Stock UOM),Preço Unitário (de acordo com a UDM do estoque), -Basic Amount,Valor Base, -Serial No / Batch,N º de Série / lote, -BOM No. for a Finished Good Item,Nº da LDM para um Item Bom Acabado, -Material Request used to make this Stock Entry,Requisição de Material usada para fazer esta Entrada de Material, -Stock Ledger Entry,Lançamento do Livro de Inventário, -Actual Qty After Transaction,Qtde Real Após a Transação, -Stock Value Difference,Diferença de valor do estoque, -Stock Queue (FIFO),Fila do estoque (PEPS), -Is Cancelled,É cancelado, -Stock Reconciliation,Conciliação de Estoque, -This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.,Esta ferramenta ajuda você a atualizar ou corrigir a quantidade ea valorização das ações no sistema. Ele é geralmente usado para sincronizar os valores do sistema e que realmente existe em seus armazéns., -Reconciliation JSON,Reconciliação JSON, -Stock Reconciliation Item,Item da Conciliação de Estoque, -Current Valuation Rate,Taxa Atual de Avaliação, -Amount Difference,Valor da Diferença, -Item Naming By,Nomeação de Item por, -Default Item Group,Grupo de Itens padrão, -Default Stock UOM,Unidade de Medida Padrão do Estoque, -Default Valuation Method,Método de Avaliação padrão, -Show Barcode Field,Mostrar Campo Código de Barras, -Convert Item Description to Clean HTML,Converter a Descrição do Item para HTML Limpo, -Allow Negative Stock,Permitir Estoque Negativo, -Automatically Set Serial Nos based on FIFO,Número de Série automaticamente definido com base na FIFO, -Auto Material Request,Requisição de Material Automática, -Freeze Stock Entries,Congelar Lançamentos no Estoque, -Stock Frozen Upto,Estoque congelado até, -Naming Series Prefix,Prefixo do código de documentos, -UOM Conversion Detail,Detalhe da Conversão de Unidade de Medida, -A logical Warehouse against which stock entries are made.,Um Depósito lógico contra o qual as entradas de estoque são feitas., -Warehouse Detail,Detalhes do Armazén, -Warehouse Name,Nome do Armazén, -Warehouse Contact Info,Informações de Contato do Armazén, -Raised By (Email),Levantadas por (Email), -First Responded On,Primeira Resposta em, -Resolution Details,Detalhes da Solução, -Opening Time,Horário de Abertura, -Resolution Date,Data da Solução, -Support Team,Equipe de Pós-Vendas, -Close Issue After Days,Fechar Incidente Após Dias, -Auto close Issue after 7 days,Fechar atuomaticamente o incidente após 7 dias, -Issue Date,Data do Incidente, -Item and Warranty Details,Itens e Garantia Detalhes, -Warranty / AMC Status,Garantia / Status do CAM, -Resolved By,Resolvido por, -Service Address,Endereço da Manutenção do Veículo, -If different than customer address,Se diferente do endereço do cliente, -Raised By,Levantadas por, -Rename Tool,Ferramenta de Renomear, -Utilities,Serviços Públicos, -Type of document to rename.,Tipo de documento a ser renomeado., -File to Rename,Arquivo para Renomear, -"Attach .csv file with two columns, one for the old name and one for the new name","Anexar arquivo .csv com duas colunas, uma para o nome antigo e um para o novo nome", -Rename Log,Renomear Log, -SMS Log,Log de SMS, -Sent On,Enviado em, -No of Requested SMS,Nº de SMS pedidos, -Requested Numbers,Números solicitadas, -No of Sent SMS,Nº de SMS enviados, -Sent To,Enviado para, -Absent Student Report,Relatório de Frequência do Aluno, -Asset Depreciation Ledger,Livro Razão de Depreciação de Ativos, -Asset Depreciations and Balances,Depreciação de Ativos e Saldos, -Available Stock for Packing Items,Estoque Disponível para o Empacotamento de Itens, -Bank Clearance Summary,Resumo da Liquidação Bancária, -Batch Item Expiry Status,Status do Vencimento do Item do Lote, -Batch-Wise Balance History,Balanço por Histórico de Lotes, -BOM Search,Pesquisar LDM, -Completed Work Orders,Ordens de Trabalho Concluídas, -Consolidated Financial Statement,Relatório Financeiro Consolidado, -Customer Acquisition and Loyalty,Aquisição de Clientes e Fidelização, -Customer Credit Balance,Saldo de Crédito do Cliente, -Daily Timesheet Summary,Resumo Diário dos Registros de Tempo, -Delivered Items To Be Billed,"Itens Entregues, mas não Faturados", -Delivery Note Trends,Tendência de Remessas, -Employee Advance Summary,Resumo de Adiantamentos a Colaboradores, -Employee Birthday,Aniversário dos Colaboradores, -Employee Information,Informações do Colaborador, -Employee Leave Balance,Saldo de Licenças do Colaborador, -Employees working on a holiday,Colaboradores Trabalhando no Feriado, -Issued Items Against Work Order,Itens Emitidos Contra Ordem de Trabalho, -Item Shortage Report,Relatório de Itens em Falta no Estoque, -Item-wise Price List Rate,Lista de Preços por Item, -Item-wise Purchase Register,Registro de Compras por Item, -Item-wise Sales History,Histórico de Vendas por Item, -Item-wise Sales Register,Registro de Vendas por Item, -Items To Be Requested,Itens para Requisitar, -Itemwise Recommended Reorder Level,Níves de Reposição Recomendados por Item, -Lead Details,Detalhes do Lead, -Lead Owner Efficiency,Eficiência do Administrador do Lead, -Maintenance Schedules,Horários de Manutenção, -Material Requests for which Supplier Quotations are not created,"Itens Requisitados, mas não Cotados", -Monthly Attendance Sheet,Folha de Ponto Mensal, -Open Work Orders,Abrir Ordens de Trabalho, -Qty to Deliver,Qtde para Entregar, -Payment Period Based On Invoice Date,Prazo Médio de Pagamento Baseado na Emissão da Nota, -Pending SO Items For Purchase Request,Itens Pendentes da Ordem de Venda por Solicitação de Compra, -Production Analytics,Análise de Produção, -Profit and Loss Statement,Demonstrativo de Resultados, -Profitability Analysis,Análise de Lucratividade, -Project wise Stock Tracking ,Rastreio de Estoque por Projeto, -Prospects Engaged But Not Converted,"Clientes prospectados, mas não convertidos", -Purchase Analytics,Analítico de Compras, -Purchase Invoice Trends,Tendência de Faturas de Compra, -Qty to Receive,Qtde para Receber, -Purchase Order Trends,Tendência de Pedidos de Compra, -Purchase Receipt Trends,Tendência de Recebimentos, -Purchase Register,Registro de Compras, -Quotation Trends,Tendência de Orçamentos, -Received Items To Be Billed,"Itens Recebidos, mas não Faturados", -Qty to Order,Qtde para Encomendar, -Requested Items To Be Transferred,"Items Solicitados, mas não Transferidos", -Qty to Transfer,Qtde para Transferir, -Salary Register,Registro de Salário, -Sales Analytics,Analítico de Vendas, -Sales Invoice Trends,Tendência de Faturamento de Vendas, -Sales Order Trends,Tendência de Pedidos de Venda, -Sales Partners Commission,Comissão dos Parceiros de Vendas, -Average Commission Rate,Percentual de Comissão Médio, -Sales Payment Summary,Resumo de Pagamento de Vendas, -Sales Person-wise Transaction Summary,Resumo de Vendas por Vendedor, -Sales Register,Registro de Vendas, -Serial No Service Contract Expiry,Vencimento do Contrato de Serviço com Nº de Série, -Serial No Status,Status do Nº de Série, -Serial No Warranty Expiry,Vencimento da Garantia com Nº de Série, -Stock Ageing,Envelhecimento do Estoque, -Stock Projected Qty,Projeção de Estoque, -Student Batch-Wise Attendance,Controle de Frequência por Série de Alunos, -Student Fee Collection,Cobrança de Taxa do Aluno, -Student Monthly Attendance Sheet,Folha de Presença Mensal do Aluno, -Trial Balance for Party,Balancete para o Parceiro, -Unpaid Expense Claim,Reembolso de Despesas a Pagar, -Work Orders in Progress,Ordens de Trabalho em Andamento, diff --git a/erpnext/translations/ru.csv b/erpnext/translations/ru.csv index 6ca3344767..5f3af770cf 100644 --- a/erpnext/translations/ru.csv +++ b/erpnext/translations/ru.csv @@ -1,18 +1,18 @@ -"""Customer Provided Item"" cannot be Purchase Item also","«Товар, предоставленный клиентом» также не может быть предметом покупки", -"""Customer Provided Item"" cannot have Valuation Rate",«Предоставленный клиентом товар» не может иметь оценку, -"""Is Fixed Asset"" cannot be unchecked, as Asset record exists against the item","Нельзя отменить выбор ""Является основным средством"", поскольку по данному пункту имеется запись по активам", -'Based On' and 'Group By' can not be same,"""На основании"" и ""Группировка по"" не могут быть одинаковыми", -'Days Since Last Order' must be greater than or equal to zero,"""Дней с момента последнего заказа"" должно быть больше или равно 0", -'Entries' cannot be empty,"""Записи"" не могут быть пустыми", -'From Date' is required,"Поле ""С даты"" является обязательным для заполнения", -'From Date' must be after 'To Date',"Поле ""С даты"" должно быть после ""До даты""", -'Has Serial No' can not be 'Yes' for non-stock item,«Имеет серийный номер» не может быть «Да» для нескладируемого продукта, -'Opening',«Открывается», -'To Case No.' cannot be less than 'From Case No.',"«До дела №» не может быть меньше, чем «От дела №»", -'To Date' is required,"Поле ""До Даты"" является обязательным для заполнения", -'Total',«Итого», -'Update Stock' can not be checked because items are not delivered via {0},"Нельзя выбрать «Обновить запасы», так как продукты не поставляются через {0}", -'Update Stock' cannot be checked for fixed asset sale,"""Обновить запасы"" нельзя выбрать при продаже основных средств", +"""Customer Provided Item"" cannot be Purchase Item also","""Товар, предоставленный клиентом"" не может быть предметом покупки", +"""Customer Provided Item"" cannot have Valuation Rate","""Предоставленный клиентом товар"" не может иметь оценку", +"""Is Fixed Asset"" cannot be unchecked, as Asset record exists against the item","Нельзя убрать отметку ""Является основным средством"", поскольку по данному пункту имеется запись по активам", +'Based On' and 'Group By' can not be same,'На основании' и 'Группировка по' не могут быть одинаковыми, +'Days Since Last Order' must be greater than or equal to zero,'Дней с момента последнего заказа' должно быть больше или равно 0, +'Entries' cannot be empty,'Записи' не могут быть пустыми, +'From Date' is required,Поле 'С даты' является обязательным для заполнения, +'From Date' must be after 'To Date',Значение 'С даты' должно быть после 'До даты', +'Has Serial No' can not be 'Yes' for non-stock item,'Имеет серийный номер' не может быть 'Да' для нескладируемого продукта, +'Opening','Открытие', +'To Case No.' cannot be less than 'From Case No.',"'До дела №' не может быть меньше, чем 'От дела №'", +'To Date' is required,Поле 'До Даты' является обязательным для заполнения, +'Total','Итого', +'Update Stock' can not be checked because items are not delivered via {0},"Нельзя выбрать 'Обновить запасы', так как продукты не поставляются через {0}", +'Update Stock' cannot be checked for fixed asset sale,"'Обновить запасы' нельзя выбрать при продаже основных средств", ) for {0},) для {0}, 1 exact match.,1 точное совпадение., 90-Above,90-Над, @@ -44,7 +44,7 @@ Accessable Value,Доступная стоимость, Account,Аккаунт, Account Number,Номер аккаунта, Account Number {0} already used in account {1},"Номер счета {0}, уже использованный в учетной записи {1}", -Account Pay Only,Счет Оплатить только, +Account Pay Only,Только оплатить счет, Account Type,Тип учетной записи, Account Type for {0} must be {1},Тип счета для {0} должен быть {1}, "Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Баланс счета в Кредите, запрещена установка 'Баланс должен быть' как 'Дебет'", @@ -117,7 +117,7 @@ Add Item,Добавить продукт, Add Items,Добавить продукты, Add Leads,Добавить лид, Add Multiple Tasks,Добавить несколько задач, -Add Row,Добавить ряд, +Add Row,Добавить строку, Add Sales Partners,Добавить партнеров по продажам, Add Serial No,Добавить серийный номер, Add Students,Добавить студентов, @@ -159,8 +159,8 @@ Aerospace,Авиационно-космический, Against,Против, Against Account,Со счета, Against Journal Entry {0} does not have any unmatched {1} entry,Против Запись в журнале {0} не имеет никакого непревзойденную {1} запись, -Against Journal Entry {0} is already adjusted against some other voucher,Против Запись в журнале {0} уже настроен против какой-либо другой ваучер, -Against Supplier Invoice {0} dated {1},Против поставщика счет-фактура {0} от {1}, +Against Journal Entry {0} is already adjusted against some other voucher,Противопоставление записи в журнале {0} уже скорректирован по какому-то другому ваучеру, +Against Supplier Invoice {0} dated {1},Против поставщика счет {0} от {1}, Against Voucher,Против ваучером, Against Voucher Type,Против Сертификаты Тип, Age,Возраст, @@ -215,12 +215,12 @@ Amount {0} {1} transferred from {2} to {3},Сумма {0} {1} переведен Amount {0} {1} {2} {3},Сумма {0} {1} {2} {3}, Amt,Amt, "An Item Group exists with same name, please change the item name or rename the item group","Продуктовая группа с этим именем уже существует. Пожалуйста, измените название продукта или название продуктовой группы.", -An academic term with this 'Academic Year' {0} and 'Term Name' {1} already exists. Please modify these entries and try again.,"Академический термин с этим "Академический год" {0} и 'Term Name' {1} уже существует. Пожалуйста, измените эти записи и повторите попытку.", +An academic term with this 'Academic Year' {0} and 'Term Name' {1} already exists. Please modify these entries and try again.,"Академический срок с этим "Академический год" {0} и 'Term Name' {1} уже существует. Пожалуйста, измените эти записи и повторите попытку.", An error occurred during the update process,Произошла ошибка во время процесса обновления, "An item exists with same name ({0}), please change the item group name or rename the item","Продукт с именем ({0}) существует. Пожалуйста, измените название продуктовой группы или продукта.", Analyst,Аналитик, -Analytics,аналитика, -Annual Billing: {0},Годовой Billing: {0}, +Analytics,Аналитика, +Annual Billing: {0},Годовой оборот: {0}, Annual Salary,Годовой оклад, Anonymous,анонимное, Another Budget record '{0}' already exists against {1} '{2}' and account '{3}' for fiscal year {4},Еще одна запись бюджета «{0}» уже существует в отношении {1} '{2}' и учетной записи '{3}' за финансовый год {4}, @@ -242,7 +242,7 @@ Apply Now,Применить сейчас, Appointment Confirmation,Подтверждение назначения, Appointment Duration (mins),Продолжительность встречи (мин.), Appointment Type,Тип Назначения, -Appointment {0} and Sales Invoice {1} cancelled,Назначение {0} и счет-фактура продажи {1} отменены, +Appointment {0} and Sales Invoice {1} cancelled,Назначение {0} и счет продажи {1} отменены, Appointments and Encounters,Встречи и Столкновения, Appointments and Patient Encounters,Назначения и встречи с пациентами, Appraisal {0} created for Employee {1} in the given date range,Оценка {0} создан Требуются {1} в указанный диапазон дат, @@ -288,9 +288,9 @@ Asset {0} must be submitted,Актив {0} должен быть проведе Assets,Активы, Assign,Назначить, Assign Salary Structure,Назначить структуру заработной платы, -Assign To,Назначить в, +Assign To,Назначить для, Assign to Employees,Назначить сотрудникам, -Assigning Structures...,Назначение структур ..., +Assigning Structures...,Назначение структур..., Associate,Помощник, At least one mode of payment is required for POS invoice.,По крайней мере один способ оплаты требуется для POS счета., Atleast one item should be entered with negative quantity in return document,Как минимум один продукт должен быть введен с отрицательным количеством в возвратном документе, @@ -402,13 +402,13 @@ Bills raised to Customers.,Счета выставленные клиентам, Biotechnology,Биотехнологии, Birthday Reminder,День рождения, Black,Черный, -Blanket Orders from Costumers.,Заказы на одеяла от клиентов., +Blanket Orders from Costumers.,Общие заказы от клиентов., Block Invoice,Блок-счет, Boms,Boms, Bonus Payment Date cannot be a past date,Дата выплаты бонуса не может быть прошлой датой, Both Trial Period Start Date and Trial Period End Date must be set,"Должны быть установлены как дата начала пробного периода, так и дата окончания пробного периода", Both Warehouse must belong to same Company,Оба Склад должены принадлежать одной Компании, -Branch,Ветвь, +Branch,Филиал, Broadcasting,Вещание, Brokerage,Посредничество, Browse BOM,Просмотр спецификации, @@ -421,7 +421,7 @@ Buildings,Здания, Bundle items at time of sale.,Собирать продукты в момент продажи., Business Development Manager,Менеджер по развитию бизнеса, Buy,Купить, -Buying,Покупки, +Buying,Закупки, Buying Amount,Сумма покупки, Buying Price List,Ценовой список покупок, Buying Rate,Частота покупки, @@ -490,7 +490,7 @@ Capital Equipments,Капитальные оборудование, Capital Stock,Капитал, Capital Work in Progress,Капитальная работа в процессе, Cart,Корзина, -Cart is Empty,Корзина Пусто, +Cart is Empty,Корзина пуста, Case No(s) already in use. Try from Case No {0},Случай Нет (ы) уже используется. Попробуйте из дела № {0}, Cash,Наличные, Cash Flow Statement,О движении денежных средств, @@ -563,7 +563,7 @@ Commercial,Коммерческий сектор, Commission,Комиссионный сбор, Commission Rate %,Ставка комиссии %, Commission on Sales,Комиссия по продажам, -Commission rate cannot be greater than 100,"Скорость Комиссия не может быть больше, чем 100", +Commission rate cannot be greater than 100,"Стоимость комиссии не может быть больше, чем 100", Community Forum,Форум, Company (not Customer or Supplier) master.,Компания (не клиента или поставщика) хозяин., Company Abbreviation,Аббревиатура компании, @@ -578,7 +578,7 @@ Compensatory Off,Компенсационные Выкл, Compensatory leave request days not in valid holidays,Дни запроса на получение компенсационных отчислений не действительны, Complaint,Жалоба, Completion Date,Дата завершения, -Computer,компьютер, +Computer,Компьютер, Condition,Условия, Configure,Конфигурировать, Configure {0},Настроить {0}, @@ -636,14 +636,13 @@ Could not retrieve information for {0}.,Не удалось получить и Could not solve criteria score function for {0}. Make sure the formula is valid.,"Не удалось решить функцию оценки критериев для {0}. Убедитесь, что формула действительна.", Could not solve weighted score function. Make sure the formula is valid.,"Не удалось решить функцию взвешенного балла. Убедитесь, что формула действительна.", Could not submit some Salary Slips,Не удалось отправить некоторые зарплатные ведомости, -"Could not update stock, invoice contains drop shipping item.","Не удалось обновить запасы, счет-фактура содержит продукт прямой доставки.", +"Could not update stock, invoice contains drop shipping item.","Не удалось обновить запасы, счет содержит продукт прямой доставки.", Country wise default Address Templates,Шаблоны адресов по умолчанию для разных стран, Course,Курс, Course Code: ,Код курса: , Course Enrollment {0} does not exists,Зачисление на курс {0} не существует, Course Schedule,Расписание курса, Course: ,Курс: , -Cr,Cr, Create,Создать, Create BOM,Создать спецификацию, Create Delivery Trip,Создать маршрут доставки, @@ -663,7 +662,7 @@ Create Leads,Создать лид, Create Maintenance Visit,Создать техническое посещение, Create Material Request,Создать заявку на материал, Create Multiple,Создать несколько, -Create Opening Sales and Purchase Invoices,Создание начальных счетов-фактур купли-продажи, +Create Opening Sales and Purchase Invoices,Создание начальных счетов купли-продажи, Create Payment Entries,Создать платежные записи, Create Payment Entry,Создать платежную запись, Create Print Format,Создание Формат печати, @@ -692,22 +691,22 @@ Create rules to restrict transactions based on values.,Создание прав Created {0} scorecards for {1} between: ,Созданы {0} оценочные карточки для {1} между:, Creating Company and Importing Chart of Accounts,Создание компании и импорт плана счетов, Creating Fees,Создание сборов, -Creating Payment Entries......,Создание платежных записей ......, -Creating Salary Slips...,Создание зарплатных листков..., +Creating Payment Entries......,Создание платежных записей......, +Creating Salary Slips...,Создание зарплатных ведомостей..., Creating student groups,Создание групп студентов, -Creating {0} Invoice,Создание {0} счета-фактуры, +Creating {0} Invoice,Создание {0} счета, Credit,Кредит, Credit ({0}),Кредит ({0}), Credit Account,Кредитный счет, Credit Balance,Кредитный баланс, Credit Card,Кредитная карта, Credit Days cannot be a negative number,Кредитные дни не могут быть отрицательным числом, -Credit Limit,{0}{/0} {1}Кредитный лимит {/1}, -Credit Note,Кредитная запись , +Credit Limit,Кредитный лимит, +Credit Note,Кредитная запись, Credit Note Amount,Сумма кредитной записи, Credit Note Issued,Кредит выдается справка, Credit Note {0} has been created automatically,Кредитная запись {0} была создана автоматически, -Credit limit has been crossed for customer {0} ({1}/{2}),Кредитный лимит был скрещен для клиента {0} ({1} / {2}), +Credit limit has been crossed for customer {0} ({1}/{2}),Кредитный лимит был скрещен для клиента {0} ({1}/{2}), Creditors,Кредиторы, Criteria weights must add up to 100%,Критерии веса должны составлять до 100%, Crop Cycle,Цикл урожая, @@ -716,21 +715,21 @@ Currency Exchange must be applicable for Buying or for Selling.,Обмен ва Currency can not be changed after making entries using some other currency,"Валюта не может быть изменена после внесения записи, используя другой валюты", Currency exchange rate master.,Мастер Валютный курс., Currency for {0} must be {1},Валюта для {0} должно быть {1}, -Currency is required for Price List {0},Валюта необходима для Прейскурантом {0}, +Currency is required for Price List {0},Валюта необходима для прайс-листа {0}, Currency of the Closing Account must be {0},Валюта закрытии счета должны быть {0}, Currency of the price list {0} must be {1} or {2},Валюта прейскуранта {0} должна быть {1} или {2}, -Currency should be same as Price List Currency: {0},"Валюта должна быть такой же, как и прейскурант Валюта: {0}", +Currency should be same as Price List Currency: {0},"Валюта должна быть такой же, как и прайс-лист валюты: {0}", Current,Текущий, Current Assets,Оборотные активы, Current BOM and New BOM can not be same,"Текущий спецификации и Нью-BOM не может быть таким же,", Current Job Openings,Текущие вакансии Вакансии, Current Liabilities,Текущие обязательства, Current Qty,Текущее количество, -Current invoice {0} is missing,Текущий счет-фактура {0} отсутствует, +Current invoice {0} is missing,Текущий счет {0} отсутствует, Custom HTML,Пользовательский HTML, Custom?,Пользовательский?, Customer,Клиент, -Customer Addresses And Contacts,Адреса клиентов и Контакты, +Customer Addresses And Contacts,Адреса клиентов и контакты, Customer Contact,Контакты с клиентами, Customer Database.,База данных клиентов., Customer Group,Группа клиентов, @@ -790,17 +789,16 @@ Default Unit of Measure for Variant '{0}' must be same as in Template '{1}',"П Default settings for buying transactions.,Настройки по умолчанию для покупки сделок., Default settings for selling transactions.,Настройки по умолчанию для продажи сделок., Default tax templates for sales and purchase are created.,Создаются шаблоны налогов по умолчанию для продаж и покупки., -Defaults,Значения по Умолчанию, +Defaults,Значения по умолчанию, Defense,Оборона, Define Project type.,Установите тип проекта., Define budget for a financial year.,Определить бюджет на финансовый год., Define various loan types,Определение различных видов кредита, -Del,Del, Delay in payment (Days),Задержка в оплате (дни), Delete all the Transactions for this Company,Удалить все транзакции этой компании, Deletion is not permitted for country {0},Для страны не разрешено удаление {0}, Delivered,Доставлено, -Delivered Amount,Поставляется Сумма, +Delivered Amount,Доставленное количество, Delivered Qty,Поставляемое кол-во, Delivered: {0},Доставлено: {0}, Delivery,Доставка, @@ -881,7 +879,7 @@ Drug,Лекарство, Due / Reference Date cannot be after {0},Из-за / Reference Дата не может быть в течение {0}, Due Date cannot be before Posting / Supplier Invoice Date,Срок оплаты не может быть раньше даты публикации / выставления счета поставщику, Due Date is mandatory,Благодаря Дата является обязательным, -Duplicate Entry. Please check Authorization Rule {0},"Копия записи. Пожалуйста, проверьте Авторизация Правило {0}", +Duplicate Entry. Please check Authorization Rule {0},"Копия записи. Пожалуйста, проверьте правила авторизации {0}", Duplicate Serial No entered for Item {0},Дубликат Серийный номер вводится для Пункт {0}, Duplicate customer group found in the cutomer group table,Дубликат группа клиентов найти в таблице Cutomer группы, Duplicate entry,Дублировать запись, @@ -892,19 +890,19 @@ Duplicate {0} found in the table,Дубликат {0} найден в табли Duration in Days,Продолжительность в днях, Duties and Taxes,Пошлины и налоги, E-Invoicing Information Missing,Отсутствует информация об инвойсировании, -ERPNext Demo,ERPNext Demo, +ERPNext Demo,ERPNext демо, ERPNext Settings,Настройки ERPNext, Earliest,Самый ранний, Earnest Money,Задаток, Earning,Зарабатывание, -Edit,Ред., +Edit,Редактировать, Edit Publishing Details,Редактировать информацию о публикации, "Edit in full page for more options like assets, serial nos, batches etc.","Редактируйте на полной странице дополнительные параметры, такие как активы, серийные номера, партии и т. Д.", Education,образование, Either location or employee must be required,"Требуется либо место, либо сотрудник", Either target qty or target amount is mandatory,Либо целевой Количество или целевое количество является обязательным, Either target qty or target amount is mandatory.,Либо целевой Количество или целевое количество является обязательным., -Electrical,электрический, +Electrical,Электрический, Electronic Equipments,Электронные приборы, Electronics,Электроника, Eligible ITC,Соответствующий ITC, @@ -921,15 +919,15 @@ Employee,Сотрудник, Employee A/C Number,A/C номер сотрудника, Employee Advances,Достижения сотрудников, Employee Benefits,Вознаграждения работникам, -Employee Grade,Уровень персонала, +Employee Grade,Ранг персонала, Employee ID,ID сотрудника, Employee Lifecycle,Жизненный цикл сотрудников, Employee Name,Имя сотрудника, Employee Promotion cannot be submitted before Promotion Date ,Повышение сотрудника не может быть выполнено до даты приступления к должности, Employee Referral,Перечень сотрудников, Employee Transfer cannot be submitted before Transfer Date ,Передача сотрудника не может быть отправлена до даты передачи, -Employee cannot report to himself.,Сотрудник не может сообщить себе., -Employee relieved on {0} must be set as 'Left',"Сотрудник освобожден от {0} должен быть установлен как ""левые""", +Employee cannot report to himself.,Сотрудник не может сообщить самому себе., +Employee relieved on {0} must be set as 'Left',"Сотрудник освобожден от {0} должен быть установлен как 'Покинул'", Employee {0} already submited an apllication {1} for the payroll period {2},Сотрудник {0} уже отправил заявку {1} для периода расчета {2}, Employee {0} has already applied for {1} between {2} and {3} : ,Сотрудник {0} уже подал заявку на {1} между {2} и {3}:, Employee {0} has no maximum benefit amount,Сотрудник {0} не имеет максимальной суммы пособия, @@ -971,22 +969,22 @@ Estimated Cost,Ориентировочная стоимость, Evaluation,Оценка, "Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:","Даже если существует несколько правил ценообразования с наивысшим приоритетом, применяются следующие внутренние приоритеты:", Event,Событие, -Event Location,Место проведения мероприятия, +Event Location,Место проведения, Event Name,Название события, Exchange Gain/Loss,Обмен Прибыль / Убыток, Exchange Rate Revaluation master.,Курс переоценки мастер., Exchange Rate must be same as {0} {1} ({2}),"Курс должен быть таким же, как {0} {1} ({2})", -Excise Invoice,Акцизный Счет, +Excise Invoice,Акцизный счет, Execution,Реализация, Executive Search,Executive Search, Expand All,Развернуть все, Expected Delivery Date,Ожидаемая дата доставки, Expected Delivery Date should be after Sales Order Date,Ожидаемая дата доставки должна быть после даты Сделки, Expected End Date,Ожидаемая дата завершения, -Expected Hrs,Ожидаемые часы, +Expected Hrs,Ожидаемая длительность, Expected Start Date,Ожидаемая дата начала, Expense,Расходы, -Expense / Difference account ({0}) must be a 'Profit or Loss' account,"Расходов / Разница счет ({0}) должен быть ""прибыль или убыток» счета", +Expense / Difference account ({0}) must be a 'Profit or Loss' account,Счет расходов / разницы ({0}) должен быть счетом "Прибыль или убыток", Expense Account,Расходов счета, Expense Claim,Заявка на возмещение, Expense Claim for Vehicle Log {0},Авансовый Отчет для для журнала автомобиля {0}, @@ -997,7 +995,7 @@ Expenses,Расходы, Expenses Included In Asset Valuation,"Расходы, включенные в оценку активов", Expenses Included In Valuation,"Затрат, включаемых в оценке", Expired Batches,Просроченные партии, -Expires On,Годен до, +Expires On,Актуален до, Expiring On,Срок действия, Expiry (In Days),Срок действия (в днях), Explore,Обзор, @@ -1068,7 +1066,7 @@ For Employee,Для сотрудника, For Quantity (Manufactured Qty) is mandatory,Для Количество (Изготовитель Количество) является обязательным, For Supplier,Для поставщиков, For Warehouse,Для склада, -For Warehouse is required before Submit,Для Склада является обязательным полем для проведения, +For Warehouse is required before Submit,Для склада - обязательное полем для проводки, "For an item {0}, quantity must be negative number",Для элемента {0} количество должно быть отрицательным числом, "For an item {0}, quantity must be positive number",Для элемента {0} количество должно быть положительным числом, "For job card {0}, you can only make the 'Material Transfer for Manufacture' type stock entry",Для карты задания {0} вы можете только сделать запись запаса типа 'Передача материала для производства', @@ -1096,7 +1094,7 @@ From Delivery Note,Из накладной, From Fiscal Year,Из финансового года, From GSTIN,От GSTIN, From Party Name,От имени партии, -From Pin Code,Из штырькового кода, +From Pin Code,Из PIN кода, From Place,С места, From Range has to be less than To Range,"С Диапазон должен быть меньше, чем диапазон", From State,Из штата, @@ -1108,7 +1106,7 @@ From and To dates required,"От и До даты, необходимых", From date can not be less than employee's joining date,От даты не может быть меньше даты вступления в должность сотрудника, From value must be less than to value in row {0},"От значение должно быть меньше, чем значение в строке {0}", From {0} | {1} {2},С {0} | {1} {2}, -Fuel Price,Топливо Цена, +Fuel Price,Стоимость топлива, Fuel Qty,Топливо кол-во, Fulfillment,свершение, Full,Полный, @@ -1144,7 +1142,7 @@ Get Suppliers By,Получить поставщиков по, Get Updates,Получить обновления, Get customers from,Получить клиентов от, Get from Patient Encounter,Получите от Patient Encounter, -Getting Started,Руководство, +Getting Started,Приступая к работе, GitHub Sync ID,Идентификатор синхронизации GitHub, Global settings for all manufacturing processes.,Глобальные настройки для всех производственных процессов., Go to the Desktop and start using ERPNext,Перейдите на рабочий стол и начать использовать ERPNext, @@ -1212,7 +1210,7 @@ Help Results for,Результаты помощи для, High,Высокий, High Sensitivity,Высокая чувствительность, Hold,Удержание, -Hold Invoice,Держать счет-фактуру, +Hold Invoice,Держать счет, Holiday,Выходной, Holiday List,Список праздников, Hotel Rooms of type {0} are unavailable on {1},Номера отеля типа {0} недоступны в {1}, @@ -1287,18 +1285,18 @@ Installing presets,Установка пресетов, Institute Abbreviation,институт Аббревиатура, Institute Name,Название института, Instructor,Инструктор, -Insufficient Stock,Недостаточный Stock, -Insurance Start date should be less than Insurance End date,"Дата страхование начала должна быть меньше, чем дата страхование End", +Insufficient Stock,Недостаточный запас, +Insurance Start date should be less than Insurance End date,"Дата начала страхования должна быть раньше, чем дата окончания", Integrated Tax,Интегрированный налог, Inter-State Supplies,Межгосударственные поставки, -Interest Amount,Проценты Сумма, -Interests,интересы, +Interest Amount,Сумма процентов, +Interests,Интересы, Intern,Стажер, Internet Publishing,Интернет издания, Intra-State Supplies,Внутригосударственные поставки, Introduction,Введение, Invalid Attribute,Неправильный атрибут, -Invalid Blanket Order for the selected Customer and Item,Недействительный заказ на одеяло для выбранного клиента и предмета, +Invalid Blanket Order for the selected Customer and Item,Недействительный общий заказ для выбранного клиента и продукта, Invalid Company for Inter Company Transaction.,Неправильная компания для межфирменной сделки., Invalid GSTIN! A GSTIN must have 15 characters.,Неверный GSTIN! GSTIN должен иметь 15 символов., Invalid GSTIN! First 2 digits of GSTIN should match with State number {0}.,Неверный GSTIN! Первые 2 цифры GSTIN должны совпадать с номером состояния {0}., @@ -1314,14 +1312,14 @@ Inventory,Товарный запас, Investment Banking,Инвестиционно-банковская деятельность, Investments,Инвестиции, Invoice,Счет, -Invoice Created,Создан счет-фактура, +Invoice Created,Счет создан, Invoice Discounting,Дисконтирование счета, -Invoice Patient Registration,Регистрация счета-фактуры, +Invoice Patient Registration,Регистрация счета, Invoice Posting Date,Счет Дата размещения, Invoice Type,Тип счета, Invoice already created for all billing hours,"Счет, уже созданный для всех платежных часов", Invoice can't be made for zero billing hour,Счета не могут быть выставлены за нулевой расчетный час, -Invoice {0} no longer exists,Счет-фактура {0} больше не существует, +Invoice {0} no longer exists,Счет {0} больше не существует, Invoiced,Фактурная, Invoiced Amount,Сумма по счетам, Invoices,Счета, @@ -1344,10 +1342,10 @@ Item 2,Продукт 2, Item 3,Продукт 3, Item 4,Продукт 4, Item 5,Продукт 5, -Item Cart,Продуктовая корзина, +Item Cart,Корзина, Item Code,Код продукта, -Item Code cannot be changed for Serial No.,Код товара не может быть изменен для серийный номер, -Item Code required at Row No {0},Код товара требуется на Row Нет {0}, +Item Code cannot be changed for Serial No.,Код продукта не может быть изменен для серийного номера, +Item Code required at Row No {0},Требуется код продукта в строке № {0}, Item Description,Описание продукта, Item Group,Продуктовая группа, Item Group Tree,Структура продуктовых групп, @@ -1356,33 +1354,33 @@ Item Name,Название продукта, Item Price added for {0} in Price List {1},Цена продукта {0} добавлена в прайс-лист {1}, "Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, UOM, Qty and Dates.","Цена товара отображается несколько раз на основе Прайс-листа, Поставщика / Клиента, Валюты, Предмет, UOM, Кол-во и Даты.", Item Price updated for {0} in Price List {1},Цена продукта {0} обновлена в прайс-листе {1}, -Item Row {0}: {1} {2} does not exist in above '{1}' table,Элемент Row {0}: {1} {2} не существует в таблице «{1}», -Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,"Строка налога {0} должен иметь счет типа Налога, Доход, Расходов или Облагаемый налогом," +Item Row {0}: {1} {2} does not exist in above '{1}' table,Строка {0}: {1} {2} не существует в таблице «{1}», +Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,"Строка налога {0} должен иметь счет типа Налога, Доход, Расходов или Облагаемый налогом", Item Template,Шаблон продукта, -Item Variant Settings,Параметры модификации продкута, +Item Variant Settings,Параметры модификации продукта, Item Variant {0} already exists with same attributes,Модификация продукта {0} с этими атрибутами уже существует, Item Variants,Варианты продукта, Item Variants updated,Обновлены варианты предметов, Item has variants.,Продукт имеет модификации, Item must be added using 'Get Items from Purchase Receipts' button,"Продукт должен быть добавлен с помощью кнопки ""Получить продукты из покупки '", Item valuation rate is recalculated considering landed cost voucher amount,Коэффициент оценки стоимости пересчитывается с учетом суммы талонов с затратами, -Item variant {0} exists with same attributes,Модификация продукта {0} с этими атрибутами существует, +Item variant {0} exists with same attributes,Вариант продукта {0} с этими атрибутами уже существует, Item {0} does not exist,Продукт {0} не существует, Item {0} does not exist in the system or has expired,Продукт {0} не существует или просрочен, Item {0} has already been returned,Продукт {0} уже возвращен, Item {0} has been disabled,Продукт {0} не годен, -Item {0} has reached its end of life on {1},Пункт {0} достигла своей жизни на {1}, -Item {0} ignored since it is not a stock item,"Товар {0} игнорируется, так как это не складские позиции", -"Item {0} is a template, please select one of its variants","Объект {0} это шаблон, выберите один из его вариантов", +Item {0} has reached its end of life on {1},Продукт {0} достигокончания срока годности на {1}, +Item {0} ignored since it is not a stock item,"Продукт {0} игнорируется, так как это не складские позиции", +"Item {0} is a template, please select one of its variants","Продукт {0} это шаблон, выберите один из его вариантов", Item {0} is cancelled,Продукт {0} отменен, Item {0} is disabled,Продукт {0} отключен, -Item {0} is not a serialized Item,Пункт {0} не сериализованным Пункт, +Item {0} is not a serialized Item,Продукт {0} не сериализованным продуктом, Item {0} is not a stock Item,Продукта {0} нет на складе, -Item {0} is not active or end of life has been reached,Пункт {0} не является активным или конец жизни был достигнут, -Item {0} is not setup for Serial Nos. Check Item master,Пункт {0} не установка для мастера серийные номера Проверить товара, -Item {0} is not setup for Serial Nos. Column must be blank,Пункт {0} не установка для серийные номера колонке должно быть пустым, -Item {0} must be a Fixed Asset Item,Объект {0} должен быть объектом основных средств, -Item {0} must be a Sub-contracted Item,Объект {0} должен быть Субдоговорная Пункт, +Item {0} is not active or end of life has been reached,Продукт {0} не активен или истек срок годности, +Item {0} is not setup for Serial Nos. Check Item master,Продукт {0} не настроен для серийных номеров. Проверьте мастер продукта, +Item {0} is not setup for Serial Nos. Column must be blank,Продукт {0} не настроен для серийных номеров. Колонка должны быть пуста, +Item {0} must be a Fixed Asset Item,Продукт {0} должен быть объектом основных средств, +Item {0} must be a Sub-contracted Item,Продукт {0} должен быть предметом субподряда, Item {0} must be a non-stock item,Продукт {0} должен отсутствовать на складе, Item {0} must be a stock Item,Продукт {0} должен быть в наличии, Item {0} not found,Продукт {0} не найден, @@ -1397,10 +1395,10 @@ Job Card,Карточка работы, Job Description,Описание работы, Job Offer,Предложение работы, Job card {0} created,Карта работы {0} создана, -Jobs,Работы, +Jobs,Вакансии, Join,Присоединиться, Journal Entries {0} are un-linked,Записи в журнале {0} не-связаны, -Journal Entry,Запись в дневнике, +Journal Entry,Запись в журнале, Journal Entry {0} does not have account {1} or already matched against other voucher,Запись в журнале {0} не имеете учет {1} или уже сравнивается с другой ваучер, Kanban Board,Канбан-доска, Key Reports,Ключевые отчеты, @@ -1413,12 +1411,12 @@ Lab Test UOM,Лабораторная проверка UOM, Lab Tests and Vital Signs,Лабораторные тесты и жизненные знаки, Lab result datetime cannot be before testing datetime,Лабораторный результат datetime не может быть до тестирования даты и времени, Lab testing datetime cannot be before collection datetime,Лабораторное тестирование datetime не может быть до даты сбора данных, -Label,Ярлык, +Label,Метка, Laboratory,Лаборатория, Language Name,Название языка, Large,Большой, -Last Communication,Последнее сообщение, -Last Communication Date,Дата последнего общения, +Last Communication,Последняя коммуникация, +Last Communication Date,Дата последней коммуникации, Last Name,Фамилия, Last Order Amount,Последняя сумма заказа, Last Order Date,Последняя дата заказа, @@ -1439,7 +1437,7 @@ Leave Blocked,Оставьте Заблокированные, Leave Encashment,Оставьте Инкассацию, Leave Management,Оставить управления, Leave Status Notification,Оставить уведомление о состоянии, -Leave Type,Оставьте Тип, +Leave Type,Тип отпуска, Leave Type is madatory,Оставить Тип сумасшедший, Leave Type {0} cannot be allocated since it is leave without pay,"Оставьте Тип {0} не может быть выделена, так как он неоплачиваемый отпуск", Leave Type {0} cannot be carry-forwarded,Оставьте Тип {0} не может быть перенос направлен, @@ -1449,12 +1447,12 @@ Leave and Attendance,Оставить и посещаемость, Leave application {0} already exists against the student {1},Оставить заявку {0} уже существует против ученика {1}, "Leave cannot be allocated before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Оставить не могут быть выделены, прежде чем {0}, а отпуск баланс уже переноса направляются в будущем записи распределения отпуска {1}", "Leave cannot be applied/cancelled before {0}, as leave balance has already been carry-forwarded in the future leave allocation record {1}","Оставьте не могут быть применены / отменены, прежде чем {0}, а отпуск баланс уже переноса направляются в будущем записи распределения отпуска {1}", -Leave of type {0} cannot be longer than {1},"Оставить типа {0} не может быть больше, чем {1}", -Leaves,Листья, +Leave of type {0} cannot be longer than {1},"Отпусков типа {0} не может быть больше, чем {1}", +Leaves,Отпуски, Leaves Allocated Successfully for {0},Отпуск успешно распределен для {0}, -Leaves has been granted sucessfully,Листья были успешно предоставлены, -Leaves must be allocated in multiples of 0.5,"Листья должны быть выделены несколько 0,5", -Leaves per Year,Листья в год, +Leaves has been granted sucessfully,Отпуска были успешно предоставлены, +Leaves must be allocated in multiples of 0.5,"Отпуска должны быть распределены кратно 0,5", +Leaves per Year,Отпусков в год, Ledger,Регистр, Legal,Легальный, Legal Expenses,Судебные издержки, @@ -1480,17 +1478,17 @@ Loans (Liabilities),Кредиты (обязательства), Loans and Advances (Assets),Кредиты и авансы (активы), Local,Локальные, Log,Запись в журнале, -Logs for maintaining sms delivery status,Журналы для просмотра статуса доставки СМС, +Logs for maintaining sms delivery status,Журналы для просмотра статуса доставки SMS, Lost,Поражений, Lost Reasons,Потерянные причины, Low,Низкий, Low Sensitivity,Низкая чувствительность, Lower Income,Низкий уровень дохода, -Loyalty Amount,Сумма лояльности, -Loyalty Point Entry,Точка входа в лояльность, -Loyalty Points,Точки лояльности, -"Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned.",Точки лояльности будут рассчитываться исходя из проведенного (с помощью счета-фактуры) на основе упомянутого коэффициента сбора., -Loyalty Points: {0},Очки лояльности: {0}, +Loyalty Amount,Сумма баллов лояльности, +Loyalty Point Entry,Записи баллов лояльности, +Loyalty Points,Баллы лояльности, +"Loyalty Points will be calculated from the spent done (via the Sales Invoice), based on collection factor mentioned.",Баллы лояльности будут рассчитываться на основе потраченных средств (через счет продажи)., +Loyalty Points: {0},Баллы лояльности: {0}, Loyalty Program,Программа лояльности, Main,Основные, Maintenance,Обслуживание, @@ -1500,11 +1498,11 @@ Maintenance Schedule,График технического обслуживан Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',"График обслуживания не генерируется для всех элементов. Пожалуйста, нажмите на кнопку ""Generate Расписание""", Maintenance Schedule {0} exists against {1},График обслуживания {0} существует против {1}, Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,График Обслуживания {0} должен быть отменен до отмены этой Сделки, -Maintenance Status has to be Cancelled or Completed to Submit,Статус обслуживания должен быть отменен или завершен для отправки, +Maintenance Status has to be Cancelled or Completed to Submit,Статус обслуживания должен быть отменен или завершен для проводки, Maintenance User,Сотрудник обслуживания, -Maintenance Visit,Техническое обслуживание Посетить, +Maintenance Visit,Заявки на техническое обслуживание, Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Посещение по Обслуживанию {0} должно быть отменено до отмены этой Сделки, -Maintenance start date can not be before delivery date for Serial No {0},Техническое обслуживание дата не может быть до даты доставки для Serial No {0}, +Maintenance start date can not be before delivery date for Serial No {0},Дата технического обслуживания не может быть раньше даты поставки {0}, Make,Сделать, Make Payment,Создать платёж, Make project from a template.,Сделать проект из шаблона., @@ -1514,7 +1512,7 @@ Manage Customer Group Tree.,Управление деревом групп по Manage Sales Partners.,Управление партнерами по сбыту., Manage Sales Person Tree.,Управление деревом менеджеров по продажам., Manage Territory Tree.,Управление деревом территорий., -Manage your orders,Управляйте свои заказы, +Manage your orders,Управление вашими заказами, Management,Менеджмент, Manager,Менеджер, Managing Projects,Управление проектами, @@ -1533,13 +1531,13 @@ Mapping Type,Тип отображения, Mark Absent,Отметка отсутствует, Mark Attendance,Пометить посещаемость, Mark Half Day,Отметить Полдня, -Mark Present,Марк Присутствует, +Mark Present,Отметить Присутствует, Marketing,Маркетинг, Marketing Expenses,Маркетинговые расходы, Marketplace,Торговая площадка, -Marketplace Error,Ошибка рынка, +Marketplace Error,Ошибка торговой площадки, Masters,Мастеры, -Match Payments with Invoices,Соответствие Платежи с счетов-фактур, +Match Payments with Invoices,Соответствие платежей со счетами, Match non-linked Invoices and Payments.,Сопоставьте несвязанные счета и платежи., Material,Материал, Material Consumption,Расход материала, @@ -1577,10 +1575,10 @@ Meeting,Встреча, Member Activity,Активность участника, Member ID,ID пользователя, Member Name,Имя участника, -Member information.,Информация о членах., +Member information.,Информация об участниках., Membership,Членство, Membership Details,Сведения о членстве, -Membership ID,Идентификатор членства, +Membership ID,Идентификатор участника, Membership Type,Тип членства, Memebership Details,Меморандум, Memebership Type Details,Информация о типе памяти, @@ -1617,7 +1615,7 @@ More Information,Больше информации, More than one selection for {0} not allowed,Не допускается более одного выбора для {0}, More...,Больше..., Motion Picture & Video,Кино- и видеостудия, -Move,перемещение, +Move,Переместить, Move Item,Переместить продукт, Multi Currency,Мультивалютность, Multiple Item prices.,Гибкая цена продукта, @@ -1648,7 +1646,7 @@ Net Change in Fixed Asset,Чистое изменение в основных ф Net Change in Inventory,Чистое изменение в запасах, Net ITC Available(A) - (B),Чистый ITC Доступен (A) - (B), Net Pay,Чистая оплата, -Net Pay cannot be less than 0,"Net Pay не может быть меньше, чем 0", +Net Pay cannot be less than 0,"Чистая оплата не может быть меньше, чем 0", Net Profit,Чистая прибыль, Net Salary Amount,Чистая сумма зарплаты, Net Total,Чистая всего, @@ -1658,9 +1656,9 @@ New Address,Новый адрес, New BOM,Новая спецификация, New Batch ID (Optional),Новый идентификатор партии (необязательно), New Batch Qty,Новое количество партий, -New Company,Новая Компания, +New Company,Новая компания, New Cost Center Name,Название нового центра затрат, -New Customer Revenue,Новый Выручка клиентов, +New Customer Revenue,Доход от нового клиента, New Customers,Новые клиенты, New Department,Новый отдел, New Employee,Новый сотрудник, @@ -1679,13 +1677,13 @@ Next,Далее, Next Contact By cannot be same as the Lead Email Address,Следующий контакт не может совпадать с адресом электронной почты лида, Next Contact Date cannot be in the past,Дата следующего контакта не может быть в прошлом, Next Steps,Следующие шаги, -No Action,Бездействие, +No Action,Нет действий, No Customers yet!,Клиентов еще нет!, No Data,Нет данных, No Delivery Note selected for Customer {},Нет примечания о доставке для клиента {}, No Employee Found,Сотрудник не найден, No Item with Barcode {0},Нет продукта со штрих-кодом {0}, -No Item with Serial No {0},Нет продукта с серийным № {0}, +No Item with Serial No {0},Нет продукта с серийным номером {0}, No Items available for transfer,Нет доступных продуктов для перемещения, No Items selected for transfer,Не выбраны продукты для перемещения, No Items to pack,Нет продуктов для упаковки, @@ -1717,8 +1715,8 @@ No pending Material Requests found to link for the given items.,"Ожидает No products found,Продукты не найдены, No products found.,Не найдено продуктов., No record found,Не запись не найдено, -No records found in the Invoice table,Не записи не найдено в таблице счетов, -No records found in the Payment table,Не записи не найдено в таблице оплаты, +No records found in the Invoice table,В таблице счетов не найдено ни одной записи, +No records found in the Payment table,В таблице платежей не найдено ни одной записи, No replies from,Нет ответов от, No salary slip found to submit for the above selected criteria OR salary slip already submitted,Никакой оговорки о зарплате не было найдено для вышеуказанных выбранных критериев., No tasks,Нет задач, @@ -1746,7 +1744,7 @@ Not authroized since {0} exceeds limits,Не Authroized с {0} превышае Not permitted for {0},Не допускается для {0}, "Not permitted, configure Lab Test Template as required","Не разрешено, настройте шаблон лабораторного тестирования по мере необходимости.", Not permitted. Please disable the Service Unit Type,Не разрешено. Отключите тип устройства обслуживания, -Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),Примечание: Из-за / Reference Дата превышает разрешенный лимит клиент дня на {0} сутки (ы), +Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s),Примечание: Дата платежа / Исходная дата превышает допустимый кредитный день клиента на {0} дн., Note: Item {0} entered multiple times,Примечание: Продукт {0} имеет несколько вхождений, Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified,"Примечание: Оплата Вступление не будет создана, так как ""Наличные или Банковский счет"" не был указан", Note: System will not check over-delivery and over-booking for Item {0} as quantity or amount is 0,Примечание: Система не будет проверять по-доставки и избыточного бронирования по пункту {0} как количестве 0, @@ -1757,7 +1755,7 @@ Notes,Заметки, Nothing is included in gross,Ничто не входит в валовой, Nothing more to show.,Ничего больше не показывать., Nothing to change,Нечего менять, -Notice Period,Срок Уведомления, +Notice Period,Период уведомления, Notify Customers via Email,Уведомлять клиентов по электронной почте, Number,Число, Number of Depreciations Booked cannot be greater than Total Number of Depreciations,"Количество не Забронированный отчислений на амортизацию может быть больше, чем Общее количество отчислений на амортизацию", @@ -1794,14 +1792,14 @@ Opening Date and Closing Date should be within same Fiscal Year,Дата отк Opening Date should be before Closing Date,Дата открытия должна быть ранее Даты закрытия, Opening Entry Journal,Журнал открытия журнала, Opening Invoice Creation Tool,Инструмент для открытия счета, -Opening Invoice Item,Открытие счета-фактуры, -Opening Invoices,Открытие счетов-фактур, -Opening Invoices Summary,Открытие счета-фактуры, +Opening Invoice Item,Открытие счета, +Opening Invoices,Открытие счетов, +Opening Invoices Summary,Сводка по открытию счетов, Opening Qty,Открытое кол-во, Opening Stock,Начальный запас, Opening Stock Balance,Открытие баланса запасов, Opening Value,Начальное значение, -Opening {0} Invoice created,Открытие {0} счет-фактуры, +Opening {0} Invoice created,Открытие {0} счета создано, Operation,Операция, Operation Time must be greater than 0 for Operation {0},"Время работы должно быть больше, чем 0 для операции {0}", "Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations","Операция {0} больше, чем имеющихся часов на рабочем месте{1}, разбить операции на более мелкие", @@ -1834,16 +1832,16 @@ Other Reports,Другие отчеты, "Other outward supplies(Nil rated,Exempted)","Другие внешние поставки (Ноль оценили, освобождены)", Others,Другое, Out Qty,Из кол-ва, -Out Value,аута, +Out Value,Выходное значение, Out of Order,Вышел из строя, -Outgoing,исходящий, -Outstanding,выдающийся, +Outgoing,Исходящие, +Outstanding,Выдающийся, Outstanding Amount,Непогашенная сумма, Outstanding Amt,Выдающийся Amt, Outstanding Cheques and Deposits to clear,"Выдающиеся чеки и депозиты, чтобы очистить", Outstanding for {0} cannot be less than zero ({1}),Выдающийся для {0} не может быть меньше нуля ({1}), Outward taxable supplies(zero rated),Исходящие облагаемые налогом поставки (нулевой рейтинг), -Overdue,просроченный, +Overdue,Просроченные, Overlap in scoring between {0} and {1},Перекрытие при подсчете между {0} и {1}, Overlapping conditions found between:,Перекрытие условия найдено между:, Owner,Владелец, @@ -1855,7 +1853,7 @@ POS Profile required to make POS Entry,"POS-профиля требуется, POS Settings,Настройки POS, Packed quantity must equal quantity for Item {0} in row {1},Упакованное количество должно соответствовать количеству продукта {0} в строке {1}, Packing Slip,Упаковочный лист, -Packing Slip(s) cancelled,Упаковочный лист (ы) отменены, +Packing Slip(s) cancelled,Упаковочный лист(ы) отменены, Paid,Оплачено, Paid Amount,Оплаченная сумма, Paid Amount cannot be greater than total negative outstanding amount {0},Уплаченная сумма не может быть больше суммарного отрицательного непогашенной {0}, @@ -1869,7 +1867,7 @@ Partially Depreciated,Частично амортизируется, Partially Received,Частично получено, Party,Партия, Party Name,Название группы, -Party Type,Тип Группы, +Party Type,Тип группы, Party Type and Party is mandatory for {0} account,Тип и сторона партии обязательны для учетной записи {0}, Party Type is mandatory,Тип партии является обязательным, Party is mandatory,Партия является обязательным, @@ -1919,27 +1917,27 @@ Payments,Оплата, Payroll,Начисление заработной платы, Payroll Number,Номер платежной ведомости, Payroll Payable,Расчет заработной платы оплачивается, -Payslip,листка, +Payslip,Расчетная ведомость, Pending Activities,В ожидании Деятельность, Pending Amount,В ожидании Сумма, Pending Leaves,Ожидающие листья, Pending Qty,В ожидании кол-во, Pending Quantity,Количество в ожидании, -Pending Review,В ожидании отзыв, +Pending Review,В ожидании отзыва, Pending activities for today,В ожидании деятельность на сегодняшний день, Pension Funds,Пенсионные фонды, Percentage Allocation should be equal to 100%,Процент Распределение должно быть равно 100%, Perception Analysis,Анализ восприятия, -Period,Период обновления, +Period,Период, Period Closing Entry,Период закрытия входа, Period Closing Voucher,Период Окончание Ваучер, -Periodicity,периодичность, -Personal Details,Личные Данные, +Periodicity,Периодичность, +Personal Details,Личные данные, Pharmaceutical,Фармацевтический, Pharmaceuticals,Фармацевтика, Physician,Врач, Piecework,Сдельная работа, -Pincode,Pincode, +Pincode,PIN код, Place Of Supply (State/UT),Место поставки (штат / UT), Place Order,Разместить заказ, Plan Name,Название плана, @@ -1949,11 +1947,11 @@ Planned Qty,Планируемое кол-во, Planning,Планирование, Plants and Machineries,Растения и Механизмов, Please Set Supplier Group in Buying Settings.,Установите группу поставщиков в разделе «Настройки покупок»., -Please add a Temporary Opening account in Chart of Accounts,"Пожалуйста, добавьте временный вступительный счет в План счетов", +Please add a Temporary Opening account in Chart of Accounts,"Пожалуйста, добавьте временный вступительный счет в план счетов", Please add the account to root level Company - ,"Пожалуйста, добавьте счет на корневой уровень компании -", Please add the remaining benefits {0} to any of the existing component,Добавьте оставшиеся преимущества {0} к любому из существующих компонентов, Please check Multi Currency option to allow accounts with other currency,"Пожалуйста, проверьте мультивалютный вариант, позволяющий счета другой валюте", -Please click on 'Generate Schedule',"Пожалуйста, нажмите на кнопку ""Создать расписание""", +Please click on 'Generate Schedule',"Пожалуйста, нажмите на кнопку 'Создать расписание'", Please click on 'Generate Schedule' to fetch Serial No added for Item {0},"Пожалуйста, нажмите на кнопку ""Создать расписание"", чтобы принести Серийный номер добавлен для Пункт {0}", Please click on 'Generate Schedule' to get schedule,"Пожалуйста, нажмите на кнопку ""Создать расписание"", чтобы получить график", Please confirm once you have completed your training,"Пожалуйста, подтвердите, как только вы закончили обучение", @@ -1963,7 +1961,7 @@ Please enable Applicable on Booking Actual Expenses,"Пожалуйста, вк Please enable Applicable on Purchase Order and Applicable on Booking Actual Expenses,"Пожалуйста, включите Применимо по заказу на поставку и применимо при бронировании Фактические расходы", Please enable default incoming account before creating Daily Work Summary Group,"Включите учетную запись по умолчанию, прежде чем создавать сводную группу ежедневных работ", Please enable pop-ups,"Пожалуйста, включите всплывающие окна", -Please enter 'Is Subcontracted' as Yes or No,"Пожалуйста, введите 'Является субподряду "", как Да или Нет", +Please enter 'Is Subcontracted' as Yes or No,"Пожалуйста, введите 'Является субподрядом', как Да или Нет", Please enter API Consumer Key,Введите API-адрес потребителя, Please enter API Consumer Secret,"Пожалуйста, введите секретный раздел API", Please enter Account for Change Amount,"Пожалуйста, введите счет для изменения высоты", @@ -2115,14 +2113,14 @@ Please specify at least one attribute in the Attributes table,"Пожалуйс Please specify currency in Company,"Пожалуйста, сформулируйте валюту в обществе", Please specify either Quantity or Valuation Rate or both,"Пожалуйста, сформулируйте либо Количество или оценка Оценить или оба", Please specify from/to range,"Пожалуйста, сформулируйте из / в диапазоне", -Please supply the specified items at the best possible rates,"Пожалуйста, предоставьте указанные пункты в наилучших возможных ставок", +Please supply the specified items at the best possible rates,"Пожалуйста, укажите стоимость перечисленных позиций", Please update your status for this training event,Обновите свой статус для этого учебного мероприятия, Please wait 3 days before resending the reminder.,Подождите 3 дня перед отправкой напоминания., Point of Sale,Точки продаж, Point-of-Sale,Торговая точка, Point-of-Sale Profile,Точка-в-продажи профиля, Portal,Портал, -Portal Settings,портал Настройки, +Portal Settings,Настройки портала, Possible Supplier,Возможный поставщик, Postal Expenses,Почтовые расходы, Posting Date,Дата публикации, @@ -2146,7 +2144,7 @@ Preview Salary Slip,Просмотр Зарплата скольжению, Previous Financial Year is not closed,Предыдущий финансовый год не закрыт, Price,Цена, Price List,Прайс-лист, -Price List Currency not selected,Прайс-лист Обмен не выбран, +Price List Currency not selected,Валюта прайс-листа не выбрана, Price List Rate,Прайс-лист Оценить, Price List master.,Мастер Прайс-лист., Price List must be applicable for Buying or Selling,Прайс-лист должен быть применим для покупки или продажи, @@ -2185,7 +2183,7 @@ Produced Qty,Произведенное количество, Product,Продукт, Product Bundle,Продуктовый набор, Product Search,Поиск продукта, -Production,производство, +Production,Производство, Production Item,Производство товара, Products,Продукты, Profit and Loss,Прибыль и убытки, @@ -2195,7 +2193,7 @@ Program in the Fee Structure and Student Group {0} are different.,Програм Program {0} does not exist.,Программа {0} не существует., Program: ,Программа: , Progress % for a task cannot be more than 100.,Готовность задачи не может превышать 100%., -Project Collaboration Invitation,Сотрудничество Приглашение проекта, +Project Collaboration Invitation,Приглашение к сотрудничеству в проекте, Project Id,Идентификатор проекта, Project Manager,Менеджер проектов, Project Name,Название проекта, @@ -2224,17 +2222,17 @@ Publishing,Публикация, Purchase,Купить, Purchase Amount,Сумма покупки, Purchase Date,Дата покупки, -Purchase Invoice,Покупка Счет, +Purchase Invoice,Счет на покупку, Purchase Invoice {0} is already submitted,Счет на закупку {0} уже проведен, Purchase Manager,Менеджер поставок, Purchase Master Manager,Руководитель поставок, Purchase Order,Заказ на покупку, Purchase Order Amount,Сумма заказа на покупку, -Purchase Order Amount(Company Currency),Сумма заказа на покупку (валюта компании), +Purchase Order Amount(Company Currency),Сумма заказа на покупку (в валюте компании), Purchase Order Date,Дата заказа на покупку, Purchase Order Items not received on time,Элементы заказа на поставку не принимаются вовремя, -Purchase Order number required for Item {0},Число Заказ требуется для Пункт {0}, -Purchase Order to Payment,Заказ на Оплата, +Purchase Order number required for Item {0},Число Заказ требуется для продукта {0}, +Purchase Order to Payment,Заказ на покупку к оплата, Purchase Order {0} is not submitted,Заказ на закупку {0} не проведен, Purchase Orders are not allowed for {0} due to a scorecard standing of {1}.,"Заказы на поставку не допускаются для {0} из-за того, что система показателей имеет значение {1}.", Purchase Orders given to Suppliers.,"Заказы, выданные поставщикам.", @@ -2296,7 +2294,7 @@ Raw Materials,Сырье, Raw Materials cannot be blank.,Сырье не может быть пустым., Re-open,Снова откройте, Read blog,Читать блог, -Read the ERPNext Manual,Прочитайте Руководство ERPNext, +Read the ERPNext Manual,Прочитайте руководство ERPNext, Reading Uploaded File,Чтение загруженного файла, Real Estate,Недвижимость, Reason For Putting On Hold,Причина удержания, @@ -2347,7 +2345,7 @@ Remaining,Осталось, Remaining Balance,Остаток средств, Remarks,Примечания, Reminder to update GSTIN Sent,Напоминание об обновлении отправленного GSTIN, -Remove item if charges is not applicable to that item,"Удалить продукт, если сборы не применимы к этому продукту", +Remove item if charges is not applicable to that item,"Удалить объект, если к нему не применяются сборы", Removed items with no change in quantity or value.,Удалены пункты без изменения в количестве или стоимости., Reopen,Возобновить, Reorder Level,Уровень переупорядочения, @@ -2423,43 +2421,43 @@ Root cannot have a parent cost center,Корневая не может имет Round Off,Округлять, Rounded Total,Итого с округлением, Route,Маршрут, -Row # {0}: ,Строка # {0}:, +Row # {0}: ,Строка # {0}: , Row # {0}: Batch No must be same as {1} {2},"Строка # {0}: Номер партии не должен быть таким же, как {1} {2}", Row # {0}: Cannot return more than {1} for Item {2},Строка # {0}: Невозможно вернуть более {1} для {2}, Row # {0}: Rate cannot be greater than the rate used in {1} {2},"Строка # {0}: ставка не может быть больше ставки, используемой в {1} {2}", Row # {0}: Serial No is mandatory,Строка # {0}: Серийный номер является обязательным, Row # {0}: Serial No {1} does not match with {2} {3},"Строка # {0}: Серийный номер {1}, не соответствует {2} {3}", -Row #{0} (Payment Table): Amount must be negative,Строка # {0} (таблица платежей): сумма должна быть отрицательной, -Row #{0} (Payment Table): Amount must be positive,Строка # {0} (таблица платежей): сумма должна быть положительной, -Row #{0}: Account {1} does not belong to company {2},Строка # {0}: Счет {1} не принадлежит компании {2}, -Row #{0}: Allocated Amount cannot be greater than outstanding amount.,Строка # {0}: выделенная сумма не может превышать невыплаченную сумму., -"Row #{0}: Asset {1} cannot be submitted, it is already {2}","Строка # {0}: Актив {1} не может быть проведен, он уже {2}", -Row #{0}: Cannot set Rate if amount is greater than billed amount for Item {1}.,"Строка # {0}: не может установить значение скорости, если сумма превышает сумму выставленного счета за элемент {1}.", -Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Строка # {0}: дате зазора {1} не может быть до того Cheque Дата {2}, -Row #{0}: Duplicate entry in References {1} {2},Строка # {0}: Дублирующая запись в ссылках {1} {2}, -Row #{0}: Expected Delivery Date cannot be before Purchase Order Date,Строка # {0}: ожидаемая дата поставки не может быть до даты заказа на поставку, -Row #{0}: Item added,Строка № {0}: пункт добавлен, -Row #{0}: Journal Entry {1} does not have account {2} or already matched against another voucher,Строка # {0}: Запись в журнале {1} не имеет учетной записи {2} или уже сопоставляется с другой купон, -Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Строка # {0}: Не разрешено изменять поставщика когда уже существует заказ, -Row #{0}: Please set reorder quantity,"Строка # {0}: Пожалуйста, укажите количество повторного заказа", -Row #{0}: Please specify Serial No for Item {1},"Строка # {0}: Пожалуйста, сформулируйте серийный номер для продукта {1}", -Row #{0}: Qty increased by 1,Строка № {0}: кол-во увеличено на 1, -Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ,"Строка # {0}: цена должна быть такой же, как {1}: {2} ({3} / {4})", -Row #{0}: Reference Document Type must be one of Expense Claim or Journal Entry,Строка # {0}: Тип ссылочного документа должен быть одним из заголовка расхода или записи журнала, -"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry","Строка # {0}: Тип справочного документа должен быть одним из следующих: Заказ на покупку, Счет-фактура на покупку или Запись в журнале", -Row #{0}: Rejected Qty can not be entered in Purchase Return,Строка # {0}: Отклоненное количество не может быть введено в возврат покупки, -Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Строка # {0}: Отклонено Склад является обязательным в отношении отклонил Пункт {1}, -Row #{0}: Reqd by Date cannot be before Transaction Date,Строка # {0}: Reqd by Date не может быть до даты транзакции, -Row #{0}: Set Supplier for item {1},Строка # {0}: Установить поставщика для {1}, -Row #{0}: Status must be {1} for Invoice Discounting {2},Строка # {0}: статус должен быть {1} для дисконтирования счета-фактуры {2}, +Row #{0} (Payment Table): Amount must be negative,Строка #{0} (таблица платежей): сумма должна быть отрицательной, +Row #{0} (Payment Table): Amount must be positive,Строка #{0} (таблица платежей): сумма должна быть положительной, +Row #{0}: Account {1} does not belong to company {2},Строка #{0}: Счет {1} не принадлежит компании {2}, +Row #{0}: Allocated Amount cannot be greater than outstanding amount.,Строка #{0}: выделенная сумма не может превышать невыплаченную сумму., +"Row #{0}: Asset {1} cannot be submitted, it is already {2}","Строка #{0}: Актив {1} не может быть проведен, он уже {2}", +Row #{0}: Cannot set Rate if amount is greater than billed amount for Item {1}.,"Строка #{0}: не может установить значение скорости, если сумма превышает сумму выставленного счета за элемент {1}.", +Row #{0}: Clearance date {1} cannot be before Cheque Date {2},Строка #{0}: дате зазора {1} не может быть до того Cheque Дата {2}, +Row #{0}: Duplicate entry in References {1} {2},Строка #{0}: Дублирующая запись в ссылках {1} {2}, +Row #{0}: Expected Delivery Date cannot be before Purchase Order Date,Строка #{0}: ожидаемая дата поставки не может быть до даты заказа на поставку, +Row #{0}: Item added,Строка #{0}: пункт добавлен, +Row #{0}: Journal Entry {1} does not have account {2} or already matched against another voucher,Строка #{0}: Запись в журнале {1} не имеет учетной записи {2} или уже сопоставляется с другой купон, +Row #{0}: Not allowed to change Supplier as Purchase Order already exists,Строка #{0}: Не разрешено изменять поставщика когда уже существует заказ, +Row #{0}: Please set reorder quantity,"Строка #{0}: Пожалуйста, укажите количество повторных заказов", +Row #{0}: Please specify Serial No for Item {1},"Строка #{0}: Пожалуйста, сформулируйте серийный номер для продукта {1}", +Row #{0}: Qty increased by 1,Строка #{0}: кол-во увеличено на 1, +Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ,"Строка #{0}: цена должна быть такой же, как {1}: {2} ({3} / {4})", +Row #{0}: Reference Document Type must be one of Expense Claim or Journal Entry,Строка #{0}: Тип ссылочного документа должен быть одним из заголовка расхода или записи журнала, +"Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry","Строка #{0}: Тип справочного документа должен быть одним из следующих: Заказ на покупку, Счет-фактура на покупку или Запись в журнале", +Row #{0}: Rejected Qty can not be entered in Purchase Return,Строка #{0}: Отклоненное количество не может быть введено в возврат покупки, +Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Строка #{0}: Отклоненный склад является обязательным для отклоненного продукта {1}, +Row #{0}: Reqd by Date cannot be before Transaction Date,Строка #{0}: Reqd by Date не может быть до даты транзакции, +Row #{0}: Set Supplier for item {1},Строка #{0}: Установить поставщика для {1}, +Row #{0}: Status must be {1} for Invoice Discounting {2},Строка #{0}: статус должен быть {1} для дисконтирования счета-фактуры {2}, "Row #{0}: The batch {1} has only {2} qty. Please select another batch which has {3} qty available or split the row into multiple rows, to deliver/issue from multiple batches","Строка # {0}: партия {1} имеет только {2} qty. Выберите другой пакет, в котором имеется {3} qty, или разбейте строку на несколько строк, чтобы доставлять / выпускать из нескольких партий", -Row #{0}: Timings conflicts with row {1},Строка # {0}: Тайминги конфликтуют со строкой {1}, -Row #{0}: {1} can not be negative for item {2},Строка # {0}: {1} не может быть отрицательным для {2}, -Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},"Строка № {0}: Сумма не может быть больше, чем указанная в Авансовом Отчете {1}. Указанная сумма {2}", +Row #{0}: Timings conflicts with row {1},Строка #{0}: Тайминги конфликтуют со строкой {1}, +Row #{0}: {1} can not be negative for item {2},Строка #{0}: {1} не может быть отрицательным для {2}, +Row No {0}: Amount cannot be greater than Pending Amount against Expense Claim {1}. Pending Amount is {2},"Строка #{0}: Сумма не может быть больше, чем указанная в Авансовом Отчете {1}. Указанная сумма {2}", Row {0} : Operation is required against the raw material item {1},Строка {0}: требуется операция против элемента исходного материала {1}, -Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2},"Строка {0} # Выделенная сумма {1} не может быть больше, чем невостребованная сумма {2}", -Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3},Строка {0} # Элемент {1} не может быть передан более {2} в отношении заказа на поставку {3}, -Row {0}# Paid Amount cannot be greater than requested advance amount,Строка {0} # Платная сумма не может быть больше запрашиваемой суммы аванса, +Row {0}# Allocated amount {1} cannot be greater than unclaimed amount {2},"Строка {0}# Выделенная сумма {1} не может быть больше, чем невостребованная сумма {2}", +Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3},Строка {0}# Продукт {1} не может быть передан более {2} в отношении заказа на поставку {3}, +Row {0}# Paid Amount cannot be greater than requested advance amount,Строка {0}# Оплаченная сумма не может быть больше запрошенной суммы аванса, Row {0}: Activity Type is mandatory.,Строка {0}: Вид деятельности является обязательным., Row {0}: Advance against Customer must be credit,Строка {0}: Аванс в отношении клиента должен быть кредитом, Row {0}: Advance against Supplier must be debit,Строка {0}: Аванс в отношении поставщика должны быть дебетом, @@ -2509,7 +2507,7 @@ Salary Slip of employee {0} already created for this period,Зарплата С Salary Slip of employee {0} already created for time sheet {1},Зарплата Скольжение работника {0} уже создан для табеля {1}, Salary Slip submitted for period from {0} to {1},"Зарплатная ведомость отправлена за период с {0} по {1}", Salary Structure Assignment for Employee already exists,Присвоение структуры зарплаты сотруднику уже существует, -Salary Structure Missing,Структура заработной платы Отсутствующий, +Salary Structure Missing,Структура заработной платы отсутствует, Salary Structure must be submitted before submission of Tax Ememption Declaration,Структура заработной платы должна быть представлена до подачи декларации об освобождении от налогов, Salary Structure not found for employee {0} and date {1},Структура зарплаты не найдена для сотрудника {0} и даты {1}, Salary Structure should have flexible benefit component(s) to dispense benefit amount,Структура заработной платы должна иметь гибкий компонент (ы) выгоды для распределения суммы пособия, @@ -2572,7 +2570,7 @@ Scrapped,Уничтоженный, Search,Поиск, Search Results,результаты поиска, Search Sub Assemblies,Поиск Sub сборки, -"Search by item code, serial number, batch no or barcode","Поиск по коду товара, серийному номеру, номеру партии или штрих-коду", +"Search by item code, serial number, batch no or barcode","Поиск по коду продукта, серийному номеру, номеру партии или штрих-коду", "Seasonality for setting budgets, targets etc.","Сезонность для установки бюджеты, целевые и т.п.", Secret Key,Секретный ключ, Secretary,Секретарь, @@ -2585,21 +2583,21 @@ See all open tickets,Просмотреть все открытые билеты See past orders,Посмотреть прошлые заказы, See past quotations,Посмотреть прошлые предложения, Select,Выбрать, -Select Alternate Item,Выбрать альтернативный элемент, +Select Alternate Item,Выбрать альтернативный продукт, Select Attribute Values,Выберите значения атрибута, Select BOM,Выберите спецификацию, Select BOM and Qty for Production,Выберите спецификацию и кол-во для производства, "Select BOM, Qty and For Warehouse","Выберите спецификацию, кол-во и для склада", Select Batch,Выбрать пакет, Select Batch Numbers,Выберите пакетные номера, -Select Brand...,Выберите бренд ..., +Select Brand...,Выберите бренд..., Select Company,Выберите компанию, Select Company...,Выберите компанию..., Select Customer,Выбрать клиента, Select Days,Выберите дни, Select Default Supplier,Выберите поставщика по умолчанию, Select DocType,Выберите тип документа, -Select Fiscal Year...,Выберите финансовый год ..., +Select Fiscal Year...,Выберите финансовый год..., Select Item (optional),Выберите продукт (необязательно), Select Items based on Delivery Date,Выбрать продукты по дате поставки, Select Items to Manufacture,Выберите продукты для производства, @@ -2610,7 +2608,7 @@ Select Property,Выберите свойство, Select Quantity,Выберите количество, Select Serial Numbers,Выберите серийные номера, Select Target Warehouse,Выберите целевое хранилище, -Select Warehouse...,Выберите cклад ..., +Select Warehouse...,Выберите cклад..., Select an account to print in account currency,Выберите учетную запись для печати в валюте счета., Select an employee to get the employee advance.,"Выберите сотрудника, чтобы получить работу сотрудника.", Select at least one value from each of the attributes.,Выберите по крайней мере одно значение из каждого из атрибутов., @@ -2621,7 +2619,7 @@ Select the customer or supplier.,Выберите клиента или пост Select the nature of your business.,Выберите характер вашего бизнеса., Select the program first,Сначала выберите программу, Select to add Serial Number.,"Выберите, чтобы добавить серийный номер.", -Select your Domains,Выберите свои домены, +Select your Domains,Выберите ваши сферы деятельности, Selected Price List should have buying and selling fields checked.,Выбранный прейскурант должен иметь поля для покупки и продажи., Sell,Продажа, Selling,Продажа, @@ -2631,8 +2629,8 @@ Selling Rate,Стоимость продажи, "Selling must be checked, if Applicable For is selected as {0}","Продажа должна быть проверена, если выбран Применимо для как {0}", Send Grant Review Email,Отправить отзыв по электронной почте, Send Now,Отправить сейчас, -Send SMS,Отправить смс, -Send mass SMS to your contacts,Отправить массовое СМС по списку контактов, +Send SMS,Отправить SMS, +Send mass SMS to your contacts,Отправить SMS по списку контактов, Sensitivity,Чувствительность, Sent,Отправлено, Serial No and Batch,Серийный номер и партия, @@ -2660,8 +2658,8 @@ Series Updated,Идентификатор обновлен, Series Updated Successfully,Идентификатор успешно обновлен, Series is mandatory,Идентификатор является обязательным, Series {0} already used in {1},Идентификатор {0} уже используется в {1}, -Service,Услуги, -Service Expense,Услуги Expense, +Service,Услуга, +Service Expense,Стоимость услуги, Service Level Agreement,Соглашение об уровне обслуживания, Service Level Agreement.,Соглашение об уровне обслуживания., Service Level.,Уровень обслуживания., @@ -2675,8 +2673,8 @@ Set Project and all Tasks to status {0}?,Установить проект и в Set Status,Установить статус, Set Tax Rule for shopping cart,Установить налоговое правило для корзины, Set as Closed,Установить как "Закрыт", -Set as Completed,Сделать завершенным, -Set as Default,Установить по умолчанию, +Set as Completed,Установить как "Завершен", +Set as Default,Установить "По умолчанию", Set as Lost,Установить как "Потерянный", Set as Open,Установить как "Открытый", Set default inventory account for perpetual inventory,Установить учетную запись по умолчанию для вечной инвентаризации, @@ -2688,23 +2686,23 @@ Setting up Email,Настройка электронной почты, Setting up Email Account,Настройка учетной записи электронной почты, Setting up Employees,Настройка сотрудников, Setting up Taxes,Настройка налога, -Setting up company,Создание компании, +Setting up company,Настройка компании, Settings,Настройки, "Settings for online shopping cart such as shipping rules, price list etc.","Настройки для онлайн корзины, такие как правилами перевозок, прайс-лист и т.д.", Settings for website homepage,Настройки для сайта домашнюю страницу, Settings for website product listing,Настройки для списка товаров на сайте, Settled,Установившаяся, Setup Gateway accounts.,Настройка шлюза счета., -Setup SMS gateway settings,Указать настройки СМС-шлюза, +Setup SMS gateway settings,Указать настройки SMS-шлюза, Setup cheque dimensions for printing,Размеры Проверьте настройки для печати, -Setup default values for POS Invoices,Настройка значений по умолчанию для счетов-фактур POS, +Setup default values for POS Invoices,Настройка значений по умолчанию для счетов POS, Setup mode of POS (Online / Offline),Режим настройки POS (Online / Offline), Setup your Institute in ERPNext,Установите свой институт в ERPNext, Share Balance,Баланс акций, -Share Ledger,Поделиться записями, +Share Ledger,Записи по акциям, Share Management,Управление долями, Share Transfer,Передача акций, -Share Type,Share Тип, +Share Type,Тип акций, Shareholder,Акционер, Ship To State,Корабль в штат, Shipments,Поставки, @@ -2796,8 +2794,8 @@ Stock Entry {0} is not submitted,Складской акт {0} не провед Stock Expenses,Расходы по Запасам, Stock In Hand,Запасы на руках, Stock Items,Позиции на складе, -Stock Ledger,Книга учета Запасов, -Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts,Записи складской книги и записи GL запасов отправляются для выбранных покупок, +Stock Ledger,Книга учета запасов, +Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts,Записи книги учета запасов и записи GL повторно публикуются для выбранных квитанций о покупках, Stock Levels,Уровень запасов, Stock Liabilities,Обязательства по запасам, Stock Options,Опционы, @@ -2809,8 +2807,8 @@ Stock Transactions,Транзакции запасов, Stock UOM,Единица измерения запасов, Stock Value,Стоимость акций, Stock balance in Batch {0} will become negative {1} for Item {2} at Warehouse {3},Для продукта {2} на складе {3} остатки запасов для партии {0} станут отрицательными {1}, -Stock cannot be updated against Delivery Note {0},Фото не могут быть обновлены против накладной {0}, -Stock cannot be updated against Purchase Receipt {0},Фото не может быть обновлен с квитанцией о покупке {0}, +Stock cannot be updated against Delivery Note {0},Запасы не могут быть обновлены против накладной {0}, +Stock cannot be updated against Purchase Receipt {0},Запасы не может быть обновлен с квитанцией о покупке {0}, Stock cannot exist for Item {0} since has variants,Запасов продукта {0} не существует с момента появления вариантов, Stock transactions before {0} are frozen,Перемещения по складу до {0} заморожены, Stop,Стоп, @@ -2829,9 +2827,9 @@ Student Email ID,Идентификация студента по электро Student Group,Учебная группа, Student Group Strength,Сила студенческой группы, Student Group is already updated.,Студенческая группа уже обновлена., -Student Group: ,Студенческая группа:, +Student Group: ,Студенческая группа: , Student ID,Студенческий билет, -Student ID: ,Студенческий билет:, +Student ID: ,Студенческий билет: , Student LMS Activity,Студенческая LMS Активность, Student Mobile No.,Мобильный номер студента, Student Name,Имя ученика, @@ -2847,12 +2845,12 @@ Sub Type,Подтип, Sub-contracting,Суб-контракты, Subcontract,Субподряд, Subject,Тема, -Submit,Провести, +Submit,Утвердить, Submit Proof,Отправить подтверждение, -Submit Salary Slip,Провести Зарплатную ведомость, -Submit this Work Order for further processing.,Отправьте этот рабочий заказ для дальнейшей обработки., -Submit this to create the Employee record,"Отправьте это, чтобы создать запись сотрудника", -Submitting Salary Slips...,Отправка зарплатных листов ..., +Submit Salary Slip,Утведрдить зарплатную ведомость, +Submit this Work Order for further processing.,Утвердите этот рабочий заказ для дальнейшей обработки., +Submit this to create the Employee record,"Утвердите это, чтобы создать запись сотрудника", +Submitting Salary Slips...,Проводка зарплатных ведомостей..., Subscription,Подписка, Subscription Management,Управление подпиской, Subscriptions,Подписки, @@ -2864,9 +2862,9 @@ Successfully created payment entries,Успешно созданные плат Successfully deleted all transactions related to this company!,"Успешно удален все сделки, связанные с этой компанией!", Sum of Scores of Assessment Criteria needs to be {0}.,Сумма десятков критериев оценки должно быть {0}., Sum of points for all goals should be 100. It is {0},Сумма баллов за все цели должны быть 100. Это {0}, -Summary,Резюме, -Summary for this month and pending activities,Резюме для этого месяца и в ожидании деятельности, -Summary for this week and pending activities,Резюме на этой неделе и в ожидании деятельности, +Summary,Сводка, +Summary for this month and pending activities,Сводка за этот месяц и предстоящие мероприятия, +Summary for this week and pending activities,Сводка за эту неделю и предстоящие мероприятия, Sunday,Воскресенье, Suplier,Поставщик, Supplier,Поставщик, @@ -2875,12 +2873,12 @@ Supplier Group master.,Мастер группы поставщиков., Supplier Id,Id поставщика, Supplier Invoice Date cannot be greater than Posting Date,"Дата Поставщик Счет не может быть больше, чем Дата публикации", Supplier Invoice No,Поставщик Счет №, -Supplier Invoice No exists in Purchase Invoice {0},Поставщик Счет-фактура не существует в счете-фактуре {0}, -Supplier Name,наименование поставщика, +Supplier Invoice No exists in Purchase Invoice {0},Номер счета поставщика отсутствует в счете на покупку {0}, +Supplier Name,Наименование поставщика, Supplier Part No,Деталь поставщика №, Supplier Quotation,Предложение поставщика, Supplier Scorecard,Оценочная карта поставщика, -Supplier Warehouse mandatory for sub-contracted Purchase Receipt,Поставщик Склад обязательным для субподрядчиком ТОВАРНЫЙ ЧЕК, +Supplier Warehouse mandatory for sub-contracted Purchase Receipt,Наличие склада поставщика обязательно для субподрядной квитанции о покупке, Supplier database.,База данных поставщиков., Supplier {0} not found in {1},Поставщик {0} не найден в {1}, Supplier(s),Поставщик(и), @@ -2931,7 +2929,7 @@ Telecommunications,Телекоммуникации, Telephone Expenses,Телефонные расходы, Television,Телевидение, Template Name,Название шаблона, -Template of terms or contract.,Шаблон терминов или договором., +Template of terms or contract.,Шаблон условий или договоров., Templates of supplier scorecard criteria.,Шаблоны критериев оценки поставщиков., Templates of supplier scorecard variables.,Шаблоны переменных показателей поставщика., Templates of supplier standings.,Шаблоны позиций поставщиков., @@ -2949,7 +2947,7 @@ The 'From Package No.' field must neither be empty nor it's value less than 1., The Brand,Марка, The Item {0} cannot have Batch,Продукт {0} не может быть партией, The Loyalty Program isn't valid for the selected company,Программа лояльности не действительна для выбранной компании, -The Payment Term at row {0} is possibly a duplicate.,"Термин платежа в строке {0}, возможно, является дубликатом.", +The Payment Term at row {0} is possibly a duplicate.,"Условие платежа в строке {0}, возможно, является дубликатом.", The Term End Date cannot be earlier than the Term Start Date. Please correct the dates and try again.,"Срок Дата окончания не может быть раньше, чем срок Дата начала. Пожалуйста, исправьте дату и попробуйте еще раз.", The Term End Date cannot be later than the Year End Date of the Academic Year to which the term is linked (Academic Year {}). Please correct the dates and try again.,"Срок Дата окончания не может быть позднее, чем за год Дата окончания учебного года, к которому этот термин связан (учебный год {}). Пожалуйста, исправьте дату и попробуйте еще раз.", The Term Start Date cannot be earlier than the Year Start Date of the Academic Year to which the term is linked (Academic Year {}). Please correct the dates and try again.,"Срок Дата начала не может быть раньше, чем год Дата начала учебного года, к которому этот термин связан (учебный год {}). Пожалуйста, исправьте дату и попробуйте еще раз.", @@ -3035,7 +3033,7 @@ To Date cannot be before From Date,На сегодняшний день не м To Date cannot be less than From Date,"Дата не может быть меньше, чем с даты", To Date must be greater than From Date,"До даты должно быть больше, чем с даты", "To Date should be within the Fiscal Year. Assuming To Date = {0}","Дата должна быть в пределах финансового года. Предположим, до даты = {0}", -To Datetime,Для DateTime, +To Datetime,Ко времени, To Deliver,Для доставки, To Deliver and Bill,Для доставки и оплаты, To Fiscal Year,К финансовому году, @@ -3043,10 +3041,10 @@ To GSTIN,К GSTIN, To Party Name,Название партии, To Pin Code,К PIN-коду, To Place,Положить, -To Receive,Получить, +To Receive,К получению, To Receive and Bill,Для приема и Билл, To State,Государство, -To Warehouse,Для Склад, +To Warehouse,Для склада, To create a Payment Request reference document is required,Для создания ссылочного документа запроса платежа требуется, To date can not be equal or less than from date,"На сегодняшний день не может быть равным или меньше, чем с даты", To date can not be less than from date,"На сегодняшний день не может быть меньше, чем с даты", @@ -3081,7 +3079,7 @@ Total Credit/ Debit Amount should be same as linked Journal Entry,"Общая с Total Debit must be equal to Total Credit. The difference is {0},"Всего Дебет должна быть равна общей выработке. Разница в том, {0}", Total Deduction,Общий вычет, Total Invoiced Amount,Общая сумма по счетам, -Total Leaves,Всего Листья, +Total Leaves,Всего отпусков, Total Order Considered,Всего рассмотренных заказов, Total Order Value,Общая стоимость заказа, Total Outgoing,Всего исходящих, @@ -3093,7 +3091,7 @@ Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total, Total Payments,Всего платежей, Total Present,Итого Текущая, Total Qty,Общее количество, -Total Quantity,Общая численность, +Total Quantity,Общее количество, Total Revenue,Общий доход, Total Student,Всего учеников, Total Target,Всего целей, @@ -3119,13 +3117,13 @@ Total {0} ({1}),Общая {0} ({1}), "Total {0} for all items is zero, may be you should change 'Distribute Charges Based On'","Всего {0} для всех элементов равно нулю, может быть, вы должны изменить «Распределить плату на основе»", Total(Amt),Всего (сумма), Total(Qty),Всего (кол-во), -Traceability,прослеживаемость, +Traceability,Прослеживаемость, Traceback,Диагностика, Track Leads by Lead Source.,Отслеживать лидов по источнику., Training,Обучение, Training Event,Учебное мероприятие, Training Events,Учебные мероприятия, -Training Feedback,Обучение Обратная связь, +Training Feedback,Обучение обратная связь, Training Result,Результат обучения, Transaction,Транзакция, Transaction Date,Дата транзакции, @@ -3159,7 +3157,7 @@ Treshold {0}% appears more than once,Treshold {0}% появляется боле Trial Period End Date Cannot be before Trial Period Start Date,Дата окончания пробного периода Не может быть до начала периода пробного периода, Trialling,возможность проверки, Type of Business,Тип бизнеса, -Types of activities for Time Logs,Виды деятельности для Время Журналы, +Types of activities for Time Logs,Типы действий для учета времени, UOM,Единица измерения, UOM Conversion factor is required in row {0},Фактор Единица измерения преобразования требуется в строке {0}, UOM coversion factor required for UOM: {0} in Item: {1},Единица измерения фактором Конверсия требуется для UOM: {0} в пункте: {1}, @@ -3167,8 +3165,8 @@ URL,URL, Unable to find DocType {0},Не удалось найти DocType {0}, Unable to find exchange rate for {0} to {1} for key date {2}. Please create a Currency Exchange record manually,Невозможно найти обменный курс {0} до {1} за контрольную дату {2}. Создайте запись обмена валюты вручную., Unable to find score starting at {0}. You need to have standing scores covering 0 to 100,"Не удалось найти результат, начинающийся с {0}. Вы должны иметь постоянные баллы, покрывающие 0 до 100", -Unable to find variable: ,Не удалось найти переменную:, -Unblock Invoice,Разблокировать счет-фактуру, +Unable to find variable: ,Не удалось найти переменную: , +Unblock Invoice,Разблокировать счет, Uncheck all,Снять все, Unclosed Fiscal Years Profit / Loss (Credit),Прибыль/убыток за незакрытые финансовые годы (кредит), Unit,Единица, @@ -3189,9 +3187,9 @@ Update Print Format,Обновить формат печати, Update Response,Обновить ответ, Update bank payment dates with journals.,Обновление банк платежные даты с журналов., Update in progress. It might take a while.,Идет обновление. Это может занять некоторое время., -Update rate as per last purchase,Скорость обновления согласно последней покупке, -Update stock must be enable for the purchase invoice {0},Для покупки счета-фактуры {0} необходимо включить обновление запасов, -Updating Variants...,Обновление вариантов ..., +Update rate as per last purchase,Обновлять стоимость согласно последней покупке, +Update stock must be enable for the purchase invoice {0},Обновление запасов должно быть включено для счета на покупку {0}, +Updating Variants...,Обновление вариантов..., Upload your letter head and logo. (you can edit them later).,Загрузить шапку фирменного бланка и логотип. (Вы можете отредактировать их позднее)., Upper Income,Высокий уровень дохода, Use Sandbox,Использовать «песочницу», @@ -3199,7 +3197,7 @@ Used Leaves,Используемые листы, User,Пользователь, User ID,ID пользователя, User ID not set for Employee {0},ID пользователя не установлен для сотрудника {0}, -User Remark,Примечание Пользователь, +User Remark,Примечание пользователя, User has not applied rule on the invoice {0},Пользователь не применил правило к счету {0}, User {0} already exists,Пользователь {0} уже существует, User {0} created,Пользователь {0} создан, @@ -3229,7 +3227,7 @@ Variable,Переменная, Variance,Дисперсия, Variance ({}),Дисперсия ({}), Variant,Вариант, -Variant Attributes,Вариант Атрибуты, +Variant Attributes,Атрибуты варианта, Variant Based On cannot be changed,Вариант на основе не может быть изменен, Variant Details Report,Подробный отчет о вариантах, Variant creation has been queued.,Создание вариантов было поставлено в очередь., @@ -3243,7 +3241,7 @@ View Fees Records,Посмотреть рекорды, View Form,Посмотреть форму, View Lab Tests,Просмотр лабораторных тестов, View Leads,Посмотреть лиды, -View Ledger,Посмотреть Леджер, +View Ledger,Посмотреть записи, View Now,Просмотр сейчас, View a list of all the help videos,Просмотреть список всех справочных видео, View in Cart,Смотрите в корзину, @@ -3284,7 +3282,7 @@ Warranty,Гарантия, Warranty Claim,Претензия по гарантии, Warranty Claim against Serial No.,Претензия по гарантии по серийному номеру, Website,Сайт, -Website Image should be a public file or website URL,Сайт изображение должно быть общественное файл или адрес веб-сайта, +Website Image should be a public file or website URL,Изображение веб-сайта должно быть общедоступным файлом или URL-адресом веб-сайта, Website Image {0} attached to Item {1} cannot be found,"Изображение {0} на сайте, прикреплённое к продукту {1}, не найдено", Website Listing,Список сайтов, Website Manager,Менеджер сайта, @@ -3312,9 +3310,9 @@ Work Order {0} must be cancelled before cancelling this Sales Order,Заказ Work Order {0} must be submitted,Порядок работы {0} должен быть отправлен, Work Orders Created: {0},Созданы рабочие задания: {0}, Work Summary for {0},Резюме работы для {0}, -Work-in-Progress Warehouse is required before Submit,Работа-в-Прогресс Склад требуется перед Отправить, +Work-in-Progress Warehouse is required before Submit,Перед утверждением требуется склад незавершенного производства, Workflow,Рабочий процесс, -Working,Работающий, +Working,В работе, Working Hours,Часы работы, Workstation,Рабочее место, Workstation is closed on the following dates as per Holiday List: {0},Рабочая место закрыто в следующие даты согласно списка праздников: {0}, @@ -3332,10 +3330,10 @@ You can only redeem max {0} points in this order.,Вы можете выкупи You can only renew if your membership expires within 30 days,Вы можете продлить действие только в случае истечения срока действия вашего членства в течение 30 дней, You can only select a maximum of one option from the list of check boxes.,Вы можете выбрать только один вариант из списка флажков., You can only submit Leave Encashment for a valid encashment amount,Вы можете только отправить «Оставшаяся инкассация» для действительной суммы инкассации, -You can't redeem Loyalty Points having more value than the Grand Total.,"Вы не можете выкупить очки лояльности, имеющие большую ценность, чем Grand Total.", +You can't redeem Loyalty Points having more value than the Grand Total.,"Вы не можете использовать баллы лояльности, имеющие большую ценность, чем общая стоимость.", You cannot credit and debit same account at the same time,Нельзя кредитовать и дебетовать один счёт за один раз, You cannot delete Fiscal Year {0}. Fiscal Year {0} is set as default in Global Settings,Нельзя удалить {0} финансовый год. Финансовый год {0} установлен основным в глобальных параметрах, -You cannot delete Project Type 'External',Вы не можете удалить проект типа 'Внешний', +You cannot delete Project Type 'External',Вы не можете удалить проект типа "Внешний", You cannot edit root node.,Вы не можете редактировать корневой узел., You cannot restart a Subscription that is not cancelled.,"Вы не можете перезапустить подписку, которая не отменена.", You don't have enought Loyalty Points to redeem,У вас недостаточно очков лояльности для выкупа, @@ -3352,7 +3350,7 @@ You will lose records of previously generated invoices. Are you sure you want to Your Organization,Ваша организация, Your cart is Empty,Ваша корзина пуста, Your email address...,Ваш адрес электронной почты..., -Your order is out for delivery!,Ваш заказ для доставки!, +Your order is out for delivery!,Ваш заказ готов к доставке!, Your tickets,Ваши заявки, ZIP Code,Почтовый индекс, [Error],[Ошибка], @@ -3446,10 +3444,10 @@ on,вкл, {0} {1} is not submitted,{0} {1} не проведен, {0} {1} is {2},{0} {1} - это {2}, {0} {1} must be submitted,{0} {1} должен быть проведен, -{0} {1} not in any active Fiscal Year.,{0} {1} не в каком-либо активном финансовом годе., +{0} {1} not in any active Fiscal Year.,{0} {1} нет не в одном активном финансовом годе., {0} {1} status is {2},{0} {1} статус — {2}, {0} {1}: 'Profit and Loss' type account {2} not allowed in Opening Entry,"{0} {1}: тип счета {2} ""Прибыли и убытки"" не допускается в качестве начальной проводки", -{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Счет {2} не принадлежит Компании {3}, +{0} {1}: Account {2} does not belong to Company {3},{0} {1}: Счет {2} не принадлежит компании {3}, {0} {1}: Account {2} is inactive,{0} {1}: Счет {2} неактивен, {0} {1}: Accounting Entry for {2} can only be made in currency: {3},{0} {1}: Бухгалтерская запись для {2} может быть сделана только в валюте: {3}, {0} {1}: Cost Center is mandatory for Item {2},{0} {1}: МВЗ является обязательным для позиции {2}, @@ -3458,7 +3456,7 @@ on,вкл, {0} {1}: Customer is required against Receivable account {2},{0} {1}: Наименование клиента обязательно для Дебиторской задолженности {2}, {0} {1}: Either debit or credit amount is required for {2},{0} {1}: Требуется указать сумму дебета или кредита для {2}, {0} {1}: Supplier is required against Payable account {2},{0} {1}: Наименование поставщика обязательно для кредиторской задолженности {2}, -{0}% Billed,{0} % оплачено, +{0}% Billed,{0}% оплачено, {0}% Delivered,{0}% доставлено, "{0}: Employee email not found, hence email not sent","{0}: Адрес электронной почты сотрудника не найден, поэтому письмо не отправлено", {0}: From {0} of type {1},{0}: От {0} типа {1}, @@ -3472,10 +3470,10 @@ Completed By,Завершено, Conditions,Условия, County,Округ, Day of Week,День недели, -"Dear System Manager,","Уважаемый Менеджер системы,", +"Dear System Manager,","Уважаемый менеджер системы,", Default Value,Значение по умолчанию, Email Group,Группа электронной почты, -Email Settings,Настройки Электронной Почты, +Email Settings,Настройки электронной почты, Email not sent to {0} (unsubscribed / disabled),Письмо не отправлено {0} (отписан / отключено), Error Message,Сообщение об ошибке, Fieldtype,Тип поля, @@ -3500,7 +3498,7 @@ Postal,Почтовый, Postal Code,Почтовый индекс, Previous,Предыдущая, Provider,Поставщик, -Read Only,Только чтения, +Read Only,Только чтение, Recipient,Сторона-реципиент, Reviews,Отзывы, Sender,Отправитель, @@ -3526,10 +3524,10 @@ Budgets,Бюджеты, Bundle Qty,Комплект кол-во, Company GSTIN,Компания GSTIN, Company field is required,Поле компании обязательно для заполнения, -Creating Dimensions...,Создание размеров ..., +Creating Dimensions...,Создание размеров..., Duplicate entry against the item code {0} and manufacturer {1},Повторяющаяся запись с кодом товара {0} и производителем {1}, Invalid GSTIN! The input you've entered doesn't match the GSTIN format for UIN Holders or Non-Resident OIDAR Service Providers,Неверный GSTIN! Введенный вами ввод не соответствует формату GSTIN для владельцев UIN или нерезидентов OIDAR., -Invoice Grand Total,Счет-фактура Grand Total, +Invoice Grand Total,Общая сумма счета, Last carbon check date cannot be a future date,Дата последней проверки углерода не может быть датой в будущем, Make Stock Entry,Сделать складской запас, Quality Feedback,Отзыв о качестве, @@ -3537,7 +3535,7 @@ Quality Feedback Template,Шаблон обратной связи по каче Rules for applying different promotional schemes.,Правила применения разных рекламных схем., Shift,Сдвиг, Show {0},Показать {0}, -"Special Characters except ""-"", ""#"", ""."", ""/"", ""{"" and ""}"" not allowed in naming series","Специальные символы, кроме "-", "#", ".", "/", "{" И "}", не допускаются в именных сериях", +"Special Characters except ""-"", ""#"", ""."", ""/"", ""{"" and ""}"" not allowed in naming series","Специальные символы, кроме ""-"", ""#"", ""."", ""/"", ""{"" и ""}"", не допускаются в серийных номерах", Target Details,Детали цели, {0} already has a Parent Procedure {1}.,{0} уже имеет родительскую процедуру {1}., API,API, @@ -3549,7 +3547,7 @@ Export Type,Тип экспорта, From Date,С даты, Group By,Группа по, Importing {0} of {1},Импорт {0} из {1}, -Invalid URL,неправильный адрес, +Invalid URL,Неправильный URL, Landscape,Альбомный, Last Sync On,Последняя синхронизация, Naming Series,Идентификация по имени, @@ -3563,13 +3561,13 @@ Show Traceback,Показать трассировку, Video,Видео, Webhook Secret,Webhook Secret, % Of Grand Total,% От общего итога, -'employee_field_value' and 'timestamp' are required.,'employee_field_value' и 'timestamp' являются обязательными., +'employee_field_value' and 'timestamp' are required.,"employee_field_value" и "timestamp" являются обязательными., Company is a mandatory filter.,Компания является обязательным фильтром., From Date is a mandatory filter.,С даты является обязательным фильтром., -From Time cannot be later than To Time for {0},"Время не может быть позже, чем время для {0}", +From Time cannot be later than To Time for {0},"Начально время не может быть позже, чем конечное время для {0}", To Date is a mandatory filter.,На сегодняшний день это обязательный фильтр., A new appointment has been created for you with {0},Для вас создана новая встреча с {0}, -Account Value,Стоимость аккаунта, +Account Value,Стоимость счета, Account is mandatory to get payment entries,Счет обязателен для получения платежных записей, Account is not set for the dashboard chart {0},Счет не настроен для диаграммы панели мониторинга {0}, Account {0} does not belong to company {1},Счет {0} не принадлежит компании {1}, @@ -3648,19 +3646,19 @@ Call Summary,Сводка вызовов, Call Summary Saved,Сводка вызовов сохранена, Cancelled,Отменен, Cannot Calculate Arrival Time as Driver Address is Missing.,"Невозможно рассчитать время прибытия, так как отсутствует адрес водителя.", -Cannot Optimize Route as Driver Address is Missing.,"Не удается оптимизировать маршрут, так как отсутствует адрес драйвера.", +Cannot Optimize Route as Driver Address is Missing.,"Не удается оптимизировать маршрут, так как отсутствует адрес водителя.", Cannot complete task {0} as its dependant task {1} are not ccompleted / cancelled.,"Невозможно выполнить задачу {0}, поскольку ее зависимая задача {1} не завершена / не отменена.", Cannot create loan until application is approved,"Невозможно создать кредит, пока заявка не будет утверждена", Cannot find a matching Item. Please select some other value for {0}.,"Нет столько продуктов. Пожалуйста, выберите другое количество для {0}.", "Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings","Невозможно переплатить за элемент {0} в строке {1} более чем {2}. Чтобы разрешить перерасчет, пожалуйста, установите скидку в настройках аккаунта", -"Capacity Planning Error, planned start time can not be same as end time","Ошибка планирования мощности, запланированное время начала не может совпадать с временем окончания", -Categories,категории, +"Capacity Planning Error, planned start time can not be same as end time","Ошибка планирования емкости, запланированное время начала не может совпадать со временем окончания", +Categories,Категории, Changes in {0},Изменения в {0}, Chart,Диаграмма, Choose a corresponding payment,Выберите соответствующий платеж, Click on the link below to verify your email and confirm the appointment,"Нажмите на ссылку ниже, чтобы подтвердить свою электронную почту и подтвердить встречу", Close,Закрыть, -Communication,Общение, +Communication,Коммуникация, Compact Item Print,Компактный товара печати, Company,Организация, Company of asset {0} and purchase document {1} doesn't matches.,Компания актива {0} и документ покупки {1} не совпадают., @@ -3668,12 +3666,12 @@ Compare BOMs for changes in Raw Materials and Operations,Сравните спе Compare List function takes on list arguments,Функция сравнения списка принимает аргументы списка, Complete,Завершенно, Completed,Завершенный, -Completed Quantity,Завершенное количество, +Completed Quantity,Количество завершенных, Connect your Exotel Account to ERPNext and track call logs,Подключите свою учетную запись Exotel к ERPNext и отслеживайте журналы вызовов, Connect your bank accounts to ERPNext,Подключите свои банковские счета к ERPNext, Contact Seller,Связаться с продавцом, Continue,Продолжить, -Cost Center: {0} does not exist,МВЗ: {0} не существует, +Cost Center: {0} does not exist,Центр затрат: {0} не существует, Couldn't Set Service Level Agreement {0}.,Не удалось установить соглашение об уровне обслуживания {0}., Country,Страна, Country Code in File does not match with country code set up in the system,"Код страны в файле не совпадает с кодом страны, установленным в системе", @@ -3681,8 +3679,8 @@ Create New Contact,Создать новый контакт, Create New Lead,Создать новый лид, Create Pick List,Создать список выбора, Create Quality Inspection for Item {0},Создать проверку качества для позиции {0}, -Creating Accounts...,Создание аккаунтов ..., -Creating bank entries...,Создание банковских записей ..., +Creating Accounts...,Создание счетов..., +Creating bank entries...,Создание банковских записей..., Credit limit is already defined for the Company {0},Кредитный лимит уже определен для Компании {0}, Ctrl + Enter to submit,Ctrl + Enter для отправки, Ctrl+Enter to submit,Ctrl + Enter для отправки, @@ -3694,7 +3692,7 @@ Daily,Ежедневно, Date,Дата, Date Range,Диапазон дат, Date of Birth cannot be greater than Joining Date.,Дата рождения не может быть больше даты присоединения., -Dear,Уважаемый (ая), +Dear,Уважаемый(ая), Default,По умолчанию, Define coupon codes.,Определить коды купонов., Delayed Days,Задержанные дни, @@ -3735,7 +3733,7 @@ Employee {0} does not belongs to the company {1},Сотрудник {0} не п Enable Auto Re-Order,Включить автоматический повторный заказ, End Date of Agreement can't be less than today.,"Дата окончания соглашения не может быть меньше, чем сегодня.", End Time,Время окончания, -Energy Point Leaderboard,Таблица лидеров Energy Point, +Energy Point Leaderboard,Таблица лидеров согласно баллам активности, Enter API key in Google Settings.,Введите ключ API в настройках Google., Enter Supplier,Введите поставщика, Enter Value,Введите значение, @@ -3749,15 +3747,15 @@ Expected and Discharge dates cannot be less than Admission Schedule date,Ожи Expire Allocation,Истечение срока действия, Expired,Истек срок действия, Export,Экспорт, -Export not allowed. You need {0} role to export.,Экспорт не допускается. Вам нужно {0} роль для экспорта., -Failed to add Domain,Не удалось вид деятельности, +Export not allowed. You need {0} role to export.,Экспорт не допускается. Вам нужна роль {0} для экспорта., +Failed to add Domain,Не удалось добавить вид деятельности, Fetch Items from Warehouse,Получить товары со склада, Fetching...,Получение..., Field,Поле, File Manager,Файловый менеджер, Filters,Фильтры, Finding linked payments,Поиск связанных платежей, -Fleet Management,Управление флотом, +Fleet Management,Автопарк, Following fields are mandatory to create address:,Следующие поля обязательны для создания адреса:, For Month,На месяц, "For item {0} at row {1}, count of serial numbers does not match with the picked quantity",Для позиции {0} в строке {1} количество серийных номеров не совпадает с выбранным количеством, @@ -3832,11 +3830,11 @@ Loans provided to customers and employees.,"Кредиты, предоставл Location,Местоположение, Log Type is required for check-ins falling in the shift: {0}.,Тип регистрации необходим для регистрации заезда в смену: {0}., Looks like someone sent you to an incomplete URL. Please ask them to look into it.,"Похоже, кто-то послал вас к неполному URL. Пожалуйста, попросите их посмотреть в нее.", -Make Journal Entry,Сделать запись журнала, -Make Purchase Invoice,Сделать счете-фактуре, +Make Journal Entry,Сделать запись в журнале, +Make Purchase Invoice,Сделать счет на покупку, Manufactured,Изготовлено, Mark Work From Home,Пометить работу из дома, -Master,Магистр, +Master,Мастер, Max strength cannot be less than zero.,Максимальная сила не может быть меньше нуля., Maximum attempts for this quiz reached!,Максимальное количество попыток для этого теста достигнуто!, Message,Сообщение, @@ -3845,7 +3843,7 @@ Mobile No,Мобильный номер, Mobile Number,Мобильный номер, Month,Mесяц, Name,Имя, -Near you,Возле тебя, +Near you,Возле вас, Net Profit/Loss,Чистая прибыль / убыток, New Expense,Новый расход, New Invoice,Новый счет, @@ -3853,8 +3851,8 @@ New Payment,Новый платеж, New release date should be in the future,Дата нового релиза должна быть в будущем, Newsletter,Рассылка новостей, No Account matched these filters: {},"Нет аккаунта, соответствующего этим фильтрам: {}", -No Employee found for the given employee field value. '{}': {},Сотрудник не найден для данного значения поля сотрудника. '{}': {}, -No Leaves Allocated to Employee: {0} for Leave Type: {1},Сотрудникам не выделено ни одного листа: {0} для типа отпуска: {1}, +No Employee found for the given employee field value. '{}': {},Сотрудник не найден для данного значения поля сотрудника. '{}': {}, +No Leaves Allocated to Employee: {0} for Leave Type: {1},Сотруднику не назначен отпуск: {0} для типа отпуска: {1}, No communication found.,Связь не найдена., No correct answer is set for {0},Не указан правильный ответ для {0}, No description,Без описания, @@ -3869,20 +3867,24 @@ Non stock items,Нет на складе, Not Allowed,Не разрешено, Not allowed to create accounting dimension for {0},Не разрешено создавать учетное измерение для {0}, Not permitted. Please disable the Lab Test Template,"Не разрешено Пожалуйста, отключите шаблон лабораторного теста", -Note,Заметки, +Note,Заметка, Notes: ,Заметки: , -On Converting Opportunity,О возможности конвертации, -On Purchase Order Submission,При подаче заказа на поставку, -On Sales Order Submission,На подаче заказа клиента, -On Task Completion,По завершении задачи, +On Converting Opportunity,Конвертацию возможности, +On Purchase Order Submission,Офомление заказа на закупку, +On Sales Order Submission,Оформление заказа на продажу, +On Task Completion,Завершении задачи, On {0} Creation,На {0} создании, +On Item Creation,Создание продукта, +On Lead Creation,Создание лида, +On Supplier Creation,Создание поставщика, +On Customer Creation,Создание клиента, Only .csv and .xlsx files are supported currently,В настоящее время поддерживаются только файлы .csv и .xlsx, -Only expired allocation can be cancelled,Только истекшее распределение может быть отменено, +Only expired allocation can be cancelled,Отменить можно только просроченное распределение, Only users with the {0} role can create backdated leave applications,Только пользователи с ролью {0} могут создавать оставленные приложения с задним сроком действия, Open,Открыт, Open Contact,Открытый контакт, -Open Lead,Открытое обращение, -Opening and Closing,Открытие и Закрытие, +Open Lead,Открытый лид, +Opening and Closing,Открытие и закрытие, Operating Cost as per Work Order / BOM,Эксплуатационные расходы согласно заказу на работу / спецификации, Order Amount,Сумма заказа, Page {0} of {1},Страница {0} из {1}, @@ -3899,7 +3901,7 @@ Penalty Amount,Сумма штрафа, Pending,В ожидании, Performance,Производительность, Period based On,Период на основе, -Perpetual inventory required for the company {0} to view this report.,"Постоянная инвентаризация требуется для компании {0}, чтобы просмотреть этот отчет.", +Perpetual inventory required for the company {0} to view this report.,"Чтобы посмотреть этот отчет, требуется постоянная инвентаризация для комнаии {0}", Phone,Телефон, Pick List,Список выбора, Plaid authentication error,Ошибка аутентификации пледа, @@ -3912,15 +3914,15 @@ Please do not create more than 500 items at a time,"Пожалуйста, не Please enter Difference Account or set default Stock Adjustment Account for company {0},"Пожалуйста, введите разницу счета или установить учетную запись по умолчанию для компании {0}", Please enter GSTIN and state for the Company Address {0},"Пожалуйста, введите GSTIN и укажите адрес компании {0}", Please enter Item Code to get item taxes,"Пожалуйста, введите код товара, чтобы получить налоги", -Please enter Warehouse and Date,"Пожалуйста, введите Склад и Дата", +Please enter Warehouse and Date,"Пожалуйста, укажите склад и дату", Please enter the designation,"Пожалуйста, введите обозначение", Please login as a Marketplace User to edit this item.,"Пожалуйста, войдите как пользователь Marketplace, чтобы редактировать этот элемент.", Please login as a Marketplace User to report this item.,"Пожалуйста, войдите как пользователь Marketplace, чтобы сообщить об этом товаре.", Please select Template Type to download template,"Пожалуйста, выберите Тип шаблона, чтобы скачать шаблон", Please select Applicant Type first,"Пожалуйста, сначала выберите Тип заявителя", Please select Customer first,"Пожалуйста, сначала выберите клиента", -Please select Item Code first,"Пожалуйста, сначала выберите код товара", -Please select Loan Type for company {0},"Пожалуйста, выберите Тип кредита для компании {0}", +Please select Item Code first,"Пожалуйста, сначала выберите код продукта", +Please select Loan Type for company {0},"Пожалуйста, выберите тип кредита для компании {0}", Please select a Delivery Note,"Пожалуйста, выберите накладную", Please select a Sales Person for item: {0},"Пожалуйста, выберите продавца для позиции: {0}", Please select another payment method. Stripe does not support transactions in currency '{0}',Выберите другой способ оплаты. Полоса не поддерживает транзакции в валюте '{0}', @@ -3930,7 +3932,7 @@ Please set account heads in GST Settings for Compnay {0},"Пожалуйста, Please set an email id for the Lead {0},"Пожалуйста, установите идентификатор электронной почты для отведения {0}", Please set default UOM in Stock Settings,"Пожалуйста, установите UOM по умолчанию в настройках акций", Please set filter based on Item or Warehouse due to a large amount of entries.,"Пожалуйста, установите фильтр на основе товара или склада из-за большого количества записей.", -Please set up the Campaign Schedule in the Campaign {0},"Пожалуйста, настройте Расписание Кампании в Кампании {0}", +Please set up the Campaign Schedule in the Campaign {0},"Пожалуйста, настройте расписание кампании в настройках кампании {0}", Please set valid GSTIN No. in Company Address for company {0},"Пожалуйста, установите действительный номер GSTIN в адресе компании для компании {0}", Please set {0},"Пожалуйста, установите {0}",customer Please setup a default bank account for company {0},"Пожалуйста, настройте банковский счет по умолчанию для компании {0}", @@ -3950,12 +3952,12 @@ Provide the academic year and set the starting and ending date.,Укажите Public token is missing for this bank,Публичный токен отсутствует для этого банка, Publish,Публиковать, Publish 1 Item,Опубликовать 1 пункт, -Publish Items,Публикация товаров, -Publish More Items,Опубликовать больше предметов, -Publish Your First Items,Опубликуйте свои первые предметы, -Publish {0} Items,Опубликовать {0} товаров, -Published Items,Опубликованные предметы, -Purchase Invoice cannot be made against an existing asset {0},Счет-фактура покупки не может быть сделан против существующего актива {0}, +Publish Items,Публикация продуктов, +Publish More Items,Опубликовать больше продуктов, +Publish Your First Items,Опубликуйте свои первые продукты, +Publish {0} Items,Опубликовать {0} продуктов, +Published Items,Опубликованные продукты, +Purchase Invoice cannot be made against an existing asset {0},Счет покупки не может быть сделан против существующего актива {0}, Purchase Invoices,Счета на покупку, Purchase Orders,Заказы, Purchase Receipt doesn't have any Item for which Retain Sample is enabled.,"В квитанции о покупке нет ни одного предмета, для которого включена функция сохранения образца.", @@ -3995,25 +3997,25 @@ Review,Обзор, Room,Комната, Room Type,Тип комнаты, Row # ,Строка # , -Row #{0}: Accepted Warehouse and Supplier Warehouse cannot be same,Строка # {0}: принятый склад и склад поставщика не могут быть одинаковыми, -Row #{0}: Cannot delete item {1} which has already been billed.,"Строка # {0}: невозможно удалить элемент {1}, для которого уже выставлен счет.", -Row #{0}: Cannot delete item {1} which has already been delivered,"Строка # {0}: невозможно удалить элемент {1}, который уже был доставлен", -Row #{0}: Cannot delete item {1} which has already been received,"Строка # {0}: невозможно удалить элемент {1}, который уже был получен", -Row #{0}: Cannot delete item {1} which has work order assigned to it.,"Строка # {0}: невозможно удалить элемент {1}, которому назначено рабочее задание.", -Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order.,"Строка # {0}: невозможно удалить элемент {1}, который назначен заказу клиента на покупку.", -Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor,Строка № {0}: невозможно выбрать склад поставщика при подаче сырья субподрядчику, -Row #{0}: Cost Center {1} does not belong to company {2},Строка # {0}: МВЗ {1} не принадлежит компании {2}, -Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Строка # {0}: операция {1} не завершена для {2} количества готовой продукции в рабочем задании {3}. Пожалуйста, обновите статус операции с помощью Job Card {4}.", -Row #{0}: Payment document is required to complete the transaction,Строка # {0}: для завершения транзакции требуется платежный документ, -Row #{0}: Serial No {1} does not belong to Batch {2},Строка # {0}: серийный номер {1} не принадлежит партии {2}, -Row #{0}: Service End Date cannot be before Invoice Posting Date,Строка # {0}: дата окончания обслуживания не может быть раньше даты проводки счета, -Row #{0}: Service Start Date cannot be greater than Service End Date,Строка # {0}: дата начала обслуживания не может быть больше даты окончания обслуживания, -Row #{0}: Service Start and End Date is required for deferred accounting,Строка # {0}: дата начала и окончания обслуживания требуется для отложенного учета, +Row #{0}: Accepted Warehouse and Supplier Warehouse cannot be same,Строка #{0}: склад для получения и склад поставщика не могут быть одинаковыми, +Row #{0}: Cannot delete item {1} which has already been billed.,"Строка #{0}: невозможно удалить продукт {1}, для которого уже выставлен счет.", +Row #{0}: Cannot delete item {1} which has already been delivered,"Строка #{0}: невозможно удалить продукт {1}, который уже был доставлен", +Row #{0}: Cannot delete item {1} which has already been received,"Строка #{0}: невозможно удалить продукт {1}, который уже был получен", +Row #{0}: Cannot delete item {1} which has work order assigned to it.,"Строка #{0}: невозможно удалить продукт {1}, которому назначено рабочее задание.", +Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order.,"Строка #{0}: невозможно удалить продукт {1}, который есть в заказе клиента на покупку.", +Row #{0}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor,Строка #{0}: невозможно выбрать склад поставщика при подаче сырья субподрядчику, +Row #{0}: Cost Center {1} does not belong to company {2},Строка #{0}: МВЗ {1} не принадлежит компании {2}, +Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}.,"Строка #{0}: операция {1} не завершена для {2} количества готовой продукции в рабочем задании {3}. Пожалуйста, обновите статус операции с помощью Карточки работ {4}.", +Row #{0}: Payment document is required to complete the transaction,Строка #{0}: для завершения транзакции требуется платежный документ, +Row #{0}: Serial No {1} does not belong to Batch {2},Строка #{0}: серийный номер {1} не принадлежит партии {2}, +Row #{0}: Service End Date cannot be before Invoice Posting Date,Строка #{0}: дата окончания обслуживания не может быть раньше даты проводки счета, +Row #{0}: Service Start Date cannot be greater than Service End Date,Строка #{0}: дата начала обслуживания не может быть больше даты окончания обслуживания, +Row #{0}: Service Start and End Date is required for deferred accounting,Строка #{0}: дата начала и окончания обслуживания требуется для отложенного учета, Row {0}: Invalid Item Tax Template for item {1},Строка {0}: неверный шаблон налога на товар для товара {1}, Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3}),Строка {0}: количество недоступно для {4} на складе {1} во время проводки записи ({2} {3}), Row {0}: user has not applied the rule {1} on the item {2},Строка {0}: пользователь не применил правило {1} к элементу {2}, Row {0}:Sibling Date of Birth cannot be greater than today.,"Строка {0}: дата рождения родного брата не может быть больше, чем сегодня.", -Row({0}): {1} is already discounted in {2},Строка ({0}): {1} уже дисконтирован в {2}, +Row({0}): {1} is already discounted in {2},Строка({0}): {1} уже дисконтирован в {2}, Rows Added in {0},Строки добавлены в {0}, Rows Removed in {0},Строки удалены в {0}, Sanctioned Amount limit crossed for {0} {1},Предел санкционированной суммы для {0} {1}, @@ -4044,7 +4046,7 @@ Server Error,Ошибка сервера, Service Level Agreement has been changed to {0}.,Соглашение об уровне обслуживания изменено на {0}., Service Level Agreement was reset.,Соглашение об уровне обслуживания было сброшено., Service Level Agreement with Entity Type {0} and Entity {1} already exists.,Соглашение об уровне обслуживания с типом объекта {0} и объектом {1} уже существует., -Set,Задать, +Set,Комплект, Set Meta Tags,Установить метатеги, Set {0} in company {1},Установить {0} в компании {1}, Setup,Настройки, @@ -4057,7 +4059,7 @@ Show Stock Ageing Data,Показать данные о старении зап Show Warehouse-wise Stock,Показать складской запас, Size,Размер, Something went wrong while evaluating the quiz.,Что-то пошло не так при оценке теста., -Sr,Sr, +Sr,№, Start,Начать, Start Date cannot be before the current date,Дата начала не может быть раньше текущей даты, Start Time,Время начала, @@ -4070,7 +4072,7 @@ Stock Value ({0}) and Account Balance ({1}) are out of sync for account {2} and Stores - {0},Магазины - {0}, Student with email {0} does not exist,Студент с электронной почтой {0} не существует, Submit Review,Добавить отзыв, -Submitted,Проведенный, +Submitted,Утвержден, Supplier Addresses And Contacts,Адреса и контакты поставщика, Synchronize this account,Синхронизировать этот аккаунт, Tag,Тег, @@ -4111,7 +4113,7 @@ Total Early Exits,Всего ранних выходов, Total Late Entries,Всего поздних заявок, Total Payment Request amount cannot be greater than {0} amount,Общая сумма запроса платежа не может превышать сумму {0}, Total payments amount can't be greater than {},Общая сумма платежей не может быть больше {}, -Totals,Всего:, +Totals,Всего, Training Event:,Учебное мероприятие:, Transactions already retreived from the statement,Транзакции уже получены из заявления, Transfer Material to Supplier,Перевести Материал Поставщику, @@ -4125,7 +4127,7 @@ Unknown Caller,Неизвестный абонент, Unlink external integrations,Отключить внешние интеграции, Unmarked Attendance for days,Посещаемость без опознавательных знаков в течение нескольких дней, Unpublish Item,Отменить публикацию, -Unreconciled,несверенный, +Unreconciled,Несверенный, Unsupported GST Category for E-Way Bill JSON generation,Неподдерживаемая категория НДС для генерации E-Way Bill JSON, Update,Обновить, Update Details,Обновить данные, @@ -4217,14 +4219,14 @@ Mode Of Payment,Способ оплаты, No students Found,Студенты не найдены, Not in Stock,Нет в наличии, Please select a Customer,Выберите клиента, -Printed On,Отпечатано на, +Printed On,Напечатано на, Received From,Получено от, Sales Person,Продавец, To date cannot be before From date,На сегодняшний день не может быть раньше От даты, Write Off,Списать, {0} Created,{0} Создано, Email Id,Email ID, -No,№, +No,Нет, Reference Doctype,Ссылка DocType, User Id,ID пользователя, Yes,Да, @@ -4233,7 +4235,7 @@ Add to cart,Добавить в корзину, Budget,Бюджет, Chart of Accounts,План счетов, Customer database.,База данных клиентов., -Days Since Last order,Дни с последнего Заказать, +Days Since Last order,Дней с момента последнего заказа, Download as JSON,Скачать как JSON, End date can not be less than start date,"Дата окончания не может быть меньше, чем Дата начала", For Default Supplier (Optional),Поставщик по умолчанию (необязательно), @@ -4250,8 +4252,8 @@ No employee found,Сотрудник не найден, No students found,Нет студентов не найдено, Not in stock,Нет в наличии, Not permitted,Не разрешено, -Open Issues ,Открыть вопросы, -Open Projects ,Открыть проекты, +Open Issues ,Открытые вопросы , +Open Projects ,Открытые проекты , Open To Do ,Открыть список задач , Operation Id,Код операции, Partially ordered,Частично заказанно, @@ -4283,13 +4285,13 @@ Please set {0},"Пожалуйста, установите {0}",supplier Draft,Черновой вариант,"docstatus,=,0" Cancelled,Отменен,"docstatus,=,2" Please setup Instructor Naming System in Education > Education Settings,"Пожалуйста, настройте систему именования инструкторов в «Образование»", -Please set Naming Series for {0} via Setup > Settings > Naming Series,"Пожалуйста, установите серию имен для {0} через Настройка> Настройки> Серия имен", +Please set Naming Series for {0} via Setup > Settings > Naming Series,"Пожалуйста, установите серию имен для {0} через Настройка > Настройки > Серия имен", UOM Conversion factor ({0} -> {1}) not found for item: {2},Коэффициент преобразования UOM ({0} -> {1}) не найден для элемента: {2}, -Item Code > Item Group > Brand,Код товара> Группа товаров> Марка, -Customer > Customer Group > Territory,Клиент> Группа клиентов> Территория, -Supplier > Supplier Type,Поставщик> Тип поставщика, -Please setup Employee Naming System in Human Resource > HR Settings,"Пожалуйста, настройте систему имен сотрудников в разделе «Управление персоналом»> «Настройки HR»", -Please setup numbering series for Attendance via Setup > Numbering Series,Настройте серию нумерации для Посещаемости через Настройка> Серия нумерации, +Item Code > Item Group > Brand,Код товара > Группа товаров > Бренд, +Customer > Customer Group > Territory,Клиент > Группа клиентов > Территория, +Supplier > Supplier Type,Поставщик > Тип поставщика, +Please setup Employee Naming System in Human Resource > HR Settings,"Пожалуйста, настройте систему имен сотрудников в разделе Управление персоналом > Настройки HR", +Please setup numbering series for Attendance via Setup > Numbering Series,Настройте серию нумерации для Посещаемости через Настройка > Серия нумерации, The value of {0} differs between Items {1} and {2},Значение {0} различается между элементами {1} и {2}., Auto Fetch,Автозагрузка, Fetch Serial Numbers based on FIFO,Получение серийных номеров на основе FIFO, @@ -4302,9 +4304,9 @@ Row {}: Asset Naming Series is mandatory for the auto creation for item {},Ст Assets not created for {0}. You will have to create asset manually.,Активы не созданы для {0}. Вам придется создать актив вручную., {0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}.,{0} {1} имеет бухгалтерские записи в валюте {2} для компании {3}. Выберите счет дебиторской или кредиторской задолженности с валютой {2}., Invalid Account,Неверный аккаунт, -Purchase Order Required,"Покупка порядке, предусмотренном", -Purchase Receipt Required,Покупка Получение необходимое, -Account Missing,Аккаунт отсутствует, +Purchase Order Required,Требуется заказ на покупку, +Purchase Receipt Required,Требуется чек о покупке, +Account Missing,Счет отсутствует, Requested,Запрошено, Partially Paid,Частично оплачено, Invalid Account Currency,Неверная валюта счета, @@ -4338,7 +4340,7 @@ Error! Failed to get request token.,Ошибка! Не удалось получ Invalid {0} or {1},Недействительный {0} или {1}, Error! Failed to get access token.,Ошибка! Не удалось получить токен доступа., Invalid Consumer Key or Consumer Secret Key,Недействительный ключ потребителя или секретный ключ потребителя, -Your Session will be expire in ,Ваша сессия истечет через, +Your Session will be expire in ,Ваша сессия истечет через , days.,дней., Session is expired. Save doc to login.,Сессия истекла. Сохраните документ для входа в систему., Error While Uploading Image,Ошибка при загрузке изображения, @@ -4347,15 +4349,15 @@ Valid Upto date cannot be before Valid From date,Дата начала дейс Valid From date not in Fiscal Year {0},Дата начала действия не в финансовом году {0}, Valid Upto date not in Fiscal Year {0},Действительно до даты не в финансовом году {0}, Group Roll No,Групповой опрос №, -Maintain Same Rate Throughout Sales Cycle,Поддержание же скоростью протяжении цикла продаж, +Maintain Same Rate Throughout Sales Cycle,Поддержание одинаковой ставки на протяжении всего цикла продаж, "Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}.","Строка {1}: количество ({0}) не может быть дробью. Чтобы разрешить это, отключите '{2}' в единицах измерения {3}.", Must be Whole Number,Должно быть целое число, Please setup Razorpay Plan ID,Настройте идентификатор плана Razorpay, Contact Creation Failed,Не удалось создать контакт, {0} already exists for employee {1} and period {2},{0} уже существует для сотрудника {1} и периода {2}, -Leaves Allocated,Распределенные листья, -Leaves Expired,Листья просрочены, -Leave Without Pay does not match with approved {} records,"Leave Without Pay" не совпадает с утвержденными записями: {}, +Leaves Allocated,Распределенные отпуска, +Leaves Expired,Отпуска просрочены, +Leave Without Pay does not match with approved {} records,Leave Without Pay не совпадает с утвержденными записями: {}, Income Tax Slab not set in Salary Structure Assignment: {0},Плита подоходного налога не указана в назначении структуры заработной платы: {0}, Income Tax Slab: {0} is disabled,Плита подоходного налога: {0} отключена, Income Tax Slab must be effective on or before Payroll Period Start Date: {0},Таблица подоходного налога должна вступить в силу не позднее даты начала периода расчета зарплаты: {0}, @@ -4364,16 +4366,16 @@ Row {0}: {1} is required in the expenses table to book an expense claim.,Стр Set the default account for the {0} {1},Установите учетную запись по умолчанию для {0} {1}, (Half Day),(Полдня), Income Tax Slab,Подоходный налог, -Row #{0}: Cannot set amount or formula for Salary Component {1} with Variable Based On Taxable Salary,Строка № {0}: невозможно установить сумму или формулу для компонента заработной платы {1} с переменной на основе налогооблагаемой заработной платы., -Row #{}: {} of {} should be {}. Please modify the account or select a different account.,Строка № {}: {} из {} должно быть {}. Измените учетную запись или выберите другую учетную запись., -Row #{}: Please asign task to a member.,Строка № {}: назначьте задачу участнику., +Row #{0}: Cannot set amount or formula for Salary Component {1} with Variable Based On Taxable Salary,Строка #{0}: невозможно установить сумму или формулу для компонента заработной платы {1} с переменной на основе налогооблагаемой заработной платы., +Row #{}: {} of {} should be {}. Please modify the account or select a different account.,Строка #{}: {} из {} должно быть {}. Измените учетную запись или выберите другую учетную запись., +Row #{}: Please asign task to a member.,Строка #{}: назначьте задачу участнику., Process Failed,Ошибка процесса, Tally Migration Error,Ошибка миграции Tally, Please set Warehouse in Woocommerce Settings,"Пожалуйста, установите склад в настройках Woocommerce", Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same,Строка {0}: Delivery Warehouse ({1}) и Customer Warehouse ({2}) не могут совпадать., Row {0}: Due Date in the Payment Terms table cannot be before Posting Date,Строка {0}: Дата платежа в таблице условий оплаты не может быть раньше даты публикации., Cannot find {} for item {}. Please set the same in Item Master or Stock Settings.,Не удается найти {} для элемента {}. Установите то же самое в Мастер предметов или Настройки запасов., -Row #{0}: The batch {1} has already expired.,Строка № {0}: срок действия пакета {1} уже истек., +Row #{0}: The batch {1} has already expired.,Строка №{0}: срок действия пакета {1} уже истек., Start Year and End Year are mandatory,Год начала и год окончания являются обязательными, GL Entry,БК запись, Cannot allocate more than {0} against payment term {1},Невозможно выделить более {0} на срок платежа {1}, @@ -4511,7 +4513,7 @@ Mandatory For Profit and Loss Account,Обязательно для счета Accounting Period,Период учета, Period Name,Название периода, Closed Documents,Закрытые документы, -Accounts Settings,Настройки аккаунта, +Accounts Settings,Настройка счетов, Settings for Accounts,Настройки для счетов, Make Accounting Entry For Every Stock Movement,Создавать бухгалтерские проводки при каждом перемещении запасов, Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,"Пользователи с этой ролью могут замороживать счета, а также создавать / изменять бухгалтерские проводки замороженных счетов", @@ -4520,14 +4522,14 @@ Over Billing Allowance (%),Превышение надбавки (%), Credit Controller,Кредитная контроллер, Check Supplier Invoice Number Uniqueness,Проверять уникальность номеров счетов получаемых от поставщика, Make Payment via Journal Entry,Произвести оплату через журнальную запись, -Unlink Payment on Cancellation of Invoice,Unlink Оплата об аннулировании счета-фактуры, +Unlink Payment on Cancellation of Invoice,Отменить привязку платежа при аннулировании счета, Book Asset Depreciation Entry Automatically,Автоматическое внесение амортизации в книгу, Automatically Add Taxes and Charges from Item Tax Template,Автоматически добавлять налоги и сборы из шаблона налога на товар, Automatically Fetch Payment Terms,Автоматически получать условия оплаты, Show Payment Schedule in Print,Показать график платежей в печати, Currency Exchange Settings,Настройки обмена валюты, Allow Stale Exchange Rates,Разрешить статичные обменные курсы, -Stale Days,Прошлые дни, +Stale Days,Прошедшие дни, Report Settings,Настройки отчета, Use Custom Cash Flow Format,Использовать формат пользовательского денежного потока, Allowed To Transact With,Разрешено спрятать, @@ -4575,8 +4577,8 @@ Get Payment Entries,Получить Записи оплаты, Payment Entries,Записи оплаты, Update Clearance Date,Обновление просвет Дата, Bank Reconciliation Detail,Подробности банковской сверки, -Cheque Number,Чек Количество, -Cheque Date,Чек Дата, +Cheque Number,Номер чека, +Cheque Date,Дата чека, Statement Header Mapping,Сопоставление заголовков операторов, Statement Headers,Заголовки операторов, Transaction Data Mapping,Сопоставление данных транзакций, @@ -4587,16 +4589,16 @@ Bank Header,Заголовок банка, Bank Statement Transaction Entry,Ввод транзакции с банковским выпиской, Bank Transaction Entries,Записи банковских транзакций, New Transactions,Новые транзакции, -Match Transaction to Invoices,Сопоставление транзакций с счетами-фактурами, +Match Transaction to Invoices,Сопоставление транзакций со счетами, Create New Payment/Journal Entry,Создать новую запись о платеже / журнале, Submit/Reconcile Payments,Утвердить/Согласовать платежи, -Matching Invoices,Сопоставление счетов-фактур, +Matching Invoices,Сопоставление счетов, Payment Invoice Items,Платежные счета, Reconciled Transactions,Согласованные транзакции, Bank Statement Transaction Invoice Item,Элемент счета транзакции банковского выписки, Payment Description,Описание платежа, Invoice Date,Дата счета, -invoice,счет-фактура, +invoice,счет, Bank Statement Transaction Payment Item,Элемент оплаты транзакции по банковскому счету, outstanding_amount,outstanding_amount, Payment Reference,Ссылка на платеж, @@ -4607,7 +4609,7 @@ Mapped Data,Отображаемые данные, Bank Transaction,Банковская операция, ACC-BTN-.YYYY.-,ACC-BTN-.YYYY.-, Transaction ID,ID транзакции, -Unallocated Amount,Нераспределенные Сумма, +Unallocated Amount,Нераспределенная сумма, Field in Bank Transaction,Поле в банковской операции, Column in Bank File,Столбец в банковском файле, Bank Transaction Payments,Платежи по банковским операциям, @@ -4626,16 +4628,11 @@ Action if Accumulated Monthly Budget Exceeded on Actual,"Действие, ес Budget Accounts,Счета бюджета, Budget Account,Бюджет аккаунта, Budget Amount,Сумма бюджета, -C-Form,C-образный, -ACC-CF-.YYYY.-,ACC-CF-.YYYY.-, -C-Form No,C-образный Нет, +C-Form,C-Форма, +C-Form No,C-Форма №, Received Date,Дата получения, Quarter,Квартал, -I,I, -II,II, -III,III, -IV,IV, -C-Form Invoice Detail,C-образный Счет Подробно, +C-Form Invoice Detail,C-Форма детали счета, Invoice No,Номер cчета, Cash Flow Mapper,Диспетчер денежных потоков, Section Name,Название раздела, @@ -4644,7 +4641,7 @@ Section Leader,Руководитель раздела, e.g Adjustments for:,"например, корректировки для:", Section Subtotal,Раздел Итого, Section Footer,Нижний колонтитул, -Position,Должность, +Position,Позиция, Cash Flow Mapping,Отображение денежных потоков, Select Maximum Of 1,Выберите Максимум 1, Is Finance Cost,Стоимость финансирования, @@ -4656,11 +4653,10 @@ Cash Flow Mapping Accounts,Счета денежных потоков, account,счет, Cash Flow Mapping Template,Шаблон сопоставления денежных потоков, Cash Flow Mapping Template Details,Подробное описание шаблонов движения денежных средств, -POS-CLO-,POS-CLO-, Custody,Опека, Net Amount,Чистая сумма, Cashier Closing Payments,Кассовые платежи, -Chart of Accounts Importer,План счетов импортера, +Chart of Accounts Importer,Импорт плана счетов, Import Chart of Accounts from a csv file,Импортировать план счетов из CSV-файла, Attach custom Chart of Accounts file,Прикрепить пользовательский файл плана счетов, Chart Preview,Предварительный просмотр диаграммы, @@ -4668,12 +4664,12 @@ Chart Tree,Дерево Диаграммы, Cheque Print Template,Чеками печати шаблона, Has Print Format,Имеет формат печати, Primary Settings,Основные настройки, -Cheque Size,Cheque Размер, +Cheque Size,Размер чека, Regular,Обычный, Starting position from top edge,Исходное положение от верхнего края, -Cheque Width,Cheque Ширина, -Cheque Height,Cheque Высота, -Scanned Cheque,Сканированные чеками, +Cheque Width,Ширина чека, +Cheque Height,Высота чека, +Scanned Cheque,Отсканированный чек, Is Account Payable,Является ли кредиторская задолженность, Distance from top edge,Расстояние от верхнего края, Distance from left edge,Расстояние от левого края, @@ -4693,9 +4689,9 @@ lft,лев, rgt,прав, Coupon Code,Код купона, Coupon Name,Название купона, -"e.g. ""Summer Holiday 2019 Offer 20""","например, "Летние каникулы 2019 Предложение 20"", +"e.g. ""Summer Holiday 2019 Offer 20""","например, ""Летние каникулы 2019 Предложение 20""", Coupon Type,Тип купона, -Promotional,рекламный, +Promotional,Рекламный, Gift Card,Подарочная карта, unique e.g. SAVE20 To be used to get discount,"уникальный, например, SAVE20 для получения скидки", Validity and Usage,Срок действия и использование, @@ -4737,7 +4733,7 @@ GST Account,НДС счет, CGST Account,CGST счет, SGST Account,SGST счет, IGST Account,IGST счет, -CESS Account,CESS-аккаунт, +CESS Account,CESS-счет, Loan Start Date,Дата начала займа, Loan Period (Days),Срок кредитования (дни), Loan End Date,Дата окончания займа, @@ -4751,7 +4747,7 @@ Item Tax Template,Шаблон налога, Tax Rates,Налоговые ставки, Item Tax Template Detail,Деталь шаблона налога детали, Entry Type,Тип записи, -Inter Company Journal Entry,Вход в журнал Inter Company, +Inter Company Journal Entry,Запись в журнале внутренней компании, Bank Entry,Банковская запись, Cash Entry,Денежные запись, Credit Card Entry,Вступление Кредитная карта, @@ -4759,8 +4755,7 @@ Contra Entry,Contra запись, Excise Entry,Акцизный запись, Write Off Entry,Списание запись, Opening Entry,Начальная запись, -ACC-JV-.YYYY.-,ACC-JV-.YYYY.-, -Accounting Entries,Бухгалтерские Проводки, +Accounting Entries,Бухгалтерские проводки, Total Debit,Общий дебет, Total Credit,Общий кредит, Difference (Dr - Cr),Разница (Деб - Кред), @@ -4769,15 +4764,15 @@ Total Amount Currency,Общая сумма валюты, Total Amount in Words,Общая сумма в словах, Remark,Примечание, Paid Loan,Платный кредит, -Inter Company Journal Entry Reference,Ссылка на журнал Inter Company Journal, +Inter Company Journal Entry Reference,Ссылка на журнал внутренней компании, Write Off Based On,Списание на основе, -Get Outstanding Invoices,Получить неоплаченных счетов-фактур, +Get Outstanding Invoices,Получить неоплаченные счетов, Write Off Amount,Сумма списания, Printing Settings,Настройки печати, Pay To / Recd From,Оплачено кем/получено от, Payment Order,Платежное поручение, -Subscription Section,Раздел подписки, -Journal Entry Account,Запись в журнале аккаунт, +Subscription Section,Раздел подписи, +Journal Entry Account,Запись в журнале счета, Account Balance,Остаток на счете, Party Balance,Баланс партия, Accounting Dimensions,Параметры учета, @@ -4790,10 +4785,10 @@ Employee Advance,Продвижение сотрудников, Reference Due Date,Справочная дата, Loyalty Program Tier,Уровень программы лояльности, Redeem Against,Погасить Против, -Expiry Date,Срок годности:, -Loyalty Point Entry Redemption,Возврат к лояльности, +Expiry Date,Срок действия, +Loyalty Point Entry Redemption,Активация баллов лояльности, Redemption Date,Дата погашения, -Redeemed Points,Погашенные очки, +Redeemed Points,Погашенные баллы, Loyalty Program Name,Название программы лояльности, Loyalty Program Type,Тип программы лояльности, Single Tier Program,Программа для одного уровня, @@ -4802,17 +4797,17 @@ Customer Territory,Территория клиента, Auto Opt In (For all customers),Auto Opt In (для всех клиентов), Collection Tier,Уровень сбора, Collection Rules,Правила сбора, -Redemption,Выкуп, +Redemption,Выплата, Conversion Factor,Коэффициент конверсии, -1 Loyalty Points = How much base currency?,1 Бонусные баллы = Сколько базовой валюты?, +1 Loyalty Points = How much base currency?,1 балл лояльности = Сколько базовой валюты?, Expiry Duration (in days),Продолжительность действия (в днях), Help Section,Раздел справки, Loyalty Program Help,Помощь в программе лояльности, Loyalty Program Collection,Коллекция программы лояльности, Tier Name,Название уровня, Minimum Total Spent,Минимальные общие затраты, -Collection Factor (=1 LP),Коэффициент сбора (= 1 Балл), -For how much spent = 1 Loyalty Point,За сколько потраченных = 1 Балл лояльности, +Collection Factor (=1 LP),Коэффициент сбора (=1 БЛ), +For how much spent = 1 Loyalty Point,За сколько потрачено = 1 Балл лояльности, Mode of Payment Account,Форма оплаты счета, Default Account,По умолчанию учетная запись, Default account will be automatically updated in POS Invoice when this mode is selected.,"Учетная запись по умолчанию будет автоматически обновляться в POS-счете, если выбран этот режим.", @@ -4824,11 +4819,10 @@ Monthly Distribution Percentage,Ежемесячный Процентное ра Percentage Allocation,Процент Распределение, Create Missing Party,Создать отсутствующую партию, Create missing customer or supplier.,Создайте отсутствующего клиента или поставщика., -Opening Invoice Creation Tool Item,Открытие инструмента для создания счета-фактуры, +Opening Invoice Creation Tool Item,Открытие инструмента для создания счета, Temporary Opening Account,Временный вступительный счет, Party Account,Партия аккаунт, Type of Payment,Тип платежа, -ACC-PAY-.YYYY.-,ACC-PAY-.YYYY.-, Receive,Получать, Internal Transfer,Внутренний трансфер, Payment Order Status,Статус платежного поручения, @@ -4840,14 +4834,14 @@ Account Paid From,Счет Оплачено из, Account Paid To,Счет оплачены до, Paid Amount (Company Currency),Оплаченная сумма (в валюте компании), Received Amount,Полученная сумма, -Received Amount (Company Currency),Полученная сумма (валюта компании), +Received Amount (Company Currency),Полученная сумма (в валюте компании), Get Outstanding Invoice,Получить выдающийся счет, Payment References,Ссылки оплаты, Writeoff,Списать, -Total Allocated Amount,Общая сумма Обозначенная, -Total Allocated Amount (Company Currency),Общая Выделенная сумма (валюта компании), +Total Allocated Amount,Общая выделенная сумма, +Total Allocated Amount (Company Currency),Общая выделенная сумма (в валюте компании), Set Exchange Gain / Loss,Установить Курсовая прибыль / убыток, -Difference Amount (Company Currency),Разница Сумма (валюта компании), +Difference Amount (Company Currency),Разница (в валюте компании), Write Off Difference Amount,Списание разница в, Deductions or Loss,Отчисления или убыток, Payment Deductions or Loss,Отчисления оплаты или убыток, @@ -4858,7 +4852,6 @@ Allocated,Выделенные, Payment Gateway Account,Аккаунт платежного шлюза, Payment Account,Счёт оплаты, Default Payment Request Message,Сообщение запроса платежа по умолчанию, -PMO-,PMO-, Payment Order Type,Тип платежного поручения, Payment Order Reference,Ссылка на платежное поручение, Bank Account Details,Детали банковского счета, @@ -4866,13 +4859,13 @@ Payment Reconciliation,Оплата Примирение, Receivable / Payable Account,Счет Дебиторской / Кредиторской задолженности, Bank / Cash Account,Банк / Расчетный счет, From Invoice Date,От Дата Счета, -To Invoice Date,Счета-фактуры Дата, +To Invoice Date,К дате выставления счета, Minimum Invoice Amount,Минимальная сумма счета, Maximum Invoice Amount,Максимальная сумма счета, System will fetch all the entries if limit value is zero.,"Система извлечет все записи, если предельное значение равно нулю.", Get Unreconciled Entries,Получить несверенные записи, Unreconciled Payment Details,Несогласованные Детали компенсации, -Invoice/Journal Entry Details,Счет / Журнал вступления подробнее, +Invoice/Journal Entry Details,Подробности Счет / Журнал запись, Payment Reconciliation Invoice,Оплата Примирение Счет, Invoice Number,Номер cчета, Payment Reconciliation Payment,Сверка платежей об оплате, @@ -4881,7 +4874,6 @@ Allocated amount,Выделенная сумма, Payment Request Type,Тип платежного запроса, Outward,Внешний, Inward,Внутренний, -ACC-PRQ-.YYYY.-,ACC-PRQ-.YYYY.-, Transaction Details,Детали транзакции, Amount in customer's currency,Сумма в валюте клиента, Is a Subscription,Является подпиской, @@ -4899,8 +4891,8 @@ Payment Amount,Сумма платежа, Payment Term Name,Название условия платежа, Due Date Based On,Дата составления финансовой отчетности, Day(s) after invoice date,День (ы) после даты выставления счета, -Day(s) after the end of the invoice month,День (ы) после окончания месяца счета-фактуры, -Month(s) after the end of the invoice month,Месяц (ы) после окончания месяца счета-фактуры, +Day(s) after the end of the invoice month,День (дни) после окончания месяца выставления счета, +Month(s) after the end of the invoice month,Месяц(а) после окончания месяца выставления счета, Credit Days,Кредитных дней, Credit Months,Кредитные месяцы, Allocate Payment Based On Payment Terms,Распределить платеж на основе условий платежа, @@ -4916,7 +4908,7 @@ Company Address,Адрес компании, Update Stock,Обновить остатки, Ignore Pricing Rule,Игнорировать правило ценообразования, Applicable for Users,Применимо для пользователей, -Sales Invoice Payment,Накладная Оплата, +Sales Invoice Payment,Оплата счета продажи, Item Groups,Продуктовые группы, Only show Items from these Item Groups,Показывать только предметы из этих групп товаров, Customer Groups,Группы клиентов, @@ -4945,14 +4937,14 @@ Max Qty,Макс. кол-во, Min Amt,Мин Amt, Max Amt,Макс Амт, Period Settings,Настройки периода, -Margin,Разница, +Margin,Маржа, Margin Type,Тип маржа, Margin Rate or Amount,Маржинальная ставка или сумма, Price Discount Scheme,Схема скидок, Rate or Discount,Стоимость или скидка, Discount Percentage,Скидка в процентах, Discount Amount,Сумма скидки, -For Price List,Для Прейскурантом, +For Price List,Для прайс-листа, Product Discount Scheme,Схема скидок на товары, Same Item,Тот же пункт, Free Item,Бесплатный товар, @@ -4979,7 +4971,6 @@ Promotional Scheme Product Discount,Рекламная схема товара Min Amount,Мин. сумма, Max Amount,Макс. сумма, Discount Type,Тип скидки, -ACC-PINV-.YYYY.-,ACC-PINV-.YYYY.-, Tax Withholding Category,Категория удержания налогов, Edit Posting Date and Time,Изменить дату и время публикации, Is Paid,Оплачено, @@ -5002,35 +4993,35 @@ Raw Materials Supplied,Поставка сырья, Supplier Warehouse,Склад поставщика, Pricing Rules,Правила ценообразования, Supplied Items,Поставляемые продукты, -Total (Company Currency),Всего (валюта компании), -Net Total (Company Currency),Чистая Всего (валюта компании), +Total (Company Currency),Всего (в валюте компании), +Net Total (Company Currency),Чистая Всего (в валюте компании), Total Net Weight,Общий вес нетто, Shipping Rule,Правило доставки, Purchase Taxes and Charges Template,Купить налоги и сборы шаблон, Purchase Taxes and Charges,Покупка Налоги и сборы, Tax Breakup,Распределение налогов, Taxes and Charges Calculation,Налоги и сборы Расчет, -Taxes and Charges Added (Company Currency),Налоги и сборы Добавил (валюта компании), -Taxes and Charges Deducted (Company Currency),"Налоги, которые вычитаются (валюта компании)", -Total Taxes and Charges (Company Currency),Всего Налоги и сборы (валюта компании), +Taxes and Charges Added (Company Currency),Добавленные налоги и сборы (в валюте компании), +Taxes and Charges Deducted (Company Currency),"Налоги, которые вычитаются (в валюте компании)", +Total Taxes and Charges (Company Currency),Всего налогов и сборов (в валюте компании), Taxes and Charges Added,Налоги и сборы добавлены, Taxes and Charges Deducted,"Налоги и сборы, вычитаемые", Total Taxes and Charges,Общие налоги и сборы, Additional Discount,Дополнительная скидка, Apply Additional Discount On,Применить дополнительную скидку на, -Additional Discount Amount (Company Currency),Сумма дополнительных скидок (валюта компании), +Additional Discount Amount (Company Currency),Сумма дополнительных скидок (в валюте компании), Additional Discount Percentage,Дополнительная скидка в процентах, Additional Discount Amount,Сумма дополнительной скидки, -Grand Total (Company Currency),Общий итог (валюта компании), -Rounding Adjustment (Company Currency),Коррекция округления (валюта компании), -Rounded Total (Company Currency),Округлые Всего (валюта компании), -In Words (Company Currency),Словами (валюта компании), +Grand Total (Company Currency),Общий итог (в валюте компании), +Rounding Adjustment (Company Currency),Коррекция округления (в валюте компании), +Rounded Total (Company Currency),Всего округленно (в валюте компании), +In Words (Company Currency),Словами (в валюте компании), Rounding Adjustment,Коррекция округления, In Words,Прописью, Total Advance,Общий аванс, Disable Rounded Total,Отключение закругленными Итого, Cash/Bank Account,Наличные / Банковский счет, -Write Off Amount (Company Currency),Сумма списаний (валюта компании), +Write Off Amount (Company Currency),Сумма списаний (в валюте компании), Set Advances and Allocate (FIFO),Установите авансы и распределите (FIFO), Get Advances Paid,Получить авансы выданные, Advances,Авансы, @@ -5044,8 +5035,8 @@ Party Account Currency,Партия Валюта счета, Against Expense Account,Со счета расходов, Inter Company Invoice Reference,Справочная информация для Inter Company, Is Internal Supplier,Внутренний поставщик, -Start date of current invoice's period,Дату периода текущего счета-фактуры начнем, -End date of current invoice's period,Дата и время окончания периода текущего счета-фактуры в, +Start date of current invoice's period,Дата начала периода текущего счета, +End date of current invoice's period,Дата окончания периода текущего счета, Update Auto Repeat Reference,Обновить ссылку на автоматический повтор, Purchase Invoice Advance,Авансовый счет на покупку, Purchase Invoice Item,Счет на покупку продукта, @@ -5055,14 +5046,14 @@ Accepted Qty,Принятое кол-во, Rejected Qty,Отклоненое кол-во, UOM Conversion Factor,Коэффициент пересчета единицы измерения, Discount on Price List Rate (%),Скидка от прайс-листа (%), -Price List Rate (Company Currency),Прайс-лист Тариф (валюта компании), +Price List Rate (Company Currency),Прайс-лист Тариф (в валюте компании), Rate ,Цена , -Rate (Company Currency),Тариф (валюта компании), -Amount (Company Currency),Сумма (валюта компании), +Rate (Company Currency),Тариф (в валюте компании), +Amount (Company Currency),Сумма (в валюте компании), Is Free Item,Это бесплатный товар, Net Rate,Нетто-ставка, -Net Rate (Company Currency),Чистая стоимость (валюта компании), -Net Amount (Company Currency),Чистая сумма (валюта компании), +Net Rate (Company Currency),Чистая стоимость (в валюте компании), +Net Amount (Company Currency),Чистая сумма (в валюте компании), Item Tax Amount Included in Value,"Сумма налога на имущество, включенная в стоимость", Landed Cost Voucher Amount,Земельные стоимости путевки сумма, Raw Materials Supplied Cost,Стоимость поставленного сырья, @@ -5082,8 +5073,8 @@ Allow Zero Valuation Rate,Разрешить нулевую оценку, Item Tax Rate,Ставка налогов на продукт, Tax detail table fetched from item master as a string and stored in this field.\nUsed for Taxes and Charges,Налоговый Подробная таблица выбирается из мастера элемента в виде строки и хранится в этой области.\n Используется по налогам и сборам, Purchase Order Item,Заказ товара, -Purchase Receipt Detail,Деталь квитанции о покупке, -Item Weight Details,Деталь Вес Подробности, +Purchase Receipt Detail,Сведения о квитанции о покупке, +Item Weight Details,Сведения о весе товара, Weight Per Unit,Вес на единицу, Total Weight,Общий вес, Weight UOM,Вес Единица измерения, @@ -5105,7 +5096,6 @@ Item Wise Tax Detail ,Пункт Мудрые налоговые данные, "Standard tax template that can be applied to all Purchase Transactions. This template can contain list of tax heads and also other expense heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Consider Tax or Charge for: In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both.\n10. Add or Deduct: Whether you want to add or deduct the tax.","Стандартный шаблон налог, который может быть применен ко всем операциям купли-. Этот шаблон может содержать перечень налоговых руководителей, а также других расходов руководителей как ""Shipping"", ""Insurance"", ""Обращение"" и т.д. \n\n #### Примечание \n\n ставка налога на которые вы указали здесь будет стандартная ставка налога на прибыль для всех ** деталей **. Если есть ** товары **, которые имеют различные цены, они должны быть добавлены в ** деталь налога ** стол в ** деталь ** мастера.\n\n #### Описание колонок \n\n 1. Расчет Тип: \n - Это может быть ** Чистый Всего ** (то есть сумма основной суммы).\n - ** На предыдущей строке Total / сумма ** (по совокупности налогов и сборов). Если вы выбираете эту опцию, налог будет применяться в процентах от предыдущего ряда (в налоговом таблицы) суммы или объема.\n - ** ** Фактический (как уже упоминалось).\n 2. Счет Руководитель: лицевому счету, при которых этот налог будут забронированы \n 3. Центр Стоимость: Если налог / налог на заряд доход (как перевозка груза) или расходов это должен быть забронирован на МВЗ.\n 4. Описание: Описание налога (которые будут напечатаны в счетах-фактурах / кавычек).\n 5. Оценить: Налоговая ставка.\n 6. Количество: Сумма налога.\n 7. Всего: Суммарное к этой точке.\n 8. Введите Row: Если на базе ""Предыдущая сумма по строке"" вы можете выбрать номер строки которой будет приниматься в качестве основы для такого расчета (по умолчанию предыдущего ряда).\n 9. Рассмотрим налог или сбор для: В этом разделе вы можете указать, будет ли налог / налог на сбор только для оценки (не часть от общей суммы) или только для общей (не добавляет ценности объект) или для обоих.\n 10. Добавить или вычесть: Если вы хотите, чтобы добавить или вычесть налог.", Salary Component Account,Счет компонента заработной платы, Default Bank / Cash account will be automatically updated in Salary Journal Entry when this mode is selected.,"По умолчанию банк / Наличный счет будет автоматически обновляться в Зарплатный Запись в журнале, когда выбран этот режим.", -ACC-SINV-.YYYY.-,ACC-SINV-.YYYY.-, Include Payment (POS),Включая оплату (POS), Offline POS Name,Offline POS Имя, Is Return (Credit Note),Возврат (кредитная нота), @@ -5129,15 +5119,15 @@ Total Billing Amount,Общая сумма счета, Sales Taxes and Charges Template,Шаблон налогов и сборов с продаж, Sales Taxes and Charges,Налоги и сборы с продаж, Loyalty Points Redemption,Выкуп лояльности очков, -Redeem Loyalty Points,Погасить очки лояльности, +Redeem Loyalty Points,Погасить баллы лояльности, Redemption Account,Счет погашения, Redemption Cost Center,Центр выкупа, In Words will be visible once you save the Sales Invoice.,В записях будет видно как только вы сохраните счет продажи., Allocate Advances Automatically (FIFO),Автоматическое выделение авансов (FIFO), Get Advances Received,Получить авансы полученные, -Base Change Amount (Company Currency),Базовая Изменение Сумма (Компания Валюта), +Base Change Amount (Company Currency),Базовая Изменение Сумма (в валюте компании), Write Off Outstanding Amount,Списание суммы задолженности, -Terms and Conditions Details,Условия Подробности, +Terms and Conditions Details,Дополнительные условия, Is Internal Customer,Внутренний клиент, Is Discounted,Со скидкой, Unpaid and Discounted,Неоплачиваемый и со скидкой, @@ -5157,8 +5147,8 @@ Brand Name,Имя бренда, Qty as per Stock UOM,Кол-во в соответствии с ед.измерения запасов, Discount and Margin,Скидка и маржа, Rate With Margin,Оценить с маржой, -Discount (%) on Price List Rate with Margin,Скидка (%) на цену Прейскурант с маржой, -Rate With Margin (Company Currency),Ставка с маржей (валюта компании), +Discount (%) on Price List Rate with Margin,Скидка (%) на цену из прайс-листа с маржой, +Rate With Margin (Company Currency),Ставка с маржей (в валюте компании), Delivered By Supplier,Доставлено поставщиком, Deferred Revenue,Отложенный доход, Deferred Revenue Account,Отложенный счет доходов, @@ -5168,12 +5158,12 @@ Customer Warehouse (Optional),Склад Клиент (Необязательн Available Batch Qty at Warehouse,Доступное кол-во пакетов на складе, Available Qty at Warehouse,Доступное кол-во на складе, Delivery Note Item,Доставляемый продукт, -Base Amount (Company Currency),Базовая сумма (валюта компании), +Base Amount (Company Currency),Базовая сумма (в валюте компании), Sales Invoice Timesheet,Счет по табелю, Time Sheet,Табель учета рабочего времени, Billing Hours,Оплачеваемые часы, Timesheet Detail,Сведения о расписании, -Tax Amount After Discount Amount (Company Currency),Сумма налога после скидки Сумма (Компания валют), +Tax Amount After Discount Amount (Company Currency),Сумма налога после суммы скидки (в валюте компании), Item Wise Tax Detail,Подробная информация о налоге на товар, Parenttype,ParentType, "Standard tax template that can be applied to all Sales Transactions. This template can contain list of tax heads and also other expense / income heads like ""Shipping"", ""Insurance"", ""Handling"" etc.\n\n#### Note\n\nThe tax rate you define here will be the standard tax rate for all **Items**. If there are **Items** that have different rates, they must be added in the **Item Tax** table in the **Item** master.\n\n#### Description of Columns\n\n1. Calculation Type: \n - This can be on **Net Total** (that is the sum of basic amount).\n - **On Previous Row Total / Amount** (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total.\n - **Actual** (as mentioned).\n2. Account Head: The Account ledger under which this tax will be booked\n3. Cost Center: If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center.\n4. Description: Description of the tax (that will be printed in invoices / quotes).\n5. Rate: Tax rate.\n6. Amount: Tax amount.\n7. Total: Cumulative total to this point.\n8. Enter Row: If based on ""Previous Row Total"" you can select the row number which will be taken as a base for this calculation (default is the previous row).\n9. Is this Tax included in Basic Rate?: If you check this, it means that this tax will not be shown below the item table, but will be included in the Basic Rate in your main item table. This is useful where you want give a flat price (inclusive of all taxes) price to customers.","Стандартный шаблон налог, который может быть применен ко всем сделок купли-продажи. Этот шаблон может содержать перечень налоговых руководителей, а также других глав расходы / доходы, как ""Shipping"", ""Insurance"", ""Обращение"" и т.д. \n\n #### Примечание \n\n ставка налога на Вы Определить здесь будет стандартная ставка налога на прибыль для всех ** деталей **. Если есть ** товары **, которые имеют различные цены, они должны быть добавлены в ** деталь налога ** стол в ** деталь ** мастера.\n\n #### Описание колонок \n\n 1. Расчет Тип: \n - Это может быть ** Чистый Всего ** (то есть сумма основной суммы).\n - ** На предыдущей строке Total / сумма ** (по совокупности налогов и сборов). Если вы выбираете эту опцию, налог будет применяться в процентах от предыдущего ряда (в налоговом таблицы) суммы или объема.\n - ** ** Фактический (как уже упоминалось).\n 2. Счет Руководитель: лицевому счету, при которых этот налог будут забронированы \n 3. Центр Стоимость: Если налог / налог на заряд доход (как перевозка груза) или расходов это должен быть забронирован на МВЗ.\n 4. Описание: Описание налога (которые будут напечатаны в счетах-фактурах / кавычек).\n 5. Оценить: Налоговая ставка.\n 6. Количество: Сумма налога.\n 7. Всего: Суммарное к этой точке.\n 8. Введите Row: Если на базе ""Предыдущая сумма по строке"" вы можете выбрать номер строки которой будет приниматься в качестве основы для такого расчета (по умолчанию предыдущего ряда).\n 9. Это налог Включено в основной ставке ?: Если вы посмотрите, это значит, что этот налог не будет показано ниже в таблице элементов, но будет включен в основной ставке в основной таблице элементов. Это полезно, если вы хотите дать квартира Цена (включая все налоги) цену к клиентам.", @@ -5190,13 +5180,12 @@ To Folio No,В фолио №, Equity/Liability Account,Акционерный / Обязательный счет, Asset Account,Аккаунт активов, (including),(в том числе), -ACC-SH-.YYYY.-,ACC-SH-.YYYY.-, Folio no.,Фолио №, Address and Contacts,Адрес и контакты, Contact List,Список контактов, Hidden list maintaining the list of contacts linked to Shareholder,"Скрытый список, поддерживающий список контактов, связанных с Акционером", Specify conditions to calculate shipping amount,Укажите условия для расчета суммы доставки, -Shipping Rule Label,Название правила доставки, +Shipping Rule Label,Метка правила доставки, example: Next Day Shipping,Пример: доставка на следующий день, Shipping Rule Type,Тип правила доставки, Shipping Account,Счет доставки, @@ -5227,21 +5216,21 @@ Plans,Планы, Discounts,Скидки, Additional DIscount Percentage,Процент Дополнительной Скидки, Additional DIscount Amount,Сумма Дополнительной Скидки, -Subscription Invoice,Счет-фактура, +Subscription Invoice,Счет за подписку, Subscription Plan,План подписки, Cost,Стоимость, Billing Interval,Интервал выставления счетов, Billing Interval Count,Счет интервала фактурирования, "Number of intervals for the interval field e.g if Interval is 'Days' and Billing Interval Count is 3, invoices will be generated every 3 days","Количество интервалов для поля интервалов, например, если Interval является «Days», а количество интервалов фактурирования - 3, счета-фактуры будут генерироваться каждые 3 дня", Payment Plan,Платежный план, -Subscription Plan Detail,Деталь плана подписки, +Subscription Plan Detail,Сведения о плана подписки, Plan,План, Subscription Settings,Настройки подписки, Grace Period,Льготный период, Number of days after invoice date has elapsed before canceling subscription or marking subscription as unpaid,Количество дней после истечения срока выставления счета перед отменой подписки или подпиской по подписке как неоплаченной, Prorate,пропорциональная доля, Tax Rule,Налоговое положение, -Tax Type,Налоги Тип, +Tax Type,Тип налога, Use for Shopping Cart,Используйте корзину для, Billing City,Город платильщика, Billing County,Платежный County, @@ -5264,7 +5253,7 @@ Linked Doctype,Связанный Doctype, Water Analysis,Анализ воды, Soil Analysis,Анализ почвы, Plant Analysis,Анализ растений, -Fertilizer,удобрение, +Fertilizer,Удобрение, Soil Texture,Текстура почвы, Weather,Погода, Agriculture Manager,Менеджер по развитию, @@ -5357,7 +5346,6 @@ Appearance,Внешность, Person Responsible,Ответственное лицо, Water Analysis Criteria,Критерии анализа воды, Weather Parameter,Параметры погоды, -ACC-ASS-.YYYY.-,ACC-ASS-.YYYY.-, Asset Owner,Владелец актива, Asset Owner Company,Компания по управлению активами, Custodian,Попечитель, @@ -5385,18 +5373,18 @@ Insurance Start Date,Дата начала страхования, Insurance End Date,Дата окончания страхования, Comprehensive Insurance,Комплексное страхование, Maintenance Required,Требуется техническое обслуживание, -Check if Asset requires Preventive Maintenance or Calibration,"Проверьте, требуется ли Asset профилактическое обслуживание или калибровка", +Check if Asset requires Preventive Maintenance or Calibration,"Проверьте, требует ли актив профилактического обслуживания или калибровки", Booked Fixed Asset,Забронированные основные средства, Purchase Receipt Amount,Сумма покупки, Default Finance Book,Финансовая книга по умолчанию, Quality Manager,Менеджер по качеству, -Asset Category Name,Asset Категория Название, +Asset Category Name,Название категории активов, Depreciation Options,Варианты амортизации, Enable Capital Work in Progress Accounting,Включить капитальную работу в процессе учета, Finance Book Detail,Финансовая книга, Asset Category Account,Счет категории активов, Fixed Asset Account,Счет учета основных средств, -Accumulated Depreciation Account,Начисленной амортизации Счет, +Accumulated Depreciation Account,Счет накопленной амортизации, Depreciation Expense Account,Износ счет расходов, Capital Work In Progress Account,Счет капитальной работы, Asset Finance Book,Финансовая книга по активам, @@ -5409,7 +5397,6 @@ Maintenance Manager Name,Имя менеджера обслуживания, Maintenance Tasks,Задачи обслуживания, Manufacturing User,Сотрудник производства, Asset Maintenance Log,Журнал обслуживания активов, -ACC-AML-.YYYY.-,ACC-AML-.YYYY.-, Maintenance Type,Тип технического обслуживания, Maintenance Status,Статус технического обслуживания, Planned,Планируемый, @@ -5436,12 +5423,11 @@ From Employee,От работника, Target Location,Целевое местоположение, To Employee,Сотруднику, Asset Repair,Ремонт активов, -ACC-ASR-.YYYY.-,ACC-ASR-.YYYY.-, Failure Date,Дата отказа, Assign To Name,Назначить имя, Repair Status,Статус ремонта, Error Description,Описание ошибки, -Downtime,время простоя, +Downtime,Время простоя, Repair Cost,Стоимость ремонта, Manufacturing Manager,Менеджер производства, Current Asset Value,Текущая стоимость актива, @@ -5470,7 +5456,6 @@ Backflush Raw Materials of Subcontract Based On,"Исходные материа Material Transferred for Subcontract,"Материал, переданный для субподряда", Over Transfer Allowance (%),Превышение Пособия (%), Percentage you are allowed to transfer more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to transfer 110 units.,"В процентах вам разрешено переводить больше по сравнению с заказанным количеством. Например: если вы заказали 100 единиц. и ваше пособие составляет 10%, тогда вам разрешено передавать 110 единиц.", -PUR-ORD-.YYYY.-,PUR-ORD-.YYYY.-, Get Items from Open Material Requests,Получить товары из Открыть Запросов Материала, Fetch items based on Default Supplier.,Получать элементы на основе поставщика по умолчанию., Required By,Требуется по, @@ -5497,17 +5482,16 @@ To be delivered to customer,Доставлен заказчику, Material Request Item,Позиция запроса материала, Supplier Quotation Item,Продукт Предложения Поставщика, Against Blanket Order,Против общего заказа, -Blanket Order,Заказать одеяло, -Blanket Order Rate,Стоимость заказа на одеяло, +Blanket Order,Общий заказ, +Blanket Order Rate,Стоимость общего заказа, Returned Qty,Вернулся Кол-во, Purchase Order Item Supplied,Заказ товара Поставляется, BOM Detail No,Подробности спецификации №, Stock Uom,Единица измерения запасов, -Raw Material Item Code,Код сырьевой позиции, +Raw Material Item Code,Код исходного материала, Supplied Qty,Поставляемое кол-во, -Purchase Receipt Item Supplied,Покупка Получение товара Поставляется, +Purchase Receipt Item Supplied,Квитанция о покупке предоставлена, Current Stock,Наличие на складе, -PUR-RFQ-.YYYY.-,PUR-RFQ-.YYYY.-, For individual supplier,Для индивидуального поставщика, Link to Material Requests,Ссылка на запросы материалов, Message for Supplier,Сообщение для Поставщика, @@ -5519,15 +5503,14 @@ Quote Status,Статус предложения, Download PDF,Скачать PDF, Supplier of Goods or Services.,Поставщик товаров или услуг., Name and Type,Наименование и тип, -SUP-.YYYY.-,SUP-.YYYY.-, Default Bank Account,По умолчанию Банковский счет, Is Transporter,Является перевозчиком, Represents Company,Представляет компанию, Supplier Type,Тип поставщика, -Allow Purchase Invoice Creation Without Purchase Order,Разрешить создание счета-фактуры без заказа на покупку, -Allow Purchase Invoice Creation Without Purchase Receipt,Разрешить создание счета-фактуры без квитанции о покупке, +Allow Purchase Invoice Creation Without Purchase Order,Разрешить создание счета без заказа на покупку, +Allow Purchase Invoice Creation Without Purchase Receipt,Разрешить создание счета без квитанции о покупке, Warn RFQs,Предупреждать о RFQ, -Warn POs,Предупредить ПО, +Warn POs,Предупреждать ПО, Prevent RFQs,Предотвращение запросов, Prevent POs,Предотвращение PO, Billing Currency,Платежная валюта, @@ -5539,13 +5522,12 @@ Default Payable Accounts,По умолчанию задолженность Кр Mention if non-standard payable account,"Упомяните, если нестандартный подлежащий оплате счет", Default Tax Withholding Config,Конфигурация удержания налога по умолчанию, Supplier Details,Подробная информация о поставщике, -Statutory info and other general information about your Supplier,Уставный информации и другие общие сведения о вашем Поставщик, -PUR-SQTN-.YYYY.-,PUR-SQTN-.YYYY.-, +Statutory info and other general information about your Supplier,Правовая информация и другие общие сведения о вашем поставщике, Supplier Address,Адрес поставщика, Link to material requests,Ссылка на заявки на материалы, -Rounding Adjustment (Company Currency,Корректировка округления (Валюта компании, +Rounding Adjustment (Company Currency,Корректировка округления (в валюте компании, Auto Repeat Section,Секция автоматического повтора, -Is Subcontracted,Является субподряду, +Is Subcontracted,Является субподрядом, Lead Time in days,Время выполнения в днях, Supplier Score,Оценка поставщика, Indicator Color,Цвет индикатора, @@ -5567,11 +5549,10 @@ Notify Supplier,Сообщите поставщику, Notify Employee,Уведомить сотрудника, Supplier Scorecard Criteria,Критерии оценки поставщиков, Criteria Name,Название критерия, -Max Score,Макс. Оценка, +Max Score,Макс. оценка, Criteria Formula,Формула критериев, Criteria Weight,Вес критериев, Supplier Scorecard Period,Период оценки поставщика, -PU-SSP-.YYYY.-,PU-SSP-.YYYY.-, Period Score,Период, Calculations,Вычисления, Criteria,Критерии, @@ -5605,13 +5586,13 @@ Ringing,Звонок, Missed,Пропущенный, Call Duration in seconds,Продолжительность звонка в секундах, Recording URL,Запись URL, -Communication Medium,Связь Средний, -Communication Medium Type,Тип средств связи, +Communication Medium,Способ коммуникации, +Communication Medium Type,Тип способа коммуникации, Voice,Голос, Catch All,Поймать все, "If there is no assigned timeslot, then communication will be handled by this group","Если нет назначенного временного интервала, то связь будет обрабатываться этой группой", Timeslots,Временные интервалы, -Communication Medium Timeslot,Коммуникационный средний таймслот, +Communication Medium Timeslot,Коммуникационный таймслот, Employee Group,Группа сотрудников, Appointment,"Деловое свидание, встреча", Scheduled Time,Назначенное время, @@ -5638,14 +5619,14 @@ Success Redirect URL,URL-адрес успешного перенаправле "Leave blank for home.\nThis is relative to site URL, for example ""about"" will redirect to ""https://yoursitename.com/about""","Оставьте пустым для дома. Это относительно URL сайта, например, «about» будет перенаправлен на «https://yoursitename.com/about»", Appointment Booking Slots,Назначение Бронирование Слоты, Day Of Week,День недели, -From Time ,С , +From Time ,От времени , Campaign Email Schedule,Расписание рассылки кампании, Send After (days),Отправить после (дней), Signed,подписанный, Party User,Пользователь Party, Unsigned,Неподписанный, Fulfilment Status,Статус выполнения, -N/A,Н/д, +N/A,Н/Д, Unfulfilled,Невыполненный, Partially Fulfilled,Частично выполнено, Fulfilled,Исполненная, @@ -5669,7 +5650,6 @@ Contract Template Fulfilment Terms,Условия заключения конт Email Campaign,Кампания по электронной почте, Email Campaign For ,Кампания по электронной почте для, Lead is an Organization,Это Организация, -CRM-LEAD-.YYYY.-,CRM-LEAD-.YYYY.-, Person Name,ФИО / Имя, Lost Quotation,Отказ от Предложения, Interested,Заинтересованный, @@ -5704,7 +5684,6 @@ Session Status,Статус сеанса, Lost Reason Detail,Потерянная причина подробно, Opportunity Lost Reason,Возможность потерянной причины, Potential Sales Deal,Сделка потенциальных продаж, -CRM-OPP-.YYYY.-,CRM-OPP-.YYYY.-, Opportunity From,Возможность из, Customer / Lead Name,Имя Клиента / Лида, Opportunity Type,Тип возможности, @@ -5750,13 +5729,13 @@ Examiner,экзаменатор, Examiner Name,Имя экзаменатора, Supervisor,Руководитель, Supervisor Name,Имя супервизора, -Evaluate,оценивать, +Evaluate,Оценивать, Maximum Assessment Score,Максимальный балл оценки, Assessment Plan Criteria,Критерии оценки плана, Maximum Score,Максимальный балл, Result,Результат, Total Score,Общий счет, -Grade,Класс, +Grade,Ранг, Assessment Result Detail,Оценка результата Detail, Assessment Result Tool,Оценка результата инструмент, Result HTML,Результат HTML, @@ -5779,7 +5758,6 @@ Quiz,Викторина, Program Enrollment,Программа подачи заявок, Enrollment Date,Дата поступления, Instructor Name,Имя инструктора, -EDU-CSH-.YYYY.-,EDU-CSH-.YYYY.-, Course Scheduling Tool,Курс планирования Инструмент, Course Start Date,Дата начала курса, To TIme,До, @@ -5800,13 +5778,12 @@ Make Academic Term Mandatory,Сделать академический срок Skip User creation for new Student,Пропустить создание пользователя для нового студента, "By default, a new User is created for every new Student. If enabled, no new User will be created when a new Student is created.","По умолчанию для каждого нового Студента создается новый Пользователь. Если этот параметр включен, при создании нового Студента новый Пользователь не создается.", Instructor Records to be created by,Записи инструкторов должны быть созданы, -Employee Number,Общее число сотрудников, +Employee Number,Номер сотрудника, Fee Category,Категория платы, Fee Component,Компонент платы, Fees Category,Категория плат, Fee Schedule,График оплат, Fee Structure,Тариф, -EDU-FSH-.YYYY.-,EDU-FSH-.YYYY.-, Fee Creation Status,Статус создания платы, In Process,В процессе, Send Payment Request Email,Отправить запрос на оплату, @@ -5818,8 +5795,6 @@ Fee Schedule Program,Планирование программы, Student Batch,Student Batch, Total Students,Всего студентов, Fee Schedule Student Group,Плата за обучение Студенческая группа, -EDU-FST-.YYYY.-,EDU-FST-.YYYY.-, -EDU-FEE-.YYYY.-,EDU-FEE-.YYYY.-, Include Payment,Включить оплату, Send Payment Request,Отправить запрос на оплату, Student Details,Сведения о студенте, @@ -5842,7 +5817,6 @@ Guardian Interests,хранители Интересы, Guardian Interest,Опекун Проценты, Interest,Интерес, Guardian Student,Хранитель Студент, -EDU-INS-.YYYY.-,EDU-INS-.YYYY.-, Instructor Log,Журнал инструктора, Other details,Другие детали, Option,Вариант, @@ -5856,7 +5830,7 @@ Is Featured,Показано, Intro Video,Вступительное видео, Program Course,Программа курса, School House,Общежитие, -Boarding Student,Студент-пансионер, +Boarding Student,Студент-интернат, Check this if the Student is residing at the Institute's Hostel.,"Поставьте галочку, если студент проживает в общежитии института", Walking,Пешком, Institute's Bus,Автобус института, @@ -5891,7 +5865,7 @@ Grading Basis,Оценка основ, Latest Highest Score,Последний наивысший балл, Latest Attempt,Последняя попытка, Quiz Activity,Викторина, -Enrollment,регистрация, +Enrollment,Регистрация, Pass,Проходить, Quiz Question,Контрольный вопрос, Quiz Result,Результат теста, @@ -5902,18 +5876,9 @@ Room Name,Название комнаты, Room Number,Номер комнаты, Seating Capacity,Количество сидячих мест, House Name,Название дома, -EDU-STU-.YYYY.-,EDU-STU-.YYYY.-, Student Mobile Number,Студент Мобильный телефон, Joining Date,Дата вступления, Blood Group,Группа крови, -A+,A+, -A-,A-, -B+,B+, -B-,B-, -O+,O+, -O-,О-, -AB+,AB+, -AB-,AB-, Nationality,Национальность, Home Address,Домашний адрес, Guardian Details,Наставник Подробности, @@ -5935,10 +5900,9 @@ Maximum Age,Максимальный возраст, Application Fee,Регистрационный взнос, Naming Series (for Student Applicant),Идентификация по Имени (для заявителей-студентов), LMS Only,Только LMS, -EDU-APP-.YYYY.-,EDU-APP-.YYYY.-, -Application Status,Статус приложения, +Application Status,Статус подачи документов, Application Date,Дата подачи документов, -Student Attendance Tool,Student Участники Инструмент, +Student Attendance Tool,Инструмент посещаемости учащихся, Group Based On,Группа на основе, Students HTML,Студенты HTML, Group Based on,Группа основана на, @@ -6050,7 +6014,7 @@ Shopify Settings,Shopify настройки, status html,статус html, Enable Shopify,Включить Shopify, App Type,Тип приложения, -Last Sync Datetime,Последнее время синхронизации, +Last Sync Datetime,Последняя дата синхронизации, Shop URL,URL магазина, eg: frappe.myshopify.com,например: frappe.myshopify.com, Shared secret,Общий секрет, @@ -6060,20 +6024,20 @@ Customer Settings,Настройки клиента, Default Customer,Клиент по умолчанию, Customer Group will set to selected group while syncing customers from Shopify,"Группа клиентов настроится на выбранную группу, синхронизируя клиентов с Shopify", For Company,Для Компании, -Cash Account will used for Sales Invoice creation,Денежный счет будет использоваться для создания счета-фактуры, +Cash Account will used for Sales Invoice creation,Денежный счет будет использоваться для создания счета продажи, Update Price from Shopify To ERPNext Price List,Обновить цену от Shopify до прайс-листа ERPNext, Default Warehouse to to create Sales Order and Delivery Note,Склад по умолчанию для формирования Сделки и Доставки, Sales Order Series,Идентификаторы сделок, Import Delivery Notes from Shopify on Shipment,Импорт уведомлений о доставке из Shopify on Shipment, Delivery Note Series,Идентификаторы документов доставки, -Import Sales Invoice from Shopify if Payment is marked,"Импортировать счет-фактуру продавца, чтобы узнать, отмечен ли платеж", +Import Sales Invoice from Shopify if Payment is marked,"Импортировать счет продавца, чтобы узнать, отмечен ли платеж", Sales Invoice Series,Идентификаторы счетов продаж, Shopify Tax Account,Shopify налоговый счет, Shopify Tax/Shipping Title,Изменить название налога / доставки, ERPNext Account,Учетная запись ERPNext, Shopify Webhook Detail,Узнайте подробности веб-камеры, Webhook ID,Идентификатор Webhook, -Tally Migration,Tally Migration, +Tally Migration,Tally миграция, Master Data,Основные данные, "Data exported from Tally that consists of the Chart of Accounts, Customers, Suppliers, Addresses, Items and UOMs","Данные, экспортированные из Tally, которые состоят из плана счетов, клиентов, поставщиков, адресов, позиций и единиц измерения", Is Master Data Processed,Обработка основных данных, @@ -6082,7 +6046,7 @@ Tally Creditors Account,Счет Tally Creditors, Creditors Account set in Tally,Счет кредиторов установлен в Tally, Tally Debtors Account,Счет Tally должников, Debtors Account set in Tally,Счет дебитора установлен в Tally, -Tally Company,Талли Компания, +Tally Company,Tally Компания, Company Name as per Imported Tally Data,Название компании согласно импортированным данным подсчета, Default UOM,Единица измерения по умолчанию, UOM in case unspecified in imported data,"Единицы измерения, если они не указаны в импортированных данных", @@ -6092,7 +6056,7 @@ Processed Files,Обработанные файлы, Parties,Стороны, UOMs,Единицы измерения, Vouchers,Ваучеры, -Round Off Account,Округление аккаунт, +Round Off Account,Округлить счет, Day Book Data,Данные Дневной Книги, Day Book Data exported from Tally that consists of all historic transactions,"Данные дневной книги, экспортированные из Tally, которые включают все исторические транзакции", Is Day Book Data Processed,Обработаны ли данные дневника, @@ -6108,7 +6072,7 @@ Freight and Forwarding Account,Фрахт и пересылка, Creation User,Создание пользователя, "The user that will be used to create Customers, Items and Sales Orders. This user should have the relevant permissions.","Пользователь, который будет использоваться для создания клиентов, товаров и заказов на продажу. Этот пользователь должен иметь соответствующие разрешения.", "This warehouse will be used to create Sales Orders. The fallback warehouse is ""Stores"".",Этот склад будет использоваться для создания заказов на продажу. Резервный склад "Магазины"., -"The fallback series is ""SO-WOO-"".",Аварийная серия "SO-WOO-"., +"The fallback series is ""SO-WOO-"".","Аварийная серия ""SO-WOO-"".", This company will be used to create Sales Orders.,Эта компания будет использоваться для создания заказов на продажу., Delivery After (Days),Доставка после (дней), This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.,Это смещение по умолчанию (дни) для даты поставки в заказах на продажу. Смещение отступления составляет 7 дней с даты размещения заказа., @@ -6122,7 +6086,6 @@ Is Inpatient,Является стационарным, Default Duration (In Minutes),Продолжительность по умолчанию (в минутах), Body Part,Часть тела, Body Part Link,Ссылка на часть тела, -HLC-CPR-.YYYY.-,HLC-CPR-.YYYY.-, Procedure Template,Шаблон процедуры, Procedure Prescription,Процедура рецепта, Service Unit,Сервисный блок, @@ -6174,10 +6137,9 @@ Reference Appointments,Справочные встречи, Valid till,Действителен до, Fee Validity Reference,Справка о сроках действия комиссии, Basic Details,Основные детали, -HLC-PRAC-.YYYY.-,HLC-PRAC-.YYYY.-, Mobile,Мобильный, Phone (R),Телефон (R), -Phone (Office),Телефон(офисный), +Phone (Office),Телефон (офис), Employee and User Details,Сведения о сотруднике и пользователе, Hospital,Больница, Appointments,Назначения, @@ -6194,9 +6156,9 @@ Inpatient Occupancy,Стационарное размещение, Occupancy Status,Статус занятости, Vacant,Вакантно, Occupied,Занято, -Item Details,Детальная информация о товаре, +Item Details,Детальная информация о продукте, UOM Conversion in Hours,Преобразование UOM в часы, -Rate / UOM,Скорость / UOM, +Rate / UOM,Стоимость / UOM, Change in Item,Изменение продукта, Out Patient Settings,Настройки пациента, Patient Name By,Имя пациента, @@ -6230,8 +6192,8 @@ Appointment Reminder,Напоминание о назначении, Reminder Message,Сообщение напоминания, Remind Before,Напомнить, Laboratory Settings,Настройки лаборатории, -Create Lab Test(s) on Sales Invoice Submission,Создание лабораторных тестов для отправки счета-фактуры, -Checking this will create Lab Test(s) specified in the Sales Invoice on submission.,"При установке этого флажка будут созданы лабораторные тесты, указанные в счете-фактуре продажи при отправке.", +Create Lab Test(s) on Sales Invoice Submission,Создание лабораторных тестов на основе счета продажи, +Checking this will create Lab Test(s) specified in the Sales Invoice on submission.,"При установке этого флажка будут созданы лабораторные тесты, указанные в счете продажи при отправке.", Create Sample Collection document for Lab Test,Создать образец документа для лабораторного тестирования, Checking this will create a Sample Collection document every time you create a Lab Test,"При проверке этого будет создаваться документ Sample Collection каждый раз, когда вы создаете лабораторный тест.", Employee name and designation in print,Имя и обозначение сотрудника в печати, @@ -6244,7 +6206,6 @@ Result Printed Message,Результат напечатанное сообще Result Emailed Message,"Сообщение, отправленное по электронной почте", Check In,Регистрация, Check Out,Проверка, -HLC-INP-.YYYY.-,HLC-INP-.YYYY.-, A Positive,Положительно, A Negative,Отрицательно, AB Positive,АВ положительная, @@ -6264,7 +6225,7 @@ Discharge Date,Дата выписки, Lab Prescription,Лабораторный рецепт, Lab Test Name,Название лабораторного теста, Test Created,Тест создан, -Submitted Date,Дата отправки, +Submitted Date,Дата утверждения, Approved Date,Утвержденная дата, Sample ID,Образец, Lab Technician,Лаборант, @@ -6288,7 +6249,6 @@ Result Value,Значение результата, Require Result Value,Требовать значение результата, Normal Test Template,Шаблон нормального теста, Patient Demographics,Демографические данные пациентов, -HLC-PAT-.YYYY.-,HLC-PAT-.YYYY.-, Middle Name (optional),Отчество (необязательно), Inpatient Status,Состояние стационара, "If ""Link Customer to Patient"" is checked in Healthcare Settings and an existing Customer is not selected then, a Customer will be created for this Patient for recording transactions in Accounts module.","Если в настройках здравоохранения установлен флажок «Связать клиента с пациентом», а существующий клиент не выбран, то для этого пациента будет создан клиент для записи транзакций в модуле «Учетные записи».", @@ -6308,18 +6268,16 @@ Occupational Hazards and Environmental Factors,Профессиональные Other Risk Factors,Другие факторы риска, Patient Details,Сведения о пациенте, Additional information regarding the patient,Дополнительная информация о пациенте, -HLC-APP-.YYYY.-,HLC-APP-.YYYY.-, Patient Age,Возраст пациента, Get Prescribed Clinical Procedures,Получите предписанные клинические процедуры, Therapy,Терапия, Get Prescribed Therapies,Получите прописанную терапию, Appointment Datetime,Дата и время встречи, Duration (In Minutes),Продолжительность (в минутах), -Reference Sales Invoice,Ссылка на счет-фактуру, +Reference Sales Invoice,Ссылка на счет продажи, More Info,Подробнее, Referring Practitioner,Справляющий практик, Reminded,Напомнил, -HLC-PA-.YYYY.-,HLC-PA-.YYYY.-, Assessment Template,Шаблон оценки, Assessment Datetime,Дата и время оценки, Assessment Description,Описание оценки, @@ -6337,7 +6295,6 @@ Parameters,Параметры, Assessment Scale,Шкала оценки, Scale Minimum,Минимальный масштаб, Scale Maximum,Максимальный масштаб, -HLC-ENC-.YYYY.-,HLC-ENC-.YYYY.-, Encounter Date,Дата встречи, Encounter Time,Время встречи, Encounter Impression,Впечатление от встречи, @@ -6349,7 +6306,6 @@ Therapies,Терапии, Review Details,Обзорная информация, Patient Encounter Diagnosis,Диагностика встречи с пациентом, Patient Encounter Symptom,Симптом встречи с пациентом, -HLC-PMR-.YYYY.-,HLC-PMR-.YYYY.-, Attach Medical Record,Прикрепите медицинскую карту, Reference DocType,Ссылка DocType, Spouse,Супруга, @@ -6361,11 +6317,9 @@ Practitioner Service Unit Schedule,График обслуживания пра Procedure Name,Название процедуры, Appointment Booked,Записаться, Procedure Created,Процедура создана, -HLC-SC-.YYYY.-,HLC-SC-.YYYY.-, Collected By,Собрано, Particulars,Частности, Result Component,Компонент результата, -HLC-THP-.YYYY.-,HLC-THP-.YYYY.-, Therapy Plan Details,Детали плана терапии, Total Sessions,Всего сеансов, Total Sessions Completed,Всего завершено сеансов, @@ -6426,8 +6380,6 @@ Hotel Settings,Отель, Default Taxes and Charges,По умолчанию Налоги и сборы, Default Invoice Naming Series,Идентификаторы по имени для счета по умолчанию, Additional Salary,Дополнительная зарплата, -HR,HR, -HR-ADS-.YY.-.MM.-,HR-ADS-.YY.-.MM.-, Salary Component,Компонент зарплаты, Overwrite Salary Structure Amount,Перезаписать сумму заработной платы, Deduct Full Tax on Selected Payroll Date,Вычесть полный налог на выбранную дату расчета, @@ -6441,7 +6393,7 @@ Job Applicant,Соискатель работы, Applicant Name,Имя заявителя, Appointment Date,Назначенная дата, Appointment Letter Template,Шаблон письма о назначении, -Body,Тело, +Body,Содержимое, Closing Notes,Заметки, Appointment Letter content,Письмо о назначении, Appraisal,Оценка, @@ -6455,25 +6407,24 @@ Appraisal Goal,Цель оценки, Key Responsibility Area,Основная зона ответственности, Weightage (%),Весовая нагрузка (%), Score (0-5),Оценка (0-5), -Score Earned,Оценка Заработано, +Score Earned,Оценка получена, Appraisal Template Title,Название шаблона оценки, Appraisal Template Goal,Цель шаблона оценки, KRA,КРА, Key Performance Area,Ключевая область производительности, -HR-ATT-.YYYY.-,HR-ATT-.YYYY.-, On Leave,В отпуске, Work From Home,Работа из дома, Leave Application,Заявление на отпуск, -Attendance Date,Посещаемость Дата, +Attendance Date,Дата посещения, Attendance Request,Запрос на посещение, -Late Entry,Поздний вход, -Early Exit,Ранний выход, +Late Entry,Позднее начало, +Early Exit,Ранний уход, Half Day Date,Полдня Дата, On Duty,На службе, Explanation,Объяснение, Compensatory Leave Request,Компенсационный отпуск, Leave Allocation,Распределение отпусков, -Worked On Holiday,Работал на отдыхе, +Worked On Holiday,Работал на праздниках, Work From Date,Работа с даты, Work End Date,Дата окончания работы, Email Sent To,Email отправлен, @@ -6484,7 +6435,7 @@ Daily Work Summary Group User,Ежедневная рабочая группа, email,Эл. адрес, Parent Department,Родительский отдел, Leave Block List,Оставьте список есть, -Days for which Holidays are blocked for this department.,"Дни, для которых Праздники заблокированные для этого отдела.", +Days for which Holidays are blocked for this department.,"Дни, для которые праздники заблокированные для этого отдела.", Leave Approver,Подтверждение отпусков, Expense Approver,Подтверждающий расходы, Department Approver,Подтверждение департамента, @@ -6494,22 +6445,20 @@ Skills,Навыки, Designation Skill,Обозначение навыка, Skill,Умение, Driver,Водитель, -HR-DRI-.YYYY.-,HR-DRI-.YYYY.-, Suspended,Приостановленный, Transporter,Транспортер, -Applicable for external driver,Применимо для внешнего драйвера, -Cellphone Number,номер мобильного телефона, +Applicable for external driver,Применимо для внештатного курьера, +Cellphone Number,Номер мобильного телефона, License Details,Сведения о лицензии, License Number,Лицензионный номер, -Issuing Date,Дата выпуска ценных бумаг, +Issuing Date,Дата получения, Driving License Categories,Категории водительских прав, Driving License Category,Категория водительских удостоверений, Fleet Manager,Менеджер автопарка, Driver licence class,Класс водительских прав, -HR-EMP-,HR-EMP-, Employment Type,Вид занятости, Emergency Contact,Экстренная связь, -Emergency Contact Name,контакт для чрезвычайных ситуаций, +Emergency Contact Name,Контакт для чрезвычайных ситуаций, Emergency Phone,В случае чрезвычайных ситуаций, ERPNext User,Пользователь ERPNext, "System User (login) ID. If set, it will become default for all HR forms.","Система Пользователь (Войти) ID. Если установлено, то это станет по умолчанию для всех форм HR.", @@ -6518,18 +6467,18 @@ This will restrict user access to other employee records,Это ограничи Joining Details,Детали соединения, Offer Date,Дата предложения, Confirmation Date,Дата подтверждения, -Contract End Date,Конец контракта Дата, +Contract End Date,Дата окончания контракта, Notice (days),Уведомление (дней), Date Of Retirement,Дата выбытия, Department and Grade,Отдел и класс, Reports to,Доклады, Attendance and Leave Details,Посещаемость и детали отпуска, -Leave Policy,Оставить политику, +Leave Policy,Политика отпусков, Attendance Device ID (Biometric/RF tag ID),Идентификатор устройства посещаемости (биометрический идентификатор / идентификатор радиочастотной метки), Applicable Holiday List,Применимо Список праздников, -Default Shift,Сдвиг по умолчанию, +Default Shift,Смена по умолчанию, Salary Details,Сведения о зарплате, -Salary Mode,Режим Зарплата, +Salary Mode,Способ оплаты, Bank A/C No.,Банк Сч/Тек №, Health Insurance,Медицинская страховка, Health Insurance Provider,Поставщик медицинского страхования, @@ -6538,7 +6487,7 @@ Prefered Email,Предпочитаемый адрес электронной п Personal Email,Личная электронная почта, Permanent Address Is,Постоянный адрес Является, Rented,Арендованный, -Owned,Присвоено, +Owned,Собственность, Permanent Address,Постоянный адрес, Prefered Contact Email,Предпочитаемый контактный адрес электронной почты, Company Email,Электронная почта компании, @@ -6549,10 +6498,10 @@ Personal Bio,Персональная биография, Bio / Cover Letter,Био / сопроводительное письмо, Short biography for website and other publications.,Краткая биография для веб-сайта и других изданий., Passport Number,Номер паспорта, -Date of Issue,Дата вопроса, -Place of Issue,Место вопроса, -Widowed,Овдовевший, -Family Background,Семья Фон, +Date of Issue,Дата выдачи, +Place of Issue,Место выдачи, +Widowed,Овдовевший(ая), +Family Background,О семье, "Here you can maintain family details like name and occupation of parent, spouse and children","Здесь Вы можете сохранить описание семьи — имя и профессия родителей, супруга и детей", Health Details,Подробности здоровья, "Here you can maintain height, weight, allergies, medical concerns etc","Здесь вы можете записывать рост, вес, аллергии, медицинские проблемы и т. п.", @@ -6561,13 +6510,12 @@ Previous Work Experience,Предыдущий опыт работы, External Work History,Внешний история работы, History In Company,История в компании, Internal Work History,Внутренняя история работ, -Resignation Letter Date,Отставка Письмо Дата, -Relieving Date,Освобождение Дата, +Resignation Letter Date,Дата заявления об уходе, +Relieving Date,Дата увольнения, Reason for Leaving,Причина увольнения, Leave Encashed?,Оставьте инкассированы?, Encashment Date,Дата инкассации, New Workplace,Новый рабочий участок, -HR-EAD-.YYYY.-,HR-EAD-.YYYY.-, Returned Amount,Возвращенная сумма, Claimed,Заявленное, Advance Account,Предварительный счет, @@ -6602,10 +6550,10 @@ Log Type,Тип журнала, OUT,ИЗ, Location / Device ID,Расположение / ID устройства, Skip Auto Attendance,Пропустить автоматическое посещение, -Shift Start,Сдвинуть начало, -Shift End,Сдвинуть окончание, -Shift Actual Start,Сдвиг фактического начала, -Shift Actual End,Сдвиг фактического конца, +Shift Start,Начало смены, +Shift End,Конец смены, +Shift Actual Start,Фактическое начало смены, +Shift Actual End,Фактическое окончание смены, Employee Education,Сотрудник Образование, School/University,Школа / университет, Graduate,Выпускник, @@ -6676,7 +6624,6 @@ Re-allocate Leaves,Перераспределить листы, Create New Employee Id,Создать новый идентификатор сотрудника, New Employee ID,Новый идентификатор сотрудника, Employee Transfer Property,Свойство переноса персонала, -HR-EXP-.YYYY.-,HR-EXP-.YYYY.-, Expense Taxes and Charges,Расходные налоги и сборы, Total Sanctioned Amount,Общая санкционированная сумма, Total Advance Amount,Общая сумма аванса, @@ -6699,7 +6646,7 @@ Add to Holidays,Добавить в праздники, Holidays,Праздники, Clear Table,Очистить таблицу, HR Settings,Настройки HR, -Employee Settings,Работники Настройки, +Employee Settings,Настройки сотрудников, Retirement Age,Пенсионный возраст, Enter retirement age in years,Введите возраст выхода на пенсию, Stop Birthday Reminders,Стоп День рождения Напоминания, @@ -6717,12 +6664,12 @@ Encrypt Salary Slips in Emails,Зашифровать листы зарплат "The salary slip emailed to the employee will be password protected, the password will be generated based on the password policy.","Письмо с зарплатой сотруднику будет защищено паролем, пароль будет сгенерирован на основе политики паролей.", Password Policy,Политика паролей, Example: SAL-{first_name}-{date_of_birth.year}
    This will generate a password like SAL-Jane-1972,Пример: SAL- {first_name} - {date_of_birth.year}
    Это сгенерирует пароль как SAL-Jane-1972, -Leave Settings,Оставить настройки, -Leave Approval Notification Template,Оставить шаблон уведомления об уведомлении, -Leave Status Notification Template,Оставить шаблон уведомления о состоянии, +Leave Settings,Настройки отпуска, +Leave Approval Notification Template,Шаблон уведомления об утверждении отпуска, +Leave Status Notification Template,Шаблон уведомления о состоянии отпуска, Role Allowed to Create Backdated Leave Application,"Роль, разрешенная для создания приложения с задним сроком выхода", -Leave Approver Mandatory In Leave Application,Утвердить заявление на отпуск, -Show Leaves Of All Department Members In Calendar,Показать листы всех членов Департамента в календаре, +Leave Approver Mandatory In Leave Application,Утверждать заявление на отпуск, +Show Leaves Of All Department Members In Calendar,Показать отпуска всех сотрудников отдела в календаре, Auto Leave Encashment,Автоматический выход из инкассации, Hiring Settings,Настройки найма, Check Vacancies On Job Offer Creation,Проверьте вакансии на создание предложения о работе, @@ -6747,7 +6694,7 @@ Applicant Email Address,Адрес электронной почты заяви Awaiting Response,В ожидании ответа, Job Offer Terms,Условия работы, Select Terms and Conditions,Выберите Сроки и условия, -Printing Details,Печатать Подробности, +Printing Details,Подробности печати, Job Offer Term,Срок действия предложения, Offer Term,Условие предложения, Value / Description,Значение / Описание, @@ -6803,9 +6750,9 @@ Encashable days,Места для инкаширования, Encashment Amount,Сумма инкассации, Leave Ledger Entry,Выйти из книги, Transaction Name,Название транзакции, -Is Carry Forward,Является ли переносить, +Is Carry Forward,Переносится вперед, Is Expired,Истек, -Is Leave Without Pay,Является отпуск без, +Is Leave Without Pay,Отпуск без содержания, Holiday List for Optional Leave,Список праздников для дополнительного отпуска, Leave Allocations,Оставить выделение, Leave Policy Details,Оставьте сведения о политике, @@ -6866,8 +6813,8 @@ Only Tax Impact (Cannot Claim But Part of Taxable Income),Только нало Create Separate Payment Entry Against Benefit Claim,Создать отдельную заявку на подачу заявки на получение пособия, Condition and Formula,Состояние и формула, Amount based on formula,Сумма на основе формулы, -Formula,формула, -Salary Detail,Заработная плата: Подробности, +Formula,Формула, +Salary Detail,Подробно об заработной плате, Component,Компонент, Do not include in total,Не включать в общей сложности, Default Amount,По умолчанию количество, @@ -6889,18 +6836,18 @@ Total Principal Amount,Общая сумма, Total Interest Amount,Общая сумма процентов, Total Loan Repayment,Общая сумма погашения кредита, net pay info,Чистая информация платить, -Gross Pay - Total Deduction - Loan Repayment,Gross Pay - Итого Вычет - Погашение кредита, +Gross Pay - Total Deduction - Loan Repayment,Валовая заработная плата - Общий вычет - Погашение кредита, Total in words,Всего в словах, Net Pay (in words) will be visible once you save the Salary Slip.,"Чистая плата (прописью) будет видна, как только вы сохраните зарплатную ведомость.", Salary Component for timesheet based payroll.,Компонент заработной платы для расчета зарплаты на основе расписания., Leave Encashment Amount Per Day,Оставить количество инкассации в день, Max Benefits (Amount),Максимальные выгоды (сумма), Salary breakup based on Earning and Deduction.,Зарплата распада на основе Заработок и дедукции., -Total Earning,Всего Заработок, +Total Earning,Всего заработок, Salary Structure Assignment,Назначение структуры заработной платы, -Shift Assignment,Назначение сдвига, -Shift Type,Тип сдвига, -Shift Request,Запрос на сдвиг, +Shift Assignment,Назначение смены, +Shift Type,Тип смены, +Shift Request,Запрос на смену, Enable Auto Attendance,Включить автоматическое посещение, Mark attendance based on 'Employee Checkin' for Employees assigned to this shift.,"Отметьте посещаемость на основе «Проверка сотрудников» для сотрудников, назначенных для этой смены.", Auto Attendance Settings,Настройки автоматической посещаемости, @@ -6924,9 +6871,9 @@ Last Sync of Checkin,Последняя синхронизация регист Last Known Successful Sync of Employee Checkin. Reset this only if you are sure that all Logs are synced from all the locations. Please don't modify this if you are unsure.,"Последняя известная успешная синхронизация регистрации сотрудника. Сбрасывайте это, только если вы уверены, что все журналы синхронизированы из всех мест. Пожалуйста, не изменяйте это, если вы не уверены.", Grace Period Settings For Auto Attendance,Настройки льготного периода для автоматической посещаемости, Enable Entry Grace Period,Включить льготный период, -Late Entry Grace Period,Льготный период позднего въезда, +Late Entry Grace Period,Льготный период позднего входа, The time after the shift start time when check-in is considered as late (in minutes).,"Время после начала смены, когда регистрация считается поздней (в минутах).", -Enable Exit Grace Period,Включить Exit Grace Period, +Enable Exit Grace Period,Разрешить выход из льготного периода, Early Exit Grace Period,Льготный период раннего выхода, The time before the shift end time when check-out is considered as early (in minutes).,Время до окончания смены при выезде считается ранним (в минутах)., Skill Name,Название навыка, @@ -6959,7 +6906,7 @@ Trainer Email,Электронная почта тренера, Attendees,Присутствующие, Employee Emails,Электронные почты сотрудников, Training Event Employee,Обучение сотрудников Событие, -Invited,приглашенный, +Invited,Приглашенный, Feedback Submitted,Отзыв отправлен, Optional,Необязательный, Training Result Employee,Результат обучения сотрудника, @@ -6983,16 +6930,16 @@ Lodging Required,Требуется проживание, Preferred Area for Lodging,Предпочтительная зона для проживания, Check-in Date,Дата заезда, Check-out Date,Проверить дату, -Travel Request,Запрос на поездку, -Travel Type,Тип путешествия, -Domestic,внутренний, -International,Международный, -Travel Funding,Финансирование путешествия, -Require Full Funding,Требовать полного финансирования, -Fully Sponsored,Полностью спонсируемый, +Travel Request,Запрос на командировку, +Travel Type,Тип командировки, +Domestic,Внутренняя, +International,Международная, +Travel Funding,Финансирование командировки, +Require Full Funding,Требуется полное финансирование, +Fully Sponsored,Полностью спонсируемое, "Partially Sponsored, Require Partial Funding","Частично спонсируется, требует частичного финансирования", -Copy of Invitation/Announcement,Копия приглашения / объявление, -"Details of Sponsor (Name, Location)","Подробная информация о спонсоре (Название, Местоположение)", +Copy of Invitation/Announcement,Копия приглашения / объявления, +"Details of Sponsor (Name, Location)","Подробная информация о спонсоре (название, местоположение)", Identification Document Number,Идентификационный номер документа, Any other details,Любые другие детали, Costing Details,Сведения о стоимости, @@ -7029,12 +6976,12 @@ Fuel UOM,Топливо UOM, Last Carbon Check,Последняя проверка на углерод, Wheels,Колеса, Doors,Двери, -HR-VLOG-.YYYY.-,HR-Видеоблог-.YYYY.-, +HR-VLOG-.YYYY.-,HR-VLOG-.YYYY.-, Odometer Reading,Показания одометра, Current Odometer value ,Текущее значение одометра, last Odometer Value ,последнее значение одометра, Refuelling Details,Заправочные Подробнее, -Invoice Ref,Счет-фактура Ссылка, +Invoice Ref,Счет ссылка, Service Details,Сведения о службе, Service Detail,Сведения об услуге, Vehicle Service,Обслуживание автомобиля, @@ -7129,11 +7076,11 @@ Loan ,ссуда, Shortfall Time,Время нехватки, America/New_York,Америка / Триатлон, Shortfall Amount,Сумма дефицита, -Security Value ,Значение безопасности, +Security Value ,Значение безопасности , Process Loan Security Shortfall,Недостаток безопасности процесса займа, Loan To Value Ratio,Соотношение займа к стоимости, Unpledge Time,Время невыплаты, -Loan Name,Кредит Имя, +Loan Name,Название кредита, Rate of Interest (%) Yearly,Процентная ставка (%) Годовой, Penalty Interest Rate (%) Per Day,Процентная ставка штрафа (%) в день, Penalty Interest Rate is levied on the pending interest amount on a daily basis in case of delayed repayment ,Штрафная процентная ставка взимается на сумму отложенного процента на ежедневной основе в случае задержки выплаты, @@ -7153,7 +7100,6 @@ Sanctioned Loan Amount,Санкционированная сумма креди Sanctioned Amount Limit,Утвержденный лимит суммы, Unpledge,Отменить залог, Haircut,Стрижка волос, -MAT-MSH-.YYYY.-,MAT-MSH-.YYYY.-, Generate Schedule,Создать расписание, Schedules,Расписание, Maintenance Schedule Detail,График технического обслуживания Подробно, @@ -7162,7 +7108,6 @@ Actual Date,Фактическая дата, Maintenance Schedule Item,График обслуживания продукта, Random,Случайный, No of Visits,Кол-во посещений, -MAT-MVS-.YYYY.-,MAT-MVS-.YYYY.-, Maintenance Date,Дата технического обслуживания, Maintenance Time,Время технического обслуживания, Completion Status,Статус завершения, @@ -7176,14 +7121,13 @@ Maintenance Visit Purpose,Цель технического обслуживан Work Done,Работа выполнена, Against Document No,Против Документ №, Against Document Detail No,Против деталях документа №, -MFG-BLR-.YYYY.-,MFG-BLR-.YYYY.-, Order Type,Тип заказа, -Blanket Order Item,Элемент заказа одеяла, +Blanket Order Item,Позиция общего заказа, Ordered Quantity,Заказанное количество, Item to be manufactured or repacked,Продукт должен быть произведен или переупакован, Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Количество пункта получены после изготовления / переупаковка от заданных величин сырья, Set rate of sub-assembly item based on BOM,Установить скорость сборки на основе спецификации, -Allow Alternative Item,Разрешить альтернативный элемент, +Allow Alternative Item,Разрешить альтернативный продукт, Item UOM,Единиц продукта, Conversion Rate,Коэффициент конверсии, Rate Of Materials Based On,Оценить материалов на основе, @@ -7199,17 +7143,17 @@ Scrap Items,Утилизированные продукты, Operating Cost,Эксплуатационные затраты, Raw Material Cost,Стоимость сырья, Scrap Material Cost,Лом Материал Стоимость, -Operating Cost (Company Currency),Эксплуатационные расходы (Компания Валюта), -Raw Material Cost (Company Currency),Стоимость сырья (валюта компании), -Scrap Material Cost(Company Currency),Скрапа Стоимость (Компания Валюта), +Operating Cost (Company Currency),Эксплуатационные расходы (в валюте компании), +Raw Material Cost (Company Currency),Стоимость сырья (в валюте компании), +Scrap Material Cost(Company Currency),Стоимость отходов (в валюте компании), Total Cost,Общая стоимость, -Total Cost (Company Currency),Общая стоимость (валюта компании), +Total Cost (Company Currency),Общая стоимость (в валюте компании), Materials Required (Exploded),Необходимые материалы (в разобранном), Exploded Items,Взорванные предметы, Show in Website,Показать на веб-сайте, Item Image (if not slideshow),Изображение продукта (не для слайд-шоу), Thumbnail,Миниатюра, -Website Specifications,Сайт характеристики, +Website Specifications,Характеристики веб-сайта, Show Items,Показать продукты, Show Operations,Показать операции, Website Description,Описание, @@ -7219,17 +7163,17 @@ Include Item In Manufacturing,Включить товар в производс BOM Item,Спецификация продукта, Item operation,Работа с элементами, Rate & Amount,Стоимость и сумма, -Basic Rate (Company Currency),Основная ставка (валюта компании), -Scrap %,Лом%, +Basic Rate (Company Currency),Основная ставка (в валюте компании), +Scrap %,Брак %, Original Item,Оригинальный товар, BOM Operation,Операция спецификации, Operation Time ,Время операции, In minutes,В считанные минуты, Batch Size,Размер партии, -Base Hour Rate(Company Currency),Базовый час Rate (Компания Валюта), -Operating Cost(Company Currency),Эксплуатационные расходы (Компания Валюта), +Base Hour Rate(Company Currency),Базовая часовая ставка (в валюте компании), +Operating Cost(Company Currency),Эксплуатационные расходы (в валюте компании), BOM Scrap Item,Спецификация отходов продукта, -Basic Amount (Company Currency),Базовая сумма (Компания Валюта), +Basic Amount (Company Currency),Базовая сумма (в валюте компании), BOM Update Tool,Инструмент обновления спецификации, "Replace a particular BOM in all other BOMs where it is used. It will replace the old BOM link, update cost and regenerate ""BOM Explosion Item"" table as per new BOM.\nIt also updates latest price in all the BOMs.","Замените конкретную спецификацию во всех других спецификациях, где она используется. Он заменит старую ссылку BOM, обновит стоимость и восстановит таблицу «BOM Explosion Item» в соответствии с новой спецификацией. Он также обновляет последнюю цену во всех спецификациях.", Replace BOM,Заменить спецификацию, @@ -7241,7 +7185,6 @@ Update latest price in all BOMs,Обновление последней цены BOM Website Item,Спецификация продукта на сайте, BOM Website Operation,Операция спецификации на сайте, Operation Time,Время работы, -PO-JOB.#####,PO-JOB.#####, Timing Detail,Сроки, Time Logs,Журналы времени, Total Time in Mins,Общее время в минутах, @@ -7279,7 +7222,6 @@ Customer Provided,Клиент предоставлен, Minimum Order Quantity,Минимум для заказа, Default Workstation,Рабочее место по умолчанию, Production Plan,План производства, -MFG-PP-.YYYY.-,MFG-PP-.YYYY.-, Get Items From,Получить продукты от, Get Sales Orders,Получить Сделки, Material Request Detail,Подробности заявки на метериал, @@ -7307,7 +7249,6 @@ Production Plan Material Request,Производственный план по Production Plan Sales Order,Производственный план по сделкам, Sales Order Date,Дата сделки, Routing Name,Название маршрутизации, -MFG-WO-.YYYY.-,MFG-WO-.YYYY.-, Item To Manufacture,Продукт для производства, Material Transferred for Manufacturing,Материал отправлен на производство, Manufactured Qty,Изготовлено кол-во, @@ -7322,11 +7263,11 @@ This is a location where raw materials are available.,"Это место, где Work-in-Progress Warehouse,Работа-в-Прогресс Склад, This is a location where operations are executed.,"Это место, где выполняются операции.", This is a location where final product stored.,"Это место, где хранится конечный продукт.", -Scrap Warehouse,Лом Склад, +Scrap Warehouse,Склад брака, This is a location where scraped materials are stored.,"Это место, где хранятся скребки.", Required Items,Требуемые товары, -Actual Start Date,Фактическая Дата начала, -Planned End Date,Планируемая Дата завершения, +Actual Start Date,Фактическая дата начала, +Planned End Date,Планируемая дата завершения, Actual End Date,Факт. дата окончания, Operation Cost,Стоимость эксплуатации, Planned Operating Cost,Планируемые Эксплуатационные расходы, @@ -7348,9 +7289,9 @@ in Minutes,Через несколько минут, Actual Time and Cost,Фактическое время и стоимость, Actual Start Time,Фактическое время начала, Actual End Time,Фактическое время окончания, -Updated via 'Time Log',"Обновлено помощью ""Time Вход""", +Updated via 'Time Log',"Обновлено через 'Журнал времени'", Actual Operation Time,Фактическая время работы, -in Minutes\nUpdated via 'Time Log',"в минутах \n Обновлено помощью ""Time Вход""", +in Minutes\nUpdated via 'Time Log',"в минутах \n Обновлено через 'Журнал времени'", (Hour Rate / 60) * Actual Operation Time,(часовая ставка ÷ 60) × фактическое время работы, Workstation Name,Название рабочего места, Production Capacity,Производственная мощность, @@ -7369,15 +7310,13 @@ Certification Status,Статус сертификации, Yet to appear,Но чтобы появиться, Certified,Проверенный, Not Certified,Не сертифицирован, -USD,USD, -INR,INR, Certified Consultant,Сертифицированный консультант, Name of Consultant,Имя консультанта, Certification Validity,Срок действия сертификации, Discuss ID,Обсудить ID, GitHub ID,Идентификатор GitHub, Non Profit Manager,Менеджер некоммерческих организаций, -Chapter Head,Глава главы, +Chapter Head,Заголовок главы, Meetup Embed HTML,Вставить HTML-код, chapters/chapter_name\nleave blank automatically set after saving chapter.,главы / chapter_name оставить пустым автоматически после сохранения главы., Chapter Members,Члены группы, @@ -7396,7 +7335,6 @@ Show on Website,Показать на сайте, Assessment Mark (Out of 10),Оценка (из 10), Assessment Manager,Менеджер по оценке, Email Notification Sent,Отправлено уведомление по электронной почте, -NPO-MEM-.YYYY.-,NPO-MEM-.YYYY.-, Membership Expiry Date,Дата истечения срока членства, Razorpay Details,Детали Razorpay, Subscription ID,ID подписки, @@ -7435,7 +7373,7 @@ Tag Line,Тег линии, Company Tagline for website homepage,Слоган компании на главной странице сайта, Company Description for website homepage,Описание компании на главной странице сайта, Homepage Slideshow,Слайдшоу на домашней странице, -"URL for ""All Products""",URL для "Все продукты", +"URL for ""All Products""",URL для ""Все продукты""", Products to be shown on website homepage,Продукты будут показаны на главной странице сайта, Homepage Featured Product,Рекомендуемые продукты на главной страницу, route,маршрут, @@ -7487,7 +7425,7 @@ Total Expense Claim (via Expense Claims),Итоговая сумма аванс Total Purchase Cost (via Purchase Invoice),Общая стоимость покупки (по счетам закупок), Total Sales Amount (via Sales Order),Общая сумма продажи (по сделке), Total Billable Amount (via Timesheets),Общая сумма платежа (по табелю учета рабочего времени), -Total Billed Amount (via Sales Invoices),Общая сумма выставленных счетов (через счета-фактуры), +Total Billed Amount (via Sales Invoices),Общая сумма выставленных счетов (по счетам продаж), Total Consumed Material Cost (via Stock Entry),Общая потребляемая материальная стоимость (через записи на складе), Gross Margin,Валовая прибыль, Gross Margin %,Валовая маржа %, @@ -7514,13 +7452,13 @@ Ignore User Time Overlap,Игнорировать перекрытие поль Ignore Employee Time Overlap,Игнорировать перекрытие времени сотрудников, Weight,Вес, Parent Task,Родительская задача, -Timeline,График, +Timeline,Хронология, Expected Time (in hours),Ожидаемое время (в часах), % Progress,% Прогресс, Is Milestone,Является этапом, Task Description,Описание задания, Dependencies,Зависимости, -Dependent Tasks,Зависимые задачи, +Dependent Tasks,Зависит от задач, Depends on Tasks,Зависит от задач, Actual Start Date (via Time Sheet),Фактическая дата начала (по табелю учета рабочего времени), Actual Time (in hours),Фактическое время (в часах), @@ -7532,7 +7470,6 @@ Review Date,Дата проверки, Closing Date,Дата закрытия, Task Depends On,Задача зависит от, Task Type,Тип задачи, -TS-.YYYY.-,TS-.YYYY.-, Employee Detail,Подробности о сотруднике, Billing Details,Платежные реквизиты, Total Billable Hours,Всего человеко-часов, @@ -7598,7 +7535,7 @@ Invoices with no Place Of Supply,Счета без места поставки, Import Supplier Invoice,Импортная накладная поставщика, Invoice Series,Серия счетов, Upload XML Invoices,Загрузить XML-счета, -Zip File,Zip-файл, +Zip File,Zip файл, Import Invoices,Импорт счетов, Click on Import Invoices button once the zip file has been attached to the document. Any errors related to processing will be shown in the Error Log.,"Нажмите кнопку «Импортировать счета-фактуры», когда файл zip прикреплен к документу. Любые ошибки, связанные с обработкой, будут отображаться в журнале ошибок.", Lower Deduction Certificate,Свидетельство о нижнем удержании, @@ -7633,22 +7570,20 @@ Restaurant Order Entry Item,Номер заказа заказа рестора Served,Подается, Restaurant Reservation,Бронирование ресторанов, Waitlisted,Лист ожидания, -No Show,Нет шоу, +No Show,Не показывать, No of People,Нет людей, Reservation Time,Время резервирования, Reservation End Time,Время окончания бронирования, No of Seats,Количество мест, Minimum Seating,Минимальное размещение, "Keep Track of Sales Campaigns. Keep track of Leads, Quotations, Sales Order etc from Campaigns to gauge Return on Investment. ","Следите за кампаниями по продажам. Отслеживайте лиды, предложения, сделки и т.п. от кампаний и оцените отдачу от инвестиций.", -SAL-CAM-.YYYY.-,SAL-CAM-.YYYY.-, Campaign Schedules,Расписание кампаний, Buyer of Goods and Services.,Покупатель товаров и услуг., -CUST-.YYYY.-,CUST-.YYYY.-, Default Company Bank Account,Стандартный банковский счет компании, -From Lead,Из Лида, +From Lead,Из лида, Account Manager,Менеджер по работе с клиентами, -Allow Sales Invoice Creation Without Sales Order,Разрешить создание счета-фактуры без заказа на продажу, -Allow Sales Invoice Creation Without Delivery Note,Разрешить создание счета-фактуры без накладной, +Allow Sales Invoice Creation Without Sales Order,Разрешить создание счета без заказа на продажу, +Allow Sales Invoice Creation Without Delivery Note,Разрешить создание счета без накладной, Default Price List,По умолчанию Прайс-лист, Primary Address and Contact Detail,Первичный адрес и контактная информация, "Select, to make the customer searchable with these fields","Выберите, чтобы сделать поиск клиента с этими полями", @@ -7667,7 +7602,6 @@ Customer POS id,Идентификатор POS клиента, Customer Credit Limit,Кредитный лимит клиента, Bypass Credit Limit Check at Sales Order,Обход проверки кредитного лимита по Сделке, Industry Type,Тип индустрии, -MAT-INS-.YYYY.-,MAT-INS-.YYYY.-, Installation Date,Дата установки, Installation Time,Время установки, Installation Note Item,Установка примечаний к продукту, @@ -7678,16 +7612,15 @@ Period End Date,Дата окончания периода, Cashier,Касса, Difference,Разница, Modes of Payment,Способы оплаты, -Linked Invoices,Связанные счета-фактуры, +Linked Invoices,Связанные счета, POS Closing Voucher Details,Информация о закрытии ваучера POS, Collected Amount,Собранная сумма, Expected Amount,Ожидаемая сумма, -POS Closing Voucher Invoices,Счета-фактуры закрытых ваучеров, +POS Closing Voucher Invoices,Счета закрытых ваучеров, Quantity of Items,Количество позиций, "Aggregate group of **Items** into another **Item**. This is useful if you are bundling a certain **Items** into a package and you maintain stock of the packed **Items** and not the aggregate **Item**. \n\nThe package **Item** will have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes"".\n\nFor Example: If you are selling Laptops and Backpacks separately and have a special price if the customer buys both, then the Laptop + Backpack will be a new Product Bundle Item.\n\nNote: BOM = Bill of Materials","Собрать группу продуктов в третий продукт. Это полезно когда вы комплектуете определённые продукты в упаковку и ведёте учёт не упаковок, а самих продуктов. Пакетному продукту указывают «Складируемый продукт» — «Нет» и «Продаваемый продукт» — «Да». Для примера: если вы продаете ноутбуки и рюкзаки отдельно, но они имеют специальную цену когда клиент покупает их вместе, тогда «ноутбук+рюкзак» будет пакетным продуктом. Примечание: ВМ = Ведомость материалов (спецификация)", Parent Item,Родительский продукт, List items that form the package.,"Список продуктов, которые формируют пакет", -SAL-QTN-.YYYY.-,SAL-QTN-.YYYY.-, Quotation To,Предложение для, Rate at which customer's currency is converted to company's base currency,"Курс, по которому валюта клиента конвертируется в базовую валюту компании", Rate at which Price list currency is converted to company's base currency,Курс по которому валюта Прайс листа конвертируется в базовую валюту компании, @@ -7699,7 +7632,6 @@ Quotation Item,Продукт Предложения, Against Doctype,Против Типа документа, Against Docname,Против имени документа, Additional Notes,Дополнительные примечания, -SAL-ORD-.YYYY.-,SAL-ORD-.YYYY.-, Skip Delivery Note,Пропустить накладную, In Words will be visible once you save the Sales Order.,"В словах будет видно, как только вы сохраните Сделку.", Track this Sales Order against any Project,Отслеживайте Сделку из любого Проекта, @@ -7736,14 +7668,14 @@ Close Opportunity After Days,"Закрыть Выявление Через, дн Default Quotation Validity Days,"Число дней по умолчанию, в течение которых Предложение действительно", Sales Update Frequency,Частота обновления продаж, Each Transaction,Каждая транзакция, -SMS Center,СМС-центр, +SMS Center,SMS-центр, Send To,Отправить, All Contact,Всем контактам, All Customer Contact,Контакты всех клиентов, All Supplier Contact,Всем контактам поставщиков, All Sales Partner Contact,Всем контактам торговых партнеров, -All Lead (Open),Всем лидам (Созданным), -All Employee (Active),Всем сотрудникам (Активным), +All Lead (Open),Всем лидам (Открыт), +All Employee (Active),Всем сотрудникам (Активный), All Sales Person,Всем продавцам, Create Receiver List,Создать список получателей, Receiver List,Список получателей, @@ -7792,7 +7724,7 @@ Exchange Gain / Loss Account,Обмен Прибыль / убытках, Unrealized Exchange Gain/Loss Account,Нереализованная учетная ставка по обмену / убытку, Allow Account Creation Against Child Company,Разрешить создание аккаунта против дочерней компании, Default Payable Account,По умолчанию оплачивается аккаунт, -Default Employee Advance Account,Default Advance Account, +Default Employee Advance Account,Авансовый счет сотрудника по умолчанию, Default Cost of Goods Sold Account,По умолчанию Себестоимость проданных товаров счет, Default Income Account,Счет дохода по умолчанию, Default Deferred Revenue Account,По умолчанию отложенная учетная запись, @@ -7818,14 +7750,14 @@ Phone No,Номер телефона, Company Description,Описание компании, Registration Details,Регистрационные данные, Company registration numbers for your reference. Tax numbers etc.,Регистрационные номера компании для вашей справки. Налоговые числа и т.д., -Delete Company Transactions,Удалить Сделки Компания, +Delete Company Transactions,Удалить транзакции компании, Currency Exchange,Курс обмена валюты, Specify Exchange Rate to convert one currency into another,Укажите Курс конвертировать одну валюту в другую, From Currency,Из валюты, To Currency,В валюту, For Buying,Для покупки, For Selling,Для продажи, -Customer Group Name,Группа Имя клиента, +Customer Group Name,Название группы клиентов, Parent Customer Group,Родительская группа клиента, Only leaf nodes are allowed in transaction,Только листовые узлы допускаются в сделке, Mention if non-standard receivable account applicable,Упоминание если нестандартная задолженность счет применимо, @@ -7871,11 +7803,11 @@ Disable In Words,Отключить в словах, "If disable, 'In Words' field will not be visible in any transaction","Если отключить, "В словах" поле не будет видно в любой сделке", Item Classification,Продуктовая классификация, General Settings,Основные настройки, -Item Group Name,Пункт Название группы, -Parent Item Group,Родитель Пункт Группа, +Item Group Name,Название группы продуктов, +Parent Item Group,Родительская группа продукта, Item Group Defaults,Элемент группы по умолчанию, Item Tax,Налог на продукт, -Check this if you want to show in website,"Проверьте это, если вы хотите показать в веб-сайт", +Check this if you want to show in website,"Установите этот флажок, если вы хотите показывать на веб-сайте", Show this slideshow at the top of the page,Показать этот слайд-шоу в верхней части страницы, HTML / Banner that will show on the top of product list.,HTML / Баннер который будет отображаться в верхней части списка продуктов., Set prefix for numbering series on your transactions,Установить префикс для идентификаторов по номеру в ваших транзакциях, @@ -7890,10 +7822,10 @@ Change the starting / current sequence number of an existing series.,Измен Prefix,Префикс, Current Value,Текущее значение, This is the number of the last created transaction with this prefix,Это число последнего созданного сделки с этим префиксом, -Update Series Number,Обновить Идентификаторы по Номеру, +Update Series Number,Обновить серийный номер, Quotation Lost Reason,Причина Отказа от Предложения, A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.,"Сторонний дистрибьютер, дилер, агент, филиал или реселлер, который продаёт продукты компании за комиссионное вознаграждение.", -Sales Partner Name,Имя Партнера по продажам, +Sales Partner Name,Имя партнера по продажам, Partner Type,Тип партнера, Address & Contacts,Адрес и контакты, Address Desc,Адрес по убыванию, @@ -7914,7 +7846,7 @@ Sales Person Targets,Цели продавца, Set targets Item Group-wise for this Sales Person.,Задайте цели Продуктовых Групп для Продавца, Supplier Group Name,Название группы поставщиков, Parent Supplier Group,Родительская группа поставщиков, -Target Detail,Цель Подробности, +Target Detail,Подробности цели, Target Qty,Целевое количество, Target Amount,Целевая сумма, Target Distribution,Распределение цели, @@ -7968,18 +7900,17 @@ FCFS Rate,Уровень FCFS, Customs Tariff Number,Номер таможенного тарифа, Tariff Number,Тарифный номер, Delivery To,Доставка, -MAT-DN-.YYYY.-,MAT-DN-.YYYY.-, -Is Return,Является Вернуться, +Is Return,Возврат, Issue Credit Note,Кредитная кредитная карта, -Return Against Delivery Note,Вернуться На накладной, -Customer's Purchase Order No,Клиентам Заказ Нет, -Billing Address Name,Адрес для выставления счета Имя, +Return Against Delivery Note,Возврат по накладной, +Customer's Purchase Order No,Заказ клиента №, +Billing Address Name,Название адреса для выставления счета, Required only for sample item.,Требуется только для образца пункта., -"If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.","Если вы создали стандартный шаблон в шаблонах Налоги с налогами и сбором платежей, выберите его и нажмите кнопку ниже.", +"If you have created a standard template in Sales Taxes and Charges Template, select one and click on the button below.","Если вы создали стандартный шаблон в Шаблоне налогов и сборов с продаж, выберите его и нажмите кнопку ниже.", In Words will be visible once you save the Delivery Note.,По словам будет виден только вы сохраните накладной., In Words (Export) will be visible once you save the Delivery Note.,В Слов (Экспорт) будут видны только вы сохраните накладной., Transporter Info,Информация для транспортировки, -Driver Name,Имя драйвера, +Driver Name,Имя водителя, Track this Delivery Note against any Project,Подписка на Delivery Note против любого проекта, Inter Company Reference,Справочник Интер, Print Without Amount,Распечатать без суммы, @@ -7989,8 +7920,8 @@ Installation Status,Состояние установки, Excise Page Number,Количество Акцизный Страница, Instructions,Инструкции, From Warehouse,Со склада, -Against Sales Order,По Сделке, -Against Sales Order Item,По Продукту Сделки, +Against Sales Order,По сделке, +Against Sales Order Item,По позиции сделки, Against Sales Invoice,Повторная накладная, Against Sales Invoice Item,Счет на продажу продукта, Available Batch Qty at From Warehouse,Доступные Пакетная Кол-во на со склада, @@ -8006,11 +7937,10 @@ Delivery Stop,Остановить доставку, Lock,Заблокировано, Visited,Посещен, Order Information,запросить информацию, -Contact Information,Контакты, +Contact Information,Контактная информация, Email sent to,Письмо отправлено, Dispatch Information,Информация о доставке, Estimated Arrival,Ожидаемое прибытие, -MAT-DT-.YYYY.-,MAT-DT-.YYYY.-, Initial Email Notification Sent,Исходящее уведомление по электронной почте отправлено, Delivery Details,Подробности доставки, Driver Email,Электронная почта водителя, @@ -8026,7 +7956,6 @@ Use Google Maps Direction API to optimize route,Используйте API Googl In Transit,Доставляется, Fulfillment User,Пользователь выполнения, "A Product or a Service that is bought, sold or kept in stock.","Продукт или услуга, которая покупается, продается, или хранится на складе.", -STO-ITEM-.YYYY.-,STO-ITEM-.YYYY.-, Variant Of,Вариант, "If item is a variant of another item then description, image, pricing, taxes etc will be set from the template unless explicitly specified","Если продукт — вариант другого продукта, то описание, изображение, цена, налоги и т. д., будут установлены из шаблона, если не указано другое", Is Item from Hub,Продукт из концентратора, @@ -8079,7 +8008,7 @@ Delivered by Supplier (Drop Ship),Доставка поставщиком, Supplier Items,Продукты поставщика, Foreign Trade Details,Сведения о внешней торговле, Country of Origin,Страна происхождения, -Sales Details,Продажи Подробности, +Sales Details,Детали продажи, Default Sales Unit of Measure,Единица измерения продаж по умолчанию, Is Sales Item,Продаваемый продукт, Max Discount (%),Макс. скидка (%), @@ -8117,9 +8046,9 @@ Item Alternative,Альтернативный продукт, Alternative Item Code,Альтернативный код продукта, Two-way,Двусторонний, Alternative Item Name,Альтернативное название продукта, -Attribute Name,Имя атрибута, +Attribute Name,Название атрибута, Numeric Values,Числовые значения, -From Range,От хребта, +From Range,Из диапазона, Increment,Приращение, To Range,В диапазоне, Item Attribute Values,Пункт значений атрибутов, @@ -8129,8 +8058,6 @@ Abbreviation,Аббревиатура, "This will be appended to the Item Code of the variant. For example, if your abbreviation is ""SM"", and the item code is ""T-SHIRT"", the item code of the variant will be ""T-SHIRT-SM""","Это будет добавлена в Кодекс пункта варианте. Например, если ваш аббревиатура ""SM"", и код деталь ""Футболка"", код товара из вариантов будет ""T-Shirt-SM""", Item Barcode,Штрих-код продукта, Barcode Type,Тип штрих-кода, -EAN,EAN, -UPC-A,UPC-A, Item Customer Detail,Пункт Детальное клиентов, "For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes","Для удобства клиентов, эти коды могут быть использованы в печатных формах документов, таких как Счета и Документы Отгрузки", Ref Code,Код ссылки, @@ -8141,7 +8068,7 @@ Default Supplier,Поставщик по умолчанию, Default Expense Account,Счет учета затрат по умолчанию, Sales Defaults,По умолчанию, Default Selling Cost Center,По умолчанию Продажа Стоимость центр, -Item Manufacturer,Пункт Производитель, +Item Manufacturer,Производитель товара, Item Price,Цена продукта, Packing Unit,Упаковочный блок, Quantity that must be bought or sold per UOM,"Количество, которое необходимо купить или продать за UOM", @@ -8170,30 +8097,27 @@ Purchase Receipt Item,Покупка Получение товара, Landed Cost Purchase Receipt,Посадка стоимости покупки Квитанция, Landed Cost Taxes and Charges,Landed Стоимость Налоги и сборы, Landed Cost Voucher,Талон складской стоимости, -MAT-LCV-.YYYY.-,MAT-LCV-.YYYY.-, Purchase Receipts,Покупка Поступления, Purchase Receipt Items,Покупка продуктов, Get Items From Purchase Receipts,Получить продукты из покупки., Distribute Charges Based On,Распределите платежи на основе, -Landed Cost Help,Земельные Стоимость Помощь, +Landed Cost Help,Справка по стоимости доставки, Manufacturers used in Items,Производители использовали в пунктах, Limited to 12 characters,Ограничено до 12 символов, -MAT-MR-.YYYY.-,МАТ-MR-.YYYY.-, Partially Ordered,Частично заказано, Transferred,Переданы, % Ordered,% заказано, Terms and Conditions Content,Условия Содержимое, Quantity and Warehouse,Количество и Склад, -Lead Time Date,Время и Дата Лида, -Min Order Qty,Минимальный заказ Кол-во, +Lead Time Date,Дата выполнения заказа, +Min Order Qty,Минимальное количество для заказа, Packed Item,Упаковано, To Warehouse (Optional),На склад (Необязательно), Actual Batch Quantity,Фактическое количество партий, Prevdoc DocType,Prevdoc DocType, -Parent Detail docname,Родитель Деталь DOCNAME, +Parent Detail docname,Сведения о родителе docname, "Generate packing slips for packages to be delivered. Used to notify package number, package contents and its weight.","Создаёт упаковочные листы к упаковкам для доставки. Содержит номер упаковки, перечень содержимого и вес.", Indicates that the package is a part of this delivery (Only Draft),"Указывает, что пакет является частью этой поставки (только проект)", -MAT-PAC-.YYYY.-,MAT-PAC-.YYYY.-, From Package No.,Номер упаковки, Identification of the package for the delivery (for print),Идентификация упаковки для доставки (для печати), To Package No.,Номер пакета, @@ -8206,7 +8130,6 @@ The gross weight of the package. Usually net weight + packaging material weight. Gross Weight UOM,Вес брутто единицы, Packing Slip Item,Строка упаковочного листа, DN Detail,DN Деталь, -STO-PICK-.YYYY.-,STO-PICK-.YYYY.-, Material Transfer for Manufacture,Материал Передача для производства, Qty of raw materials will be decided based on the qty of the Finished Goods Item,Количество сырья будет определяться на основе количества готовой продукции, Parent Warehouse,Родитель склад, @@ -8219,8 +8142,7 @@ Price List Master,Прайс-лист Мастер, Price List Name,Название прайс-листа, Price Not UOM Dependent,Цена не зависит от UOM, Applicable for Countries,Применимо для стран, -Price List Country,Цены Страна, -MAT-PRE-.YYYY.-,MAT-PRE-.YYYY.-, +Price List Country,Прайс лист страны, Supplier Delivery Note,Доставочный лист, Time at which materials were received,Время получения материалов, Return Against Purchase Receipt,Вернуться Против покупки получении, @@ -8236,12 +8158,11 @@ Transporter Details,Детали транспорта, Vehicle Number,Номер транспортного средства, Vehicle Date,Дата транспортного средства, Received and Accepted,Получил и принял, -Accepted Quantity,Принято Количество, -Rejected Quantity,Отклонен Количество, +Accepted Quantity,Количество принятых, +Rejected Quantity,Количество отклоненных, Accepted Qty as per Stock UOM,Принятое количество в соответствии с единицами измерения запаса, Sample Quantity,Количество образцов, Rate and Amount,Ставку и сумму, -MAT-QA-.YYYY.-,MAT-QA-.YYYY.-, Report Date,Дата отчета, Inspection Type,Тип контроля, Item Serial No,Серийный номер продукта, @@ -8284,8 +8205,7 @@ Under AMC,Под КУА, Out of AMC,Из КУА, Warranty Period (Days),Гарантийный срок (дней), Serial No Details,Серийный номер подробнее, -MAT-STE-.YYYY.-,MAT-STE-.YYYY.-, -Stock Entry Type,Тип входа, +Stock Entry Type,Тип складской записи, Stock Entry (Outward GIT),Вход в акции (внешний GIT), Material Consumption for Manufacture,Потребление материала для производства, Repack,Перепаковать, @@ -8302,7 +8222,7 @@ Default Source Warehouse,По умолчанию склад сырья, Source Warehouse Address,Адрес источника склада, Default Target Warehouse,Цель по умолчанию Склад, Target Warehouse Address,Адрес целевого склада, -Update Rate and Availability,Скорость обновления и доступность, +Update Rate and Availability,Обновить стоимость и доступность, Total Incoming Value,Всего входное значение, Total Outgoing Value,Всего исходящее значение, Total Value Difference (Out - In),Общая стоимость Разница (Out - In), @@ -8326,11 +8246,10 @@ Stock Ledger Entry,Записи в остатках, Outgoing Rate,Исходящие Оценить, Actual Qty After Transaction,Остаток после проведения, Stock Value Difference,Расхождение стоимости запасов, -Stock Queue (FIFO),Фото со Очередь (FIFO), -Is Cancelled,Является Отмененные, +Stock Queue (FIFO),Очередь запасов (FIFO), +Is Cancelled,Является отмененным, Stock Reconciliation,Инвентаризация запасов, This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.,"Этот инструмент поможет вам обновить или исправить количество и оценку запасов в системе. Это, как правило, используется для синхронизации системных значений и то, что на самом деле существует в ваших складах.", -MAT-RECO-.YYYY.-,MAT-RECO-.YYYY.-, Reconciliation JSON,Примирение JSON, Stock Reconciliation Item,Товар с Сверки Запасов, Before reconciliation,Перед примирения, @@ -8351,7 +8270,7 @@ Automatically Set Serial Nos based on FIFO,Автоматически устан Auto Material Request,Автоматический запрос материалов, Inter Warehouse Transfer Settings,Настройки передачи между складами, Freeze Stock Entries,Замораживание поступления запасов, -Stock Frozen Upto,остатки заморожены до, +Stock Frozen Upto,Остатки заморожены до, Batch Identification,Идентификация партии, Use Naming Series,Использовать серийный номер, Naming Series Prefix,Префикс Идентификации по Имени, @@ -8362,15 +8281,13 @@ A logical Warehouse against which stock entries are made.,"Логический Warehouse Detail,Подробности склада, Warehouse Name,Название склада, Warehouse Contact Info,Контактная информация склада, -PIN,PIN, -ISS-.YYYY.-,ISS-.YYYY.-, Raised By (Email),Создал (Email), Issue Type,Тип вопроса, Issue Split From,Выпуск Сплит От, Service Level,Уровень обслуживания, Response By,Ответ от, Response By Variance,Ответ по отклонениям, -Ongoing,постоянный, +Ongoing,Постоянный, Resolution By,Разрешение по, Resolution By Variance,Разрешение по отклонениям, Service Level Agreement Creation,Создание соглашения об уровне обслуживания, @@ -8423,7 +8340,6 @@ Get Latest Query,Получить последний запрос, Response Key List,Список ключевых слов ответа, Post Route Key,Ключ почтового маршрута, Search APIs,Поиск API, -SER-WRN-.YYYY.-,SER-ПРПЖД-.YYYY.-, Issue Date,Дата запроса, Item and Warranty Details,Продукт и гарантийные условия, Warranty / AMC Status,Гарантия / АМК Статус, @@ -8433,7 +8349,7 @@ If different than customer address,Если отличается от адрес Raised By,Создал, From Company,От компании, Rename Tool,Переименование файлов, -Utilities,Инженерное оборудование, +Utilities,Утилиты, Type of document to rename.,"Вид документа, переименовать.", File to Rename,Файл Переименовать, "Attach .csv file with two columns, one for the old name and one for the new name","Прикрепите файл .csv с двумя колоннами, одна для старого имени и одина для нового названия", @@ -8447,7 +8363,7 @@ No of Sent SMS,Кол-во отправленных SMS, Sent To,Отправить, Absent Student Report,Отчет о пропуске занятия, Assessment Plan Status,Статус плана оценки, -Asset Depreciation Ledger,Износ Леджер активов, +Asset Depreciation Ledger,Книга амортизации основных средств, Asset Depreciations and Balances,Активов Амортизация и противовесов, Available Stock for Packing Items,Доступные Запасы для Комплектации Продуктов, Bank Clearance Summary,Банк уплата по счетам итого, @@ -8472,7 +8388,6 @@ Customer-wise Item Price,Цена товара для клиента, Customers Without Any Sales Transactions,Клиенты без каких-либо транзакций с продажами, Daily Timesheet Summary,Сводный табель по дням, Daily Work Summary Replies,Ответы на ежедневную работу, -DATEV,DATEV, Delayed Item Report,Отчет по отложенному пункту, Delayed Order Report,Отчет по отложенному заказу, Delivered Items To Be Billed,"Поставленные товары, на которые нужно выписать счет", @@ -8505,15 +8420,15 @@ IRS 1099,IRS 1099, Issued Items Against Work Order,Продукты выпущенные под заказ, Projected Quantity as Source,Планируемое количество как источник, Item Balance (Simple),Остаток продукта (простой), -Item Price Stock,Цена товара, +Item Price Stock,Стоимость продукта на складе, Item Prices,Цены продукта, Item Shortage Report,Отчет о нехватке продуктов, Item Variant Details,Подробности модификации продукта, Item-wise Price List Rate,Цена продукта в прайс-листе, -Item-wise Purchase History,Пункт мудрый История покупок, -Item-wise Purchase Register,Пункт мудрый Покупка Зарегистрироваться, -Item-wise Sales History,История продаж продуктов, -Item-wise Sales Register,Пункт мудрый Продажи Зарегистрироваться, +Item-wise Purchase History,История покупок по продуктам, +Item-wise Purchase Register,Реестр покупок по продуктам, +Item-wise Sales History,История продаж по продуктам, +Item-wise Sales Register,Реестр продаж по продуктам, Items To Be Requested,Запрашиваемые продукты, Reserved,Зарезервировано, Itemwise Recommended Reorder Level,Рекомендация пополнения уровня продукта, @@ -8540,11 +8455,11 @@ Project wise Stock Tracking,Отслеживание запасов по про Project wise Stock Tracking ,Отслеживание затрат по проектам, Prospects Engaged But Not Converted,"Перспективные, но не работающие", Purchase Analytics,Аналитика поставок, -Purchase Invoice Trends,Счета-фактуры Тенденции, +Purchase Invoice Trends,Тенденции на закупки, Qty to Receive,Кол-во на получение, Received Qty Amount,Полученная Кол-во Сумма, Billed Qty,Кол-во, -Purchase Order Trends,Заказ на покупку Тенденции, +Purchase Order Trends,Тенденции закупок, Purchase Receipt Trends,Динамика Получения Поставок, Purchase Register,Покупка Становиться на учет, Quotation Trends,Динамика предложений, @@ -8554,12 +8469,12 @@ Requested Items To Be Transferred,Запрашиваемые продукты к Qty to Transfer,Кол-во для передачи, Salary Register,Доход Регистрация, Sales Analytics,Аналитика продаж, -Sales Invoice Trends,Расходная накладная тенденции, -Sales Order Trends,Динамика по Сделкам, +Sales Invoice Trends,Тенденции по расходам, +Sales Order Trends,Динамика по сделкам, Sales Partner Commission Summary,Сводка комиссий партнеров по продажам, Sales Partner Target Variance based on Item Group,Целевое отклонение партнера по продажам на основе группы товаров, Sales Partner Transaction Summary,Сводка по сделкам с партнерами по продажам, -Sales Partners Commission,Комиссионные Партнеров по продажам, +Sales Partners Commission,Комиссия партнеров по продажам, Invoiced Amount (Exclusive Tax),Сумма счета (без учета налога), Average Commission Rate,Средний уровень комиссии, Sales Payment Summary,Сводка по продажам, @@ -8579,7 +8494,7 @@ Student Fee Collection,Сбор студенческой платы, Student Monthly Attendance Sheet,Ежемесячная посещаемость студентов, Subcontracted Item To Be Received,"Субподрядный предмет, подлежащий получению", Subcontracted Raw Materials To Be Transferred,Субподрядное сырье для передачи, -Supplier Ledger Summary,Список поставщиков, +Supplier Ledger Summary,Сводка книги поставщиков, Supplier-Wise Sales Analytics,Аналитика продаж в разрезе поставщиков, Support Hour Distribution,Распределение поддержки, TDS Computation Summary,Сводка расчетов TDS, @@ -8684,7 +8599,6 @@ If this is unchecked Journal Entries will be saved in a Draft state and will hav Enable Distributed Cost Center,Включить центр распределенных затрат, Distributed Cost Center,Центр распределенных затрат, Dunning,Даннинг, -DUNN-.MM.-.YY.-,DUNN-.MM.-.YY.-, Overdue Days,Просроченные дни, Dunning Type,Тип напоминания, Dunning Fee,Плата за напоминание, @@ -8714,12 +8628,11 @@ POS Closing Entry Detail,Информация о закрытии входа в Opening Amount,Начальная сумма, Closing Amount,Заключительная сумма, POS Closing Entry Taxes,Налоги на вход при закрытии торговых точек, -POS Invoice,Счет-фактура POS, -ACC-PSINV-.YYYY.-,ACC-PSINV-.YYYY.-, -Consolidated Sales Invoice,Консолидированный счет-фактура продажи, +POS Invoice,Счет POS, +Consolidated Sales Invoice,Консолидированный счет продажи, Return Against POS Invoice,Возврат по счету POS, Consolidated,Консолидированный, -POS Invoice Item,Позиция счета-фактуры POS, +POS Invoice Item,Позиция счета POS, POS Invoice Merge Log,Журнал слияния счетов POS, POS Invoices,Счета POS, Consolidated Credit Note,Консолидированная кредитная нота, @@ -8747,7 +8660,6 @@ Billing Email,Электронная почта для выставления с Primary Contact Email,Основной контактный адрес электронной почты, PSOA Cost Center,Центр затрат PSOA, PSOA Project,Проект PSOA, -ACC-PINV-RET-.YYYY.-,ACC-PINV-RET-.YYYY.-, Supplier GSTIN,Поставщик GSTIN, Place of Supply,Место поставки, Select Billing Address,Выберите адрес для выставления счета, @@ -8774,7 +8686,7 @@ Reason For Issuing document,Причина выдачи документа, 01-Sales Return,01-Возврат продажи, 02-Post Sale Discount,02-Скидка после продажи, 03-Deficiency in services,03-Дефицит услуг, -04-Correction in Invoice,04-Исправление в счете-фактуре, +04-Correction in Invoice,04-Исправление в счете, 05-Change in POS,05-Изменение в POS, 06-Finalization of Provisional assessment,06-Завершение предварительной оценки, 07-Others,07-другие, @@ -8790,9 +8702,8 @@ Availed ITC State/UT Tax,Получил налог штата ITC / UT, Availed ITC Cess,Получил ITC Cess, Is Nil Rated or Exempted,Имеет нулевую оценку или освобожден от уплаты налогов, Is Non GST,Без НДС, -ACC-SINV-RET-.YYYY.-,ACC-SINV-RET-.YYYY.-, E-Way Bill No.,E-Way Bill No., -Is Consolidated,Консолидируется, +Is Consolidated,Консолидировано, Billing Address GSTIN,Платежный адрес GSTIN, Customer GSTIN,Клиент GSTIN, GST Transporter ID,GST Transporter ID, @@ -8806,12 +8717,12 @@ Over Dimensional Cargo (ODC),Негабаритный груз (ODC), Consumer,Потребитель, Deemed Export,Предполагаемый экспорт, Port Code,Код порта, - Shipping Bill Number,Номер накладной, + Shipping Bill Number, Номер накладной, Shipping Bill Date,Дата доставки счета, Subscription End Date,Дата окончания подписки, Follow Calendar Months,Следите за календарными месяцами, If this is checked subsequent new invoices will be created on calendar month and quarter start dates irrespective of current invoice start date,"Если этот флажок установлен, последующие новые счета будут создаваться в даты начала календарного месяца и квартала независимо от даты начала текущего счета.", -Generate New Invoices Past Due Date,Создание просроченных новых счетов-фактур, +Generate New Invoices Past Due Date,Создание просроченных новых счетов, New invoices will be generated as per schedule even if current invoices are unpaid or past due date,"Новые счета будут генерироваться в соответствии с графиком, даже если текущие счета не оплачены или просрочены.", Document Type ,Тип документа , Subscription Price Based On,Цена подписки на основе, @@ -8838,28 +8749,27 @@ Request For Quotation,Запрос коммерческого предложен Opportunity Lost Reason Detail,Подробная информация о причине потери возможности, Access Token Secret,Секрет токена доступа, Add to Topics,Добавить в темы, -...Adding Article to Topics,... Добавление статьи в темы, +...Adding Article to Topics,...Добавление статьи в темы, Add Article to Topics,Добавить статью в темы, This article is already added to the existing topics,Эта статья уже добавлена в существующие темы, Add to Programs,Добавить в программы, Programs,Программы, -...Adding Course to Programs,... Добавление курса в программы, +...Adding Course to Programs,...Добавление курса в программы, Add Course to Programs,Добавить курс в программы, This course is already added to the existing programs,Этот курс уже добавлен в существующие программы, Learning Management System Settings,Настройки системы управления обучением, Enable Learning Management System,Включить систему управления обучением, Learning Management System Title,Название системы управления обучением, -...Adding Quiz to Topics,... Добавление викторины к темам, +...Adding Quiz to Topics,...Добавление викторины к темам, Add Quiz to Topics,Добавить тест к темам, This quiz is already added to the existing topics,Этот тест уже добавлен в существующие темы, Enable Admission Application,Включить заявку на поступление, -EDU-ATT-.YYYY.-,EDU-ATT-.YYYY.-, Marking attendance,Отметка посещаемости, Add Guardians to Email Group,Добавить опекунов в группу электронной почты, Attendance Based On,Посещаемость на основе, Check this to mark the student as present in case the student is not attending the institute to participate or represent the institute in any event.\n\n,"Установите этот флажок, чтобы отметить студента как присутствующего на случай, если он не посещает институт для участия или представления института в любом случае.", Add to Courses,Добавить в курсы, -...Adding Topic to Courses,... Добавление темы в курсы, +...Adding Topic to Courses,...Добавление темы в курсы, Add Topic to Courses,Добавить тему в курсы, This topic is already added to the existing courses,Эта тема уже добавлена в существующие курсы, "If Shopify does not have a customer in the order, then while syncing the orders, the system will consider the default customer for the order","Если Shopify не имеет клиента в заказе, то при синхронизации заказов система будет рассматривать клиента по умолчанию для заказа.", @@ -8886,7 +8796,7 @@ Practitioner Name,Имя практикующего, Enter a name for the Clinical Procedure Template,Введите имя для шаблона клинической процедуры, Set the Item Code which will be used for billing the Clinical Procedure.,"Установите код товара, который будет использоваться для выставления счета за клиническую процедуру.", Select an Item Group for the Clinical Procedure Item.,Выберите группу элементов для элемента клинической процедуры., -Clinical Procedure Rate,Скорость клинической процедуры, +Clinical Procedure Rate,Стоимость клинической процедуры, Check this if the Clinical Procedure is billable and also set the rate.,"Отметьте это, если клиническая процедура оплачивается, а также установите ставку.", Check this if the Clinical Procedure utilises consumables. Click ,"Проверьте это, если в клинической процедуре используются расходные материалы. Нажмите", to know more,узнать больше, @@ -8929,7 +8839,6 @@ Processing Inpatient Discharge,Обработка выписки из стаци Processing Patient Admission,Обработка поступления пациента, Check-in time cannot be greater than the current time,Время заезда не может быть больше текущего времени., Process Transfer,Передача процесса, -HLC-LAB-.YYYY.-,HLC-LAB-.YYYY.-, Expected Result Date,Ожидаемая дата результата, Expected Result Time,Ожидаемое время результата, Printed on,Напечатано на, @@ -8986,7 +8895,6 @@ Sample Details,Детали образца, Collected On,Собран, No. of prints,Кол-во отпечатков, Number of prints required for labelling the samples,"Количество отпечатков, необходимое для маркировки образцов", -HLC-VTS-.YYYY.-,HLC-VTS-.YYYY.-, In Time,Во время, Out Time,Время выхода, Payroll Cost Center,Расчетный центр, @@ -9012,7 +8920,6 @@ Template Item,Элемент шаблона, Select template item,Выберите элемент шаблона, Select variant item code for the template item {0},Выберите вариант кода товара для шаблона товара {0}, Downtime Entry,Запись о простоях, -DT-,DT-, Workstation / Machine,Рабочее место / машина, Operator,Оператор, In Mins,В минутах, @@ -9045,9 +8952,9 @@ Send Membership Acknowledgement,Отправить подтверждение ч Send Invoice with Email,Отправить счет по электронной почте, Membership Print Format,Формат печати членства, Invoice Print Format,Формат печати счета, -Revoke ,Отозвать<Key></Key>, +Revoke ,Отозвать , You can learn more about memberships in the manual. ,Вы можете узнать больше о членстве в руководстве., -ERPNext Docs,ERPСледующие документы, +ERPNext Docs,Документы ERPNext, Regenerate Webhook Secret,Восстановить секрет веб-перехватчика, Generate Webhook Secret,Создать секрет веб-перехватчика, Copy Webhook URL,Скопировать URL-адрес веб-перехватчика, @@ -9065,7 +8972,7 @@ Rented To Date,Сдано на дату, Monthly Eligible Amount,Ежемесячная приемлемая сумма, Total Eligible HRA Exemption,Полное соответствие требованиям HRA, Validating Employee Attendance...,Проверка явки сотрудников..., -Submitting Salary Slips and creating Journal Entry...,Отправка ведомостей о заработной плате и создание записи в журнале ..., +Submitting Salary Slips and creating Journal Entry...,Утверждение ведомостей о заработной плате и создание записи в журнале ..., Calculate Payroll Working Days Based On,Расчет рабочих дней для расчета заработной платы на основе, Consider Unmarked Attendance As,Считайте неотмеченную посещаемость как, Fraction of Daily Salary for Half Day,Доля дневной заработной платы за полдня, @@ -9080,7 +8987,7 @@ Additional Salary ,Дополнительная зарплата , Unmarked days,Неотмеченные дни, Absent Days,Отсутствующие дни, Conditions and Formula variable and example,"Условия и формула, переменная и пример", -Feedback By,Отзыв Автор, +Feedback By,Отзыв от, Manufacturing Section,Производственный отдел, "By default, the Customer Name is set as per the Full Name entered. If you want Customers to be named by a ","По умолчанию имя клиента устанавливается в соответствии с введенным полным именем. Если вы хотите, чтобы имена клиентов", Configure the default Price List when creating a new Sales transaction. Item prices will be fetched from this Price List.,Настройте прайс-лист по умолчанию при создании новой транзакции продаж. Цены на товары будут взяты из этого прейскуранта., @@ -9097,17 +9004,15 @@ Please enter the company name to confirm,"Пожалуйста, введите Quotation Lost Reason Detail,Расценки на потерю причины, Enable Variants,Включить варианты, Save Quotations as Draft,Сохранить предложения как черновик, -MAT-DN-RET-.YYYY.-,MAT-DN-RET-.YYYY.-, Please Select a Customer,"Пожалуйста, выберите клиента", Against Delivery Note Item,Против позиции накладной, Is Non GST ,Без НДС , Image Description,Описание изображения, Transfer Status,Статус передачи, -MAT-PR-RET-.YYYY.-,MAT-PR-RET-.YYYY.-, Track this Purchase Receipt against any Project,Отслеживайте эту квитанцию о покупке для любого проекта, Please Select a Supplier,"Пожалуйста, выберите поставщика", Add to Transit,Добавить в общественный транспорт, -Set Basic Rate Manually,Установить базовую скорость вручную, +Set Basic Rate Manually,Установить базовую стоимость вручную, "By default, the Item Name is set as per the Item Code entered. If you want Items to be named by a ","По умолчанию имя элемента устанавливается в соответствии с введенным кодом элемента. Если вы хотите, чтобы элементы назывались", Set a Default Warehouse for Inventory Transactions. This will be fetched into the Default Warehouse in the Item master.,Установите склад по умолчанию для складских операций. Он будет загружен в Хранилище по умолчанию в мастере предметов., "This will allow stock items to be displayed in negative values. Using this option depends on your use case. With this option unchecked, the system warns before obstructing a transaction that is causing negative stock.","Это позволит отображать товары на складе с отрицательными значениями. Использование этой опции зависит от вашего варианта использования. Если этот параметр не отмечен, система предупреждает, прежде чем препятствовать транзакции, вызывающей отрицательный запас.", @@ -9204,9 +9109,8 @@ Income Tax Component,Компонент налога на прибыль, Income Tax Amount,Сумма подоходного налога, Reserved Quantity for Production,Зарезервированное количество для производства, Projected Quantity,Прогнозируемое количество, - Total Sales Amount,Общая сумма продаж, + Total Sales Amount, Общая сумма продаж, Job Card Summary,Сводка карточки вакансии, -Id,Id, Time Required (In Mins),Требуемое время (в минутах), From Posting Date,С даты публикации, To Posting Date,До даты публикации, @@ -9242,7 +9146,7 @@ Tasks Completed,Задачи выполнены, Tasks Overdue,Просроченные задачи, Completion,Завершение, Provident Fund Deductions,Отчисления в резервный фонд, -Purchase Order Analysis,Анализ заказа на закупку, +Purchase Order Analysis,Анализ заказов на закупку, From and To Dates are required.,Укажите даты от и до., To Date cannot be before From Date.,Дата не может быть раньше даты начала., Qty to Bill,Кол-во к счету, @@ -9250,7 +9154,7 @@ Group by Purchase Order,Группировать по заказу на поку Purchase Value,Стоимость покупки, Total Received Amount,Общая полученная сумма, Quality Inspection Summary,Резюме проверки качества, - Quoted Amount,Заявленная сумма, + Quoted Amount, Заявленная сумма, Lead Time (Days),Время выполнения (дни), Include Expired,Включить срок действия истек, Recruitment Analytics,Аналитика набора персонала, @@ -9267,7 +9171,7 @@ Sales Order Analysis,Анализ заказов на продажу, Amount Delivered,Сумма доставки, Delay (in Days),Задержка (в днях), Group by Sales Order,Группировать по заказу на продажу, - Sales Value,Объем продаж, + Sales Value, Объем продаж, Stock Qty vs Serial No Count,Кол-во на складе по сравнению с серийным номером, Serial No Count,Серийный номер, Work Order Summary,Сводка заказа на работу, @@ -9311,7 +9215,7 @@ Invalid Credentials,Неверные учетные данные, URL can only be a string,URL может быть только строкой, "Here is your webhook secret, this will be shown to you only once.","Вот ваш секрет веб-перехватчика, он будет показан вам только один раз.", The payment for this membership is not paid. To generate invoice fill the payment details,Плата за это членство не взимается. Для создания счета заполните платежные реквизиты, -An invoice is already linked to this document,Счет-фактура уже привязана к этому документу, +An invoice is already linked to this document,Счет уже привязан к этому документу, No customer linked to member {},Ни один клиент не связан с участником {}, You need to set Debit Account in Membership Settings,Вам необходимо установить дебетовую учетную запись в настройках членства, You need to set Default Company for invoicing in Membership Settings,Вам необходимо указать компанию по умолчанию для выставления счетов в настройках членства., @@ -9320,9 +9224,9 @@ Error creating membership entry for {0},Ошибка создания запис A customer is already linked to this Member,Клиент уже привязан к этому участнику, End Date must not be lesser than Start Date,Дата окончания не должна быть меньше даты начала., Employee {0} already has Active Shift {1}: {2},Сотрудник {0} уже имеет активную смену {1}: {2}, - from {0},от {0}, - to {0},в {0}, -Please select Employee first.,"Пожалуйста, сначала выберите Сотрудник.", + from {0}, от {0}, + to {0}, в {0}, +Please select Employee first.,"Пожалуйста, сначала выберите сотрудника.", Please set {0} for the Employee or for Department: {1},Установите {0} для сотрудника или отдела: {1}, To Date should be greater than From Date,"Дата до должна быть больше, чем Дата", Employee Onboarding: {0} is already for Job Applicant: {1},Прием на работу сотрудника: {0} уже для соискателя: {1}, @@ -9335,7 +9239,7 @@ Asset Value Analytics,Аналитика стоимости активов, Category-wise Asset Value,Стоимость актива по категориям, Total Assets,Итого активы, New Assets (This Year),Новые активы (в этом году), -Row #{}: Depreciation Posting Date should not be equal to Available for Use Date.,Строка № {}: Дата проводки амортизации не должна совпадать с датой доступности для использования., +Row #{}: Depreciation Posting Date should not be equal to Available for Use Date.,Строка №{}: Дата проводки амортизации не должна совпадать с датой доступности для использования., Incorrect Date,Неправильная дата, Invalid Gross Purchase Amount,Неверная сумма покупки брутто, There are active maintenance or repairs against the asset. You must complete all of them before cancelling the asset.,"Активно проводится техническое обслуживание или ремонт актива. Вы должны выполнить их все, прежде чем аннулировать актив.", @@ -9376,14 +9280,14 @@ POS Invoice should have {} field checked.,В счете POS должно быт Invalid Item,Недействительный товар, Row #{}: You cannot add postive quantities in a return invoice. Please remove item {} to complete the return.,"Строка № {}: нельзя добавлять положительные количества в счет-фактуру на возврат. Удалите товар {}, чтобы завершить возврат.", The selected change account {} doesn't belongs to Company {}.,Выбранный аккаунт изменения {} не принадлежит Компании {}., -Atleast one invoice has to be selected.,Необходимо выбрать хотя бы один счет-фактуру., +Atleast one invoice has to be selected.,Необходимо выбрать хотя бы один счет., Payment methods are mandatory. Please add at least one payment method.,"Способы оплаты обязательны. Пожалуйста, добавьте хотя бы один способ оплаты.", Please select a default mode of payment,"Пожалуйста, выберите способ оплаты по умолчанию", You can only select one mode of payment as default,По умолчанию вы можете выбрать только один способ оплаты., Missing Account,Отсутствует аккаунт, Customers not selected.,Клиенты не выбраны., Statement of Accounts,Выписка со счетов, -Ageing Report Based On ,Отчет о старении на основе, +Ageing Report Based On ,Отчет о старении на основе , Please enter distributed cost center,"Пожалуйста, введите распределенное МВЗ", Total percentage allocation for distributed cost center should be equal to 100,Общее процентное распределение для распределенного МВЗ должно быть равно 100., Cannot enable Distributed Cost Center for a Cost Center already allocated in another Distributed Cost Center,"Невозможно включить центр распределенных затрат для центра затрат, уже выделенного в другом центре распределенных затрат", @@ -9394,7 +9298,7 @@ Cost Center Already Allocated in a Distributed Cost Center cannot be converted t Trial Period Start date cannot be after Subscription Start Date,Дата начала пробного периода не может быть позже даты начала подписки, Subscription End Date must be after {0} as per the subscription plan,Дата окончания подписки должна быть позже {0} в соответствии с планом подписки., Subscription End Date is mandatory to follow calendar months,Дата окончания подписки обязательна после календарных месяцев., -Row #{}: POS Invoice {} is not against customer {},Строка № {}: счет-фактура торговой точки {} не выставлен клиенту {}, +Row #{}: POS Invoice {} is not against customer {},Строка № {}: счет торговой точки {} не выставлен клиенту {}, Row #{}: POS Invoice {} is not submitted yet,Строка № {}: Счет POS {} еще не отправлен, Row #{}: POS Invoice {} has been {},Строка № {}: Счет POS {} был {}, No Supplier found for Inter Company Transactions which represents company {0},"Для транзакций между компаниями не найден поставщик, представляющий компанию {0}", @@ -9412,7 +9316,7 @@ Only {0} in Stock for item {1},Только {0} в наличии для тов Please enter a coupon code,"Пожалуйста, введите код купона", Please enter a valid coupon code,"Пожалуйста, введите действительный код купона", Invalid Child Procedure,Недействительная детская процедура, -Import Italian Supplier Invoice.,Импортировать счет-фактуру итальянского поставщика., +Import Italian Supplier Invoice.,Импортировать счет итальянского поставщика., "Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}.","Курс оценки для Предмета {0}, необходим для ведения бухгалтерских записей для {1} {2}.", Here are the options to proceed:,"Вот варианты, чтобы продолжить:", "If the item is transacting as a Zero Valuation Rate item in this entry, please enable 'Allow Zero Valuation Rate' in the {0} Item table.","Если в этой записи предмет используется как предмет с нулевой оценкой, включите параметр «Разрешить нулевую ставку оценки» в таблице предметов {0}.", @@ -9486,10 +9390,10 @@ To date can not be greater than employee's relieving date.,На сегодняш Payroll date can not be greater than employee's relieving date.,Дата расчета не может быть больше даты увольнения сотрудника., Row #{0}: Please enter the result value for {1},Строка № {0}: введите значение результата для {1}, Mandatory Results,Обязательные результаты, -Sales Invoice or Patient Encounter is required to create Lab Tests,Счет-фактура продажи или встреча с пациентом необходимы для создания лабораторных тестов, +Sales Invoice or Patient Encounter is required to create Lab Tests,Счет продажи или встреча с пациентом необходимы для создания лабораторных тестов, Insufficient Data,Недостаточные данные, Lab Test(s) {0} created successfully,Лабораторные тесты {0} успешно созданы, -Test :,Контрольная работа :, +Test :,Тест :, Sample Collection {0} has been created,Коллекция образцов {0} создана, Normal Range: ,Нормальный диапазон:, Row #{0}: Check Out datetime cannot be less than Check In datetime,Строка № {0}: Дата и время выезда не может быть меньше даты и времени выезда., @@ -9504,7 +9408,7 @@ Invalid Quantity,Неверное количество, {0} on {1},{0} в {1}, {0} with {1},{0} с {1}, Appointment Confirmation Message Not Sent,Сообщение с подтверждением встречи не отправлено, -"SMS not sent, please check SMS Settings","СМС не отправлено, проверьте настройки СМС", +"SMS not sent, please check SMS Settings","SMS не отправлено, проверьте настройки SMS", Healthcare Service Unit Type cannot have both {0} and {1},Тип единицы медицинского обслуживания не может содержать одновременно {0} и {1}, Healthcare Service Unit Type must allow atleast one among {0} and {1},Тип единицы медицинского обслуживания должен допускать хотя бы одно из {0} и {1}, Set Response Time and Resolution Time for Priority {0} in row {1}.,Задайте время ответа и время разрешения для приоритета {0} в строке {1}., @@ -9579,8 +9483,8 @@ This role is allowed to submit transactions that exceed credit limits,"Эта р Show Inclusive Tax in Print,Показать включенный налог в печати, Only select this if you have set up the Cash Flow Mapper documents,"Выбирайте это только в том случае, если вы настроили документы Cash Flow Mapper.", Payment Channel,Платежный канал, -Is Purchase Order Required for Purchase Invoice & Receipt Creation?,Требуется ли заказ на покупку для создания счета-фактуры и квитанции?, -Is Purchase Receipt Required for Purchase Invoice Creation?,Требуется ли квитанция о покупке для создания счета-фактуры?, +Is Purchase Order Required for Purchase Invoice & Receipt Creation?,Требуется ли заказ на покупку для создания счета и квитанции?, +Is Purchase Receipt Required for Purchase Invoice Creation?,Требуется ли квитанция о покупке для создания счета?, Maintain Same Rate Throughout the Purchase Cycle,Поддерживайте одинаковую ставку на протяжении всего цикла покупки, Allow Item To Be Added Multiple Times in a Transaction,Разрешить добавление элемента несколько раз в транзакцию, Suppliers,Поставщики, @@ -9597,7 +9501,6 @@ Security Credential,Учетные данные безопасности, Get Account Balance,Получить остаток на счете, Please set the initiator name and the security credential,Установите имя инициатора и учетные данные безопасности, Inpatient Medication Entry,Прием лекарств в стационаре, -HLC-IME-.YYYY.-,HLC-IME-.YYYY.-, Item Code (Drug),Код товара (лекарство), Medication Orders,Заказы на лекарства, Get Pending Medication Orders,Получите отложенные заказы на лекарства, @@ -9612,7 +9515,6 @@ Drug Name,Название препарата, Against Inpatient Medication Order,Приказ против стационарного лечения, Against Inpatient Medication Order Entry,Внесение запрета на прием лекарств в стационаре, Inpatient Medication Order,Заказ лекарств в стационаре, -HLC-IMO-.YYYY.-,HLC-IMO-.YYYY.-, Total Orders,Всего заказов, Completed Orders,Выполненные заказы, Add Medication Orders,Добавить заказы на лекарства, @@ -9638,8 +9540,8 @@ Purchase Order already created for all Sales Order items,Заказ на пос Select Items,Выбрать элементы, Against Default Supplier,Против дефолтного поставщика, Auto close Opportunity after the no. of days mentioned above,"Автоматическое закрытие Возможность после нет. дней, упомянутых выше", -Is Sales Order Required for Sales Invoice & Delivery Note Creation?,Требуется ли заказ на продажу для создания счета-фактуры и накладной?, -Is Delivery Note Required for Sales Invoice Creation?,Требуется ли накладная для создания счета-фактуры?, +Is Sales Order Required for Sales Invoice & Delivery Note Creation?,Требуется ли заказ на продажу для создания счета и накладной?, +Is Delivery Note Required for Sales Invoice Creation?,Требуется ли накладная для создания счета?, How often should Project and Company be updated based on Sales Transactions?,Как часто следует обновлять проект и компанию на основе сделок купли-продажи?, Allow User to Edit Price List Rate in Transactions,Разрешить пользователю изменять ставку прайс-листа в транзакциях, Allow Item to Be Added Multiple Times in a Transaction,Разрешить добавление элемента несколько раз в транзакцию, @@ -9653,8 +9555,8 @@ Automatically Set Serial Nos Based on FIFO,Автоматическая уста Set Qty in Transactions Based on Serial No Input,Установить количество транзакций на основе серийного номера ввода, Raise Material Request When Stock Reaches Re-order Level,"Поднимите запрос на материалы, когда запас достигает уровня повторного заказа", Notify by Email on Creation of Automatic Material Request,Уведомление по электронной почте о создании автоматического запроса материалов, -Allow Material Transfer from Delivery Note to Sales Invoice,Разрешить перенос материала из накладной в счет-фактуру, -Allow Material Transfer from Purchase Receipt to Purchase Invoice,Разрешить перенос материала из квитанции о покупке в счет-фактуру, +Allow Material Transfer from Delivery Note to Sales Invoice,Разрешить перенос материала из накладной в счет, +Allow Material Transfer from Purchase Receipt to Purchase Invoice,Разрешить перенос материала из квитанции о покупке в счет, Freeze Stocks Older Than (Days),Заморозить запасы старше (дней), Role Allowed to Edit Frozen Stock,"Роль, разрешенная для редактирования замороженных запасов", The unallocated amount of Payment Entry {0} is greater than the Bank Transaction's unallocated amount,Нераспределенная сумма платежной записи {0} превышает нераспределенную сумму банковской операции., @@ -9689,10 +9591,10 @@ Row #{}: No batch selected against item: {}. Please select a batch or remove it Payment amount cannot be less than or equal to 0,Сумма платежа не может быть меньше или равна 0, Please enter the phone number first,"Пожалуйста, сначала введите номер телефона", Row #{}: {} {} does not exist.,Строка № {}: {} {} не существует., -Row #{0}: {1} is required to create the Opening {2} Invoices,Строка № {0}: {1} требуется для создания начальных {2} счетов-фактур, +Row #{0}: {1} is required to create the Opening {2} Invoices,Строка № {0}: {1} требуется для создания начальных {2} счетов, You had {} errors while creating opening invoices. Check {} for more details,При создании начальных счетов у вас было {} ошибок. Проверьте {} для получения дополнительной информации, Error Occured,Произошла ошибка, -Opening Invoice Creation In Progress,Открытие счета-фактуры в процессе создания, +Opening Invoice Creation In Progress,Открытие счета в процессе создания, Creating {} out of {} {},Создание {} из {} {}, (Serial No: {0}) cannot be consumed as it's reserverd to fullfill Sales Order {1}.,"(Серийный номер: {0}) нельзя использовать, поскольку он зарезервирован для выполнения заказа на продажу {1}.", Item {0} {1},Пункт {0} {1}, @@ -9756,9 +9658,9 @@ You can redeem upto {0}.,Вы можете использовать до {0}., Enter amount to be redeemed.,Введите сумму к выкупу., You cannot redeem more than {0}.,Вы не можете обменять более {0}., Open Form View,Открыть просмотр формы, -POS invoice {0} created succesfully,Счет-фактура POS {0} успешно создана, +POS invoice {0} created succesfully,Счет POS {0} успешно создана, Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2}.,Недостаточно количества на складе для кода товара: {0} на складе {1}. Доступное количество {2}., -Serial No: {0} has already been transacted into another POS Invoice.,Серийный номер: {0} уже был переведен в другой счет-фактуру торговой точки., +Serial No: {0} has already been transacted into another POS Invoice.,Серийный номер: {0} уже был переведен в другой счет торговой точки., Balance Serial No,Серийный номер весов, Warehouse: {0} does not belong to {1},Склад: {0} не принадлежит {1}, Please select batches for batched item {0},Выберите партии для товара {0}, @@ -9771,10 +9673,10 @@ Cannot find Item with this Barcode,Не удается найти товар с {0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2},"{0} является обязательным. Возможно, запись обмена валют не создана для {1} - {2}", {} has submitted assets linked to it. You need to cancel the assets to create purchase return.,"{} отправил связанные с ним активы. Вам необходимо отменить активы, чтобы создать возврат покупки.", Cannot cancel this document as it is linked with submitted asset {0}. Please cancel it to continue.,"Невозможно отменить этот документ, поскольку он связан с отправленным объектом {0}. Пожалуйста, отмените его, чтобы продолжить.", -Row #{}: Serial No. {} has already been transacted into another POS Invoice. Please select valid serial no.,"Строка № {}: серийный номер {} уже переведен в другой счет-фактуру торговой точки. Пожалуйста, выберите действительный серийный номер.", -Row #{}: Serial Nos. {} has already been transacted into another POS Invoice. Please select valid serial no.,"Строка № {}: Серийные номера {} уже были переведены в другой счет-фактуру торговой точки. Пожалуйста, выберите действительный серийный номер.", +Row #{}: Serial No. {} has already been transacted into another POS Invoice. Please select valid serial no.,"Строка № {}: серийный номер {} уже переведен в другой счет торговой точки. Пожалуйста, выберите действительный серийный номер.", +Row #{}: Serial Nos. {} has already been transacted into another POS Invoice. Please select valid serial no.,"Строка № {}: Серийные номера {} уже были переведены в другой счет торговой точки. Пожалуйста, выберите действительный серийный номер.", Item Unavailable,Товар недоступен, -Row #{}: Serial No {} cannot be returned since it was not transacted in original invoice {},"Строка № {}: Серийный номер {} не может быть возвращен, поскольку он не был указан в исходном счете-фактуре {}", +Row #{}: Serial No {} cannot be returned since it was not transacted in original invoice {},"Строка № {}: Серийный номер {} не может быть возвращен, поскольку он не был указан в исходном счете {}", Please set default Cash or Bank account in Mode of Payment {},Установите по умолчанию наличный или банковский счет в режиме оплаты {}, Please set default Cash or Bank account in Mode of Payments {},Установите по умолчанию наличный или банковский счет в режиме оплаты {}, Please ensure {} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account.,"Убедитесь, что счет {} является балансом. Вы можете изменить родительский счет на счет баланса или выбрать другой счет.", @@ -9785,7 +9687,7 @@ or it is not the default inventory account,или это не учетная з Expense Head Changed,Расходная часть изменена, because expense is booked against this account in Purchase Receipt {},поскольку расходы регистрируются по этому счету в квитанции о покупке {}, as no Purchase Receipt is created against Item {}. ,поскольку для элемента {} не создается квитанция о покупке., -This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice,"Это сделано для обработки учета в тех случаях, когда квитанция о покупке создается после счета-фактуры.", +This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice,"Это сделано для обработки учета в тех случаях, когда квитанция о покупке создается после счета.", Purchase Order Required for item {},Требуется заказ на покупку для товара {}, To submit the invoice without purchase order please set {} ,"Чтобы отправить счет без заказа на покупку, установите {}", as {} in {},как в {}, @@ -9795,22 +9697,22 @@ To submit the invoice without purchase receipt please set {} ,"Чтобы отп Mandatory Purchase Receipt,Квитанция об обязательной покупке, POS Profile {} does not belongs to company {},Профиль POS {} не принадлежит компании {}, User {} is disabled. Please select valid user/cashier,Пользователь {} отключен. Выберите действующего пользователя / кассира, -Row #{}: Original Invoice {} of return invoice {} is {}. ,Строка № {}: Исходный счет-фактура {} обратного счета-фактуры {}: {}., -Original invoice should be consolidated before or along with the return invoice.,Оригинальный счет-фактура должен быть объединен до или вместе с обратным счетом-фактурой., +Row #{}: Original Invoice {} of return invoice {} is {}. ,Строка № {}: Исходный счет {} обратного счета {}: {}., +Original invoice should be consolidated before or along with the return invoice.,Оригинальный счет должен быть объединен до или вместе с обратным счетом., You can add original invoice {} manually to proceed.,"Чтобы продолжить, вы можете добавить исходный счет {} вручную.", Please ensure {} account is a Balance Sheet account. ,"Убедитесь, что счет {} является балансом.", You can change the parent account to a Balance Sheet account or select a different account.,Вы можете изменить родительский счет на счет баланса или выбрать другой счет., Please ensure {} account is a Receivable account. ,"Убедитесь, что счет {} является счетом дебиторской задолженности.", Change the account type to Receivable or select a different account.,Измените тип учетной записи на Дебиторскую задолженность или выберите другую учетную запись., -{} can't be cancelled since the Loyalty Points earned has been redeemed. First cancel the {} No {},"{} не может быть отменен, так как заработанные очки лояльности были погашены. Сначала отмените {} Нет {}", +{} can't be cancelled since the Loyalty Points earned has been redeemed. First cancel the {} No {},"{} не может быть отменен, так как заработанные баллы лояльности были погашены. Сначала отмените {} № {}", already exists,уже существует, POS Closing Entry {} against {} between selected period,Закрытие торговой точки {} против {} между выбранным периодом, -POS Invoice is {},Счет-фактура POS: {}, +POS Invoice is {},Счет POS {}, POS Profile doesn't matches {},Профиль POS не соответствует {}, -POS Invoice is not {},Счет-фактура POS не {}, -POS Invoice isn't created by user {},Счет-фактура POS не создается пользователем {}, +POS Invoice is not {},Счет POS не {}, +POS Invoice isn't created by user {},Счет POS не создается пользователем {}, Row #{}: {},Строка #{}: {}, -Invalid POS Invoices,Недействительные счета-фактуры POS, +Invalid POS Invoices,Недействительные счета POS, Please add the account to root level Company - {},"Пожалуйста, добавьте аккаунт в компанию корневого уровня - {}", "While creating account for Child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA","При создании аккаунта для дочерней компании {0} родительский аккаунт {1} не найден. Пожалуйста, создайте родительский аккаунт в соответствующем сертификате подлинности", Account Not Found,Счет не найден, @@ -9837,4 +9739,17 @@ Get Items from Material Requests against this Supplier,Получить това Enable European Access,Включить европейский доступ, Creating Purchase Order ...,Создание заказа на поставку ..., "Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only.","Выберите поставщика из списка поставщиков по умолчанию для позиций ниже. При выборе Заказ на поставку будет сделан в отношении товаров, принадлежащих только выбранному Поставщику.", -Row #{}: You must select {} serial numbers for item {}.,Строка № {}: необходимо выбрать {} серийных номеров для позиции {}., +Row #{}: You must select {} serial numbers for item {}.,Строка №{}: необходимо выбрать {} серийных номеров для позиции {}., +Items & Pricing,Продукты и цены, +Average Completion,Средняя готовность, +Overdue,Просрочено, +Overdue Tasks, Просроченные задачи, +Completed,Завершенно, +Completed Tasks,Выполненные задачи, +Total Tasks,Всего задач, +Build,Конструктор, +Amend,Исправить, +Role Allowed to Over Deliver/Receive,"Роль, разрешенная для сверхдоставки/получения", +Unit of Measure (UOM),Единицы измерения (ЕИ), +Bank Reconciliation Tool,Инструмент сверки банковских счетов, +Delayed Tasks Summary,Сводка отложенных задач, diff --git a/erpnext/utilities/activation.py b/erpnext/utilities/activation.py index 7b2df5efd1..4c8379e41c 100644 --- a/erpnext/utilities/activation.py +++ b/erpnext/utilities/activation.py @@ -22,7 +22,6 @@ def get_level(): "Item": 5, "Journal Entry": 3, "Lead": 3, - "Leave Application": 5, "Material Request": 5, "Opportunity": 5, "Payment Entry": 2, @@ -31,8 +30,6 @@ def get_level(): "Purchase Invoice": 5, "Purchase Receipt": 5, "Quotation": 3, - "Salary Slip": 5, - "Salary Structure": 5, "Sales Order": 2, "Sales Invoice": 2, "Stock Entry": 3, @@ -137,7 +134,7 @@ def get_help_messages(): frappe._dict( doctype="Employee", title=_("Create Employee Records"), - description=_("Create Employee records to manage leaves, expense claims and payroll"), + description=_("Create Employee records."), action=_("Create Employee"), route="List/Employee", target=3, diff --git a/erpnext/utilities/bot.py b/erpnext/utilities/bot.py deleted file mode 100644 index 5c2e576dd2..0000000000 --- a/erpnext/utilities/bot.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt - - -import frappe -from frappe import _ -from frappe.utils.bot import BotParser - - -class FindItemBot(BotParser): - def get_reply(self): - if self.startswith("where is", "find item", "locate"): - if not frappe.has_permission("Warehouse"): - raise frappe.PermissionError - - item = "%{0}%".format(self.strip_words(self.query, "where is", "find item", "locate")) - items = frappe.db.sql( - """select name from `tabItem` where item_code like %(txt)s - or item_name like %(txt)s or description like %(txt)s""", - dict(txt=item), - ) - - if items: - out = [] - warehouses = frappe.get_all("Warehouse") - for item in items: - found = False - for warehouse in warehouses: - qty = frappe.db.get_value( - "Bin", {"item_code": item[0], "warehouse": warehouse.name}, "actual_qty" - ) - if qty: - out.append( - _("{0} units of [{1}](/app/Form/Item/{1}) found in [{2}](/app/Form/Warehouse/{2})").format( - qty, item[0], warehouse.name - ) - ) - found = True - - if not found: - out.append(_("[{0}](/app/Form/Item/{0}) is out of stock").format(item[0])) - - return "\n\n".join(out) - - else: - return _("Did not find any item called {0}").format(item) diff --git a/erpnext/utilities/doctype/video/video.py b/erpnext/utilities/doctype/video/video.py index a39d0a95eb..15dbccde89 100644 --- a/erpnext/utilities/doctype/video/video.py +++ b/erpnext/utilities/doctype/video/video.py @@ -9,6 +9,7 @@ import frappe import pytz from frappe import _ from frappe.model.document import Document +from frappe.utils import cint from pyyoutube import Api @@ -46,7 +47,7 @@ def is_tracking_enabled(): def get_frequency(value): # Return numeric value from frequency field, return 1 as fallback default value: 1 hour if value != "Daily": - return frappe.utils.cint(value[:2].strip()) + return cint(value[:2].strip()) elif value: return 24 return 1 @@ -120,24 +121,12 @@ def batch_update_youtube_data(): video_stats = entry.to_dict().get("statistics") video_id = entry.to_dict().get("id") stats = { - "like_count": video_stats.get("likeCount"), - "view_count": video_stats.get("viewCount"), - "dislike_count": video_stats.get("dislikeCount"), - "comment_count": video_stats.get("commentCount"), - "video_id": video_id, + "like_count": cint(video_stats.get("likeCount")), + "view_count": cint(video_stats.get("viewCount")), + "dislike_count": cint(video_stats.get("dislikeCount")), + "comment_count": cint(video_stats.get("commentCount")), } - - frappe.db.sql( - """ - UPDATE `tabVideo` - SET - like_count = %(like_count)s, - view_count = %(view_count)s, - dislike_count = %(dislike_count)s, - comment_count = %(comment_count)s - WHERE youtube_video_id = %(video_id)s""", - stats, - ) + frappe.db.set_value("Video", video_id, stats) video_list = frappe.get_all("Video", fields=["youtube_video_id"]) if len(video_list) > 50: diff --git a/erpnext/utilities/naming.py b/erpnext/utilities/naming.py new file mode 100644 index 0000000000..52bbadef14 --- /dev/null +++ b/erpnext/utilities/naming.py @@ -0,0 +1,60 @@ +import frappe +from frappe.model.naming import get_default_naming_series + + +class NamingSeriesNotSetError(frappe.ValidationError): + pass + + +def set_by_naming_series( + doctype, fieldname, naming_series, hide_name_field=True, make_mandatory=1 +): + """Change a doctype's naming to user naming series""" + from frappe.custom.doctype.property_setter.property_setter import make_property_setter + + if naming_series: + make_property_setter( + doctype, "naming_series", "hidden", 0, "Check", validate_fields_for_doctype=False + ) + make_property_setter( + doctype, "naming_series", "reqd", make_mandatory, "Check", validate_fields_for_doctype=False + ) + + # set values for mandatory + try: + frappe.db.sql( + """update `tab{doctype}` set naming_series={s} where + ifnull(naming_series, '')=''""".format( + doctype=doctype, s="%s" + ), + get_default_naming_series(doctype), + ) + except NamingSeriesNotSetError: + pass + + if hide_name_field: + make_property_setter(doctype, fieldname, "reqd", 0, "Check", validate_fields_for_doctype=False) + make_property_setter( + doctype, fieldname, "hidden", 1, "Check", validate_fields_for_doctype=False + ) + else: + make_property_setter( + doctype, "naming_series", "reqd", 0, "Check", validate_fields_for_doctype=False + ) + make_property_setter( + doctype, "naming_series", "hidden", 1, "Check", validate_fields_for_doctype=False + ) + + if hide_name_field: + make_property_setter( + doctype, fieldname, "hidden", 0, "Check", validate_fields_for_doctype=False + ) + make_property_setter(doctype, fieldname, "reqd", 1, "Check", validate_fields_for_doctype=False) + + # set values for mandatory + frappe.db.sql( + """update `tab{doctype}` set `{fieldname}`=`name` where + ifnull({fieldname}, '')=''""".format( + doctype=doctype, fieldname=fieldname + ) + ) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 73cbcd4094..cd1bf9f321 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -5,7 +5,7 @@ import frappe import frappe.share from frappe import _ -from frappe.utils import cint, cstr, flt, get_time, now_datetime +from frappe.utils import cint, flt, get_time, now_datetime from erpnext.controllers.status_updater import StatusUpdater @@ -30,64 +30,6 @@ class TransactionBase(StatusUpdater): except ValueError: frappe.throw(_("Invalid Posting Time")) - def add_calendar_event(self, opts, force=False): - if ( - cstr(self.contact_by) != cstr(self._prev.contact_by) - or cstr(self.contact_date) != cstr(self._prev.contact_date) - or force - or (hasattr(self, "ends_on") and cstr(self.ends_on) != cstr(self._prev.ends_on)) - ): - - self.delete_events() - self._add_calendar_event(opts) - - def delete_events(self): - participations = frappe.get_all( - "Event Participants", - filters={ - "reference_doctype": self.doctype, - "reference_docname": self.name, - "parenttype": "Event", - }, - fields=["name", "parent"], - ) - - if participations: - for participation in participations: - total_participants = frappe.get_all( - "Event Participants", filters={"parenttype": "Event", "parent": participation.parent} - ) - - if len(total_participants) <= 1: - frappe.db.sql("delete from `tabEvent` where name='%s'" % participation.parent) - - frappe.db.sql("delete from `tabEvent Participants` where name='%s'" % participation.name) - - def _add_calendar_event(self, opts): - opts = frappe._dict(opts) - - if self.contact_date: - event = frappe.get_doc( - { - "doctype": "Event", - "owner": opts.owner or self.owner, - "subject": opts.subject, - "description": opts.description, - "starts_on": self.contact_date, - "ends_on": opts.ends_on, - "event_type": "Private", - } - ) - - event.append( - "event_participants", {"reference_doctype": self.doctype, "reference_docname": self.name} - ) - - event.insert(ignore_permissions=True) - - if frappe.db.exists("User", self.contact_by): - frappe.share.add("Event", event.name, self.contact_by, flags={"ignore_share_permission": True}) - def validate_uom_is_integer(self, uom_field, qty_fields): validate_uom_is_integer(self, uom_field, qty_fields) diff --git a/pyproject.toml b/pyproject.toml index 8043dd9906..5acfd39272 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,35 @@ +[project] +name = "erpnext" +authors = [ + { name = "Frappe Technologies Pvt Ltd", email = "developers@frappe.io"} +] +description = "Open Source ERP" +requires-python = ">=3.10" +readme = "README.md" +dynamic = ["version"] +dependencies = [ + # Core dependencies + "pycountry~=20.7.3", + "python-stdnum~=1.16", + "Unidecode~=1.2.0", + "redisearch~=2.1.0", + + # integration dependencies + "gocardless-pro~=1.22.0", + "googlemaps", + "plaid-python~=7.2.1", + "python-youtube~=0.8.0", + "taxjar~=1.9.2", + "tweepy~=3.10.0", +] + +[build-system] +requires = ["flit_core >=3.4,<4"] +build-backend = "flit_core.buildapi" + +[tool.bench.dev-dependencies] +hypothesis = "~=6.31.0" + [tool.black] line-length = 99 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 85ff515772..0000000000 --- a/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -# frappe # https://github.com/frappe/frappe is installed during bench-init -gocardless-pro~=1.22.0 -googlemaps -plaid-python~=7.2.1 -pycountry~=20.7.3 -PyGithub~=1.55 -python-stdnum~=1.16 -python-youtube~=0.8.0 -taxjar~=1.9.2 -tweepy~=3.10.0 -Unidecode~=1.2.0 -redisearch~=2.1.0 diff --git a/setup.py b/setup.py index 1faff0412f..29fa1c7f18 100644 --- a/setup.py +++ b/setup.py @@ -1,23 +1,6 @@ -from setuptools import setup, find_packages -import re, ast +# TODO: Remove this file when v15.0.0 is released +from setuptools import setup -# get version from __version__ variable in erpnext/__init__.py -_version_re = re.compile(r"__version__\s+=\s+(.*)") +name = "erpnext" -with open("requirements.txt") as f: - install_requires = f.read().strip().split("\n") - -with open("erpnext/__init__.py", "rb") as f: - version = str(ast.literal_eval(_version_re.search(f.read().decode("utf-8")).group(1))) - -setup( - name="erpnext", - version=version, - description="Open Source ERP", - author="Frappe Technologies", - author_email="info@erpnext.com", - packages=find_packages(), - zip_safe=False, - include_package_data=True, - install_requires=install_requires, -) +setup() diff --git a/sponsors.md b/sponsors.md index 125b3588e2..57adc8dad4 100644 --- a/sponsors.md +++ b/sponsors.md @@ -61,5 +61,13 @@ Bulk edit via export-import in Bank Reconciliation #4356 + + + Sapcon Instruments Pvt Ltd + + + Level wise BOM Cost Updation and Performance Enhancement #31072 + +